rn-studio 0.2.1 → 0.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/bin/rn-studio-init.js +173 -0
- package/bin/rn-studio-server.js +77 -14
- package/dist/StudioProvider.d.ts +5 -18
- package/dist/StudioProvider.d.ts.map +1 -1
- package/dist/StudioProvider.js +118 -41
- package/dist/StudioProvider.js.map +1 -1
- package/dist/ast/AstEngine.d.ts.map +1 -1
- package/dist/ast/AstEngine.js +10 -0
- package/dist/ast/AstEngine.js.map +1 -1
- package/dist/ast/UndoStack.d.ts +18 -0
- package/dist/ast/UndoStack.d.ts.map +1 -0
- package/dist/ast/UndoStack.js +105 -0
- package/dist/ast/UndoStack.js.map +1 -0
- package/dist/components/AddPropertyModal.d.ts +19 -0
- package/dist/components/AddPropertyModal.d.ts.map +1 -0
- package/dist/components/AddPropertyModal.js +174 -0
- package/dist/components/AddPropertyModal.js.map +1 -0
- package/dist/components/InspectorPanel.js +35 -5
- package/dist/components/InspectorPanel.js.map +1 -1
- package/dist/components/SelectionOverlay.d.ts.map +1 -1
- package/dist/components/SelectionOverlay.js +5 -0
- package/dist/components/SelectionOverlay.js.map +1 -1
- package/dist/components/StyleEditor.d.ts +5 -3
- package/dist/components/StyleEditor.d.ts.map +1 -1
- package/dist/components/StyleEditor.js +45 -11
- package/dist/components/StyleEditor.js.map +1 -1
- package/dist/data/styleProperties.d.ts +26 -0
- package/dist/data/styleProperties.d.ts.map +1 -0
- package/dist/data/styleProperties.js +142 -0
- package/dist/data/styleProperties.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/autoScroll.d.ts +15 -0
- package/dist/utils/autoScroll.d.ts.map +1 -0
- package/dist/utils/autoScroll.js +132 -0
- package/dist/utils/autoScroll.js.map +1 -0
- package/dist/utils/findFiberBySource.d.ts +17 -0
- package/dist/utils/findFiberBySource.d.ts.map +1 -0
- package/dist/utils/findFiberBySource.js +76 -0
- package/dist/utils/findFiberBySource.js.map +1 -0
- package/dist/utils/persistence.d.ts +12 -0
- package/dist/utils/persistence.d.ts.map +1 -0
- package/dist/utils/persistence.js +44 -0
- package/dist/utils/persistence.js.map +1 -0
- package/package.json +3 -2
|
@@ -33,28 +33,39 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.StyleEditor = void 0;
|
|
36
|
+
exports.defaultValueFor = exports.StyleEditor = void 0;
|
|
37
37
|
const react_1 = __importStar(require("react"));
|
|
38
38
|
const react_native_1 = require("react-native");
|
|
39
39
|
const StudioProvider_1 = require("../StudioProvider");
|
|
40
|
+
const AddPropertyModal_1 = require("./AddPropertyModal");
|
|
41
|
+
const styleProperties_1 = require("../data/styleProperties");
|
|
42
|
+
Object.defineProperty(exports, "defaultValueFor", { enumerable: true, get: function () { return styleProperties_1.defaultValueFor; } });
|
|
40
43
|
/**
|
|
41
44
|
* StyleEditor
|
|
42
45
|
*
|
|
43
|
-
*
|
|
44
|
-
* component
|
|
45
|
-
*
|
|
46
|
+
* Scrollable list of editable style properties for the currently
|
|
47
|
+
* selected component, preceded by a "+ Add property" button that opens
|
|
48
|
+
* the searchable RN-wide style picker modal.
|
|
46
49
|
*/
|
|
47
50
|
const StyleEditor = () => {
|
|
48
|
-
const { selectedComponent, updateStyle } = (0, StudioProvider_1.useStudio)();
|
|
51
|
+
const { selectedComponent, updateStyle, addStyleProperty } = (0, StudioProvider_1.useStudio)();
|
|
52
|
+
const [addOpen, setAddOpen] = (0, react_1.useState)(false);
|
|
49
53
|
if (!selectedComponent) {
|
|
50
54
|
return (react_1.default.createElement(react_native_1.View, { style: styles.empty },
|
|
51
55
|
react_1.default.createElement(react_native_1.Text, { style: styles.emptyText }, "No component selected")));
|
|
52
56
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return (react_1.default.createElement(
|
|
57
|
+
const existing = selectedComponent.styles.map((s) => s.key);
|
|
58
|
+
const Header = (react_1.default.createElement(react_native_1.TouchableOpacity, { style: styles.addButton, onPress: () => setAddOpen(true), activeOpacity: 0.7 },
|
|
59
|
+
react_1.default.createElement(react_native_1.Text, { style: styles.addPlus }, "\uFF0B"),
|
|
60
|
+
react_1.default.createElement(react_native_1.Text, { style: styles.addLabel }, "Add property")));
|
|
61
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
62
|
+
react_1.default.createElement(react_native_1.FlatList, { data: selectedComponent.styles, keyExtractor: (s) => s.key, style: { flex: 1 }, contentContainerStyle: [styles.list, { paddingBottom: 40 }], showsVerticalScrollIndicator: true, keyboardShouldPersistTaps: "handled", ListHeaderComponent: Header, ListEmptyComponent: react_1.default.createElement(react_native_1.Text, { style: styles.emptyText }, "This component has no inline styles yet. Tap \"Add property\" to insert one."), renderItem: ({ item }) => (react_1.default.createElement(StyleRow, { property: item, onCommit: (value) => updateStyle(item.key, value) })) }),
|
|
63
|
+
react_1.default.createElement(AddPropertyModal_1.AddPropertyModal, { visible: addOpen, existingKeys: existing, onClose: () => setAddOpen(false), onPick: (def) => {
|
|
64
|
+
const value = typeof def.default === 'boolean'
|
|
65
|
+
? (def.default ? 'true' : 'false')
|
|
66
|
+
: def.default;
|
|
67
|
+
addStyleProperty(def.key, value);
|
|
68
|
+
} })));
|
|
58
69
|
};
|
|
59
70
|
exports.StyleEditor = StyleEditor;
|
|
60
71
|
const StyleRow = ({ property, onCommit }) => {
|
|
@@ -90,6 +101,29 @@ const StyleRow = ({ property, onCommit }) => {
|
|
|
90
101
|
};
|
|
91
102
|
const styles = react_native_1.StyleSheet.create({
|
|
92
103
|
list: { padding: 16 },
|
|
104
|
+
addButton: {
|
|
105
|
+
flexDirection: 'row',
|
|
106
|
+
alignItems: 'center',
|
|
107
|
+
justifyContent: 'center',
|
|
108
|
+
backgroundColor: '#1a1a1a',
|
|
109
|
+
borderWidth: 1,
|
|
110
|
+
borderColor: '#2a2a2a',
|
|
111
|
+
borderRadius: 10,
|
|
112
|
+
paddingVertical: 12,
|
|
113
|
+
marginBottom: 12,
|
|
114
|
+
gap: 8,
|
|
115
|
+
},
|
|
116
|
+
addPlus: {
|
|
117
|
+
color: '#7C9BFF',
|
|
118
|
+
fontSize: 18,
|
|
119
|
+
fontWeight: '700',
|
|
120
|
+
lineHeight: 20,
|
|
121
|
+
},
|
|
122
|
+
addLabel: {
|
|
123
|
+
color: '#e5e5e5',
|
|
124
|
+
fontSize: 13,
|
|
125
|
+
fontWeight: '600',
|
|
126
|
+
},
|
|
93
127
|
row: {
|
|
94
128
|
flexDirection: 'row',
|
|
95
129
|
alignItems: 'center',
|
|
@@ -139,6 +173,6 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
139
173
|
fontWeight: '700',
|
|
140
174
|
},
|
|
141
175
|
empty: { padding: 32, alignItems: 'center' },
|
|
142
|
-
emptyText: { color: '#888', fontSize: 13 },
|
|
176
|
+
emptyText: { color: '#888', fontSize: 13, textAlign: 'center' },
|
|
143
177
|
});
|
|
144
178
|
//# sourceMappingURL=StyleEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyleEditor.js","sourceRoot":"","sources":["../../src/components/StyleEditor.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA2D;AAC3D,+CAOsB;AACtB,sDAA8C;
|
|
1
|
+
{"version":3,"file":"StyleEditor.js","sourceRoot":"","sources":["../../src/components/StyleEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive list of React Native style properties, grouped by
|
|
3
|
+
* category, with default values the "+ Add property" flow can use
|
|
4
|
+
* when a style is inserted for the first time.
|
|
5
|
+
*
|
|
6
|
+
* Ordered for UX: most common props appear first within each group.
|
|
7
|
+
*/
|
|
8
|
+
import type { StyleProperty } from '../types';
|
|
9
|
+
export interface StylePropertyDef {
|
|
10
|
+
key: string;
|
|
11
|
+
type: StyleProperty['type'];
|
|
12
|
+
default: string | number | boolean;
|
|
13
|
+
group: StyleGroup;
|
|
14
|
+
/** Optional enum values for smart editors (dropdowns). */
|
|
15
|
+
enum?: string[];
|
|
16
|
+
}
|
|
17
|
+
export type StyleGroup = 'Layout' | 'Flex' | 'Spacing' | 'Sizing' | 'Position' | 'Background' | 'Border' | 'Shadow' | 'Typography' | 'Transform' | 'Visibility';
|
|
18
|
+
export declare const STYLE_PROPERTIES: StylePropertyDef[];
|
|
19
|
+
export declare const STYLE_GROUPS: StyleGroup[];
|
|
20
|
+
/**
|
|
21
|
+
* Returns the default value we should insert when the user adds a new
|
|
22
|
+
* style property via the "+ Add property" flow.
|
|
23
|
+
*/
|
|
24
|
+
export declare function defaultValueFor(key: string): string | number | boolean;
|
|
25
|
+
export declare function styleDef(key: string): StylePropertyDef | undefined;
|
|
26
|
+
//# sourceMappingURL=styleProperties.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styleProperties.d.ts","sourceRoot":"","sources":["../../src/data/styleProperties.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE,UAAU,CAAC;IAClB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,MAAM,GACN,SAAS,GACT,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,YAAY,CAAC;AAIjB,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,EAiH9C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAAU,EAYpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAGtE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAElE"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Comprehensive list of React Native style properties, grouped by
|
|
4
|
+
* category, with default values the "+ Add property" flow can use
|
|
5
|
+
* when a style is inserted for the first time.
|
|
6
|
+
*
|
|
7
|
+
* Ordered for UX: most common props appear first within each group.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.STYLE_GROUPS = exports.STYLE_PROPERTIES = void 0;
|
|
11
|
+
exports.defaultValueFor = defaultValueFor;
|
|
12
|
+
exports.styleDef = styleDef;
|
|
13
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
14
|
+
exports.STYLE_PROPERTIES = [
|
|
15
|
+
// ── Layout ──────────────────────────────────────────────────────
|
|
16
|
+
{ key: 'display', type: 'string', default: 'flex', group: 'Layout', enum: ['flex', 'none'] },
|
|
17
|
+
{ key: 'overflow', type: 'string', default: 'visible', group: 'Layout', enum: ['visible', 'hidden', 'scroll'] },
|
|
18
|
+
{ key: 'aspectRatio', type: 'number', default: 1, group: 'Layout' },
|
|
19
|
+
{ key: 'zIndex', type: 'number', default: 0, group: 'Layout' },
|
|
20
|
+
{ key: 'direction', type: 'string', default: 'inherit', group: 'Layout', enum: ['inherit', 'ltr', 'rtl'] },
|
|
21
|
+
// ── Flex ────────────────────────────────────────────────────────
|
|
22
|
+
{ key: 'flex', type: 'number', default: 1, group: 'Flex' },
|
|
23
|
+
{ key: 'flexDirection', type: 'string', default: 'column', group: 'Flex', enum: ['row', 'column', 'row-reverse', 'column-reverse'] },
|
|
24
|
+
{ key: 'flexWrap', type: 'string', default: 'nowrap', group: 'Flex', enum: ['wrap', 'nowrap', 'wrap-reverse'] },
|
|
25
|
+
{ key: 'flexGrow', type: 'number', default: 0, group: 'Flex' },
|
|
26
|
+
{ key: 'flexShrink', type: 'number', default: 1, group: 'Flex' },
|
|
27
|
+
{ key: 'flexBasis', type: 'number', default: 0, group: 'Flex' },
|
|
28
|
+
{ key: 'justifyContent', type: 'string', default: 'flex-start', group: 'Flex', enum: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'space-evenly'] },
|
|
29
|
+
{ key: 'alignItems', type: 'string', default: 'stretch', group: 'Flex', enum: ['flex-start', 'flex-end', 'center', 'stretch', 'baseline'] },
|
|
30
|
+
{ key: 'alignSelf', type: 'string', default: 'auto', group: 'Flex', enum: ['auto', 'flex-start', 'flex-end', 'center', 'stretch', 'baseline'] },
|
|
31
|
+
{ key: 'alignContent', type: 'string', default: 'flex-start', group: 'Flex', enum: ['flex-start', 'flex-end', 'center', 'stretch', 'space-between', 'space-around'] },
|
|
32
|
+
{ key: 'gap', type: 'number', default: 8, group: 'Flex' },
|
|
33
|
+
{ key: 'rowGap', type: 'number', default: 8, group: 'Flex' },
|
|
34
|
+
{ key: 'columnGap', type: 'number', default: 8, group: 'Flex' },
|
|
35
|
+
// ── Spacing ─────────────────────────────────────────────────────
|
|
36
|
+
{ key: 'padding', type: 'number', default: 16, group: 'Spacing' },
|
|
37
|
+
{ key: 'paddingHorizontal', type: 'number', default: 16, group: 'Spacing' },
|
|
38
|
+
{ key: 'paddingVertical', type: 'number', default: 12, group: 'Spacing' },
|
|
39
|
+
{ key: 'paddingTop', type: 'number', default: 12, group: 'Spacing' },
|
|
40
|
+
{ key: 'paddingRight', type: 'number', default: 16, group: 'Spacing' },
|
|
41
|
+
{ key: 'paddingBottom', type: 'number', default: 12, group: 'Spacing' },
|
|
42
|
+
{ key: 'paddingLeft', type: 'number', default: 16, group: 'Spacing' },
|
|
43
|
+
{ key: 'paddingStart', type: 'number', default: 16, group: 'Spacing' },
|
|
44
|
+
{ key: 'paddingEnd', type: 'number', default: 16, group: 'Spacing' },
|
|
45
|
+
{ key: 'margin', type: 'number', default: 16, group: 'Spacing' },
|
|
46
|
+
{ key: 'marginHorizontal', type: 'number', default: 16, group: 'Spacing' },
|
|
47
|
+
{ key: 'marginVertical', type: 'number', default: 12, group: 'Spacing' },
|
|
48
|
+
{ key: 'marginTop', type: 'number', default: 12, group: 'Spacing' },
|
|
49
|
+
{ key: 'marginRight', type: 'number', default: 16, group: 'Spacing' },
|
|
50
|
+
{ key: 'marginBottom', type: 'number', default: 12, group: 'Spacing' },
|
|
51
|
+
{ key: 'marginLeft', type: 'number', default: 16, group: 'Spacing' },
|
|
52
|
+
{ key: 'marginStart', type: 'number', default: 16, group: 'Spacing' },
|
|
53
|
+
{ key: 'marginEnd', type: 'number', default: 16, group: 'Spacing' },
|
|
54
|
+
// ── Sizing ──────────────────────────────────────────────────────
|
|
55
|
+
{ key: 'width', type: 'number', default: 100, group: 'Sizing' },
|
|
56
|
+
{ key: 'height', type: 'number', default: 100, group: 'Sizing' },
|
|
57
|
+
{ key: 'minWidth', type: 'number', default: 0, group: 'Sizing' },
|
|
58
|
+
{ key: 'minHeight', type: 'number', default: 0, group: 'Sizing' },
|
|
59
|
+
{ key: 'maxWidth', type: 'number', default: 400, group: 'Sizing' },
|
|
60
|
+
{ key: 'maxHeight', type: 'number', default: 400, group: 'Sizing' },
|
|
61
|
+
// ── Position ────────────────────────────────────────────────────
|
|
62
|
+
{ key: 'position', type: 'string', default: 'relative', group: 'Position', enum: ['absolute', 'relative', 'static'] },
|
|
63
|
+
{ key: 'top', type: 'number', default: 0, group: 'Position' },
|
|
64
|
+
{ key: 'right', type: 'number', default: 0, group: 'Position' },
|
|
65
|
+
{ key: 'bottom', type: 'number', default: 0, group: 'Position' },
|
|
66
|
+
{ key: 'left', type: 'number', default: 0, group: 'Position' },
|
|
67
|
+
{ key: 'start', type: 'number', default: 0, group: 'Position' },
|
|
68
|
+
{ key: 'end', type: 'number', default: 0, group: 'Position' },
|
|
69
|
+
// ── Background ──────────────────────────────────────────────────
|
|
70
|
+
{ key: 'backgroundColor', type: 'color', default: '#7C9BFF', group: 'Background' },
|
|
71
|
+
{ key: 'opacity', type: 'number', default: 1, group: 'Background' },
|
|
72
|
+
// ── Border ──────────────────────────────────────────────────────
|
|
73
|
+
{ key: 'borderRadius', type: 'number', default: 8, group: 'Border' },
|
|
74
|
+
{ key: 'borderTopLeftRadius', type: 'number', default: 8, group: 'Border' },
|
|
75
|
+
{ key: 'borderTopRightRadius', type: 'number', default: 8, group: 'Border' },
|
|
76
|
+
{ key: 'borderBottomLeftRadius', type: 'number', default: 8, group: 'Border' },
|
|
77
|
+
{ key: 'borderBottomRightRadius', type: 'number', default: 8, group: 'Border' },
|
|
78
|
+
{ key: 'borderWidth', type: 'number', default: 1, group: 'Border' },
|
|
79
|
+
{ key: 'borderTopWidth', type: 'number', default: 1, group: 'Border' },
|
|
80
|
+
{ key: 'borderRightWidth', type: 'number', default: 1, group: 'Border' },
|
|
81
|
+
{ key: 'borderBottomWidth', type: 'number', default: 1, group: 'Border' },
|
|
82
|
+
{ key: 'borderLeftWidth', type: 'number', default: 1, group: 'Border' },
|
|
83
|
+
{ key: 'borderColor', type: 'color', default: '#2a2a2a', group: 'Border' },
|
|
84
|
+
{ key: 'borderTopColor', type: 'color', default: '#2a2a2a', group: 'Border' },
|
|
85
|
+
{ key: 'borderRightColor', type: 'color', default: '#2a2a2a', group: 'Border' },
|
|
86
|
+
{ key: 'borderBottomColor', type: 'color', default: '#2a2a2a', group: 'Border' },
|
|
87
|
+
{ key: 'borderLeftColor', type: 'color', default: '#2a2a2a', group: 'Border' },
|
|
88
|
+
{ key: 'borderStyle', type: 'string', default: 'solid', group: 'Border', enum: ['solid', 'dotted', 'dashed'] },
|
|
89
|
+
// ── Shadow (iOS) ────────────────────────────────────────────────
|
|
90
|
+
{ key: 'shadowColor', type: 'color', default: '#000000', group: 'Shadow' },
|
|
91
|
+
{ key: 'shadowOpacity', type: 'number', default: 0.25, group: 'Shadow' },
|
|
92
|
+
{ key: 'shadowRadius', type: 'number', default: 8, group: 'Shadow' },
|
|
93
|
+
{ key: 'elevation', type: 'number', default: 4, group: 'Shadow' },
|
|
94
|
+
// ── Typography (Text) ───────────────────────────────────────────
|
|
95
|
+
{ key: 'color', type: 'color', default: '#fafafa', group: 'Typography' },
|
|
96
|
+
{ key: 'fontSize', type: 'number', default: 14, group: 'Typography' },
|
|
97
|
+
{ key: 'fontWeight', type: 'string', default: '400', group: 'Typography', enum: ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'] },
|
|
98
|
+
{ key: 'fontFamily', type: 'string', default: 'System', group: 'Typography' },
|
|
99
|
+
{ key: 'fontStyle', type: 'string', default: 'normal', group: 'Typography', enum: ['normal', 'italic'] },
|
|
100
|
+
{ key: 'lineHeight', type: 'number', default: 20, group: 'Typography' },
|
|
101
|
+
{ key: 'letterSpacing', type: 'number', default: 0, group: 'Typography' },
|
|
102
|
+
{ key: 'textAlign', type: 'string', default: 'auto', group: 'Typography', enum: ['auto', 'left', 'right', 'center', 'justify'] },
|
|
103
|
+
{ key: 'textAlignVertical', type: 'string', default: 'auto', group: 'Typography', enum: ['auto', 'top', 'bottom', 'center'] },
|
|
104
|
+
{ key: 'textDecorationLine', type: 'string', default: 'none', group: 'Typography', enum: ['none', 'underline', 'line-through', 'underline line-through'] },
|
|
105
|
+
{ key: 'textDecorationStyle', type: 'string', default: 'solid', group: 'Typography', enum: ['solid', 'double', 'dotted', 'dashed'] },
|
|
106
|
+
{ key: 'textDecorationColor', type: 'color', default: '#fafafa', group: 'Typography' },
|
|
107
|
+
{ key: 'textTransform', type: 'string', default: 'none', group: 'Typography', enum: ['none', 'uppercase', 'lowercase', 'capitalize'] },
|
|
108
|
+
{ key: 'textShadowColor', type: 'color', default: '#000000', group: 'Typography' },
|
|
109
|
+
{ key: 'textShadowRadius', type: 'number', default: 2, group: 'Typography' },
|
|
110
|
+
{ key: 'writingDirection', type: 'string', default: 'auto', group: 'Typography', enum: ['auto', 'ltr', 'rtl'] },
|
|
111
|
+
{ key: 'includeFontPadding', type: 'boolean', default: true, group: 'Typography' },
|
|
112
|
+
// ── Transform ───────────────────────────────────────────────────
|
|
113
|
+
{ key: 'transformOrigin', type: 'string', default: 'center', group: 'Transform' },
|
|
114
|
+
// Note: the `transform` array form is handled via inline editing, not here.
|
|
115
|
+
// ── Visibility ──────────────────────────────────────────────────
|
|
116
|
+
{ key: 'pointerEvents', type: 'string', default: 'auto', group: 'Visibility', enum: ['auto', 'none', 'box-none', 'box-only'] },
|
|
117
|
+
];
|
|
118
|
+
exports.STYLE_GROUPS = [
|
|
119
|
+
'Layout',
|
|
120
|
+
'Flex',
|
|
121
|
+
'Spacing',
|
|
122
|
+
'Sizing',
|
|
123
|
+
'Position',
|
|
124
|
+
'Background',
|
|
125
|
+
'Border',
|
|
126
|
+
'Shadow',
|
|
127
|
+
'Typography',
|
|
128
|
+
'Transform',
|
|
129
|
+
'Visibility',
|
|
130
|
+
];
|
|
131
|
+
/**
|
|
132
|
+
* Returns the default value we should insert when the user adds a new
|
|
133
|
+
* style property via the "+ Add property" flow.
|
|
134
|
+
*/
|
|
135
|
+
function defaultValueFor(key) {
|
|
136
|
+
const def = exports.STYLE_PROPERTIES.find((p) => p.key === key);
|
|
137
|
+
return def ? def.default : 0;
|
|
138
|
+
}
|
|
139
|
+
function styleDef(key) {
|
|
140
|
+
return exports.STYLE_PROPERTIES.find((p) => p.key === key);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=styleProperties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styleProperties.js","sourceRoot":"","sources":["../../src/data/styleProperties.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -45,6 +45,15 @@ export interface StudioContextValue {
|
|
|
45
45
|
selectComponent: (node: ComponentNode) => void;
|
|
46
46
|
clearSelection: () => void;
|
|
47
47
|
updateStyle: (key: string, value: string | number) => void;
|
|
48
|
+
/** Add a new style property to the selected component. */
|
|
49
|
+
addStyleProperty: (key: string, value: string | number | boolean) => void;
|
|
50
|
+
/** Undo the last style change across all components. */
|
|
51
|
+
undo: () => void;
|
|
52
|
+
/** Redo the last undone change. */
|
|
53
|
+
redo: () => void;
|
|
54
|
+
/** Current undo/redo stack depths, updated by server ACKs. */
|
|
55
|
+
canUndo: boolean;
|
|
56
|
+
canRedo: boolean;
|
|
48
57
|
}
|
|
49
58
|
/** WebSocket message protocol — discriminated union. */
|
|
50
59
|
export type StudioMessage = {
|
|
@@ -64,6 +73,16 @@ export type StudioMessage = {
|
|
|
64
73
|
propName: string;
|
|
65
74
|
value: unknown;
|
|
66
75
|
};
|
|
76
|
+
} | {
|
|
77
|
+
type: 'UNDO';
|
|
78
|
+
} | {
|
|
79
|
+
type: 'REDO';
|
|
80
|
+
} | {
|
|
81
|
+
type: 'STACK_STATE';
|
|
82
|
+
payload: {
|
|
83
|
+
undo: number;
|
|
84
|
+
redo: number;
|
|
85
|
+
};
|
|
67
86
|
} | {
|
|
68
87
|
type: 'PING';
|
|
69
88
|
} | {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAChD,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;CAC1B;AAED,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,aAAa,GACb,WAAW,GACX,UAAU,CAAC;AAEf,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,eAAe,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Frame {
|
|
2
|
+
left: number;
|
|
3
|
+
top: number;
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Called by SelectionOverlay after a successful selection. `fiber` is
|
|
9
|
+
* the `closestInstance` from `getInspectorDataForViewAtPoint`. `frame`
|
|
10
|
+
* is its measured pageX/Y box. If the component is already visible
|
|
11
|
+
* above the panel, this is a no-op.
|
|
12
|
+
*/
|
|
13
|
+
export declare function autoScrollToComponent(fiber: any, frame: Frame): void;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=autoScroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoScroll.d.ts","sourceRoot":"","sources":["../../src/utils/autoScroll.ts"],"names":[],"mappings":"AAaA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AA4CD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAsEpE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.autoScrollToComponent = autoScrollToComponent;
|
|
4
|
+
/**
|
|
5
|
+
* autoScrollToComponent
|
|
6
|
+
*
|
|
7
|
+
* When a component is selected and the inspector panel slides up
|
|
8
|
+
* covering the bottom 60% of the screen, the component itself may be
|
|
9
|
+
* hidden behind the panel. This utility walks the fiber tree to find
|
|
10
|
+
* the nearest scrollable ancestor and scrolls so that the component
|
|
11
|
+
* appears in the top ~25% of the visible area (above the panel).
|
|
12
|
+
*/
|
|
13
|
+
const react_native_1 = require("react-native");
|
|
14
|
+
const SCREEN_HEIGHT = react_native_1.Dimensions.get('window').height;
|
|
15
|
+
/** Panel covers the bottom 60% of the screen — visible area is 0..VISIBLE_BOTTOM. */
|
|
16
|
+
const VISIBLE_BOTTOM = Math.round(SCREEN_HEIGHT * 0.4);
|
|
17
|
+
/** Desired top padding for the selected component inside the visible area. */
|
|
18
|
+
const TOP_PADDING = Math.round(SCREEN_HEIGHT * 0.12);
|
|
19
|
+
/**
|
|
20
|
+
* Walks a fiber's `.return` chain looking for the nearest ancestor
|
|
21
|
+
* whose stateNode exposes a `scrollTo` method (ScrollView, FlatList,
|
|
22
|
+
* SectionList, KeyboardAwareScrollView, etc.).
|
|
23
|
+
*/
|
|
24
|
+
function findScrollableAncestor(fiber) {
|
|
25
|
+
let current = fiber;
|
|
26
|
+
let safety = 0;
|
|
27
|
+
while (current && safety < 200) {
|
|
28
|
+
safety++;
|
|
29
|
+
const node = current.stateNode;
|
|
30
|
+
if (node) {
|
|
31
|
+
if (typeof node.scrollTo === 'function')
|
|
32
|
+
return node;
|
|
33
|
+
if (typeof node.scrollToOffset === 'function') {
|
|
34
|
+
return {
|
|
35
|
+
scrollTo: ({ y, animated }) => node.scrollToOffset({ offset: y, animated }),
|
|
36
|
+
getInnerViewNode: typeof node.getNativeScrollRef === 'function'
|
|
37
|
+
? () => {
|
|
38
|
+
const ref = node.getNativeScrollRef();
|
|
39
|
+
return ref && (0, react_native_1.findNodeHandle)(ref);
|
|
40
|
+
}
|
|
41
|
+
: undefined,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (typeof node.getScrollResponder === 'function') {
|
|
45
|
+
const r = node.getScrollResponder();
|
|
46
|
+
if (r && typeof r.scrollTo === 'function')
|
|
47
|
+
return r;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
current = current.return;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Called by SelectionOverlay after a successful selection. `fiber` is
|
|
56
|
+
* the `closestInstance` from `getInspectorDataForViewAtPoint`. `frame`
|
|
57
|
+
* is its measured pageX/Y box. If the component is already visible
|
|
58
|
+
* above the panel, this is a no-op.
|
|
59
|
+
*/
|
|
60
|
+
function autoScrollToComponent(fiber, frame) {
|
|
61
|
+
if (!fiber || !frame)
|
|
62
|
+
return;
|
|
63
|
+
// Already inside the visible area? Nothing to do.
|
|
64
|
+
if (frame.top >= TOP_PADDING && frame.top + frame.height <= VISIBLE_BOTTOM) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const scrollable = findScrollableAncestor(fiber);
|
|
68
|
+
if (!scrollable || typeof scrollable.scrollTo !== 'function')
|
|
69
|
+
return;
|
|
70
|
+
// Resolve the scroll content view handle.
|
|
71
|
+
let contentTag = null;
|
|
72
|
+
try {
|
|
73
|
+
if (typeof scrollable.getInnerViewNode === 'function') {
|
|
74
|
+
contentTag = scrollable.getInnerViewNode();
|
|
75
|
+
}
|
|
76
|
+
else if (scrollable._innerViewRef) {
|
|
77
|
+
contentTag = (0, react_native_1.findNodeHandle)(scrollable._innerViewRef);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
contentTag = (0, react_native_1.findNodeHandle)(scrollable);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
contentTag = null;
|
|
85
|
+
}
|
|
86
|
+
if (!contentTag)
|
|
87
|
+
return;
|
|
88
|
+
// Resolve the target host view's handle.
|
|
89
|
+
let targetTag = null;
|
|
90
|
+
try {
|
|
91
|
+
// Prefer the fiber's stateNode (host fibers have a nativeTag'd stateNode).
|
|
92
|
+
const sn = fiber.stateNode;
|
|
93
|
+
if (sn) {
|
|
94
|
+
targetTag =
|
|
95
|
+
(0, react_native_1.findNodeHandle)(sn) ||
|
|
96
|
+
(sn.canonical && sn.canonical.nativeTag) ||
|
|
97
|
+
null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
targetTag = null;
|
|
102
|
+
}
|
|
103
|
+
if (!targetTag)
|
|
104
|
+
return;
|
|
105
|
+
// Measure the target's y inside the scroll content, then scroll to
|
|
106
|
+
// that position minus the desired top padding.
|
|
107
|
+
try {
|
|
108
|
+
react_native_1.UIManager.measureLayout(targetTag, contentTag, () => {
|
|
109
|
+
// onFail: silently ignore.
|
|
110
|
+
}, (_x, y) => {
|
|
111
|
+
const targetY = Math.max(0, y - TOP_PADDING);
|
|
112
|
+
try {
|
|
113
|
+
scrollable.scrollTo({ y: targetY, animated: true });
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Some custom scroll components expect different signatures.
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// measureLayout is unavailable on some edge-case architectures;
|
|
122
|
+
// fall back to a best-guess scroll using the page-space delta.
|
|
123
|
+
try {
|
|
124
|
+
scrollable.scrollTo({
|
|
125
|
+
y: Math.max(0, frame.top - TOP_PADDING),
|
|
126
|
+
animated: true,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch { }
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=autoScroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoScroll.js","sourceRoot":"","sources":["../../src/utils/autoScroll.ts"],"names":[],"mappings":";;AAoEA,sDAsEC;AA1ID;;;;;;;;GAQG;AACH,+CAAqE;AAWrE,MAAM,aAAa,GAAG,yBAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AACtD,qFAAqF;AACrF,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;AACvD,8EAA8E;AAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AAErD;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,KAAU;IACxC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,OAAO,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAC/B,MAAM,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACrD,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;gBAC9C,OAAO;oBACL,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAqC,EAAE,EAAE,CAC/D,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;oBAC9C,gBAAgB,EACd,OAAO,IAAI,CAAC,kBAAkB,KAAK,UAAU;wBAC3C,CAAC,CAAC,GAAG,EAAE;4BACH,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BACtC,OAAO,GAAG,IAAI,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;wBACpC,CAAC;wBACH,CAAC,CAAC,SAAS;iBAChB,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,kBAAkB,KAAK,UAAU,EAAE,CAAC;gBAClD,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;oBAAE,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,KAAU,EAAE,KAAY;IAC5D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO;IAE7B,kDAAkD;IAClD,IAAI,KAAK,CAAC,GAAG,IAAI,WAAW,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO;IAErE,0CAA0C;IAC1C,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACtD,UAAU,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAC7C,CAAC;aAAM,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YACpC,UAAU,GAAG,IAAA,6BAAc,EAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,IAAA,6BAAc,EAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,yCAAyC;IACzC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,2EAA2E;QAC3E,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC;YACP,SAAS;gBACP,IAAA,6BAAc,EAAC,EAAE,CAAC;oBAClB,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;oBACxC,IAAI,CAAC;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,mEAAmE;IACnE,+CAA+C;IAC/C,IAAI,CAAC;QACF,wBAAiB,CAAC,aAAa,CAC9B,SAAS,EACT,UAAU,EACV,GAAG,EAAE;YACH,2BAA2B;QAC7B,CAAC,EACD,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC;gBACH,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;YAC/D,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;QAChE,+DAA+D;QAC/D,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,CAAC;gBAClB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC;gBACvC,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* findFiberBySource
|
|
3
|
+
*
|
|
4
|
+
* Walks all live React fiber trees via the React DevTools hook and
|
|
5
|
+
* returns the first fiber whose memoizedProps carry a
|
|
6
|
+
* `__rnStudioSource` or `__source` matching the supplied coordinates.
|
|
7
|
+
*
|
|
8
|
+
* Used by StudioProvider to re-select the previously selected
|
|
9
|
+
* component after a Metro Fast Refresh or full reload.
|
|
10
|
+
*/
|
|
11
|
+
import type { SourceLocation } from '../types';
|
|
12
|
+
/**
|
|
13
|
+
* Public entry point. Returns the first matching fiber or null. Safe
|
|
14
|
+
* to call even if React DevTools isn't installed.
|
|
15
|
+
*/
|
|
16
|
+
export declare function findFiberBySource(target: SourceLocation): any | null;
|
|
17
|
+
//# sourceMappingURL=findFiberBySource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findFiberBySource.d.ts","sourceRoot":"","sources":["../../src/utils/findFiberBySource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAsC/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,GAAG,IAAI,CAgCpE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findFiberBySource = findFiberBySource;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
function matchesSource(props, target) {
|
|
6
|
+
if (!props || typeof props !== 'object')
|
|
7
|
+
return false;
|
|
8
|
+
if (props.__rnStudioSource &&
|
|
9
|
+
props.__rnStudioSource.file === target.file &&
|
|
10
|
+
props.__rnStudioSource.line === target.line) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (props.__source &&
|
|
14
|
+
props.__source.fileName === target.file &&
|
|
15
|
+
props.__source.lineNumber === target.line) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
function walkFiber(fiber, target) {
|
|
21
|
+
if (!fiber)
|
|
22
|
+
return null;
|
|
23
|
+
const queue = [fiber];
|
|
24
|
+
let safety = 0;
|
|
25
|
+
while (queue.length && safety < 10000) {
|
|
26
|
+
safety++;
|
|
27
|
+
const node = queue.shift();
|
|
28
|
+
if (!node)
|
|
29
|
+
continue;
|
|
30
|
+
if (matchesSource(node.memoizedProps, target))
|
|
31
|
+
return node;
|
|
32
|
+
if (node.child)
|
|
33
|
+
queue.push(node.child);
|
|
34
|
+
if (node.sibling)
|
|
35
|
+
queue.push(node.sibling);
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Public entry point. Returns the first matching fiber or null. Safe
|
|
41
|
+
* to call even if React DevTools isn't installed.
|
|
42
|
+
*/
|
|
43
|
+
function findFiberBySource(target) {
|
|
44
|
+
const hook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
45
|
+
if (!hook || !hook.renderers)
|
|
46
|
+
return null;
|
|
47
|
+
try {
|
|
48
|
+
const renderers = Array.from(hook.renderers.values());
|
|
49
|
+
for (const renderer of renderers) {
|
|
50
|
+
// Fiber roots may be exposed via `getFiberRoots(rendererID)` or a
|
|
51
|
+
// Set stored on the renderer itself; defensively handle both.
|
|
52
|
+
const rendererID = [...hook.renderers.keys()].find((k) => hook.renderers.get(k) === renderer);
|
|
53
|
+
let roots = null;
|
|
54
|
+
if (typeof hook.getFiberRoots === 'function' && rendererID != null) {
|
|
55
|
+
roots = hook.getFiberRoots(rendererID);
|
|
56
|
+
}
|
|
57
|
+
if (!roots && renderer.getFiberRoots) {
|
|
58
|
+
roots = renderer.getFiberRoots();
|
|
59
|
+
}
|
|
60
|
+
if (!roots)
|
|
61
|
+
continue;
|
|
62
|
+
for (const root of roots) {
|
|
63
|
+
const fiberRoot = root.current || root;
|
|
64
|
+
const found = walkFiber(fiberRoot, target);
|
|
65
|
+
if (found)
|
|
66
|
+
return found;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// DevTools hook internals shift between RN versions; swallow any
|
|
72
|
+
// reflection errors — re-selection is best-effort.
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=findFiberBySource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findFiberBySource.js","sourceRoot":"","sources":["../../src/utils/findFiberBySource.ts"],"names":[],"mappings":"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"}
|