├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ ├── close-when-stale.yaml │ ├── lint-extension.yml │ ├── package-extension.yml │ └── typecheck-extension.yml ├── .gitignore ├── .gitmodules ├── LICENSE.txt ├── README.md └── packages ├── docs ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── docs │ ├── _changelog │ │ ├── 1.0.x.md │ │ ├── 1.1.x.md │ │ ├── 1.2.x.md │ │ ├── 1.3.x.md │ │ ├── 1.4.x.md │ │ ├── 1.5.x.md │ │ └── 1.6.x.md │ ├── features │ │ ├── _category_.json │ │ ├── debugging-and-logging.md │ │ ├── dev-tools.md │ │ ├── device-settings.mdx │ │ ├── element-inspector.md │ │ ├── network-inspector.md │ │ ├── previews.mdx │ │ ├── radon-ai.md │ │ ├── router-integration.md │ │ ├── screen-recording.md │ │ └── storybook-integration.md │ ├── getting-started │ │ ├── _category_.json │ │ ├── changelog.mdx │ │ ├── compatibility.md │ │ ├── feature-highlight.md │ │ ├── installation.md │ │ ├── launching.md │ │ └── user-interface.mdx │ └── guides │ │ ├── _category_.json │ │ ├── activation-manual.md │ │ ├── configuration.md │ │ ├── development.md │ │ ├── device-management.md │ │ ├── keyboard-shortcuts.md │ │ ├── simulators.md │ │ └── troubleshooting.md ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src │ ├── components │ │ ├── Button │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── ChainIcon │ │ │ └── index.tsx │ │ ├── Changelog │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── CloseIcon │ │ │ └── index.tsx │ │ ├── Compatibility │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Disclaimer │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Elipse │ │ │ ├── BigElipseIcon │ │ │ │ └── index.tsx │ │ │ ├── SmallElipseIcon │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── FaqList │ │ │ ├── ChevronDownIcon │ │ │ │ └── index.tsx │ │ │ ├── FaqItem │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── index.tsx │ │ ├── Hero │ │ │ ├── HeroElipse │ │ │ │ ├── ElipseIcon │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── LandingBackground │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── StartScreen │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ ├── HomepageButton │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── LearnMore │ │ │ ├── LearnMoreFooter │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── LearnMoreHero │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ ├── LinkButton │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Motivation │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Pricing │ │ │ ├── CompatibilityInfo │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── PricingCard │ │ │ │ ├── SpecialOffer │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── index.tsx │ │ │ │ ├── pricing.module.css │ │ │ │ └── styles.module.css │ │ │ ├── PricingPlansList │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── SupporterPlan │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── SecondaryButton │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Sections │ │ │ ├── FAQ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── Installation │ │ │ │ ├── InstallationStep │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── Overview │ │ │ │ ├── OverviewItem │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── Testimonials │ │ │ │ ├── TestimonialItem │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── configStyles.module.css │ │ └── SidebarLabel │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ ├── css │ │ ├── colors.css │ │ ├── custom.css │ │ ├── media.css │ │ ├── overrides.css │ │ └── typography.css │ ├── hooks │ │ ├── usePaddle.tsx │ │ ├── usePageType.tsx │ │ └── useScreenSize.tsx │ ├── pages │ │ ├── index.module.css │ │ ├── index.tsx │ │ ├── legal │ │ │ ├── b2b-license-terms.mdx │ │ │ ├── dpa.module.css │ │ │ ├── dpa.tsx │ │ │ ├── early-terms-of-use.mdx │ │ │ ├── free-trial.mdx │ │ │ ├── index.module.css │ │ │ ├── index.tsx │ │ │ ├── personal-license-terms.mdx │ │ │ ├── privacy-policy.mdx │ │ │ ├── purchase-terms.mdx │ │ │ ├── refund-policy.mdx │ │ │ └── supporter-terms.mdx │ │ ├── pricing.module.css │ │ └── pricing.tsx │ ├── plugins │ │ └── changelog │ │ │ └── index.js │ ├── remark │ │ └── auto-num.js │ └── theme │ │ ├── Admonition │ │ └── index.js │ │ ├── CodeBlock │ │ ├── highlighting-dark.js │ │ └── highlighting-light.js │ │ ├── DocCard │ │ └── index.js │ │ ├── DocItem │ │ ├── Metadata │ │ │ └── index.js │ │ └── TOC │ │ │ └── Mobile │ │ │ └── index.js │ │ ├── DocSidebar │ │ └── index.js │ │ ├── DocSidebarItem │ │ └── index.js │ │ ├── DocSidebarItems │ │ └── index.js │ │ ├── Footer │ │ └── index.js │ │ ├── Logo │ │ ├── LogoStyling.tsx │ │ ├── index.js │ │ └── styles.module.css │ │ ├── MDXComponents │ │ ├── Details.js │ │ ├── DetailsStyling.tsx │ │ └── styles.module.css │ │ ├── Navbar │ │ └── index.js │ │ ├── PaginatorNavLink │ │ └── index.js │ │ ├── Root.js │ │ ├── SearchPage │ │ └── index.js │ │ ├── TOCCollapsible │ │ └── index.js │ │ ├── TOCItems │ │ ├── Tree.js │ │ └── index.js │ │ ├── Tabs │ │ ├── index.js │ │ └── styles.module.css │ │ └── muiTheme.tsx ├── static │ ├── .nojekyll │ ├── fonts │ │ ├── Aeonik-Bold.otf │ │ ├── Aeonik-Medium.otf │ │ ├── Aeonik-Regular.otf │ │ └── DMMono-Regular.ttf │ ├── img │ │ ├── Arrow-dark.svg │ │ ├── Arrow.svg │ │ ├── arrow-left-dark.svg │ │ ├── arrow-left.svg │ │ ├── arrow-right-dark.svg │ │ ├── arrow-right-hero.svg │ │ ├── arrow-right.svg │ │ ├── brand.svg │ │ ├── danger-dark.svg │ │ ├── danger.svg │ │ ├── docs │ │ │ ├── android_sdk_manager.png │ │ │ ├── change_theme_type.png │ │ │ ├── customer_portal_license_email.png │ │ │ ├── customer_portal_login_page.png │ │ │ ├── customer_portal_manage_subscription.png │ │ │ ├── customer_portal_retrieve_license.png │ │ │ ├── download_vsix.png │ │ │ ├── extension_host_title.png │ │ │ ├── extensions_panel.png │ │ │ ├── ide_activate_license.png │ │ │ ├── ide_add_breakpoint.png │ │ │ ├── ide_add_device.png │ │ │ ├── ide_adjust_keybindings.png │ │ │ ├── ide_biometrics.png │ │ │ ├── ide_build_logs.png │ │ │ ├── ide_change_panel_location.png │ │ │ ├── ide_chat_github_copilot.png │ │ │ ├── ide_chat_request.png │ │ │ ├── ide_chat_response.png │ │ │ ├── ide_clear_console.png │ │ │ ├── ide_close_overlay.png │ │ │ ├── ide_create_launch_config.png │ │ │ ├── ide_deep_link.png │ │ │ ├── ide_device_settings.png │ │ │ ├── ide_device_settings_1_0.png │ │ │ ├── ide_device_settings_button.png │ │ │ ├── ide_device_settings_captioned.png │ │ │ ├── ide_devtools_expo_redux.png │ │ │ ├── ide_devtools_menu.png │ │ │ ├── ide_devtools_menu_icon.png │ │ │ ├── ide_devtools_network_inspector.png │ │ │ ├── ide_devtools_panel.png │ │ │ ├── ide_devtools_profiler_stop.png │ │ │ ├── ide_devtools_profiler_visualize.png │ │ │ ├── ide_devtools_react_profiler_analysis.png │ │ │ ├── ide_devtools_react_profiler_stop.png │ │ │ ├── ide_devtools_react_query.png │ │ │ ├── ide_devtools_react_scan.png │ │ │ ├── ide_devtools_redux.png │ │ │ ├── ide_enable_inspector.png │ │ │ ├── ide_enable_network_inspector.png │ │ │ ├── ide_enable_replays.png │ │ │ ├── ide_geolocation.png │ │ │ ├── ide_how_to_manage_devices.png │ │ │ ├── ide_jump_from_logs.png │ │ │ ├── ide_launch_config_ide.png │ │ │ ├── ide_localization.png │ │ │ ├── ide_logs_button.png │ │ │ ├── ide_logs_objects.png │ │ │ ├── ide_manage_devices.png │ │ │ ├── ide_manage_devices_modal.png │ │ │ ├── ide_marketplace_page.png │ │ │ ├── ide_native_logs.png │ │ │ ├── ide_network_inspector_buttons.png │ │ │ ├── ide_panel_location.png │ │ │ ├── ide_paused_in_debugger.png │ │ │ ├── ide_permissions.png │ │ │ ├── ide_previews.png │ │ │ ├── ide_reload_options.png │ │ │ ├── ide_remove_device.png │ │ │ ├── ide_replays_enabled.png │ │ │ ├── ide_router_integration.png │ │ │ ├── ide_screen_recording.png │ │ │ ├── ide_select_story.png │ │ │ ├── ide_settings_dropdown.png │ │ │ ├── ide_theme.png │ │ │ ├── ide_uncaught_exception.png │ │ │ ├── ide_url_select.png │ │ │ ├── ide_user_interface.png │ │ │ ├── ide_zoom_controls.png │ │ │ ├── install_from_vsix.png │ │ │ ├── ios_platforms_manager.png │ │ │ ├── ios_platforms_manager_select_version.png │ │ │ ├── marketplace_install_older_version.png │ │ │ ├── new_window_vscode_setting.png │ │ │ ├── reload_options.png │ │ │ ├── restart_extension.png │ │ │ ├── run_and_debug.png │ │ │ ├── sztudio_command_palette.png │ │ │ ├── sztudio_editor_button.png │ │ │ ├── sztudio_init_screen.png │ │ │ └── sztudio_side_panel.png │ │ ├── docusaurus.png │ │ ├── elipse.svg │ │ ├── favicon.png │ │ ├── github.svg │ │ ├── hero.webp │ │ ├── info-circle.svg │ │ ├── logo.svg │ │ ├── logo_2.svg │ │ ├── og-image.png │ │ ├── swm-logo.svg │ │ └── vscode.jpg │ └── video │ │ ├── 1_sztudio_integrated.mp4 │ │ ├── 2_sztudio_inspect.mp4 │ │ ├── 3_sztudio_debugger.mp4 │ │ ├── 4_sztudio_url_bar.mp4 │ │ ├── 5_sztudio_logs_panel.mp4 │ │ ├── 6_sztudio_preview.mp4 │ │ ├── 7_sztudio_device_settings.mp4 │ │ ├── 8_sztudio_outline_renders.mp4 │ │ ├── 9_sztudio_network_inspector.mp4 │ │ ├── ide_chat.mp4 │ │ ├── ide_different_previews.mp4 │ │ ├── ide_element_inspector.mp4 │ │ ├── ide_inspector_hovering.mp4 │ │ ├── ide_js_sampling.mp4 │ │ ├── ide_network_inspector.mp4 │ │ ├── ide_network_inspector_new.mp4 │ │ ├── ide_react_profiler.mp4 │ │ ├── ide_react_query.mp4 │ │ ├── ide_screen_recording.mp4 │ │ ├── ide_storybook.mp4 │ │ └── placeholders │ │ ├── 1_sztudio_integrated_placeholder.webp │ │ ├── 2_sztudio_inspect_placeholder.webp │ │ ├── 3_sztudio_debugger_placeholder.webp │ │ ├── 4_sztudio_url_bar_placeholder.webp │ │ ├── 5_sztudio_logs_panel_placeholder.webp │ │ ├── 6_sztudio_preview_placeholder.webp │ │ ├── 7_sztudio_device_settings_placeholder.webp │ │ ├── 8_sztudio_outline_renders_placeholder.webp │ │ ├── 9_sztudio_network_inspector_placeholder.webp │ │ └── ide_screen_recording_placeholder.webp ├── tsconfig.json ├── vercel.json └── yarn.lock ├── radon-ide ├── index.d.ts ├── index.js └── package.json ├── react-native-ide ├── index.d.ts ├── index.js └── package.json └── vscode-extension ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode-test.js ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── LICENSE.txt ├── README.md ├── assets ├── font-icons.woff2 ├── logo.png ├── logo.svg ├── mmkv.svg ├── network.svg ├── react-query.svg ├── react.svg └── redux.svg ├── eslint.config.mjs ├── font-icons ├── README.md ├── fantasticon.config.json └── off.svg ├── lib ├── JSXRuntime │ └── react-native-78-79 │ │ ├── Readme.md │ │ └── react-jsx-dev-runtime.development.js ├── android │ ├── buildProgressEvaluation.initscript.gradle │ ├── configureReactNativeOverrides.gradle │ ├── configureReactNativeOverrides.initscript.gradle │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── facebook │ │ └── react │ │ └── packagerconnection │ │ └── PackagerConnectionSettings.java ├── babel_transformer.js ├── bippy │ ├── LICENSE │ ├── chunk-347RWTP3.js │ ├── chunk-N23WFCSF.js │ └── index.js ├── expo_dev_plugins.js ├── expo_go_download.js ├── expo_go_project_tester.js ├── expo_router_helpers.js ├── expo_router_plugin.js ├── expo_router_v2_plugin.js ├── expo_router_v5_plugin.js ├── expo_start.js ├── inspector_bridge.js ├── instrumentation.js ├── metro_config.js ├── metro_helpers.js ├── metro_reporter.js ├── network.js ├── plugins │ ├── PluginMessageBridge.js │ ├── react-query-devtools.js │ ├── redux-devtools.js │ └── third-party │ │ └── redux-devtools-expo-dev-plugin.js ├── preview.js ├── react_devtools_agent.js ├── render_outlines.js ├── rn-internals │ ├── Readme.md │ ├── rn-internals-0.73.js │ ├── rn-internals-0.74.js │ ├── rn-internals-0.75.js │ ├── rn-internals-0.76.js │ ├── rn-internals-0.77.js │ ├── rn-internals-0.78.js │ ├── rn-internals-0.79.js │ └── rn-internals.js ├── rn-renderer │ ├── react-native-74-77 │ │ ├── ReactFabric-dev.js │ │ └── ReactNativeRenderer-dev.js │ └── react-native-78-79 │ │ ├── ReactFabric-dev.js │ │ ├── ReactNativeRenderer-dev.js │ │ └── Readme.md ├── runtime.js ├── storybook_helper.js └── wrapper.js ├── media ├── create-new-device.md ├── create-new-device.mp4 ├── explore-features.md ├── explore-features.mp4 ├── open-ide-panel.md ├── open-ide-panel.mp4 ├── radon-bubble.svg ├── wait-for-project-to-build.md └── wait-for-project-to-build.mp4 ├── package-lock.json ├── package.json ├── patches └── vscode-cdp-proxy+0.2.1.patch ├── react-fake-editor-executable ├── scripts ├── build-sim-server-debug.sh ├── buildExtensionCode.mjs ├── download-sim-server-release-assets.sh ├── init-submodules-if-not-present.sh ├── install-dev-plugins.sh └── mergeThirdPartyNotices.mjs ├── src ├── Logger.ts ├── assets │ ├── README.md │ ├── index.d.ts │ ├── iphone_15_pro │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.png │ ├── iphone_16_pro │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.png │ ├── iphone_SE │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.webp │ ├── pixel_6a │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.webp │ ├── pixel_7 │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.webp │ ├── pixel_8 │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.webp │ └── pixel_9 │ │ ├── bezel.png │ │ ├── mask.png │ │ ├── screen.png │ │ └── skin.webp ├── builders │ ├── BuildAndroidProgressProcessor.ts │ ├── BuildCache.ts │ ├── BuildIOSProgressProcessor.ts │ ├── BuildManager.test.ts │ ├── BuildManager.ts │ ├── BuildProgressProcessor.ts │ ├── buildAndroid.ts │ ├── buildIOS.ts │ ├── cancelToken.ts │ ├── customBuild.ts │ ├── eas.ts │ ├── easCommand.ts │ ├── expoGo.ts │ └── utils.ts ├── chat │ ├── api.ts │ ├── history.ts │ ├── index.ts │ └── packages.ts ├── common │ ├── BuildConfig.ts │ ├── DependencyManager.ts │ ├── DeviceManager.ts │ ├── DeviceSessionsManager.ts │ ├── EasConfig.ts │ ├── LaunchConfig.ts │ ├── Project.ts │ ├── RenderOutlines.ts │ ├── WorkspaceConfig.ts │ └── utils.ts ├── connect │ ├── Connector.ts │ └── Scanner.ts ├── debugging │ ├── BreakpointsController.ts │ ├── CDPBreakpoint.ts │ ├── CDPDebugAdapter.ts │ ├── CDPProxy.ts │ ├── CDPSession.ts │ ├── DebugAdapter.ts │ ├── DebugAdapterDescriptorFactory.ts │ ├── DebugSession.ts │ ├── ProxyDebugAdapter.ts │ ├── RadonCDPProxyDelegate.ts │ ├── SourceMapsRegistry.ts │ ├── cdp.ts │ ├── cpuProfiler.ts │ ├── startDebugging.ts │ ├── templates │ │ └── getArraySlots.ts │ └── variableStore.ts ├── dependency │ └── DependencyManager.ts ├── devices │ ├── AndroidEmulatorDevice.ts │ ├── DeviceBase.ts │ ├── DeviceManager.ts │ ├── IosSimulatorDevice.ts │ └── preview.ts ├── extension.ts ├── network │ ├── App.css │ ├── App.tsx │ ├── components │ │ ├── HeadersTab.css │ │ ├── HeadersTab.tsx │ │ ├── NetworkBar.css │ │ ├── NetworkBar.tsx │ │ ├── NetworkLogDetails.css │ │ ├── NetworkLogDetails.tsx │ │ ├── NetworkRequestLog.css │ │ ├── NetworkRequestLog.tsx │ │ ├── NetworkTimeline.css │ │ ├── NetworkTimeline.tsx │ │ ├── PayloadTab.tsx │ │ ├── ResponseTab.css │ │ ├── ResponseTab.tsx │ │ ├── TimingTab.css │ │ └── TimingTab.tsx │ ├── hooks │ │ └── useNetworkTracker.tsx │ ├── index.jsx │ ├── providers │ │ └── NetworkProvider.tsx │ └── types │ │ └── network.ts ├── panels │ ├── LaunchConfigController.ts │ ├── README.md │ ├── SidepanelViewProvider.ts │ ├── Tabpanel.ts │ ├── WebviewController.ts │ ├── WorkspaceConfigController.ts │ └── webviewContentGenerator.ts ├── plugins │ ├── expo-dev-plugins │ │ ├── ExpoDevPluginWebviewProvider.ts │ │ └── expo-dev-plugins.ts │ ├── network │ │ ├── NetworkDevtoolsWebviewProvider.ts │ │ └── network-plugin.ts │ ├── react-query-devtools-plugin │ │ ├── ReactQueryDevToolsPluginWebviewProvider.ts │ │ └── react-query-devtools-plugin.ts │ ├── redux-devtools-plugin │ │ ├── ReduxDevToolsPluginWebviewProvider.ts │ │ └── redux-devtools-plugin.ts │ └── render-outlines │ │ └── render-outlines-plugin.ts ├── project │ ├── ApplicationContext.ts │ ├── DeviceSessionsManager.ts │ ├── bridge.ts │ ├── deviceSession.ts │ ├── devtools.ts │ ├── ide.ts │ ├── metro.ts │ ├── project.ts │ └── tools.ts ├── providers │ ├── DebugConfigProvider.ts │ └── PreviewCodeLensProvider.ts ├── react-devtools-profiler │ ├── App.css │ ├── ReactDevtoolsEditorProvider.ts │ └── index.jsx ├── utilities │ ├── android.ts │ ├── common.test.ts │ ├── common.ts │ ├── connectCDPAndEval.ts │ ├── diffing.ts │ ├── disposables.ts │ ├── eas.ts │ ├── expoCli.ts │ ├── extensionContext.ts │ ├── findAndSetupNewAppRootFolder.ts │ ├── focusSource.ts │ ├── getMinimumSupportedNodeVersion.ts │ ├── getNonce.ts │ ├── getUri.ts │ ├── iosRuntimes.ts │ ├── isAutoSaveEnabled.ts │ ├── launchConfiguration.ts │ ├── license.ts │ ├── openFileAtPosition.ts │ ├── packageManager.ts │ ├── platform.ts │ ├── reactNative.ts │ ├── requireNoCache.ts │ ├── retry.ts │ ├── sdkmanager.ts │ ├── simulatorServerBinary.ts │ ├── subprocess.ts │ ├── telemetry.ts │ ├── throttle.ts │ ├── utils.ts │ ├── watchProjectFiles.ts │ └── xcode.ts └── webview │ ├── App.css │ ├── App.tsx │ ├── Preview │ ├── Device │ │ ├── Device.tsx │ │ ├── DeviceFrame.tsx │ │ ├── hooks.ts │ │ └── index.ts │ ├── MjpegImg.tsx │ └── hooks.ts │ ├── components │ ├── AppRootSelect.css │ ├── AppRootSelect.tsx │ ├── Debugger.css │ ├── Debugger.tsx │ ├── DelayedFastRefreshIndicator.css │ ├── DelayedFastRefreshIndicator.tsx │ ├── DeviceRemovalConfirmation.css │ ├── DeviceRemovalConfirmation.tsx │ ├── DeviceRenameDialog.css │ ├── DeviceRenameDialog.tsx │ ├── DeviceSelect.css │ ├── DeviceSelect.tsx │ ├── DeviceSettingsDropdown.css │ ├── DeviceSettingsDropdown.tsx │ ├── DimensionsBox.css │ ├── DimensionsBox.tsx │ ├── DropdownMenuRoot.tsx │ ├── Feedback.css │ ├── Feedback.tsx │ ├── IconButtonWithOptions.css │ ├── IconButtonWithOptions.tsx │ ├── InspectDataMenu.css │ ├── InspectDataMenu.tsx │ ├── Preview.css │ ├── Preview.tsx │ ├── PreviewLoader.css │ ├── PreviewLoader.tsx │ ├── RenderOutlinesOverlay.css │ ├── RenderOutlinesOverlay.tsx │ ├── ReplayOverlay.css │ ├── ReplayOverlay.tsx │ ├── ReplayUI.css │ ├── ReplayUI.tsx │ ├── SendFeedbackItem.tsx │ ├── SettingsDropdown.tsx │ ├── ToolsDropdown.css │ ├── ToolsDropdown.tsx │ ├── UrlBar.tsx │ ├── UrlSelect.css │ ├── UrlSelect.tsx │ ├── UrlSelectItem.tsx │ ├── UrlSelectItemGroup.tsx │ ├── ZoomControls.css │ ├── ZoomControls.tsx │ ├── icons │ │ ├── CheckIcon.tsx │ │ ├── CloseGrayIcon.tsx │ │ ├── CloseIcon.tsx │ │ ├── DeviceSettingsIcon.tsx │ │ ├── DoctorIcon.tsx │ │ ├── ErrorIcon.tsx │ │ ├── Icon.css │ │ ├── RecordingIcon.tsx │ │ ├── ReplayIcon.tsx │ │ └── SmartphoneIcon.tsx │ └── shared │ │ ├── Alert.css │ │ ├── Alert.tsx │ │ ├── Anchor.tsx │ │ ├── Button.css │ │ ├── Button.tsx │ │ ├── Dropdown.css │ │ ├── IconButton.css │ │ ├── IconButton.tsx │ │ ├── Input.css │ │ ├── Input.tsx │ │ ├── KeybindingInfo.css │ │ ├── KeybindingInfo.tsx │ │ ├── Label.css │ │ ├── Label.tsx │ │ ├── Modal.css │ │ ├── Modal.tsx │ │ ├── ProgressBar.css │ │ ├── ProgressBar.tsx │ │ ├── ProgressRing.css │ │ ├── ProgressRing.tsx │ │ ├── RadioGroup.css │ │ ├── RichSelectItem.css │ │ ├── RichSelectItem.tsx │ │ ├── SearchSelect.css │ │ ├── SearchSelect.tsx │ │ ├── Select.css │ │ ├── Select.tsx │ │ ├── Slider.css │ │ ├── StartupMessage.css │ │ ├── StartupMessage.tsx │ │ ├── SwitchGroup.css │ │ ├── Textarea.css │ │ ├── Textarea.tsx │ │ ├── Tooltip.css │ │ └── Tooltip.tsx │ ├── declaration.d.ts │ ├── hooks │ ├── useBuildErrorAlert.tsx │ ├── useNativeRebuildAlert.tsx │ └── useResizableProps.tsx │ ├── index.jsx │ ├── providers │ ├── AlertProvider.tsx │ ├── DependenciesProvider.tsx │ ├── DevicesProvider.tsx │ ├── LaunchConfigProvider.tsx │ ├── ModalProvider.tsx │ ├── ProjectProvider.tsx │ ├── TelemetryProvider.tsx │ ├── UtilsProvider.tsx │ └── WorkspaceConfigProvider.tsx │ ├── styles │ └── theme.css │ ├── utilities │ ├── constants.ts │ ├── deviceContants.ts │ ├── keyMapping.js │ ├── localeList.json │ ├── rpc.ts │ └── vscode.js │ └── views │ ├── ActivateLicenseView.css │ ├── ActivateLicenseView.tsx │ ├── CreateDeviceView.css │ ├── CreateDeviceView.tsx │ ├── DeviceLocalizationView.css │ ├── DeviceLocalizationView.tsx │ ├── DeviceLocationView.css │ ├── DeviceLocationView.tsx │ ├── DiagnosticView.css │ ├── DiagnosticView.tsx │ ├── FeedbackView.css │ ├── FeedbackView.tsx │ ├── LaunchConfigurationView.css │ ├── LaunchConfigurationView.tsx │ ├── ManageDevicesView.css │ ├── ManageDevicesView.tsx │ ├── NoDeviceView.css │ ├── NoDeviceView.tsx │ ├── OpenDeepLinkView.css │ ├── OpenDeepLinkView.tsx │ ├── PreviewView.css │ ├── PreviewView.tsx │ └── View.css ├── submodules-NOTICES.json ├── third-party └── react-devtools │ ├── headless.d.ts │ ├── headless.js │ └── headless.js.map ├── tsconfig.json ├── tsconfig.test.json └── vite.config.js /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Raport a problem. 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | --- 8 | 9 | **Description** 10 | A clear and concise description of what the bug is. 11 | 12 | **Environment** 13 | 14 | - Version of currently used Radon IDE (Extensions tab -> click on Radon IDE extension -> version is located next to the extension name) 15 | - Version of React Native/Expo used in the project. 16 | - Any other versions of tools related to the problem. 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Propose a new feature. 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | --- 8 | 9 | **Description** 10 | A clear and concise description of what the problem is. 11 | 12 | **Environment** 13 | 14 | - Version of currently used Radon IDE (Extensions tab -> click on Radon IDE extension -> version is located next to the extension name) 15 | - Version of React Native/Expo used in the project. 16 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | Start by providing description for the PR: please include a summary of the changes, related issue, motivation, and context behind the change. Provide screenshots or recordings when appropriate. 2 | 3 | Fixes # (issue) 4 | 5 | ### How Has This Been Tested: 6 | 7 | Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/workflows/close-when-stale.yaml: -------------------------------------------------------------------------------- 1 | name: Check for stale issues 2 | on: 3 | schedule: 4 | - cron: '37 21 * * *' # at 21:37 every day 5 | issues: 6 | types: [edited] 7 | issue_comment: 8 | types: [created, edited] 9 | workflow_dispatch: 10 | 11 | jobs: 12 | main: 13 | if: github.repository == 'software-mansion/radon-ide' 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout Actions 17 | uses: actions/checkout@v4 18 | with: 19 | repository: 'software-mansion-labs/swmansion-bot' 20 | ref: stable 21 | 22 | - uses: actions/cache@v4 23 | with: 24 | path: '**/node_modules' 25 | key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} 26 | 27 | - name: Install Actions 28 | run: yarn install 29 | 30 | - name: Close when stale 31 | uses: ./close-when-stale 32 | with: 33 | close-when-stale-label: 'close when stale' 34 | days-to-close: 14 35 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "packages/simulator-server"] 2 | path = packages/simulator-server 3 | url = git@github.com:software-mansion-labs/simulator-server.git 4 | [submodule "packages/vscode-js-debug"] 5 | path = packages/vscode-js-debug 6 | url = git@github.com:software-mansion-labs/vscode-js-debug.git 7 | [submodule "packages/redux-devtools-expo-dev-plugin"] 8 | path = packages/redux-devtools-expo-dev-plugin 9 | url = git@github.com:software-mansion-labs/redux-devtools-expo-dev-plugin.git 10 | [submodule "packages/radon-ide-react-query-webui"] 11 | path = packages/radon-ide-react-query-webui 12 | url = git@github.com:software-mansion-labs/radon-ide-react-query-webui.git 13 | -------------------------------------------------------------------------------- /packages/docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /packages/docs/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": false, 7 | "quoteProps": "consistent", 8 | "jsxSingleQuote": false, 9 | "trailingComma": "es5", 10 | "bracketSpacing": true, 11 | "bracketSameLine": true, 12 | "arrowParens": "always" 13 | } -------------------------------------------------------------------------------- /packages/docs/README.md: -------------------------------------------------------------------------------- 1 | # Landing page 2 | 3 | This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. 4 | 5 | ### Installation 6 | 7 | ``` 8 | $ yarn 9 | ``` 10 | 11 | ### Local Development 12 | 13 | ``` 14 | $ yarn start 15 | ``` 16 | 17 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 18 | 19 | ### Build 20 | 21 | ``` 22 | $ yarn build 23 | ``` 24 | 25 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 26 | 27 | ### Deployment 28 | 29 | Using SSH: 30 | 31 | ``` 32 | $ USE_SSH=true yarn deploy 33 | ``` 34 | 35 | Not using SSH: 36 | 37 | ``` 38 | $ GIT_USER= yarn deploy 39 | ``` 40 | 41 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 42 | -------------------------------------------------------------------------------- /packages/docs/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /packages/docs/docs/_changelog/1.1.x.md: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.x" 3 | date: "2024-12-18" 4 | title: "PNPM monorepos, console upgrades, and more" 5 | --- 6 | 7 | - **Console upgrades**: log grouping, object previews, long data handling 8 | 9 | - Experimental Linux support 10 | 11 | - Support for PNPM monorepos 12 | 13 | - Better log-to-source links 14 | 15 | See v1.1.0 release notes on GitHub 16 | -------------------------------------------------------------------------------- /packages/docs/docs/_changelog/1.3.x.md: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.3.x" 3 | date: "2025-02-11" 4 | title: "Network Inspector, Redux DevTools" 5 | --- 6 | 7 | - [**Built-in Network Inspector**](/docs/features/dev-tools#network-inspector): Network panel captures and lists all requests triggered by the JavaScript code (with HXR / fetch or wrappers like Axios/Apollo etc). Images or websocket connections aren't currently supported and won't show up. 8 | 9 | 12 | 13 | - [**First-party Redux DevTools integration**](/docs/features/dev-tools#redux): If your app uses Redux, the IDE will automatically detect that, and Redux plugin will be listed in the Dev Tools menu where you can enable it. Once enabled you will be able to use the official Redux UI from within your editor panel. 14 | 15 | - The panel now matches editor theme by default 16 | 17 | - Support for React Native 0.78 18 | 19 | See v1.3.0 release notes on GitHub 20 | -------------------------------------------------------------------------------- /packages/docs/docs/_changelog/1.5.x.md: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.5.x" 3 | date: "2025-04-11" 4 | title: "Radon AI" 5 | --- 6 | 7 | - [**Radon AI Chat**](/docs/features/radon-ai): a GitHub Copilot Chat participant enhanced with up-to-date information about the React Native ecosystem. At the heart of it is our extensive React Native knowledge database, which is queried before answering your question. 8 | 9 | 12 | 13 | - **Improved EAS workflows**: Radon IDE will now display clearer build error messages and only download compatible builds from EAS by default. 14 | 15 | - **Home / App Switch buttons support**: Added options in the device settings menu that can trigger Home and AppSwitch button presses on the active device. 16 | 17 | - Improved bundle error & exception handling, including a stack trace with links to source files 18 | 19 | - Support for React Native 0.79 20 | 21 | See v1.5.0 release notes on GitHub 22 | -------------------------------------------------------------------------------- /packages/docs/docs/features/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Features", 3 | "position": 2, 4 | "link": { 5 | "type": "generated-index" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/docs/docs/features/router-integration.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: router-integration 3 | title: Router integration 4 | sidebar_position: 3 5 | --- 6 | 7 | The Radon IDE integrates with your deep-linked application allowing you to jump around the navigation structure. 8 | The extension automatically detects the changes in the navigation state and keeps track of the visited routes. 9 | 10 | Radon IDE router integration supports both Expo Router and React Navigation projects. 11 | 12 | 15 | 16 | ## Using the integration 17 | 18 | The router integration consists of 3 features: 19 | 20 | 21 | 22 | 1. **Back button** - goes to the previous URL route in the navigation history. 23 | 2. **Go to main screen button** - navigates to the `/` route. 24 | 3. **URL select** - a drop-down that allows to quickly visit recently used and all visited navigation URLs. Clicking on one of the displayed URLs will take you to that particular screen. 25 | 26 | 27 | -------------------------------------------------------------------------------- /packages/docs/docs/features/storybook-integration.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: storybook-integration 3 | title: Storybook integration 4 | sidebar_position: 9 5 | --- 6 | 7 | Radon IDE seamlessly integrates with Storybook. The extension automatically detects Storybook stories and provides a quick access to run them in the device preview. 8 | 9 | 10 | 11 | ## Setting up Storybook 12 | 13 | For setting up Storybook in your application please consult the [storybookjs/react-native repository README](https://github.com/storybookjs/react-native/blob/next/README.md). 14 | 15 | ## Selecting the story 16 | 17 | The extension displays a `Select story` button over each story. Clicking this button will launch the chosen story in isolation. 18 | 19 | 22 | 23 | ## Closing the story 24 | 25 | You exit the story by using the `Go to main screen` button in the top-left corner of the panel or by reloading the application. 26 | -------------------------------------------------------------------------------- /packages/docs/docs/getting-started/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Getting started", 3 | "position": 1, 4 | "link": { 5 | "type": "generated-index" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/docs/docs/getting-started/changelog.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | id: changelog 3 | title: Changelog 4 | sidebar_position: 7 5 | --- 6 | 7 | import ChangelogScreen from "@site/src/components/Changelog"; 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/docs/docs/guides/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Guides", 3 | "position": 3, 4 | "link": { 5 | "type": "generated-index" 6 | } 7 | } -------------------------------------------------------------------------------- /packages/docs/sidebars.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Creating a sidebar enables you to: 3 | - create an ordered group of docs 4 | - render a sidebar for each doc of that group 5 | - provide next/previous navigation 6 | 7 | The sidebars can be generated from the filesystem, or explicitly defined here. 8 | 9 | Create as many sidebars as you want. 10 | */ 11 | 12 | // @ts-check 13 | 14 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ 15 | const sidebars = { 16 | // By default, Docusaurus generates a sidebar from the docs folder structure 17 | tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], 18 | 19 | // But you can create a sidebar manually 20 | /* 21 | tutorialSidebar: [ 22 | 'intro', 23 | 'hello', 24 | { 25 | type: 'category', 26 | label: 'Tutorial', 27 | items: ['tutorial-basics/create-a-document'], 28 | }, 29 | ], 30 | */ 31 | }; 32 | 33 | module.exports = sidebars; 34 | -------------------------------------------------------------------------------- /packages/docs/src/components/Button/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | 4 | import ArrowRight from "@site/static/img/arrow-right-hero.svg"; 5 | import clsx from "clsx"; 6 | 7 | interface ButtonProps { 8 | children: string; 9 | href?: string; 10 | target?: "_blank" | "_parent" | "_self" | "_top"; 11 | disabled?: boolean; 12 | tooltip?: string; 13 | onClick?: () => void; 14 | } 15 | 16 | function Button({ children, href, target = "_self", onClick, disabled, tooltip }: ButtonProps) { 17 | return ( 18 | 24 |
25 | {children} 26 | {!disabled && ( 27 |
28 | 29 |
30 | )} 31 |
32 |
33 | ); 34 | } 35 | 36 | export default Button; 37 | -------------------------------------------------------------------------------- /packages/docs/src/components/ChainIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function LinkIcon({ width, height }) { 4 | return ( 5 | 11 | 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /packages/docs/src/components/CloseIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | export default function CloseIcon(props) { 3 | return ( 4 | 11 | 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /packages/docs/src/components/Compatibility/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | 4 | export function Yes() { 5 | return
yes
; 6 | } 7 | 8 | export function No() { 9 | return
no
; 10 | } 11 | 12 | export function Maybe({ label = "Maybe" }: { label: string }) { 13 | return
{label}
; 14 | } 15 | 16 | interface VersionProps { 17 | version: string; 18 | } 19 | 20 | export function Version({ version }: VersionProps) { 21 | return
{version}
; 22 | } 23 | 24 | export function Spacer() { 25 | return
; 26 | } 27 | -------------------------------------------------------------------------------- /packages/docs/src/components/Compatibility/styles.module.css: -------------------------------------------------------------------------------- 1 | .supported { 2 | color: var(--swm-compatibility-text-color); 3 | background-color: var(--swm-compatibility-supported-background); 4 | text-align: center; 5 | text-transform: capitalize; 6 | padding: 12px; 7 | } 8 | 9 | .notSupported { 10 | color: var(--swm-compatibility-text-color); 11 | background-color: var(--swm-compatibility-not-supported-background); 12 | text-align: center; 13 | text-transform: capitalize; 14 | padding: 12px; 15 | } 16 | 17 | .maybe { 18 | color: var(--swm-compatibility-text-color); 19 | background-color: var(--swm-compatibility-maybe-background); 20 | text-align: center; 21 | text-transform: capitalize; 22 | padding: 12px; 23 | } 24 | 25 | .version { 26 | font-weight: bold; 27 | text-align: center; 28 | padding: 12px; 29 | } 30 | 31 | .spacer { 32 | padding-top: 10px; 33 | } 34 | -------------------------------------------------------------------------------- /packages/docs/src/components/Disclaimer/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | 4 | const Disclaimer = () => { 5 | return ( 6 |
7 |

8 | Note: Radon IDE is not a ready product (yet). Currently it's in beta stage 9 | and works with VSCode and Cursor on macOS and Windows. We are hoping that together with the 10 | community we will be able to get there soon. 11 |

12 |
13 | ); 14 | }; 15 | 16 | export default Disclaimer; 17 | -------------------------------------------------------------------------------- /packages/docs/src/components/Disclaimer/styles.module.css: -------------------------------------------------------------------------------- 1 | .disclaimerContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 2rem; 5 | align-items: center; 6 | margin-top: 5rem; 7 | } 8 | 9 | .disclaimerContainer p { 10 | margin: 0; 11 | font-size: 20px; 12 | } 13 | 14 | .disclaimerHeading { 15 | font-size: 32px; 16 | font-weight: 700; 17 | } 18 | 19 | .elipse { 20 | left: 50rem; 21 | width: 175px; 22 | height: 175px; 23 | bottom: 25%; 24 | } 25 | 26 | @media (max-width: 996px) { 27 | .elipse { 28 | left: 6rem; 29 | bottom: 15%; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /packages/docs/src/components/Elipse/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' 3 | import SmallElipse from '@site/src/components/Elipse/SmallElipseIcon' 4 | import BigElipse from '@site/src/components/Elipse/BigElipseIcon' 5 | 6 | interface Props { 7 | isSmall?: boolean 8 | className?: string 9 | size?: number 10 | } 11 | 12 | const Elipse = ({ isSmall = false, className, size }: Props) => { 13 | const currentComponent = isSmall ? ( 14 | 15 | ) : ( 16 | 17 | ) 18 | return <>{ExecutionEnvironment.canUseViewport && currentComponent} 19 | } 20 | 21 | export default Elipse 22 | -------------------------------------------------------------------------------- /packages/docs/src/components/Elipse/styles.module.css: -------------------------------------------------------------------------------- 1 | .elipse { 2 | position: absolute; 3 | z-index: -1; 4 | } 5 | -------------------------------------------------------------------------------- /packages/docs/src/components/FaqList/ChevronDownIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | interface IconProps { 4 | className?: string 5 | color?: string 6 | size?: number 7 | } 8 | 9 | const ChevronDownIcon = ({ 10 | className, 11 | color = 'currentColor', 12 | size = 24, 13 | }: IconProps) => ( 14 | 22 | 29 | 30 | ) 31 | 32 | export default ChevronDownIcon 33 | -------------------------------------------------------------------------------- /packages/docs/src/components/FaqList/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { type ActiveItemProps } from './FaqItem' 3 | import FaqItem from './FaqItem' 4 | 5 | interface Props { 6 | faqs: { 7 | topic: string 8 | answer: string 9 | }[] 10 | } 11 | 12 | const FaqList = ({ faqs }: Props) => { 13 | const [activeItem, setActiveItem] = useState({ 14 | index: null, 15 | height: 0, 16 | }) 17 | 18 | return ( 19 | <> 20 | {faqs.map((faq, index) => ( 21 | 29 | ))} 30 | 31 | ) 32 | } 33 | 34 | export default FaqList 35 | -------------------------------------------------------------------------------- /packages/docs/src/components/Hero/HeroElipse/ElipseIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import useScreenSize from '@site/src/hooks/useScreenSize' 3 | 4 | function ElipseIcon() { 5 | const { windowWidth } = useScreenSize() 6 | 7 | return ( 8 | 15 | 22 | 23 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | ) 38 | } 39 | 40 | export default ElipseIcon 41 | -------------------------------------------------------------------------------- /packages/docs/src/components/Hero/HeroElipse/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styles from './styles.module.css' 3 | import ElipseIcon from '@site/src/components/Hero/HeroElipse/ElipseIcon' 4 | 5 | const HeroElipse = () => { 6 | return ( 7 |
8 | 9 |
10 | ) 11 | } 12 | 13 | export default HeroElipse 14 | -------------------------------------------------------------------------------- /packages/docs/src/components/Hero/HeroElipse/styles.module.css: -------------------------------------------------------------------------------- 1 | .elipseHero { 2 | position: absolute; 3 | z-index: 5; 4 | right: -8%; 5 | top: -2%; 6 | } 7 | 8 | @media (max-width: 996px) { 9 | .elipseHero { 10 | right: 0%; 11 | top: -5%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/docs/src/components/Hero/LandingBackground/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; 3 | import HeroElipse from "@site/src/components/Hero/HeroElipse"; 4 | import styles from "./styles.module.css"; 5 | 6 | const LandingBackground = () => { 7 | return ( 8 |
9 | {ExecutionEnvironment.canUseViewport && } 10 |
11 | ); 12 | }; 13 | 14 | export default LandingBackground; 15 | -------------------------------------------------------------------------------- /packages/docs/src/components/Hero/LandingBackground/styles.module.css: -------------------------------------------------------------------------------- 1 | .heroBackground { 2 | position: absolute; 3 | top: 0; 4 | right: 0; 5 | 6 | background-color: var(--swm-white); 7 | width: 100%; 8 | height: 130vh; 9 | min-height: 70vw; 10 | overflow: hidden; 11 | z-index: -20; 12 | } 13 | -------------------------------------------------------------------------------- /packages/docs/src/components/LearnMore/LearnMoreHero/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | import HomepageButton from "@site/src/components/HomepageButton"; 4 | import { ButtonStyling, BorderStyling } from "@site/src/components/HomepageButton"; 5 | import Elipse from "@site/src/components/Elipse"; 6 | 7 | const LearnMoreHero = () => { 8 | return ( 9 |
10 |
11 | 12 | 13 |
14 |
15 |

Learn more about Software Mansion

16 | 23 |
24 |
25 | ); 26 | }; 27 | 28 | export default LearnMoreHero; 29 | -------------------------------------------------------------------------------- /packages/docs/src/components/LinkButton/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | 4 | import ArrowRight from "@site/static/img/arrow-right-hero.svg"; 5 | 6 | interface Props { 7 | title: string; 8 | href: string; 9 | onClick?: () => void; 10 | } 11 | 12 | export default function LinkButton({ title, href, onClick }: Props) { 13 | return ( 14 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /packages/docs/src/components/LinkButton/styles.module.css: -------------------------------------------------------------------------------- 1 | .linkButton { 2 | display: flex; 3 | align-items: center; 4 | gap: 0.5rem; 5 | font-weight: 500; 6 | text-decoration-line: underline; 7 | text-underline-offset: 5px; 8 | font-size: 18px; 9 | } 10 | 11 | .linkButton svg { 12 | transition: transform 0.3s; 13 | } 14 | 15 | .linkButton:hover svg { 16 | transform: translateX(5px); 17 | } 18 | 19 | .linkButtonArrow { 20 | stroke: var(--swm-landing-button-navy); 21 | } 22 | 23 | .linkButtonWrapper { 24 | display: flex; 25 | max-height: 32px; 26 | } 27 | -------------------------------------------------------------------------------- /packages/docs/src/components/Motivation/styles.module.css: -------------------------------------------------------------------------------- 1 | .motivation { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 3rem 0; 5 | } 6 | 7 | .heading { 8 | font-size: var(--swm-h2-font-size); 9 | font-weight: 700; 10 | margin-bottom: 3rem; 11 | } 12 | 13 | .paragraph { 14 | font-size: 18px; 15 | font-weight: 400; 16 | } 17 | 18 | .paragraph a { 19 | text-decoration: underline; 20 | } 21 | 22 | .elipseContainer { 23 | position: relative; 24 | } 25 | 26 | .elipse { 27 | left: -8%; 28 | bottom: 2rem; 29 | } 30 | 31 | .swmLogo { 32 | height: 80px; 33 | margin-top: 2rem; 34 | } 35 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/CompatibilityInfo/styles.module.css: -------------------------------------------------------------------------------- 1 | .compatibilityInfoWrapper { 2 | display: flex; 3 | gap: 24px; 4 | padding: 24px; 5 | background-color: var(--swm-off-white); 6 | align-items: center; 7 | justify-content: space-between; 8 | text-wrap: balance; 9 | } 10 | 11 | .link { 12 | text-decoration: underline; 13 | } 14 | 15 | .compatibilityInfo { 16 | margin: 0; 17 | font-size: 18px; 18 | } 19 | 20 | @media (max-width: 768px) { 21 | .compatibilityInfoWrapper { 22 | flex-direction: column; 23 | gap: 16px; 24 | padding: 16px; 25 | } 26 | 27 | .compatibilityInfo { 28 | font-size: 16px; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/PricingCard/SpecialOffer/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | import clsx from "clsx"; 4 | 5 | function SpecialOffer() { 6 | return ( 7 |
8 |
Recommended
9 |
10 | ); 11 | } 12 | 13 | export default SpecialOffer; 14 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/PricingCard/SpecialOffer/styles.module.css: -------------------------------------------------------------------------------- 1 | .plan__special_offer__wrapper { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | position: relative; 6 | top: -25px; 7 | } 8 | 9 | .plan__special_offer { 10 | color: var(--swm-red-light-80); 11 | position: absolute; 12 | text-align: center; 13 | background-color: var(--swm-red-light-20); 14 | border-radius: 8px; 15 | padding: 0 8px; 16 | font-weight: bold; 17 | font-size: 14px; 18 | text-transform: uppercase; 19 | } 20 | 21 | .plan__highlight { 22 | animation: highlight 2s infinite alternate ease-in-out; 23 | } 24 | 25 | @keyframes highlight { 26 | 0% { 27 | box-shadow: 0px 0px 2px var(--swm-red-light-100); 28 | } 29 | 100% { 30 | box-shadow: 0px 0px 6px var(--swm-red-light-100); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/PricingCard/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | import clsx from "clsx"; 4 | 5 | interface PricingCardProps { 6 | children: React.ReactNode; 7 | bold?: boolean; 8 | } 9 | 10 | function PricingCard({ children, bold }: PricingCardProps) { 11 | return ( 12 |
  • 13 |
    14 | {children} 15 |
    16 |
  • 17 | ); 18 | } 19 | 20 | export default PricingCard; 21 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/PricingCard/pricing.module.css: -------------------------------------------------------------------------------- 1 | .plan__name { 2 | font-size: 18px; 3 | font-weight: bold; 4 | text-transform: uppercase; 5 | margin-bottom: 8px; 6 | color: var(--swm-green-light-100); 7 | display: flex; 8 | gap: 16px; 9 | } 10 | 11 | .plan__price { 12 | font-weight: 700; 13 | margin-top: 8px; 14 | font-size: 36px; 15 | margin-bottom: 0px; 16 | } 17 | 18 | .plan__price .plan__price_second_line { 19 | font-size: 16px; 20 | font-weight: 400; 21 | } 22 | .plan__price .plan__price_strikethrough { 23 | text-decoration: line-through; 24 | color: var(--swm-navy-light-60); 25 | font-weight: 400; 26 | } 27 | 28 | .plan__features { 29 | margin: 8px 0 24px 0; 30 | } 31 | 32 | .plan__spacer { 33 | flex-grow: 1; 34 | } 35 | 36 | .plan__tagline { 37 | margin-top: 8px; 38 | margin-bottom: 32px; 39 | font-size: 18px; 40 | color: var(--swm-navy-light-60); 41 | } 42 | 43 | .plan__tagline a { 44 | color: var(--swm-navy-light-60); 45 | text-decoration: underline; 46 | } 47 | 48 | .plan__currency { 49 | font-weight: 400; 50 | } 51 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/PricingCard/styles.module.css: -------------------------------------------------------------------------------- 1 | .item { 2 | display: block; 3 | height: 100%; 4 | max-width: 420px; 5 | } 6 | 7 | .plan__container { 8 | border: 1px solid var(--swm-border); 9 | height: 100%; 10 | padding: 24px; 11 | display: flex; 12 | flex-direction: column; 13 | background-color: var(--swm-off-background); 14 | } 15 | 16 | .plan__container__bold { 17 | border: 2px solid var(--swm-border); 18 | } 19 | 20 | .plan__container ul { 21 | padding-left: 24px; 22 | } 23 | -------------------------------------------------------------------------------- /packages/docs/src/components/Pricing/styles.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 24px; 5 | } 6 | 7 | .headingLabel { 8 | margin-top: 60px; 9 | text-align: center; 10 | text-wrap: balance; 11 | } 12 | 13 | .subheadlingLabel { 14 | text-align: center; 15 | font-weight: normal; 16 | text-wrap: balance; 17 | margin-bottom: 20px; 18 | } 19 | 20 | .highlight { 21 | text-decoration: underline; 22 | } 23 | 24 | .wrapper { 25 | margin: 0 auto; 26 | max-width: 70%; 27 | } 28 | 29 | .disclaimer { 30 | margin: 0; 31 | margin-top: 36px; 32 | } 33 | 34 | @media (max-width: 430px) { 35 | .wrapper { 36 | max-width: 100%; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /packages/docs/src/components/SecondaryButton/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./styles.module.css"; 3 | 4 | interface Props { 5 | title: string; 6 | onClick?: () => void; 7 | } 8 | 9 | export default function SecondaryButton({ title, onClick }: Props) { 10 | return ( 11 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /packages/docs/src/components/SecondaryButton/styles.module.css: -------------------------------------------------------------------------------- 1 | .secondaryButton { 2 | height: 60px; 3 | padding: 1rem 1.5rem; 4 | 5 | font-weight: 500; 6 | font-size: 20px; 7 | 8 | cursor: pointer; 9 | 10 | display: flex; 11 | gap: 1rem; 12 | align-items: center; 13 | justify-content: center; 14 | 15 | text-wrap: balance; 16 | border: 1px solid var(--swm-navy-light-100); 17 | background-color: transparent; 18 | color: var(--swm-navy-light-100); 19 | transition: all 0.3s; 20 | } 21 | 22 | .secondaryButton:hover { 23 | background-color: var(--swm-navy-light-100); 24 | color: var(--swm-white); 25 | } 26 | 27 | @media (max-width: 996px) { 28 | .secondaryButton { 29 | width: 100%; 30 | } 31 | } 32 | 33 | @media (max-width: 768px) { 34 | .secondaryButton { 35 | height: 100%; 36 | font-size: 18px; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /packages/docs/src/components/Sections/Installation/InstallationStep/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx' 3 | import styles from './styles.module.css' 4 | 5 | interface StepImage { 6 | src?: string 7 | alt: string 8 | } 9 | 10 | interface Props { 11 | name: string 12 | body: string 13 | idx: number 14 | image: StepImage 15 | config: { 16 | flexDirection: string 17 | borderWidth: string 18 | borderColor: string 19 | } 20 | } 21 | 22 | const InstallationStep = ({ name, body, image, idx, config }: Props) => { 23 | return ( 24 | <> 25 |
    26 | {image.alt} 31 |
    32 |
    33 |

    STEP {idx}

    34 |

    {name}

    35 |

    {body}

    36 |
    37 | 38 | ) 39 | } 40 | 41 | export default InstallationStep 42 | -------------------------------------------------------------------------------- /packages/docs/src/components/Sections/Installation/InstallationStep/styles.module.css: -------------------------------------------------------------------------------- 1 | .image { 2 | display: flex; 3 | justify-content: center; 4 | } 5 | 6 | .image img { 7 | width: 100%; 8 | } 9 | 10 | .instruction { 11 | display: flex; 12 | flex-direction: column; 13 | flex: 1; 14 | margin-bottom: 1.875rem; 15 | } 16 | 17 | .stepName { 18 | font-size: 24px; 19 | font-weight: 700; 20 | margin-bottom: 0.5rem; 21 | line-height: 36px; 22 | } 23 | 24 | .stepBody { 25 | font-size: 20px; 26 | margin: 0; 27 | } 28 | 29 | .stepNumber { 30 | font-size: 16px; 31 | font-weight: 400; 32 | margin-bottom: 0; 33 | } 34 | 35 | @media (max-width: 996px) { 36 | .instruction { 37 | margin-bottom: 0.5rem; 38 | } 39 | .image img { 40 | border-width: 1.5rem; 41 | } 42 | } 43 | 44 | @media (max-width: 430px) { 45 | .image img { 46 | border-width: 1rem; 47 | } 48 | .stepBody { 49 | font-size: 18px; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /packages/docs/src/components/Sections/Testimonials/TestimonialItem/styles.module.css: -------------------------------------------------------------------------------- 1 | .testimonial { 2 | display: block; 3 | padding: 24px; 4 | background-color: var(--swm-off-white); 5 | } 6 | 7 | .testimonial + .testimonial { 8 | margin-top: 1rem; 9 | } 10 | 11 | .testimonial:hover { 12 | background-color: var(--swm-navy-light-10); 13 | text-decoration: none; 14 | } 15 | 16 | .testimonialAvatar { 17 | width: 64px; 18 | height: 64px; 19 | border-radius: 50%; 20 | margin-bottom: 20px; 21 | } 22 | 23 | .testimonialAuthor { 24 | display: flex; 25 | align-items: center; 26 | justify-content: space-between; 27 | width: 100%; 28 | font-weight: bold; 29 | font-size: 18px; 30 | } 31 | 32 | .authorWrapper { 33 | display: flex; 34 | flex-direction: column; 35 | width: 100%; 36 | } 37 | 38 | .testimonialAuthor { 39 | margin-bottom: 0; 40 | } 41 | 42 | .testimonialHandle { 43 | color: var(--swm-navy-light-60); 44 | } 45 | 46 | .row { 47 | display: flex; 48 | gap: 8px; 49 | } 50 | 51 | .icon { 52 | width: 16px; 53 | height: 16px; 54 | } 55 | -------------------------------------------------------------------------------- /packages/docs/src/components/Sections/Testimonials/styles.module.css: -------------------------------------------------------------------------------- 1 | .testimonialsContainer { 2 | columns: 20rem; 3 | gap: 24px; 4 | counter-reset: grid; 5 | } 6 | 7 | .testimonialsHeading { 8 | margin-bottom: 32px; 9 | } 10 | -------------------------------------------------------------------------------- /packages/docs/src/components/Sections/configStyles.module.css: -------------------------------------------------------------------------------- 1 | .itemColumn { 2 | flex-direction: column; 3 | } 4 | 5 | .itemRow { 6 | flex-direction: row; 7 | } 8 | 9 | .itemRowReversed { 10 | flex-direction: row-reverse; 11 | } 12 | 13 | .itemRowBorder { 14 | border-width: 1.5rem; 15 | } 16 | 17 | .itemColumnBorder { 18 | border-width: 2.75rem 2.5rem; 19 | } 20 | -------------------------------------------------------------------------------- /packages/docs/src/components/SidebarLabel/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from './styles.module.css'; 3 | 4 | interface Props { 5 | type: 'new' | 'experimental'; 6 | } 7 | 8 | export default function SidebarLabel({ type }: Props) { 9 | return ( 10 |
    14 | {type} 15 |
    16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /packages/docs/src/components/SidebarLabel/styles.module.css: -------------------------------------------------------------------------------- 1 | .badge { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | border: 1px solid transparent; 6 | border-radius: 8px; 7 | font-size: 14px; 8 | font-weight: 500; 9 | padding: 0.125rem 0.375rem; 10 | white-space: nowrap; 11 | margin: 0 0.25rem; 12 | text-transform: capitalize; 13 | } 14 | 15 | .new { 16 | color: var(--swm-sidebar-label-text-new); 17 | background-color: var(--swm-sidebar-label-background-new); 18 | } 19 | 20 | .experimental { 21 | color: var(--swm-sidebar-label-text-experimental); 22 | background-color: var(--swm-sidebar-label-background-experimental); 23 | } 24 | -------------------------------------------------------------------------------- /packages/docs/src/css/custom.css: -------------------------------------------------------------------------------- 1 | @import "colors.css"; 2 | @import "typography.css"; 3 | @import "overrides.css"; 4 | @import "media.css"; -------------------------------------------------------------------------------- /packages/docs/src/css/media.css: -------------------------------------------------------------------------------- 1 | .markdown img, 2 | .markdown video { 3 | display: block; 4 | margin: 0 auto; 5 | } 6 | 7 | .markdown img + p { 8 | margin-top: 48px; 9 | } 10 | 11 | .markdown video { 12 | max-width: 100%; 13 | } 14 | -------------------------------------------------------------------------------- /packages/docs/src/hooks/usePageType.tsx: -------------------------------------------------------------------------------- 1 | import { useLocation } from '@docusaurus/router'; 2 | import useBaseUrl from '@docusaurus/useBaseUrl'; 3 | 4 | const usePageType = () => { 5 | const location = useLocation(); 6 | const baseUrl = useBaseUrl('/'); 7 | 8 | return { 9 | isDocumentation: location.pathname.startsWith(`${baseUrl}docs`), 10 | isLanding: location.pathname === baseUrl, 11 | }; 12 | }; 13 | 14 | export default usePageType; 15 | -------------------------------------------------------------------------------- /packages/docs/src/hooks/useScreenSize.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | 3 | /* 4 | * Caution - read before use! 5 | * As this hook uses innerWidth prop, which belongs to the window object, 6 | * it requires to use the viewport. Thus, building the production build of the 7 | * application may fail, as the Docusaurus is using SSR to serve it. 8 | * Remember to verify if user can use the viewport by using 9 | * `ExecutionEnvironment.canUseViewport` method, `` component or 10 | * `useIsBrowser` hook. 11 | */ 12 | const useScreenSize = () => { 13 | const [windowWidth, setWindowWidth] = useState(window.innerWidth); 14 | 15 | useEffect(() => { 16 | const handleWindowResize = () => { 17 | setWindowWidth(window.innerWidth); 18 | }; 19 | 20 | window.addEventListener('resize', handleWindowResize); 21 | 22 | return () => { 23 | window.removeEventListener('resize', handleWindowResize); 24 | }; 25 | }, []); 26 | 27 | return { 28 | windowWidth, 29 | }; 30 | }; 31 | 32 | export default useScreenSize; 33 | -------------------------------------------------------------------------------- /packages/docs/src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | .container { 7 | width: 60%; 8 | margin: 0 auto; 9 | display: flex; 10 | flex-direction: column; 11 | gap: 7.5rem; 12 | margin-bottom: 5rem; 13 | } 14 | 15 | .preventfulContainer { 16 | overflow: hidden; 17 | } 18 | 19 | .heroBanner { 20 | padding: 4rem 0; 21 | text-align: center; 22 | position: relative; 23 | overflow: hidden; 24 | } 25 | 26 | .buttons { 27 | display: flex; 28 | align-items: center; 29 | justify-content: center; 30 | } 31 | 32 | @media (max-width: 1920px) { 33 | .container { 34 | width: 75%; 35 | } 36 | } 37 | 38 | @media (max-width: 996px) { 39 | .container { 40 | width: 85%; 41 | gap: 5rem; 42 | } 43 | .heroBanner { 44 | padding: 2rem; 45 | } 46 | } 47 | 48 | @media (max-width: 430px) { 49 | .container { 50 | width: 90%; 51 | gap: 3rem; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /packages/docs/src/pages/legal/dpa.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 60%; 3 | margin: 0 auto; 4 | display: flex; 5 | flex-direction: column; 6 | align-items: center; 7 | gap: 1.5rem; 8 | } 9 | 10 | .container p { 11 | text-wrap: balance; 12 | max-width: 600px; 13 | } 14 | 15 | .link { 16 | text-decoration: underline; 17 | } 18 | 19 | .buttonWrapper { 20 | min-width: 200px; 21 | } 22 | 23 | @media (max-width: 1920px) { 24 | .container { 25 | width: 65%; 26 | } 27 | } 28 | 29 | @media (max-width: 1440px) { 30 | .container { 31 | width: 75%; 32 | } 33 | } 34 | 35 | @media (max-width: 996px) { 36 | .container { 37 | width: 85%; 38 | } 39 | } 40 | 41 | @media (max-width: 430px) { 42 | .container { 43 | width: 90%; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /packages/docs/src/pages/legal/index.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 60%; 3 | margin: 0 auto; 4 | display: flex; 5 | flex-direction: column; 6 | gap: 1.5rem; 7 | } 8 | 9 | .preventfulContainer { 10 | overflow: hidden; 11 | } 12 | 13 | .card { 14 | display: flex; 15 | flex-direction: row; 16 | justify-content: space-between; 17 | align-items: flex-end; 18 | gap: 1rem; 19 | padding: 2rem; 20 | border: 2px solid var(--swm-navy-light-40); 21 | } 22 | 23 | .card div { 24 | font-size: 20px; 25 | } 26 | .card .button { 27 | text-decoration: underline; 28 | } 29 | 30 | @media (max-width: 1920px) { 31 | .container { 32 | width: 65%; 33 | } 34 | } 35 | 36 | @media (max-width: 1440px) { 37 | .container { 38 | width: 75%; 39 | } 40 | } 41 | 42 | @media (max-width: 996px) { 43 | .container { 44 | width: 85%; 45 | } 46 | } 47 | 48 | @media (max-width: 430px) { 49 | .container { 50 | width: 90%; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /packages/docs/src/pages/pricing.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 60%; 3 | margin: 0 auto; 4 | display: flex; 5 | flex-direction: column; 6 | gap: 5rem; 7 | margin-bottom: 5rem; 8 | } 9 | 10 | .preventfulContainer { 11 | overflow: hidden; 12 | } 13 | 14 | @media (max-width: 1920px) { 15 | .container { 16 | width: 65%; 17 | } 18 | } 19 | 20 | @media (max-width: 1440px) { 21 | .container { 22 | width: 75%; 23 | } 24 | } 25 | 26 | @media (max-width: 996px) { 27 | .container { 28 | width: 85%; 29 | } 30 | } 31 | 32 | @media (max-width: 430px) { 33 | .container { 34 | width: 90%; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /packages/docs/src/pages/pricing.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Layout from "@theme/Layout"; 3 | 4 | import styles from "./pricing.module.css"; 5 | import PricingScreen from "../components/Pricing"; 6 | import LearnMoreFooter from "../components/LearnMore/LearnMoreFooter"; 7 | 8 | export default function Pricing(): JSX.Element { 9 | return ( 10 | 13 |
    14 |
    15 | 16 | 17 |
    18 |
    19 |
    20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /packages/docs/src/plugins/changelog/index.js: -------------------------------------------------------------------------------- 1 | const { globSync } = require("glob"); 2 | const path = require("path"); 3 | const fs = require("fs"); 4 | const fm = require("front-matter"); 5 | 6 | module.exports = function (context, options) { 7 | return { 8 | name: "changelog-plugin", 9 | async loadContent() { 10 | // load mdx files from ./docs/_changelog/ 11 | const dirPath = path.resolve(__dirname, "../../../docs/_changelog"); 12 | const changelogFiles = globSync(`${dirPath}/*.{md,mdx}`); 13 | // read each file and parse it 14 | const fileData = changelogFiles.map((filePath) => { 15 | return fs.readFileSync(filePath, "utf-8"); 16 | }); 17 | // parse front matter 18 | const parsedData = fileData.map((file) => { 19 | const { attributes, body } = fm(file); 20 | return { 21 | ...attributes, 22 | content: body, 23 | }; 24 | }); 25 | return parsedData; 26 | }, 27 | async contentLoaded({ content, actions }) { 28 | const { setGlobalData } = actions; 29 | setGlobalData({ changelog: content }); 30 | }, 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /packages/docs/src/remark/auto-num.js: -------------------------------------------------------------------------------- 1 | const { visit } = require("unist-util-visit"); 2 | 3 | const plugin = (options) => { 4 | const transformer = async (ast) => { 5 | let number = 1; 6 | visit(ast, "heading", (node) => { 7 | if (node.children.length > 0) { 8 | node.children.forEach((child) => { 9 | if (child.value && child.value.includes("-sec-num-")) { 10 | child.value = child.value.replace("-sec-num-", `${number}.`); 11 | number++; 12 | } 13 | }); 14 | } 15 | }); 16 | }; 17 | return transformer; 18 | }; 19 | 20 | module.exports = plugin; 21 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Admonition/index.js: -------------------------------------------------------------------------------- 1 | import { Admonition } from "@swmansion/t-rex-ui"; 2 | 3 | export default Admonition; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/DocCard/index.js: -------------------------------------------------------------------------------- 1 | import { DocCard } from "@swmansion/t-rex-ui"; 2 | 3 | export default DocCard; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/DocItem/Metadata/index.js: -------------------------------------------------------------------------------- 1 | import { DocItemMetadata } from "@swmansion/t-rex-ui"; 2 | 3 | export default DocItemMetadata; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/DocItem/TOC/Mobile/index.js: -------------------------------------------------------------------------------- 1 | import { DocItemTOCMobile } from "@swmansion/t-rex-ui"; 2 | 3 | export default DocItemTOCMobile; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/DocSidebar/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import useBaseUrl from "@docusaurus/useBaseUrl"; 3 | import { DocSidebar } from "@swmansion/t-rex-ui"; 4 | 5 | export default function DocSidebarWrapper(props) { 6 | const heroImages = { 7 | logo: useBaseUrl("/img/logo.svg"), 8 | }; 9 | return ; 10 | } 11 | -------------------------------------------------------------------------------- /packages/docs/src/theme/DocSidebarItem/index.js: -------------------------------------------------------------------------------- 1 | import { DocSidebarItem } from "@swmansion/t-rex-ui"; 2 | 3 | export default DocSidebarItem; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/DocSidebarItems/index.js: -------------------------------------------------------------------------------- 1 | import { DocSidebarItems } from "@swmansion/t-rex-ui"; 2 | 3 | export default DocSidebarItems; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Footer/index.js: -------------------------------------------------------------------------------- 1 | import { Footer } from "@swmansion/t-rex-ui"; 2 | 3 | export default Footer; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Logo/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import LogoStyling from "@site/src/theme/Logo/LogoStyling"; 3 | import useBaseUrl from "@docusaurus/useBaseUrl"; 4 | import styles from "./styles.module.css"; 5 | 6 | export default function LogoWrapper(props) { 7 | const heroImages = { 8 | logo: useBaseUrl("/img/logo.svg"), 9 | }; 10 | 11 | return ( 12 |
    13 | 18 |
    19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /packages/docs/src/theme/MDXComponents/Details.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import DetailsStyling from "@site/src/theme/MDXComponents/DetailsStyling"; 3 | const MDXDetails = (props) => { 4 | const items = React.Children.toArray(props.children); 5 | // Split summary item from the rest to pass it as a separate prop to the 6 | // Details theme component 7 | const summary = items.find((item) => React.isValidElement(item) && item.type === "summary"); 8 | 9 | const children = <>{items.filter((item) => item !== summary)}; 10 | return ( 11 | 12 | {children} 13 | 14 | ); 15 | }; 16 | 17 | export default MDXDetails; 18 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Navbar/index.js: -------------------------------------------------------------------------------- 1 | import useBaseUrl from "@docusaurus/useBaseUrl"; 2 | import React from "react"; 3 | import { Navbar } from "@swmansion/t-rex-ui"; 4 | import { Analytics } from "@vercel/analytics/react"; 5 | 6 | export default function NavbarWrapper(props) { 7 | const heroImages = { 8 | logo: useBaseUrl("/img/logo.svg"), 9 | }; 10 | return ( 11 | <> 12 | 18 | 19 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /packages/docs/src/theme/PaginatorNavLink/index.js: -------------------------------------------------------------------------------- 1 | import { PaginatorNavLink } from "@swmansion/t-rex-ui"; 2 | 3 | export default PaginatorNavLink; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Root.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { getInitColorSchemeScript } from "@mui/material/styles"; 3 | import { Experimental_CssVarsProvider as CssVarsProvider } from "@mui/material/styles"; 4 | import theme from "@site/src/theme/muiTheme"; 5 | 6 | export default function Root({ children }) { 7 | return ( 8 | <> 9 | {getInitColorSchemeScript()} 10 | {children} 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /packages/docs/src/theme/SearchPage/index.js: -------------------------------------------------------------------------------- 1 | import { SearchPage } from '@swmansion/t-rex-ui'; 2 | 3 | export default SearchPage; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/TOCCollapsible/index.js: -------------------------------------------------------------------------------- 1 | import { TOCCollapsible } from "@swmansion/t-rex-ui"; 2 | 3 | export default TOCCollapsible; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/TOCItems/Tree.js: -------------------------------------------------------------------------------- 1 | import { TOCItemTree } from "@swmansion/t-rex-ui"; 2 | 3 | export default TOCItemTree; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/TOCItems/index.js: -------------------------------------------------------------------------------- 1 | import { TOCItems } from "@swmansion/t-rex-ui"; 2 | 3 | export default TOCItems; 4 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Tabs/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Tabs from '@theme-original/Tabs'; 3 | import styles from './styles.module.css'; 4 | import clsx from 'clsx'; 5 | 6 | export default function TabsWrapper(props) { 7 | return ( 8 | <> 9 |
    10 | 11 |
    12 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /packages/docs/src/theme/Tabs/styles.module.css: -------------------------------------------------------------------------------- 1 | .tabs__wrapper { 2 | } 3 | 4 | [class*='tabs__item']:hover { 5 | background-color: inherit; 6 | } 7 | 8 | ul[role='tablist'] li { 9 | padding: 4px 16px; 10 | 11 | color: var(--swm-tab); 12 | transition: color 0.15s, border-bottom-color 0.15s; 13 | 14 | border-bottom: 4px solid var(--swm-tab); 15 | border-radius: 0; 16 | } 17 | 18 | ul[role='tablist'] li:hover { 19 | color: var(--swm-tab-hover); 20 | border-bottom-color: var(--swm-tab-hover); 21 | } 22 | 23 | ul[role='tablist'] li[class*='active'] { 24 | color: var(--swm-tab-active); 25 | border-bottom-color: var(--swm-tab-active); 26 | } 27 | -------------------------------------------------------------------------------- /packages/docs/static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/.nojekyll -------------------------------------------------------------------------------- /packages/docs/static/fonts/Aeonik-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/fonts/Aeonik-Bold.otf -------------------------------------------------------------------------------- /packages/docs/static/fonts/Aeonik-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/fonts/Aeonik-Medium.otf -------------------------------------------------------------------------------- /packages/docs/static/fonts/Aeonik-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/fonts/Aeonik-Regular.otf -------------------------------------------------------------------------------- /packages/docs/static/fonts/DMMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/fonts/DMMono-Regular.ttf -------------------------------------------------------------------------------- /packages/docs/static/img/Arrow-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/docs/static/img/Arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/docs/static/img/arrow-left-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/docs/static/img/arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/docs/static/img/arrow-right-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/docs/static/img/arrow-right-hero.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/docs/static/img/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/docs/static/img/danger-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/docs/static/img/danger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/docs/static/img/docs/android_sdk_manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/android_sdk_manager.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/change_theme_type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/change_theme_type.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/customer_portal_license_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/customer_portal_license_email.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/customer_portal_login_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/customer_portal_login_page.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/customer_portal_manage_subscription.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/customer_portal_manage_subscription.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/customer_portal_retrieve_license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/customer_portal_retrieve_license.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/download_vsix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/download_vsix.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/extension_host_title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/extension_host_title.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/extensions_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/extensions_panel.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_activate_license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_activate_license.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_add_breakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_add_breakpoint.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_add_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_add_device.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_adjust_keybindings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_adjust_keybindings.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_biometrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_biometrics.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_build_logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_build_logs.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_change_panel_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_change_panel_location.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_chat_github_copilot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_chat_github_copilot.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_chat_request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_chat_request.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_chat_response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_chat_response.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_clear_console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_clear_console.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_close_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_close_overlay.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_create_launch_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_create_launch_config.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_deep_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_deep_link.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_device_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_device_settings.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_device_settings_1_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_device_settings_1_0.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_device_settings_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_device_settings_button.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_device_settings_captioned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_device_settings_captioned.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_expo_redux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_expo_redux.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_menu.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_menu_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_menu_icon.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_network_inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_network_inspector.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_panel.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_profiler_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_profiler_stop.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_profiler_visualize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_profiler_visualize.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_react_profiler_analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_react_profiler_analysis.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_react_profiler_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_react_profiler_stop.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_react_query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_react_query.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_react_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_react_scan.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_devtools_redux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_devtools_redux.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_enable_inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_enable_inspector.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_enable_network_inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_enable_network_inspector.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_enable_replays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_enable_replays.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_geolocation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_geolocation.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_how_to_manage_devices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_how_to_manage_devices.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_jump_from_logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_jump_from_logs.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_launch_config_ide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_launch_config_ide.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_localization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_localization.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_logs_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_logs_button.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_logs_objects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_logs_objects.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_manage_devices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_manage_devices.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_manage_devices_modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_manage_devices_modal.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_marketplace_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_marketplace_page.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_native_logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_native_logs.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_network_inspector_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_network_inspector_buttons.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_panel_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_panel_location.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_paused_in_debugger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_paused_in_debugger.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_permissions.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_previews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_previews.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_reload_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_reload_options.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_remove_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_remove_device.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_replays_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_replays_enabled.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_router_integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_router_integration.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_screen_recording.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_screen_recording.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_select_story.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_select_story.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_settings_dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_settings_dropdown.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_theme.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_uncaught_exception.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_uncaught_exception.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_url_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_url_select.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_user_interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_user_interface.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ide_zoom_controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ide_zoom_controls.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/install_from_vsix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/install_from_vsix.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ios_platforms_manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ios_platforms_manager.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/ios_platforms_manager_select_version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/ios_platforms_manager_select_version.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/marketplace_install_older_version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/marketplace_install_older_version.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/new_window_vscode_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/new_window_vscode_setting.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/reload_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/reload_options.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/restart_extension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/restart_extension.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/run_and_debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/run_and_debug.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/sztudio_command_palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/sztudio_command_palette.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/sztudio_editor_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/sztudio_editor_button.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/sztudio_init_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/sztudio_init_screen.png -------------------------------------------------------------------------------- /packages/docs/static/img/docs/sztudio_side_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docs/sztudio_side_panel.png -------------------------------------------------------------------------------- /packages/docs/static/img/docusaurus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/docusaurus.png -------------------------------------------------------------------------------- /packages/docs/static/img/elipse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/docs/static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/favicon.png -------------------------------------------------------------------------------- /packages/docs/static/img/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/docs/static/img/hero.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/hero.webp -------------------------------------------------------------------------------- /packages/docs/static/img/info-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/docs/static/img/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/og-image.png -------------------------------------------------------------------------------- /packages/docs/static/img/vscode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/img/vscode.jpg -------------------------------------------------------------------------------- /packages/docs/static/video/1_sztudio_integrated.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/1_sztudio_integrated.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/2_sztudio_inspect.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/2_sztudio_inspect.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/3_sztudio_debugger.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/3_sztudio_debugger.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/4_sztudio_url_bar.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/4_sztudio_url_bar.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/5_sztudio_logs_panel.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/5_sztudio_logs_panel.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/6_sztudio_preview.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/6_sztudio_preview.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/7_sztudio_device_settings.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/7_sztudio_device_settings.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/8_sztudio_outline_renders.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/8_sztudio_outline_renders.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/9_sztudio_network_inspector.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/9_sztudio_network_inspector.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_chat.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_chat.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_different_previews.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_different_previews.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_element_inspector.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_element_inspector.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_inspector_hovering.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_inspector_hovering.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_js_sampling.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_js_sampling.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_network_inspector.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_network_inspector.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_network_inspector_new.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_network_inspector_new.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_react_profiler.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_react_profiler.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_react_query.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_react_query.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_screen_recording.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_screen_recording.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/ide_storybook.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/ide_storybook.mp4 -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/1_sztudio_integrated_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/1_sztudio_integrated_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/2_sztudio_inspect_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/2_sztudio_inspect_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/3_sztudio_debugger_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/3_sztudio_debugger_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/4_sztudio_url_bar_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/4_sztudio_url_bar_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/5_sztudio_logs_panel_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/5_sztudio_logs_panel_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/6_sztudio_preview_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/6_sztudio_preview_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/7_sztudio_device_settings_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/7_sztudio_device_settings_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/8_sztudio_outline_renders_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/8_sztudio_outline_renders_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/9_sztudio_network_inspector_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/9_sztudio_network_inspector_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/static/video/placeholders/ide_screen_recording_placeholder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/docs/static/video/placeholders/ide_screen_recording_placeholder.webp -------------------------------------------------------------------------------- /packages/docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // This file is not used in compilation. It is here just for a nice editor experience. 3 | "extends": "@docusaurus/tsconfig", 4 | "compilerOptions": { 5 | "baseUrl": "." 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/radon-ide/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // This function is a placeholder for the preview function. 3 | // It is provided as empty method so that packages that use 4 | // preview functionality can build and execute outside of the 5 | // context of VSCode's React Native extension. 6 | // When run inside VSCode, the extension will replace the 7 | // implementation of this method in order to support the preview 8 | // feature properly. 9 | export declare function preview(componentInstance: ReturnType): void; 10 | -------------------------------------------------------------------------------- /packages/radon-ide/index.js: -------------------------------------------------------------------------------- 1 | export function preview(componentInstance) { 2 | // This function is a placeholder for the preview function. 3 | // It is provided as empty method so that packages that use 4 | // preview functionality can build and execute outside of the 5 | // context of VSCode's React Native extension. 6 | // When run inside VSCode, the extension will replace the 7 | // implementation of this method in order to support the preview 8 | // feature properly. 9 | } 10 | -------------------------------------------------------------------------------- /packages/radon-ide/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "radon-ide", 3 | "version": "0.0.1", 4 | "description": "Helper functions for Radon IDE project", 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "author": "Software Mansion ", 8 | "license": "MIT" 9 | } 10 | -------------------------------------------------------------------------------- /packages/react-native-ide/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // This function is a placeholder for the preview function. 3 | // It is provided as empty method so that packages that use 4 | // preview functionality can build and execute outside of the 5 | // context of VSCode's React Native extension. 6 | // When run inside VSCode, the extension will replace the 7 | // implementation of this method in order to support the preview 8 | // feature properly. 9 | export declare function preview(componentInstance: ReturnType): void; 10 | -------------------------------------------------------------------------------- /packages/react-native-ide/index.js: -------------------------------------------------------------------------------- 1 | export function preview(componentInstance) { 2 | // This function is a placeholder for the preview function. 3 | // It is provided as empty method so that packages that use 4 | // preview functionality can build and execute outside of the 5 | // context of VSCode's React Native extension. 6 | // When run inside VSCode, the extension will replace the 7 | // implementation of this method in order to support the preview 8 | // feature properly. 9 | } 10 | -------------------------------------------------------------------------------- /packages/react-native-ide/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-ide", 3 | "version": "0.0.2", 4 | "description": "Helper functions for React Native IDE project", 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "author": "Software Mansion ", 8 | "license": "MIT" 9 | } 10 | -------------------------------------------------------------------------------- /packages/vscode-extension/.gitignore: -------------------------------------------------------------------------------- 1 | out/ 2 | dist/ 3 | node_modules/ 4 | *.vsix 5 | .vscode-test 6 | 7 | # ThirdPartyNotices are only needed in distribution package (vsix file) 8 | ThirdPartyNotices.json -------------------------------------------------------------------------------- /packages/vscode-extension/.npmrc: -------------------------------------------------------------------------------- 1 | @software-mansion-labs:registry=https://npm.pkg.github.com -------------------------------------------------------------------------------- /packages/vscode-extension/.prettierignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | /.pnp 4 | .pnp.js 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | /dist 12 | 13 | # misc 14 | .DS_Store 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* -------------------------------------------------------------------------------- /packages/vscode-extension/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": false, 7 | "quoteProps": "consistent", 8 | "jsxSingleQuote": false, 9 | "trailingComma": "es5", 10 | "bracketSpacing": true, 11 | "bracketSameLine": true, 12 | "arrowParens": "always" 13 | } -------------------------------------------------------------------------------- /packages/vscode-extension/.vscode-test.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("@vscode/test-cli"); 2 | const { tmpdir } = require("os"); 3 | const { sep } = require("path"); 4 | const { mkdtempSync } = require("fs"); 5 | 6 | const tmpDir = mkdtempSync(`${tmpdir}${sep}`); 7 | 8 | module.exports = defineConfig({ 9 | files: "dist/tests/**/*.test.js", 10 | launchArgs: [`--user-data-dir=${tmpDir}`], 11 | }); 12 | -------------------------------------------------------------------------------- /packages/vscode-extension/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dbaeumer.vscode-eslint" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"], 13 | "outFiles": [ 14 | "${workspaceFolder}/dist/extension.js", 15 | "${workspaceFolder}/dist/extension.js.map" 16 | ], 17 | "preLaunchTask": "build and run everything", 18 | "env": { 19 | // Uncomment to enable more detailed logging from the simulator server 20 | // "SIMSERVER_LOG": "debug" 21 | } 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /packages/vscode-extension/.vscodeignore: -------------------------------------------------------------------------------- 1 | # Ignore everything 2 | * 3 | */** 4 | dist/tests/** 5 | 6 | # Allow needed files 7 | !dist/** 8 | !lib/** 9 | !assets/** 10 | !LICENSE.txt 11 | !README.md 12 | !ThirdPartyNotices.json -------------------------------------------------------------------------------- /packages/vscode-extension/assets/font-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/assets/font-icons.woff2 -------------------------------------------------------------------------------- /packages/vscode-extension/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/assets/logo.png -------------------------------------------------------------------------------- /packages/vscode-extension/assets/mmkv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/vscode-extension/assets/network.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages/vscode-extension/assets/react.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/font-icons/fantasticon.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "inputDir": "./font-icons/", 3 | "outputDir": "./assets/", 4 | "fontTypes": ["woff2"], 5 | "assetTypes": [], 6 | "name": "font-icons", 7 | "codepoints": { 8 | "off": "0xE001" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/vscode-extension/font-icons/off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/JSXRuntime/react-native-78-79/Readme.md: -------------------------------------------------------------------------------- 1 | ### How to generate? 2 | 3 | Jsx runtime in this folder were generated from code on [this commit](https://github.com/software-mansion-labs/react-radon-ide/commit/387096b52ea3b8e757e58af6177f29c8eb496edf). To generate it your self use the fallowing command: 4 | 5 | `yarn build react/jsx-dev-runtime --type node_dev` 6 | 7 | ### What changed compared to the original version? 8 | 9 | In order for Inspector to work properly we need to pass the source of components usage in the jsx code, to achieve that we modify `react-jsx-dev-runtime.development` to append this information to the element at creation time. -------------------------------------------------------------------------------- /packages/vscode-extension/lib/android/buildProgressEvaluation.initscript.gradle: -------------------------------------------------------------------------------- 1 | // This is a functionality that is used by BuildAndroidProgressProcessor 2 | gradle.taskGraph.whenReady { graph -> 3 | println "RadonIDE:TaskGraphSize: ${graph.allTasks.size()}" 4 | } -------------------------------------------------------------------------------- /packages/vscode-extension/lib/android/configureReactNativeOverrides.initscript.gradle: -------------------------------------------------------------------------------- 1 | gradle.allprojects { project -> 2 | project.afterEvaluate { 3 | if (project.plugins.hasPlugin('com.android.application')) { 4 | ext.initScriptDir = initscript.sourceFile.parentFile 5 | project.apply from: "${ext.initScriptDir}/configureReactNativeOverrides.gradle" 6 | } 7 | } 8 | } 9 | 10 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/bippy/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2024 Aiden Bai, Million Software, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/bippy/chunk-N23WFCSF.js: -------------------------------------------------------------------------------- 1 | import { isClientEnvironment, getRDTHook } from './chunk-347RWTP3.js'; 2 | 3 | /** 4 | * @license bippy 5 | * 6 | * Copyright (c) Aiden Bai, Million Software, Inc. 7 | * 8 | * This source code is licensed under the MIT license found in the 9 | * LICENSE file in the root directory of this source tree. 10 | */ 11 | 12 | // src/index.ts 13 | try { 14 | if (isClientEnvironment()) { 15 | getRDTHook(); 16 | } 17 | } catch { 18 | } 19 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/expo_dev_plugins.js: -------------------------------------------------------------------------------- 1 | export function register(pluginName) { 2 | global.__RNIDE_register_dev_plugin && global.__RNIDE_register_dev_plugin(pluginName); 3 | } 4 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/expo_go_download.js: -------------------------------------------------------------------------------- 1 | const { requireFromAppDir, appRoot } = require("./metro_helpers"); 2 | const { getConfig } = requireFromAppDir("@expo/config/build/Config.js"); 3 | const { downloadExpoGoAsync } = requireFromAppDir("@expo/cli/build/src/utils/downloadExpoGoAsync"); 4 | 5 | async function main() { 6 | let platform = process.argv[2]; // 'Android' or 'iOS' 7 | 8 | if (platform !== "Android" && platform !== "iOS") { 9 | throw new Error("Platform not selected."); 10 | } 11 | const { exp } = getConfig(appRoot); 12 | const sdkVersion = exp.sdkVersion; 13 | 14 | // expo accepts either 'ios' or 'android' 15 | // in RN IDE we use 'Android' or 'iOS', so we need apply toLowerCase 16 | platform = platform.toLowerCase(); 17 | const filepath = await downloadExpoGoAsync(platform, { sdkVersion }); 18 | console.log(filepath); 19 | } 20 | 21 | main(); 22 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/expo_go_project_tester.js: -------------------------------------------------------------------------------- 1 | const { requireFromAppDir, appRoot } = require("./metro_helpers"); 2 | const { resolveOptionsAsync } = requireFromAppDir("@expo/cli/build/src/start/resolveOptions"); 3 | 4 | // This is a test script to ensure that the `expo-go-project` package can be imported and used in a project. 5 | // It is expected to fail either due to missing imports or because of devClient flag is set which indicates that the project 6 | // is not a Expo Go project. 7 | async function main() { 8 | const { devClient } = await resolveOptionsAsync(appRoot, {}); 9 | if (devClient) { 10 | throw new Error("Dev client is enabled"); 11 | } 12 | } 13 | 14 | main(); 15 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/expo_start.js: -------------------------------------------------------------------------------- 1 | const { 2 | adaptMetroConfig, 3 | requireFromAppDir, 4 | overrideModuleFromAppDir, 5 | } = require("./metro_helpers"); 6 | 7 | // since expo cli doesn't accept metro-config as parameter, we override metro's loadConfig method 8 | const metroConfig = requireFromAppDir("metro-config"); 9 | const origLoadConfig = metroConfig.loadConfig; 10 | metroConfig.loadConfig = async function (...args) { 11 | const config = await origLoadConfig(...args); 12 | return adaptMetroConfig(config); 13 | }; 14 | 15 | // Furthermore, expo CLI also does override the reporter setting despite it being 16 | // set in the config. In order to force CLI to use JSON reporter, we override 17 | // base terminal reporter class from metro that Expo CLI extends 18 | overrideModuleFromAppDir("metro/src/lib/TerminalReporter", require("./metro_reporter")); 19 | 20 | const { expoStart } = requireFromAppDir("@expo/cli/build/src/start/index"); 21 | expoStart(process.argv.slice(2)); // pass argv but strip node and script name 22 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/inspector_bridge.js: -------------------------------------------------------------------------------- 1 | const agent = globalThis.__radon_agent; 2 | 3 | if (!agent) { 4 | throw new Error("Radon inspector bridge agent is not installed"); 5 | } 6 | 7 | const messageListeners = []; 8 | 9 | const inspectorBridge = { 10 | sendMessage: (message) => { 11 | agent.postMessage(message); 12 | }, 13 | addMessageListener: (listener) => { 14 | messageListeners.push(listener); 15 | }, 16 | removeMessageListener: (listener) => { 17 | messageListeners.splice(messageListeners.indexOf(listener), 1); 18 | }, 19 | }; 20 | 21 | agent.onmessage = (message) => { 22 | messageListeners.forEach((listener) => listener(message)); 23 | }; 24 | 25 | module.exports = inspectorBridge; 26 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/metro_config.js: -------------------------------------------------------------------------------- 1 | const { adaptMetroConfig, requireFromAppDir, metroServerReadyHandler } = require("./metro_helpers"); 2 | 3 | // Below is the main code of the config overrider. 4 | const { loadConfig } = requireFromAppDir("metro-config"); 5 | 6 | module.exports = async function () { 7 | const customMetroConfigPath = process.env.RN_IDE_METRO_CONFIG_PATH; 8 | let options = {}; 9 | if (customMetroConfigPath) { 10 | options = { config: customMetroConfigPath }; 11 | } 12 | const config = await loadConfig(options, {}); 13 | return adaptMetroConfig(config); 14 | }; 15 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/metro_reporter.js: -------------------------------------------------------------------------------- 1 | class JsonReporter { 2 | constructor(terminal) {} 3 | 4 | update(event) { 5 | // There is a special case for errors because they have non-enumerable fields. 6 | if (Object.prototype.toString.call(event.error) === "[object Error]") { 7 | event = Object.assign(event, { 8 | message: event.error.message, 9 | stack: event.error.stack, 10 | }); 11 | } 12 | process.stdout.write(JSON.stringify(event) + "\n"); 13 | } 14 | } 15 | module.exports = JsonReporter; 16 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/plugins/redux-devtools.js: -------------------------------------------------------------------------------- 1 | const { createComposeWithDevTools } = require("./third-party/redux-devtools-expo-dev-plugin"); 2 | const { PluginMessageBridge } = require("./PluginMessageBridge"); 3 | 4 | export const compose = (...args) => { 5 | global.__RNIDE_register_dev_plugin && global.__RNIDE_register_dev_plugin("redux-devtools"); 6 | const proxyClient = new PluginMessageBridge("redux-devtools"); 7 | return createComposeWithDevTools(() => proxyClient)(...args); 8 | }; 9 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/react_devtools_agent.js: -------------------------------------------------------------------------------- 1 | let devtoolsAgent = undefined; 2 | let messageQueue = []; 3 | 4 | const agent = { 5 | postMessage: (message) => { 6 | if (devtoolsAgent) { 7 | devtoolsAgent._bridge.send("RNIDE_message", message); 8 | } else { 9 | messageQueue.push(message); 10 | } 11 | }, 12 | onmessage: undefined, 13 | }; 14 | 15 | const setDevtoolsAgent = (newDevtoolsAgent) => { 16 | if (!newDevtoolsAgent) { 17 | return; 18 | } 19 | devtoolsAgent = newDevtoolsAgent; 20 | devtoolsAgent._bridge.addListener("RNIDE_message", (message) => { 21 | if (agent.onmessage) { 22 | agent.onmessage(message); 23 | } 24 | }); 25 | const messages = messageQueue; 26 | messageQueue = []; 27 | messages.forEach((message) => { 28 | devtoolsAgent._bridge.send("RNIDE_message", message); 29 | }); 30 | }; 31 | 32 | const hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__; 33 | if (hook.reactDevtoolsAgent) { 34 | setDevtoolsAgent(hook.reactDevtoolsAgent); 35 | } else { 36 | hook.on("react-devtools", setDevtoolsAgent); 37 | } 38 | 39 | globalThis.__radon_agent = agent; 40 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/render_outlines.js: -------------------------------------------------------------------------------- 1 | const { updateInstrumentationOptions } = require("./instrumentation"); 2 | const { PluginMessageBridge } = require("./plugins/PluginMessageBridge"); 3 | 4 | let setupCompleted = false; 5 | 6 | export function setup() { 7 | if (setupCompleted) { 8 | return; 9 | } 10 | setupCompleted = true; 11 | 12 | const messageBridge = new PluginMessageBridge("render-outlines"); 13 | 14 | messageBridge.addMessageListener("updateInstrumentationOptions", (message) => { 15 | updateInstrumentationOptions(message); 16 | }); 17 | 18 | updateInstrumentationOptions({ 19 | reportRenders: (blueprintOutlines) => { 20 | messageBridge.sendMessage("rendersReported", { blueprintOutlines }); 21 | }, 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/Readme.md: -------------------------------------------------------------------------------- 1 | ## How to support a new version: 2 | 3 | To support a new version of React Native just add a new file in this directory named `rn-internals-{major}.{minor}.js` 4 | and add any imports you need for that version. 5 | 6 | ## Note: 7 | 8 | runtime.js is setup to be loaded as one of the first modules. Because of that 9 | the things ot requires may interfere with other modules that depend on the loading 10 | order. In order to avoid issues related to that, we only require minimal set of 11 | dependencies, and we load the main bits lazyli -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.73.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack"), 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry"), 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker"); 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/Libraries/Inspector/getInspectorDataForViewAtPoint"); 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/LoadingView"); 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/Libraries/Network/XHRInterceptor"); 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.74.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack"), 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry"), 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker"); 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/Libraries/Inspector/getInspectorDataForViewAtPoint"); 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/LoadingView"); 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/Libraries/Network/XHRInterceptor"); 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.75.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack"), 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry"), 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker"); 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/Libraries/Inspector/getInspectorDataForViewAtPoint"); 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/DevLoadingView"); 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/Libraries/Network/XHRInterceptor"); 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.76.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack"), 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry"), 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker"); 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/Libraries/Inspector/getInspectorDataForViewAtPoint"); 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/DevLoadingView"); 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/Libraries/Network/XHRInterceptor"); 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.77.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack"), 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry"), 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker"); 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/Libraries/Inspector/getInspectorDataForViewAtPoint"); 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/DevLoadingView"); 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/Libraries/Network/XHRInterceptor"); 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.78.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack"), 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry"), 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker"); 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/Libraries/Inspector/getInspectorDataForViewAtPoint"); 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/DevLoadingView"); 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/Libraries/Network/XHRInterceptor"); 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals-0.79.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parseErrorStack: require("react-native/Libraries/Core/Devtools/parseErrorStack").default, 3 | AppRegistry: require("react-native/Libraries/ReactNative/AppRegistry").default, 4 | get LogBoxData() { 5 | return require("react-native/Libraries/LogBox/Data/LogBoxData"); 6 | }, 7 | get SceneTracker() { 8 | return require("react-native/Libraries/Utilities/SceneTracker").default; 9 | }, 10 | get getInspectorDataForViewAtPoint() { 11 | return require("react-native/src/private/inspector/getInspectorDataForViewAtPoint").default; 12 | }, 13 | get LoadingView() { 14 | return require("react-native/Libraries/Utilities/DevLoadingView").default; 15 | }, 16 | get XHRInterceptor() { 17 | return require("react-native/src/private/inspector/XHRInterceptor").default; 18 | }, 19 | }; -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-internals/rn-internals.js: -------------------------------------------------------------------------------- 1 | // This is a placeholder file that is modified by babel_transformer.js to match the correct version of react native. 2 | -------------------------------------------------------------------------------- /packages/vscode-extension/lib/rn-renderer/react-native-78-79/Readme.md: -------------------------------------------------------------------------------- 1 | ### How to generate? 2 | 3 | Renderers in this folder were generated from code in [this commit](https://github.com/software-mansion-labs/react-radon-ide/commit/387096b52ea3b8e757e58af6177f29c8eb496edf). To generate it your self use the fallowing command: 4 | 5 | `yarn build react-native --type RN_OSS_DEV` 6 | 7 | ### What changed compared to the original version? 8 | 9 | In order for Inspector to work properly we need to pass the source of components usage in the jsx code, to achieve that we modify `react-jsx-dev-runtime.development` to append this information to the element at creation time 10 | and also modify the renderers to pass this information along to the inspector. 11 | 12 | #### Note 13 | 14 | The react build system will attach a random hash to react version inside the renderer, but the old arch renderer has a check that throws an error if React version in renderer is mismatched with currently used one, 15 | as we didn't find an elegant solution to that problem if you generate a renderer with the method described in "how to generate" please change the react version to currently used one in the generated renderer code. -------------------------------------------------------------------------------- /packages/vscode-extension/media/create-new-device.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/vscode-extension/media/create-new-device.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/media/create-new-device.mp4 -------------------------------------------------------------------------------- /packages/vscode-extension/media/explore-features.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/vscode-extension/media/explore-features.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/media/explore-features.mp4 -------------------------------------------------------------------------------- /packages/vscode-extension/media/open-ide-panel.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/vscode-extension/media/open-ide-panel.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/media/open-ide-panel.mp4 -------------------------------------------------------------------------------- /packages/vscode-extension/media/wait-for-project-to-build.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/vscode-extension/media/wait-for-project-to-build.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/media/wait-for-project-to-build.mp4 -------------------------------------------------------------------------------- /packages/vscode-extension/react-fake-editor-executable: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Metro uses a utility library "launch-editor" to open files in the editor. 3 | # "launch-editor" changes the way it passes line and column numbers to the editor 4 | # based on the name of the command it launches. This script is a workaround to 5 | # make it pass the correct arguments to `echo`, which we later use to open the 6 | # file in the editor the extension is running in. 7 | 8 | echo "__RNIDE__open_editor__" "$@" -------------------------------------------------------------------------------- /packages/vscode-extension/scripts/init-submodules-if-not-present.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Accepts multiple submodules, initializing them if they are empty. 4 | 5 | for dir in "$@"; do 6 | if [ -z "$(ls -A "$dir")" ]; then 7 | echo "Submodule $(basename "$dir") is empty. Initializing..." 8 | git submodule update --init "$dir" 9 | else 10 | echo "Submodule $(basename "$dir") is not empty. Skipping initialization." 11 | fi 12 | done 13 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | const value: string; 3 | export = value; 4 | } 5 | 6 | declare module "*.png" { 7 | const value: string; 8 | export = value; 9 | } 10 | 11 | declare module "*.webp" { 12 | const value: string; 13 | export = value; 14 | } 15 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_15_pro/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_15_pro/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_15_pro/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_15_pro/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_15_pro/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_15_pro/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_15_pro/skin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_15_pro/skin.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_16_pro/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_16_pro/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_16_pro/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_16_pro/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_16_pro/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_16_pro/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_16_pro/skin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_16_pro/skin.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_SE/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_SE/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_SE/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_SE/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_SE/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_SE/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/iphone_SE/skin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/iphone_SE/skin.webp -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_6a/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_6a/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_6a/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_6a/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_6a/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_6a/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_6a/skin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_6a/skin.webp -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_7/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_7/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_7/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_7/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_7/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_7/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_7/skin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_7/skin.webp -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_8/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_8/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_8/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_8/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_8/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_8/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_8/skin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_8/skin.webp -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_9/bezel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_9/bezel.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_9/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_9/mask.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_9/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_9/screen.png -------------------------------------------------------------------------------- /packages/vscode-extension/src/assets/pixel_9/skin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/radon-ide/8eeffeabb92d2283a671e30e6f4fb26281ef993d/packages/vscode-extension/src/assets/pixel_9/skin.webp -------------------------------------------------------------------------------- /packages/vscode-extension/src/builders/BuildAndroidProgressProcessor.ts: -------------------------------------------------------------------------------- 1 | import { BuildProgressProcessor } from "./BuildProgressProcessor"; 2 | 3 | export class BuildAndroidProgressProcessor implements BuildProgressProcessor { 4 | private completedTasks: number = 0; 5 | private tasksToComplete: number = 0; 6 | 7 | constructor(private progressListener: (newProgress: number) => void) {} 8 | 9 | private updateProgress() { 10 | if (!this.tasksToComplete) { 11 | return; 12 | } 13 | // the 0.999 max value is here to prevent situations in which users see 100% indiction, 14 | // but the build process is still takeing a couple more seconds. 15 | this.progressListener(Math.min(0.999, this.completedTasks / this.tasksToComplete)); 16 | } 17 | 18 | processLine(line: string): void { 19 | const taskGrapfSizeMatch = /RadonIDE:TaskGraphSize: (\d+)/m.exec(line); 20 | 21 | if (taskGrapfSizeMatch) { 22 | this.tasksToComplete += Number(taskGrapfSizeMatch[1]); 23 | } 24 | const taskExecutedMatch = /> Task /m.exec(line); 25 | if (taskExecutedMatch) { 26 | this.completedTasks++; 27 | this.updateProgress(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/builders/BuildProgressProcessor.ts: -------------------------------------------------------------------------------- 1 | export interface BuildProgressProcessor { 2 | processLine(line: string): void; 3 | } 4 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/chat/history.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { CHAT_PARTICIPANT_ID } from "."; 3 | 4 | export function getChatHistory(context: vscode.ChatContext): vscode.LanguageModelChatMessage[] { 5 | const chatMessageHistory = context.history.filter( 6 | (chatTurn) => chatTurn.participant === CHAT_PARTICIPANT_ID 7 | ); 8 | 9 | const history: vscode.LanguageModelChatMessage[] = []; 10 | 11 | if (chatMessageHistory.length > 0) { 12 | chatMessageHistory.forEach((chatMessage) => { 13 | if ("prompt" in chatMessage) { 14 | history.push(vscode.LanguageModelChatMessage.User(chatMessage.prompt)); 15 | } 16 | if ("response" in chatMessage) { 17 | chatMessage.response.forEach((r) => { 18 | if (r instanceof vscode.ChatResponseMarkdownPart) { 19 | history.push(vscode.LanguageModelChatMessage.Assistant(r.value.value)); 20 | } 21 | }); 22 | } 23 | }); 24 | } 25 | 26 | return history; 27 | } 28 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/common/DependencyManager.ts: -------------------------------------------------------------------------------- 1 | export const MinSupportedVersion = { 2 | reactNative: "0.71.0", 3 | expo: "49.0.0", 4 | storybook: "5.2.0", 5 | } as const; 6 | 7 | export type Dependency = 8 | | "androidEmulator" 9 | | "xcode" 10 | | "cocoaPods" 11 | | "nodejs" 12 | | "packageManager" 13 | | "nodeModules" 14 | | "android" 15 | | "ios" 16 | | "pods" 17 | | "reactNative" 18 | | "expo" 19 | | "expoRouter" 20 | | "storybook" 21 | | "easCli"; 22 | 23 | export type InstallationStatus = "installed" | "notInstalled" | "installing"; 24 | 25 | export type DependencyStatus = { 26 | status: InstallationStatus; 27 | isOptional: boolean; 28 | details?: string; 29 | }; 30 | 31 | export type DependenciesStatus = Record; 32 | 33 | export type DependencyListener = (dependency: Dependency, status: DependencyStatus) => void; 34 | 35 | export interface DependencyManagerInterface { 36 | runAllDependencyChecks(): Promise; 37 | 38 | addListener(listener: DependencyListener): Promise; 39 | removeListener(listener: DependencyListener): Promise; 40 | } 41 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/common/DeviceSessionsManager.ts: -------------------------------------------------------------------------------- 1 | import { DeviceInfo } from "./DeviceManager"; 2 | import { DeviceSessionState } from "./Project"; 3 | 4 | export type DeviceSessionsManagerDelegate = { 5 | onActiveSessionStateChanged(state: DeviceSessionState): void; 6 | onInitialized(): void; 7 | }; 8 | 9 | export type SelectDeviceOptions = { 10 | preservePreviousDevice?: boolean; 11 | }; 12 | 13 | export type ReloadAction = 14 | | "autoReload" // automatic reload mode 15 | | "clearMetro" // clear metro cache, boot device, install app 16 | | "rebuild" // clean build, boot device, install app 17 | | "reboot" // reboots device, launch app 18 | | "reinstall" // force reinstall app 19 | | "restartProcess" // relaunch app 20 | | "reloadJs"; // refetch JS scripts from metro 21 | 22 | export interface DeviceSessionsManagerInterface { 23 | reloadCurrentSession(type: ReloadAction): Promise; 24 | startOrActivateSessionForDevice( 25 | deviceInfo: DeviceInfo, 26 | selectDeviceOptions?: SelectDeviceOptions 27 | ): Promise; 28 | } 29 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/common/RenderOutlines.ts: -------------------------------------------------------------------------------- 1 | interface Measurement { 2 | x: number; 3 | y: number; 4 | width: number; 5 | height: number; 6 | } 7 | 8 | export interface RenderOutlinesEventListener { 9 | (event: T): void; 10 | } 11 | 12 | export interface BlueprintOutline { 13 | name: string; 14 | count: number; 15 | boundingRect: Measurement; 16 | didCommit: 1 | 0; 17 | } 18 | 19 | export type BlueprintEntry = [number, BlueprintOutline]; 20 | 21 | export interface RenderOutlinesEventMap { 22 | rendersReported: { 23 | blueprintOutlines: BlueprintEntry[]; 24 | }; 25 | } 26 | 27 | export const RENDER_OUTLINES_PLUGIN_ID = "render-outlines"; 28 | 29 | export interface RenderOutlinesInterface { 30 | addEventListener( 31 | type: K, 32 | listener: RenderOutlinesEventListener 33 | ): void; 34 | removeEventListener( 35 | type: K, 36 | listener: RenderOutlinesEventListener 37 | ): void; 38 | } 39 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/common/WorkspaceConfig.ts: -------------------------------------------------------------------------------- 1 | export type PanelLocation = "tab" | "side-panel"; 2 | export type ThemeType = "vscode" | "built-in"; 3 | 4 | export type WorkspaceConfigProps = { 5 | panelLocation: PanelLocation; 6 | showDeviceFrame: boolean; 7 | themeType: ThemeType; 8 | }; 9 | 10 | export interface WorkspaceConfigEventMap { 11 | configChange: WorkspaceConfigProps; 12 | } 13 | 14 | export interface WorkspaceConfigEventListener { 15 | (event: T): void; 16 | } 17 | 18 | export interface WorkspaceConfig { 19 | getConfig(): Promise; 20 | // update method can take any of the keys from WorkspaceConfigProps and appropriate value: 21 | update( 22 | key: K, 23 | value: WorkspaceConfigProps[K] 24 | ): Promise; 25 | addListener( 26 | eventType: K, 27 | listener: WorkspaceConfigEventListener 28 | ): Promise; 29 | removeListener( 30 | eventType: K, 31 | listener: WorkspaceConfigEventListener 32 | ): Promise; 33 | } 34 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/debugging/DebugAdapterDescriptorFactory.ts: -------------------------------------------------------------------------------- 1 | import vscode from "vscode"; 2 | import { DebugAdapter } from "./DebugAdapter"; 3 | import { CDPDebugAdapter } from "./CDPDebugAdapter"; 4 | 5 | export class DebugAdapterDescriptorFactory implements vscode.DebugAdapterDescriptorFactory { 6 | createDebugAdapterDescriptor( 7 | session: vscode.DebugSession 8 | ): vscode.ProviderResult { 9 | return new vscode.DebugAdapterInlineImplementation(new DebugAdapter()); 10 | } 11 | } 12 | 13 | export class CDPDebugAdapterDescriptorFactory implements vscode.DebugAdapterDescriptorFactory { 14 | createDebugAdapterDescriptor( 15 | session: vscode.DebugSession 16 | ): vscode.ProviderResult { 17 | const configuration = session.configuration; 18 | return new vscode.DebugAdapterInlineImplementation(new CDPDebugAdapter(configuration)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/debugging/templates/getArraySlots.ts: -------------------------------------------------------------------------------- 1 | // Based on https://github.com/microsoft/vscode-js-debug/blob/3be255753c458f231e32c9ef5c60090236780060/src/adapter/templates/getArraySlots.ts#L11 2 | function getArraySlots(this: unknown[], start: number, count: number) { 3 | const result = {}; 4 | const from = start === -1 ? 0 : start; 5 | const to = count === -1 ? this.length : start + count; 6 | for (let i = from; i < to && i < this.length; ++i) { 7 | const descriptor = Object.getOwnPropertyDescriptor(this, i); 8 | if (descriptor) { 9 | Object.defineProperty(result, i, descriptor); 10 | } 11 | } 12 | 13 | return result; 14 | } 15 | 16 | export default getArraySlots; 17 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/App.css: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | #root { 4 | box-sizing: border-box; 5 | height: 100%; 6 | width: 100%; 7 | margin: 0; 8 | padding: 0; 9 | background-color: var(--background); 10 | } 11 | 12 | main { 13 | display: flex; 14 | flex-direction: column; 15 | justify-content: flex-start; 16 | align-items: center; 17 | width: 100%; 18 | height: 100vh; 19 | max-height: 100vh; 20 | } 21 | 22 | .panel-view { 23 | box-sizing: border-box; 24 | display: flex; 25 | padding: 0px 8px; 26 | flex-direction: column; 27 | justify-content: start; 28 | align-items: center; 29 | width: 100%; 30 | user-select: none; 31 | } 32 | 33 | .network-log-container { 34 | display: flex; 35 | width: 100%; 36 | height: 100%; 37 | overflow: hidden; 38 | border: none; 39 | border-top: 1px solid var(--vscode-editorWidget-border); 40 | } 41 | 42 | .network-log-split-layout { 43 | border: none; 44 | } 45 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/HeadersTab.css: -------------------------------------------------------------------------------- 1 | .network-log-request-header { 2 | text-wrap: nowrap; 3 | } 4 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/NetworkBar.css: -------------------------------------------------------------------------------- 1 | .network-bar { 2 | display: flex; 3 | flex-wrap: wrap; 4 | width: 100%; 5 | margin: 6px; 6 | gap: 4px; 7 | } 8 | 9 | .network-filter { 10 | display: flex; 11 | flex-direction: row; 12 | justify-content: flex-start; 13 | } 14 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/NetworkLogDetails.css: -------------------------------------------------------------------------------- 1 | .network-log-details-tab-header { 2 | padding: 5px 10px; 3 | } 4 | 5 | .network-log-details-tab { 6 | padding: 8px; 7 | } 8 | 9 | .network-log-details-close-button { 10 | position: absolute; 11 | top: 3px; 12 | right: 5px; 13 | background: none; 14 | border: none; 15 | width: 22px; 16 | height: 22px; 17 | color: var(--vscode-icon-foreground); 18 | border-radius: 5px; 19 | padding: 3px; 20 | cursor: pointer; 21 | } 22 | 23 | .network-log-details-close-button:hover { 24 | outline: 1px dashed var(--vscode-toolbar-hoverOutline); 25 | outline-offset: -1px; 26 | background-color: var(--vscode-toolbar-hoverBackground); 27 | } 28 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/NetworkRequestLog.css: -------------------------------------------------------------------------------- 1 | .table-container { 2 | overflow: hidden; 3 | width: 100%; 4 | height: 100%; 5 | background: var(--vscode-editor-background); 6 | } 7 | 8 | .table-row:hover { 9 | cursor: pointer; 10 | background-color: var(--vscode-list-hoverBackground); 11 | } 12 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/NetworkTimeline.css: -------------------------------------------------------------------------------- 1 | .tooltip { 2 | z-index: 10000; 3 | position: absolute; 4 | background-color: var(--swm-input-background); 5 | color: var(--swm-default-text); 6 | border: 1px solid var(--swm-border-color); 7 | box-shadow: var(--swm-input-shadow); 8 | padding: 5px; 9 | width: 400px; 10 | border-radius: 4px; 11 | font-size: 12px; 12 | pointer-events: none; 13 | } 14 | .request-bar { 15 | pointer-events: visiblePainted; 16 | cursor: pointer; 17 | } 18 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/PayloadTab.tsx: -------------------------------------------------------------------------------- 1 | import { NetworkLog } from "../hooks/useNetworkTracker"; 2 | 3 | interface PayloadTabProps { 4 | networkLog: NetworkLog; 5 | } 6 | 7 | const getParams = (url: string): Record => { 8 | const urlObj = new URL(url); 9 | const params: Record = {}; 10 | urlObj.searchParams.forEach((value, key) => { 11 | params[key] = value; 12 | }); 13 | return params; 14 | }; 15 | 16 | const PayloadTab = ({ networkLog }: PayloadTabProps) => { 17 | if (!networkLog.request) { 18 | return null; 19 | } 20 | 21 | const payloadData = JSON.stringify( 22 | networkLog.request.method === "GET" 23 | ? getParams(networkLog.request.url) 24 | : JSON.parse(networkLog.request.postData || "{}"), 25 | null, 26 | 2 27 | ); 28 | 29 | return
    {payloadData}
    ; 30 | }; 31 | 32 | export default PayloadTab; 33 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/ResponseTab.css: -------------------------------------------------------------------------------- 1 | .response-tab-copy-button { 2 | position: absolute; 3 | top: 6px; 4 | right: 12px; 5 | } 6 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/components/TimingTab.css: -------------------------------------------------------------------------------- 1 | .timing-bar { 2 | display: flex; 3 | height: 20px; 4 | margin-bottom: 10px; 5 | border-radius: 5px; 6 | overflow: hidden; 7 | } 8 | 9 | .bar { 10 | height: 100%; 11 | } 12 | 13 | .request-sent-bar { 14 | background-color: var(--vscode-textLink-foreground); 15 | } 16 | 17 | .response-receive-bar { 18 | background-color: var(--vscode-button-hoverBackground); 19 | } 20 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import App from "./App.tsx"; 4 | import NetworkProvider from "./providers/NetworkProvider"; 5 | 6 | import "../webview/styles/theme.css"; 7 | 8 | ReactDOM.createRoot(document.getElementById("root")).render( 9 | 10 | 11 | 12 | 13 | 14 | ); 15 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/network/types/network.ts: -------------------------------------------------------------------------------- 1 | export interface NetworkLog { 2 | requestId: string; 3 | url: string; 4 | status: number; 5 | method: string; 6 | type: string; 7 | startTimestamp: number; 8 | endTimestamp: number; 9 | duration: number; 10 | headers: Record; 11 | } 12 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/panels/README.md: -------------------------------------------------------------------------------- 1 | # `panels` Directory 2 | 3 | This directory contains all of the webview-related code that will be executed within the extension context. It can be thought of as the place where all of the "backend" code of a webview panel is contained. 4 | 5 | Types of content that can be contained here: 6 | 7 | Individual JavaScript / TypeScript files that contain a class which manages the state and behavior of a given webview panel. Each class is usually in charge of: 8 | 9 | - Creating and rendering the webview panel 10 | - Properly cleaning up and disposing of webview resources when the panel is closed 11 | - Setting message listeners so data can be passed between the webview and extension 12 | - Setting the HTML (and by proxy CSS/JavaScript) content of the webview panel 13 | - Other custom logic and behavior related to webview panel management 14 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/project/ApplicationContext.ts: -------------------------------------------------------------------------------- 1 | import { Disposable } from "vscode"; 2 | import { BuildCache } from "../builders/BuildCache"; 3 | import { DependencyManager } from "../dependency/DependencyManager"; 4 | import { LaunchConfigController } from "../panels/LaunchConfigController"; 5 | import { disposeAll } from "../utilities/disposables"; 6 | 7 | export class ApplicationContext implements Disposable { 8 | public dependencyManager: DependencyManager; 9 | public launchConfig: LaunchConfigController; 10 | public buildCache: BuildCache; 11 | private disposables: Disposable[] = []; 12 | 13 | constructor(public appRootFolder: string) { 14 | this.dependencyManager = new DependencyManager(appRootFolder); 15 | 16 | this.launchConfig = new LaunchConfigController(appRootFolder); 17 | 18 | this.buildCache = new BuildCache(appRootFolder); 19 | 20 | this.disposables.push(this.launchConfig, this.dependencyManager); 21 | } 22 | 23 | public dispose() { 24 | disposeAll(this.disposables); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/providers/DebugConfigProvider.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CancellationToken, 3 | DebugConfiguration, 4 | DebugConfigurationProvider, 5 | ProviderResult, 6 | WorkspaceFolder, 7 | } from "vscode"; 8 | 9 | export class DebugConfigProvider implements DebugConfigurationProvider { 10 | resolveDebugConfiguration( 11 | folder: WorkspaceFolder | undefined, 12 | debugConfiguration: DebugConfiguration, 13 | token?: CancellationToken | undefined 14 | ): ProviderResult { 15 | return { 16 | ...debugConfiguration, 17 | internalConsoleOptions: "neverOpen", 18 | }; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/react-devtools-profiler/App.css: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | #root { 4 | box-sizing: border-box; 5 | height: 100%; 6 | width: 100%; 7 | margin: 0; 8 | padding: 0; 9 | background-color: var(--background); 10 | } 11 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/common.test.ts: -------------------------------------------------------------------------------- 1 | import process from "process"; 2 | import assert from "assert"; 3 | import sinon from "sinon"; 4 | import { after, test } from "mocha"; 5 | import { ABI, getNativeABI } from "./common"; 6 | 7 | after(() => { 8 | sinon.restore(); 9 | }); 10 | 11 | test("getNativeABI()", function () { 12 | stubIntelArch(); 13 | 14 | assert.equal(getNativeABI(), ABI.X86); 15 | }); 16 | 17 | function stubIntelArch() { 18 | sinon.stub(process, "arch").value("ia32"); 19 | } 20 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/diffing.ts: -------------------------------------------------------------------------------- 1 | import { isEqual } from "lodash"; 2 | 3 | export function getChanges>(oldObj: T, newObj: T): Partial { 4 | const changes: Partial = {}; 5 | 6 | for (const key in newObj) { 7 | if (!isEqual(oldObj[key], newObj[key])) { 8 | changes[key] = newObj[key]; 9 | } 10 | } 11 | 12 | return changes; 13 | } 14 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/disposables.ts: -------------------------------------------------------------------------------- 1 | import { Disposable } from "vscode"; 2 | 3 | export function disposeAll(disposables: Disposable[]) { 4 | while (disposables.length) { 5 | const disposable = disposables.pop(); 6 | if (disposable) { 7 | disposable.dispose(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/eas.ts: -------------------------------------------------------------------------------- 1 | import { RelativePattern, Uri, workspace } from "vscode"; 2 | import { EasConfig, isEasConfig } from "../common/EasConfig"; 3 | 4 | export async function readEasConfig(appRootFolder: string | Uri): Promise { 5 | const easConfigUri = await workspace.findFiles( 6 | new RelativePattern(appRootFolder, "eas.json"), 7 | null, 8 | 1 9 | ); 10 | if (easConfigUri.length === 0) { 11 | return null; 12 | } 13 | try { 14 | const easConfigData = await workspace.fs.readFile(easConfigUri[0]); 15 | const easConfig = JSON.parse(new TextDecoder().decode(easConfigData)); 16 | if (isEasConfig(easConfig)) { 17 | return easConfig; 18 | } 19 | return null; 20 | } catch (err) { 21 | return null; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/focusSource.ts: -------------------------------------------------------------------------------- 1 | import { window, Position, ViewColumn, Selection, Uri } from "vscode"; 2 | import { DebugSource } from "../debugging/DebugSession"; 3 | 4 | /** 5 | * Opens and focuses the editor on the file specified in the given DebugSource object. 6 | * It positions the cursor at the specified line and column (if provided). 7 | * @param {DebugSource} source {@link DebugSource} containing file, line, and column details. 8 | */ 9 | export function focusSource(source: DebugSource) { 10 | if (!source.filename) { 11 | return; 12 | } 13 | const filePath = Uri.file(source.filename); 14 | window.showTextDocument(filePath, { viewColumn: ViewColumn.One }).then((editor) => { 15 | if (!source.line1based) { 16 | return; 17 | } 18 | const position = new Position(source.line1based - 1, 0); 19 | 20 | if (source.column0based) { 21 | position.translate(source.column0based); 22 | } 23 | 24 | editor.selections = [new Selection(position, position)]; 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/getNonce.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A helper function that returns a unique alphanumeric identifier called a nonce. 3 | * 4 | * @remarks This function is primarily used to help enforce content security 5 | * policies for resources/scripts being executed in a webview context. 6 | * 7 | * @returns A nonce 8 | */ 9 | export function getNonce() { 10 | let text = ""; 11 | const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 12 | for (let i = 0; i < 32; i++) { 13 | text += possible.charAt(Math.floor(Math.random() * possible.length)); 14 | } 15 | return text; 16 | } 17 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/getUri.ts: -------------------------------------------------------------------------------- 1 | import { Uri, Webview } from "vscode"; 2 | 3 | /** 4 | * A helper function which will get the webview URI of a given file or resource. 5 | * 6 | * @remarks This URI can be used within a webview's HTML as a link to the 7 | * given file/resource. 8 | * 9 | * @param webview A reference to the extension webview 10 | * @param extensionUri The URI of the directory containing the extension 11 | * @param pathList An array of strings representing the path to a file/resource 12 | * @returns A URI pointing to the file/resource 13 | */ 14 | export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { 15 | return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); 16 | } 17 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/iosRuntimes.ts: -------------------------------------------------------------------------------- 1 | import { IOSRuntimeInfo } from "../common/DeviceManager"; 2 | import { exec } from "./subprocess"; 3 | 4 | type RuntimeInfo = { 5 | bundlePath: string; 6 | buildversion: string; 7 | platform: "iOS" | "tvOS" | "watchOS"; 8 | runtimeRoot: string; 9 | identifier: string; 10 | version: string; 11 | isInternal: boolean; 12 | isAvailable: boolean; 13 | name: string; 14 | supportedDeviceTypes: Array<{ name: string; identifier: string }>; 15 | }; 16 | 17 | export async function getAvailableIosRuntimes(): Promise { 18 | const result: { runtimes: RuntimeInfo[] } = JSON.parse( 19 | (await exec("xcrun", ["simctl", "list", "runtimes", "--json"])).stdout 20 | ); 21 | return result.runtimes 22 | .filter((runtime) => runtime.platform === "iOS") 23 | .map((runtime) => ({ 24 | platform: runtime.platform, 25 | identifier: runtime.identifier, 26 | name: runtime.name, 27 | version: runtime.version, 28 | supportedDeviceTypes: runtime.supportedDeviceTypes, 29 | available: runtime.isAvailable, 30 | })); 31 | } 32 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/isAutoSaveEnabled.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from "vscode"; 2 | 3 | export function isAutoSaveEnabled(): boolean { 4 | return workspace.getConfiguration().get("files.autoSave") !== "off"; 5 | } 6 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/launchConfiguration.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from "vscode"; 2 | import { LaunchConfigurationOptions } from "../common/LaunchConfig"; 3 | 4 | export function getLaunchConfiguration() { 5 | const ideConfig: LaunchConfigurationOptions = 6 | workspace.getConfiguration("launch")?.configurations?.find(isIdeConfig) ?? {}; 7 | 8 | return ideConfig; 9 | } 10 | 11 | function isIdeConfig(config: any) { 12 | return config.type === "react-native-ide" || config.type === "radon-ide"; // we keep previous type name for compatibility with old configuration files 13 | } 14 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/platform.ts: -------------------------------------------------------------------------------- 1 | import os from "os"; 2 | 3 | const OS: "macos" | "windows" | "linux" | "unsupported" = (() => { 4 | const platform = os.platform(); 5 | switch (platform) { 6 | case "darwin": 7 | return "macos"; 8 | case "win32": 9 | return "windows"; 10 | case "linux": 11 | return "linux"; 12 | default: 13 | return "unsupported"; 14 | } 15 | })(); 16 | 17 | export const Platform = { 18 | OS, 19 | select: (obj: { macos: R; windows: T; linux: T }) => { 20 | // we assume that the 'unsupported' OS type will never occur here 21 | return Platform.OS !== "unsupported" ? obj[Platform.OS] : obj["macos"]; 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/reactNative.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | 3 | export function getReactNativeVersion(appRootFolder: string) { 4 | const reactNativeRoot = path.dirname(require.resolve("react-native", { paths: [appRootFolder] })); 5 | const packageJsonPath = path.join(reactNativeRoot, "package.json"); 6 | const packageJson = require(packageJsonPath); 7 | 8 | return packageJson.version ?? "0.74.0"; 9 | } 10 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/requireNoCache.ts: -------------------------------------------------------------------------------- 1 | export function requireNoCache(...params: Parameters) { 2 | const module = require.resolve(...params); 3 | delete require.cache[module]; 4 | return require(module); 5 | } 6 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/retry.ts: -------------------------------------------------------------------------------- 1 | type RetryFn = (retryNumber: number, retriesLeft: number) => Promise; 2 | 3 | export async function retry(fn: RetryFn, retries = 5, interval = 1000): Promise { 4 | async function call(retriesLeft: number) { 5 | try { 6 | return await fn(retries - (retriesLeft - 1), retriesLeft); 7 | } catch (error) { 8 | if (retriesLeft > 0) { 9 | await sleep(interval); 10 | return call(retriesLeft - 1); 11 | } else { 12 | throw error; 13 | } 14 | } 15 | } 16 | 17 | return await call(retries); 18 | } 19 | 20 | export const progressiveRetryTimeout = (retryNumber: number) => 21 | Math.min(100 * Math.max(retryNumber, 1), 1000); 22 | 23 | export function sleep(ms: number) { 24 | return new Promise((resolve) => setTimeout(resolve, ms)); 25 | } 26 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/simulatorServerBinary.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import { extensionContext } from "./extensionContext"; 3 | import { Platform } from "./platform"; 4 | 5 | export function simulatorServerBinary() { 6 | return path.join( 7 | extensionContext.extensionPath, 8 | "dist", 9 | Platform.select({ 10 | macos: "simulator-server-macos", 11 | windows: "simulator-server-windows.exe", 12 | linux: "simulator-server-linux", 13 | }) 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/telemetry.ts: -------------------------------------------------------------------------------- 1 | import TelemetryReporter from "@vscode/extension-telemetry"; 2 | import { extensionContext } from "./extensionContext"; 3 | 4 | const PUBLIC_APP_INSIGHTS_CONNECTION_STRING = 5 | "InstrumentationKey=6709dbd6-92e7-40f6-be09-618db8a85ce9"; 6 | 7 | let reporter: TelemetryReporter | undefined; 8 | 9 | export function getTelemetryReporter(): TelemetryReporter { 10 | if (!reporter) { 11 | reporter = new TelemetryReporter(PUBLIC_APP_INSIGHTS_CONNECTION_STRING); 12 | extensionContext.subscriptions.push(reporter); 13 | } 14 | return reporter; 15 | } 16 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/utilities/watchProjectFiles.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from "vscode"; 2 | 3 | export function watchProjectFiles(onChange: () => void) { 4 | // VS code glob patterns don't support negation so we can't exclude 5 | // native build directories like android/build, android/.gradle, 6 | // android/app/build, or ios/build. 7 | // VS code by default exclude .git and node_modules directories from 8 | // watching, configured by `files.watcherExclude` setting. 9 | // 10 | // We may revisit this if better performance is needed and create 11 | // recursive watches ourselves by iterating through workspace directories 12 | // to workaround this issue. 13 | 14 | const savedFileWatcher = workspace.onDidSaveTextDocument(onChange); 15 | 16 | const watcher = workspace.createFileSystemWatcher("**/*"); 17 | watcher.onDidChange(onChange); 18 | watcher.onDidCreate(onChange); 19 | watcher.onDidDelete(onChange); 20 | 21 | return { 22 | dispose: () => { 23 | watcher.dispose(); 24 | savedFileWatcher.dispose(); 25 | }, 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/App.css: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | #root { 4 | box-sizing: border-box; 5 | height: 100%; 6 | margin: 0; 7 | padding: 0; 8 | background-color: var(--swm-preview-background); 9 | } 10 | 11 | main { 12 | display: flex; 13 | flex-direction: column; 14 | justify-content: flex-start; 15 | align-items: center; 16 | 17 | height: 100%; 18 | width: 100%; 19 | max-height: 100vh; 20 | } 21 | 22 | /* Custom codicon class meant to be used the same way as all built-in codicons */ 23 | /* Displays React icon when used with */ 24 | .codicon-react { 25 | width: 16px; 26 | height: 16px; 27 | background-color: currentColor; 28 | mask-image: url("/assets/react.svg"); 29 | mask-size: contain; 30 | mask-repeat: no-repeat; 31 | mask-position: center; 32 | } 33 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/App.tsx: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import PreviewView from "./views/PreviewView"; 3 | 4 | function App() { 5 | return ( 6 |
    7 | 8 |
    9 | ); 10 | } 11 | export default App; 12 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/Preview/Device/DeviceFrame.tsx: -------------------------------------------------------------------------------- 1 | import { DevicePropertiesFrame } from "../../utilities/deviceContants"; 2 | 3 | type DeviceFrameProps = { 4 | frame: DevicePropertiesFrame; 5 | }; 6 | 7 | function DeviceFrame({ frame }: DeviceFrameProps) { 8 | if (!frame) { 9 | return null; 10 | } 11 | 12 | if (frame.type === "mask") { 13 | return ( 14 |
    15 | {/* ZoomControl works in away that we change the height, and leave width auto which works for images, 16 | that have it's intrinsic width and height, but I couldn't achieve the same effect with the div, 17 | thus we add the image and use opacity 0 to hide it. */} 18 | 19 |
    20 | ); 21 | } 22 | 23 | return ; 24 | } 25 | 26 | export default DeviceFrame; 27 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/Preview/Device/hooks.ts: -------------------------------------------------------------------------------- 1 | import { useWorkspaceConfig } from "../../providers/WorkspaceConfigProvider"; 2 | import { DeviceProperties } from "../../utilities/deviceContants"; 3 | 4 | export function useDeviceFrame(device: DeviceProperties) { 5 | const workspace = useWorkspaceConfig(); 6 | const isFrameDisabled = workspace.showDeviceFrame === false; 7 | const frame = isFrameDisabled ? device.bezel : device.skin; 8 | 9 | return frame; 10 | } 11 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/Preview/Device/index.ts: -------------------------------------------------------------------------------- 1 | import { default as Device } from "./Device"; 2 | 3 | export default Device; 4 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/Debugger.css: -------------------------------------------------------------------------------- 1 | .debugger-container { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | } 6 | 7 | .debugger-label { 8 | margin: 8px; 9 | color: var(--swm-debugger-label); 10 | text-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; 11 | user-select: none; 12 | } 13 | 14 | .debugger-button-group { 15 | color: var(--swm-debugger-button-group); 16 | display: flex; 17 | flex-direction: row; 18 | gap: 2px; 19 | background-color: var(--swm-debugger-button-group-background); 20 | padding: 4px 6px; 21 | border-radius: 8px; 22 | border: var(--swm-debugger-button-group-border); 23 | box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; 24 | } 25 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/DelayedFastRefreshIndicator.css: -------------------------------------------------------------------------------- 1 | .fast-refresh-indicator-container { 2 | display: relative; 3 | align-self: flex-start; 4 | } 5 | 6 | .fast-refresh-indicator { 7 | position: absolute; 8 | transform: translateY(-100%); 9 | opacity: 0; 10 | background-color: var(--swm-popover-background); 11 | border-radius: 5px; 12 | padding: 5px 10px; 13 | color: var(--swm-default-text); 14 | font-size: 14px; 15 | transition: opacity 0.3s ease; 16 | box-shadow: var(--swm-backdrop-shadow); 17 | display: none; 18 | } 19 | 20 | .fast-refresh-indicator.show { 21 | opacity: 0.9; 22 | display: block; 23 | } 24 | 25 | .fast-refresh-indicator .codicon { 26 | align-items: center; 27 | margin-right: 5px; 28 | font-size: 14px; 29 | } 30 | 31 | .fast-refresh-indicator .codicon-loading { 32 | animation: spin 1s linear infinite; 33 | } 34 | 35 | @keyframes spin { 36 | from { 37 | transform: rotate(0deg); 38 | } 39 | to { 40 | transform: rotate(360deg); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/DeviceRemovalConfirmation.css: -------------------------------------------------------------------------------- 1 | .device-removal-wrapper { 2 | text-align: center; 3 | text-wrap: balance; 4 | } 5 | 6 | .device-removal-title { 7 | color: var(--swm-default-text); 8 | margin-top: 0; 9 | } 10 | 11 | .device-removal-subtitle { 12 | color: var(--swm-secondary-text); 13 | margin: 16px 0; 14 | } 15 | 16 | .device-removal-button-group { 17 | display: flex; 18 | align-items: center; 19 | justify-content: center; 20 | width: 100%; 21 | gap: 24px; 22 | margin-top: 24px; 23 | } 24 | 25 | .device-removal-button { 26 | width: 100px; 27 | } 28 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/DeviceRenameDialog.css: -------------------------------------------------------------------------------- 1 | .device-rename-wrapper { 2 | display: block; 3 | overflow: hidden; 4 | padding-right: 10px; 5 | } 6 | 7 | .device-rename-title { 8 | margin: 0 0 20px 0; 9 | font-weight: 500; 10 | color: var(--swm-default-text); 11 | font-size: 18px; 12 | } 13 | 14 | input.device-name-input { 15 | width: 100%; 16 | margin-bottom: 15px; 17 | margin-left: 0.25rem !important; 18 | } 19 | 20 | .device-rename-button-group { 21 | display: flex; 22 | align-items: center; 23 | justify-content: center; 24 | width: 100%; 25 | gap: 24px; 26 | margin-top: 24px; 27 | } 28 | 29 | .device-rename-button { 30 | width: 100px; 31 | } 32 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/DeviceSettingsDropdown.css: -------------------------------------------------------------------------------- 1 | .device-settings-content { 2 | padding: 14px; 3 | } 4 | 5 | .device-settings-heading { 6 | text-align: center; 7 | margin: 0 0 15px 0; 8 | color: var(--swm-default-text); 9 | } 10 | 11 | .device-settings-center { 12 | display: flex; 13 | align-items: center; 14 | } 15 | 16 | .device-settings-small-text-indicator { 17 | font-size: 8px; 18 | line-height: 1; 19 | padding-right: 4px; 20 | } 21 | 22 | .device-settings-large-text-indicator { 23 | font-size: 13px; 24 | line-height: 0.7; 25 | padding-left: 6px; 26 | } 27 | 28 | .device-settings-small-text-indicator::after, 29 | .device-settings-large-text-indicator::after { 30 | content: "A"; 31 | display: block; 32 | width: 8px; 33 | height: 8px; 34 | color: var(--swm-default-text); 35 | } 36 | 37 | .device-settings-margin { 38 | margin-bottom: 20px; 39 | } 40 | 41 | .device-settings-version-text { 42 | font-size: 80%; 43 | justify-content: center; 44 | color: var(--swm-disabled-text); 45 | } 46 | 47 | .icons-container { 48 | display: flex; 49 | align-items: center; 50 | } 51 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/DimensionsBox.css: -------------------------------------------------------------------------------- 1 | .dimensions-box { 2 | background-color: var(--dimensions-box-background); 3 | position: absolute; 4 | left: var(--left); 5 | top: var(--top); 6 | height: 18px; 7 | font-size: 10px; 8 | border-radius: 4px; 9 | padding-left: 8px; 10 | padding-right: 8px; 11 | display: flex; 12 | align-items: center; 13 | white-space: nowrap; 14 | transform: var(--box-transform); 15 | margin: var(--margin); 16 | } 17 | 18 | .arrow { 19 | background-color: var(--dimensions-box-background); 20 | position: absolute; 21 | left: var(--left); 22 | top: var(--top); 23 | width: var(--arrow-size); 24 | height: var(--arrow-size); 25 | transform-origin: 50% 50%; 26 | transform: translate(-50%, -50%) rotate(45deg); 27 | margin: var(--margin); 28 | } 29 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/DropdownMenuRoot.tsx: -------------------------------------------------------------------------------- 1 | import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; 2 | import { PropsWithChildren, useEffect, useState } from "react"; 3 | 4 | export function DropdownMenuRoot({ children }: PropsWithChildren) { 5 | const [open, setOpen] = useState(false); 6 | 7 | useEffect(() => { 8 | const blurListener = () => { 9 | setOpen(false); 10 | }; 11 | window.addEventListener("blur", blurListener); 12 | return () => { 13 | window.removeEventListener("blur", blurListener); 14 | }; 15 | }, []); 16 | 17 | return ( 18 | 19 | {children} 20 | 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/IconButtonWithOptions.css: -------------------------------------------------------------------------------- 1 | .dropdown-arrow { 2 | color: var(--swm-icon-button); 3 | position: absolute; 4 | left: 0; 5 | right: 0; 6 | bottom: 0; 7 | font-size: 10px !important; 8 | opacity: 1; 9 | transition: opacity 200ms ease-out; 10 | } 11 | 12 | .dropdown-arrow-hide { 13 | opacity: 0; 14 | } 15 | 16 | .icon-container { 17 | position: relative; 18 | } 19 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/RenderOutlinesOverlay.css: -------------------------------------------------------------------------------- 1 | .render-outlines-overlay { 2 | position: absolute; 3 | top: 0; 4 | left: 0; 5 | right: 0; 6 | bottom: 0; 7 | pointer-events: none; 8 | } 9 | 10 | .not-masked { 11 | mask-image: unset; 12 | -webkit-mask-image: unset; 13 | mask-size: unset; 14 | -webkit-mask-size: unset; 15 | } 16 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/SendFeedbackItem.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; 3 | 4 | import { useModal } from "../providers/ModalProvider"; 5 | import FeedbackView from "../views/FeedbackView"; 6 | import { Feedback } from "./Feedback"; 7 | 8 | export type Sentiment = "positive" | "negative"; 9 | 10 | export function SendFeedbackItem() { 11 | const { openModal } = useModal(); 12 | 13 | const [sentiment, setSentiment] = useState(); 14 | 15 | return ( 16 | { 19 | openModal( 20 | "Do you enjoy using Radon IDE today?", 21 | 22 | ); 23 | }}> 24 | 25 |
    26 | Send feedback 27 | 28 |
    29 |
    30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/ToolsDropdown.css: -------------------------------------------------------------------------------- 1 | .tools-empty-message { 2 | width: 250px; 3 | text-align: center; 4 | } 5 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/CheckIcon.tsx: -------------------------------------------------------------------------------- 1 | import "./Icon.css"; 2 | 3 | function CheckIcon() { 4 | return ; 5 | } 6 | 7 | export default CheckIcon; 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/CloseGrayIcon.tsx: -------------------------------------------------------------------------------- 1 | import "./Icon.css"; 2 | 3 | function CloseGrayIcon() { 4 | return ; 5 | } 6 | 7 | export default CloseGrayIcon; 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/CloseIcon.tsx: -------------------------------------------------------------------------------- 1 | import "./Icon.css"; 2 | 3 | function CloseIcon() { 4 | return ; 5 | } 6 | 7 | export default CloseIcon; 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/DeviceSettingsIcon.tsx: -------------------------------------------------------------------------------- 1 | interface DeviceSettingsIconProps { 2 | color?: string; 3 | } 4 | 5 | function DeviceSettingsIcon({ color = "#fff", ...rest }: DeviceSettingsIconProps) { 6 | return ( 7 | 8 | 14 | 15 | ); 16 | } 17 | 18 | export default DeviceSettingsIcon; 19 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/DoctorIcon.tsx: -------------------------------------------------------------------------------- 1 | interface DoctorIconProps { 2 | color?: string; 3 | } 4 | 5 | const DoctorIcon = ({ color = "#fff", ...rest }: DoctorIconProps) => ( 6 | 7 | 13 | 14 | ); 15 | export default DoctorIcon; 16 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/ErrorIcon.tsx: -------------------------------------------------------------------------------- 1 | interface ErrorIconProps { 2 | color: string; 3 | } 4 | 5 | const ErrorIcon = ({ color = "#fff", ...rest }: ErrorIconProps) => ( 6 | 13 | 20 | 21 | ); 22 | export default ErrorIcon; 23 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/Icon.css: -------------------------------------------------------------------------------- 1 | .green-icon { 2 | color: var(--vscode-testing-iconPassed); 3 | } 4 | 5 | .red-icon { 6 | color: var(--vscode-testing-iconErrored); 7 | } 8 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/RecordingIcon.tsx: -------------------------------------------------------------------------------- 1 | interface RecordingIconProps { 2 | color?: string; 3 | } 4 | 5 | const RecordingIcon = ({ color = "currentColor", ...rest }: RecordingIconProps) => ( 6 | 13 | 20 | 31 | 32 | ); 33 | 34 | export default RecordingIcon; 35 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/ReplayIcon.tsx: -------------------------------------------------------------------------------- 1 | interface ReplayIconProps { 2 | color?: string; 3 | } 4 | 5 | const ReplayIcon = ({ color = "currentColor", ...rest }: ReplayIconProps) => ( 6 | 13 | 20 | 21 | ); 22 | 23 | export default ReplayIcon; 24 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/icons/SmartphoneIcon.tsx: -------------------------------------------------------------------------------- 1 | interface SmartphoneIconProps { 2 | color?: string; 3 | } 4 | 5 | function SmartphoneIcon({ color = "#fff", ...rest }: SmartphoneIconProps) { 6 | return ( 7 | 14 | 21 | 22 | ); 23 | } 24 | export default SmartphoneIcon; 25 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/shared/Anchor.tsx: -------------------------------------------------------------------------------- 1 | import { useUtils } from "../../providers/UtilsProvider"; 2 | 3 | interface AnchorProps { 4 | url: string; 5 | children: React.ReactNode; 6 | onClick?: (e: React.MouseEvent) => void; 7 | } 8 | 9 | function Anchor({ url, children, onClick }: AnchorProps) { 10 | const utils = useUtils(); 11 | const handleClick = (e: React.MouseEvent) => { 12 | e.preventDefault(); 13 | utils.openExternalUrl(url); 14 | }; 15 | 16 | return ( 17 | 18 | {children} 19 | 20 | ); 21 | } 22 | 23 | export default Anchor; 24 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/shared/Input.css: -------------------------------------------------------------------------------- 1 | input { 2 | display: inline-flex; 3 | box-sizing: border-box; 4 | align-items: center; 5 | justify-content: space-between; 6 | border-radius: 4px; 7 | padding: 0 8px; 8 | font-size: 13px; 9 | line-height: 1; 10 | height: 26px; 11 | gap: 5px; 12 | color: var(--swm-default-text); 13 | background-color: var(--swm-input-background); 14 | box-shadow: var(--swm-select-shadow); 15 | outline: 1px solid var(--swm-input-border); 16 | margin-bottom: 5px; 17 | } 18 | 19 | input:focus { 20 | outline-color: var(--swm-focus-outline-color); 21 | } 22 | 23 | input:disabled { 24 | background-color: var(--swm-input-disabled-background); 25 | } 26 | input[data-error="true"] { 27 | outline-color: var(--swm-error-color); 28 | } 29 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/shared/Input.tsx: -------------------------------------------------------------------------------- 1 | import "./Input.css"; 2 | import React from "react"; 3 | 4 | type InputProps = React.InputHTMLAttributes & { 5 | "data-error"?: boolean; 6 | }; 7 | 8 | /** 9 | Plain `input` element to render an input field with default styling. 10 | **/ 11 | export const Input = React.forwardRef((props, ref) => { 12 | return ; 13 | }); 14 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/shared/KeybindingInfo.css: -------------------------------------------------------------------------------- 1 | .keybinding { 2 | color: var(--swm-secondary-text); 3 | font-size: 10px; 4 | display: flex; 5 | align-items: center; 6 | } 7 | 8 | .symbol { 9 | border-radius: 3px; 10 | border-style: solid; 11 | border-width: 1px; 12 | display: inline-block; 13 | font-size: 11px; 14 | margin: 0 2px; 15 | padding: 3px 5px; 16 | vertical-align: middle; 17 | font-family: -apple-system, BlinkMacSystemFont, sans-serif; 18 | } 19 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/shared/Label.css: -------------------------------------------------------------------------------- 1 | .label { 2 | font-weight: bold; 3 | font-size: 11px; 4 | text-transform: uppercase; 5 | margin: 12px 0; 6 | display: flex; 7 | align-items: center; 8 | gap: 10px; 9 | color: var(--swm-default-text); 10 | } 11 | -------------------------------------------------------------------------------- /packages/vscode-extension/src/webview/components/shared/Label.tsx: -------------------------------------------------------------------------------- 1 | import "./Label.css"; 2 | import { ComponentProps } from "react"; 3 | import classNames from "classnames"; 4 | 5 | function Label({ className, ...props }: ComponentProps<"label">) { 6 | return