@udixio/ui-react 2.10.12 → 2.10.14

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 (179) hide show
  1. package/dist/index.cjs +3 -3
  2. package/dist/index.js +2696 -2710
  3. package/dist/lib/effects/ThemeProvider.d.ts.map +1 -1
  4. package/dist/theme.worker.js +6633 -0
  5. package/package.json +4 -1
  6. package/.eslintrc.mjs +0 -22
  7. package/.storybook/main.ts +0 -20
  8. package/.storybook/preview.ts +0 -1
  9. package/CHANGELOG.md +0 -1130
  10. package/dist/scrollDriven-AP2yWhzi.js +0 -121
  11. package/postcss.config.mjs +0 -5
  12. package/src/index.css +0 -4
  13. package/src/index.ts +0 -1
  14. package/src/lib/components/AnchorPositioner.tsx +0 -185
  15. package/src/lib/components/Button.tsx +0 -208
  16. package/src/lib/components/Card.tsx +0 -47
  17. package/src/lib/components/Carousel.tsx +0 -437
  18. package/src/lib/components/CarouselItem.tsx +0 -61
  19. package/src/lib/components/Checkbox.tsx +0 -120
  20. package/src/lib/components/Chip.tsx +0 -341
  21. package/src/lib/components/Chips.tsx +0 -331
  22. package/src/lib/components/ContextMenu.tsx +0 -109
  23. package/src/lib/components/DatePicker.tsx +0 -432
  24. package/src/lib/components/Divider.tsx +0 -20
  25. package/src/lib/components/Fab.tsx +0 -127
  26. package/src/lib/components/FabMenu.tsx +0 -239
  27. package/src/lib/components/IconButton.tsx +0 -146
  28. package/src/lib/components/Menu.tsx +0 -88
  29. package/src/lib/components/MenuGroup.tsx +0 -34
  30. package/src/lib/components/MenuHeadline.tsx +0 -9
  31. package/src/lib/components/MenuItem.tsx +0 -215
  32. package/src/lib/components/NavigationRail.tsx +0 -186
  33. package/src/lib/components/NavigationRailItem.tsx +0 -227
  34. package/src/lib/components/ProgressIndicator.tsx +0 -214
  35. package/src/lib/components/SideSheet.tsx +0 -135
  36. package/src/lib/components/Slider.tsx +0 -374
  37. package/src/lib/components/Snackbar.tsx +0 -77
  38. package/src/lib/components/Switch.tsx +0 -107
  39. package/src/lib/components/Tab.tsx +0 -123
  40. package/src/lib/components/TabGroup.tsx +0 -66
  41. package/src/lib/components/TabGroupContext.tsx +0 -16
  42. package/src/lib/components/TabPanel.tsx +0 -27
  43. package/src/lib/components/TabPanels.tsx +0 -76
  44. package/src/lib/components/Tabs.tsx +0 -105
  45. package/src/lib/components/TextField.tsx +0 -586
  46. package/src/lib/components/Tooltip.tsx +0 -217
  47. package/src/lib/components/index.ts +0 -34
  48. package/src/lib/config/config.interface.ts +0 -9
  49. package/src/lib/config/define-config.ts +0 -16
  50. package/src/lib/config/index.ts +0 -2
  51. package/src/lib/effects/AnimateOnScroll.ts +0 -391
  52. package/src/lib/effects/State.tsx +0 -90
  53. package/src/lib/effects/SyncedFixedWrapper.tsx +0 -62
  54. package/src/lib/effects/ThemeProvider.tsx +0 -172
  55. package/src/lib/effects/block-scroll.effect.tsx +0 -313
  56. package/src/lib/effects/custom-scroll/custom-scroll.effect.tsx +0 -407
  57. package/src/lib/effects/custom-scroll/custom-scroll.interface.ts +0 -29
  58. package/src/lib/effects/custom-scroll/custom-scroll.style.ts +0 -32
  59. package/src/lib/effects/custom-scroll/index.ts +0 -3
  60. package/src/lib/effects/index.ts +0 -7
  61. package/src/lib/effects/ripple/RippleEffect.tsx +0 -116
  62. package/src/lib/effects/ripple/index.tsx +0 -1
  63. package/src/lib/effects/scrollDriven.ts +0 -239
  64. package/src/lib/effects/smooth-scroll.effect.tsx +0 -112
  65. package/src/lib/effects/theme.worker.ts +0 -97
  66. package/src/lib/hooks/index.ts +0 -10
  67. package/src/lib/hooks/useTooltipTrigger.ts +0 -270
  68. package/src/lib/icon/icon.tsx +0 -125
  69. package/src/lib/icon/index.ts +0 -1
  70. package/src/lib/index.ts +0 -8
  71. package/src/lib/interfaces/button.interface.ts +0 -65
  72. package/src/lib/interfaces/card.interface.ts +0 -11
  73. package/src/lib/interfaces/carousel-item.interface.ts +0 -12
  74. package/src/lib/interfaces/carousel.interface.ts +0 -41
  75. package/src/lib/interfaces/checkbox.interface.ts +0 -39
  76. package/src/lib/interfaces/chip.interface.ts +0 -97
  77. package/src/lib/interfaces/chips.interface.ts +0 -37
  78. package/src/lib/interfaces/date-picker.interface.ts +0 -79
  79. package/src/lib/interfaces/divider.interface.ts +0 -7
  80. package/src/lib/interfaces/fab-menu.interface.ts +0 -12
  81. package/src/lib/interfaces/fab.interface.ts +0 -27
  82. package/src/lib/interfaces/icon-button.interface.ts +0 -38
  83. package/src/lib/interfaces/index.ts +0 -26
  84. package/src/lib/interfaces/menu-group.interface.ts +0 -13
  85. package/src/lib/interfaces/menu-item.interface.ts +0 -29
  86. package/src/lib/interfaces/menu.interface.ts +0 -19
  87. package/src/lib/interfaces/navigation-rail-item.interface.ts +0 -39
  88. package/src/lib/interfaces/navigation-rail.interface.ts +0 -39
  89. package/src/lib/interfaces/progress-indicator.interface.ts +0 -41
  90. package/src/lib/interfaces/side-sheet.interface.tsx +0 -28
  91. package/src/lib/interfaces/slider.interface.ts +0 -27
  92. package/src/lib/interfaces/snackbar.interface.ts +0 -13
  93. package/src/lib/interfaces/switch.interface.ts +0 -14
  94. package/src/lib/interfaces/tab-group.interface.ts +0 -13
  95. package/src/lib/interfaces/tab-panels.interface.ts +0 -21
  96. package/src/lib/interfaces/tab.interface.ts +0 -31
  97. package/src/lib/interfaces/tabs.interface.ts +0 -22
  98. package/src/lib/interfaces/text-field.interface.ts +0 -61
  99. package/src/lib/interfaces/tooltip.interface.ts +0 -61
  100. package/src/lib/styles/button.style.ts +0 -136
  101. package/src/lib/styles/card.style.ts +0 -29
  102. package/src/lib/styles/carousel-item.style.ts +0 -24
  103. package/src/lib/styles/carousel.style.ts +0 -22
  104. package/src/lib/styles/checkbox.style.ts +0 -64
  105. package/src/lib/styles/chip.style.ts +0 -62
  106. package/src/lib/styles/chips.style.ts +0 -20
  107. package/src/lib/styles/date-picker.style.ts +0 -43
  108. package/src/lib/styles/divider.style.ts +0 -31
  109. package/src/lib/styles/fab-menu.style.ts +0 -29
  110. package/src/lib/styles/fab.style.ts +0 -49
  111. package/src/lib/styles/icon-button.style.ts +0 -168
  112. package/src/lib/styles/index.ts +0 -25
  113. package/src/lib/styles/menu-group.style.ts +0 -34
  114. package/src/lib/styles/menu-headline.style.ts +0 -20
  115. package/src/lib/styles/menu-item.style.ts +0 -45
  116. package/src/lib/styles/menu.style.ts +0 -32
  117. package/src/lib/styles/navigation-rail-item.style.ts +0 -56
  118. package/src/lib/styles/navigation-rail.style.ts +0 -36
  119. package/src/lib/styles/progress-indicator.style.ts +0 -72
  120. package/src/lib/styles/side-sheet.style.ts +0 -45
  121. package/src/lib/styles/slider.style.ts +0 -41
  122. package/src/lib/styles/snackbar.style.ts +0 -26
  123. package/src/lib/styles/switch.style.ts +0 -67
  124. package/src/lib/styles/tab-panels.style.ts +0 -35
  125. package/src/lib/styles/tab.style.ts +0 -78
  126. package/src/lib/styles/tabs.style.ts +0 -22
  127. package/src/lib/styles/text-field.style.ts +0 -115
  128. package/src/lib/styles/tooltip.style.ts +0 -48
  129. package/src/lib/utils/component-helper.ts +0 -134
  130. package/src/lib/utils/component.ts +0 -34
  131. package/src/lib/utils/index.ts +0 -7
  132. package/src/lib/utils/string.ts +0 -9
  133. package/src/lib/utils/styles/classnames.ts +0 -49
  134. package/src/lib/utils/styles/get-classname.ts +0 -96
  135. package/src/lib/utils/styles/index.ts +0 -4
  136. package/src/lib/utils/styles/use-classnames.ts +0 -25
  137. package/src/stories/action/button.stories.tsx +0 -86
  138. package/src/stories/action/fab.stories.tsx +0 -54
  139. package/src/stories/action/icon-button.stories.tsx +0 -134
  140. package/src/stories/assets/accessibility.png +0 -0
  141. package/src/stories/assets/accessibility.svg +0 -5
  142. package/src/stories/assets/addon-library.png +0 -0
  143. package/src/stories/assets/assets.png +0 -0
  144. package/src/stories/assets/context.png +0 -0
  145. package/src/stories/assets/discord.svg +0 -15
  146. package/src/stories/assets/docs.png +0 -0
  147. package/src/stories/assets/figma-plugin.png +0 -0
  148. package/src/stories/assets/github.svg +0 -3
  149. package/src/stories/assets/share.png +0 -0
  150. package/src/stories/assets/styling.png +0 -0
  151. package/src/stories/assets/testing.png +0 -0
  152. package/src/stories/assets/theming.png +0 -0
  153. package/src/stories/assets/tutorials.svg +0 -12
  154. package/src/stories/assets/youtube.svg +0 -4
  155. package/src/stories/communication/ProgressIndicator.stories.tsx +0 -57
  156. package/src/stories/communication/SnackBar.stories.tsx +0 -32
  157. package/src/stories/communication/tool-tip.stories.tsx +0 -133
  158. package/src/stories/containment/card.stories.tsx +0 -42
  159. package/src/stories/containment/carousel.stories.tsx +0 -65
  160. package/src/stories/containment/divider.stories.tsx +0 -35
  161. package/src/stories/containment/slide-sheet.stories.tsx +0 -45
  162. package/src/stories/effect/smooth-scroll.stories.tsx +0 -54
  163. package/src/stories/navigation/navigation-rail/navigation-rail-item.stories.tsx +0 -65
  164. package/src/stories/navigation/navigation-rail/navigation-rail.stories.tsx +0 -122
  165. package/src/stories/navigation/tabs/tab.stories.tsx +0 -57
  166. package/src/stories/navigation/tabs/tabs.stories.tsx +0 -102
  167. package/src/stories/selection/slider.stories.tsx +0 -85
  168. package/src/stories/selection/switch.stories.tsx +0 -46
  169. package/src/stories/text-inputs/text-field.stories.tsx +0 -135
  170. package/src/tests/Button.spec.tsx +0 -67
  171. package/src/tests/useClassNames.spec.tsx +0 -82
  172. package/src/udixio.css +0 -120
  173. package/theme.config.ts +0 -7
  174. package/tsconfig.json +0 -16
  175. package/tsconfig.lib.json +0 -51
  176. package/tsconfig.spec.json +0 -37
  177. package/tsconfig.storybook.json +0 -38
  178. package/vite.config.ts +0 -82
  179. /package/dist/{scrollDriven-DWAu7CR0.cjs → scrollDriven.js} +0 -0
@@ -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.