@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,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
- }
@@ -1,7 +0,0 @@
1
- export * from './component-helper';
2
- export * from './component';
3
- export * from './component';
4
- export * from './component';
5
- export * from './component';
6
- export * from './component';
7
- export * from './styles';
@@ -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,4 +0,0 @@
1
- export * from './classnames';
2
- export * from './classnames';
3
- export * from './get-classname';
4
- export * from './use-classnames';
@@ -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.