@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.
- package/README.md +138 -136
- package/dist/components/client-only/client-only.d.ts +11 -0
- package/dist/components/client-only/client-only.d.ts.map +1 -0
- package/dist/components/client-only/client-only.js +17 -0
- package/dist/components/client-only/index.d.ts +2 -0
- package/dist/components/client-only/index.d.ts.map +1 -0
- package/dist/components/client-only/index.js +1 -0
- package/dist/components/dev-panel/dev-panel-features.d.ts +10 -0
- package/dist/components/dev-panel/dev-panel-features.d.ts.map +1 -0
- package/dist/components/dev-panel/dev-panel-features.js +29 -0
- package/dist/components/dev-panel/dev-panel.d.ts +15 -20
- package/dist/components/dev-panel/dev-panel.d.ts.map +1 -1
- package/dist/components/dev-panel/dev-panel.js +627 -121
- package/dist/components/dev-panel/index.d.ts +1 -1
- package/dist/components/dev-panel/index.d.ts.map +1 -1
- package/dist/components/dev-panel/index.js +1 -1
- package/dist/components/dev-panel/use-dev-panel-diagnostics.d.ts +39 -0
- package/dist/components/dev-panel/use-dev-panel-diagnostics.d.ts.map +1 -0
- package/dist/components/dev-panel/use-dev-panel-diagnostics.js +384 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/separator/separator.d.ts +4 -4
- package/dist/components/separator/separator.d.ts.map +1 -1
- package/dist/components/separator/separator.js +18 -6
- package/dist/components/skeleton/skeleton.d.ts +1 -1
- package/dist/components/skeleton/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton/skeleton.js +19 -4
- package/dist/components/skip-link/skip-link.d.ts.map +1 -1
- package/dist/components/skip-link/skip-link.js +8 -5
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/use-breakpoint.d.ts +9 -0
- package/dist/hooks/use-breakpoint.d.ts.map +1 -0
- package/dist/hooks/use-breakpoint.js +47 -0
- package/dist/index.d.ts +2 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -7
- 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
|
-
*
|
|
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/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
-
*
|
|
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.
|
|
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
|
},
|