app-studio 0.7.8 → 0.7.10
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/dist/app-studio.cjs.development.js +141 -74
- package/dist/app-studio.cjs.development.js.map +1 -1
- package/dist/app-studio.cjs.production.min.js +1 -1
- package/dist/app-studio.esm.js +141 -74
- package/dist/app-studio.esm.js.map +1 -1
- package/dist/app-studio.umd.development.js +141 -74
- package/dist/app-studio.umd.development.js.map +1 -1
- package/dist/app-studio.umd.production.min.js +1 -1
- package/dist/stories/IframeSupport.stories.d.ts +3 -0
- package/package.json +8 -1
|
@@ -1065,12 +1065,15 @@
|
|
|
1065
1065
|
}
|
|
1066
1066
|
return merged;
|
|
1067
1067
|
};
|
|
1068
|
+
// Stable default references to prevent unnecessary re-renders and cache invalidation
|
|
1069
|
+
const DEFAULT_THEME_OVERRIDE = {};
|
|
1070
|
+
const DEFAULT_COLORS_OVERRIDE = {};
|
|
1068
1071
|
const ThemeProvider = _ref => {
|
|
1069
1072
|
let {
|
|
1070
|
-
theme: themeOverride =
|
|
1073
|
+
theme: themeOverride = DEFAULT_THEME_OVERRIDE,
|
|
1071
1074
|
mode: initialMode = 'light',
|
|
1072
|
-
dark: darkOverride =
|
|
1073
|
-
light: lightOverride =
|
|
1075
|
+
dark: darkOverride = DEFAULT_COLORS_OVERRIDE,
|
|
1076
|
+
light: lightOverride = DEFAULT_COLORS_OVERRIDE,
|
|
1074
1077
|
children,
|
|
1075
1078
|
strict = false,
|
|
1076
1079
|
targetWindow
|
|
@@ -1808,12 +1811,53 @@
|
|
|
1808
1811
|
'textJustify', 'lineClamp', 'textIndent', 'perspective']);
|
|
1809
1812
|
// Common React event handlers that should not be treated as style props
|
|
1810
1813
|
const commonEventHandlers = /*#__PURE__*/new Set(['onClick', 'onChange', 'onSubmit', 'onFocus', 'onBlur', 'onKeyDown', 'onKeyUp', 'onKeyPress', 'onMouseDown', 'onMouseUp', 'onMouseMove', 'onMouseEnter', 'onMouseLeave', 'onTouchStart', 'onTouchEnd', 'onTouchMove', 'onScroll', 'onWheel', 'onDrag', 'onDragStart', 'onDragEnd', 'onDrop']);
|
|
1814
|
+
// Non-hyphenated HTML/SVG attributes that must never be treated as style props.
|
|
1815
|
+
// Hyphenated attributes (aria-*, data-*, etc.) are caught by a prefix/hyphen check below.
|
|
1816
|
+
const htmlOnlyAttributes = /*#__PURE__*/new Set([
|
|
1817
|
+
// Accessibility
|
|
1818
|
+
'role', 'tabIndex',
|
|
1819
|
+
// Global HTML attributes
|
|
1820
|
+
'id', 'title', 'lang', 'dir', 'hidden', 'draggable', 'contentEditable', 'spellCheck', 'nonce', 'slot', 'is', 'inputMode', 'enterKeyHint', 'autofocus', 'autoFocus', 'translate',
|
|
1821
|
+
// Form attributes
|
|
1822
|
+
'autoComplete', 'name', 'disabled', 'readOnly', 'required', 'checked', 'selected', 'multiple', 'value', 'defaultValue', 'defaultChecked', 'placeholder', 'htmlFor', 'type', 'accept', 'maxLength', 'minLength', 'pattern', 'noValidate', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget',
|
|
1823
|
+
// Link/navigation attributes
|
|
1824
|
+
'href', 'target', 'rel', 'download', 'referrerPolicy', 'integrity', 'crossOrigin',
|
|
1825
|
+
// Form container attributes
|
|
1826
|
+
'action', 'method', 'encType',
|
|
1827
|
+
// Media attributes
|
|
1828
|
+
'autoPlay', 'controls', 'loop', 'muted', 'playsInline', 'poster', 'preload', 'mediaGroup',
|
|
1829
|
+
// Image/embed attributes
|
|
1830
|
+
'loading', 'decoding', 'sizes', 'srcDoc', 'srcLang', 'srcSet', 'useMap',
|
|
1831
|
+
// Table attributes
|
|
1832
|
+
'colSpan', 'rowSpan', 'cols', 'rows', 'headers', 'scope', 'span',
|
|
1833
|
+
// Iframe/embed attributes
|
|
1834
|
+
'sandbox', 'allowFullScreen', 'frameBorder', 'scrolling', 'seamless', 'allow',
|
|
1835
|
+
// Interactive attributes
|
|
1836
|
+
'open', 'cite', 'dateTime', 'reversed', 'start', 'high', 'low', 'optimum', 'wrap', 'shape', 'size', 'summary',
|
|
1837
|
+
// Script/resource attributes
|
|
1838
|
+
'async', 'defer', 'noModule', 'charSet', 'httpEquiv', 'manifest',
|
|
1839
|
+
// Microdata/RDFa attributes
|
|
1840
|
+
'about', 'datatype', 'inlist', 'prefix', 'property', 'resource', 'typeof', 'vocab', 'itemProp', 'itemScope', 'itemType', 'itemID', 'itemRef',
|
|
1841
|
+
// Deprecated but still used
|
|
1842
|
+
'classID', 'contextMenu', 'keyParams', 'keyType', 'kind', 'label', 'list', 'profile', 'radioGroup', 'wmode', 'capture', 'challenge', 'scoped', 'step', 'form',
|
|
1843
|
+
// SVG-only attributes (not CSS properties)
|
|
1844
|
+
'viewBox', 'preserveAspectRatio', 'xmlns', 'xlinkHref', 'xmlBase', 'xmlLang', 'xmlSpace', 'd', 'pathLength', 'points', 'markerEnd', 'markerMid', 'markerStart', 'clipPathUnits', 'gradientUnits', 'gradientTransform', 'patternUnits', 'patternTransform', 'patternContentUnits', 'spreadMethod', 'startOffset', 'stdDeviation', 'stitchTiles', 'surfaceScale', 'textLength', 'lengthAdjust', 'maskUnits', 'maskContentUnits', 'filterUnits', 'primitiveUnits', 'numOctaves', 'baseFrequency', 'seed', 'result', 'in2', 'values', 'keyTimes', 'keySplines', 'repeatCount', 'repeatDur', 'calcMode', 'attributeName', 'attributeType', 'begin', 'dur', 'end', 'by']);
|
|
1811
1845
|
// Improved style prop detection
|
|
1812
1846
|
const isStyleProp = prop => {
|
|
1813
1847
|
// First check if it's a common event handler (these should never be treated as style props)
|
|
1814
1848
|
if (commonEventHandlers.has(prop)) {
|
|
1815
1849
|
return false;
|
|
1816
1850
|
}
|
|
1851
|
+
// HTML attributes should never be treated as style props
|
|
1852
|
+
if (htmlOnlyAttributes.has(prop)) {
|
|
1853
|
+
return false;
|
|
1854
|
+
}
|
|
1855
|
+
// Any prop containing a hyphen is an HTML attribute (aria-*, data-*, accept-charset, etc.)
|
|
1856
|
+
// In React, CSS properties are always camelCase — only CSS custom properties use hyphens (--*),
|
|
1857
|
+
// and data-style-* is a special convention handled separately below.
|
|
1858
|
+
if (prop.includes('-') && !prop.startsWith('--') && !prop.startsWith('data-style-')) {
|
|
1859
|
+
return false;
|
|
1860
|
+
}
|
|
1817
1861
|
// Check if it's a valid CSS property or custom style prop
|
|
1818
1862
|
if (cssProperties.has(prop) || extraKeys.has(prop) || prop.startsWith('--') || prop.startsWith('data-style-') && !includeKeys.has(prop)) {
|
|
1819
1863
|
return true;
|
|
@@ -2949,10 +2993,11 @@
|
|
|
2949
2993
|
trackEvent,
|
|
2950
2994
|
children
|
|
2951
2995
|
} = _ref;
|
|
2996
|
+
const value = React.useMemo(() => ({
|
|
2997
|
+
trackEvent
|
|
2998
|
+
}), [trackEvent]);
|
|
2952
2999
|
return /*#__PURE__*/React__default.createElement(AnalyticsContext.Provider, {
|
|
2953
|
-
value:
|
|
2954
|
-
trackEvent
|
|
2955
|
-
}
|
|
3000
|
+
value: value
|
|
2956
3001
|
}, children);
|
|
2957
3002
|
};
|
|
2958
3003
|
|
|
@@ -2984,12 +3029,10 @@
|
|
|
2984
3029
|
*/
|
|
2985
3030
|
function useStableStyleMemo(propsToProcess, getColor, mediaQueries, devices, manager, theme) {
|
|
2986
3031
|
const cacheRef = React.useRef(null);
|
|
2987
|
-
// Compute hash
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
return hashStyleProps(propsToProcess) + '|' + hash(themeHash);
|
|
2992
|
-
}, [propsToProcess, theme]);
|
|
3032
|
+
// Compute hash directly — no useMemo since propsToProcess is always a new
|
|
3033
|
+
// reference (from destructuring), so the memo deps would always change.
|
|
3034
|
+
const themeHash = theme ? JSON.stringify(theme) : '';
|
|
3035
|
+
const currentHash = hashStyleProps(propsToProcess) + '|' + hash(themeHash);
|
|
2993
3036
|
// Only recompute classes if hash changed
|
|
2994
3037
|
if (!cacheRef.current || cacheRef.current.hash !== currentHash) {
|
|
2995
3038
|
const classes = extractUtilityClasses(propsToProcess, getColor, mediaQueries, devices, manager);
|
|
@@ -3081,44 +3124,44 @@
|
|
|
3081
3124
|
};
|
|
3082
3125
|
}, [animateOut, manager]);
|
|
3083
3126
|
// Prepare props for processing (apply view/scroll timeline if needed)
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
}
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
}
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
}
|
|
3127
|
+
// No useMemo — `rest` is always a new reference from destructuring, so
|
|
3128
|
+
// memo deps would always change. useStableStyleMemo handles the real
|
|
3129
|
+
// memoization via hash-based comparison.
|
|
3130
|
+
const propsToProcess = {
|
|
3131
|
+
...rest,
|
|
3132
|
+
blend
|
|
3133
|
+
};
|
|
3134
|
+
// Apply view() timeline ONLY if animateOn='View' (not Both or Mount)
|
|
3135
|
+
if (animateOn === 'View' && propsToProcess.animate) {
|
|
3136
|
+
const animations = Array.isArray(propsToProcess.animate) ? propsToProcess.animate : [propsToProcess.animate];
|
|
3137
|
+
propsToProcess.animate = animations.map(anim => {
|
|
3138
|
+
// Only add timeline if not already specified
|
|
3139
|
+
if (!anim.timeline) {
|
|
3140
|
+
return {
|
|
3141
|
+
...anim,
|
|
3142
|
+
timeline: 'view()',
|
|
3143
|
+
range: anim.range || 'entry',
|
|
3144
|
+
fillMode: anim.fillMode || 'both'
|
|
3145
|
+
};
|
|
3146
|
+
}
|
|
3147
|
+
return anim;
|
|
3148
|
+
});
|
|
3149
|
+
}
|
|
3150
|
+
// Apply scroll() timeline if animateOn='Scroll'
|
|
3151
|
+
if (animateOn === 'Scroll' && propsToProcess.animate) {
|
|
3152
|
+
const animations = Array.isArray(propsToProcess.animate) ? propsToProcess.animate : [propsToProcess.animate];
|
|
3153
|
+
propsToProcess.animate = animations.map(anim => {
|
|
3154
|
+
// Only add timeline if not already specified
|
|
3155
|
+
if (!anim.timeline) {
|
|
3156
|
+
return {
|
|
3157
|
+
...anim,
|
|
3158
|
+
timeline: 'scroll()',
|
|
3159
|
+
fillMode: anim.fillMode || 'both'
|
|
3160
|
+
};
|
|
3161
|
+
}
|
|
3162
|
+
return anim;
|
|
3163
|
+
});
|
|
3164
|
+
}
|
|
3122
3165
|
// Use hash-based memoization for style extraction
|
|
3123
3166
|
const utilityClasses = useStableStyleMemo(propsToProcess, getColor, mediaQueries, devices, manager, theme);
|
|
3124
3167
|
const newProps = {
|
|
@@ -5040,14 +5083,28 @@
|
|
|
5040
5083
|
width: win?.innerWidth || 0,
|
|
5041
5084
|
height: win?.innerHeight || 0
|
|
5042
5085
|
});
|
|
5086
|
+
const timeoutRef = React.useRef();
|
|
5043
5087
|
React.useEffect(() => {
|
|
5044
5088
|
if (!win) return;
|
|
5045
|
-
const handleResize = () =>
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5089
|
+
const handleResize = () => {
|
|
5090
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
5091
|
+
timeoutRef.current = setTimeout(() => {
|
|
5092
|
+
const newWidth = win.innerWidth;
|
|
5093
|
+
const newHeight = win.innerHeight;
|
|
5094
|
+
setSize(prev => {
|
|
5095
|
+
if (prev.width === newWidth && prev.height === newHeight) return prev;
|
|
5096
|
+
return {
|
|
5097
|
+
width: newWidth,
|
|
5098
|
+
height: newHeight
|
|
5099
|
+
};
|
|
5100
|
+
});
|
|
5101
|
+
}, 100);
|
|
5102
|
+
};
|
|
5049
5103
|
win.addEventListener('resize', handleResize);
|
|
5050
|
-
return () =>
|
|
5104
|
+
return () => {
|
|
5105
|
+
win.removeEventListener('resize', handleResize);
|
|
5106
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
5107
|
+
};
|
|
5051
5108
|
}, [win]);
|
|
5052
5109
|
return /*#__PURE__*/React__default.createElement(WindowSizeContext.Provider, {
|
|
5053
5110
|
value: size
|
|
@@ -5080,12 +5137,13 @@
|
|
|
5080
5137
|
return [ref, active];
|
|
5081
5138
|
}
|
|
5082
5139
|
|
|
5140
|
+
const DEFAULT_CLICK_OUTSIDE_OPTIONS = {};
|
|
5083
5141
|
function useClickOutside(options) {
|
|
5084
5142
|
const [clickedOutside, setClickedOutside] = React.useState(false);
|
|
5085
5143
|
const ref = React.useRef(null);
|
|
5086
5144
|
const {
|
|
5087
5145
|
targetWindow
|
|
5088
|
-
} = options ||
|
|
5146
|
+
} = options || DEFAULT_CLICK_OUTSIDE_OPTIONS;
|
|
5089
5147
|
React.useEffect(() => {
|
|
5090
5148
|
const win = targetWindow || (typeof window !== 'undefined' ? window : null);
|
|
5091
5149
|
if (!win) return;
|
|
@@ -5105,13 +5163,14 @@
|
|
|
5105
5163
|
return [ref, clickedOutside];
|
|
5106
5164
|
}
|
|
5107
5165
|
|
|
5166
|
+
const DEFAULT_ELEMENT_POSITION_OPTIONS = {};
|
|
5108
5167
|
/**
|
|
5109
5168
|
* A React hook to determine an element's relative position within the viewport
|
|
5110
5169
|
* and where the most available space is around it within the viewport.
|
|
5111
5170
|
*/
|
|
5112
5171
|
function useElementPosition(options) {
|
|
5113
5172
|
if (options === void 0) {
|
|
5114
|
-
options =
|
|
5173
|
+
options = DEFAULT_ELEMENT_POSITION_OPTIONS;
|
|
5115
5174
|
}
|
|
5116
5175
|
const {
|
|
5117
5176
|
trackChanges = true,
|
|
@@ -5283,18 +5342,21 @@
|
|
|
5283
5342
|
}
|
|
5284
5343
|
|
|
5285
5344
|
const useMount = callback => {
|
|
5345
|
+
const callbackRef = React.useRef(callback);
|
|
5346
|
+
callbackRef.current = callback;
|
|
5286
5347
|
React.useEffect(() => {
|
|
5287
|
-
|
|
5348
|
+
callbackRef.current();
|
|
5288
5349
|
}, []);
|
|
5289
5350
|
};
|
|
5290
5351
|
|
|
5352
|
+
const DEFAULT_ON_SCREEN_OPTIONS = {};
|
|
5291
5353
|
function useOnScreen(options) {
|
|
5292
5354
|
const ref = React.useRef(null);
|
|
5293
5355
|
const [isOnScreen, setOnScreen] = React.useState(false);
|
|
5294
5356
|
const {
|
|
5295
5357
|
targetWindow,
|
|
5296
5358
|
...observerOptions
|
|
5297
|
-
} = options ||
|
|
5359
|
+
} = options || DEFAULT_ON_SCREEN_OPTIONS;
|
|
5298
5360
|
React.useEffect(() => {
|
|
5299
5361
|
const node = ref.current;
|
|
5300
5362
|
if (!node) return;
|
|
@@ -5313,7 +5375,7 @@
|
|
|
5313
5375
|
return () => {
|
|
5314
5376
|
observer.disconnect();
|
|
5315
5377
|
};
|
|
5316
|
-
}, [targetWindow,
|
|
5378
|
+
}, [targetWindow, observerOptions.root, observerOptions.rootMargin, observerOptions.threshold]);
|
|
5317
5379
|
return [ref, isOnScreen];
|
|
5318
5380
|
}
|
|
5319
5381
|
|
|
@@ -5338,14 +5400,14 @@
|
|
|
5338
5400
|
devices
|
|
5339
5401
|
} = context;
|
|
5340
5402
|
// Helper to check if current screen matches a breakpoint or device
|
|
5341
|
-
const on = s => devices[s] ? devices[s].includes(screen) : s === screen;
|
|
5342
|
-
return {
|
|
5403
|
+
const on = React.useCallback(s => devices[s] ? devices[s].includes(screen) : s === screen, [devices, screen]);
|
|
5404
|
+
return React.useMemo(() => ({
|
|
5343
5405
|
...context,
|
|
5344
5406
|
screen,
|
|
5345
5407
|
orientation,
|
|
5346
5408
|
on,
|
|
5347
5409
|
is: on
|
|
5348
|
-
};
|
|
5410
|
+
}), [context, screen, orientation, on]);
|
|
5349
5411
|
};
|
|
5350
5412
|
/**
|
|
5351
5413
|
* Hook for components that need exact window dimensions.
|
|
@@ -5376,17 +5438,21 @@
|
|
|
5376
5438
|
orientation,
|
|
5377
5439
|
devices
|
|
5378
5440
|
} = context;
|
|
5379
|
-
const on = s => devices[s] ? devices[s].includes(screen) : s === screen;
|
|
5380
|
-
|
|
5441
|
+
const on = React.useCallback(s => devices[s] ? devices[s].includes(screen) : s === screen, [devices, screen]);
|
|
5442
|
+
return React.useMemo(() => ({
|
|
5381
5443
|
...context,
|
|
5382
5444
|
screen,
|
|
5383
5445
|
orientation,
|
|
5384
5446
|
on,
|
|
5385
5447
|
is: on
|
|
5386
|
-
};
|
|
5387
|
-
return result;
|
|
5448
|
+
}), [context, screen, orientation, on]);
|
|
5388
5449
|
};
|
|
5389
5450
|
|
|
5451
|
+
// Stable default references to prevent unnecessary re-renders
|
|
5452
|
+
const DEFAULT_SCROLL_OFFSET = [0, 0];
|
|
5453
|
+
const DEFAULT_SCROLL_OPTIONS = {};
|
|
5454
|
+
const DEFAULT_SCROLL_ANIMATION_OPTIONS = {};
|
|
5455
|
+
const DEFAULT_INFINITE_SCROLL_OPTIONS = {};
|
|
5390
5456
|
// Helper to check if element is a Window object (works across iframes)
|
|
5391
5457
|
const isWindow = obj => {
|
|
5392
5458
|
return obj && obj.window === obj;
|
|
@@ -5420,10 +5486,10 @@
|
|
|
5420
5486
|
const useScroll = function (_temp) {
|
|
5421
5487
|
let {
|
|
5422
5488
|
container,
|
|
5423
|
-
offset =
|
|
5489
|
+
offset = DEFAULT_SCROLL_OFFSET,
|
|
5424
5490
|
throttleMs = 100,
|
|
5425
5491
|
disabled = false
|
|
5426
|
-
} = _temp === void 0 ?
|
|
5492
|
+
} = _temp === void 0 ? DEFAULT_SCROLL_OPTIONS : _temp;
|
|
5427
5493
|
const [scrollPosition, setScrollPosition] = React.useState({
|
|
5428
5494
|
x: 0,
|
|
5429
5495
|
y: 0,
|
|
@@ -5562,7 +5628,7 @@
|
|
|
5562
5628
|
// Enhanced useScrollAnimation with callback support and iframe support
|
|
5563
5629
|
const useScrollAnimation = function (ref, options) {
|
|
5564
5630
|
if (options === void 0) {
|
|
5565
|
-
options =
|
|
5631
|
+
options = DEFAULT_SCROLL_ANIMATION_OPTIONS;
|
|
5566
5632
|
}
|
|
5567
5633
|
const [isInView, setIsInView] = React.useState(false);
|
|
5568
5634
|
const [progress, setProgress] = React.useState(0);
|
|
@@ -5630,7 +5696,7 @@
|
|
|
5630
5696
|
// Enhanced useInfiniteScroll with debouncing
|
|
5631
5697
|
const useInfiniteScroll = function (callback, options) {
|
|
5632
5698
|
if (options === void 0) {
|
|
5633
|
-
options =
|
|
5699
|
+
options = DEFAULT_INFINITE_SCROLL_OPTIONS;
|
|
5634
5700
|
}
|
|
5635
5701
|
const [sentinel, setSentinel] = React.useState(null);
|
|
5636
5702
|
const callbackRef = React.useRef(callback);
|
|
@@ -5725,12 +5791,13 @@
|
|
|
5725
5791
|
|
|
5726
5792
|
const useWindowSize = () => React.useContext(WindowSizeContext);
|
|
5727
5793
|
|
|
5794
|
+
const DEFAULT_IN_VIEW_OPTIONS = {};
|
|
5728
5795
|
function useInView(options) {
|
|
5729
5796
|
const {
|
|
5730
5797
|
triggerOnce = false,
|
|
5731
5798
|
targetWindow,
|
|
5732
5799
|
...observerOptions
|
|
5733
|
-
} = options ||
|
|
5800
|
+
} = options || DEFAULT_IN_VIEW_OPTIONS;
|
|
5734
5801
|
const ref = React.useRef(null);
|
|
5735
5802
|
const [inView, setInView] = React.useState(false);
|
|
5736
5803
|
React.useEffect(() => {
|
|
@@ -5760,7 +5827,7 @@
|
|
|
5760
5827
|
return () => {
|
|
5761
5828
|
observer.disconnect();
|
|
5762
5829
|
};
|
|
5763
|
-
}, [triggerOnce, targetWindow,
|
|
5830
|
+
}, [triggerOnce, targetWindow, observerOptions.root, observerOptions.rootMargin, observerOptions.threshold]);
|
|
5764
5831
|
return {
|
|
5765
5832
|
ref,
|
|
5766
5833
|
inView
|
|
@@ -5845,7 +5912,7 @@
|
|
|
5845
5912
|
if (!iframe) return;
|
|
5846
5913
|
const updateState = () => {
|
|
5847
5914
|
const win = iframe.contentWindow;
|
|
5848
|
-
const doc = iframe.contentDocument
|
|
5915
|
+
const doc = win?.document || iframe.contentDocument;
|
|
5849
5916
|
if (win && doc) {
|
|
5850
5917
|
setIframeWindow(win);
|
|
5851
5918
|
setIframeDocument(doc);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-studio.umd.development.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-studio.umd.development.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|