@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.
- package/package.json +4 -2
- package/.eslintrc.mjs +0 -22
- package/.storybook/main.ts +0 -20
- package/.storybook/preview.ts +0 -1
- package/CHANGELOG.md +0 -1144
- package/postcss.config.mjs +0 -5
- package/src/index.css +0 -4
- package/src/index.ts +0 -1
- package/src/lib/components/AnchorPositioner.tsx +0 -185
- package/src/lib/components/Button.tsx +0 -208
- package/src/lib/components/Card.tsx +0 -47
- package/src/lib/components/Carousel.tsx +0 -437
- package/src/lib/components/CarouselItem.tsx +0 -61
- package/src/lib/components/Checkbox.tsx +0 -120
- package/src/lib/components/Chip.tsx +0 -341
- package/src/lib/components/Chips.tsx +0 -331
- package/src/lib/components/ContextMenu.tsx +0 -109
- package/src/lib/components/DatePicker.tsx +0 -432
- package/src/lib/components/Divider.tsx +0 -20
- package/src/lib/components/Fab.tsx +0 -127
- package/src/lib/components/FabMenu.tsx +0 -239
- package/src/lib/components/IconButton.tsx +0 -146
- package/src/lib/components/Menu.tsx +0 -88
- package/src/lib/components/MenuGroup.tsx +0 -34
- package/src/lib/components/MenuHeadline.tsx +0 -9
- package/src/lib/components/MenuItem.tsx +0 -215
- package/src/lib/components/NavigationRail.tsx +0 -186
- package/src/lib/components/NavigationRailItem.tsx +0 -227
- package/src/lib/components/ProgressIndicator.tsx +0 -214
- package/src/lib/components/SideSheet.tsx +0 -135
- package/src/lib/components/Slider.tsx +0 -374
- package/src/lib/components/Snackbar.tsx +0 -77
- package/src/lib/components/Switch.tsx +0 -107
- package/src/lib/components/Tab.tsx +0 -123
- package/src/lib/components/TabGroup.tsx +0 -66
- package/src/lib/components/TabGroupContext.tsx +0 -16
- package/src/lib/components/TabPanel.tsx +0 -27
- package/src/lib/components/TabPanels.tsx +0 -76
- package/src/lib/components/Tabs.tsx +0 -105
- package/src/lib/components/TextField.tsx +0 -586
- package/src/lib/components/Tooltip.tsx +0 -217
- package/src/lib/components/index.ts +0 -34
- package/src/lib/config/config.interface.ts +0 -9
- package/src/lib/config/define-config.ts +0 -16
- package/src/lib/config/index.ts +0 -2
- package/src/lib/effects/AnimateOnScroll.ts +0 -391
- package/src/lib/effects/State.tsx +0 -90
- package/src/lib/effects/SyncedFixedWrapper.tsx +0 -62
- package/src/lib/effects/ThemeProvider.tsx +0 -174
- package/src/lib/effects/block-scroll.effect.tsx +0 -313
- package/src/lib/effects/custom-scroll/custom-scroll.effect.tsx +0 -407
- package/src/lib/effects/custom-scroll/custom-scroll.interface.ts +0 -29
- package/src/lib/effects/custom-scroll/custom-scroll.style.ts +0 -32
- package/src/lib/effects/custom-scroll/index.ts +0 -3
- package/src/lib/effects/index.ts +0 -7
- package/src/lib/effects/ripple/RippleEffect.tsx +0 -116
- package/src/lib/effects/ripple/index.tsx +0 -1
- package/src/lib/effects/scrollDriven.ts +0 -239
- package/src/lib/effects/smooth-scroll.effect.tsx +0 -112
- package/src/lib/effects/theme.worker.ts +0 -97
- package/src/lib/hooks/index.ts +0 -10
- package/src/lib/hooks/useTooltipTrigger.ts +0 -270
- package/src/lib/icon/icon.tsx +0 -125
- package/src/lib/icon/index.ts +0 -1
- package/src/lib/index.ts +0 -8
- package/src/lib/interfaces/button.interface.ts +0 -65
- package/src/lib/interfaces/card.interface.ts +0 -11
- package/src/lib/interfaces/carousel-item.interface.ts +0 -12
- package/src/lib/interfaces/carousel.interface.ts +0 -41
- package/src/lib/interfaces/checkbox.interface.ts +0 -39
- package/src/lib/interfaces/chip.interface.ts +0 -97
- package/src/lib/interfaces/chips.interface.ts +0 -37
- package/src/lib/interfaces/date-picker.interface.ts +0 -79
- package/src/lib/interfaces/divider.interface.ts +0 -7
- package/src/lib/interfaces/fab-menu.interface.ts +0 -12
- package/src/lib/interfaces/fab.interface.ts +0 -27
- package/src/lib/interfaces/icon-button.interface.ts +0 -38
- package/src/lib/interfaces/index.ts +0 -26
- package/src/lib/interfaces/menu-group.interface.ts +0 -13
- package/src/lib/interfaces/menu-item.interface.ts +0 -29
- package/src/lib/interfaces/menu.interface.ts +0 -19
- package/src/lib/interfaces/navigation-rail-item.interface.ts +0 -39
- package/src/lib/interfaces/navigation-rail.interface.ts +0 -39
- package/src/lib/interfaces/progress-indicator.interface.ts +0 -41
- package/src/lib/interfaces/side-sheet.interface.tsx +0 -28
- package/src/lib/interfaces/slider.interface.ts +0 -27
- package/src/lib/interfaces/snackbar.interface.ts +0 -13
- package/src/lib/interfaces/switch.interface.ts +0 -14
- package/src/lib/interfaces/tab-group.interface.ts +0 -13
- package/src/lib/interfaces/tab-panels.interface.ts +0 -21
- package/src/lib/interfaces/tab.interface.ts +0 -31
- package/src/lib/interfaces/tabs.interface.ts +0 -22
- package/src/lib/interfaces/text-field.interface.ts +0 -61
- package/src/lib/interfaces/tooltip.interface.ts +0 -61
- package/src/lib/styles/button.style.ts +0 -136
- package/src/lib/styles/card.style.ts +0 -29
- package/src/lib/styles/carousel-item.style.ts +0 -24
- package/src/lib/styles/carousel.style.ts +0 -22
- package/src/lib/styles/checkbox.style.ts +0 -64
- package/src/lib/styles/chip.style.ts +0 -62
- package/src/lib/styles/chips.style.ts +0 -20
- package/src/lib/styles/date-picker.style.ts +0 -43
- package/src/lib/styles/divider.style.ts +0 -31
- package/src/lib/styles/fab-menu.style.ts +0 -29
- package/src/lib/styles/fab.style.ts +0 -49
- package/src/lib/styles/icon-button.style.ts +0 -168
- package/src/lib/styles/index.ts +0 -25
- package/src/lib/styles/menu-group.style.ts +0 -34
- package/src/lib/styles/menu-headline.style.ts +0 -20
- package/src/lib/styles/menu-item.style.ts +0 -45
- package/src/lib/styles/menu.style.ts +0 -32
- package/src/lib/styles/navigation-rail-item.style.ts +0 -56
- package/src/lib/styles/navigation-rail.style.ts +0 -36
- package/src/lib/styles/progress-indicator.style.ts +0 -72
- package/src/lib/styles/side-sheet.style.ts +0 -45
- package/src/lib/styles/slider.style.ts +0 -41
- package/src/lib/styles/snackbar.style.ts +0 -26
- package/src/lib/styles/switch.style.ts +0 -67
- package/src/lib/styles/tab-panels.style.ts +0 -35
- package/src/lib/styles/tab.style.ts +0 -78
- package/src/lib/styles/tabs.style.ts +0 -22
- package/src/lib/styles/text-field.style.ts +0 -115
- package/src/lib/styles/tooltip.style.ts +0 -48
- package/src/lib/utils/component-helper.ts +0 -134
- package/src/lib/utils/component.ts +0 -34
- package/src/lib/utils/index.ts +0 -7
- package/src/lib/utils/string.ts +0 -9
- package/src/lib/utils/styles/classnames.ts +0 -49
- package/src/lib/utils/styles/get-classname.ts +0 -96
- package/src/lib/utils/styles/index.ts +0 -4
- package/src/lib/utils/styles/use-classnames.ts +0 -25
- package/src/stories/action/button.stories.tsx +0 -86
- package/src/stories/action/fab.stories.tsx +0 -54
- package/src/stories/action/icon-button.stories.tsx +0 -134
- package/src/stories/assets/accessibility.png +0 -0
- package/src/stories/assets/accessibility.svg +0 -5
- package/src/stories/assets/addon-library.png +0 -0
- package/src/stories/assets/assets.png +0 -0
- package/src/stories/assets/context.png +0 -0
- package/src/stories/assets/discord.svg +0 -15
- package/src/stories/assets/docs.png +0 -0
- package/src/stories/assets/figma-plugin.png +0 -0
- package/src/stories/assets/github.svg +0 -3
- package/src/stories/assets/share.png +0 -0
- package/src/stories/assets/styling.png +0 -0
- package/src/stories/assets/testing.png +0 -0
- package/src/stories/assets/theming.png +0 -0
- package/src/stories/assets/tutorials.svg +0 -12
- package/src/stories/assets/youtube.svg +0 -4
- package/src/stories/communication/ProgressIndicator.stories.tsx +0 -57
- package/src/stories/communication/SnackBar.stories.tsx +0 -32
- package/src/stories/communication/tool-tip.stories.tsx +0 -133
- package/src/stories/containment/card.stories.tsx +0 -42
- package/src/stories/containment/carousel.stories.tsx +0 -65
- package/src/stories/containment/divider.stories.tsx +0 -35
- package/src/stories/containment/slide-sheet.stories.tsx +0 -45
- package/src/stories/effect/smooth-scroll.stories.tsx +0 -54
- package/src/stories/navigation/navigation-rail/navigation-rail-item.stories.tsx +0 -65
- package/src/stories/navigation/navigation-rail/navigation-rail.stories.tsx +0 -122
- package/src/stories/navigation/tabs/tab.stories.tsx +0 -57
- package/src/stories/navigation/tabs/tabs.stories.tsx +0 -102
- package/src/stories/selection/slider.stories.tsx +0 -85
- package/src/stories/selection/switch.stories.tsx +0 -46
- package/src/stories/text-inputs/text-field.stories.tsx +0 -135
- package/src/tests/Button.spec.tsx +0 -67
- package/src/tests/useClassNames.spec.tsx +0 -82
- package/src/udixio.css +0 -120
- package/theme.config.ts +0 -7
- package/tsconfig.json +0 -16
- package/tsconfig.lib.json +0 -51
- package/tsconfig.spec.json +0 -37
- package/tsconfig.storybook.json +0 -38
- package/vite.config.ts +0 -96
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { TabPanelsInterface, TabPanelInterface } from '../interfaces';
|
|
2
|
-
import {
|
|
3
|
-
type ClassNameComponent,
|
|
4
|
-
classNames,
|
|
5
|
-
createUseClassNames,
|
|
6
|
-
defaultClassNames,
|
|
7
|
-
} from '../utils';
|
|
8
|
-
|
|
9
|
-
const tabPanelsConfig: ClassNameComponent<TabPanelsInterface> = () => ({
|
|
10
|
-
tabPanels: classNames('overflow-hidden'),
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
export const tabPanelsStyle = defaultClassNames<TabPanelsInterface>(
|
|
14
|
-
'tabPanels',
|
|
15
|
-
tabPanelsConfig,
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
export const useTabPanelsStyle = createUseClassNames<TabPanelsInterface>(
|
|
19
|
-
'tabPanels',
|
|
20
|
-
tabPanelsConfig,
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
const tabPanelConfig: ClassNameComponent<TabPanelInterface> = () => ({
|
|
24
|
-
tabPanel: classNames(''),
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
export const tabPanelStyle = defaultClassNames<TabPanelInterface>(
|
|
28
|
-
'tabPanel',
|
|
29
|
-
tabPanelConfig,
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
export const useTabPanelStyle = createUseClassNames<TabPanelInterface>(
|
|
33
|
-
'tabPanel',
|
|
34
|
-
tabPanelConfig,
|
|
35
|
-
);
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type ClassNameComponent,
|
|
3
|
-
classNames,
|
|
4
|
-
createUseClassNames,
|
|
5
|
-
defaultClassNames,
|
|
6
|
-
} from '../utils';
|
|
7
|
-
import { TabInterface } from '../interfaces';
|
|
8
|
-
|
|
9
|
-
const tabConfig: ClassNameComponent<TabInterface> = ({
|
|
10
|
-
isSelected,
|
|
11
|
-
icon,
|
|
12
|
-
label,
|
|
13
|
-
variant,
|
|
14
|
-
}) => ({
|
|
15
|
-
tab: classNames(
|
|
16
|
-
'flex-1 group/tab outline-none flex px-4 justify-center items-center cursor-pointer',
|
|
17
|
-
{ 'z-10': isSelected },
|
|
18
|
-
Boolean(icon && label) && variant === 'primary' && 'h-16',
|
|
19
|
-
!(Boolean(icon && label) && variant === 'primary') && 'h-12',
|
|
20
|
-
),
|
|
21
|
-
stateLayer: classNames(
|
|
22
|
-
'absolute w-full h-full overflow-hidden left-1/2 top-1/2 transform -translate-y-1/2 -translate-x-1/2',
|
|
23
|
-
variant === 'primary' && {
|
|
24
|
-
'group-hover/tab:hover-state-on-surface group-focus-visible/tab:focus-state-on-surface':
|
|
25
|
-
!isSelected,
|
|
26
|
-
'group-hover/tab:hover-state-primary group-focus-visible/tab:focus-state-primary':
|
|
27
|
-
isSelected,
|
|
28
|
-
},
|
|
29
|
-
variant === 'secondary' &&
|
|
30
|
-
'group-hover/tab:hover-state-on-surface group-focus-visible/tab:focus-state-on-surface',
|
|
31
|
-
),
|
|
32
|
-
content: classNames(
|
|
33
|
-
'flex gap-0.5 h-full justify-center',
|
|
34
|
-
{
|
|
35
|
-
relative: variant == 'primary',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
'': Boolean(label && !icon),
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
variant === 'primary' && 'flex-col items-center',
|
|
42
|
-
variant === 'secondary' && {
|
|
43
|
-
'flex-col items-center': Boolean(!(label && icon)),
|
|
44
|
-
'flex-row items-center gap-2': Boolean(label && icon),
|
|
45
|
-
},
|
|
46
|
-
),
|
|
47
|
-
icon: classNames(
|
|
48
|
-
'h-6 w-6 p-0.5 !box-border',
|
|
49
|
-
variant === 'primary' && {
|
|
50
|
-
'text-on-surface-variant': !isSelected,
|
|
51
|
-
'text-primary': isSelected,
|
|
52
|
-
},
|
|
53
|
-
variant === 'secondary' && {
|
|
54
|
-
'text-on-surface-variant': !isSelected,
|
|
55
|
-
'text-on-surface': isSelected,
|
|
56
|
-
},
|
|
57
|
-
),
|
|
58
|
-
label: classNames(
|
|
59
|
-
'text-title-small text-nowrap',
|
|
60
|
-
variant === 'primary' && {
|
|
61
|
-
'text-on-surface-variant': !isSelected,
|
|
62
|
-
'text-primary': isSelected,
|
|
63
|
-
},
|
|
64
|
-
variant === 'secondary' && {
|
|
65
|
-
'text-on-surface-variant': !isSelected,
|
|
66
|
-
'text-on-surface': isSelected,
|
|
67
|
-
},
|
|
68
|
-
),
|
|
69
|
-
underline: classNames(
|
|
70
|
-
'bg-primary absolute w-full left-0 bottom-0',
|
|
71
|
-
variant === 'primary' && 'h-[3px] rounded-t',
|
|
72
|
-
variant === 'secondary' && 'h-0.5',
|
|
73
|
-
),
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
export const tabStyle = defaultClassNames<TabInterface>('tab', tabConfig);
|
|
77
|
-
|
|
78
|
-
export const useTabStyle = createUseClassNames<TabInterface>('tab', tabConfig);
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { TabsInterface } from '../interfaces';
|
|
2
|
-
import {
|
|
3
|
-
type ClassNameComponent,
|
|
4
|
-
classNames,
|
|
5
|
-
createUseClassNames,
|
|
6
|
-
defaultClassNames,
|
|
7
|
-
} from '../utils';
|
|
8
|
-
|
|
9
|
-
const tabsConfig: ClassNameComponent<TabsInterface> = ({ scrollable }) => ({
|
|
10
|
-
tabs: classNames(
|
|
11
|
-
'border-b border-surface-container-highest bg-surface',
|
|
12
|
-
'flex relative ',
|
|
13
|
-
{ 'overflow-x-auto': scrollable },
|
|
14
|
-
),
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
export const tabsStyle = defaultClassNames<TabsInterface>('tabs', tabsConfig);
|
|
18
|
-
|
|
19
|
-
export const useTabsStyle = createUseClassNames<TabsInterface>(
|
|
20
|
-
'tabs',
|
|
21
|
-
tabsConfig,
|
|
22
|
-
);
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
type ClassNameComponent,
|
|
4
|
-
classNames,
|
|
5
|
-
createUseClassNames,
|
|
6
|
-
defaultClassNames,
|
|
7
|
-
} from '../utils';
|
|
8
|
-
import { TextFieldInterface } from '../interfaces';
|
|
9
|
-
|
|
10
|
-
const textFieldConfig: ClassNameComponent<TextFieldInterface> = ({
|
|
11
|
-
disabled,
|
|
12
|
-
leadingIcon,
|
|
13
|
-
trailingIcon,
|
|
14
|
-
variant,
|
|
15
|
-
errorText,
|
|
16
|
-
isFocused,
|
|
17
|
-
value,
|
|
18
|
-
suffix,
|
|
19
|
-
multiline,
|
|
20
|
-
}) => ({
|
|
21
|
-
textField: classNames({
|
|
22
|
-
'opacity-[.38]': disabled,
|
|
23
|
-
}),
|
|
24
|
-
content: classNames(
|
|
25
|
-
'group/text-field transition-border duration-200 relative flex items-center ',
|
|
26
|
-
{ 'h-14': !multiline },
|
|
27
|
-
{
|
|
28
|
-
'border-on-surface-variant':
|
|
29
|
-
!errorText?.length && !isFocused && variant == 'filled',
|
|
30
|
-
'border-outline':
|
|
31
|
-
!errorText?.length && !isFocused && variant == 'outlined',
|
|
32
|
-
'border-primary': !errorText?.length && isFocused,
|
|
33
|
-
'border-error': !!errorText?.length,
|
|
34
|
-
},
|
|
35
|
-
{ 'bg-on-surface/[0.04]': disabled },
|
|
36
|
-
variant == 'filled' && [
|
|
37
|
-
'rounded-t overflow-hidden border-b',
|
|
38
|
-
{ 'bg-surface-container-highest': !disabled },
|
|
39
|
-
],
|
|
40
|
-
|
|
41
|
-
variant == 'outlined' && [
|
|
42
|
-
'border rounded box-border',
|
|
43
|
-
{
|
|
44
|
-
'border-[3px]': isFocused,
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
),
|
|
48
|
-
stateLayer: classNames(
|
|
49
|
-
'absolute -z-10 w-full h-full top-0 left-0',
|
|
50
|
-
{
|
|
51
|
-
hidden: variant == 'outlined',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
'group-state-on-surface': !disabled,
|
|
55
|
-
'focus-state-on-surface': isFocused,
|
|
56
|
-
},
|
|
57
|
-
),
|
|
58
|
-
label: classNames(
|
|
59
|
-
'inline-flex outline-none whitespace-nowrap',
|
|
60
|
-
{ 'text-on-surface-variant': !disabled && !errorText?.length },
|
|
61
|
-
{ 'text-on-surface': disabled },
|
|
62
|
-
{ 'text-error': !!errorText?.length },
|
|
63
|
-
{ 'text-primary': !errorText?.length && isFocused },
|
|
64
|
-
),
|
|
65
|
-
input: classNames(
|
|
66
|
-
'w-full resize-none px-4 text-body-large bg-[inherit] outline-none autofill:transition-colors autofill:duration-[5000000ms]',
|
|
67
|
-
{
|
|
68
|
-
' text-on-surface placeholder:text-on-surface-variant': !disabled,
|
|
69
|
-
'placeholder:text-on-surface text-on-surface': disabled,
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
'pr-0': !!suffix,
|
|
73
|
-
},
|
|
74
|
-
variant == 'filled' && ' pb-2 pt-6',
|
|
75
|
-
variant == 'outlined' && 'py-4 relative z-10',
|
|
76
|
-
),
|
|
77
|
-
activeIndicator: classNames(
|
|
78
|
-
'absolute w-0 inset-x-0 border-rounded mx-auto bottom-0',
|
|
79
|
-
variant == 'filled' && [
|
|
80
|
-
'h-[2px] transition-all duration-300',
|
|
81
|
-
{ 'bg-primary': !errorText?.length },
|
|
82
|
-
{ 'bg-error': !!errorText?.length },
|
|
83
|
-
{ '!w-full': isFocused },
|
|
84
|
-
],
|
|
85
|
-
),
|
|
86
|
-
supportingText: classNames(
|
|
87
|
-
' text-body-small px-4 pt-1',
|
|
88
|
-
{ 'text-on-surface-variant': !disabled && !errorText?.length },
|
|
89
|
-
{ 'text-on-surface': disabled },
|
|
90
|
-
{ '!w-full': isFocused },
|
|
91
|
-
{ 'text-error': !!errorText?.length },
|
|
92
|
-
),
|
|
93
|
-
leadingIcon: classNames([
|
|
94
|
-
'h-12 ml-3 flex items-center justify-center',
|
|
95
|
-
{ 'cursor-text': !React.isValidElement(leadingIcon) },
|
|
96
|
-
]),
|
|
97
|
-
trailingIcon: classNames('h-12 w-12 flex items-center justify-center', {
|
|
98
|
-
'cursor-text': !React.isValidElement(trailingIcon),
|
|
99
|
-
}),
|
|
100
|
-
suffix: classNames(
|
|
101
|
-
'text-on-surface-variant pl-0 pr-4',
|
|
102
|
-
variant == 'filled' && ' pb-2 pt-6',
|
|
103
|
-
variant == 'outlined' && 'py-4 relative z-10',
|
|
104
|
-
),
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
export const textFieldStyle = defaultClassNames<TextFieldInterface>(
|
|
108
|
-
'textField',
|
|
109
|
-
textFieldConfig,
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
export const useTextFieldStyle = createUseClassNames<TextFieldInterface>(
|
|
113
|
-
'textField',
|
|
114
|
-
textFieldConfig,
|
|
115
|
-
);
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type ClassNameComponent,
|
|
3
|
-
classNames,
|
|
4
|
-
createUseClassNames,
|
|
5
|
-
defaultClassNames,
|
|
6
|
-
} from '../utils';
|
|
7
|
-
import { ToolTipInterface } from '../interfaces';
|
|
8
|
-
|
|
9
|
-
const toolTipConfig: ClassNameComponent<ToolTipInterface> = ({
|
|
10
|
-
position,
|
|
11
|
-
variant,
|
|
12
|
-
}) => ({
|
|
13
|
-
toolTip: classNames(
|
|
14
|
-
' pointer-events-auto w-max z-10 absolute m-1 w-max-content max-w-[312px]',
|
|
15
|
-
variant == 'rich' &&
|
|
16
|
-
'bg-surface-container rounded-2xl text-on-surface-container shadow-2',
|
|
17
|
-
variant == 'plain' && 'bg-inverse-surface rounded text-inverse-on-surface ',
|
|
18
|
-
{
|
|
19
|
-
'bottom-full left-1/2 -translate-x-1/2': position == 'top',
|
|
20
|
-
'top-full left-1/2 -translate-x-1/2': position == 'bottom',
|
|
21
|
-
'right-full top-1/2 -translate-y-1/2': position == 'left',
|
|
22
|
-
'left-full top-1/2 -translate-y-1/2': position == 'right',
|
|
23
|
-
'bottom-full right-full': position == 'top-left',
|
|
24
|
-
'bottom-full left-full': position == 'top-right',
|
|
25
|
-
'top-full right-full': position == 'bottom-left',
|
|
26
|
-
'top-full left-full': position == 'bottom-right',
|
|
27
|
-
},
|
|
28
|
-
),
|
|
29
|
-
container: classNames(
|
|
30
|
-
'pb-2',
|
|
31
|
-
variant == 'rich' && 'px-4 pt-3 ',
|
|
32
|
-
variant == 'plain' && 'px-2 py-1',
|
|
33
|
-
),
|
|
34
|
-
actions: classNames('flex gap-10 px-1 mt-2', variant == 'plain' && 'hidden'),
|
|
35
|
-
subHead: classNames('text-title-small mb-1', variant == 'plain' && 'hidden'),
|
|
36
|
-
supportingText: classNames(''),
|
|
37
|
-
content: classNames('w-full'),
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
export const toolStyle = defaultClassNames<ToolTipInterface>(
|
|
41
|
-
'toolTip',
|
|
42
|
-
toolTipConfig,
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
export const useToolTipStyle = createUseClassNames<ToolTipInterface>(
|
|
46
|
-
'toolTip',
|
|
47
|
-
toolTipConfig,
|
|
48
|
-
);
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { StyleProps } from './styles';
|
|
2
|
-
import { ComponentInterface } from './component';
|
|
3
|
-
|
|
4
|
-
export interface HTMLElements {
|
|
5
|
-
a: HTMLAnchorElement;
|
|
6
|
-
abbr: HTMLElement;
|
|
7
|
-
address: HTMLElement;
|
|
8
|
-
area: HTMLAreaElement;
|
|
9
|
-
article: HTMLElement;
|
|
10
|
-
aside: HTMLElement;
|
|
11
|
-
audio: HTMLAudioElement;
|
|
12
|
-
b: HTMLElement;
|
|
13
|
-
base: HTMLBaseElement;
|
|
14
|
-
bdi: HTMLElement;
|
|
15
|
-
bdo: HTMLElement;
|
|
16
|
-
big: HTMLElement;
|
|
17
|
-
blockquote: HTMLQuoteElement;
|
|
18
|
-
body: HTMLBodyElement;
|
|
19
|
-
br: HTMLBRElement;
|
|
20
|
-
button: HTMLButtonElement;
|
|
21
|
-
canvas: HTMLCanvasElement;
|
|
22
|
-
caption: HTMLElement;
|
|
23
|
-
center: HTMLElement;
|
|
24
|
-
cite: HTMLElement;
|
|
25
|
-
code: HTMLElement;
|
|
26
|
-
col: HTMLTableColElement;
|
|
27
|
-
colgroup: HTMLTableColElement;
|
|
28
|
-
data: HTMLDataElement;
|
|
29
|
-
datalist: HTMLDataListElement;
|
|
30
|
-
dd: HTMLElement;
|
|
31
|
-
del: HTMLModElement;
|
|
32
|
-
details: HTMLDetailsElement;
|
|
33
|
-
dfn: HTMLElement;
|
|
34
|
-
dialog: HTMLDialogElement;
|
|
35
|
-
div: HTMLDivElement;
|
|
36
|
-
dl: HTMLDListElement;
|
|
37
|
-
dt: HTMLElement;
|
|
38
|
-
em: HTMLElement;
|
|
39
|
-
embed: HTMLEmbedElement;
|
|
40
|
-
fieldset: HTMLFieldSetElement;
|
|
41
|
-
figcaption: HTMLElement;
|
|
42
|
-
figure: HTMLElement;
|
|
43
|
-
footer: HTMLElement;
|
|
44
|
-
form: HTMLFormElement;
|
|
45
|
-
h1: HTMLHeadingElement;
|
|
46
|
-
h2: HTMLHeadingElement;
|
|
47
|
-
h3: HTMLHeadingElement;
|
|
48
|
-
h4: HTMLHeadingElement;
|
|
49
|
-
h5: HTMLHeadingElement;
|
|
50
|
-
h6: HTMLHeadingElement;
|
|
51
|
-
head: HTMLHeadElement;
|
|
52
|
-
header: HTMLElement;
|
|
53
|
-
hgroup: HTMLElement;
|
|
54
|
-
hr: HTMLHRElement;
|
|
55
|
-
html: HTMLHtmlElement;
|
|
56
|
-
i: HTMLElement;
|
|
57
|
-
iframe: HTMLIFrameElement;
|
|
58
|
-
img: HTMLImageElement;
|
|
59
|
-
input: HTMLInputElement;
|
|
60
|
-
ins: HTMLModElement;
|
|
61
|
-
kbd: HTMLElement;
|
|
62
|
-
keygen: HTMLElement;
|
|
63
|
-
label: HTMLLabelElement;
|
|
64
|
-
legend: HTMLLegendElement;
|
|
65
|
-
li: HTMLLIElement;
|
|
66
|
-
link: HTMLLinkElement;
|
|
67
|
-
main: HTMLElement;
|
|
68
|
-
map: HTMLMapElement;
|
|
69
|
-
mark: HTMLElement;
|
|
70
|
-
menu: HTMLElement;
|
|
71
|
-
menuitem: HTMLElement;
|
|
72
|
-
meta: HTMLMetaElement;
|
|
73
|
-
meter: HTMLMeterElement;
|
|
74
|
-
nav: HTMLElement;
|
|
75
|
-
noindex: HTMLElement;
|
|
76
|
-
noscript: HTMLElement;
|
|
77
|
-
object: HTMLObjectElement;
|
|
78
|
-
ol: HTMLOListElement;
|
|
79
|
-
optgroup: HTMLOptGroupElement;
|
|
80
|
-
option: HTMLOptionElement;
|
|
81
|
-
output: HTMLOutputElement;
|
|
82
|
-
p: HTMLParagraphElement;
|
|
83
|
-
param: HTMLParamElement;
|
|
84
|
-
picture: HTMLElement;
|
|
85
|
-
pre: HTMLPreElement;
|
|
86
|
-
progress: HTMLProgressElement;
|
|
87
|
-
q: HTMLQuoteElement;
|
|
88
|
-
rp: HTMLElement;
|
|
89
|
-
rt: HTMLElement;
|
|
90
|
-
ruby: HTMLElement;
|
|
91
|
-
s: HTMLElement;
|
|
92
|
-
samp: HTMLElement;
|
|
93
|
-
search: HTMLElement;
|
|
94
|
-
slot: HTMLSlotElement;
|
|
95
|
-
script: HTMLScriptElement;
|
|
96
|
-
section: HTMLElement;
|
|
97
|
-
select: HTMLSelectElement;
|
|
98
|
-
small: HTMLElement;
|
|
99
|
-
source: HTMLSourceElement;
|
|
100
|
-
span: HTMLSpanElement;
|
|
101
|
-
strong: HTMLElement;
|
|
102
|
-
style: HTMLStyleElement;
|
|
103
|
-
sub: HTMLElement;
|
|
104
|
-
summary: HTMLElement;
|
|
105
|
-
sup: HTMLElement;
|
|
106
|
-
table: HTMLTableElement;
|
|
107
|
-
template: HTMLTemplateElement;
|
|
108
|
-
tbody: HTMLTableSectionElement;
|
|
109
|
-
td: HTMLTableDataCellElement;
|
|
110
|
-
textarea: HTMLTextAreaElement;
|
|
111
|
-
tfoot: HTMLTableSectionElement;
|
|
112
|
-
th: HTMLTableHeaderCellElement;
|
|
113
|
-
thead: HTMLTableSectionElement;
|
|
114
|
-
time: HTMLTimeElement;
|
|
115
|
-
title: HTMLTitleElement;
|
|
116
|
-
tr: HTMLTableRowElement;
|
|
117
|
-
track: HTMLTrackElement;
|
|
118
|
-
u: HTMLElement;
|
|
119
|
-
ul: HTMLUListElement;
|
|
120
|
-
var: HTMLElement;
|
|
121
|
-
video: HTMLVideoElement;
|
|
122
|
-
wbr: HTMLElement;
|
|
123
|
-
webview: HTMLWebViewElement;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// export type MotionComponentProps<
|
|
127
|
-
// Props extends object,
|
|
128
|
-
// States extends object,
|
|
129
|
-
// Elements extends string,
|
|
130
|
-
// ElementType extends keyof HTMLElements,
|
|
131
|
-
// > = ComponentProps<Props, States, Elements, ElementType> &
|
|
132
|
-
// Omit<HTMLMotionProps<ElementType>, 'ref' | 'className'>;
|
|
133
|
-
|
|
134
|
-
export type ComponentClassName<T extends ComponentInterface> = StyleProps<T>;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { JSX } from 'react/jsx-runtime';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { ComponentClassName, HTMLElements } from './component-helper';
|
|
4
|
-
import { HTMLMotionProps } from 'motion/react';
|
|
5
|
-
|
|
6
|
-
export type ReactProps<T extends ComponentInterface> = Omit<
|
|
7
|
-
JSX.IntrinsicElements[T['type']],
|
|
8
|
-
keyof T['props'] | 'className' | 'children'
|
|
9
|
-
> &
|
|
10
|
-
ComponentClassName<T> & {
|
|
11
|
-
ref?: React.RefObject<HTMLElements[T['type']] | null>;
|
|
12
|
-
} & T['props'];
|
|
13
|
-
|
|
14
|
-
export type MotionProps<T extends ComponentInterface> = ReactProps<T> &
|
|
15
|
-
HTMLMotionProps<T['type']>;
|
|
16
|
-
|
|
17
|
-
export interface LinkInterface<Props> {
|
|
18
|
-
type: 'a';
|
|
19
|
-
props: Props & { href?: string };
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface ActionInterface<Props> {
|
|
23
|
-
type: 'button';
|
|
24
|
-
props: Props & { href?: never };
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export type ActionOrLink<Props> = LinkInterface<Props> | ActionInterface<Props>;
|
|
28
|
-
|
|
29
|
-
export interface ComponentInterface {
|
|
30
|
-
type: keyof HTMLElements;
|
|
31
|
-
props?: object;
|
|
32
|
-
states?: object;
|
|
33
|
-
elements: string[];
|
|
34
|
-
}
|
package/src/lib/utils/index.ts
DELETED
package/src/lib/utils/string.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export function convertToKebabCase(text: string) {
|
|
2
|
-
return text
|
|
3
|
-
.replace(/([a-z])([A-Z])/g, '$1-$2') // Gérer les transitions camelCase (ajouter un tiret entre les lettres)
|
|
4
|
-
.toLowerCase() // Convertir tout en minuscules
|
|
5
|
-
.normalize('NFD') // Décomposer les caractères accentués
|
|
6
|
-
.replace(/[\u0300-\u036f]/g, '') // Supprimer les accents (diacritics)
|
|
7
|
-
.replace(/[^a-z0-9]+/g, '-') // Remplacer les caractères non-alphanumériques par des tirets
|
|
8
|
-
.replace(/^-+|-+$/g, ''); // Supprimer les tirets en début/fin
|
|
9
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ClassValue, clsx } from 'clsx';
|
|
2
|
-
import { extendTailwindMerge } from 'tailwind-merge';
|
|
3
|
-
|
|
4
|
-
type AdditionalClassGroupIds = 'font';
|
|
5
|
-
|
|
6
|
-
const twMerge = extendTailwindMerge<AdditionalClassGroupIds>({
|
|
7
|
-
override: {
|
|
8
|
-
classGroups: {
|
|
9
|
-
'text-color': [
|
|
10
|
-
{
|
|
11
|
-
text: [
|
|
12
|
-
(value: string) =>
|
|
13
|
-
!value.startsWith('display-') &&
|
|
14
|
-
!value.startsWith('headline-') &&
|
|
15
|
-
!value.startsWith('title-') &&
|
|
16
|
-
!value.startsWith('body-') &&
|
|
17
|
-
!value.startsWith('label-'),
|
|
18
|
-
],
|
|
19
|
-
},
|
|
20
|
-
],
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
extend: {
|
|
24
|
-
classGroups: {
|
|
25
|
-
font: [
|
|
26
|
-
{
|
|
27
|
-
text: [
|
|
28
|
-
(value: string) =>
|
|
29
|
-
value.startsWith('display-') ||
|
|
30
|
-
value.startsWith('headline-') ||
|
|
31
|
-
value.startsWith('title-') ||
|
|
32
|
-
value.startsWith('body-') ||
|
|
33
|
-
value.startsWith('label-'),
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
},
|
|
38
|
-
conflictingClassGroups: {
|
|
39
|
-
font: ['font'],
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
export const classNames = (...args: ClassValue[]) => {
|
|
45
|
-
return twMerge(clsx(args));
|
|
46
|
-
};
|
|
47
|
-
export const classnames = (...args: ClassValue[]) => {
|
|
48
|
-
return twMerge(clsx(args));
|
|
49
|
-
};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
import { ComponentInterface } from '../component';
|
|
3
|
-
import { convertToKebabCase } from '../string';
|
|
4
|
-
import { classnames } from './classnames';
|
|
5
|
-
|
|
6
|
-
type RequiredNullable<T> = {
|
|
7
|
-
[K in keyof T]-?: any;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export interface StyleProps<T extends ComponentInterface> {
|
|
11
|
-
className?: string | ClassNameComponent<T>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export type ClassNameComponent<T extends ComponentInterface> = (
|
|
15
|
-
states: T['states'] & T['props'],
|
|
16
|
-
) => Partial<Record<T['elements'][number], string>>;
|
|
17
|
-
|
|
18
|
-
export const getClassNames = <T extends ComponentInterface>(args: {
|
|
19
|
-
classNameList: (ClassNameComponent<T> | string | undefined)[];
|
|
20
|
-
default: T['elements'][0];
|
|
21
|
-
states: T['states'] & T['props'];
|
|
22
|
-
}): Record<T['elements'][number], string> => {
|
|
23
|
-
const classNames: Partial<Record<T['elements'][number], string[]>> = {};
|
|
24
|
-
args.classNameList.forEach((classNameComponent) => {
|
|
25
|
-
if (classNameComponent) {
|
|
26
|
-
if (typeof classNameComponent == 'string') {
|
|
27
|
-
(classNames[args.default] ??= []).push(classNameComponent);
|
|
28
|
-
} else {
|
|
29
|
-
const result = classNameComponent(args.states);
|
|
30
|
-
Object.entries(result).map((argsElement) => {
|
|
31
|
-
const [key, value] = argsElement as [T['elements'][number], string];
|
|
32
|
-
(classNames[key] ??= []).push(value);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const result = classNames as unknown as Record<T['elements'][number], string>;
|
|
39
|
-
|
|
40
|
-
Object.entries(classNames).map((argsElement) => {
|
|
41
|
-
// eslint-disable-next-line prefer-const
|
|
42
|
-
let [key, value] = argsElement as [T['elements'][number], string[]];
|
|
43
|
-
|
|
44
|
-
value = value.reverse();
|
|
45
|
-
|
|
46
|
-
if (key == args.default) {
|
|
47
|
-
value.unshift('relative');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
value.unshift(convertToKebabCase(key));
|
|
51
|
-
|
|
52
|
-
result[key] = classnames(...value);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
return result;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const defaultClassNames = <T extends ComponentInterface>(
|
|
59
|
-
element: T['elements'][0],
|
|
60
|
-
defaultClassName: ClassNameComponent<T> | string,
|
|
61
|
-
) => {
|
|
62
|
-
return (
|
|
63
|
-
states: RequiredNullable<T['props']> &
|
|
64
|
-
T['props'] &
|
|
65
|
-
T['states'] & {
|
|
66
|
-
className: ClassNameComponent<T> | string | undefined;
|
|
67
|
-
},
|
|
68
|
-
) =>
|
|
69
|
-
getClassNames({
|
|
70
|
-
classNameList: [states.className, defaultClassName],
|
|
71
|
-
default: element,
|
|
72
|
-
states,
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
export const createUseClassNames = <T extends ComponentInterface>(
|
|
77
|
-
element: T['elements'][0],
|
|
78
|
-
defaultClassName: ClassNameComponent<T> | string,
|
|
79
|
-
) => {
|
|
80
|
-
return (
|
|
81
|
-
states: T['states'] & T['props'] & {
|
|
82
|
-
className?: string | ClassNameComponent<T>;
|
|
83
|
-
},
|
|
84
|
-
): Record<T['elements'][number], string> => {
|
|
85
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
86
|
-
return useMemo(
|
|
87
|
-
() =>
|
|
88
|
-
getClassNames<T>({
|
|
89
|
-
classNameList: [states.className, defaultClassName],
|
|
90
|
-
default: element,
|
|
91
|
-
states,
|
|
92
|
-
}),
|
|
93
|
-
[states],
|
|
94
|
-
);
|
|
95
|
-
};
|
|
96
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
import { ComponentInterface } from '../component';
|
|
3
|
-
import { ClassNameComponent, getClassNames } from './get-classname';
|
|
4
|
-
|
|
5
|
-
export function useClassNames<T extends ComponentInterface>(
|
|
6
|
-
element: T['elements'][0],
|
|
7
|
-
defaultClassName: ClassNameComponent<T> | string,
|
|
8
|
-
states: (T['states'] & T['props']) & { className?: string | ClassNameComponent<T> },
|
|
9
|
-
): Record<T['elements'][number], string> {
|
|
10
|
-
return useMemo(
|
|
11
|
-
() =>
|
|
12
|
-
getClassNames<T>({
|
|
13
|
-
classNameList: [states?.className, defaultClassName],
|
|
14
|
-
default: element,
|
|
15
|
-
states: states as any,
|
|
16
|
-
}),
|
|
17
|
-
[element, defaultClassName, states],
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Documentation note:
|
|
22
|
-
// - This hook centralizes class name merging logic (string or function),
|
|
23
|
-
// prefixes each element key with its kebab-case name, and adds `relative` on the root element by default.
|
|
24
|
-
// - It preserves current order/priority where consumer overrides take precedence over defaults.
|
|
25
|
-
// - Pass overrides via props.className (string or function) — see Button for example usage.
|