@udixio/ui-react 2.5.2 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.js +2566 -2264
  4. package/dist/lib/components/Button.d.ts.map +1 -1
  5. package/dist/lib/components/Card.d.ts.map +1 -1
  6. package/dist/lib/components/Carousel.d.ts +0 -2
  7. package/dist/lib/components/Carousel.d.ts.map +1 -1
  8. package/dist/lib/components/Fab.d.ts +1 -1
  9. package/dist/lib/components/Fab.d.ts.map +1 -1
  10. package/dist/lib/components/FabMenu.d.ts +9 -0
  11. package/dist/lib/components/FabMenu.d.ts.map +1 -0
  12. package/dist/lib/components/IconButton.d.ts.map +1 -1
  13. package/dist/lib/components/NavigationRail.d.ts.map +1 -1
  14. package/dist/lib/components/NavigationRailItem.d.ts.map +1 -1
  15. package/dist/lib/components/Tab.d.ts.map +1 -1
  16. package/dist/lib/components/ToolTip.d.ts.map +1 -1
  17. package/dist/lib/components/index.d.ts +1 -0
  18. package/dist/lib/components/index.d.ts.map +1 -1
  19. package/dist/lib/effects/AnimateOnScroll.d.ts.map +1 -1
  20. package/dist/lib/effects/State.d.ts +26 -0
  21. package/dist/lib/effects/State.d.ts.map +1 -0
  22. package/dist/lib/effects/index.d.ts +1 -0
  23. package/dist/lib/effects/index.d.ts.map +1 -1
  24. package/dist/lib/effects/ripple/RippleEffect.d.ts.map +1 -1
  25. package/dist/lib/interfaces/button.interface.d.ts +4 -1
  26. package/dist/lib/interfaces/button.interface.d.ts.map +1 -1
  27. package/dist/lib/interfaces/fab-menu.interface.d.ts +12 -0
  28. package/dist/lib/interfaces/fab-menu.interface.d.ts.map +1 -0
  29. package/dist/lib/interfaces/fab.interface.d.ts +2 -2
  30. package/dist/lib/interfaces/fab.interface.d.ts.map +1 -1
  31. package/dist/lib/interfaces/index.d.ts +1 -0
  32. package/dist/lib/interfaces/index.d.ts.map +1 -1
  33. package/dist/lib/interfaces/side-sheet.interface.d.ts +1 -1
  34. package/dist/lib/interfaces/side-sheet.interface.d.ts.map +1 -1
  35. package/dist/lib/styles/button.style.d.ts +43 -3
  36. package/dist/lib/styles/button.style.d.ts.map +1 -1
  37. package/dist/lib/styles/card.style.d.ts +9 -1
  38. package/dist/lib/styles/card.style.d.ts.map +1 -1
  39. package/dist/lib/styles/carousel-item.style.d.ts +11 -1
  40. package/dist/lib/styles/carousel-item.style.d.ts.map +1 -1
  41. package/dist/lib/styles/carousel.style.d.ts +16 -1
  42. package/dist/lib/styles/carousel.style.d.ts.map +1 -1
  43. package/dist/lib/styles/divider.style.d.ts +8 -2
  44. package/dist/lib/styles/divider.style.d.ts.map +1 -1
  45. package/dist/lib/styles/fab-menu.style.d.ts +83 -0
  46. package/dist/lib/styles/fab-menu.style.d.ts.map +1 -0
  47. package/dist/lib/styles/fab.style.d.ts +29 -5
  48. package/dist/lib/styles/fab.style.d.ts.map +1 -1
  49. package/dist/lib/styles/icon-button.style.d.ts +37 -1
  50. package/dist/lib/styles/icon-button.style.d.ts.map +1 -1
  51. package/dist/lib/styles/index.d.ts +2 -0
  52. package/dist/lib/styles/index.d.ts.map +1 -1
  53. package/dist/lib/styles/navigation-rail-item.style.d.ts +11 -1
  54. package/dist/lib/styles/navigation-rail-item.style.d.ts.map +1 -1
  55. package/dist/lib/styles/navigation-rail.style.d.ts +31 -1
  56. package/dist/lib/styles/navigation-rail.style.d.ts.map +1 -1
  57. package/dist/lib/styles/progress-indicator.style.d.ts +12 -1
  58. package/dist/lib/styles/progress-indicator.style.d.ts.map +1 -1
  59. package/dist/lib/styles/side-sheet.style.d.ts +20 -3
  60. package/dist/lib/styles/side-sheet.style.d.ts.map +1 -1
  61. package/dist/lib/styles/slider.style.d.ts +21 -2
  62. package/dist/lib/styles/slider.style.d.ts.map +1 -1
  63. package/dist/lib/styles/snackbar.style.d.ts +14 -3
  64. package/dist/lib/styles/snackbar.style.d.ts.map +1 -1
  65. package/dist/lib/styles/switch.style.d.ts +14 -2
  66. package/dist/lib/styles/switch.style.d.ts.map +1 -1
  67. package/dist/lib/styles/tab.style.d.ts +12 -2
  68. package/dist/lib/styles/tab.style.d.ts.map +1 -1
  69. package/dist/lib/styles/tabs.style.d.ts +17 -2
  70. package/dist/lib/styles/tabs.style.d.ts.map +1 -1
  71. package/dist/lib/styles/text-field.style.d.ts +23 -2
  72. package/dist/lib/styles/text-field.style.d.ts.map +1 -1
  73. package/dist/lib/styles/tooltip.style.d.ts +20 -3
  74. package/dist/lib/styles/tooltip.style.d.ts.map +1 -1
  75. package/dist/lib/utils/styles/get-classname.d.ts +3 -0
  76. package/dist/lib/utils/styles/get-classname.d.ts.map +1 -1
  77. package/dist/lib/utils/styles/index.d.ts +1 -0
  78. package/dist/lib/utils/styles/index.d.ts.map +1 -1
  79. package/dist/lib/utils/styles/use-classnames.d.ts +6 -0
  80. package/dist/lib/utils/styles/use-classnames.d.ts.map +1 -0
  81. package/package.json +3 -3
  82. package/src/lib/components/Button.tsx +54 -20
  83. package/src/lib/components/Card.tsx +11 -9
  84. package/src/lib/components/Carousel.tsx +70 -205
  85. package/src/lib/components/CarouselItem.tsx +2 -2
  86. package/src/lib/components/Divider.tsx +2 -2
  87. package/src/lib/components/Fab.tsx +22 -21
  88. package/src/lib/components/FabMenu.tsx +229 -0
  89. package/src/lib/components/IconButton.tsx +24 -30
  90. package/src/lib/components/NavigationRail.tsx +7 -4
  91. package/src/lib/components/NavigationRailItem.tsx +13 -4
  92. package/src/lib/components/ProgressIndicator.tsx +2 -2
  93. package/src/lib/components/SideSheet.tsx +2 -2
  94. package/src/lib/components/Slider.tsx +2 -2
  95. package/src/lib/components/Snackbar.tsx +2 -2
  96. package/src/lib/components/Switch.tsx +2 -2
  97. package/src/lib/components/Tab.tsx +11 -11
  98. package/src/lib/components/Tabs.tsx +2 -2
  99. package/src/lib/components/TextField.tsx +2 -2
  100. package/src/lib/components/ToolTip.tsx +9 -3
  101. package/src/lib/components/index.ts +1 -0
  102. package/src/lib/effects/AnimateOnScroll.ts +51 -18
  103. package/src/lib/effects/State.tsx +83 -0
  104. package/src/lib/effects/index.ts +1 -0
  105. package/src/lib/effects/ripple/RippleEffect.tsx +40 -27
  106. package/src/lib/interfaces/button.interface.ts +5 -1
  107. package/src/lib/interfaces/fab-menu.interface.ts +12 -0
  108. package/src/lib/interfaces/fab.interface.ts +8 -2
  109. package/src/lib/interfaces/index.ts +1 -0
  110. package/src/lib/interfaces/side-sheet.interface.tsx +1 -1
  111. package/src/lib/styles/button.style.ts +127 -136
  112. package/src/lib/styles/card.style.ts +22 -17
  113. package/src/lib/styles/carousel-item.style.ts +23 -9
  114. package/src/lib/styles/carousel.style.ts +17 -5
  115. package/src/lib/styles/divider.style.ts +27 -13
  116. package/src/lib/styles/fab-menu.style.ts +28 -0
  117. package/src/lib/styles/fab.style.ts +41 -43
  118. package/src/lib/styles/icon-button.style.ts +160 -149
  119. package/src/lib/styles/index.ts +2 -0
  120. package/src/lib/styles/navigation-rail-item.style.ts +49 -40
  121. package/src/lib/styles/navigation-rail.style.ts +31 -15
  122. package/src/lib/styles/progress-indicator.style.ts +49 -36
  123. package/src/lib/styles/side-sheet.style.ts +41 -27
  124. package/src/lib/styles/slider.style.ts +37 -23
  125. package/src/lib/styles/snackbar.style.ts +22 -10
  126. package/src/lib/styles/switch.style.ts +61 -45
  127. package/src/lib/styles/tab.style.ts +76 -66
  128. package/src/lib/styles/tabs.style.ts +19 -10
  129. package/src/lib/styles/text-field.style.ts +108 -97
  130. package/src/lib/styles/tooltip.style.ts +42 -33
  131. package/src/lib/utils/styles/get-classname.ts +23 -0
  132. package/src/lib/utils/styles/index.ts +1 -0
  133. package/src/lib/utils/styles/use-classnames.ts +25 -0
  134. package/src/tests/useClassNames.spec.tsx +82 -0
@@ -1,145 +1,136 @@
1
- import { classNames, defaultClassNames } from '../utils';
1
+ import type { ClassNameComponent } from '../utils';
2
+ import { classNames, createUseClassNames, defaultClassNames } from '../utils';
2
3
  import { ButtonInterface } from '../interfaces';
3
4
 
4
- export const buttonStyle = defaultClassNames<ButtonInterface>(
5
- 'button',
6
- ({
7
- variant,
8
- disableTextMargins,
9
- disabled,
10
- iconPosition,
11
- icon,
12
- isActive,
13
- loading,
14
- shape,
15
- onToggle,
16
- size,
17
- allowShapeTransformation,
18
- }) => ({
19
- button: classNames(
20
- ' relative cursor-pointer group outline-none inline-block flex justify-center items-center ',
21
- size === 'xSmall' && 'text-label-large px-3 py-1.5 gap-1',
22
- size === 'small' && 'text-label-large px-4 py-2.5 gap-2',
23
- size === 'medium' && 'text-title-medium px-6 py-4 gap-2',
24
- size === 'large' && 'text-headline-small px-12 py-8 gap-3',
25
- size === 'xLarge' && 'text-headline-large px-16 py-12 gap-4',
26
- shape === 'rounded' && {
27
- 'rounded-[30px]': size === 'xSmall' || size == 'small',
28
- 'rounded-[40px]': size === 'medium',
29
- 'rounded-[70px]': size === 'large' || size == 'xLarge',
30
- },
31
- (shape === 'squared' || (allowShapeTransformation && isActive)) && {
32
- 'rounded-[12px]': size === 'xSmall' || size == 'small',
33
- 'rounded-[16px]': size === 'medium',
34
- 'rounded-[28px]': size === 'large' || size == 'xLarge',
5
+ const buttonConfig: ClassNameComponent<ButtonInterface> = ({
6
+ variant,
7
+ disableTextMargins,
8
+ disabled,
9
+ iconPosition,
10
+ icon,
11
+ isActive,
12
+ loading,
13
+ shape,
14
+ onToggle,
15
+ size,
16
+ allowShapeTransformation,
17
+ }) => ({
18
+ button: classNames(
19
+ ' relative cursor-pointer group/button outline-none inline-block flex justify-center items-center ',
20
+ size === 'xSmall' && 'text-label-large px-3 py-1.5 gap-1',
21
+ size === 'small' && 'text-label-large px-4 py-2.5 gap-2',
22
+ size === 'medium' && 'text-title-medium px-6 py-4 gap-2',
23
+ size === 'large' && 'text-headline-small px-12 py-8 gap-3',
24
+ size === 'xLarge' && 'text-headline-large px-16 py-12 gap-4',
25
+ shape === 'rounded' && {
26
+ 'rounded-[30px]': size === 'xSmall' || size == 'small',
27
+ 'rounded-[40px]': size === 'medium',
28
+ 'rounded-[70px]': size === 'large' || size == 'xLarge',
29
+ },
30
+ (shape === 'squared' || (allowShapeTransformation && isActive)) && {
31
+ 'rounded-[12px]': size === 'xSmall' || size == 'small',
32
+ 'rounded-[16px]': size === 'medium',
33
+ 'rounded-[28px]': size === 'large' || size == 'xLarge',
34
+ },
35
+ allowShapeTransformation &&
36
+ !disabled && {
37
+ 'active:rounded-[12px]': size === 'xSmall' || size == 'small',
38
+ 'active:rounded-[16px]': size === 'medium',
39
+ 'active:rounded-[28px]': size === 'large' || size == 'xLarge',
35
40
  },
36
- allowShapeTransformation &&
37
- !disabled && {
38
- 'active:rounded-[12px]': size === 'xSmall' || size == 'small',
39
- 'active:rounded-[16px]': size === 'medium',
40
- 'active:rounded-[28px]': size === 'large' || size == 'xLarge',
41
- },
42
- variant === 'elevated' && {
43
- 'shadow-1 hover:shadow-2': !disabled,
44
- 'bg-surface-container-low text-primary': !disabled && !isActive,
45
- 'bg-primary text-on-primary': !disabled && isActive,
46
- 'text-on-surface/[38%]': disabled,
47
- },
48
- variant === 'filled' && {
49
- 'hover:shadow-1': !disabled,
50
- 'bg-surface-container text-on-surface-variant':
51
- !disabled && !isActive && onToggle,
52
- 'bg-primary text-on-primary':
53
- !disabled && ((isActive && onToggle) || !onToggle),
54
- 'text-on-surface/[38%]': disabled,
55
- },
56
- variant === 'tonal' && {
57
- 'hover:shadow-1': !disabled,
58
- 'bg-secondary-container text-on-secondary-container':
41
+ variant === 'elevated' && {
42
+ 'shadow-1 hover:shadow-2': !disabled,
43
+ 'bg-surface-container-low text-primary': !disabled && !isActive,
44
+ 'bg-primary text-on-primary': !disabled && isActive,
45
+ 'text-on-surface/[38%]': disabled,
46
+ },
47
+ variant === 'filled' && {
48
+ 'hover:shadow-1': !disabled,
49
+ 'bg-surface-container text-on-surface-variant':
50
+ !disabled && !isActive && onToggle,
51
+ 'bg-primary text-on-primary':
52
+ !disabled && ((isActive && onToggle) || !onToggle),
53
+ 'text-on-surface/[38%]': disabled,
54
+ },
55
+ variant === 'tonal' && {
56
+ 'hover:shadow-1': !disabled,
57
+ 'bg-secondary-container text-on-secondary-container':
58
+ !disabled && !isActive,
59
+ 'bg-secondary text-on-secondary': !disabled && isActive,
60
+ 'text-on-surface/[0.38]': disabled,
61
+ },
62
+ variant === 'outlined' && [
63
+ ' border',
64
+ {
65
+ 'border-on-surface/[0.12] text-on-surface/[0.38]': disabled,
66
+
67
+ 'text-primary border-outline focus:border-primary':
59
68
  !disabled && !isActive,
60
- 'bg-secondary text-on-secondary': !disabled && isActive,
69
+ 'text-inverse-on-surface bg-inverse-surface border-inverse-surface':
70
+ !disabled && isActive,
71
+ },
72
+ ],
73
+ variant === 'text' && [
74
+ 'w-fit',
75
+ {
76
+ 'text-primary': !disabled,
61
77
  'text-on-surface/[0.38]': disabled,
62
78
  },
63
- variant === 'outlined' && [
64
- ' border',
65
- {
66
- 'border-on-surface/[0.12] text-on-surface/[0.38]': disabled,
67
-
68
- 'text-primary border-outline focus:border-primary':
69
- !disabled && !isActive,
70
- 'text-inverse-on-surface bg-inverse-surface border-inverse-surface':
71
- !disabled && isActive,
72
- },
73
- ],
74
- variant === 'text' && [
75
- 'w-fit',
76
- {
77
- 'text-primary': !disabled,
78
- 'text-on-surface/[0.38]': disabled,
79
- },
80
- disableTextMargins && [
81
- size === 'xSmall' && '-mx-3 ',
82
- size === 'small' && '-mx-4 ',
83
- size === 'medium' && '-mx-6 ',
84
- size === 'large' && '-mx-12',
85
- size === 'xLarge' && '-mx-16 ',
86
- // size === 'small' && ' -my-2.5',
87
- // size === 'medium' && ' -my-4',
88
- // size === 'large' && '-my-8',
89
- // size === 'xLarge' && ' -my-12',
90
- ],
79
+ disableTextMargins && [
80
+ size === 'xSmall' && '-mx-3 ',
81
+ size === 'small' && '-mx-4 ',
82
+ size === 'medium' && '-mx-6 ',
83
+ size === 'large' && '-mx-12',
84
+ size === 'xLarge' && '-mx-16 ',
85
+ // size === 'small' && ' -my-2.5',
86
+ // size === 'medium' && ' -my-4',
87
+ // size === 'large' && '-my-8',
88
+ // size === 'xLarge' && ' -my-12',
91
89
  ],
92
- disabled && 'cursor-default',
93
- ),
94
- touchTarget: classNames(
95
- 'absolute -translate-x-1/2 -translate-y-1/2 left-1/2 top-1/2 h-12 w-full',
96
- ),
97
- stateLayer: classNames(
98
- 'min-h-full min-w-full absolute top-0 left-0 overflow-hidden',
99
- variant === 'elevated' && {
100
- 'bg-on-surface/[0.12]': disabled,
101
- 'group-state-primary': !disabled,
102
- },
103
- variant === 'filled' && {
104
- 'bg-on-surface/[0.12]': disabled,
105
- 'group-state-on-primary': !disabled && !onToggle,
106
- 'group-state-on-surface-variant': !disabled && onToggle,
107
- },
108
- shape === 'rounded' && {
109
- 'rounded-[30px]': size === 'xSmall' || size == 'small',
110
- 'rounded-[40px]': size === 'medium',
111
- 'rounded-[70px]': size === 'large' || size == 'xLarge',
90
+ ],
91
+ disabled && 'cursor-default',
92
+ ),
93
+ touchTarget: classNames(
94
+ 'absolute -translate-x-1/2 -translate-y-1/2 left-1/2 top-1/2 h-12 w-full',
95
+ ),
96
+ stateLayer: classNames(
97
+ 'overflow-hidden',
98
+ shape === 'rounded' && {
99
+ 'rounded-[30px]': size === 'xSmall' || size == 'small',
100
+ 'rounded-[40px]': size === 'medium',
101
+ 'rounded-[70px]': size === 'large' || size == 'xLarge',
102
+ },
103
+ (shape === 'squared' || (allowShapeTransformation && isActive)) && {
104
+ 'rounded-[12px]': size === 'xSmall' || size == 'small',
105
+ 'rounded-[16px]': size === 'medium',
106
+ 'rounded-[28px]': size === 'large' || size == 'xLarge',
107
+ },
108
+ allowShapeTransformation &&
109
+ !disabled && {
110
+ 'group-active/button:rounded-[12px]':
111
+ size === 'xSmall' || size == 'small',
112
+ 'group-active/button:rounded-[16px]': size === 'medium',
113
+ 'group-active/button:rounded-[28px]':
114
+ size === 'large' || size == 'xLarge',
112
115
  },
113
- (shape === 'squared' || (allowShapeTransformation && isActive)) && {
114
- 'rounded-[12px]': size === 'xSmall' || size == 'small',
115
- 'rounded-[16px]': size === 'medium',
116
- 'rounded-[28px]': size === 'large' || size == 'xLarge',
117
- },
118
- allowShapeTransformation &&
119
- !disabled && {
120
- 'group-active:rounded-[12px]': size === 'xSmall' || size == 'small',
121
- 'group-active:rounded-[16px]': size === 'medium',
122
- 'group-active:rounded-[28px]': size === 'large' || size == 'xLarge',
123
- },
124
- variant === 'tonal' && {
125
- 'bg-on-surface/[0.12]': disabled,
126
- 'group-state-on-secondary-container ': !disabled,
127
- },
128
- variant === 'outlined' && {
129
- 'group-state-primary group-state-primary': !disabled,
130
- },
131
- variant === 'text' && {
132
- 'group-state-primary': !disabled,
133
- },
134
- ),
135
- label: classNames({ invisible: loading }),
136
- icon: classNames(
137
- { invisible: loading },
138
- size === 'xSmall' && 'size-5',
139
- size === 'small' && 'size-5',
140
- size === 'medium' && 'size-6',
141
- size === 'large' && 'size-8',
142
- size === 'xLarge' && 'size-10',
143
- ),
144
- }),
116
+ ),
117
+ label: classNames({ invisible: loading }),
118
+ icon: classNames(
119
+ { invisible: loading },
120
+ size === 'xSmall' && 'size-5',
121
+ size === 'small' && 'size-5',
122
+ size === 'medium' && 'size-6',
123
+ size === 'large' && 'size-8',
124
+ size === 'xLarge' && 'size-10',
125
+ ),
126
+ });
127
+
128
+ export const buttonStyle = defaultClassNames<ButtonInterface>(
129
+ 'button',
130
+ buttonConfig,
131
+ );
132
+
133
+ export const useButtonStyle = createUseClassNames<ButtonInterface>(
134
+ 'button',
135
+ buttonConfig,
145
136
  );
@@ -1,21 +1,26 @@
1
1
  import { CardInterface } from '../interfaces';
2
- import { classNames, defaultClassNames } from '../utils';
2
+ import {
3
+ type ClassNameComponent,
4
+ classNames,
5
+ createUseClassNames,
6
+ defaultClassNames,
7
+ } from '../utils';
3
8
 
4
- export const cardStyle = defaultClassNames<CardInterface>(
9
+ const cardConfig: ClassNameComponent<CardInterface> = ({
10
+ variant,
11
+ isInteractive,
12
+ }) => ({
13
+ card: classNames(
14
+ 'group/card rounded-xl overflow-hidden z-10',
15
+ variant === 'outlined' && 'bg-surface border border-outline-variant',
16
+ variant === 'elevated' && 'bg-surface-container-low shadow-1',
17
+ variant === 'filled' && 'bg-surface-container-highest',
18
+ ),
19
+ });
20
+
21
+ export const cardStyle = defaultClassNames<CardInterface>('card', cardConfig);
22
+
23
+ export const useCardStyle = createUseClassNames<CardInterface>(
5
24
  'card',
6
- ({ variant, isInteractive }) => ({
7
- card: classNames(
8
- 'group/card rounded-xl overflow-hidden z-10',
9
- variant === 'outlined' && 'bg-surface border border-outline-variant',
10
- variant === 'elevated' && 'bg-surface-container-low shadow-1',
11
- variant === 'filled' && 'bg-surface-container-highest',
12
- ),
13
- stateLayer: classNames([
14
- 'w-full top-0 left-0 h-full absolute -z-10',
15
- {
16
- ' group-hover/card:hover-state-on-surface group-focus-visible/card:focus-state-on-surface':
17
- isInteractive,
18
- },
19
- ]),
20
- }),
25
+ cardConfig,
21
26
  );
@@ -1,14 +1,28 @@
1
1
  import { CarouselItemInterface } from '../interfaces';
2
- import { classNames, defaultClassNames } from '../utils';
2
+ import {
3
+ type ClassNameComponent,
4
+ classNames,
5
+ createUseClassNames,
6
+ defaultClassNames,
7
+ } from '../utils';
8
+
9
+ export const carouselItemConfig: ClassNameComponent<CarouselItemInterface> = ({
10
+ width,
11
+ }) => {
12
+ return {
13
+ carouselItem: classNames('rounded-[28px] overflow-hidden flex-none', {
14
+ hidden: width === undefined,
15
+ 'flex-1': width == null,
16
+ }),
17
+ };
18
+ };
3
19
 
4
20
  export const carouselItemStyle = defaultClassNames<CarouselItemInterface>(
5
21
  'carouselItem',
6
- ({ width }) => {
7
- return {
8
- carouselItem: classNames('rounded-[28px] overflow-hidden flex-none', {
9
- hidden: width === undefined,
10
- 'flex-1': width == null,
11
- }),
12
- };
13
- },
22
+ carouselItemConfig,
23
+ );
24
+
25
+ export const useCarouselItemStyle = createUseClassNames<CarouselItemInterface>(
26
+ 'carouselItem',
27
+ carouselItemConfig,
14
28
  );
@@ -1,10 +1,22 @@
1
- import { classNames, defaultClassNames } from '../utils';
1
+ import {
2
+ type ClassNameComponent,
3
+ classNames,
4
+ createUseClassNames,
5
+ defaultClassNames,
6
+ } from '../utils';
2
7
  import { CarouselInterface } from '../interfaces';
3
8
 
9
+ const carouselConfig: ClassNameComponent<CarouselInterface> = () => ({
10
+ carousel: classNames(['w-full h-[400px]']),
11
+ track: classNames('flex h-full w-full'),
12
+ });
13
+
4
14
  export const carouselStyle = defaultClassNames<CarouselInterface>(
5
15
  'carousel',
6
- () => ({
7
- carousel: classNames(['w-full h-[400px]']),
8
- track: classNames('flex h-full w-full'),
9
- }),
16
+ carouselConfig,
17
+ );
18
+
19
+ export const useCarouselStyle = createUseClassNames<CarouselInterface>(
20
+ 'carousel',
21
+ carouselConfig,
10
22
  );
@@ -1,17 +1,31 @@
1
- import { DividerInterface } from '../interfaces/divider.interface';
2
- import { classNames, defaultClassNames } from '../utils';
1
+ import { DividerInterface } from '../interfaces';
2
+ import {
3
+ type ClassNameComponent,
4
+ classNames,
5
+ createUseClassNames,
6
+ defaultClassNames,
7
+ } from '../utils';
8
+
9
+ const dividerConfig: ClassNameComponent<DividerInterface> = ({
10
+ orientation,
11
+ }) => ({
12
+ divider: classNames(
13
+ 'border-outline-variant ',
14
+ {
15
+ 'h-fit w-full border-t': orientation === 'horizontal',
16
+ },
17
+ {
18
+ 'h-auto self-stretch w-fit border-l': orientation === 'vertical',
19
+ },
20
+ ),
21
+ });
3
22
 
4
23
  export const dividerStyle = defaultClassNames<DividerInterface>(
5
24
  'divider',
6
- ({ orientation }) => ({
7
- divider: classNames(
8
- 'border-outline-variant ',
9
- {
10
- 'h-fit w-full border-t': orientation === 'horizontal',
11
- },
12
- {
13
- 'h-auto self-stretch w-fit border-l': orientation === 'vertical',
14
- }
15
- ),
16
- })
25
+ dividerConfig,
26
+ );
27
+
28
+ export const useDividerStyle = createUseClassNames<DividerInterface>(
29
+ 'divider',
30
+ dividerConfig,
17
31
  );
@@ -0,0 +1,28 @@
1
+ import {
2
+ type ClassNameComponent,
3
+ classNames,
4
+ createUseClassNames,
5
+ defaultClassNames,
6
+ } from '../utils';
7
+ import { FabMenuInterface } from '../interfaces/fab-menu.interface';
8
+
9
+ const fabMenuConfig: ClassNameComponent<FabMenuInterface> = ({
10
+ size,
11
+ variant,
12
+ open,
13
+ }) => ({
14
+ fabMenu: classNames('relative inline-flex flex-col items-end'),
15
+ actions: classNames(
16
+ 'flex flex-col gap-1 items-end absolute bottom-[calc(100%_+_8px)] right-0',
17
+ ),
18
+ });
19
+
20
+ export const fabMenuStyle = defaultClassNames<FabMenuInterface>(
21
+ 'fabMenu',
22
+ fabMenuConfig,
23
+ );
24
+
25
+ export const useFabMenuStyle = createUseClassNames<FabMenuInterface>(
26
+ 'fabMenu',
27
+ fabMenuConfig,
28
+ );
@@ -1,47 +1,45 @@
1
- import { classNames, defaultClassNames } from '../utils';
1
+ import {
2
+ type ClassNameComponent,
3
+ classNames,
4
+ createUseClassNames,
5
+ defaultClassNames,
6
+ } from '../utils';
2
7
  import { FabInterface } from '../interfaces/fab.interface';
3
8
 
4
- export const fabStyle = defaultClassNames<FabInterface>(
5
- 'fab',
6
- ({ size, variant, isExtended }) => ({
7
- fab: classNames(
8
- 'flex shadow-3 hover:shadow-4 group overflow-hidden outline-none items-center cursor-pointer',
9
- {
10
- 'rounded-[12px]': size == 'small' && !isExtended,
11
- 'rounded-[16px]': size == 'medium' || isExtended,
12
- 'rounded-[28px]': size == 'large' && !isExtended,
13
- },
14
- {
15
- 'p-2': size == 'small' && !isExtended,
16
- 'p-4': size == 'medium' || isExtended,
17
- 'p-[30px]': size == 'large' && !isExtended,
18
- },
19
- variant === 'surface' && 'bg-surface-container',
20
- variant === 'primary' && 'bg-primary-container',
21
- variant === 'secondary' && 'bg-secondary-container',
22
- variant === 'tertiary' && 'bg-tertiary-container',
23
- variant === 'surface' && 'text-primary',
24
- variant === 'primary' && 'text-on-primary-container',
25
- variant === 'secondary' && 'text-on-secondary-container',
26
- variant === 'tertiary' && 'text-on-tertiary-container',
27
- ),
28
- stateLayer: classNames(
29
- 'absolute w-full h-full overflow-hidden left-1/2 top-1/2 transform -translate-y-1/2 -translate-x-1/2',
30
- variant === 'surface' &&
31
- 'group-hover:hover-state-primary group-focus:focus-state-primary',
32
- variant === 'primary' &&
33
- 'group-hover:hover-state-on-primary-container group-focus-visible:focus-state-on-primary-container',
34
- variant === 'secondary' &&
35
- 'group-hover:hover-state-on-secondary-container group-focus-visible:focus-state-on-secondary-container',
36
- variant === 'tertiary' &&
37
- 'group-hover:hover-state-on-tertiary-container group-focus-visible:focus-state-on-tertiary-container',
38
- ),
9
+ const fabConfig: ClassNameComponent<FabInterface> = ({
10
+ size,
11
+ variant,
12
+ extended,
13
+ }) => ({
14
+ fab: classNames(
15
+ 'flex shadow-3 hover:shadow-4 group/fab overflow-hidden outline-none items-center cursor-pointer',
16
+ {
17
+ 'rounded-[12px]': size == 'small' && !extended,
18
+ 'rounded-[16px]': size == 'medium' || extended,
19
+ 'rounded-[28px]': size == 'large' && !extended,
20
+ },
21
+ {
22
+ 'p-2': size == 'small' && !extended,
23
+ 'p-4': size == 'medium' || extended,
24
+ 'p-[30px]': size == 'large' && !extended,
25
+ },
26
+ variant === 'primary' && 'bg-primary text-on-primary',
27
+ variant === 'secondary' && 'bg-secondary text-on-secondary',
28
+ variant === 'tertiary' && 'bg-tertiary text-on-tertiary',
29
+ variant === 'primaryContainer' &&
30
+ 'bg-primary-container text-on-primary-container',
31
+ variant === 'secondaryContainer' &&
32
+ 'bg-secondary-container text-on-secondary-container',
33
+ variant === 'tertiaryContainer' &&
34
+ 'bg-tertiary-container text-on-tertiary-container',
35
+ ),
36
+ icon: classNames({
37
+ 'size-6': size == 'small' || size == 'medium' || extended,
38
+ 'size-9': size == 'large' && !extended,
39
+ }),
40
+ label: classNames('text-title-medium text-nowrap'),
41
+ });
39
42
 
40
- icon: classNames({
41
- 'size-6': size == 'small' || size == 'medium' || isExtended,
42
- 'size-9': size == 'large' && !isExtended,
43
- }),
43
+ export const fabStyle = defaultClassNames<FabInterface>('fab', fabConfig);
44
44
 
45
- label: classNames('text-title-medium text-nowrap'),
46
- }),
47
- );
45
+ export const useFabStyle = createUseClassNames<FabInterface>('fab', fabConfig);