@shohojdhara/atomix 0.3.7 → 0.3.8

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 (53) hide show
  1. package/dist/atomix.css +77 -0
  2. package/dist/atomix.css.map +1 -1
  3. package/dist/atomix.min.css +77 -0
  4. package/dist/atomix.min.css.map +1 -1
  5. package/dist/charts.js.map +1 -1
  6. package/dist/core.d.ts +2 -2
  7. package/dist/core.js.map +1 -1
  8. package/dist/forms.js.map +1 -1
  9. package/dist/heavy.js.map +1 -1
  10. package/dist/index.d.ts +578 -515
  11. package/dist/index.esm.js +3157 -2626
  12. package/dist/index.esm.js.map +1 -1
  13. package/dist/index.js +10496 -9973
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.min.js +1 -1
  16. package/dist/index.min.js.map +1 -1
  17. package/dist/theme.d.ts +237 -420
  18. package/dist/theme.js +1629 -1701
  19. package/dist/theme.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/components/DataTable/DataTable.stories.tsx +238 -0
  22. package/src/components/DataTable/DataTable.test.tsx +450 -0
  23. package/src/components/DataTable/DataTable.tsx +384 -61
  24. package/src/components/DatePicker/DatePicker.tsx +29 -38
  25. package/src/components/Upload/Upload.tsx +539 -40
  26. package/src/lib/composables/useDataTable.ts +355 -15
  27. package/src/lib/composables/useDatePicker.ts +19 -0
  28. package/src/lib/constants/components.ts +10 -0
  29. package/src/lib/theme/adapters/cssVariableMapper.ts +29 -14
  30. package/src/lib/theme/adapters/index.ts +1 -4
  31. package/src/lib/theme/config/configLoader.ts +53 -35
  32. package/src/lib/theme/core/composeTheme.ts +22 -30
  33. package/src/lib/theme/core/createTheme.ts +49 -26
  34. package/src/lib/theme/core/index.ts +0 -1
  35. package/src/lib/theme/generators/generateCSSNested.ts +4 -3
  36. package/src/lib/theme/generators/generateCSSVariables.ts +24 -16
  37. package/src/lib/theme/index.ts +10 -17
  38. package/src/lib/theme/runtime/ThemeApplicator.ts +6 -109
  39. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +3 -3
  40. package/src/lib/theme/runtime/ThemeProvider.tsx +186 -44
  41. package/src/lib/theme/runtime/useTheme.ts +1 -1
  42. package/src/lib/theme/runtime/useThemeTokens.ts +7 -16
  43. package/src/lib/theme/test/testTheme.ts +2 -1
  44. package/src/lib/theme/types.ts +14 -14
  45. package/src/lib/theme/utils/componentTheming.ts +35 -27
  46. package/src/lib/theme/utils/domUtils.ts +57 -15
  47. package/src/lib/theme/utils/injectCSS.ts +0 -1
  48. package/src/lib/theme/utils/themeHelpers.ts +1 -39
  49. package/src/lib/theme/utils/themeUtils.ts +1 -170
  50. package/src/lib/types/components.ts +145 -0
  51. package/src/lib/utils/dataTableExport.ts +143 -0
  52. package/src/styles/06-components/_components.data-table.scss +95 -0
  53. package/src/lib/hooks/useThemeTokens.ts +0 -105
@@ -64,6 +64,13 @@
64
64
  display: flex;
65
65
  align-items: center;
66
66
  justify-content: space-between;
67
+ position: relative;
68
+ }
69
+
70
+ &__header-actions {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 0.5rem;
67
74
  }
68
75
 
69
76
  &__sort-icon {
@@ -76,6 +83,55 @@
76
83
  }
77
84
  }
78
85
 
86
+ &__column-filter {
87
+ width: 120px;
88
+ padding: 0.25rem 0.5rem;
89
+ font-size: 0.875rem;
90
+ border: 1px solid var(--#{config.$prefix}border-color);
91
+ border-radius: 4px;
92
+ background-color: var(--#{config.$prefix}white);
93
+ color: var(--#{config.$prefix}body-color);
94
+
95
+ &:focus {
96
+ outline: none;
97
+ border-color: var(--#{config.$prefix}primary);
98
+ }
99
+ }
100
+
101
+ &__resize-handle {
102
+ position: absolute;
103
+ top: 0;
104
+ right: 0;
105
+ width: 4px;
106
+ height: 100%;
107
+ cursor: col-resize;
108
+ background-color: transparent;
109
+ z-index: 1;
110
+
111
+ &:hover {
112
+ background-color: var(--#{config.$prefix}primary);
113
+ opacity: 0.5;
114
+ }
115
+
116
+ &:active {
117
+ background-color: var(--#{config.$prefix}primary);
118
+ opacity: 1;
119
+ }
120
+ }
121
+
122
+ &__header-cell {
123
+ position: relative;
124
+
125
+ &--dragging {
126
+ opacity: 0.5;
127
+ cursor: move;
128
+ }
129
+
130
+ &--drag-over {
131
+ border-left: 2px solid var(--#{config.$prefix}primary);
132
+ }
133
+ }
134
+
79
135
  // Body cells
80
136
  &__cell {
81
137
  padding: data-table.$data-table-cell-padding-y data-table.$data-table-cell-padding-x;
@@ -95,6 +151,21 @@
95
151
  &[role='button'] {
96
152
  cursor: pointer;
97
153
  }
154
+
155
+ &--selected {
156
+ @include dynamic-background(rgba(var(--#{config.$prefix}primary-rgb), 0.1));
157
+ }
158
+ }
159
+
160
+ // Selection cell
161
+ &__cell--selection {
162
+ width: 48px;
163
+ text-align: center;
164
+ padding: data-table.$data-table-cell-padding-y 0.5rem;
165
+ }
166
+
167
+ &__radio {
168
+ cursor: pointer;
98
169
  }
99
170
 
100
171
  // Loading state
@@ -143,6 +214,15 @@
143
214
  &--loading {
144
215
  opacity: 0.7;
145
216
  }
217
+
218
+ &--sticky-header {
219
+ thead {
220
+ position: sticky;
221
+ top: var(--sticky-header-offset, 0);
222
+ z-index: 10;
223
+ @include dynamic-background(var(--#{config.$prefix}data-table-header-bg));
224
+ }
225
+ }
146
226
  }
147
227
 
148
228
  // Toolbar
@@ -151,6 +231,21 @@
151
231
  align-items: center;
152
232
  justify-content: space-between;
153
233
  margin-bottom: 1rem;
234
+ gap: 1rem;
235
+ flex-wrap: wrap;
236
+
237
+ &__left {
238
+ display: flex;
239
+ align-items: center;
240
+ gap: 1rem;
241
+ flex: 1;
242
+ }
243
+
244
+ &__right {
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 0.5rem;
248
+ }
154
249
  }
155
250
 
156
251
  // Search
@@ -1,105 +0,0 @@
1
- import { useContext } from 'react';
2
- import { ThemeContext } from '../theme/runtime/ThemeContext';
3
- import { useTheme } from '../theme/runtime/useTheme';
4
-
5
- /**
6
- * Standardized hook for accessing theme tokens in components
7
- *
8
- * Provides consistent access to theme values across all components
9
- * using either CSS custom properties or theme object values.
10
- */
11
- export function useThemeTokens() {
12
- const { theme, activeTheme } = useTheme();
13
-
14
- // Helper function to get CSS variable value
15
- const getToken = useCallback((tokenName: string, fallback?: string) => {
16
- if (typeof window === 'undefined') return fallback || '';
17
-
18
- const cssVarName = `--atomix-${tokenName}`;
19
- const computedStyle = getComputedStyle(document.documentElement);
20
- return computedStyle.getPropertyValue(cssVarName).trim() || fallback || '';
21
- }, []);
22
-
23
- // Helper function to get theme object value
24
- const getThemeValue = useCallback((path: string, fallback?: any) => {
25
- if (!activeTheme) return fallback;
26
-
27
- // Navigate through nested theme object using dot notation
28
- return path.split('.').reduce((obj, key) => obj?.[key], activeTheme) || fallback;
29
- }, [activeTheme]);
30
-
31
- // Return unified API for accessing theme values
32
- return {
33
- theme,
34
- activeTheme,
35
- getToken,
36
- getThemeValue,
37
- // Commonly used tokens with fallbacks
38
- colors: {
39
- primary: getToken('primary', '#3b82f6'),
40
- secondary: getToken('secondary', '#10b981'),
41
- error: getToken('error', '#ef4444'),
42
- success: getToken('success', '#22c55e'),
43
- warning: getToken('warning', '#eab308'),
44
- info: getToken('info', '#3b82f6'),
45
- light: getToken('light', '#f9fafb'),
46
- dark: getToken('dark', '#111827'),
47
- },
48
- spacing: {
49
- 1: getToken('spacing-1', '0.25rem'),
50
- 2: getToken('spacing-2', '0.5rem'),
51
- 3: getToken('spacing-3', '0.75rem'),
52
- 4: getToken('spacing-4', '1rem'),
53
- 5: getToken('spacing-5', '1.25rem'),
54
- 6: getToken('spacing-6', '1.5rem'),
55
- 8: getToken('spacing-8', '2rem'),
56
- 10: getToken('spacing-10', '2.5rem'),
57
- 12: getToken('spacing-12', '3rem'),
58
- 16: getToken('spacing-16', '4rem'),
59
- 20: getToken('spacing-20', '5rem'),
60
- },
61
- borderRadius: {
62
- sm: getToken('border-radius-sm', '0.25rem'),
63
- md: getToken('border-radius-md', '0.5rem'),
64
- lg: getToken('border-radius-lg', '0.75rem'),
65
- xl: getToken('border-radius-xl', '1rem'),
66
- full: getToken('border-radius-full', '9999px'),
67
- },
68
- typography: {
69
- fontFamily: {
70
- sans: getToken('font-sans-serif', 'Inter, system-ui, sans-serif'),
71
- serif: getToken('font-serif', 'Georgia, serif'),
72
- mono: getToken('font-monospace', 'Fira Code, monospace'),
73
- },
74
- fontSize: {
75
- xs: getToken('font-size-xs', '0.75rem'),
76
- sm: getToken('font-size-sm', '0.875rem'),
77
- md: getToken('font-size-md', '1rem'),
78
- lg: getToken('font-size-lg', '1.125rem'),
79
- xl: getToken('font-size-xl', '1.25rem'),
80
- '2xl': getToken('font-size-2xl', '1.5rem'),
81
- '3xl': getToken('font-size-3xl', '1.875rem'),
82
- '4xl': getToken('font-size-4xl', '2.25rem'),
83
- },
84
- fontWeight: {
85
- light: getToken('font-weight-light', '300'),
86
- normal: getToken('font-weight-normal', '400'),
87
- medium: getToken('font-weight-medium', '500'),
88
- semibold: getToken('font-weight-semibold', '600'),
89
- bold: getToken('font-weight-bold', '700'),
90
- },
91
- },
92
- shadows: {
93
- sm: getToken('box-shadow-sm', '0 1px 2px 0 rgba(0, 0, 0, 0.05)'),
94
- md: getToken('box-shadow-md', '0 4px 6px -1px rgba(0, 0, 0, 0.1)'),
95
- lg: getToken('box-shadow-lg', '0 10px 15px -3px rgba(0, 0, 0, 0.1)'),
96
- xl: getToken('box-shadow-xl', '0 20px 25px -5px rgba(0, 0, 0, 0.1)'),
97
- inset: getToken('box-shadow-inset', 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)'),
98
- },
99
- transitions: {
100
- fast: getToken('transition-fast', '150ms'),
101
- base: getToken('transition-base', '200ms'),
102
- slow: getToken('transition-slow', '300ms'),
103
- },
104
- };
105
- }