@justin_evo/evo-ui 1.0.1

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 (110) hide show
  1. package/dist/Alert/Alert.d.ts +11 -0
  2. package/dist/AutoComplete/AutoComplete.d.ts +95 -0
  3. package/dist/Badge/Badge.d.ts +23 -0
  4. package/dist/Breadcrumb/Breadcrumb.d.ts +16 -0
  5. package/dist/Button/Button.d.ts +54 -0
  6. package/dist/Card/Card.d.ts +60 -0
  7. package/dist/Checkbox/Checkbox.d.ts +16 -0
  8. package/dist/CommandPalette/CommandPalette.d.ts +17 -0
  9. package/dist/Container/Container.d.ts +10 -0
  10. package/dist/Divider/Divider.d.ts +7 -0
  11. package/dist/Form/Form.d.ts +61 -0
  12. package/dist/Grid/Grid.d.ts +23 -0
  13. package/dist/ImageCropper/ImageCropper.d.ts +111 -0
  14. package/dist/Input/Input.d.ts +12 -0
  15. package/dist/Modal/Modal.d.ts +26 -0
  16. package/dist/Nav/Nav.d.ts +63 -0
  17. package/dist/Notification/Notification.d.ts +186 -0
  18. package/dist/Pagination/Pagination.d.ts +10 -0
  19. package/dist/Radio/Radio.d.ts +20 -0
  20. package/dist/RichTextArea/RichTextArea.d.ts +70 -0
  21. package/dist/Select/Select.d.ts +44 -0
  22. package/dist/Skeleton/Skeleton.d.ts +23 -0
  23. package/dist/Stack/Stack.d.ts +16 -0
  24. package/dist/Table/Table.d.ts +77 -0
  25. package/dist/Tabs/Tabs.d.ts +28 -0
  26. package/dist/Theme/ThemeProvider.d.ts +96 -0
  27. package/dist/Theme/ThemeToggle.d.ts +22 -0
  28. package/dist/Toggle/Toggle.d.ts +11 -0
  29. package/dist/Tooltip/Tooltip.d.ts +10 -0
  30. package/dist/TopNav/TopNav.d.ts +76 -0
  31. package/dist/TreeSelect/TreeSelect.d.ts +50 -0
  32. package/dist/declarations.d.ts +6 -0
  33. package/dist/evo-ui.css +1 -0
  34. package/dist/index.cjs.js +1 -0
  35. package/dist/index.d.ts +31 -0
  36. package/dist/index.es.js +5688 -0
  37. package/package.json +52 -0
  38. package/src/Alert/Alert.tsx +49 -0
  39. package/src/AutoComplete/AutoComplete.tsx +810 -0
  40. package/src/Badge/Badge.tsx +53 -0
  41. package/src/Breadcrumb/Breadcrumb.tsx +53 -0
  42. package/src/Button/Button.tsx +125 -0
  43. package/src/Card/Card.tsx +257 -0
  44. package/src/Checkbox/Checkbox.tsx +59 -0
  45. package/src/CommandPalette/CommandPalette.tsx +185 -0
  46. package/src/Container/Container.tsx +31 -0
  47. package/src/Divider/Divider.tsx +31 -0
  48. package/src/Form/Form.tsx +185 -0
  49. package/src/Grid/Grid.tsx +66 -0
  50. package/src/ImageCropper/ImageCropper.tsx +911 -0
  51. package/src/Input/Input.tsx +74 -0
  52. package/src/Modal/Modal.tsx +77 -0
  53. package/src/Nav/Nav.tsx +626 -0
  54. package/src/Notification/Notification.tsx +1503 -0
  55. package/src/Pagination/Pagination.tsx +76 -0
  56. package/src/Radio/Radio.tsx +69 -0
  57. package/src/RichTextArea/RichTextArea.tsx +869 -0
  58. package/src/Select/Select.tsx +515 -0
  59. package/src/Skeleton/Skeleton.tsx +70 -0
  60. package/src/Stack/Stack.tsx +52 -0
  61. package/src/Table/Table.tsx +335 -0
  62. package/src/Tabs/Tabs.tsx +90 -0
  63. package/src/Theme/ThemeProvider.tsx +253 -0
  64. package/src/Theme/ThemeToggle.tsx +79 -0
  65. package/src/Toggle/Toggle.tsx +48 -0
  66. package/src/Tooltip/Tooltip.tsx +38 -0
  67. package/src/TopNav/TopNav.tsx +994 -0
  68. package/src/TreeSelect/TreeSelect.tsx +825 -0
  69. package/src/css/alert.module.scss +93 -0
  70. package/src/css/autocomplete.module.scss +416 -0
  71. package/src/css/badge.module.scss +82 -0
  72. package/src/css/base/_color.scss +159 -0
  73. package/src/css/base/_theme.scss +237 -0
  74. package/src/css/base/_variables.scss +161 -0
  75. package/src/css/breadcrumb.module.scss +50 -0
  76. package/src/css/button.module.scss +385 -0
  77. package/src/css/card.module.scss +217 -0
  78. package/src/css/checkbox.module.scss +120 -0
  79. package/src/css/commandpalette.module.scss +211 -0
  80. package/src/css/container.module.scss +18 -0
  81. package/src/css/divider.module.scss +41 -0
  82. package/src/css/form.module.scss +245 -0
  83. package/src/css/imagecropper.module.scss +397 -0
  84. package/src/css/input.module.scss +89 -0
  85. package/src/css/modal.module.scss +105 -0
  86. package/src/css/nav.module.scss +339 -0
  87. package/src/css/notification.module.scss +691 -0
  88. package/src/css/pagination.module.scss +63 -0
  89. package/src/css/radio.module.scss +89 -0
  90. package/src/css/richtextarea.module.scss +307 -0
  91. package/src/css/select.module.scss +525 -0
  92. package/src/css/skeleton.module.scss +30 -0
  93. package/src/css/table.module.scss +386 -0
  94. package/src/css/tabs.module.scss +63 -0
  95. package/src/css/theme-toggle.module.scss +83 -0
  96. package/src/css/toggle.module.scss +54 -0
  97. package/src/css/tooltip.module.scss +97 -0
  98. package/src/css/topnav.module.scss +396 -0
  99. package/src/css/treeselect.module.scss +558 -0
  100. package/src/css/utilities/_borders.scss +111 -0
  101. package/src/css/utilities/_colors.scss +66 -0
  102. package/src/css/utilities/_effects.scss +216 -0
  103. package/src/css/utilities/_layout.scss +181 -0
  104. package/src/css/utilities/_position.scss +75 -0
  105. package/src/css/utilities/_sizing.scss +138 -0
  106. package/src/css/utilities/_spacing.scss +99 -0
  107. package/src/css/utilities/_typography.scss +121 -0
  108. package/src/css/utilities/index.scss +24 -0
  109. package/src/declarations.d.ts +6 -0
  110. package/src/index.ts +60 -0
@@ -0,0 +1,79 @@
1
+ import { useEvoTheme } from './ThemeProvider';
2
+ import styles from '../css/theme-toggle.module.scss';
3
+
4
+ export interface EvoThemeToggleProps {
5
+ /** Visual size of the toggle. @default 'md' */
6
+ size?: 'sm' | 'md' | 'lg';
7
+ /** Accessible label. @default 'Toggle color theme' */
8
+ ariaLabel?: string;
9
+ /** Extra className to merge with the built-in styles. */
10
+ className?: string;
11
+ }
12
+
13
+ /**
14
+ * A drop-in button that flips between light and dark mode.
15
+ *
16
+ * Sits inside an `<EvoThemeProvider>`. The icon and animation
17
+ * automatically reflect the resolved theme.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <EvoThemeProvider>
22
+ * <EvoThemeToggle />
23
+ * </EvoThemeProvider>
24
+ * ```
25
+ */
26
+ export const EvoThemeToggle = ({
27
+ size = 'md',
28
+ ariaLabel = 'Toggle color theme',
29
+ className,
30
+ }: EvoThemeToggleProps) => {
31
+ const { resolvedTheme, toggleTheme } = useEvoTheme();
32
+ const isDark = resolvedTheme === 'dark';
33
+
34
+ const classes = [styles.toggle, styles[size], className].filter(Boolean).join(' ');
35
+
36
+ return (
37
+ <button
38
+ type="button"
39
+ role="switch"
40
+ aria-checked={isDark}
41
+ aria-label={ariaLabel}
42
+ onClick={toggleTheme}
43
+ className={classes}
44
+ data-theme-state={resolvedTheme}
45
+ >
46
+ <span className={styles.track}>
47
+ <span className={styles.thumb}>
48
+ {/* Sun icon */}
49
+ <svg
50
+ className={styles.sun}
51
+ viewBox="0 0 24 24"
52
+ fill="none"
53
+ stroke="currentColor"
54
+ strokeWidth="2"
55
+ strokeLinecap="round"
56
+ strokeLinejoin="round"
57
+ aria-hidden="true"
58
+ >
59
+ <circle cx="12" cy="12" r="4" />
60
+ <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41" />
61
+ </svg>
62
+ {/* Moon icon */}
63
+ <svg
64
+ className={styles.moon}
65
+ viewBox="0 0 24 24"
66
+ fill="none"
67
+ stroke="currentColor"
68
+ strokeWidth="2"
69
+ strokeLinecap="round"
70
+ strokeLinejoin="round"
71
+ aria-hidden="true"
72
+ >
73
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" />
74
+ </svg>
75
+ </span>
76
+ </span>
77
+ </button>
78
+ );
79
+ };
@@ -0,0 +1,48 @@
1
+ import styles from '../css/toggle.module.scss';
2
+
3
+ type ToggleSize = 'sm' | 'md' | 'lg';
4
+
5
+ interface EvoToggleProps {
6
+ checked: boolean;
7
+ onChange: (checked: boolean) => void;
8
+ label?: string;
9
+ disabled?: boolean;
10
+ size?: ToggleSize;
11
+ className?: string;
12
+ }
13
+
14
+ const thumbSize: Record<ToggleSize, string> = { sm: '0.75rem', md: '1rem', lg: '1.25rem' };
15
+ const thumbOffset: Record<ToggleSize, string> = { sm: '0.75rem', md: '1rem', lg: '1.25rem' };
16
+
17
+ export const EvoToggle = ({
18
+ checked,
19
+ onChange,
20
+ label,
21
+ disabled = false,
22
+ size = 'md',
23
+ className = '',
24
+ }: EvoToggleProps) => (
25
+ <label
26
+ className={[styles.toggleWrapper, disabled ? styles.disabled : '', className].filter(Boolean).join(' ')}
27
+ >
28
+ <input
29
+ type="checkbox"
30
+ role="switch"
31
+ className={styles.hiddenInput}
32
+ checked={checked}
33
+ disabled={disabled}
34
+ onChange={(e) => onChange(e.target.checked)}
35
+ />
36
+ <span className={[styles.track, styles[size], checked ? styles.on : ''].filter(Boolean).join(' ')}>
37
+ <span
38
+ className={styles.thumb}
39
+ style={{
40
+ width: thumbSize[size],
41
+ height: thumbSize[size],
42
+ transform: checked ? `translateX(${thumbOffset[size]})` : 'translateX(0)',
43
+ }}
44
+ />
45
+ </span>
46
+ {label && <span className={styles.label}>{label}</span>}
47
+ </label>
48
+ );
@@ -0,0 +1,38 @@
1
+ import React, { useState } from 'react';
2
+ import styles from '../css/tooltip.module.scss';
3
+
4
+ type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
5
+
6
+ interface EvoTooltipProps {
7
+ content: React.ReactNode;
8
+ children: React.ReactNode;
9
+ placement?: TooltipPlacement;
10
+ className?: string;
11
+ }
12
+
13
+ export const EvoTooltip = ({
14
+ content,
15
+ children,
16
+ placement = 'top',
17
+ className = '',
18
+ }: EvoTooltipProps) => {
19
+ const [visible, setVisible] = useState(false);
20
+
21
+ return (
22
+ <span
23
+ className={`${styles.wrapper} ${className}`}
24
+ onMouseEnter={() => setVisible(true)}
25
+ onMouseLeave={() => setVisible(false)}
26
+ onFocus={() => setVisible(true)}
27
+ onBlur={() => setVisible(false)}
28
+ >
29
+ {children}
30
+ {visible && (
31
+ <span className={`${styles.tooltip} ${styles[placement]}`} role="tooltip">
32
+ {content}
33
+ <span className={styles.arrow} />
34
+ </span>
35
+ )}
36
+ </span>
37
+ );
38
+ };