@teo-garcia/react-shared 1.2.0 → 1.3.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 (40) hide show
  1. package/README.md +138 -136
  2. package/dist/components/client-only/client-only.d.ts +11 -0
  3. package/dist/components/client-only/client-only.d.ts.map +1 -0
  4. package/dist/components/client-only/client-only.js +17 -0
  5. package/dist/components/client-only/index.d.ts +2 -0
  6. package/dist/components/client-only/index.d.ts.map +1 -0
  7. package/dist/components/client-only/index.js +1 -0
  8. package/dist/components/dev-panel/dev-panel-features.d.ts +10 -0
  9. package/dist/components/dev-panel/dev-panel-features.d.ts.map +1 -0
  10. package/dist/components/dev-panel/dev-panel-features.js +29 -0
  11. package/dist/components/dev-panel/dev-panel.d.ts +15 -20
  12. package/dist/components/dev-panel/dev-panel.d.ts.map +1 -1
  13. package/dist/components/dev-panel/dev-panel.js +627 -121
  14. package/dist/components/dev-panel/index.d.ts +1 -1
  15. package/dist/components/dev-panel/index.d.ts.map +1 -1
  16. package/dist/components/dev-panel/index.js +1 -1
  17. package/dist/components/dev-panel/use-dev-panel-diagnostics.d.ts +39 -0
  18. package/dist/components/dev-panel/use-dev-panel-diagnostics.d.ts.map +1 -0
  19. package/dist/components/dev-panel/use-dev-panel-diagnostics.js +384 -0
  20. package/dist/components/index.d.ts +1 -0
  21. package/dist/components/index.d.ts.map +1 -1
  22. package/dist/components/index.js +1 -0
  23. package/dist/components/separator/separator.d.ts +4 -4
  24. package/dist/components/separator/separator.d.ts.map +1 -1
  25. package/dist/components/separator/separator.js +18 -6
  26. package/dist/components/skeleton/skeleton.d.ts +1 -1
  27. package/dist/components/skeleton/skeleton.d.ts.map +1 -1
  28. package/dist/components/skeleton/skeleton.js +19 -4
  29. package/dist/components/skip-link/skip-link.d.ts.map +1 -1
  30. package/dist/components/skip-link/skip-link.js +8 -5
  31. package/dist/hooks/index.d.ts +1 -0
  32. package/dist/hooks/index.d.ts.map +1 -1
  33. package/dist/hooks/index.js +1 -0
  34. package/dist/hooks/use-breakpoint.d.ts +9 -0
  35. package/dist/hooks/use-breakpoint.d.ts.map +1 -0
  36. package/dist/hooks/use-breakpoint.js +47 -0
  37. package/dist/index.d.ts +2 -7
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -7
  40. package/package.json +46 -1
@@ -0,0 +1,47 @@
1
+ import { useEffect, useState } from 'react';
2
+ export const DEFAULT_BREAKPOINTS = {
3
+ sm: 640,
4
+ md: 768,
5
+ lg: 1024,
6
+ xl: 1280,
7
+ '2xl': 1536,
8
+ };
9
+ export function resolveBreakpoint(width, breakpoints) {
10
+ const sorted = Object.entries(breakpoints).sort(([, a], [, b]) => b - a);
11
+ for (const [name, minWidth] of sorted) {
12
+ if (width >= minWidth)
13
+ return name;
14
+ }
15
+ return 'xs';
16
+ }
17
+ export function useBreakpoint(breakpoints = DEFAULT_BREAKPOINTS) {
18
+ const [viewport, setViewport] = useState(() => {
19
+ if (typeof window === 'undefined') {
20
+ return { width: 0, height: 0 };
21
+ }
22
+ return {
23
+ width: window.innerWidth,
24
+ height: window.innerHeight,
25
+ };
26
+ });
27
+ useEffect(() => {
28
+ if (typeof window === 'undefined')
29
+ return;
30
+ function updateViewport() {
31
+ setViewport({
32
+ width: window.innerWidth,
33
+ height: window.innerHeight,
34
+ });
35
+ }
36
+ updateViewport();
37
+ window.addEventListener('resize', updateViewport);
38
+ return () => {
39
+ window.removeEventListener('resize', updateViewport);
40
+ };
41
+ }, []);
42
+ return {
43
+ breakpoint: resolveBreakpoint(viewport.width, breakpoints),
44
+ height: viewport.height,
45
+ width: viewport.width,
46
+ };
47
+ }
package/dist/index.d.ts CHANGED
@@ -1,13 +1,8 @@
1
1
  /**
2
2
  * @teo-garcia/react-shared
3
3
  *
4
- * Shared React hooks, utilities, and test helpers for the teo-garcia template portfolio.
5
- *
6
- * Exports:
7
- * - Hooks: useDebounce, useIsomorphicLayoutEffect, useLocalStorage, useMediaQuery, useOnClickOutside, usePrevious
8
- * - Components: ErrorBoundary
9
- * - Utils: cn (clsx + tailwind-merge)
10
- * - Test utilities: createWrapper, renderWithProviders (import from react-shared/test-utils)
4
+ * Self-contained React hooks, utilities, components, and test helpers for the
5
+ * teo-garcia template portfolio.
11
6
  *
12
7
  * @packageDocumentation
13
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,13 +1,8 @@
1
1
  /**
2
2
  * @teo-garcia/react-shared
3
3
  *
4
- * Shared React hooks, utilities, and test helpers for the teo-garcia template portfolio.
5
- *
6
- * Exports:
7
- * - Hooks: useDebounce, useIsomorphicLayoutEffect, useLocalStorage, useMediaQuery, useOnClickOutside, usePrevious
8
- * - Components: ErrorBoundary
9
- * - Utils: cn (clsx + tailwind-merge)
10
- * - Test utilities: createWrapper, renderWithProviders (import from react-shared/test-utils)
4
+ * Self-contained React hooks, utilities, components, and test helpers for the
5
+ * teo-garcia template portfolio.
11
6
  *
12
7
  * @packageDocumentation
13
8
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teo-garcia/react-shared",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Shared React hooks, utilities, and test helpers for the teo-garcia template portfolio",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,142 +8,187 @@
8
8
  "exports": {
9
9
  ".": {
10
10
  "import": "./dist/index.js",
11
+ "default": "./dist/index.js",
11
12
  "types": "./dist/index.d.ts"
12
13
  },
13
14
  "./components": {
14
15
  "import": "./dist/components/index.js",
16
+ "default": "./dist/components/index.js",
15
17
  "types": "./dist/components/index.d.ts"
16
18
  },
17
19
  "./components/error-boundary": {
18
20
  "import": "./dist/components/error-boundary/index.js",
21
+ "default": "./dist/components/error-boundary/index.js",
19
22
  "types": "./dist/components/error-boundary/index.d.ts"
20
23
  },
21
24
  "./components/focus-trap": {
22
25
  "import": "./dist/components/focus-trap/index.js",
26
+ "default": "./dist/components/focus-trap/index.js",
23
27
  "types": "./dist/components/focus-trap/index.d.ts"
24
28
  },
25
29
  "./components/portal": {
26
30
  "import": "./dist/components/portal/index.js",
31
+ "default": "./dist/components/portal/index.js",
27
32
  "types": "./dist/components/portal/index.d.ts"
28
33
  },
29
34
  "./components/skeleton": {
30
35
  "import": "./dist/components/skeleton/index.js",
36
+ "default": "./dist/components/skeleton/index.js",
31
37
  "types": "./dist/components/skeleton/index.d.ts"
32
38
  },
33
39
  "./components/visually-hidden": {
34
40
  "import": "./dist/components/visually-hidden/index.js",
41
+ "default": "./dist/components/visually-hidden/index.js",
35
42
  "types": "./dist/components/visually-hidden/index.d.ts"
36
43
  },
37
44
  "./components/aspect-ratio": {
38
45
  "import": "./dist/components/aspect-ratio/index.js",
46
+ "default": "./dist/components/aspect-ratio/index.js",
39
47
  "types": "./dist/components/aspect-ratio/index.d.ts"
40
48
  },
49
+ "./components/client-only": {
50
+ "import": "./dist/components/client-only/index.js",
51
+ "default": "./dist/components/client-only/index.js",
52
+ "types": "./dist/components/client-only/index.d.ts"
53
+ },
41
54
  "./components/debug-json": {
42
55
  "import": "./dist/components/debug-json/index.js",
56
+ "default": "./dist/components/debug-json/index.js",
43
57
  "types": "./dist/components/debug-json/index.d.ts"
44
58
  },
45
59
  "./components/dev-panel": {
46
60
  "import": "./dist/components/dev-panel/index.js",
61
+ "default": "./dist/components/dev-panel/index.js",
47
62
  "types": "./dist/components/dev-panel/index.d.ts"
48
63
  },
49
64
  "./components/separator": {
50
65
  "import": "./dist/components/separator/index.js",
66
+ "default": "./dist/components/separator/index.js",
51
67
  "types": "./dist/components/separator/index.d.ts"
52
68
  },
53
69
  "./components/skip-link": {
54
70
  "import": "./dist/components/skip-link/index.js",
71
+ "default": "./dist/components/skip-link/index.js",
55
72
  "types": "./dist/components/skip-link/index.d.ts"
56
73
  },
57
74
  "./hooks": {
58
75
  "import": "./dist/hooks/index.js",
76
+ "default": "./dist/hooks/index.js",
59
77
  "types": "./dist/hooks/index.d.ts"
60
78
  },
61
79
  "./hooks/use-debounce": {
62
80
  "import": "./dist/hooks/use-debounce.js",
81
+ "default": "./dist/hooks/use-debounce.js",
63
82
  "types": "./dist/hooks/use-debounce.d.ts"
64
83
  },
65
84
  "./hooks/use-isomorphic-layout-effect": {
66
85
  "import": "./dist/hooks/use-isomorphic-layout-effect.js",
86
+ "default": "./dist/hooks/use-isomorphic-layout-effect.js",
67
87
  "types": "./dist/hooks/use-isomorphic-layout-effect.d.ts"
68
88
  },
69
89
  "./hooks/use-local-storage": {
70
90
  "import": "./dist/hooks/use-local-storage.js",
91
+ "default": "./dist/hooks/use-local-storage.js",
71
92
  "types": "./dist/hooks/use-local-storage.d.ts"
72
93
  },
73
94
  "./hooks/use-media-query": {
74
95
  "import": "./dist/hooks/use-media-query.js",
96
+ "default": "./dist/hooks/use-media-query.js",
75
97
  "types": "./dist/hooks/use-media-query.d.ts"
76
98
  },
77
99
  "./hooks/use-on-click-outside": {
78
100
  "import": "./dist/hooks/use-on-click-outside.js",
101
+ "default": "./dist/hooks/use-on-click-outside.js",
79
102
  "types": "./dist/hooks/use-on-click-outside.d.ts"
80
103
  },
81
104
  "./hooks/use-previous": {
82
105
  "import": "./dist/hooks/use-previous.js",
106
+ "default": "./dist/hooks/use-previous.js",
83
107
  "types": "./dist/hooks/use-previous.d.ts"
84
108
  },
85
109
  "./hooks/use-copy-to-clipboard": {
86
110
  "import": "./dist/hooks/use-copy-to-clipboard.js",
111
+ "default": "./dist/hooks/use-copy-to-clipboard.js",
87
112
  "types": "./dist/hooks/use-copy-to-clipboard.d.ts"
88
113
  },
114
+ "./hooks/use-breakpoint": {
115
+ "import": "./dist/hooks/use-breakpoint.js",
116
+ "default": "./dist/hooks/use-breakpoint.js",
117
+ "types": "./dist/hooks/use-breakpoint.d.ts"
118
+ },
89
119
  "./hooks/use-event-listener": {
90
120
  "import": "./dist/hooks/use-event-listener.js",
121
+ "default": "./dist/hooks/use-event-listener.js",
91
122
  "types": "./dist/hooks/use-event-listener.d.ts"
92
123
  },
93
124
  "./hooks/use-idle": {
94
125
  "import": "./dist/hooks/use-idle.js",
126
+ "default": "./dist/hooks/use-idle.js",
95
127
  "types": "./dist/hooks/use-idle.d.ts"
96
128
  },
97
129
  "./hooks/use-intersection-observer": {
98
130
  "import": "./dist/hooks/use-intersection-observer.js",
131
+ "default": "./dist/hooks/use-intersection-observer.js",
99
132
  "types": "./dist/hooks/use-intersection-observer.d.ts"
100
133
  },
101
134
  "./hooks/use-latest": {
102
135
  "import": "./dist/hooks/use-latest.js",
136
+ "default": "./dist/hooks/use-latest.js",
103
137
  "types": "./dist/hooks/use-latest.d.ts"
104
138
  },
105
139
  "./hooks/use-network-status": {
106
140
  "import": "./dist/hooks/use-network-status.js",
141
+ "default": "./dist/hooks/use-network-status.js",
107
142
  "types": "./dist/hooks/use-network-status.d.ts"
108
143
  },
109
144
  "./hooks/use-render-count": {
110
145
  "import": "./dist/hooks/use-render-count.js",
146
+ "default": "./dist/hooks/use-render-count.js",
111
147
  "types": "./dist/hooks/use-render-count.d.ts"
112
148
  },
113
149
  "./hooks/use-toggle": {
114
150
  "import": "./dist/hooks/use-toggle.js",
151
+ "default": "./dist/hooks/use-toggle.js",
115
152
  "types": "./dist/hooks/use-toggle.d.ts"
116
153
  },
117
154
  "./hooks/use-why-did-you-render": {
118
155
  "import": "./dist/hooks/use-why-did-you-render.js",
156
+ "default": "./dist/hooks/use-why-did-you-render.js",
119
157
  "types": "./dist/hooks/use-why-did-you-render.d.ts"
120
158
  },
121
159
  "./utils": {
122
160
  "import": "./dist/utils/index.js",
161
+ "default": "./dist/utils/index.js",
123
162
  "types": "./dist/utils/index.d.ts"
124
163
  },
125
164
  "./utils/cn": {
126
165
  "import": "./dist/utils/cn.js",
166
+ "default": "./dist/utils/cn.js",
127
167
  "types": "./dist/utils/cn.d.ts"
128
168
  },
129
169
  "./utils/format-date": {
130
170
  "import": "./dist/utils/format-date.js",
171
+ "default": "./dist/utils/format-date.js",
131
172
  "types": "./dist/utils/format-date.d.ts"
132
173
  },
133
174
  "./utils/format-number": {
134
175
  "import": "./dist/utils/format-number.js",
176
+ "default": "./dist/utils/format-number.js",
135
177
  "types": "./dist/utils/format-number.d.ts"
136
178
  },
137
179
  "./utils/truncate": {
138
180
  "import": "./dist/utils/truncate.js",
181
+ "default": "./dist/utils/truncate.js",
139
182
  "types": "./dist/utils/truncate.d.ts"
140
183
  },
141
184
  "./test-utils": {
142
185
  "import": "./dist/test-utils/index.js",
186
+ "default": "./dist/test-utils/index.js",
143
187
  "types": "./dist/test-utils/index.d.ts"
144
188
  },
145
189
  "./types": {
146
190
  "import": "./dist/types.js",
191
+ "default": "./dist/types.js",
147
192
  "types": "./dist/types.d.ts"
148
193
  }
149
194
  },