@djangocfg/layouts 1.2.19 → 1.2.20
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@djangocfg/layouts",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.20",
|
|
4
4
|
"description": "Layout system and components for Unrealon applications",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "DjangoCFG",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"check": "tsc --noEmit"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"@djangocfg/api": "^1.2.
|
|
57
|
-
"@djangocfg/og-image": "^1.2.
|
|
58
|
-
"@djangocfg/ui": "^1.2.
|
|
56
|
+
"@djangocfg/api": "^1.2.20",
|
|
57
|
+
"@djangocfg/og-image": "^1.2.20",
|
|
58
|
+
"@djangocfg/ui": "^1.2.20",
|
|
59
59
|
"@hookform/resolvers": "^5.2.0",
|
|
60
60
|
"consola": "^3.4.2",
|
|
61
61
|
"lucide-react": "^0.468.0",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"vidstack": "0.6.15"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@djangocfg/typescript-config": "^1.2.
|
|
79
|
+
"@djangocfg/typescript-config": "^1.2.20",
|
|
80
80
|
"@types/node": "^24.7.2",
|
|
81
81
|
"@types/react": "19.2.2",
|
|
82
82
|
"@types/react-dom": "19.2.1",
|
|
@@ -16,36 +16,36 @@ export interface PackageInfo {
|
|
|
16
16
|
/**
|
|
17
17
|
* Package versions registry
|
|
18
18
|
* Auto-synced from package.json files
|
|
19
|
-
* Last updated: 2025-11-
|
|
19
|
+
* Last updated: 2025-11-02T09:59:18.371Z
|
|
20
20
|
*/
|
|
21
21
|
const PACKAGE_VERSIONS: PackageInfo[] = [
|
|
22
22
|
{
|
|
23
23
|
"name": "@djangocfg/ui",
|
|
24
|
-
"version": "1.2.
|
|
24
|
+
"version": "1.2.20"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"name": "@djangocfg/api",
|
|
28
|
-
"version": "1.2.
|
|
28
|
+
"version": "1.2.20"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"name": "@djangocfg/layouts",
|
|
32
|
-
"version": "1.2.
|
|
32
|
+
"version": "1.2.20"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"name": "@djangocfg/markdown",
|
|
36
|
-
"version": "1.2.
|
|
36
|
+
"version": "1.2.20"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"name": "@djangocfg/og-image",
|
|
40
|
-
"version": "1.2.
|
|
40
|
+
"version": "1.2.20"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"name": "@djangocfg/eslint-config",
|
|
44
|
-
"version": "1.2.
|
|
44
|
+
"version": "1.2.20"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"name": "@djangocfg/typescript-config",
|
|
48
|
-
"version": "1.2.
|
|
48
|
+
"version": "1.2.20"
|
|
49
49
|
}
|
|
50
50
|
];
|
|
51
51
|
|
|
@@ -94,13 +94,10 @@ export function useCfgApp(options?: UseCfgAppOptions): UseCfgAppReturn {
|
|
|
94
94
|
const [parentThemeMode, setParentThemeMode] = useState<string | null>(null);
|
|
95
95
|
|
|
96
96
|
useEffect(() => {
|
|
97
|
-
// Debug logging (uncomment for debugging)
|
|
98
|
-
// console.log('[useCfgApp] Hook initializing...');
|
|
99
97
|
setIsMounted(true);
|
|
100
98
|
|
|
101
99
|
// Check if running in iframe
|
|
102
100
|
const inIframe = window.self !== window.top;
|
|
103
|
-
// console.log('[useCfgApp] Iframe detection:', { inIframe });
|
|
104
101
|
setIsEmbedded(inIframe);
|
|
105
102
|
|
|
106
103
|
// Check if running as standalone PWA
|
|
@@ -109,85 +106,19 @@ export function useCfgApp(options?: UseCfgAppOptions): UseCfgAppReturn {
|
|
|
109
106
|
|
|
110
107
|
// Get referrer if embedded
|
|
111
108
|
if (inIframe && document.referrer) {
|
|
112
|
-
// console.log('[useCfgApp] Referrer:', document.referrer);
|
|
113
109
|
setReferrer(document.referrer);
|
|
114
110
|
}
|
|
115
111
|
|
|
116
|
-
// Setup resize observer and interval for iframe height updates
|
|
117
|
-
let resizeObserver: ResizeObserver | null = null;
|
|
118
|
-
let checkHeightInterval: NodeJS.Timeout | null = null;
|
|
119
|
-
|
|
120
|
-
// Notify parent window that iframe is ready
|
|
121
|
-
if (inIframe) {
|
|
122
|
-
try {
|
|
123
|
-
// console.log('[useCfgApp] Sending iframe-ready message to parent');
|
|
124
|
-
window.parent.postMessage({
|
|
125
|
-
type: 'iframe-ready',
|
|
126
|
-
data: {
|
|
127
|
-
url: window.location.href,
|
|
128
|
-
referrer: document.referrer
|
|
129
|
-
}
|
|
130
|
-
}, '*'); // Use '*' or specific origin for security
|
|
131
|
-
// console.log('[useCfgApp] iframe-ready message sent');
|
|
132
|
-
} catch (e) {
|
|
133
|
-
console.error('[useCfgApp] Failed to notify parent:', e);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Send current content height (both increases and decreases)
|
|
137
|
-
const sendHeight = () => {
|
|
138
|
-
try {
|
|
139
|
-
// Use body.scrollHeight to avoid iframe height feedback loop
|
|
140
|
-
// document.documentElement.scrollHeight includes iframe's own height!
|
|
141
|
-
const bodyScrollHeight = document.body.scrollHeight;
|
|
142
|
-
const bodyOffsetHeight = document.body.offsetHeight;
|
|
143
|
-
const height = Math.max(bodyScrollHeight, bodyOffsetHeight);
|
|
144
|
-
|
|
145
|
-
window.parent.postMessage({
|
|
146
|
-
type: 'iframe-resize',
|
|
147
|
-
data: { height }
|
|
148
|
-
}, '*');
|
|
149
|
-
} catch (e) {
|
|
150
|
-
console.error('[useCfgApp] Failed to send height:', e);
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
// Send height immediately after mount
|
|
155
|
-
setTimeout(sendHeight, 100);
|
|
156
|
-
|
|
157
|
-
// Watch for content size changes using ResizeObserver
|
|
158
|
-
resizeObserver = new ResizeObserver(() => {
|
|
159
|
-
sendHeight();
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
// Observe document body for size changes
|
|
163
|
-
resizeObserver.observe(document.body);
|
|
164
|
-
|
|
165
|
-
// Also observe on route changes and after data loads
|
|
166
|
-
checkHeightInterval = setInterval(sendHeight, 1000);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
112
|
// Listen for messages from parent window
|
|
170
113
|
const handleMessage = (event: MessageEvent) => {
|
|
171
|
-
// console.log('[useCfgApp] Message received:', {
|
|
172
|
-
// origin: event.origin,
|
|
173
|
-
// type: event.data?.type,
|
|
174
|
-
// data: event.data?.data
|
|
175
|
-
// });
|
|
176
|
-
|
|
177
|
-
// Verify origin for security (optional - adjust for your needs)
|
|
178
|
-
// if (event.origin !== window.location.origin) return;
|
|
179
|
-
|
|
180
114
|
const { type, data } = event.data || {};
|
|
181
115
|
|
|
182
116
|
switch (type) {
|
|
183
117
|
case 'parent-auth':
|
|
184
|
-
// console.log('[useCfgApp] Processing parent-auth message');
|
|
185
118
|
// Receive authentication tokens from parent
|
|
186
119
|
if (data?.authToken && options?.onAuthTokenReceived) {
|
|
187
120
|
try {
|
|
188
|
-
// console.log('[useCfgApp] Calling onAuthTokenReceived');
|
|
189
121
|
options.onAuthTokenReceived(data.authToken, data.refreshToken);
|
|
190
|
-
// console.log('[useCfgApp] Auth tokens received from parent');
|
|
191
122
|
} catch (e) {
|
|
192
123
|
console.error('[useCfgApp] Failed to process auth tokens:', e);
|
|
193
124
|
}
|
|
@@ -195,19 +126,13 @@ export function useCfgApp(options?: UseCfgAppOptions): UseCfgAppReturn {
|
|
|
195
126
|
break;
|
|
196
127
|
|
|
197
128
|
case 'parent-theme':
|
|
198
|
-
// console.log('[useCfgApp] Processing parent-theme message');
|
|
199
129
|
// Receive theme from parent
|
|
200
130
|
if (data?.theme) {
|
|
201
131
|
try {
|
|
202
|
-
// console.log('[useCfgApp] Setting theme:', {
|
|
203
|
-
// theme: data.theme,
|
|
204
|
-
// themeMode: data.themeMode
|
|
205
|
-
// });
|
|
206
132
|
setParentTheme(data.theme);
|
|
207
133
|
if (data.themeMode) {
|
|
208
134
|
setParentThemeMode(data.themeMode);
|
|
209
135
|
}
|
|
210
|
-
// console.log('[useCfgApp] Theme received from parent:', data.theme, 'mode:', data.themeMode);
|
|
211
136
|
} catch (e) {
|
|
212
137
|
console.error('[useCfgApp] Failed to process theme:', e);
|
|
213
138
|
}
|
|
@@ -216,31 +141,32 @@ export function useCfgApp(options?: UseCfgAppOptions): UseCfgAppReturn {
|
|
|
216
141
|
|
|
217
142
|
case 'parent-resize':
|
|
218
143
|
// Handle parent window resize (optional)
|
|
219
|
-
// console.log('[useCfgApp] Parent resized:', data);
|
|
220
144
|
break;
|
|
221
145
|
|
|
222
146
|
default:
|
|
223
|
-
// if (type) {
|
|
224
|
-
// console.log('[useCfgApp] Unknown message type:', type);
|
|
225
|
-
// }
|
|
226
147
|
break;
|
|
227
148
|
}
|
|
228
149
|
};
|
|
229
150
|
|
|
230
|
-
// console.log('[useCfgApp] Adding message event listener');
|
|
231
151
|
window.addEventListener('message', handleMessage);
|
|
232
152
|
|
|
153
|
+
// Send iframe-ready since listener is registered
|
|
154
|
+
if (inIframe) {
|
|
155
|
+
try {
|
|
156
|
+
window.parent.postMessage({
|
|
157
|
+
type: 'iframe-ready',
|
|
158
|
+
data: {
|
|
159
|
+
url: window.location.href,
|
|
160
|
+
referrer: document.referrer
|
|
161
|
+
}
|
|
162
|
+
}, '*');
|
|
163
|
+
} catch (e) {
|
|
164
|
+
console.error('[useCfgApp] Failed to notify parent about ready state:', e);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
233
168
|
return () => {
|
|
234
|
-
// console.log('[useCfgApp] Cleaning up message event listener');
|
|
235
169
|
window.removeEventListener('message', handleMessage);
|
|
236
|
-
|
|
237
|
-
// Cleanup resize observer and interval
|
|
238
|
-
if (resizeObserver) {
|
|
239
|
-
resizeObserver.disconnect();
|
|
240
|
-
}
|
|
241
|
-
if (checkHeightInterval) {
|
|
242
|
-
clearInterval(checkHeightInterval);
|
|
243
|
-
}
|
|
244
170
|
};
|
|
245
171
|
}, [options]);
|
|
246
172
|
|