moldekit-react 0.0.5 → 0.0.7

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 (121) hide show
  1. package/README.md +9 -13
  2. package/dist/components/MkAlert/MkAlert.d.ts +3 -0
  3. package/dist/components/MkAlert/MkAlert.props.d.ts +6 -0
  4. package/dist/components/MkAlert/index.d.ts +2 -0
  5. package/dist/components/MkBarChart/MkBarChart.d.ts +3 -0
  6. package/dist/components/MkBarChart/MkBarChart.props.d.ts +8 -0
  7. package/dist/components/MkBarChart/index.d.ts +2 -0
  8. package/dist/components/MkBarHistoryChart/MkBarHistoryChart.d.ts +3 -0
  9. package/dist/components/MkBarHistoryChart/MkBarHistoryChart.props.d.ts +8 -0
  10. package/dist/components/MkBarHistoryChart/index.d.ts +2 -0
  11. package/dist/components/MkBottomSheet/MkBottomSheet.d.ts +3 -0
  12. package/dist/components/MkBottomSheet/MkBottomSheet.props.d.ts +7 -0
  13. package/dist/components/MkBottomSheet/index.d.ts +2 -0
  14. package/dist/components/MkButton/MkButton.d.ts +1 -1
  15. package/dist/components/MkButton/MkButton.props.d.ts +6 -4
  16. package/dist/components/MkCard/MkCard.d.ts +3 -0
  17. package/dist/components/MkCard/MkCard.props.d.ts +5 -0
  18. package/dist/components/MkCard/index.d.ts +2 -0
  19. package/dist/components/MkCheckbox/MkCheckbox.d.ts +3 -0
  20. package/dist/components/MkCheckbox/MkCheckbox.props.d.ts +5 -0
  21. package/dist/components/MkCheckbox/index.d.ts +2 -0
  22. package/dist/components/MkComboBox/MkComboBox.d.ts +3 -0
  23. package/dist/components/MkComboBox/MkComboBox.props.d.ts +9 -0
  24. package/dist/components/MkComboBox/index.d.ts +2 -0
  25. package/dist/components/MkDateInput/MkDateInput.d.ts +3 -0
  26. package/dist/components/MkDateInput/MkDateInput.props.d.ts +6 -0
  27. package/dist/components/MkDateInput/index.d.ts +2 -0
  28. package/dist/components/MkDetailedList/MkDetailedList.d.ts +3 -0
  29. package/dist/components/MkDetailedList/MkDetailedList.props.d.ts +5 -0
  30. package/dist/components/MkDetailedList/MkDetailedListItem/MkDetailedListItem.d.ts +3 -0
  31. package/dist/components/MkDetailedList/MkDetailedListItem/MkDetailedListItem.props.d.ts +10 -0
  32. package/dist/components/MkDetailedList/index.d.ts +2 -0
  33. package/dist/components/MkDivider/MkDivider.d.ts +3 -0
  34. package/dist/components/MkDivider/MkDivider.props.d.ts +4 -0
  35. package/dist/components/MkDivider/index.d.ts +2 -0
  36. package/dist/components/MkDonutChart/MkDonutChart.d.ts +3 -0
  37. package/dist/components/MkDonutChart/MkDonutChart.props.d.ts +11 -0
  38. package/dist/components/MkDonutChart/index.d.ts +2 -0
  39. package/dist/components/MkHeader/MkHeader.d.ts +3 -0
  40. package/dist/components/MkHeader/MkHeader.props.d.ts +6 -0
  41. package/dist/components/MkHeader/index.d.ts +2 -0
  42. package/dist/components/MkHorizontalBarChart/MkHorizontalBarChart.d.ts +3 -0
  43. package/dist/components/MkHorizontalBarChart/MkHorizontalBarChart.props.d.ts +3 -0
  44. package/dist/components/MkHorizontalBarChart/index.d.ts +2 -0
  45. package/dist/components/MkIconBadge/MkIconBadge.d.ts +3 -0
  46. package/dist/components/MkIconBadge/MkIconBadge.props.d.ts +5 -0
  47. package/dist/components/MkIconBadge/index.d.ts +2 -0
  48. package/dist/components/MkLineChart/MkLineChart.d.ts +3 -0
  49. package/dist/components/MkLineChart/MkLineChart.props.d.ts +3 -0
  50. package/dist/components/MkLineChart/index.d.ts +2 -0
  51. package/dist/components/MkList/MkList.d.ts +3 -0
  52. package/dist/components/MkList/MkList.props.d.ts +5 -0
  53. package/dist/components/MkList/MkListItem/MkListItem.d.ts +3 -0
  54. package/dist/components/MkList/MkListItem/MkListItem.props.d.ts +8 -0
  55. package/dist/components/MkList/index.d.ts +2 -0
  56. package/dist/components/MkMain/MkMain.d.ts +3 -0
  57. package/dist/components/MkMain/MkMain.props.d.ts +4 -0
  58. package/dist/components/MkMain/index.d.ts +2 -0
  59. package/dist/components/MkModal/MkModal.d.ts +3 -0
  60. package/dist/components/MkModal/MkModal.props.d.ts +6 -0
  61. package/dist/components/MkModal/index.d.ts +2 -0
  62. package/dist/components/MkNavItem/MkNavItem.d.ts +3 -0
  63. package/dist/components/MkNavItem/MkNavItem.props.d.ts +10 -0
  64. package/dist/components/MkNavItem/index.d.ts +2 -0
  65. package/dist/components/MkNavList/MkNavList.d.ts +3 -0
  66. package/dist/components/MkNavList/MkNavList.props.d.ts +6 -0
  67. package/dist/components/MkNavList/index.d.ts +2 -0
  68. package/dist/components/MkNumberInput/MkNumberInput.d.ts +3 -0
  69. package/dist/components/MkNumberInput/MkNumberInput.props.d.ts +6 -0
  70. package/dist/components/MkNumberInput/index.d.ts +2 -0
  71. package/dist/components/MkPanel/MkPanel.d.ts +3 -0
  72. package/dist/components/MkPanel/MkPanel.props.d.ts +4 -0
  73. package/dist/components/MkPanel/index.d.ts +2 -0
  74. package/dist/components/MkProgressBar/MkProgressBar.d.ts +3 -0
  75. package/dist/components/MkProgressBar/MkProgressBar.props.d.ts +3 -0
  76. package/dist/components/MkProgressBar/index.d.ts +2 -0
  77. package/dist/components/MkRadioButton/MkRadioButton.d.ts +3 -0
  78. package/dist/components/MkRadioButton/MkRadioButton.props.d.ts +7 -0
  79. package/dist/components/MkRadioButton/index.d.ts +2 -0
  80. package/dist/components/MkSectionHeader/MkSectionHeader.d.ts +3 -0
  81. package/dist/components/MkSectionHeader/MkSectionHeader.props.d.ts +5 -0
  82. package/dist/components/MkSectionHeader/index.d.ts +2 -0
  83. package/dist/components/MkStackedBarChart/MkStackedBarChart.d.ts +3 -0
  84. package/dist/components/MkStackedBarChart/MkStackedBarChart.props.d.ts +8 -0
  85. package/dist/components/MkStackedBarChart/index.d.ts +2 -0
  86. package/dist/components/MkStatusIndicator/MkStatusIndicator.d.ts +3 -0
  87. package/dist/components/MkStatusIndicator/MkStatusIndicator.props.d.ts +4 -0
  88. package/dist/components/MkStatusIndicator/index.d.ts +2 -0
  89. package/dist/components/MkStepper/MkStepper.d.ts +3 -0
  90. package/dist/components/MkStepper/MkStepper.props.d.ts +4 -0
  91. package/dist/components/MkStepper/index.d.ts +2 -0
  92. package/dist/components/MkSubHeader/MkSubHeader.d.ts +3 -0
  93. package/dist/components/MkSubHeader/MkSubHeader.props.d.ts +6 -0
  94. package/dist/components/MkSubHeader/index.d.ts +2 -0
  95. package/dist/components/MkTab/MkTab.d.ts +3 -0
  96. package/dist/components/MkTab/MkTab.props.d.ts +5 -0
  97. package/dist/components/MkTab/index.d.ts +2 -0
  98. package/dist/components/MkTag/MkTag.d.ts +3 -0
  99. package/dist/components/MkTag/MkTag.props.d.ts +8 -0
  100. package/dist/components/MkTag/index.d.ts +2 -0
  101. package/dist/components/MkTextInput/MkTextInput.d.ts +3 -0
  102. package/dist/components/MkTextInput/MkTextInput.props.d.ts +6 -0
  103. package/dist/components/MkTextInput/index.d.ts +2 -0
  104. package/dist/components/MkTimeInput/MkTimeInput.d.ts +3 -0
  105. package/dist/components/MkTimeInput/MkTimeInput.props.d.ts +6 -0
  106. package/dist/components/MkTimeInput/index.d.ts +2 -0
  107. package/dist/components/MkTopBar/MkTopBar.d.ts +3 -0
  108. package/dist/components/MkTopBar/MkTopBar.props.d.ts +5 -0
  109. package/dist/components/MkTopBar/index.d.ts +2 -0
  110. package/dist/components/MkTotalizers/MkTotalizers.d.ts +3 -0
  111. package/dist/components/MkTotalizers/MkTotalizers.props.d.ts +3 -0
  112. package/dist/components/MkTotalizers/index.d.ts +2 -0
  113. package/dist/components/MkUserAvatar/MkUserAvatar.d.ts +3 -0
  114. package/dist/components/MkUserAvatar/MkUserAvatar.props.d.ts +3 -0
  115. package/dist/components/MkUserAvatar/index.d.ts +2 -0
  116. package/dist/index.cjs +1376 -34
  117. package/dist/index.d.ts +72 -0
  118. package/dist/index.js +1342 -36
  119. package/dist/style.css +1687 -249
  120. package/package.json +22 -2
  121. package/dist/foundations/typography/H1.d.ts +0 -15
package/dist/index.js CHANGED
@@ -1,56 +1,154 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { InfoIcon, Check, ChevronDown, Calendar, DotIcon, Clock, Menu } from 'lucide-react';
2
3
  import { DynamicIcon } from 'lucide-react/dynamic';
4
+ import { useState, useRef, useEffect, useId, useCallback } from 'react';
3
5
 
4
6
  function MkButton({
5
7
  variant = "filled",
6
8
  color = "neutral",
7
- size = "medium",
9
+ size = "md",
8
10
  fullWidth = false,
11
+ iconOnly = false,
9
12
  iconName,
10
13
  className = "",
11
14
  disabled,
12
15
  children,
13
16
  ...props
14
17
  }) {
15
- const baseStyles = "flex items-center justify-center text-center rounded-[7px] uppercase focus:outline-none transition-colors duration-300disabled:pointer-events-none disabled:cursor-not-allowed";
16
- const variantStyles = {
17
- filled: "font-medium rounded-[7px] uppercase focus:outline-none transition-colors duration-300 disabled:pointer-events-none disabled:cursor-not-allowed",
18
- outlined: "font-medium rounded-[7px] uppercase border focus:outline-none transition-colors duration-300 disabled:pointer-events-none disabled:cursor-not-allowed",
19
- transparent: "font-medium rounded-[7px] uppercase bg-transparent focus:outline-none transition-colors duration-300 disabled:pointer-events-none disabled:cursor-not-allowed",
20
- iconOnly: "rounded-[7px] focus:outline-none transition-colors duration-300 disabled:pointer-events-none disabled:cursor-not-allowed p-2"
21
- };
18
+ const baseStyles = "flex items-center justify-center transition-colors duration-300text-center rounded-[7px] uppercasedisabled:pointer-events-none disabled:cursor-not-allowed focus:outline-none";
22
19
  const colorStyles = {
23
20
  filled: {
24
- primary: "bg-primary-400 text-primary-800 hover:bg-primary-500 hover:text-primary-900 disabled:bg-primary-100 disabled:text-primary-200",
25
- neutral: "bg-neutral-100 text-neutral-700 hover:bg-neutral-500 hover:text-neutral-900 disabled:bg-neutral-200 disabled:text-neutral-400",
26
- success: "bg-success-400 text-success-800 hover:bg-success-500 hover:text-success-900 disabled:bg-success-200 disabled:text-success-400",
27
- info: "bg-info-400 text-info-800 hover:bg-info-500 hover:text-info-900 disabled:bg-info-200 disabled:text-info-400",
28
- danger: "bg-danger-400 text-danger-800 hover:bg-danger-500 hover:text-danger-900 disabled:bg-danger-200 disabled:text-danger-400"
21
+ primary: [
22
+ "bg-[var(--button-filled-primary-bg)]",
23
+ "text-[var(--button-filled-primary-text)]",
24
+ "hover:bg-[var(--button-filled-primary-hover-bg)]",
25
+ "hover:text-[var(--button-filled-primary-hover-text)]",
26
+ "disabled:bg-[var(--button-filled-primary-disabled-bg)]",
27
+ "disabled:text-[var(--button-filled-primary-disabled-text)]"
28
+ ].join(" "),
29
+ neutral: [
30
+ "bg-[var(--button-filled-neutral-bg)]",
31
+ "text-[var(--button-filled-neutral-text)]",
32
+ "hover:bg-[var(--button-filled-neutral-hover-bg)]",
33
+ "hover:text-[var(--button-filled-neutral-hover-text)]",
34
+ "disabled:bg-[var(--button-filled-neutral-disabled-bg)]",
35
+ "disabled:text-[var(--button-filled-neutral-disabled-text)]"
36
+ ].join(" "),
37
+ success: [
38
+ "bg-[var(--button-filled-success-bg)]",
39
+ "text-[var(--button-filled-success-text)]",
40
+ "hover:bg-[var(--button-filled-success-hover-bg)]",
41
+ "hover:text-[var(--button-filled-success-hover-text)]",
42
+ "disabled:bg-[var(--button-filled-success-disabled-bg)]",
43
+ "disabled:text-[var(--button-filled-success-disabled-text)]"
44
+ ].join(" "),
45
+ info: [
46
+ "bg-[var(--button-filled-info-bg)]",
47
+ "text-[var(--button-filled-info-text)]",
48
+ "hover:bg-[var(--button-filled-info-hover-bg)]",
49
+ "hover:text-[var(--button-filled-info-hover-text)]",
50
+ "disabled:bg-[var(--button-filled-info-disabled-bg)]",
51
+ "disabled:text-[var(--button-filled-info-disabled-text)]"
52
+ ].join(" "),
53
+ danger: [
54
+ "bg-[var(--button-filled-danger-bg)]",
55
+ "text-[var(--button-filled-danger-text)]",
56
+ "hover:bg-[var(--button-filled-danger-hover-bg)]",
57
+ "hover:text-[var(--button-filled-danger-hover-text)]",
58
+ "disabled:bg-[var(--button-filled-danger-disabled-bg)]",
59
+ "disabled:text-[var(--button-filled-danger-disabled-text)]"
60
+ ].join(" "),
61
+ warning: [
62
+ "bg-[var(--button-filled-warning-bg)]",
63
+ "text-[var(--button-filled-warning-text)]",
64
+ "hover:bg-[var(--button-filled-warning-hover-bg)]",
65
+ "hover:text-[var(--button-filled-warning-hover-text)]",
66
+ "disabled:bg-[var(--button-filled-warning-disabled-bg)]",
67
+ "disabled:text-[var(--button-filled-warning-disabled-text)]"
68
+ ].join(" ")
29
69
  },
30
70
  outlined: {
31
- primary: "border-primary-400 text-primary-800 bg-primary-50 hover:bg-primary-100 focus:bg-primary-100",
32
- neutral: "border-neutral-200 text-neutral-700 bg-neutral-50 hover:bg-neutral-200 focus:bg-neutral-100",
33
- success: "border-success-400 text-success-800 bg-success-50 hover:bg-success-100 focus:bg-success-100"
71
+ primary: [
72
+ "border border-[var(--button-outlined-primary-border)]",
73
+ "text-[var(--button-outlined-primary-text)]",
74
+ "bg-white",
75
+ "hover:bg-[var(--button-outlined-primary-hover-bg)]"
76
+ ].join(" "),
77
+ neutral: [
78
+ "border border-[var(--button-outlined-neutral-border)]",
79
+ "text-[var(--button-outlined-neutral-text)]",
80
+ "bg-white",
81
+ "hover:bg-[var(--button-outlined-neutral-hover-bg)]"
82
+ ].join(" "),
83
+ success: [
84
+ "border border-[var(--button-outlined-success-border)]",
85
+ "text-[var(--button-outlined-success-text)]",
86
+ "bg-white",
87
+ "hover:bg-[var(--button-outlined-success-hover-bg)]"
88
+ ].join(" "),
89
+ info: [
90
+ "border border-[var(--button-outlined-info-border)]",
91
+ "text-[var(--button-outlined-info-text)]",
92
+ "bg-white",
93
+ "hover:bg-[var(--button-outlined-info-hover-bg)]"
94
+ ].join(" "),
95
+ danger: [
96
+ "border border-[var(--button-outlined-danger-border)]",
97
+ "text-[var(--button-outlined-danger-text)]",
98
+ "bg-white",
99
+ "hover:bg-[var(--button-outlined-danger-hover-bg)]"
100
+ ].join(" "),
101
+ warning: [
102
+ "border border-[var(--button-outlined-warning-border)]",
103
+ "text-[var(--button-outlined-warning-text)]",
104
+ "bg-white",
105
+ "hover:bg-[var(--button-outlined-warning-hover-bg)]"
106
+ ].join(" ")
34
107
  },
35
108
  transparent: {
36
- primary: "text-primary-800 bg-transparent hover:bg-primary-50 focus:bg-primary-100",
37
- neutral: "text-neutral-700 bg-transparent hover:bg-neutral-100 focus:bg-neutral-200",
38
- success: "text-success-800 bg-transparent hover:bg-success-50 focus:bg-success-100"
39
- },
40
- iconOnly: {
41
- primary: "bg-primary-400 text-primary-800 hover:bg-primary-500 focus:bg-primary-100",
42
- neutral: "bg-neutral-100 text-neutral-700 hover:bg-neutral-500 focus:bg-neutral-100",
43
- success: "bg-success-400 text-success-800 hover:bg-success-500 focus:bg-success-100"
109
+ primary: [
110
+ "text-[var(--button-transparent-primary-text)]",
111
+ "hover:bg-[var(--button-transparent-primary-hover-bg)]"
112
+ ].join(" "),
113
+ neutral: [
114
+ "text-[var(--button-transparent-neutral-text)]",
115
+ "hover:bg-[var(--button-transparent-neutral-hover-bg)]"
116
+ ].join(" "),
117
+ success: [
118
+ "text-[var(--button-transparent-success-text)]",
119
+ "hover:bg-[var(--button-transparent-success-hover-bg)]"
120
+ ].join(" "),
121
+ info: [
122
+ "text-[var(--button-transparent-info-text)]",
123
+ "hover:bg-[var(--button-transparent-info-hover-bg)]"
124
+ ].join(" "),
125
+ danger: [
126
+ "text-[var(--button-transparent-danger-text)]",
127
+ "hover:bg-[var(--button-transparent-danger-hover-bg)]"
128
+ ].join(" "),
129
+ warning: [
130
+ "text-[var(--button-transparent-warning-text)]",
131
+ "hover:bg-[var(--button-transparent-warning-hover-bg)]"
132
+ ].join(" ")
44
133
  }
45
134
  };
46
135
  const sizeStyles = {
47
- small: "px-3 py-1 text-sm",
48
- medium: "px-4 py-2 text-base",
49
- large: "px-6 py-3 text-lg"
136
+ sm: "px-3 py-1 text-sm",
137
+ md: "px-4 py-2 text-md",
138
+ lg: "px-6 py-3 text-lg"
139
+ };
140
+ const iconOnlySizeStyles = {
141
+ small: "p-1 w-7 h-7",
142
+ medium: "p-2 w-10 h-10",
143
+ large: "p-2 w-13 h-13"
144
+ };
145
+ const iconSize = {
146
+ sm: "14",
147
+ md: "16",
148
+ lg: "18"
50
149
  };
51
- const variantStyleClass = variantStyles[variant];
52
- const colorStyleClass = colorStyles[variant][color];
53
- const sizeStyleClass = variant === "iconOnly" ? "p-2 w-10 h-10" : sizeStyles[size];
150
+ const styleClass = colorStyles[variant][color];
151
+ const sizeStyleClass = iconOnly ? iconOnlySizeStyles[size] : sizeStyles[size];
54
152
  const fullWidthClass = fullWidth ? "w-full" : "";
55
153
  return /* @__PURE__ */ jsxs(
56
154
  "button",
@@ -58,18 +156,1226 @@ function MkButton({
58
156
  type: "button",
59
157
  disabled,
60
158
  className: `${baseStyles}
61
- ${variantStyleClass}
62
- ${colorStyleClass}
159
+ ${styleClass}
63
160
  ${sizeStyleClass}
64
161
  ${fullWidthClass}
65
162
  ${className}`,
66
163
  ...props,
67
164
  children: [
68
- /* @__PURE__ */ jsx(DynamicIcon, { name: iconName, size: 16, className: "mr-2" }),
69
- children
165
+ /* @__PURE__ */ jsx(
166
+ DynamicIcon,
167
+ {
168
+ name: iconName,
169
+ size: iconSize[size],
170
+ className: !iconOnly ? "mr-2" : ""
171
+ }
172
+ ),
173
+ iconOnly ? null : children
174
+ ]
175
+ }
176
+ );
177
+ }
178
+
179
+ function MkAlert({
180
+ label,
181
+ state = "info",
182
+ position = "top-right",
183
+ className
184
+ }) {
185
+ const positionStyles = {
186
+ "top-right": "top-4 right-4",
187
+ "top-center": "top-4 left-1/2 -translate-x-1/2",
188
+ "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
189
+ };
190
+ const baseStyles = [
191
+ "absolute z-[60]",
192
+ positionStyles[position],
193
+ "p-[20px] w-[380px]",
194
+ "bg-neutral-50 border-1 border-neutral-200 rounded-[12px]",
195
+ "flex flex-row items-center justify-between"
196
+ ].join(" ");
197
+ const labelStyles = "mk-caption inline-block align-middle pl-3.5 leading-none";
198
+ const stateStyle = {
199
+ info: "text-info-900"
200
+ };
201
+ return /* @__PURE__ */ jsxs("div", { className: `${baseStyles} ${className}`, children: [
202
+ /* @__PURE__ */ jsxs("div", { className: "inline-block align-middle", children: [
203
+ /* @__PURE__ */ jsx(
204
+ InfoIcon,
205
+ {
206
+ className: "inline-block align-middle",
207
+ color: "var(--color-info-700)"
208
+ }
209
+ ),
210
+ /* @__PURE__ */ jsx("span", { className: `${labelStyles} ${stateStyle[state]}`, children: label })
211
+ ] }),
212
+ /* @__PURE__ */ jsx(
213
+ MkButton,
214
+ {
215
+ color: "neutral",
216
+ iconOnly: true,
217
+ iconName: "x",
218
+ variant: "transparent"
219
+ }
220
+ )
221
+ ] });
222
+ }
223
+
224
+ function MkBottomSheet({
225
+ open = false,
226
+ onClose,
227
+ children,
228
+ height = "md",
229
+ className = ""
230
+ }) {
231
+ const [isOpen, setIsOpen] = useState(open);
232
+ const [isMounted, setIsMounted] = useState(open);
233
+ const timeoutRef = useRef(null);
234
+ const isInitialMount = useRef(true);
235
+ useEffect(() => {
236
+ if (open) {
237
+ if (timeoutRef.current) {
238
+ clearTimeout(timeoutRef.current);
239
+ timeoutRef.current = null;
240
+ }
241
+ setIsMounted(true);
242
+ if (isInitialMount.current) {
243
+ setIsOpen(true);
244
+ isInitialMount.current = false;
245
+ } else {
246
+ requestAnimationFrame(() => {
247
+ setIsOpen(true);
248
+ });
249
+ }
250
+ } else {
251
+ isInitialMount.current = false;
252
+ setIsOpen(false);
253
+ timeoutRef.current = setTimeout(() => {
254
+ setIsMounted(false);
255
+ }, 300);
256
+ }
257
+ return () => {
258
+ if (timeoutRef.current) {
259
+ clearTimeout(timeoutRef.current);
260
+ }
261
+ };
262
+ }, [open]);
263
+ const heightClasses = {
264
+ sm: "max-h-[30vh]",
265
+ md: "max-h-[60vh]",
266
+ lg: "max-h-[85vh]",
267
+ full: "h-screen max-h-screen"
268
+ };
269
+ const backdropStyles = "fixed inset-0 z-40 backdrop-blur-sm transition-opacity duration-200";
270
+ const backdropOpcatityAnimation = isOpen ? "opacity-100" : "opacity-0";
271
+ const sheetStyles = [
272
+ "fixed bottom-0 left-0 right-0 z-50",
273
+ "w-full bg-[var(--surface-level1)]",
274
+ "border-t border-[var(--border-default)] rounded-t-[20px] shadow-2xl",
275
+ "transition-transform duration-300 ease-out"
276
+ ].join(" ");
277
+ const sheetTranslateAnimation = isOpen ? "translate-y-0" : "translate-y-full";
278
+ const handleBackdropClick = (e) => {
279
+ if (e.target === e.currentTarget) {
280
+ onClose?.();
281
+ setIsOpen(false);
282
+ }
283
+ };
284
+ const handleKeyDown = (e) => {
285
+ if (e.key === "Escape") {
286
+ onClose?.();
287
+ setIsOpen(false);
288
+ }
289
+ };
290
+ if (!isMounted) {
291
+ return null;
292
+ }
293
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
294
+ /* @__PURE__ */ jsx(
295
+ "div",
296
+ {
297
+ className: `${backdropStyles} ${backdropOpcatityAnimation}`,
298
+ onClick: handleBackdropClick
299
+ }
300
+ ),
301
+ /* @__PURE__ */ jsxs(
302
+ "div",
303
+ {
304
+ className: `${sheetStyles}
305
+ ${heightClasses[height]}
306
+ ${sheetTranslateAnimation}
307
+ ${className}
308
+ `,
309
+ role: "dialog",
310
+ "aria-modal": "true",
311
+ onKeyDown: handleKeyDown,
312
+ tabIndex: -1,
313
+ children: [
314
+ /* @__PURE__ */ jsx("div", { className: "p-4 pt-6 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "w-8 h-1.5 bg-neutral-300 rounded-full" }) }),
315
+ /* @__PURE__ */ jsx("div", { className: "p-6 pb-12 max-h-full overflow-y-auto", children })
316
+ ]
317
+ }
318
+ )
319
+ ] });
320
+ }
321
+
322
+ function MkBarChart({ data, className }) {
323
+ const baseStyles = "flex flex-row flex-wrap justify-between p-1 w-full max-w-4xl";
324
+ const barContainerStyles = "flex flex-col items-center gap-2 w-12";
325
+ const barStyles = "w-[25px] rounded-[5px] shadow-sm absolute bottom-0 left-0";
326
+ const bgBarStyles = "w-[25px] h-32 rounded-[5px] relative";
327
+ const batColorStyles = {
328
+ faded: "bg-neutral-200",
329
+ regular: "bg-primary-500",
330
+ "no-data": "bg-primary-400"
331
+ };
332
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyles} ${className}`, children: data.map((item, index) => /* @__PURE__ */ jsxs("div", { className: barContainerStyles, children: [
333
+ /* @__PURE__ */ jsx("div", { className: bgBarStyles, children: /* @__PURE__ */ jsx(
334
+ "div",
335
+ {
336
+ className: `${barStyles} ${batColorStyles[item.type ? item.type : "regular"]}`,
337
+ style: { height: `${item.value}%` }
338
+ }
339
+ ) }),
340
+ /* @__PURE__ */ jsx("span", { className: "mk-label text-xs font-medium text-neutral-700 text-center min-w-[40px]", children: item.label })
341
+ ] }, index)) });
342
+ }
343
+
344
+ function MkBarHistoryChart({ data, className }) {
345
+ const baseStyles = "flex flex-row flex-wrap justify-between p-1 w-full max-w-4xl";
346
+ const barContainerStyles = "flex flex-col items-center gap-2 w-12";
347
+ const barStyles = "w-[10px] rounded-full shadow-sm absolute bottom-0 left-0";
348
+ const bgBarStyles = "w-[10px] h-32 bg-neutral-200 rounded-full relative";
349
+ const batColorStyles = {
350
+ faded: "bg-primary-200",
351
+ regular: "bg-primary-500",
352
+ "no-data": "bg-primary-400"
353
+ };
354
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyles} ${className}`, children: data.map((item, index) => /* @__PURE__ */ jsxs("div", { className: barContainerStyles, children: [
355
+ /* @__PURE__ */ jsx("div", { className: bgBarStyles, children: /* @__PURE__ */ jsx(
356
+ "div",
357
+ {
358
+ className: `${barStyles} ${batColorStyles[item.type ? item.type : "regular"]}`,
359
+ style: { height: `${item.value}%` }
360
+ }
361
+ ) }),
362
+ /* @__PURE__ */ jsx("span", { className: "mk-label text-xs font-medium text-neutral-700 text-center min-w-[40px]", children: item.label })
363
+ ] }, index)) });
364
+ }
365
+
366
+ function MkCard({ className = "", noPadding = false, children }) {
367
+ const baseStyles = [
368
+ "w-full h-full p-[3px]",
369
+ "bg-[var(--color-neutral-200)] ",
370
+ "rounded-[15px]"
371
+ ].join(" ");
372
+ const contentStyles = [
373
+ "w-full h-full",
374
+ "bg-[var(--surface-level3)] ",
375
+ "border border-[var(--border-default)] rounded-[12px]",
376
+ "overflow-hidden"
377
+ ].join(" ");
378
+ const paddingStyle = noPadding ? "" : "p-4";
379
+ return /* @__PURE__ */ jsx("section", { className: `${baseStyles} ${className}`, children: /* @__PURE__ */ jsx("div", { className: `${contentStyles} ${paddingStyle}`, children }) });
380
+ }
381
+
382
+ function MkCheckbox({
383
+ label,
384
+ size = "md",
385
+ className = "",
386
+ checked,
387
+ disabled,
388
+ id,
389
+ onChange,
390
+ ...props
391
+ }) {
392
+ const generatedId = useId();
393
+ const checkboxId = id || generatedId;
394
+ const [isChecked, setIsChecked] = useState(checked ?? false);
395
+ useEffect(() => {
396
+ if (checked !== void 0) {
397
+ setIsChecked(checked);
398
+ }
399
+ }, [checked]);
400
+ const handleChange = (event) => {
401
+ const newChecked = event.target.checked;
402
+ setIsChecked(newChecked);
403
+ onChange?.(event);
404
+ };
405
+ const baseStyle = [
406
+ "appearance-none cursor-pointer",
407
+ "bg-neutral-50 rounded-[7px] border-2 border-neutral-300",
408
+ "transition-all duration-300",
409
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:border-neutral-200",
410
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0",
411
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
412
+ "checked:bg-neutral-600 checked:border-primary-600",
413
+ "checked:enabled:hover:bg-primary-700 checked:enabled:hover:border-primary-700",
414
+ "checked:enabled:hover:shadow-[0_0_4px_var(--color-primary-500)]",
415
+ "disabled:checked:bg-neutral-400 disabled:checked:border-neutral-400",
416
+ "relative flex items-center justify-center"
417
+ ].join(" ");
418
+ const sizeStyles = {
419
+ sm: "w-4 h-4",
420
+ md: "w-5 h-5",
421
+ lg: "w-6 h-6"
422
+ };
423
+ const iconSizes = {
424
+ sm: 12,
425
+ md: 14,
426
+ lg: 16
427
+ };
428
+ const labelSizeStyles = {
429
+ sm: "text-sm",
430
+ md: "text-md",
431
+ lg: "text-lg"
432
+ };
433
+ return /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-2 ${className}`, children: [
434
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
435
+ /* @__PURE__ */ jsx(
436
+ "input",
437
+ {
438
+ type: "checkbox",
439
+ id: checkboxId,
440
+ className: `${baseStyle} ${sizeStyles[size]}`,
441
+ checked: isChecked,
442
+ disabled,
443
+ onChange: handleChange,
444
+ ...props
445
+ }
446
+ ),
447
+ isChecked && /* @__PURE__ */ jsx(
448
+ Check,
449
+ {
450
+ className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none text-white z-10",
451
+ size: iconSizes[size],
452
+ strokeWidth: 3,
453
+ "aria-hidden": "true"
454
+ }
455
+ )
456
+ ] }),
457
+ label && /* @__PURE__ */ jsx(
458
+ "label",
459
+ {
460
+ htmlFor: checkboxId,
461
+ className: `${labelSizeStyles[size]} text-neutral-800 cursor-pointer select-none ${disabled ? "cursor-not-allowed text-neutral-600" : ""}`,
462
+ children: label
463
+ }
464
+ )
465
+ ] });
466
+ }
467
+
468
+ function MkComboBox({
469
+ value,
470
+ size = "md",
471
+ list = [],
472
+ className,
473
+ ...props
474
+ }) {
475
+ const baseStyle = [
476
+ "bg-neutral-50 rounded-[7px] border-2 border-neutral-300",
477
+ "appearance-none text-neutral-800",
478
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-600",
479
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0focus:ring-offset-0",
480
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
481
+ "transition-shadow transition-border duration-300"
482
+ ].join(" ");
483
+ const sizeStyles = {
484
+ sm: "px-3 py-1 pr-8 text-sm font-[14px]",
485
+ md: "px-4 py-2 pr-10 text-md font-[16px]",
486
+ lg: "px-6 py-3 pr-12 text-lg font-[18px]"
487
+ };
488
+ const iconSizes = {
489
+ sm: 16,
490
+ md: 18,
491
+ lg: 20
492
+ };
493
+ const iconPositions = {
494
+ sm: "right-2.5",
495
+ md: "right-3",
496
+ lg: "right-4"
497
+ };
498
+ return /* @__PURE__ */ jsxs("div", { className: "relative block w-full", children: [
499
+ /* @__PURE__ */ jsx(
500
+ "select",
501
+ {
502
+ className: `${baseStyle} ${sizeStyles[size]} w-full ${className}`,
503
+ value,
504
+ ...props,
505
+ children: list.map((item) => /* @__PURE__ */ jsx("option", { value: item.value, children: item.label }, item.value))
506
+ }
507
+ ),
508
+ /* @__PURE__ */ jsx(
509
+ ChevronDown,
510
+ {
511
+ className: `absolute top-1/2 -translate-y-1/2 ${iconPositions[size]} text-neutral-500 pointer-events-none`,
512
+ size: iconSizes[size],
513
+ "aria-hidden": "true"
514
+ }
515
+ )
516
+ ] });
517
+ }
518
+
519
+ function MkDateInput({
520
+ value,
521
+ placeholder = "00:00",
522
+ size = "md",
523
+ className,
524
+ ...props
525
+ }) {
526
+ const baseStyle = [
527
+ "bg-neutral-50 rounded-[7px] border-2 border-neutral-300",
528
+ "text-neutral-800",
529
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-600",
530
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0focus:ring-offset-0",
531
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
532
+ "transition-shadow transition-border duration-300"
533
+ ].join(" ");
534
+ const sizeStyles = {
535
+ sm: "pl-9 pr-3 py-1 text-sm font-[14px]",
536
+ md: "pl-10 pr-4 py-2 text-md font-[16px]",
537
+ lg: "pl-12 pr-6 py-3 text-lg font-[18px]"
538
+ };
539
+ const iconSizes = {
540
+ sm: 16,
541
+ md: 18,
542
+ lg: 20
543
+ };
544
+ const iconPositions = {
545
+ sm: "left-2.5",
546
+ md: "left-3",
547
+ lg: "left-4"
548
+ };
549
+ return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
550
+ /* @__PURE__ */ jsx(
551
+ Calendar,
552
+ {
553
+ className: `absolute top-1/2 -translate-y-1/2 ${iconPositions[size]} text-neutral-500`,
554
+ size: iconSizes[size],
555
+ "aria-hidden": "true"
556
+ }
557
+ ),
558
+ /* @__PURE__ */ jsx(
559
+ "input",
560
+ {
561
+ type: "date",
562
+ className: `${baseStyle} ${sizeStyles[size]} ${className || ""}`,
563
+ placeholder,
564
+ value,
565
+ ...props
566
+ }
567
+ )
568
+ ] });
569
+ }
570
+
571
+ function MkDivider({
572
+ className = "",
573
+ orientation = "horizontal"
574
+ }) {
575
+ const isVertical = orientation === "vertical";
576
+ const baseStyles = [
577
+ "bg-[var(--border-default)]",
578
+ "border-0",
579
+ isVertical ? "w-px self-stretch" : "h-px w-full"
580
+ ].join(" ");
581
+ if (isVertical) {
582
+ return /* @__PURE__ */ jsx(
583
+ "div",
584
+ {
585
+ className: `${baseStyles} ${className}`,
586
+ role: "separator",
587
+ "aria-orientation": "vertical"
588
+ }
589
+ );
590
+ }
591
+ return /* @__PURE__ */ jsx(
592
+ "hr",
593
+ {
594
+ className: `${baseStyles} ${className}`,
595
+ role: "separator",
596
+ "aria-orientation": "horizontal"
597
+ }
598
+ );
599
+ }
600
+
601
+ function MkIconBadge({ color, iconName }) {
602
+ const baseStyle = "inline-flex items-center justify-center p-2 bg-var(--surface-level1) border-3 rounded-full w-fit h-fit";
603
+ const wrapperColorStyle = {
604
+ primary: "bg-primary-100 border-[var(--color-primary-200)]",
605
+ neutral: "bg-neutral-100 border-[var(--color-neutral-200)]",
606
+ success: "bg-success-100 border-[var(--color-success-200)]",
607
+ warning: "bg-warning-100 border-[var(--color-warning-200)]",
608
+ danger: "bg-danger-100 border-[var(--color-danger-200)]",
609
+ info: "bg-info-100 border-[var(--color-info-200)]"
610
+ };
611
+ const iconColorStyle = {
612
+ primary: "var(--color-primary-600)",
613
+ neutral: "var(--color-neutral-600)",
614
+ success: "var(--color-success-600)",
615
+ warning: "var(--color-warning-600)",
616
+ danger: "var(--color-danger-600)",
617
+ info: "var(--color-info-600)"
618
+ };
619
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyle} ${wrapperColorStyle[color]}`, children: /* @__PURE__ */ jsx(DynamicIcon, { name: iconName, color: iconColorStyle[color], size: 35 }) });
620
+ }
621
+
622
+ function MkDetailedListItem({
623
+ title,
624
+ description,
625
+ numericValue,
626
+ icon
627
+ }) {
628
+ return /* @__PURE__ */ jsxs(
629
+ "div",
630
+ {
631
+ className: "flex justify-between items-center bg-var(--surface-level1) hover:bg-neutral-100 p-3 h-[70px] transition-all duration-300 border-1 border-[var(--border-default)] rounded-xl",
632
+ children: [
633
+ icon ? /* @__PURE__ */ jsx(MkIconBadge, { color: icon.color, iconName: icon.iconName }) : null,
634
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-center", children: [
635
+ /* @__PURE__ */ jsx("p", { className: "mk-content", children: title }),
636
+ description ? /* @__PURE__ */ jsx("p", { className: "mk-subcontent", children: description }) : null
637
+ ] }),
638
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
639
+ numericValue ? /* @__PURE__ */ jsx(MkDivider, { orientation: "vertical", className: "mx-2" }) : null,
640
+ numericValue ? /* @__PURE__ */ jsx("span", { className: "mk-content-numeric", children: numericValue }) : null
641
+ ] })
642
+ ]
643
+ }
644
+ );
645
+ }
646
+
647
+ function MkDetailedList({ className, data }) {
648
+ const baseStyle = "flex flex-col gap-2";
649
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyle} ${className}`, children: data.map((element, index) => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
650
+ MkDetailedListItem,
651
+ {
652
+ title: element.title,
653
+ description: element.description,
654
+ numericValue: element.numericValue,
655
+ icon: element.icon
656
+ }
657
+ ) }, index)) });
658
+ }
659
+
660
+ function MkDonutChart({
661
+ data,
662
+ className,
663
+ sizePx = 160,
664
+ thicknessPx = 24,
665
+ centerLabel,
666
+ centerValue
667
+ }) {
668
+ const baseStyles = "flex items-center justify-center";
669
+ const wrapperStyles = "relative";
670
+ const total = data.reduce((sum, d) => sum + Math.max(0, d.value), 0);
671
+ const segmentColorByIndex = [
672
+ "var(--color-primary-500)",
673
+ "var(--color-primary-400)",
674
+ "var(--color-primary-300)",
675
+ "var(--color-primary-200)",
676
+ "var(--color-primary-100)"
677
+ ];
678
+ const ringBackground = total > 0 ? (() => {
679
+ let acc = 0;
680
+ const stops = data.map((d, i) => {
681
+ const v = Math.max(0, d.value);
682
+ const start = acc;
683
+ acc += v / total * 100;
684
+ const color = segmentColorByIndex[i % segmentColorByIndex.length];
685
+ return `${color} ${start}% ${acc}%`;
686
+ });
687
+ return `conic-gradient(${stops.join(", ")})`;
688
+ })() : "conic-gradient(var(--color-neutral-200) 0% 100%)";
689
+ const sizeStyle = { width: sizePx, height: sizePx };
690
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyles} ${className ?? ""}`, children: /* @__PURE__ */ jsxs("div", { className: wrapperStyles, style: sizeStyle, children: [
691
+ /* @__PURE__ */ jsx(
692
+ "div",
693
+ {
694
+ className: "rounded-full",
695
+ style: {
696
+ ...sizeStyle,
697
+ background: ringBackground
698
+ }
699
+ }
700
+ ),
701
+ /* @__PURE__ */ jsxs(
702
+ "div",
703
+ {
704
+ className: "absolute rounded-full bg-white flex flex-col items-center justify-center text-center",
705
+ style: {
706
+ inset: thicknessPx
707
+ },
708
+ children: [
709
+ centerValue ? /* @__PURE__ */ jsx("div", { className: "mk-label text-lg font-semibold text-neutral-900", children: centerValue }) : null,
710
+ centerLabel ? /* @__PURE__ */ jsx("div", { className: "mk-label text-xs font-medium text-neutral-600", children: centerLabel }) : null
711
+ ]
712
+ }
713
+ )
714
+ ] }) });
715
+ }
716
+
717
+ function MkHeader({ title, subtitle, className, children }) {
718
+ const baseStyle = ["flex items-center justify-between", "py-1"].join(" ");
719
+ return /* @__PURE__ */ jsxs("header", { className: `${baseStyle} ${className}`, children: [
720
+ /* @__PURE__ */ jsxs("div", { children: [
721
+ /* @__PURE__ */ jsx("h1", { className: "mk-header-title", children: title }),
722
+ subtitle ? /* @__PURE__ */ jsx("h2", { className: "mk-header-subtitle", children: subtitle }) : null
723
+ ] }),
724
+ children ? /* @__PURE__ */ jsx("div", { children }) : null
725
+ ] });
726
+ }
727
+
728
+ function MkHorizontalBarChart({ className }) {
729
+ return /* @__PURE__ */ jsx("div", { className });
730
+ }
731
+
732
+ function MkStatusIndicator({ color, text }) {
733
+ const baseStyle = text ? "flex items-center gap-1" : "";
734
+ const circle = "w-[15px] h-[15px] border-2 rounded-full p-[1px] flex items-center justify-center box-border";
735
+ const innerCircle = "w-[9px] h-[9px] rounded-full";
736
+ const textStyle = "font-bold leading-none text-[14px]";
737
+ const circleColorStyles = {
738
+ primary: "border-primary-400 shadow-[0_0_4px_var(--color-primary-400)]",
739
+ neutral: "border-neutral-400 shadow-[0_0_4px_var(--color-neutral-400)]",
740
+ success: "border-success-400 shadow-[0_0_4px_var(--color-success-400)]",
741
+ warning: "border-warning-400 shadow-[0_0_4px_var(--color-warning-400)]",
742
+ danger: "border-danger-400 shadow-[0_0_4px_var(--color-danger-400)]",
743
+ info: "border-info-400 shadow-[0_0_4px_var(--color-info-400)]"
744
+ };
745
+ const innerCircleColorStyles = {
746
+ primary: "bg-primary-400",
747
+ neutral: "bg-neutral-400",
748
+ success: "bg-success-400",
749
+ warning: "bg-warning-400",
750
+ danger: "bg-danger-400",
751
+ info: "bg-info-400"
752
+ };
753
+ const textColorStyles = {
754
+ primary: "text-primary-900",
755
+ neutral: "text-neutral-900",
756
+ success: "text-success-900",
757
+ warning: "text-warning-900",
758
+ danger: "text-danger-900",
759
+ info: "text-info-900"
760
+ };
761
+ return /* @__PURE__ */ jsxs("div", { className: baseStyle, children: [
762
+ /* @__PURE__ */ jsx("div", { className: `${circle} ${circleColorStyles[color]}`, children: /* @__PURE__ */ jsx(
763
+ "div",
764
+ {
765
+ className: `${innerCircle} ${innerCircleColorStyles[color]}`
766
+ }
767
+ ) }),
768
+ text ? /* @__PURE__ */ jsx("span", { className: `${textStyle} ${textColorStyles[color]}`, children: text }) : null
769
+ ] });
770
+ }
771
+
772
+ function MkListItem({ title, numericValue, status }) {
773
+ return /* @__PURE__ */ jsxs(
774
+ "div",
775
+ {
776
+ className: "flex justify-between items-center bg-neutral-50 hover:bg-neutral-100 p-3 h-[70px] transition-all duration-300",
777
+ children: [
778
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-center", children: [
779
+ /* @__PURE__ */ jsx("p", { className: "mk-content", children: title }),
780
+ status ? /* @__PURE__ */ jsx(MkStatusIndicator, { color: status.color, text: status.text }) : null
781
+ ] }),
782
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
783
+ status && numericValue ? /* @__PURE__ */ jsx(MkDivider, { orientation: "vertical", className: "mx-2" }) : null,
784
+ numericValue ? /* @__PURE__ */ jsx("span", { className: "mk-content-numeric", children: numericValue }) : null
785
+ ] })
70
786
  ]
71
787
  }
72
788
  );
73
789
  }
74
790
 
75
- export { MkButton };
791
+ function MkList({ className, data }) {
792
+ return /* @__PURE__ */ jsx("div", { className, children: data.map((element, index) => /* @__PURE__ */ jsxs("div", { children: [
793
+ /* @__PURE__ */ jsx(
794
+ MkListItem,
795
+ {
796
+ title: element.title,
797
+ description: element.description,
798
+ numericValue: element.numericValue,
799
+ status: element.status
800
+ }
801
+ ),
802
+ index < data.length - 1 && /* @__PURE__ */ jsx(MkDivider, {})
803
+ ] }, index)) });
804
+ }
805
+
806
+ function MkLineChart({ className }) {
807
+ return /* @__PURE__ */ jsx("div", { className });
808
+ }
809
+
810
+ function MkMain({ className = "", children }) {
811
+ const baseStyles = [
812
+ "w-full h-full p-6",
813
+ "bg-[var(--surface-level1)] ",
814
+ "border border-[var(--border-default)] rounded-[15px]"
815
+ ].join(" ");
816
+ return /* @__PURE__ */ jsx("main", { className: `${baseStyles} ${className}`, children });
817
+ }
818
+
819
+ function MkModal({
820
+ open = false,
821
+ onClose,
822
+ children,
823
+ className = ""
824
+ }) {
825
+ const dialogRef = useRef(null);
826
+ useEffect(() => {
827
+ const dialog = dialogRef.current;
828
+ if (!dialog) return;
829
+ if (open) {
830
+ dialog.showModal();
831
+ } else {
832
+ onClose?.();
833
+ dialog.close();
834
+ }
835
+ }, [open]);
836
+ const handleBackdropClick = (e) => {
837
+ if (e.target === e.currentTarget) {
838
+ onClose?.();
839
+ dialogRef.current?.close();
840
+ }
841
+ };
842
+ const handleClose = () => {
843
+ onClose?.();
844
+ dialogRef.current?.close();
845
+ };
846
+ const baseStyles = [
847
+ "rounded-[15px]",
848
+ "bg-transparent",
849
+ "shadow-2xl",
850
+ "overflow-hidden",
851
+ "backdrop:backdrop-blur-sm",
852
+ "m-auto",
853
+ className
854
+ ].join(" ");
855
+ const borderContentStyles = [
856
+ "p-[3px]",
857
+ "bg-[var(--color-neutral-300)] ",
858
+ "rounded-[15px]"
859
+ ].join(" ");
860
+ const contentStyles = [
861
+ "w-full h-full p-[3px]",
862
+ "bg-[var(--surface-level1)]",
863
+ "border border-[var(--border-default)] rounded-[12px]",
864
+ "overflow-hidden"
865
+ ].join(" ");
866
+ return /* @__PURE__ */ jsx(
867
+ "dialog",
868
+ {
869
+ ref: dialogRef,
870
+ className: baseStyles,
871
+ onCancel: handleClose,
872
+ onClick: handleBackdropClick,
873
+ children: /* @__PURE__ */ jsx("div", { className: borderContentStyles, children: /* @__PURE__ */ jsx("div", { className: contentStyles, children: /* @__PURE__ */ jsx("div", { className: "w-full max-h-[80vh] overflow-y-auto", children }) }) })
874
+ }
875
+ );
876
+ }
877
+
878
+ function MkNavItem({
879
+ label,
880
+ iconName,
881
+ link,
882
+ as,
883
+ isActive = false,
884
+ collapsed = false,
885
+ ...props
886
+ }) {
887
+ const baseStyle = "group inline-flex flex-row items-center p-[10px] gap-[5px] hover:bg-primary-100 w-fit transition-all duration-300 cursor-pointer rounded-[7px]";
888
+ const iconStyle = "text-neutral-600 group-hover:text-primary-800 transition-all duration-300";
889
+ const activeBaseStyle = "bg-primary-200 text-primary-800";
890
+ const activeIconStyle = "text-primary-800";
891
+ let Component = "a";
892
+ const linkProps = {};
893
+ if (as) {
894
+ Component = as;
895
+ linkProps.to = link;
896
+ linkProps.href = link;
897
+ } else {
898
+ linkProps.href = link;
899
+ }
900
+ return /* @__PURE__ */ jsxs(
901
+ Component,
902
+ {
903
+ className: `${baseStyle} ${isActive ? activeBaseStyle : ""}`,
904
+ ...linkProps,
905
+ ...props,
906
+ children: [
907
+ iconName && /* @__PURE__ */ jsx(
908
+ DynamicIcon,
909
+ {
910
+ name: iconName,
911
+ size: 20,
912
+ className: `${iconStyle} ${isActive ? activeIconStyle : ""}`
913
+ }
914
+ ),
915
+ collapsed ? null : /* @__PURE__ */ jsx(
916
+ "span",
917
+ {
918
+ className: "mk-caption group-hover:text-primary-800 transition-all duration-300 ",
919
+ children: label
920
+ }
921
+ )
922
+ ]
923
+ }
924
+ );
925
+ }
926
+
927
+ function MkNavList({ data, collapsed, className }) {
928
+ return /* @__PURE__ */ jsx("nav", { children: /* @__PURE__ */ jsx("ul", { className: `flex flex-col gap-[10px] ${className || ""}`, children: data.map((item, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
929
+ MkNavItem,
930
+ {
931
+ label: item.label,
932
+ iconName: item.iconName,
933
+ link: item.link,
934
+ isActive: item.isActive,
935
+ collapsed
936
+ },
937
+ index
938
+ ) })) }) });
939
+ }
940
+
941
+ function MkNumberInput({
942
+ value,
943
+ placeholder,
944
+ size = "md",
945
+ className,
946
+ ...props
947
+ }) {
948
+ const baseStyle = [
949
+ "bg-neutral-50 rounded-[7px] border-2 border-neutral-300",
950
+ "text-neutral-800",
951
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-600",
952
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0focus:ring-offset-0",
953
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
954
+ "transition-shadow transition-border duration-300"
955
+ ].join(" ");
956
+ const sizeStyles = {
957
+ sm: "px-3 py-1 text-sm font-[14px]",
958
+ md: 'px-4 py-2 text-md font-[16px]"',
959
+ lg: 'px-6 py-3 text-lg font-[18px]"'
960
+ };
961
+ return /* @__PURE__ */ jsx(
962
+ "input",
963
+ {
964
+ type: "number",
965
+ className: `${baseStyle} ${sizeStyles[size]} ${className}`,
966
+ placeholder,
967
+ value,
968
+ ...props
969
+ }
970
+ );
971
+ }
972
+
973
+ function MkPanel({ className = "", children }) {
974
+ const baseStyles = [
975
+ "w-full h-full p-3",
976
+ "bg-[var(--surface-level2)] ",
977
+ "rounded-[20px]"
978
+ ].join(" ");
979
+ return /* @__PURE__ */ jsx("main", { className: `${baseStyles} ${className}`, children });
980
+ }
981
+
982
+ function MkProgressBar({ percentage }) {
983
+ const clampedPercentage = Math.min(Math.max(percentage, 0), 100);
984
+ return /* @__PURE__ */ jsx("div", { className: "w-full h-[10px] bg-neutral-200 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx(
985
+ "div",
986
+ {
987
+ className: "h-[10px] bg-primary-400 rounded-full transition-all duration-300 block",
988
+ style: {
989
+ width: `${clampedPercentage}%`,
990
+ minHeight: "10px"
991
+ }
992
+ }
993
+ ) });
994
+ }
995
+
996
+ function MkRadioButton({
997
+ label,
998
+ value,
999
+ name,
1000
+ size = "md",
1001
+ className = "",
1002
+ checked,
1003
+ disabled,
1004
+ id,
1005
+ onChange,
1006
+ ...props
1007
+ }) {
1008
+ const generatedId = useId();
1009
+ const checkboxId = id || generatedId;
1010
+ const [isChecked, setIsChecked] = useState(checked ?? false);
1011
+ useEffect(() => {
1012
+ if (checked !== void 0) {
1013
+ setIsChecked(checked);
1014
+ }
1015
+ }, [checked]);
1016
+ const handleChange = (event) => {
1017
+ const newChecked = event.target.checked;
1018
+ setIsChecked(newChecked);
1019
+ onChange?.(event);
1020
+ };
1021
+ const baseStyle = [
1022
+ "appearance-none cursor-pointer",
1023
+ "bg-neutral-50 rounded-full border-2 border-neutral-300",
1024
+ "transition-all duration-300",
1025
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:border-neutral-300",
1026
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0",
1027
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
1028
+ "checked:bg-neutral-50 checked:border-primary-300",
1029
+ "checked:enabled:hover:bg-primary-100 checked:enabled:hover:border-primary-300",
1030
+ "checked:enabled:hover:shadow-[0_0_4px_var(--color-primary-500)]",
1031
+ "disabled:checked:bg-neutral-100 disabled:checked:border-neutral-400",
1032
+ "relative flex items-center justify-center"
1033
+ ].join(" ");
1034
+ const sizeStyles = {
1035
+ sm: "w-5 h-5",
1036
+ md: "w-6 h-6",
1037
+ lg: "w-7 h-7"
1038
+ };
1039
+ const iconSizes = {
1040
+ sm: 50,
1041
+ md: 70,
1042
+ lg: 90
1043
+ };
1044
+ const labelSizeStyles = {
1045
+ sm: "text-sm",
1046
+ md: "text-md",
1047
+ lg: "text-lg"
1048
+ };
1049
+ const iconStyle = [
1050
+ "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none z-10",
1051
+ disabled === true ? "text-[var(--color-neutral-400)]" : "text-[var(--color-primary-300)]"
1052
+ ].join(" ");
1053
+ const labelStyle = [
1054
+ "text-neutral-800 cursor-pointer select-none",
1055
+ disabled === true ? "cursor-not-allowed text-neutral-600" : ""
1056
+ ].join(" ");
1057
+ return /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-2 ${className}`, children: [
1058
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1059
+ /* @__PURE__ */ jsx(
1060
+ "input",
1061
+ {
1062
+ type: "radio",
1063
+ name,
1064
+ value,
1065
+ id: checkboxId,
1066
+ className: `${baseStyle} ${sizeStyles[size]}`,
1067
+ checked: isChecked,
1068
+ disabled,
1069
+ onChange: handleChange,
1070
+ ...props
1071
+ }
1072
+ ),
1073
+ isChecked && /* @__PURE__ */ jsx(
1074
+ DotIcon,
1075
+ {
1076
+ className: iconStyle,
1077
+ size: iconSizes[size],
1078
+ strokeWidth: 3,
1079
+ "aria-hidden": "true"
1080
+ }
1081
+ )
1082
+ ] }),
1083
+ label && /* @__PURE__ */ jsx(
1084
+ "label",
1085
+ {
1086
+ htmlFor: checkboxId,
1087
+ className: `${labelStyle} ${labelSizeStyles[size]}`,
1088
+ children: label
1089
+ }
1090
+ )
1091
+ ] });
1092
+ }
1093
+
1094
+ function MkSectionHeader({ title, className, children }) {
1095
+ const baseStyle = "flex items-center justify-between py-1";
1096
+ return /* @__PURE__ */ jsxs("div", { className: `${baseStyle} ${className}`, children: [
1097
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h5", { className: "mk-section-title", children: title }) }),
1098
+ children ? /* @__PURE__ */ jsx("div", { children }) : null
1099
+ ] });
1100
+ }
1101
+
1102
+ function MkStackedBarChart({ data, className }) {
1103
+ const baseStyles = "flex flex-row flex-wrap justify-between p-1 w-full max-w-4xl";
1104
+ const barContainerStyles = "flex flex-col items-center gap-2 w-12";
1105
+ const bgBarStyles = "w-[25px] h-32 relative overflow-hidden flex items-end";
1106
+ const segmentBaseStyles = "w-full";
1107
+ const segmentColorByIndex = [
1108
+ "bg-primary-500",
1109
+ "bg-primary-400",
1110
+ "bg-neutral-300",
1111
+ "bg-neutral-500"
1112
+ ];
1113
+ const barOpacityByType = {
1114
+ faded: "opacity-50",
1115
+ regular: "opacity-100",
1116
+ "no-data": "opacity-70"
1117
+ };
1118
+ const labelStyles = "mk-label text-xs font-medium text-neutral-700 text-center min-w-[40px]";
1119
+ const totals = data.map((item) => item.values.reduce((sum, v) => sum + v, 0));
1120
+ const maxTotal = Math.max(...totals, 1);
1121
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyles} ${className ?? ""}`, children: data.map((item, index) => {
1122
+ const total = totals[index] || 0;
1123
+ const barHeightPercent = total / maxTotal * 100;
1124
+ return /* @__PURE__ */ jsxs("div", { className: barContainerStyles, children: [
1125
+ /* @__PURE__ */ jsx("div", { className: bgBarStyles, children: /* @__PURE__ */ jsx(
1126
+ "div",
1127
+ {
1128
+ className: `w-full flex flex-col justify-end rounded-[5px] ${barOpacityByType[item.type]}`,
1129
+ style: { height: `${barHeightPercent}%` },
1130
+ children: item.values.map((value, i) => {
1131
+ const segmentHeightPercent = total > 0 ? value / total * 100 : 0;
1132
+ const isFirst = i === 0;
1133
+ const isLast = i === item.values.length - 1;
1134
+ const radiusClass = [
1135
+ isFirst ? "rounded-t-[5px]" : "",
1136
+ isLast ? "rounded-b-[5px]" : ""
1137
+ ].join(" ");
1138
+ return /* @__PURE__ */ jsx(
1139
+ "div",
1140
+ {
1141
+ className: `${segmentBaseStyles} ${segmentColorByIndex[i % segmentColorByIndex.length]} ${radiusClass}`,
1142
+ style: { height: `${segmentHeightPercent}%` }
1143
+ },
1144
+ i
1145
+ );
1146
+ })
1147
+ }
1148
+ ) }),
1149
+ /* @__PURE__ */ jsx("span", { className: labelStyles, children: item.label })
1150
+ ] }, index);
1151
+ }) });
1152
+ }
1153
+
1154
+ function MkStepper({ steps, currentStep }) {
1155
+ const validSteps = Math.max(1, steps);
1156
+ const validCurrentStep = Math.max(0, Math.min(currentStep, validSteps));
1157
+ return /* @__PURE__ */ jsx("div", { className: "w-full h-[10px] rounded-full overflow-hidden flex gap-1", children: Array.from({ length: validSteps }, (_, index) => {
1158
+ return /* @__PURE__ */ jsx(
1159
+ "div",
1160
+ {
1161
+ className: `h-[10px] transition-all duration-300 flex-shrink-0 ${index + 1 <= validCurrentStep ? "bg-primary-400" : "bg-neutral-200"}`,
1162
+ style: {
1163
+ width: `${100 / validSteps}%`,
1164
+ minHeight: "10px"
1165
+ }
1166
+ },
1167
+ index
1168
+ );
1169
+ }) });
1170
+ }
1171
+
1172
+ function MkSubHeader({
1173
+ title,
1174
+ subtitle,
1175
+ className,
1176
+ children
1177
+ }) {
1178
+ const baseStyle = "flex items-center justify-between py-1";
1179
+ return /* @__PURE__ */ jsxs("div", { className: `${baseStyle} ${className}`, children: [
1180
+ /* @__PURE__ */ jsxs("div", { children: [
1181
+ /* @__PURE__ */ jsx("h3", { className: "mk-subheader-title", children: title }),
1182
+ subtitle ? /* @__PURE__ */ jsx("h4", { className: "mk-subheader-subtitle", children: subtitle }) : null
1183
+ ] }),
1184
+ children ? /* @__PURE__ */ jsx("div", { children }) : null
1185
+ ] });
1186
+ }
1187
+
1188
+ function MkTab({ data, onTabSelect, selectedTab }) {
1189
+ const [selectedTabIndex, setSelectedTabIndex] = useState(
1190
+ selectedTab && selectedTab < data.length ? selectedTab : 0
1191
+ );
1192
+ const baseStyle = "w-full p-[2px] flex flex-row gap-1 bg-neutral-100 rounded-[7px]";
1193
+ const tabStyle = "px-[10px] py-[5px] rounded-[5px] hover:bg-neutral-200 cursor-pointer transition-all duration-300 flex-1 sm:flex-none flex items-center justify-center border border-transparent";
1194
+ const selectedTabStyle = "bg-[var(--surface-level1)] border-[var(--border-default)]";
1195
+ const handleSelect = (tabIndex) => {
1196
+ onTabSelect?.(tabIndex);
1197
+ setSelectedTabIndex(tabIndex);
1198
+ };
1199
+ return /* @__PURE__ */ jsx("div", { className: baseStyle, children: data.map((item, i) => /* @__PURE__ */ jsx(
1200
+ "button",
1201
+ {
1202
+ className: `${tabStyle} ${selectedTabIndex == i ? selectedTabStyle : ""}`,
1203
+ onClick: () => handleSelect(i),
1204
+ type: "button",
1205
+ children: /* @__PURE__ */ jsx("span", { className: "mk-label", children: item })
1206
+ },
1207
+ i
1208
+ )) });
1209
+ }
1210
+
1211
+ function MkTag({ data, onRemove, className }) {
1212
+ const baseStyle = "w-full p-[2px] flex flex-row gap-1";
1213
+ const tagStyle = [
1214
+ "flex items-center justify-center",
1215
+ "px-[10px] py-[5px] rounded-[5px] flex-1 sm:flex-none gap-2",
1216
+ "cursor-pointer transition-all duration-300",
1217
+ "bg-[var(--surface-level1)] hover:bg-neutral-200",
1218
+ "border border-[var(--border-default)]"
1219
+ ].join(" ");
1220
+ const handleRemove = (id) => (e) => {
1221
+ e.stopPropagation();
1222
+ if (onRemove) {
1223
+ onRemove(id);
1224
+ }
1225
+ };
1226
+ return /* @__PURE__ */ jsx("div", { className: `${baseStyle} ${className}`, children: data.map((tag) => /* @__PURE__ */ jsxs("div", { className: `${tagStyle}`, children: [
1227
+ /* @__PURE__ */ jsx("span", { className: "mk-label", children: tag.label }),
1228
+ /* @__PURE__ */ jsx(
1229
+ MkButton,
1230
+ {
1231
+ iconOnly: true,
1232
+ iconName: "x",
1233
+ variant: "transparent",
1234
+ onClick: handleRemove(tag.id)
1235
+ }
1236
+ )
1237
+ ] })) });
1238
+ }
1239
+
1240
+ function MkTextInput({
1241
+ value,
1242
+ placeholder,
1243
+ size = "md",
1244
+ className,
1245
+ ...props
1246
+ }) {
1247
+ const baseStyle = [
1248
+ "bg-neutral-50 rounded-[7px] border-2 border-neutral-300",
1249
+ "text-neutral-800",
1250
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-600",
1251
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0focus:ring-offset-0",
1252
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
1253
+ "transition-shadow transition-border duration-300"
1254
+ ].join(" ");
1255
+ const sizeStyles = {
1256
+ sm: "px-3 py-1 text-sm font-[14px]",
1257
+ md: 'px-4 py-2 text-md font-[16px]"',
1258
+ lg: 'px-6 py-3 text-lg font-[18px]"'
1259
+ };
1260
+ return /* @__PURE__ */ jsx(
1261
+ "input",
1262
+ {
1263
+ className: `${baseStyle} ${sizeStyles[size]} ${className}`,
1264
+ placeholder,
1265
+ value,
1266
+ ...props
1267
+ }
1268
+ );
1269
+ }
1270
+
1271
+ function MkTimeInput({
1272
+ value,
1273
+ placeholder = "00:00",
1274
+ size = "md",
1275
+ className,
1276
+ onChange,
1277
+ ...props
1278
+ }) {
1279
+ const [displayValue, setDisplayValue] = useState(value || "");
1280
+ useEffect(() => {
1281
+ if (value !== void 0) {
1282
+ setDisplayValue(value);
1283
+ }
1284
+ }, [value]);
1285
+ const applyMask = useCallback((inputValue) => {
1286
+ const digits = inputValue.replace(/\D/g, "");
1287
+ return digits.substring(0, 2) + ":" + digits.substring(2);
1288
+ }, []);
1289
+ const handleChange = useCallback(
1290
+ (e) => {
1291
+ const maskedValue = applyMask(e.target.value);
1292
+ setDisplayValue(maskedValue);
1293
+ if (onChange) {
1294
+ const syntheticEvent = {
1295
+ ...e,
1296
+ target: { ...e.target, value: maskedValue }
1297
+ };
1298
+ onChange(syntheticEvent);
1299
+ }
1300
+ },
1301
+ [applyMask, onChange]
1302
+ );
1303
+ const baseStyle = [
1304
+ "bg-neutral-50 rounded-[7px] border-2 border-neutral-300",
1305
+ "text-neutral-800",
1306
+ "disabled:cursor-not-allowed disabled:bg-neutral-100 disabled:text-neutral-600",
1307
+ "enabled:focus:border-primary-300 enabled:focus:outline-none enabled:focus:ring-0focus:ring-offset-0",
1308
+ "enabled:hover:shadow-[0_0_4px_var(--color-primary-400)] enabled:hover:border-primary-300",
1309
+ "transition-shadow transition-border duration-300"
1310
+ ].join(" ");
1311
+ const sizeStyles = {
1312
+ sm: "pl-9 pr-3 py-1 text-sm font-[14px]",
1313
+ md: "pl-10 pr-4 py-2 text-md font-[16px]",
1314
+ lg: "pl-12 pr-6 py-3 text-lg font-[18px]"
1315
+ };
1316
+ const iconSizes = {
1317
+ sm: 16,
1318
+ md: 18,
1319
+ lg: 20
1320
+ };
1321
+ const iconPositions = {
1322
+ sm: "left-2.5",
1323
+ md: "left-3",
1324
+ lg: "left-4"
1325
+ };
1326
+ return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1327
+ /* @__PURE__ */ jsx(
1328
+ Clock,
1329
+ {
1330
+ className: `absolute top-1/2 -translate-y-1/2 ${iconPositions[size]} text-neutral-500`,
1331
+ size: iconSizes[size],
1332
+ "aria-hidden": "true"
1333
+ }
1334
+ ),
1335
+ /* @__PURE__ */ jsx(
1336
+ "input",
1337
+ {
1338
+ type: "text",
1339
+ className: `${baseStyle} ${sizeStyles[size]} ${className || ""}`,
1340
+ placeholder,
1341
+ value: value !== void 0 ? value : displayValue,
1342
+ onChange: handleChange,
1343
+ maxLength: 5,
1344
+ ...props
1345
+ }
1346
+ )
1347
+ ] });
1348
+ }
1349
+
1350
+ function MkTotalizers({ className }) {
1351
+ return /* @__PURE__ */ jsx("div", { className });
1352
+ }
1353
+
1354
+ function MkTopBar({ rightMenu, className, children }) {
1355
+ const baseStyle = "w-full flex justify-between items-center p-3";
1356
+ return /* @__PURE__ */ jsxs("section", { className: `${baseStyle} ${className}`, children: [
1357
+ /* @__PURE__ */ jsx(
1358
+ "button",
1359
+ {
1360
+ className: "w-[45px] h-[45px] flex items-center justify-center transition-colors duration-200 hover:bg-neutral-100 rounded-full",
1361
+ "aria-label": "Menu",
1362
+ children: /* @__PURE__ */ jsx(Menu, { size: 30, color: "var(--color-neutral-700)" })
1363
+ }
1364
+ ),
1365
+ children ? children : null,
1366
+ rightMenu ? rightMenu : null
1367
+ ] });
1368
+ }
1369
+
1370
+ function MkUserAvatar({ initials }) {
1371
+ const baseStyle = [
1372
+ "w-[40px] h-[40px] min-w-[40px] min-h-[40px] p-1",
1373
+ "transition-all duration-300 cursor-pointer duration-200",
1374
+ "bg-neutral-100 hover:bg-neutral-200",
1375
+ "border-2 border-neutral-300 rounded-full",
1376
+ "flex items-center justify-center"
1377
+ ].join(" ");
1378
+ return /* @__PURE__ */ jsx("div", { className: baseStyle, children: /* @__PURE__ */ jsx("span", { className: "text-neutral-700 font-bold text-base", children: initials.substring(0, 2) }) });
1379
+ }
1380
+
1381
+ export { MkAlert, MkBarChart, MkBarHistoryChart, MkBottomSheet, MkButton, MkCard, MkCheckbox, MkComboBox, MkDateInput, MkDetailedList, MkDivider, MkDonutChart, MkHeader, MkHorizontalBarChart, MkIconBadge, MkLineChart, MkList, MkMain, MkModal, MkNavItem, MkNavList, MkNumberInput, MkPanel, MkProgressBar, MkRadioButton, MkSectionHeader, MkStackedBarChart, MkStatusIndicator, MkStepper, MkSubHeader, MkTab, MkTag, MkTextInput, MkTimeInput, MkTopBar, MkTotalizers, MkUserAvatar };