├── .nvmrc
├── src
├── devtools
│ ├── client
│ │ ├── debugger
│ │ │ ├── src
│ │ │ │ ├── main.js
│ │ │ │ ├── utils
│ │ │ │ │ ├── dbg.d.ts
│ │ │ │ │ ├── tabs.ts
│ │ │ │ │ ├── pause
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── frames
│ │ │ │ │ │ │ ├── getFrameUrl.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── assert.js
│ │ │ │ ├── global-types.js
│ │ │ │ ├── components
│ │ │ │ │ ├── SecondaryPanes
│ │ │ │ │ │ ├── NewObjectInspector.module.css
│ │ │ │ │ │ ├── Frames
│ │ │ │ │ │ │ └── FrameIndent.tsx
│ │ │ │ │ │ └── Points
│ │ │ │ │ │ │ └── LogpointsPane.module.css
│ │ │ │ │ ├── SourceOutline
│ │ │ │ │ │ ├── SourceOutline.module.css
│ │ │ │ │ │ └── isFunctionOutline.tsx
│ │ │ │ │ ├── Editor
│ │ │ │ │ │ ├── ShortcutsContext.ts
│ │ │ │ │ │ └── NewSourceNag.module.css
│ │ │ │ │ ├── A11yIntention.css
│ │ │ │ │ └── shared
│ │ │ │ │ │ ├── Dropdown.d.ts
│ │ │ │ │ │ ├── Badge.js
│ │ │ │ │ │ └── Button
│ │ │ │ │ │ └── index.js
│ │ │ │ ├── actions
│ │ │ │ │ └── sources
│ │ │ │ │ │ └── index.ts
│ │ │ │ └── selectors
│ │ │ │ │ └── index.ts
│ │ │ └── images
│ │ │ │ ├── expand.svg
│ │ │ │ ├── chevron-down.svg
│ │ │ │ ├── view-list.svg
│ │ │ │ ├── diamond-pause.svg
│ │ │ │ ├── arrow-up-2.svg
│ │ │ │ ├── arrow-down-2.svg
│ │ │ │ ├── document.svg
│ │ │ │ ├── document-text.svg
│ │ │ │ ├── plus.svg
│ │ │ │ ├── rewind-button.svg
│ │ │ │ ├── window.svg
│ │ │ │ ├── resume.svg
│ │ │ │ ├── arrow.svg
│ │ │ │ ├── rewind.svg
│ │ │ │ ├── arrow-up.svg
│ │ │ │ ├── pause-circle-16x16.svg
│ │ │ │ ├── tab.svg
│ │ │ │ ├── arrow-down.svg
│ │ │ │ ├── folder.svg
│ │ │ │ ├── column-marker.svg
│ │ │ │ ├── sources
│ │ │ │ ├── vuejs.svg
│ │ │ │ └── prefix-picker.svg
│ │ │ │ ├── breakpoint.svg
│ │ │ │ ├── markup-breakpoint.svg
│ │ │ │ ├── file-small.svg
│ │ │ │ ├── replay-pause.svg
│ │ │ │ └── search.svg
│ │ ├── themes
│ │ │ ├── package.json
│ │ │ ├── variables.css
│ │ │ └── images
│ │ │ │ ├── arrowhead-right.svg
│ │ │ │ ├── pencil-sm.svg
│ │ │ │ ├── location-marker.svg
│ │ │ │ ├── plus-circle.svg
│ │ │ │ ├── chat-alt.svg
│ │ │ │ ├── paper-airplane.svg
│ │ │ │ ├── menu.svg
│ │ │ │ ├── login.svg
│ │ │ │ ├── trash.svg
│ │ │ │ ├── arrow-right.svg
│ │ │ │ ├── dropmarker.svg
│ │ │ │ ├── sort-ascending-arrow.svg
│ │ │ │ ├── sort-descending-arrow.svg
│ │ │ │ ├── animation-fast-track.svg
│ │ │ │ ├── grid.svg
│ │ │ │ ├── add.svg
│ │ │ │ ├── arrow-white.svg
│ │ │ │ ├── arrow-e.svg
│ │ │ │ ├── arrow-big.svg
│ │ │ │ ├── arrow.svg
│ │ │ │ ├── item-arrow-dark-ltr.svg
│ │ │ │ ├── item-arrow-dark-rtl.svg
│ │ │ │ ├── item-arrow-ltr.svg
│ │ │ │ ├── item-arrow-rtl.svg
│ │ │ │ ├── tool-debugger.svg
│ │ │ │ ├── more.svg
│ │ │ │ ├── debugging-tabs.svg
│ │ │ │ ├── tool-explorer.svg
│ │ │ │ ├── vview-edit.svg
│ │ │ │ ├── webconsole
│ │ │ │ └── run.svg
│ │ │ │ ├── badge-blue.svg
│ │ │ │ ├── breadcrumbs-scrollbutton.svg
│ │ │ │ ├── play.svg
│ │ │ │ ├── folder.svg
│ │ │ │ ├── security-state-secure.svg
│ │ │ │ ├── tool-comments.svg
│ │ │ │ ├── vview-delete.svg
│ │ │ │ ├── vview-lock.svg
│ │ │ │ └── tool-accessibility.svg
│ │ ├── shared
│ │ │ └── components
│ │ │ │ ├── .eslintrc.js
│ │ │ │ └── reps
│ │ │ │ └── images
│ │ │ │ └── open-inspector.svg
│ │ ├── inspector
│ │ │ ├── markup
│ │ │ │ └── selectors
│ │ │ │ │ └── markup.ts
│ │ │ ├── rules
│ │ │ │ └── components
│ │ │ │ │ └── value
│ │ │ │ │ ├── FontFamily.tsx
│ │ │ │ │ └── Url.tsx
│ │ │ └── computed
│ │ │ │ └── components
│ │ │ │ └── ComputedApp.tsx
│ │ └── webconsole
│ │ │ └── actions
│ │ │ └── index.ts
│ └── shared
│ │ └── generate-uuid.js
├── reset.d.ts
├── ui
│ ├── constants.ts
│ ├── components
│ │ ├── Events
│ │ │ ├── Events.css
│ │ │ ├── index.ts
│ │ │ ├── ReplayInfo.module.css
│ │ │ ├── EventsDropDownMenu.module.css
│ │ │ └── Event.module.css
│ │ ├── Header
│ │ │ └── index.tsx
│ │ ├── TestSuite
│ │ │ ├── views
│ │ │ │ ├── TestRecording
│ │ │ │ │ ├── types.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── TestSection.module.css
│ │ │ │ │ └── TestRecordingEvents
│ │ │ │ │ │ └── NavigationEventRow.module.css
│ │ │ │ ├── GroupedTestCases
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── TestRecordingTree.module.css
│ │ │ │ └── TestSuitePanel.module.css
│ │ │ ├── index.ts
│ │ │ ├── utils
│ │ │ │ ├── formatTitle.ts
│ │ │ │ └── isTestSuiteReplay.ts
│ │ │ └── components
│ │ │ │ ├── LabeledIcon.module.css
│ │ │ │ └── TestResultIcon.module.css
│ │ ├── Comments
│ │ │ ├── CommentPreview.module.css
│ │ │ ├── VideoComments
│ │ │ │ └── index.ts
│ │ │ ├── ReplyCard.module.css
│ │ │ ├── TranscriptComments
│ │ │ │ └── types.ts
│ │ │ ├── CommentDropDownMenu.module.css
│ │ │ └── CommentReplyButton.module.css
│ │ ├── Timeline
│ │ │ ├── ContextMenu.module.css
│ │ │ ├── LoadingProgressBars.module.css
│ │ │ └── EditableTimeInput.module.css
│ │ ├── NetworkMonitor
│ │ │ ├── NetworkContextMenu.module.css
│ │ │ ├── ContextMenu.module.css
│ │ │ ├── HttpBody.module.css
│ │ │ └── NetworkMonitorList.module.css
│ │ ├── UploadScreen
│ │ │ ├── index.ts
│ │ │ ├── libraryConstants.ts
│ │ │ └── ExpiredWorkspaces.module.css
│ │ ├── CommandPalette
│ │ │ ├── index.ts
│ │ │ └── CommandPalette.module.css
│ │ ├── shared
│ │ │ ├── SharingModal
│ │ │ │ ├── index.tsx
│ │ │ │ └── LibraryDropdown.module.css
│ │ │ ├── SettingsModal
│ │ │ │ └── index.tsx
│ │ │ ├── Confirm
│ │ │ │ ├── index.ts
│ │ │ │ └── ConfirmModal.tsx
│ │ │ ├── Forms
│ │ │ │ ├── index.ts
│ │ │ │ └── Radio.tsx
│ │ │ ├── LoginModal.css
│ │ │ ├── Hoverboard.tsx
│ │ │ ├── ModalBackground.tsx
│ │ │ ├── ModalBackground.module.css
│ │ │ ├── Modals
│ │ │ │ └── SourcemapSetup.module.css
│ │ │ ├── AppContainerPortal.tsx
│ │ │ ├── Base64Image.tsx
│ │ │ └── Dialog.css
│ │ ├── SecondaryToolbox
│ │ │ ├── react-devtools
│ │ │ │ └── components
│ │ │ │ │ ├── ReactDevToolsList.module.css
│ │ │ │ │ ├── Badge.tsx
│ │ │ │ │ ├── ContextPropsStateRenderer.module.css
│ │ │ │ │ └── Badge.module.css
│ │ │ ├── ReactDevTools.module.css
│ │ │ └── SecondaryToolbox.module.css
│ │ ├── ProtocolViewer
│ │ │ ├── index.ts
│ │ │ └── components
│ │ │ │ └── ProtocolViewer.module.css
│ │ ├── Toolbar.module.css
│ │ ├── reactjs-popup.css
│ │ ├── Toolbox.tsx
│ │ ├── Avatar.module.css
│ │ └── MaintenanceMode.tsx
│ ├── utils
│ │ ├── LoadingStatus.ts
│ │ ├── tour.ts
│ │ ├── user.ts
│ │ ├── dom.ts
│ │ ├── formatEstimatedProcessingDuration.ts
│ │ ├── awaitWithTimeout.ts
│ │ └── thunk.ts
│ ├── graphql
│ │ ├── sessions.ts
│ │ └── utils.ts
│ ├── state
│ │ └── reactDevTools.ts
│ └── hooks
│ │ └── comments
│ │ └── index.ts
└── ssr.ts
├── .gitattributes
├── __mocks__
├── styleMock.js
└── fileMock.js
├── packages
├── accordion
│ ├── website
│ │ ├── .eslintrc.json
│ │ ├── styles
│ │ │ └── Home.module.css
│ │ ├── next.config.js
│ │ ├── public
│ │ │ └── favicon.ico
│ │ ├── pages
│ │ │ ├── _app.js
│ │ │ └── api
│ │ │ │ └── hello.js
│ │ ├── postcss.config.js
│ │ ├── tailwind.config.js
│ │ └── .babelrc
│ └── constants.tsx
├── e2e-tests
│ ├── examples
│ │ ├── .gitignore
│ │ ├── mapped_styles
│ │ │ ├── styles.css
│ │ │ ├── bundle_input.js
│ │ │ ├── package.json
│ │ │ ├── .gitignore
│ │ │ └── webpack.config.js
│ │ ├── rdt-react-versions
│ │ │ ├── src
│ │ │ │ └── vite-env.d.ts
│ │ │ ├── postcss.config.js
│ │ │ ├── react-15-app
│ │ │ │ ├── postcss.config.js
│ │ │ │ ├── src
│ │ │ │ │ ├── main.tsx
│ │ │ │ │ └── appInjector.tsx
│ │ │ │ └── index.html
│ │ │ ├── react-16-app
│ │ │ │ ├── postcss.config.js
│ │ │ │ ├── src
│ │ │ │ │ ├── main.tsx
│ │ │ │ │ └── appInjector.tsx
│ │ │ │ └── index.html
│ │ │ ├── react-17-app
│ │ │ │ ├── postcss.config.js
│ │ │ │ ├── src
│ │ │ │ │ ├── main.tsx
│ │ │ │ │ └── appInjector.tsx
│ │ │ │ └── index.html
│ │ │ └── tsconfig.node.json
│ │ ├── redux-fundamentals
│ │ │ ├── src
│ │ │ │ ├── vite-env.d.ts
│ │ │ │ ├── features
│ │ │ │ │ └── filters
│ │ │ │ │ │ └── colors.ts
│ │ │ │ └── exampleAddons
│ │ │ │ │ └── middleware.js
│ │ │ ├── prettier.config.js
│ │ │ ├── postcss.config.js
│ │ │ ├── tsconfig.node.json
│ │ │ ├── tests
│ │ │ │ └── playwright-example.test.ts
│ │ │ ├── index.html
│ │ │ ├── vite.config.ts
│ │ │ └── .gitignore
│ │ ├── cra
│ │ │ ├── public
│ │ │ │ ├── robots.txt
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── logo192.png
│ │ │ │ └── logo512.png
│ │ │ └── src
│ │ │ │ ├── index.js
│ │ │ │ └── index.css
│ │ ├── redux-vite
│ │ │ ├── vite.config.js
│ │ │ ├── index.html
│ │ │ └── package.json
│ │ ├── prod_bundle
│ │ │ ├── package.json
│ │ │ ├── webpack.config.js
│ │ │ └── .gitignore
│ │ ├── mapped_minified
│ │ │ ├── package.json
│ │ │ ├── webpack.config.js
│ │ │ ├── .gitignore
│ │ │ └── bundle_input.js
│ │ └── exceptions_bundle
│ │ │ ├── package.json
│ │ │ ├── webpack.config.js
│ │ │ └── .gitignore
│ ├── tsconfig.eslint.json
│ ├── scripts
│ │ ├── buildkite_run_tests_from_reason-macos-arm64.ts
│ │ ├── buildkite_run_tests_from_reason-linux-x86_64.ts
│ │ └── aws_secrets.ts
│ ├── helpers
│ │ └── types.ts
│ └── tsconfig.json
├── replay-next
│ ├── components
│ │ ├── Loader.module.css
│ │ ├── inspector
│ │ │ ├── index.tsx
│ │ │ ├── Inspector.module.css
│ │ │ ├── ScopesInspector.module.css
│ │ │ └── values
│ │ │ │ └── types.ts
│ │ ├── console
│ │ │ ├── index.tsx
│ │ │ ├── ErrorStackRenderer.module.css
│ │ │ ├── EagerEvaluationResult.module.css
│ │ │ ├── Source.module.css
│ │ │ ├── CurrentTimeIndicator.module.css
│ │ │ ├── filters
│ │ │ │ ├── FilterText.module.css
│ │ │ │ └── EventCategory.module.css
│ │ │ └── ContextMenu.module.css
│ │ ├── Icon.module.css
│ │ ├── SyntaxHighlighter
│ │ │ ├── index.ts
│ │ │ ├── SyntaxHighlighterLine.module.css
│ │ │ ├── SyntaxHighlighter.module.css
│ │ │ └── JsonViewer.module.css
│ │ ├── elements
│ │ │ ├── index.ts
│ │ │ ├── NoContentFallback.module.css
│ │ │ ├── NoContentFallback.tsx
│ │ │ └── ElementList.module.css
│ │ ├── sources
│ │ │ ├── SourceListRowFormattedText.module.css
│ │ │ ├── log-point-panel
│ │ │ │ ├── ContextMenu.module.css
│ │ │ │ └── LogPointPanelDoubleBuffer.module.css
│ │ │ ├── utils
│ │ │ │ ├── formatHitCount.ts
│ │ │ │ ├── classNameToTokenTypes.ts
│ │ │ │ ├── clipboard.ts
│ │ │ │ └── getBadgeStyleVars.ts
│ │ │ ├── SourceList.module.css
│ │ │ ├── SourceLineLoadingPlaceholder.tsx
│ │ │ └── SourceLineLoadingPlaceholder.module.css
│ │ ├── lexical
│ │ │ └── plugins
│ │ │ │ ├── code-completion
│ │ │ │ ├── styles.module.css
│ │ │ │ ├── isExactMatch.ts
│ │ │ │ └── types.ts
│ │ │ │ ├── loom-link
│ │ │ │ └── LoomLink.module.css
│ │ │ │ ├── mentions
│ │ │ │ ├── styles.module.css
│ │ │ │ ├── isExactMatch.ts
│ │ │ │ ├── utils
│ │ │ │ │ ├── $isMentionsTextNode.ts
│ │ │ │ │ └── $createMentionsTextNode.ts
│ │ │ │ └── types.ts
│ │ │ │ ├── typeahead
│ │ │ │ ├── commands.ts
│ │ │ │ └── utils
│ │ │ │ │ └── $isSimpleText.ts
│ │ │ │ ├── code
│ │ │ │ └── utils
│ │ │ │ │ ├── $createCodeNode.ts
│ │ │ │ │ ├── $isCodeNode.ts
│ │ │ │ │ └── $convertCodeElement.ts
│ │ │ │ ├── comment
│ │ │ │ ├── types.ts
│ │ │ │ └── constants.ts
│ │ │ │ └── auto-link
│ │ │ │ └── AutoLink.module.css
│ │ ├── errors
│ │ │ ├── UnexpectedErrorFormImage.png
│ │ │ └── ReportProblemLink.module.css
│ │ ├── search-files
│ │ │ ├── HighlightMatch.module.css
│ │ │ └── ResultsList.module.css
│ │ ├── LoadingProgressBar.module.css
│ │ ├── Initializer.module.css
│ │ ├── PanelLoader.module.css
│ │ ├── AvatarImage.module.css
│ │ ├── ExternalLink.tsx
│ │ ├── Spinner.module.css
│ │ └── Loader.tsx
│ ├── .gitignore
│ ├── jest.setupEnv.js
│ ├── postcss.config.js
│ └── src
│ │ ├── types.ts
│ │ ├── hooks
│ │ ├── useForceUpdate.ts
│ │ └── usePreferredFontSize.ts
│ │ ├── utils
│ │ ├── code.ts
│ │ └── group.ts
│ │ ├── contexts
│ │ ├── GraphQLClientContext.tsx
│ │ └── LayoutContext.tsx
│ │ └── suspense
│ │ └── PaintHashCache.ts
├── shared
│ ├── theme
│ │ ├── types.ts
│ │ ├── getSystemColorScheme.ts
│ │ └── useTheme.ts
│ ├── package.json
│ ├── user-data
│ │ ├── GraphQL
│ │ │ ├── constants.ts
│ │ │ └── queries.ts
│ │ ├── IndexedDB
│ │ │ └── types.ts
│ │ └── LocalStorage
│ │ │ └── types.ts
│ ├── constants.ts
│ ├── utils
│ │ ├── url.ts
│ │ └── points.ts
│ └── client
│ │ └── ReplayClientContext.tsx
├── docs
│ ├── pages
│ │ └── index.ts
│ ├── next.config.mjs
│ ├── package.json
│ └── README.md
├── protocol
│ ├── package.json
│ └── execution-point-utils.ts
├── third-party
│ ├── README.md
│ └── sourcemap-visualizer
│ │ └── sourcemapVisualizer.d.ts
├── node-protocol
│ └── package.json
├── import-sort-style-replay
│ └── package.json
├── design
│ ├── index.ts
│ ├── svgs
│ │ ├── navigation.svg
│ │ ├── debug-pause.svg
│ │ ├── tune.svg
│ │ ├── person.svg
│ │ ├── calendar.svg
│ │ ├── delete.svg
│ │ ├── key.svg
│ │ ├── trash.svg
│ │ ├── file.svg
│ │ ├── external.svg
│ │ ├── video.svg
│ │ ├── card.svg
│ │ ├── rewind.svg
│ │ ├── legal.svg
│ │ ├── fast-forward.svg
│ │ ├── debug-play.svg
│ │ ├── share.svg
│ │ └── cog.svg
│ ├── Badge
│ │ ├── Badge.module.css
│ │ └── index.tsx
│ ├── Icon
│ │ └── index.tsx
│ ├── package.json
│ ├── PrefixBadgePicker
│ │ └── Picker.module.css
│ └── SystemProvider
│ │ └── index.tsx
└── playwright-recorder
│ ├── tsconfig.json
│ ├── src
│ └── config.ts
│ └── package.json
├── test
└── examples
│ └── node
│ ├── error.js
│ ├── basic.js
│ ├── worker.js
│ ├── exceptions.js
│ ├── async.js
│ └── run_worker.js
├── docs
├── flow.md
├── case_study.md
└── codebase-notes
│ └── README.md
├── public
├── images
│ ├── grid.png
│ ├── clear.png
│ ├── stars.png
│ ├── avatar-fallback.png
│ ├── passport
│ │ ├── passportBG.png
│ │ ├── share-complete.png
│ │ ├── find_file-complete.png
│ │ ├── tour_grad-complete.png
│ │ ├── tour_grad-default.png
│ │ ├── add_a_comment-complete.png
│ │ ├── jump_to_code-complete.png
│ │ ├── jump_to_event-complete.png
│ │ ├── use_focus_mode-complete.png
│ │ ├── explore_sources-complete.png
│ │ ├── inspect_element-complete.png
│ │ ├── record_a_replay-complete.png
│ │ ├── add_a_unicorn_badge-complete.png
│ │ ├── search_source_text-complete.png
│ │ ├── set_a_print_statement-complete.png
│ │ ├── inspect_network_request-complete.png
│ │ ├── inspect_react_component-complete.png
│ │ ├── jump_to_network_request-complete.png
│ │ ├── launch_command_palette-complete.png
│ │ └── time_travel_in_the_console-complete.png
│ ├── illustrations
│ │ ├── ready1.png
│ │ ├── ready2.png
│ │ ├── ready3.png
│ │ ├── ready4.png
│ │ ├── ready5.png
│ │ └── larry_wave.png
│ ├── icon-windows.svg
│ ├── today.svg
│ ├── playback-pause.svg
│ ├── f.svg
│ ├── comment-onboarding-arrow.svg
│ ├── k.svg
│ ├── dotted-mask-dark.svg
│ ├── dotted-mask-light.svg
│ └── timer.svg
├── test
│ └── examples
│ │ ├── doc_prod_bundle.html
│ │ ├── worker.js
│ │ ├── cra
│ │ └── dist
│ │ │ ├── robots.txt
│ │ │ ├── favicon.ico
│ │ │ ├── logo192.png
│ │ │ ├── logo512.png
│ │ │ └── static
│ │ │ └── css
│ │ │ └── main.e6c13ad2.css
│ │ ├── blackbox.js
│ │ ├── doc_exceptions_bundle.html
│ │ ├── doc_inspector_sourcemapped.html
│ │ ├── rdt-react-versions
│ │ └── dist
│ │ │ ├── react15
│ │ │ ├── assets
│ │ │ │ ├── react15.js.map
│ │ │ │ ├── index-4ab65188.js
│ │ │ │ ├── __federation_expose_AppInjector-7dddba10.js
│ │ │ │ └── index-4ab65188.js.map
│ │ │ └── index.html
│ │ │ ├── react16
│ │ │ ├── assets
│ │ │ │ ├── react16.js.map
│ │ │ │ ├── index-4d2a71e4.js
│ │ │ │ ├── __federation_expose_AppInjector-f0210664.js
│ │ │ │ └── index-4d2a71e4.js.map
│ │ │ └── index.html
│ │ │ └── react17
│ │ │ ├── assets
│ │ │ ├── react17.js.map
│ │ │ ├── index-36b1bcdb.js
│ │ │ ├── __federation_expose_AppInjector-3adc3cc9.js
│ │ │ └── index-36b1bcdb.js.map
│ │ │ └── index.html
│ │ ├── shorthand_styles.css
│ │ ├── doc_minified.html
│ │ ├── prod_bundle.js
│ │ ├── doc_async_stack.html
│ │ ├── doc_exceptions.html
│ │ ├── doc_recursion.html
│ │ ├── doc_events.html
│ │ ├── doc_events_chromium.html
│ │ ├── doc_debugger_statements.html
│ │ ├── redux
│ │ └── dist
│ │ │ └── index.html
│ │ ├── iframe.html
│ │ └── README.md
├── fonts
│ ├── inter
│ │ ├── inter-v7-latin-100.eot
│ │ ├── inter-v7-latin-100.ttf
│ │ ├── inter-v7-latin-100.woff
│ │ ├── inter-v7-latin-200.eot
│ │ ├── inter-v7-latin-200.ttf
│ │ ├── inter-v7-latin-200.woff
│ │ ├── inter-v7-latin-300.eot
│ │ ├── inter-v7-latin-300.ttf
│ │ ├── inter-v7-latin-300.woff
│ │ ├── inter-v7-latin-500.eot
│ │ ├── inter-v7-latin-500.ttf
│ │ ├── inter-v7-latin-500.woff
│ │ ├── inter-v7-latin-600.eot
│ │ ├── inter-v7-latin-600.ttf
│ │ ├── inter-v7-latin-600.woff
│ │ ├── inter-v7-latin-700.eot
│ │ ├── inter-v7-latin-700.ttf
│ │ ├── inter-v7-latin-700.woff
│ │ ├── inter-v7-latin-800.eot
│ │ ├── inter-v7-latin-800.ttf
│ │ ├── inter-v7-latin-800.woff
│ │ ├── inter-v7-latin-900.eot
│ │ ├── inter-v7-latin-900.ttf
│ │ ├── inter-v7-latin-900.woff
│ │ ├── inter-v7-latin-100.woff2
│ │ ├── inter-v7-latin-200.woff2
│ │ ├── inter-v7-latin-300.woff2
│ │ ├── inter-v7-latin-500.woff2
│ │ ├── inter-v7-latin-600.woff2
│ │ ├── inter-v7-latin-700.woff2
│ │ ├── inter-v7-latin-800.woff2
│ │ ├── inter-v7-latin-900.woff2
│ │ ├── inter-v7-latin-regular.eot
│ │ ├── inter-v7-latin-regular.ttf
│ │ ├── inter-v7-latin-regular.woff
│ │ └── inter-v7-latin-regular.woff2
│ └── material_icons
│ │ ├── MaterialIcons-Regular.ttf
│ │ ├── MaterialIcons-Regular.woff2
│ │ ├── MaterialIconsOutlined-Regular.otf
│ │ └── MaterialIconsOutlined-Regular.woff2
└── icons
│ └── video.svg
├── .dockerignore
├── .trunk
└── .gitignore
├── tsconfig.eslint.json
├── vercel.json
├── postcss.config.js
├── .vscode
└── settings.json
├── next-env.d.ts
├── .stylelintrc.json
├── .markdownlint.yaml
├── .semgrepignore
├── .prettierignore
├── .github
├── ISSUE_TEMPLATE
│ ├── config.yml
│ └── bug_report.md
└── workflows
│ ├── mirror.yml
│ └── nightly.yaml
├── .eslintignore
└── scripts
└── perf-analysis
└── tsconfig.json
/.nvmrc:
--------------------------------------------------------------------------------
1 | 16.13.1
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/main.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.json linguist-generated=true
--------------------------------------------------------------------------------
/__mocks__/styleMock.js:
--------------------------------------------------------------------------------
1 | module.exports = {};
2 |
--------------------------------------------------------------------------------
/packages/accordion/website/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/package.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/packages/accordion/website/styles/Home.module.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/.gitignore:
--------------------------------------------------------------------------------
1 | .yarn/
2 | dist/
--------------------------------------------------------------------------------
/src/reset.d.ts:
--------------------------------------------------------------------------------
1 | import "@total-typescript/ts-reset";
2 |
--------------------------------------------------------------------------------
/__mocks__/fileMock.js:
--------------------------------------------------------------------------------
1 | module.exports = "test-file-stub";
2 |
--------------------------------------------------------------------------------
/src/ui/constants.ts:
--------------------------------------------------------------------------------
1 | export const timelineMarkerWidth = 11;
2 |
--------------------------------------------------------------------------------
/packages/replay-next/components/Loader.module.css:
--------------------------------------------------------------------------------
1 | .Loader {
2 | }
3 |
--------------------------------------------------------------------------------
/test/examples/node/error.js:
--------------------------------------------------------------------------------
1 | function foo() {
2 | a = b;
3 | }
4 | foo();
5 |
--------------------------------------------------------------------------------
/packages/shared/theme/types.ts:
--------------------------------------------------------------------------------
1 | export type Theme = "light" | "dark" | "system";
2 |
--------------------------------------------------------------------------------
/packages/e2e-tests/tsconfig.eslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | }
4 |
--------------------------------------------------------------------------------
/packages/replay-next/.gitignore:
--------------------------------------------------------------------------------
1 | .yarn
2 | fail
3 | playwright-report*
4 | test-results
5 |
--------------------------------------------------------------------------------
/src/ui/components/Events/Events.css:
--------------------------------------------------------------------------------
1 | .event:hover .event-match {
2 | opacity: 100;
3 | }
4 |
--------------------------------------------------------------------------------
/docs/flow.md:
--------------------------------------------------------------------------------
1 | TODO the flow of information when the recording is being loaded, played and inspected
--------------------------------------------------------------------------------
/public/images/grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/grid.png
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/utils/dbg.d.ts:
--------------------------------------------------------------------------------
1 | export function setupDebuggerHelper(): any;
2 |
--------------------------------------------------------------------------------
/packages/accordion/website/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | reactStrictMode: true,
3 | };
4 |
--------------------------------------------------------------------------------
/packages/docs/pages/index.ts:
--------------------------------------------------------------------------------
1 | export default function Index() {
2 | return "Hello Docs 👋";
3 | }
4 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_styles/styles.css:
--------------------------------------------------------------------------------
1 |
2 | div {
3 | background-color: blue;
4 | }
5 |
--------------------------------------------------------------------------------
/public/images/clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/clear.png
--------------------------------------------------------------------------------
/public/images/stars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/stars.png
--------------------------------------------------------------------------------
/src/ui/components/Events/index.ts:
--------------------------------------------------------------------------------
1 | import Events from "./Events";
2 |
3 | export default Events;
4 |
--------------------------------------------------------------------------------
/src/ui/components/Header/index.tsx:
--------------------------------------------------------------------------------
1 | import Header from "./Header";
2 |
3 | export default Header;
4 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/TestRecording/types.ts:
--------------------------------------------------------------------------------
1 | export type Position = "after" | "before";
2 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/src/ui/components/Comments/CommentPreview.module.css:
--------------------------------------------------------------------------------
1 | .Preview {
2 | margin: 0 0.5rem 0.5rem;
3 | }
4 |
--------------------------------------------------------------------------------
/packages/shared/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "name": "shared",
4 | "version": "0.0.0"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/shared/user-data/GraphQL/constants.ts:
--------------------------------------------------------------------------------
1 | export const LOCAL_STORAGE_KEY = "Replay:UserPreferences";
2 |
--------------------------------------------------------------------------------
/public/test/examples/doc_prod_bundle.html:
--------------------------------------------------------------------------------
1 |
Hello World!
2 |
3 |
--------------------------------------------------------------------------------
/public/test/examples/worker.js:
--------------------------------------------------------------------------------
1 |
2 | self.addEventListener("message", e => {
3 | postMessage("ack");
4 | });
5 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | .github
2 | .next
3 | .storybook
4 | .trunk
5 | .vscode
6 | .yarn
7 | .yarnrc.yml
8 | node_modules
9 |
--------------------------------------------------------------------------------
/packages/docs/next.config.mjs:
--------------------------------------------------------------------------------
1 | export default {
2 | compiler: {
3 | styledComponents: true,
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/packages/protocol/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "name": "protocol",
4 | "version": "0.0.0"
5 | }
6 |
--------------------------------------------------------------------------------
/src/ui/components/Timeline/ContextMenu.module.css:
--------------------------------------------------------------------------------
1 | .SmallerIcon {
2 | height: 1rem;
3 | width: 1.5rem;
4 | }
5 |
--------------------------------------------------------------------------------
/packages/third-party/README.md:
--------------------------------------------------------------------------------
1 | ### Third Party
2 |
3 | This package includes files that come from third party vendors.
4 |
--------------------------------------------------------------------------------
/public/images/avatar-fallback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/avatar-fallback.png
--------------------------------------------------------------------------------
/public/test/examples/cra/dist/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/GroupedTestCases/index.ts:
--------------------------------------------------------------------------------
1 | import Panel from "./Panel";
2 |
3 | export default Panel;
4 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/TestRecording/index.ts:
--------------------------------------------------------------------------------
1 | import Panel from "./Panel";
2 |
3 | export default Panel;
4 |
--------------------------------------------------------------------------------
/.trunk/.gitignore:
--------------------------------------------------------------------------------
1 | *out
2 | *logs
3 | *actions
4 | *notifications
5 | *tools
6 | plugins
7 | user_trunk.yaml
8 | user.yaml
9 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/cra/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/packages/replay-next/components/inspector/index.tsx:
--------------------------------------------------------------------------------
1 | import Inspector from "./Inspector";
2 |
3 | export default Inspector;
4 |
--------------------------------------------------------------------------------
/public/images/passport/passportBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/passportBG.png
--------------------------------------------------------------------------------
/public/test/examples/blackbox.js:
--------------------------------------------------------------------------------
1 | function blackboxed(...args) {
2 | for (const arg of args) {
3 | arg();
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/variables.css:
--------------------------------------------------------------------------------
1 | /* Migration note: this document moved to packages/replay-next/variables.css */
2 |
--------------------------------------------------------------------------------
/src/ui/components/NetworkMonitor/NetworkContextMenu.module.css:
--------------------------------------------------------------------------------
1 | .CommentIcon {
2 | width: 1.5rem;
3 | height: 1rem;
4 | }
5 |
--------------------------------------------------------------------------------
/src/ui/components/UploadScreen/index.ts:
--------------------------------------------------------------------------------
1 | import UploadScreen from "./UploadScreen";
2 |
3 | export default UploadScreen;
4 |
--------------------------------------------------------------------------------
/tsconfig.eslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "include": ["src", "packages", "pages", "scripts"]
4 | }
5 |
--------------------------------------------------------------------------------
/packages/node-protocol/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "name": "node-protocol",
4 | "version": "0.0.0"
5 | }
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/index.tsx:
--------------------------------------------------------------------------------
1 | import ConsoleRoot from "./ConsoleRoot";
2 |
3 | export default ConsoleRoot;
4 |
--------------------------------------------------------------------------------
/public/images/illustrations/ready1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/illustrations/ready1.png
--------------------------------------------------------------------------------
/public/images/illustrations/ready2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/illustrations/ready2.png
--------------------------------------------------------------------------------
/public/images/illustrations/ready3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/illustrations/ready3.png
--------------------------------------------------------------------------------
/public/images/illustrations/ready4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/illustrations/ready4.png
--------------------------------------------------------------------------------
/public/images/illustrations/ready5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/illustrations/ready5.png
--------------------------------------------------------------------------------
/src/ui/components/CommandPalette/index.ts:
--------------------------------------------------------------------------------
1 | import CommandPalette from "./CommandPalette";
2 |
3 | export default CommandPalette;
4 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/index.ts:
--------------------------------------------------------------------------------
1 | import TestSuitePanel from "./views/TestSuitePanel";
2 |
3 | export default TestSuitePanel;
4 |
--------------------------------------------------------------------------------
/src/ui/components/shared/SharingModal/index.tsx:
--------------------------------------------------------------------------------
1 | import SharingModal from "./SharingModal";
2 |
3 | export default SharingModal;
4 |
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-100.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-100.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-100.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-100.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-100.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-100.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-200.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-200.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-200.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-200.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-200.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-200.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-300.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-300.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-300.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-300.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-300.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-300.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-500.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-500.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-500.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-500.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-500.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-500.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-600.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-600.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-600.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-600.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-600.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-600.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-700.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-700.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-700.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-700.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-700.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-700.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-800.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-800.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-800.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-800.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-800.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-800.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-900.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-900.ttf
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-900.woff
--------------------------------------------------------------------------------
/public/images/illustrations/larry_wave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/illustrations/larry_wave.png
--------------------------------------------------------------------------------
/public/images/passport/share-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/share-complete.png
--------------------------------------------------------------------------------
/public/test/examples/cra/dist/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/test/examples/cra/dist/favicon.ico
--------------------------------------------------------------------------------
/public/test/examples/cra/dist/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/test/examples/cra/dist/logo192.png
--------------------------------------------------------------------------------
/public/test/examples/cra/dist/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/test/examples/cra/dist/logo512.png
--------------------------------------------------------------------------------
/src/ui/components/Events/ReplayInfo.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | font-size: 1.25rem;
3 | height: 1.25rem;
4 | width: 1.25rem;
5 | }
6 |
--------------------------------------------------------------------------------
/src/ui/components/SecondaryToolbox/react-devtools/components/ReactDevToolsList.module.css:
--------------------------------------------------------------------------------
1 | .List:focus {
2 | outline: none;
3 | }
4 |
--------------------------------------------------------------------------------
/src/ui/components/shared/SettingsModal/index.tsx:
--------------------------------------------------------------------------------
1 | import SettingsModal from "./SettingsModal";
2 |
3 | export default SettingsModal;
4 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "functions": {
3 | "pages/api/*": {
4 | "memory": 3008,
5 | "maxDuration": 60
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/docs/case_study.md:
--------------------------------------------------------------------------------
1 | TODO an example (a demo recording of some simple app and a walkthrough of how objects from the execution get represented)
--------------------------------------------------------------------------------
/packages/accordion/website/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/packages/accordion/website/public/favicon.ico
--------------------------------------------------------------------------------
/packages/replay-next/components/Icon.module.css:
--------------------------------------------------------------------------------
1 | .DefaultIcon {
2 | width: 1.5rem;
3 | height: 1.5rem;
4 | fill: currentColor;
5 | }
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/SyntaxHighlighter/index.ts:
--------------------------------------------------------------------------------
1 | import { JsonViewer } from "./JsonViewer";
2 |
3 | export default JsonViewer;
4 |
--------------------------------------------------------------------------------
/packages/replay-next/components/elements/index.ts:
--------------------------------------------------------------------------------
1 | import { ElementsPanel } from "./ElementsPanel";
2 |
3 | export default ElementsPanel;
4 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/SourceListRowFormattedText.module.css:
--------------------------------------------------------------------------------
1 | .Text {
2 | display: block;
3 | white-space: pre;
4 | }
5 |
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-100.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-100.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-200.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-200.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-300.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-300.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-500.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-500.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-600.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-600.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-700.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-700.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-800.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-800.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-900.woff2
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-regular.eot
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-regular.ttf
--------------------------------------------------------------------------------
/public/images/passport/find_file-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/find_file-complete.png
--------------------------------------------------------------------------------
/public/images/passport/tour_grad-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/tour_grad-complete.png
--------------------------------------------------------------------------------
/public/images/passport/tour_grad-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/tour_grad-default.png
--------------------------------------------------------------------------------
/public/test/examples/doc_exceptions_bundle.html:
--------------------------------------------------------------------------------
1 | Hello Bundled World!
2 |
3 |
--------------------------------------------------------------------------------
/src/ui/components/Comments/VideoComments/index.ts:
--------------------------------------------------------------------------------
1 | import CommentsOverlay from "./CommentsOverlay";
2 |
3 | export default CommentsOverlay;
4 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | "semi": false,
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/log-point-panel/ContextMenu.module.css:
--------------------------------------------------------------------------------
1 | .SmallerIcon {
2 | height: 1rem;
3 | width: 1.5rem;
4 | }
5 |
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-regular.woff
--------------------------------------------------------------------------------
/public/fonts/inter/inter-v7-latin-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/inter/inter-v7-latin-regular.woff2
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/cra/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/packages/e2e-tests/examples/cra/public/favicon.ico
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/cra/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/packages/e2e-tests/examples/cra/public/logo192.png
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/cra/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/packages/e2e-tests/examples/cra/public/logo512.png
--------------------------------------------------------------------------------
/packages/replay-next/components/console/ErrorStackRenderer.module.css:
--------------------------------------------------------------------------------
1 | .ErrorStack {
2 | color: var(--color-error);
3 | margin-left: 2rem;
4 | }
5 |
--------------------------------------------------------------------------------
/public/images/passport/add_a_comment-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/add_a_comment-complete.png
--------------------------------------------------------------------------------
/public/images/passport/jump_to_code-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/jump_to_code-complete.png
--------------------------------------------------------------------------------
/public/images/passport/jump_to_event-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/jump_to_event-complete.png
--------------------------------------------------------------------------------
/public/images/passport/use_focus_mode-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/use_focus_mode-complete.png
--------------------------------------------------------------------------------
/src/devtools/client/shared/components/.eslintrc.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | module.exports = {
4 | globals: {
5 | define: true,
6 | },
7 | };
8 |
--------------------------------------------------------------------------------
/src/ui/components/ProtocolViewer/index.ts:
--------------------------------------------------------------------------------
1 | import { ProtocolViewerPanel } from "./ProtocolViewerPanel";
2 |
3 | export default ProtocolViewerPanel;
4 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Confirm/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./ConfirmDialog";
2 | export * from "./ConfirmHook";
3 | export * from "./ConfirmModal";
4 |
--------------------------------------------------------------------------------
/public/images/passport/explore_sources-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/explore_sources-complete.png
--------------------------------------------------------------------------------
/public/images/passport/inspect_element-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/inspect_element-complete.png
--------------------------------------------------------------------------------
/public/images/passport/record_a_replay-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/record_a_replay-complete.png
--------------------------------------------------------------------------------
/public/test/examples/doc_inspector_sourcemapped.html:
--------------------------------------------------------------------------------
1 |
2 | HELLO
3 |
4 |
5 |
--------------------------------------------------------------------------------
/packages/docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docs",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/public/fonts/material_icons/MaterialIcons-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/material_icons/MaterialIcons-Regular.ttf
--------------------------------------------------------------------------------
/public/fonts/material_icons/MaterialIcons-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/material_icons/MaterialIcons-Regular.woff2
--------------------------------------------------------------------------------
/public/images/passport/add_a_unicorn_badge-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/add_a_unicorn_badge-complete.png
--------------------------------------------------------------------------------
/public/images/passport/search_source_text-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/search_source_text-complete.png
--------------------------------------------------------------------------------
/public/images/passport/set_a_print_statement-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/set_a_print_statement-complete.png
--------------------------------------------------------------------------------
/src/ui/utils/LoadingStatus.ts:
--------------------------------------------------------------------------------
1 | export enum LoadingStatus {
2 | IDLE = "idle",
3 | LOADING = "loading",
4 | LOADED = "loaded",
5 | ERRORED = "errored",
6 | }
7 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/code-completion/styles.module.css:
--------------------------------------------------------------------------------
1 | .Popup {
2 | }
3 |
4 | .Item {
5 | font-family: var(--font-family-monospace);
6 | }
7 |
--------------------------------------------------------------------------------
/packages/shared/user-data/IndexedDB/types.ts:
--------------------------------------------------------------------------------
1 | export interface IDBOptions {
2 | databaseName: string;
3 | databaseVersion: number;
4 | storeNames: string[];
5 | }
6 |
--------------------------------------------------------------------------------
/packages/shared/user-data/LocalStorage/types.ts:
--------------------------------------------------------------------------------
1 | import { config } from "shared/user-data/LocalStorage/config";
2 |
3 | export type PreferencesKey = keyof typeof config;
4 |
--------------------------------------------------------------------------------
/public/images/passport/inspect_network_request-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/inspect_network_request-complete.png
--------------------------------------------------------------------------------
/public/images/passport/inspect_react_component-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/inspect_react_component-complete.png
--------------------------------------------------------------------------------
/public/images/passport/jump_to_network_request-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/jump_to_network_request-complete.png
--------------------------------------------------------------------------------
/public/images/passport/launch_command_palette-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/launch_command_palette-complete.png
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react15/assets/react15.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"assets/react15.js","mappings":"","names":[],"sources":[],"sourcesContent":[]}
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react16/assets/react16.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"assets/react16.js","mappings":"","names":[],"sources":[],"sourcesContent":[]}
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react17/assets/react17.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"assets/react17.js","mappings":"","names":[],"sources":[],"sourcesContent":[]}
--------------------------------------------------------------------------------
/src/ui/components/UploadScreen/libraryConstants.ts:
--------------------------------------------------------------------------------
1 | export const MY_LIBRARY = "Your Library";
2 | export const personalWorkspace = { id: MY_LIBRARY, name: MY_LIBRARY };
3 |
--------------------------------------------------------------------------------
/packages/replay-next/jest.setupEnv.js:
--------------------------------------------------------------------------------
1 | import "@testing-library/jest-dom";
2 |
3 | delete window.location;
4 | window.location = new URL("http://localhost?recordingId=fake");
5 |
--------------------------------------------------------------------------------
/packages/replay-next/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {
4 | flexbox: false,
5 | grid: false,
6 | },
7 | },
8 | };
9 |
--------------------------------------------------------------------------------
/public/fonts/material_icons/MaterialIconsOutlined-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/material_icons/MaterialIconsOutlined-Regular.otf
--------------------------------------------------------------------------------
/public/images/passport/time_travel_in_the_console-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/images/passport/time_travel_in_the_console-complete.png
--------------------------------------------------------------------------------
/src/ui/components/NetworkMonitor/ContextMenu.module.css:
--------------------------------------------------------------------------------
1 | .SmallIcon {
2 | width: 1rem;
3 | }
4 |
5 | .IconSpacer {
6 | display: inline-block;
7 | width: 1rem;
8 | }
9 |
--------------------------------------------------------------------------------
/src/ui/utils/tour.ts:
--------------------------------------------------------------------------------
1 | import { Nag } from "ui/hooks/users";
2 |
3 | export function shouldShowNag(nags: Nag[], key: Nag) {
4 | return nags && !nags.includes(key);
5 | }
6 |
--------------------------------------------------------------------------------
/public/fonts/material_icons/MaterialIconsOutlined-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/public/fonts/material_icons/MaterialIconsOutlined-Regular.woff2
--------------------------------------------------------------------------------
/packages/replay-next/components/errors/UnexpectedErrorFormImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/replayio/devtools/HEAD/packages/replay-next/components/errors/UnexpectedErrorFormImage.png
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/loom-link/LoomLink.module.css:
--------------------------------------------------------------------------------
1 | .Image {
2 | max-width: 400px !important;
3 | width: 100%;
4 | cursor: pointer !important;
5 | }
6 |
--------------------------------------------------------------------------------
/packages/accordion/constants.tsx:
--------------------------------------------------------------------------------
1 | export const MIN_HEIGHT = 150;
2 | export const BORDER_HEIGHT = 1;
3 | export const HANDLE_HEIGHT = 4;
4 | export const HEADER_HEIGHT = 36 + BORDER_HEIGHT;
5 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {
5 | flexbox: false,
6 | grid: false,
7 | },
8 | },
9 | };
10 |
--------------------------------------------------------------------------------
/packages/replay-next/components/SyntaxHighlighter/SyntaxHighlighterLine.module.css:
--------------------------------------------------------------------------------
1 | .Line {
2 | font-size: inherit;
3 | font-family: var(--font-family-monospace);
4 | display: block;
5 | }
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/log-point-panel/LogPointPanelDoubleBuffer.module.css:
--------------------------------------------------------------------------------
1 | .LogPointPanelDoubleBuffer {
2 | visibility: hidden;
3 | z-index: -1;
4 | position: absolute;
5 | }
6 |
--------------------------------------------------------------------------------
/packages/accordion/website/pages/_app.js:
--------------------------------------------------------------------------------
1 | import "../styles/globals.css";
2 |
3 | function MyApp({ Component, pageProps }) {
4 | return ;
5 | }
6 |
7 | export default MyApp;
8 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_styles/bundle_input.js:
--------------------------------------------------------------------------------
1 | require("./styles.css");
2 |
3 | setTimeout(recordingFinished, 0);
4 | function recordingFinished() {
5 | console.log("ExampleFinished");
6 | }
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-vite/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 |
3 | export default defineConfig({
4 | base: "./",
5 | build: {
6 | sourcemap: true,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/mentions/styles.module.css:
--------------------------------------------------------------------------------
1 | .Popup {
2 | }
3 |
4 | .Item {
5 | }
6 |
7 | .Node {
8 | color: var(--primary-accent);
9 | font-weight: bold;
10 | }
11 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Forms/index.ts:
--------------------------------------------------------------------------------
1 | import SelectMenu from "./SelectMenu";
2 | import TextInput from "./TextInput";
3 | import Toggle from "./Toggle";
4 |
5 | export { SelectMenu, TextInput, Toggle };
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/postcss.config.js:
--------------------------------------------------------------------------------
1 | // This file needed to work around ancestor folders having PostCSS.
2 | // Ref: https://github.com/sanity-io/sanity/issues/3884
3 | module.exports = {}
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/postcss.config.js:
--------------------------------------------------------------------------------
1 | // This file needed to work around ancestor folders having PostCSS.
2 | // Ref: https://github.com/sanity-io/sanity/issues/3884
3 | module.exports = {}
--------------------------------------------------------------------------------
/packages/third-party/sourcemap-visualizer/sourcemapVisualizer.d.ts:
--------------------------------------------------------------------------------
1 | export default function renderSourcemap(
2 | source: string,
3 | sourcemap: string,
4 | url: string | undefined,
5 | document: any
6 | );
7 |
--------------------------------------------------------------------------------
/src/ui/components/NetworkMonitor/HttpBody.module.css:
--------------------------------------------------------------------------------
1 | .copy-container .copy-icon {
2 | display: none;
3 | }
4 |
5 | .copy-container:hover .copy-icon {
6 | display: inline-block;
7 | cursor: pointer;
8 | }
9 |
--------------------------------------------------------------------------------
/src/ui/components/NetworkMonitor/NetworkMonitorList.module.css:
--------------------------------------------------------------------------------
1 | .Container {
2 | height: 100%;
3 | display: flex;
4 | flex-direction: column;
5 | }
6 |
7 | .ListWrapper {
8 | flex: 1 1 auto;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/accordion/website/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {
5 | flexbox: false,
6 | grid: false,
7 | },
8 | },
9 | };
10 |
--------------------------------------------------------------------------------
/packages/import-sort-style-replay/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "import-sort-style-replay",
3 | "private": true,
4 | "version": "0.0.0",
5 | "main": "./import-sort-style-replay.js",
6 | "sideEffects": false
7 | }
8 |
--------------------------------------------------------------------------------
/public/test/examples/shorthand_styles.css:
--------------------------------------------------------------------------------
1 | .parent {
2 | margin-left: 10px;
3 | font: italic small-caps bold 24px courier;
4 | }
5 |
6 | .child {
7 | font-size: 20px;
8 | font-family: sans-serif;
9 | }
10 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/expand.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "mochaExplorer.launcherScript": "test/vscodeTestLauncher",
3 | "mochaExplorer.env": {
4 | "TEST_ONLY_TARGET": "gecko",
5 | "RECORD_REPLAY_PLAYWRIGHT_HEADLESS": "true"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/packages/accordion/website/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | content: ["./pages/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
3 | theme: {
4 | extend: {},
5 | },
6 | plugins: [],
7 | };
8 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-15-app/postcss.config.js:
--------------------------------------------------------------------------------
1 | // This file needed to work around ancestor folders having PostCSS.
2 | // Ref: https://github.com/sanity-io/sanity/issues/3884
3 | module.exports = {}
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-16-app/postcss.config.js:
--------------------------------------------------------------------------------
1 | // This file needed to work around ancestor folders having PostCSS.
2 | // Ref: https://github.com/sanity-io/sanity/issues/3884
3 | module.exports = {}
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-17-app/postcss.config.js:
--------------------------------------------------------------------------------
1 | // This file needed to work around ancestor folders having PostCSS.
2 | // Ref: https://github.com/sanity-io/sanity/issues/3884
3 | module.exports = {}
--------------------------------------------------------------------------------
/packages/replay-next/components/inspector/Inspector.module.css:
--------------------------------------------------------------------------------
1 | .Inspector {
2 | font-family: var(--font-family-monospace);
3 | font-size: var(--font-size-regular);
4 | white-space: nowrap;
5 | overflow: hidden;
6 | }
7 |
--------------------------------------------------------------------------------
/packages/design/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./AddCommentButton";
2 | export * from "./Badge";
3 | export * from "./Checkbox";
4 | export * from "./PrefixBadgePicker";
5 | export * from "./Icon";
6 | export * from "./SystemProvider";
7 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react15/assets/index-4ab65188.js:
--------------------------------------------------------------------------------
1 | import{R as e,j as t,a}from"./App-74b00b74.js";e.render(t.jsx(a,{}),document.getElementById("root"));
2 | //# sourceMappingURL=index-4ab65188.js.map
3 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react16/assets/index-4d2a71e4.js:
--------------------------------------------------------------------------------
1 | import{R as e,j as t,a}from"./App-52499ea0.js";e.render(t.jsx(a,{}),document.getElementById("root"));
2 | //# sourceMappingURL=index-4d2a71e4.js.map
3 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react17/assets/index-36b1bcdb.js:
--------------------------------------------------------------------------------
1 | import{R as e,j as t,a}from"./App-ba7ddcc9.js";e.render(t.jsx(a,{}),document.getElementById("root"));
2 | //# sourceMappingURL=index-36b1bcdb.js.map
3 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/utils/formatTitle.ts:
--------------------------------------------------------------------------------
1 | export function formatTitle(title: string): string {
2 | if (title.includes("/")) {
3 | return title.split("/").pop()!;
4 | } else {
5 | return title;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/packages/accordion/website/pages/api/hello.js:
--------------------------------------------------------------------------------
1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction
2 |
3 | export default function handler(req, res) {
4 | res.status(200).json({ name: "John Doe" });
5 | }
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/typeahead/commands.ts:
--------------------------------------------------------------------------------
1 | import { LexicalCommand } from "lexical";
2 |
3 | export const INSERT_ITEM_COMMAND: LexicalCommand<{
4 | item: any;
5 | }> = {
6 | type: "INSERT_ITEM",
7 | };
8 |
--------------------------------------------------------------------------------
/packages/replay-next/src/types.ts:
--------------------------------------------------------------------------------
1 | import { ExecutionPoint } from "@replayio/protocol";
2 |
3 | export type ExecutionPointRange = [start: ExecutionPoint, end: ExecutionPoint];
4 | export type TimeRange = [start: number, end: number];
5 |
--------------------------------------------------------------------------------
/test/examples/node/basic.js:
--------------------------------------------------------------------------------
1 |
2 | function foo() {
3 | for (let i = 0; i < 3; i++) {
4 | bar(i);
5 | }
6 | }
7 |
8 | function bar(num) {
9 | console.log("HELLO", num, { num });
10 | }
11 |
12 | setTimeout(foo, 0);
13 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/src/features/filters/colors.ts:
--------------------------------------------------------------------------------
1 | export const availableColors = ['green', 'blue', 'orange', 'purple', 'red']
2 |
3 | export const capitalize = (s: string) => s[0].toUpperCase() + s.slice(1)
4 |
--------------------------------------------------------------------------------
/packages/shared/theme/getSystemColorScheme.ts:
--------------------------------------------------------------------------------
1 | export function getSystemColorScheme() {
2 | const prefersDarkTheme = window.matchMedia("(prefers-color-scheme:dark)").matches;
3 |
4 | return prefersDarkTheme ? "dark" : "light";
5 | }
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/scripts/buildkite_run_tests_from_reason-macos-arm64.ts:
--------------------------------------------------------------------------------
1 | /* Copyright 2020-2024 Record Replay Inc. */
2 |
3 | import { build_from_reason } from "./buildkite_run_tests_from_reason";
4 |
5 | build_from_reason("macOS", "arm64");
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/SyntaxHighlighter/SyntaxHighlighter.module.css:
--------------------------------------------------------------------------------
1 | .SyntaxHighlighter {
2 | font-family: var(--font-family-monospace);
3 | font-size: var(--font-size-regular);
4 | white-space: pre;
5 | display: block;
6 | }
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/utils/tabs.ts:
--------------------------------------------------------------------------------
1 | import type { Tab } from "../reducers/tabs";
2 |
3 | export function persistTabs(tabs: Tab[]): Tab[] {
4 | return tabs.filter(tab => tab.url).map(tab => ({ url: tab.url, sourceId: "" }));
5 | }
6 |
--------------------------------------------------------------------------------
/src/ui/components/shared/LoginModal.css:
--------------------------------------------------------------------------------
1 | .login-modal {
2 | position: absolute;
3 | width: 100%;
4 | height: 100%;
5 | }
6 |
7 | .login-modal .modal-content {
8 | min-height: min-content;
9 | min-width: min-content;
10 | }
11 |
--------------------------------------------------------------------------------
/test/examples/node/worker.js:
--------------------------------------------------------------------------------
1 | const { parentPort } = require("worker_threads");
2 |
3 | parentPort.on("message", async ({ kind }) => {
4 | console.log("WorkerReceivedMessage", kind);
5 | parentPort.postMessage({ kind: "pong" });
6 | });
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/scripts/buildkite_run_tests_from_reason-linux-x86_64.ts:
--------------------------------------------------------------------------------
1 | /* Copyright 2020-2024 Record Replay Inc. */
2 |
3 | import { build_from_reason } from "./buildkite_run_tests_from_reason";
4 |
5 | build_from_reason("linux", "x86_64");
6 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Hoverboard.tsx:
--------------------------------------------------------------------------------
1 | import { Colorway, Hoverboard } from "@replayio/overboard";
2 |
3 | const OverboardHoverboard = ({ color }: { color: Colorway }) => ;
4 |
5 | export default OverboardHoverboard;
6 |
--------------------------------------------------------------------------------
/src/ui/components/shared/ModalBackground.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import styles from "./ModalBackground.module.css";
4 |
5 | export default function ModalBackground() {
6 | return
;
7 | }
8 |
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "configBasedir": ".",
3 | "extends": ["stylelint-config-prettier"],
4 | "ignoreFiles": [
5 | "pages/**/*.css",
6 | "src/**/*.css"
7 | ],
8 | "rules": {
9 | "unit-disallowed-list": ["em"]
10 | }
11 | }
--------------------------------------------------------------------------------
/packages/design/svgs/navigation.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/GroupedTestCases/types.ts:
--------------------------------------------------------------------------------
1 | import { TestRecording } from "shared/test-suites/RecordingTestMetadata";
2 |
3 | export type TestTree = {
4 | scopes: { [name: string]: TestTree };
5 | testRecordings: TestRecording[];
6 | };
7 |
--------------------------------------------------------------------------------
/packages/replay-next/components/search-files/HighlightMatch.module.css:
--------------------------------------------------------------------------------
1 | .Match {
2 | background-color: var(--background-color-source-search);
3 | border-bottom: 1px solid var(--border-color-source-search);
4 | color: inherit;
5 | font-weight: bold;
6 | }
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-15-app/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import ReactDOM from "react-dom";
3 |
4 | import App from "./App";
5 |
6 | ReactDOM.render( , document.getElementById("root")!);
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-16-app/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import ReactDOM from "react-dom";
3 |
4 | import App from "./App";
5 |
6 | ReactDOM.render( , document.getElementById("root")!);
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-17-app/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import ReactDOM from "react-dom";
3 |
4 | import App from "./App";
5 |
6 | ReactDOM.render( , document.getElementById("root")!);
7 |
--------------------------------------------------------------------------------
/packages/replay-next/components/LoadingProgressBar.module.css:
--------------------------------------------------------------------------------
1 | .Wrapper {
2 | width: 100%;
3 | flex: 0 0 2px;
4 | height: 2px;
5 | }
6 |
7 | .Bar {
8 | height: 100%;
9 | background: var(--primary-accent);
10 | transition-duration: 200ms;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/EagerEvaluationResult.module.css:
--------------------------------------------------------------------------------
1 | .Wrapper {
2 | white-space: pre;
3 | opacity: 0.5;
4 | pointer-events: none;
5 | overflow: hidden;
6 | text-overflow: ellipsis;
7 | font-family: var(--font-family-monospace);
8 | }
9 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/chevron-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/inspector/markup/selectors/markup.ts:
--------------------------------------------------------------------------------
1 | import { UIState } from "ui/state";
2 |
3 | export const getSelectedNodeId = (state: UIState) => state.markup.selectedNode;
4 | export const getHighlightedNodeIds = (state: UIState) => state.markup.highlightedNodes;
5 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/arrowhead-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/ui/components/Comments/ReplyCard.module.css:
--------------------------------------------------------------------------------
1 | .ReplyCard {
2 | width: 100%;
3 | flex-grow: 1;
4 | cursor: pointer;
5 | padding: 0.25rem 0;
6 | }
7 |
8 | .Unpublished {
9 | background-color: var(--comment-reply-unpublished-background-color);
10 | }
11 |
--------------------------------------------------------------------------------
/packages/replay-next/components/inspector/ScopesInspector.module.css:
--------------------------------------------------------------------------------
1 | .ScopesInspector {
2 | font-family: var(--font-family-monospace);
3 | font-size: var(--font-size-regular);
4 | color: var(--color-default);
5 | }
6 |
7 | .Expandable {
8 | width: 100%;
9 | }
10 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/global-types.js:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/pencil-sm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/ui/components/shared/SharingModal/LibraryDropdown.module.css:
--------------------------------------------------------------------------------
1 | :root:global(.theme-dark) .dropdownDivider {
2 | border-bottom: 1px solid var(--chrome);
3 | }
4 |
5 | :root:global(.theme-light) .dropdownDivider {
6 | border-bottom: 1px solid var(--theme-base-90);
7 | }
8 |
--------------------------------------------------------------------------------
/src/ui/utils/user.ts:
--------------------------------------------------------------------------------
1 | export function getAvatarColor(avatarID?: number) {
2 | if (!avatarID) {
3 | return "#696969";
4 | }
5 | const avatarColors = ["#2D4551", "#509A8F", "#E4C478", "#E9A56C", "#D97559"];
6 | return avatarColors[avatarID % avatarColors.length];
7 | }
8 |
--------------------------------------------------------------------------------
/.markdownlint.yaml:
--------------------------------------------------------------------------------
1 | # Autoformatter friendly markdownlint config (all formatting rules disabled)
2 | default: true
3 | blank_lines: false
4 | bullet: false
5 | html: false
6 | indentation: false
7 | line_length: false
8 | spaces: false
9 | url: false
10 | whitespace: false
11 |
--------------------------------------------------------------------------------
/packages/replay-next/components/SyntaxHighlighter/JsonViewer.module.css:
--------------------------------------------------------------------------------
1 | .JsonViewer {
2 | padding: 0.5rem 0;
3 | }
4 |
5 | .Line {
6 | font-size: inherit;
7 | font-family: var(--font-family-monospace);
8 | overflow-x: hidden;
9 | text-overflow: ellipsis;
10 | }
11 |
--------------------------------------------------------------------------------
/packages/replay-next/components/elements/NoContentFallback.module.css:
--------------------------------------------------------------------------------
1 | .Message {
2 | height: 1rem;
3 | line-height: 1rem;
4 | font-family: var(--font-family-monospace);
5 | font-size: var(--font-size-regular-monospace);
6 | font-style: italic;
7 | padding: 0 0.5rem;
8 | }
9 |
--------------------------------------------------------------------------------
/public/images/icon-windows.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/packages/design/svgs/debug-pause.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/view-list.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/TestRecording/TestSection.module.css:
--------------------------------------------------------------------------------
1 | .Title {
2 | font-size: var(--font-size-small);
3 | color: var(--color-dimmer);
4 | text-transform: uppercase;
5 | font-weight: bold;
6 | line-height: 2rem;
7 |
8 | padding-left: 0.75rem;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/code/utils/$createCodeNode.ts:
--------------------------------------------------------------------------------
1 | import { $applyNodeReplacement } from "lexical";
2 |
3 | import CodeNode from "../CodeNode";
4 |
5 | export default function $createCodeNode(): CodeNode {
6 | return $applyNodeReplacement(new CodeNode());
7 | }
8 |
--------------------------------------------------------------------------------
/packages/replay-next/src/hooks/useForceUpdate.ts:
--------------------------------------------------------------------------------
1 | import { useCallback, useState } from "react";
2 |
3 | export function useForceUpdate() {
4 | const [_, setCount] = useState(0);
5 |
6 | return useCallback(() => {
7 | setCount(prevCount => prevCount + 1);
8 | }, []);
9 | }
10 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/location-marker.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/ui/components/Toolbar.module.css:
--------------------------------------------------------------------------------
1 | .toolboxToolbarContainer {
2 | display: flex;
3 | flex-direction: column;
4 | }
5 |
6 | .toolboxToolbar {
7 | flex: 1;
8 | }
9 |
10 | .MaterialIcon {
11 | display: flex;
12 | align-items: center;
13 | justify-content: center;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/code-completion/isExactMatch.ts:
--------------------------------------------------------------------------------
1 | import { Match } from "./types";
2 |
3 | export default function isExactMatch(query: string, match: Match): boolean {
4 | // Remove leading "."
5 | query = query.slice(1);
6 |
7 | return match === query;
8 | }
9 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/SecondaryPanes/NewObjectInspector.module.css:
--------------------------------------------------------------------------------
1 | .Popup {
2 | color: var(--color-default);
3 | display: flex;
4 | flex-direction: column;
5 | padding: 0 0.25rem;
6 | }
7 |
8 | .Empty {
9 | font-family: var(--font-family-default);
10 | }
11 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/SourceOutline/SourceOutline.module.css:
--------------------------------------------------------------------------------
1 | .Warning {
2 | margin: 4px 8px;
3 | padding: 4px 8px;
4 | border: 1px solid var(--theme-warning-border);
5 | background-color: var(--theme-warning-background);
6 | color: var(--theme-warning-color);
7 | }
8 |
--------------------------------------------------------------------------------
/src/ui/components/shared/ModalBackground.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | pointer-events: none;
3 | position: absolute;
4 | height: 100%;
5 | width: 100%;
6 | margin: 0;
7 | padding: 0;
8 | background: var(--chrome);
9 | color: var(--body-color);
10 | padding: 20px;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/comment/types.ts:
--------------------------------------------------------------------------------
1 | export type FormattedText = {
2 | format: number | null;
3 | isMention: boolean;
4 | text: string;
5 | };
6 |
7 | export type FormattedTextRange = FormattedText & {
8 | beginIndex: number;
9 | endIndex: number;
10 | };
11 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/Editor/ShortcutsContext.ts:
--------------------------------------------------------------------------------
1 | import { createContext } from "react";
2 |
3 | import KeyShortcuts from "devtools/client/shared/key-shortcuts";
4 |
5 | const ShortcutsContext = createContext(null);
6 |
7 | export default ShortcutsContext;
8 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/plus-circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/ui/utils/dom.ts:
--------------------------------------------------------------------------------
1 | export function isVisible(parent: HTMLElement, child: HTMLElement) {
2 | const { top, bottom } = child.getBoundingClientRect();
3 | const scrolledParentRect = parent.getBoundingClientRect();
4 | return top >= scrolledParentRect.top && bottom <= scrolledParentRect.bottom;
5 | }
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/prod_bundle/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "prod_bundle",
3 | "scripts": {
4 | "build": "webpack",
5 | "updateExample": "node updateExample.js"
6 | },
7 | "devDependencies": {
8 | "@replayio/replay": "^0.15.0",
9 | "webpack": "^5.88.2"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/diamond-pause.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/chat-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.semgrepignore:
--------------------------------------------------------------------------------
1 | public/
2 | .git/
3 | src/devtools/client/debugger/**/fixtures/**
4 | node_modules
5 | src/devtools/client/shared/vendor/
6 | src/devtools/client/shared/sourceeditor/codemirror
7 | src/test/harness.js
8 | src/ui/components/SecondaryToolbox/**/*.raw.js
9 | packages/e2e-tests/helpers/authentication.ts
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_styles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mapped_styles",
3 | "scripts": {
4 | "build": "webpack",
5 | "updateExample": "node updateExample.js"
6 | },
7 | "devDependencies": {
8 | "@replayio/replay": "^0.15.0",
9 | "webpack": "^5.88.2"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/typeahead/utils/$isSimpleText.ts:
--------------------------------------------------------------------------------
1 | import { $isTextNode, LexicalNode } from "lexical";
2 |
3 | export default function $isSimpleText(node: LexicalNode): boolean {
4 | return $isTextNode(node) && typeof node.isSimpleText === "function" && node.isSimpleText();
5 | }
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/SourceOutline/isFunctionOutline.tsx:
--------------------------------------------------------------------------------
1 | import { ClassOutline, FunctionOutline } from "@replayio/protocol";
2 |
3 | export function isFunctionOutline(
4 | symbol: FunctionOutline | ClassOutline
5 | ): symbol is FunctionOutline {
6 | return "parameters" in symbol;
7 | }
8 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/utils/pause/index.js:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 |
7 | export * from "./why";
8 |
--------------------------------------------------------------------------------
/src/ui/components/ProtocolViewer/components/ProtocolViewer.module.css:
--------------------------------------------------------------------------------
1 | .Container {
2 | display: flex;
3 | flex-direction: column;
4 | height: 100%;
5 | width: 100%;
6 | overflow: hidden;
7 | }
8 |
9 | .PanelResizeHandle {
10 | height: 0.5rem;
11 | background-color: var(--chrome);
12 | }
13 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Modals/SourcemapSetup.module.css:
--------------------------------------------------------------------------------
1 | .Text {
2 | font-size: var(--font-size-regular);
3 | font-weight: normal;
4 | display: flex;
5 | flex-direction: column;
6 | gap: 0.5rem;
7 | }
8 |
9 | .Link {
10 | color: var(--color-link);
11 | text-decoration: underline;
12 | }
13 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .next
2 | node_modules
3 | public
4 | .github
5 | src/global-css.ts
6 |
7 | test/examples
8 | src/ui/utils/intercom.ts
9 | index.html
10 | packages/third-party/
11 | pages/_app.tsx
12 | *.tsbuildinfo
13 | *.json
14 | *.yaml
15 | src/**/*.raw.js
16 | src/ui/components/TestSuite/suspense/assets/*.js
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_minified/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mapped_minified",
3 | "scripts": {
4 | "build": "webpack",
5 | "updateExample": "node updateExample.js"
6 | },
7 | "devDependencies": {
8 | "@replayio/replay": "^0.15.0",
9 | "webpack": "^5.88.2"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/code/utils/$isCodeNode.ts:
--------------------------------------------------------------------------------
1 | import { LexicalNode } from "lexical";
2 |
3 | import CodeTextNode from "../CodeNode";
4 |
5 | export default function $isCodeNode(node: LexicalNode | null | undefined): node is CodeTextNode {
6 | return node instanceof CodeTextNode;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/comment/constants.ts:
--------------------------------------------------------------------------------
1 | // Subset of styles we support; copied from LexicalConstants
2 | export const IS_BOLD = 1;
3 | export const IS_ITALIC = 1 << 1;
4 | export const IS_STRIKETHROUGH = 1 << 2;
5 | export const IS_UNDERLINE = 1 << 3;
6 | export const IS_CODE = 1 << 4;
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/paper-airplane.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/exceptions_bundle/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "exceptions_bundle",
3 | "scripts": {
4 | "build": "webpack",
5 | "updateExample": "node updateExample.js"
6 | },
7 | "devDependencies": {
8 | "@replayio/replay": "^0.15.0",
9 | "webpack": "^5.88.2"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/utils/formatHitCount.ts:
--------------------------------------------------------------------------------
1 | export function formatHitCount(count: number): string {
2 | if (count === 10_000) {
3 | return "10k+";
4 | } else if (count < 1_000) {
5 | return `${count}`;
6 | } else {
7 | return `${Math.round(count / 100) / 10}k`;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/public/images/today.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/devtools/client/inspector/rules/components/value/FontFamily.tsx:
--------------------------------------------------------------------------------
1 | interface FFProps {
2 | fontFamilySpanClassName: string;
3 | value: string;
4 | }
5 |
6 | export default function FontFamily({ fontFamilySpanClassName, value }: FFProps) {
7 | return {value} ;
8 | }
9 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/Source.module.css:
--------------------------------------------------------------------------------
1 | .Source {
2 | cursor: pointer;
3 | text-decoration: underline;
4 | flex-shrink: 1;
5 | text-align: right;
6 | color: var(--color-default);
7 | }
8 |
9 | .UnknownSourceLabel {
10 | text-decoration: underline;
11 | color: var(--color-dim);
12 | }
13 |
--------------------------------------------------------------------------------
/public/images/playback-pause.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/A11yIntention.css:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 |
5 | .A11y-mouse :focus {
6 | outline: 0;
7 | }
8 |
--------------------------------------------------------------------------------
/src/ui/components/Comments/TranscriptComments/types.ts:
--------------------------------------------------------------------------------
1 | import { Comment, Reply } from "shared/graphql/types";
2 |
3 | export type CommentData =
4 | | { type: "comment"; comment: Comment }
5 | | { type: "new_comment"; comment: Comment }
6 | | { type: "reply"; comment: Reply }
7 | | { type: "new_reply"; comment: Reply };
8 |
--------------------------------------------------------------------------------
/packages/replay-next/components/elements/NoContentFallback.tsx:
--------------------------------------------------------------------------------
1 | import styles from "./NoContentFallback.module.css";
2 |
3 | export function NoContentFallback() {
4 | return (
5 |
6 | Elements are not available
7 |
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/packages/replay-next/src/utils/code.ts:
--------------------------------------------------------------------------------
1 | export function validateCode(code: string): boolean {
2 | try {
3 | // Wrapping brackets is necessary to support certain types of expressions, e.g. inline objects
4 | new Function(`[${code}]`);
5 | return true;
6 | } catch (error) {
7 | return false;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/packages/accordion/website/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "next/babel",
5 | {
6 | "preset-env": {
7 | "targets": {
8 | "chrome": "95"
9 | }
10 | }
11 | }
12 | ]
13 | ],
14 | "plugins": ["@babel/plugin-transform-react-display-name"]
15 | }
16 |
--------------------------------------------------------------------------------
/packages/design/svgs/tune.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/Initializer.module.css:
--------------------------------------------------------------------------------
1 | .Loader {
2 | position: absolute;
3 | top: 0;
4 | bottom: 0;
5 | left: 0;
6 | right: 0;
7 |
8 | display: flex;
9 | align-items: center;
10 | justify-content: center;
11 |
12 | font-size: var(--font-size-large);
13 | color: var(--color-dimmer);
14 | }
15 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/menu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/devtools/shared/generate-uuid.js:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 |
5 | export function generateUUID() {
6 | return `uuid-${Math.random()}`;
7 | }
8 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/TestSuitePanel.module.css:
--------------------------------------------------------------------------------
1 | .Panel {
2 | height: 100%;
3 | display: flex;
4 | flex-direction: column;
5 | overflow: auto;
6 | }
7 |
8 | .Loading {
9 | height: 100%;
10 | display: flex;
11 | flex-direction: column;
12 | align-items: center;
13 | justify-content: center;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/CurrentTimeIndicator.module.css:
--------------------------------------------------------------------------------
1 | .CurrentTimeIndicator {
2 | width: 100%;
3 | height: 2px;
4 | background-color: var(--color-current);
5 |
6 | /* Ensure current time indicator is always above console rows */
7 | position: absolute;
8 | z-index: 3;
9 | margin-top: -1px;
10 | }
11 |
--------------------------------------------------------------------------------
/packages/shared/constants.ts:
--------------------------------------------------------------------------------
1 | // The PageStyle actor flattens the DOM CSS objects a little bit, merging Rules and their Styles into one actor.
2 | // For elements (which have a style but no associated rule) we fake a rule with the following style id.
3 | export const ELEMENT_STYLE = 100;
4 |
5 | export const TOO_MANY_POINTS_TO_FIND = 10_000;
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/actions/sources/index.ts:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | export * from "./newSources";
6 | export * from "./select";
7 |
--------------------------------------------------------------------------------
/src/ssr.ts:
--------------------------------------------------------------------------------
1 | function requiresWindow(cb: (win: Window) => void) {
2 | if (typeof window !== "undefined") {
3 | return cb(window);
4 | }
5 | }
6 |
7 | function usesWindow(cb: (win?: Window) => T) {
8 | return cb(typeof window !== "undefined" ? window : undefined);
9 | }
10 |
11 | export { requiresWindow, usesWindow };
12 |
--------------------------------------------------------------------------------
/src/ui/utils/formatEstimatedProcessingDuration.ts:
--------------------------------------------------------------------------------
1 | import prettyMilliseconds from "pretty-ms";
2 |
3 | const MS_IN_MINUTE = 60_000;
4 |
5 | export function formatEstimatedProcessingDuration(ms: number) {
6 | const minutes = Math.ceil(ms / MS_IN_MINUTE) || 1;
7 | return prettyMilliseconds(minutes * MS_IN_MINUTE, { verbose: true });
8 | }
9 |
--------------------------------------------------------------------------------
/public/images/f.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/test/examples/doc_minified.html:
--------------------------------------------------------------------------------
1 | Hello World!
--------------------------------------------------------------------------------
/src/devtools/client/inspector/rules/components/value/Url.tsx:
--------------------------------------------------------------------------------
1 | interface UrlProps {
2 | href: string;
3 | value: string;
4 | }
5 |
6 | export default function Url({ href, value }: UrlProps) {
7 | return (
8 |
9 | {value}
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/shared/Dropdown.d.ts:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 |
3 | interface DropdownProps {
4 | panel: React.ReactNode;
5 | icon: React.ReactNode;
6 | panelStyles: React.CSSProperties;
7 | }
8 |
9 | export class Dropdown extends Component {}
10 | export default Dropdown;
11 |
--------------------------------------------------------------------------------
/src/ui/components/shared/AppContainerPortal.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 | import { createPortal } from "react-dom";
3 |
4 | export default function AppContainerPortal({ children }: { children: ReactNode }) {
5 | const containerNode = document.querySelector("#app-container")!;
6 | return createPortal(children, containerNode);
7 | }
8 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/cra/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 |
4 | import App from "./App";
5 | import "./index.css";
6 |
7 | const root = ReactDOM.createRoot(document.getElementById("root"));
8 | root.render(
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/prod_bundle/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | context: __dirname,
5 | entry: "./bundle_input.js",
6 | output: {
7 | filename: "prod_bundle.js",
8 | path: path.resolve(__dirname, "dist"),
9 | },
10 | devtool: "source-map",
11 | mode: "production",
12 | };
13 |
--------------------------------------------------------------------------------
/test/examples/node/exceptions.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | function finished() {
4 | process.exit(0);
5 | }
6 | let number = 0;
7 | setTimeout(foo, 0);
8 | function foo() {
9 | try {
10 | bar();
11 | } catch (e) {}
12 | setTimeout(number == 10 ? recordingFinished : foo, 0);
13 | }
14 | function bar() {
15 | number++;
16 | throw { number };
17 | }
18 |
--------------------------------------------------------------------------------
/packages/design/svgs/person.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/mentions/isExactMatch.ts:
--------------------------------------------------------------------------------
1 | import { Collaborator } from "./types";
2 |
3 | export default function isExactMatch(query: string, collaborator: Collaborator): boolean {
4 | // Strip the "@" prefix off of the query before searching.
5 | query = query.slice(1);
6 |
7 | return collaborator.name === query;
8 | }
9 |
--------------------------------------------------------------------------------
/src/ui/components/SecondaryToolbox/ReactDevTools.module.css:
--------------------------------------------------------------------------------
1 | .Messages {
2 | display: flex;
3 | flex-direction: column;
4 | gap: 1rem;
5 | text-align: center;
6 | }
7 |
8 | .Message {
9 | color: var(--color-dim);
10 | transition: height 0.3s;
11 | }
12 |
13 | .DiscordLink {
14 | text-decoration: underline;
15 | cursor: pointer;
16 | }
17 |
--------------------------------------------------------------------------------
/packages/design/Badge/Badge.module.css:
--------------------------------------------------------------------------------
1 | .Badge {
2 | display: inline-block;
3 | padding: 0 0.25rem;
4 | border-radius: 0.25rem;
5 | font-size: var(--font-size-small);
6 | background-color: var(--theme-menu-highlight);
7 | }
8 |
9 | .Badge[data-error] {
10 | background-color: var(--background-color-error);
11 | color: var(--color-error);
12 | }
13 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_minified/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | context: __dirname,
5 | entry: "./bundle_input.js",
6 | output: {
7 | filename: "mapped_minified.js",
8 | path: path.resolve(__dirname, "dist"),
9 | },
10 | devtool: "source-map",
11 | mode: "development",
12 | };
13 |
--------------------------------------------------------------------------------
/packages/replay-next/src/contexts/GraphQLClientContext.tsx:
--------------------------------------------------------------------------------
1 | import { createContext } from "react";
2 |
3 | import { GraphQLClientInterface, graphQLClient } from "shared/graphql/GraphQLClient";
4 |
5 | export type GraphQLClientContextType = GraphQLClientInterface;
6 |
7 | export const GraphQLClientContext = createContext(graphQLClient);
8 |
--------------------------------------------------------------------------------
/public/test/examples/prod_bundle.js:
--------------------------------------------------------------------------------
1 | (()=>{function o(){const o={barprop1:2,barprop2:3,nested:{nestedprop1:4}},n=[5,6,o];var t;return console.log(o),t=n,o.barprop1="updated",t.push("new"),console.log(o),setTimeout(e,500),n}function e(){console.log("ExampleFinished")}setTimeout((function(){console.log(o())}),0),window.bar=o})();
2 | //# sourceMappingURL=prod_bundle.js.map
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/login.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Forms/Radio.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Radio(overrides: React.HTMLProps) {
4 | return (
5 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/packages/design/svgs/calendar.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/exceptions_bundle/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | context: __dirname,
5 | entry: "./bundle_input.js",
6 | output: {
7 | filename: "exceptions_bundle.js",
8 | path: path.resolve(__dirname, "./dist"),
9 | },
10 | devtool: "source-map",
11 | mode: "development",
12 | };
13 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/tests/playwright-example.test.ts:
--------------------------------------------------------------------------------
1 | import { Locator, Page, expect, test } from '@playwright/test'
2 |
3 | import testFunction from './example-script'
4 |
5 | test('Basic todo app mouse and keyboard interactions', async ({ page }) => {
6 | await page.goto('http://localhost:5173')
7 | await testFunction(page, expect)
8 | })
9 |
--------------------------------------------------------------------------------
/src/ui/components/Comments/CommentDropDownMenu.module.css:
--------------------------------------------------------------------------------
1 | .Button {
2 | background: none;
3 | border: none;
4 | outline: none;
5 | flex: 0 0 1rem;
6 | cursor: pointer;
7 | }
8 |
9 | .Icon {
10 | height: 1rem;
11 | width: 1rem;
12 | }
13 | .Icon[data-selected] {
14 | color: var(--color-link);
15 | }
16 |
17 | .Checkbox {
18 | gap: 1ch;
19 | }
20 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/mentions/utils/$isMentionsTextNode.ts:
--------------------------------------------------------------------------------
1 | import { LexicalNode } from "lexical";
2 |
3 | import MentionsTextNode from "../MentionsTextNode";
4 |
5 | export default function $isMentionsTextNode(
6 | node: LexicalNode | null | undefined
7 | ): node is MentionsTextNode {
8 | return node instanceof MentionsTextNode;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/replay-next/src/contexts/LayoutContext.tsx:
--------------------------------------------------------------------------------
1 | import { createContext } from "react";
2 |
3 | export type LayoutContextType = {
4 | // whether console and sources can be shown at the same time
5 | canShowConsoleAndSources: boolean;
6 | };
7 |
8 | export const LayoutContext = createContext({
9 | canShowConsoleAndSources: true,
10 | });
11 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: GitHub Discussions
4 | url: https://github.com/RecordReplay/devtools/discussions
5 | about: Share product feedback, feature requests, ask questions
6 | - name: Discord Community
7 | url: https://discord.gg/hw3eDwvChz
8 | about: Stop by if you would like to discuss Replay
9 |
--------------------------------------------------------------------------------
/packages/e2e-tests/helpers/types.ts:
--------------------------------------------------------------------------------
1 | export type Expected = string | boolean | number;
2 |
3 | // TODO [FE-626] Would be nice to share this type with the production Console renderers
4 | export type MessageType =
5 | | "console-error"
6 | | "console-log"
7 | | "console-warning"
8 | | "event"
9 | | "exception"
10 | | "log-point"
11 | | "terminal-expression";
12 |
--------------------------------------------------------------------------------
/packages/shared/utils/url.ts:
--------------------------------------------------------------------------------
1 | export function getFlag(flagName: string): string | null {
2 | if (typeof window !== "undefined") {
3 | const url = new URL(window.location.href);
4 | return url.searchParams.get(flagName);
5 | }
6 | return null;
7 | }
8 |
9 | export function hasFlag(flagName: string): boolean {
10 | return getFlag(flagName) !== null;
11 | }
12 |
--------------------------------------------------------------------------------
/public/images/comment-onboarding-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react15/assets/__federation_expose_AppInjector-7dddba10.js:
--------------------------------------------------------------------------------
1 | import{R as e,j as n,a as o}from"./App-74b00b74.js";const s=t=>e.render(n.jsx(o,{}),document.getElementById(t)),c=t=>e.unmountComponentAtNode(document.getElementById(t));export{s as inject,c as unmount};
2 | //# sourceMappingURL=__federation_expose_AppInjector-7dddba10.js.map
3 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react16/assets/__federation_expose_AppInjector-f0210664.js:
--------------------------------------------------------------------------------
1 | import{R as e,j as n,a as o}from"./App-52499ea0.js";const s=t=>e.render(n.jsx(o,{}),document.getElementById(t)),c=t=>e.unmountComponentAtNode(document.getElementById(t));export{s as inject,c as unmount};
2 | //# sourceMappingURL=__federation_expose_AppInjector-f0210664.js.map
3 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react17/assets/__federation_expose_AppInjector-3adc3cc9.js:
--------------------------------------------------------------------------------
1 | import{R as e,j as n,a as o}from"./App-ba7ddcc9.js";const s=t=>e.render(n.jsx(o,{}),document.getElementById(t)),c=t=>e.unmountComponentAtNode(document.getElementById(t));export{s as inject,c as unmount};
2 | //# sourceMappingURL=__federation_expose_AppInjector-3adc3cc9.js.map
3 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/TestRecording/TestRecordingEvents/NavigationEventRow.module.css:
--------------------------------------------------------------------------------
1 | .Indented {
2 | padding-left: 1rem;
3 | }
4 | .Text {
5 | flex: 1;
6 | color: var(--color-dim);
7 | }
8 |
9 | .Name {
10 | flex: 0 1 auto;
11 | overflow: hidden;
12 | text-overflow: ellipsis;
13 | word-break: break-all;
14 | color: var(--color-link);
15 | }
16 |
--------------------------------------------------------------------------------
/src/ui/components/Timeline/LoadingProgressBars.module.css:
--------------------------------------------------------------------------------
1 | .LoadingRegion,
2 | .IndexedAndLoadedRegion {
3 | position: absolute;
4 | height: 5px;
5 | }
6 |
7 | .LoadingRegion {
8 | background-color: var(--focus-mode-loading-color);
9 | width: 100%;
10 | }
11 |
12 | .IndexedAndLoadedRegion {
13 | background-color: var(--focus-mode-loaded-indexed-color);
14 | }
15 |
--------------------------------------------------------------------------------
/public/test/examples/doc_async_stack.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Hello World!
4 |
5 |
13 |
14 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Base64Image.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Base64Image({
4 | src,
5 | format,
6 | ...rest
7 | }: React.ImgHTMLAttributes & { format?: string | null }) {
8 | if (!src || !format) {
9 | return null;
10 | }
11 |
12 | return ;
13 | }
14 |
--------------------------------------------------------------------------------
/packages/design/svgs/delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/ui/components/SecondaryToolbox/react-devtools/components/Badge.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 |
3 | import styles from "./Badge.module.css";
4 |
5 | export function Badge({ children, title = children }: { children: string; title?: string }) {
6 | return (
7 |
8 | {children}
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/components/LabeledIcon.module.css:
--------------------------------------------------------------------------------
1 | .LabeledIcon {
2 | display: inline-flex;
3 | align-items: center;
4 | gap: 1ch;
5 | overflow: hidden;
6 | }
7 |
8 | .Icon {
9 | width: 1rem;
10 | height: 1rem;
11 | }
12 |
13 | .Label {
14 | overflow: hidden;
15 | text-overflow: ellipsis;
16 | word-break: break-all;
17 | white-space: nowrap;
18 | }
19 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Dialog.css:
--------------------------------------------------------------------------------
1 | .dialog {
2 | border-radius: 8px;
3 | background: #fff;
4 | color: #38383d;
5 | border-radius: 8px;
6 | box-shadow: 0px 20px 25px -5px rgba(0, 0, 0, 0.1), 0px 10px 10px -5px rgba(0, 0, 0, 0.04);
7 | height: max-content;
8 | padding: 8px;
9 | padding-bottom: 32px;
10 | width: max-content;
11 | backdrop-filter: blur(8px);
12 | }
13 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | src/devtools/client/debugger/**/fixtures/**
2 | node_modules
3 | src/devtools/client/shared/vendor/
4 | src/devtools/client/shared/sourceeditor/codemirror
5 | packages/third-party/
6 | public/test/examples
7 | packages/accordion/website/
8 | packages/shared/graphql/generated
9 | **/*.config.js
10 | **/.eslintrc*
11 | **/*.d.ts
12 | src/ui/components/SecondaryToolbox/**/*.raw.js
--------------------------------------------------------------------------------
/packages/replay-next/components/search-files/ResultsList.module.css:
--------------------------------------------------------------------------------
1 | .Results,
2 | .ResultsPending {
3 | flex: 1 1 auto;
4 | display: flex;
5 | flex-direction: column;
6 | cursor: default;
7 | user-select: none;
8 | transition-duration: 200ms;
9 | }
10 | .ResultsPending {
11 | opacity: 0.5;
12 | }
13 |
14 | .List {
15 | overflow: hidden;
16 | flex: 1 1 auto;
17 | }
18 |
--------------------------------------------------------------------------------
/public/test/examples/cra/dist/static/css/main.e6c13ad2.css:
--------------------------------------------------------------------------------
1 | body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}
2 | /*# sourceMappingURL=main.e6c13ad2.css.map*/
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/trash.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/packages/playwright-recorder/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "strict": true,
5 | "target": "ES2022",
6 | "lib": ["es2023"],
7 | "moduleResolution": "Node",
8 | "downlevelIteration": true,
9 | "esModuleInterop": true,
10 | "resolveJsonModule": true,
11 | "rootDir": "./src",
12 | "outDir": "./dist",
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/arrow-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/ui/utils/awaitWithTimeout.ts:
--------------------------------------------------------------------------------
1 | export const AwaitTimeout = Symbol("await-timeout");
2 | export async function awaitWithTimeout(
3 | promise: PromiseLike,
4 | timeout = 500
5 | ): Promise {
6 | return Promise.race([
7 | new Promise(resolve => setTimeout(() => resolve(AwaitTimeout), timeout)),
8 | promise,
9 | ]);
10 | }
11 |
--------------------------------------------------------------------------------
/packages/playwright-recorder/src/config.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | backendUrl: process.env.DISPATCH_ADDRESS || "wss://dispatch.replay.io",
3 | graphqlUrl: process.env.GRAPHQL_ADDRESS || "https://api.replay.io/v1/graphql",
4 | browserPath: process.env.RECORD_REPLAY_PATH,
5 | driverPath: process.env.RECORD_REPLAY_DRIVER,
6 | headless: process.env.RECORD_REPLAY_PLAYWRIGHT_HEADLESS != "false",
7 | };
8 |
--------------------------------------------------------------------------------
/packages/replay-next/components/PanelLoader.module.css:
--------------------------------------------------------------------------------
1 | .Wrapper {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | justify-content: center;
6 | height: 100%;
7 | color: var(--color-dimmer);
8 | }
9 |
10 | .Loader {
11 | flex: 1 1 auto;
12 | display: flex;
13 | flex-direction: column;
14 | align-items: center;
15 | justify-content: center;
16 | }
17 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/code-completion/types.ts:
--------------------------------------------------------------------------------
1 | import type { Spread } from "lexical";
2 | import { SerializedTextNode } from "lexical";
3 |
4 | export type SerializedCodeCompletionTextNode = Spread<
5 | {
6 | text: string;
7 | type: "code-completion-item";
8 | version: 1;
9 | },
10 | SerializedTextNode
11 | >;
12 |
13 | export type Match = string;
14 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/arrow-up-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/ui/components/reactjs-popup.css:
--------------------------------------------------------------------------------
1 | #popup-root .popup-content {
2 | background: var(--theme-popup-color);
3 | color: var(--theme-popup-background-color);
4 | font-family: "Inter", sans-serif;
5 | font-size: 12px;
6 | width: auto;
7 | padding: 8px 12px;
8 | border: none;
9 | }
10 |
11 | #popup-root .popup-arrow {
12 | color: var(--theme-popup-color);
13 | filter: none;
14 | }
15 |
--------------------------------------------------------------------------------
/src/ui/graphql/sessions.ts:
--------------------------------------------------------------------------------
1 | import { gql } from "@apollo/client";
2 |
3 | export const GET_ACTIVE_SESSIONS = gql`
4 | query GetActiveSessions($recordingId: UUID!) {
5 | recording(uuid: $recordingId) {
6 | uuid
7 | activeSessions {
8 | id
9 | user {
10 | id
11 | name
12 | picture
13 | }
14 | }
15 | }
16 | }
17 | `;
18 |
--------------------------------------------------------------------------------
/packages/design/svgs/key.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/prod_bundle/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 |
4 | .yarn/*
5 | !.yarn/patches
6 | !.yarn/plugins
7 | !.yarn/releases
8 | !.yarn/sdks
9 | !.yarn/versions
10 |
11 | # Swap the comments on the following lines if you don't wish to use zero-installs
12 | # Documentation here: https://yarnpkg.com/features/zero-installs
13 | #!.yarn/cache
14 | #.pnp.*
15 |
16 | ./bundle_input.js
--------------------------------------------------------------------------------
/packages/replay-next/components/inspector/values/types.ts:
--------------------------------------------------------------------------------
1 | import {
2 | Object as ProtocolObject,
3 | PauseId as ProtocolPauseId,
4 | Value as ProtocolValue,
5 | } from "@replayio/protocol";
6 |
7 | export type ObjectPreviewRendererProps = {
8 | context: "console" | "default" | "nested";
9 | object: ProtocolObject;
10 | pauseId: ProtocolPauseId;
11 | protocolValue: ProtocolValue;
12 | };
13 |
--------------------------------------------------------------------------------
/packages/shared/utils/points.ts:
--------------------------------------------------------------------------------
1 | import { Point } from "shared/client/types";
2 |
3 | export function isValidPoint(maybePoint: unknown): maybePoint is Point {
4 | return (
5 | typeof maybePoint === "object" &&
6 | maybePoint !== null &&
7 | maybePoint.hasOwnProperty("badge") &&
8 | maybePoint.hasOwnProperty("condition") &&
9 | maybePoint.hasOwnProperty("content")
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/public/images/k.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/arrow-down-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/ui/components/SecondaryToolbox/react-devtools/components/ContextPropsStateRenderer.module.css:
--------------------------------------------------------------------------------
1 | .PropertyName {
2 | color: var(--object-inspector-expanded-key);
3 | }
4 | .PropertyName[data-changed] {
5 | background-color: var(--background-color-highlight-change);
6 | color: var(--color-highlight-change);
7 | }
8 |
9 | .Separator {
10 | color: var(--object-inspector-separator-color);
11 | }
12 |
--------------------------------------------------------------------------------
/src/ui/state/reactDevTools.ts:
--------------------------------------------------------------------------------
1 | import { ExecutionPoint } from "@replayio/protocol";
2 |
3 | export interface Annotation {
4 | point: ExecutionPoint;
5 | time: number;
6 | message: any;
7 | }
8 |
9 | export interface ReactDevToolsState {
10 | annotations: Annotation[];
11 | hasReactComponents: boolean;
12 | reactInitPoint: ExecutionPoint | null;
13 | protocolCheckFailed: boolean;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/exceptions_bundle/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 |
4 | .yarn/*
5 | !.yarn/patches
6 | !.yarn/plugins
7 | !.yarn/releases
8 | !.yarn/sdks
9 | !.yarn/versions
10 |
11 | # Swap the comments on the following lines if you don't wish to use zero-installs
12 | # Documentation here: https://yarnpkg.com/features/zero-installs
13 | #!.yarn/cache
14 | #.pnp.*
15 |
16 | ./bundle_input.js
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_minified/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 |
4 | .yarn/*
5 | !.yarn/patches
6 | !.yarn/plugins
7 | !.yarn/releases
8 | !.yarn/sdks
9 | !.yarn/versions
10 |
11 | # Swap the comments on the following lines if you don't wish to use zero-installs
12 | # Documentation here: https://yarnpkg.com/features/zero-installs
13 | #!.yarn/cache
14 | #.pnp.*
15 |
16 | ./bundle_input.js
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_styles/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 |
4 | .yarn/*
5 | !.yarn/patches
6 | !.yarn/plugins
7 | !.yarn/releases
8 | !.yarn/sdks
9 | !.yarn/versions
10 |
11 | # Swap the comments on the following lines if you don't wish to use zero-installs
12 | # Documentation here: https://yarnpkg.com/features/zero-installs
13 | #!.yarn/cache
14 | #.pnp.*
15 |
16 | ./bundle_input.js
--------------------------------------------------------------------------------
/packages/replay-next/components/AvatarImage.module.css:
--------------------------------------------------------------------------------
1 | .Image {
2 | background-color: var(--theme-base-85);
3 | }
4 |
5 | .Name {
6 | background-color: var(--background-color-contrast-3);
7 | color: var(--color-default);
8 | border-radius: 100%;
9 | font-size: var(--font-size-tiny);
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | overflow: hidden;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/utils/classNameToTokenTypes.ts:
--------------------------------------------------------------------------------
1 | import { TokenType } from "../../lexical/plugins/code/types";
2 |
3 | export default function classNameToTokenTypes(className: string): TokenType[] {
4 | // e.g. "tok-comment" -> ["comment"]
5 | // e.g. "tok-variable tok-definition" -> ["variable", "definition"]
6 | return className.split(" ").map(name => name.slice(4) as TokenType);
7 | }
8 |
--------------------------------------------------------------------------------
/packages/design/svgs/trash.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/playwright-recorder/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@devtools-repo/playwright-recorder",
3 | "private": true,
4 | "version": "0.0.0",
5 | "main": "./dist/index.js",
6 | "dependencies": {
7 | "@playwright/test": "^1.37.0",
8 | "@replayio/replay": "^0.22.4",
9 | "axios": "^0.21.1",
10 | "chalk": "^4",
11 | "strip-ansi": "^6.0.0"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/packages/design/Badge/index.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 |
3 | import styles from "./Badge.module.css";
4 |
5 | export function Badge({
6 | label,
7 | showErrorBadge = false,
8 | }: {
9 | label: ReactNode;
10 | showErrorBadge?: boolean;
11 | }) {
12 | return (
13 |
14 | {label}
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/dropmarker.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/SecondaryToolbox/react-devtools/components/Badge.module.css:
--------------------------------------------------------------------------------
1 | .Badge {
2 | background: var(--background-color-current-execution-point);
3 | color: var(--value-type-html-tag);
4 | font-family: var(--font-family-default);
5 | font-size: var(--font-size-tiny);
6 | padding: 0 0.25rem;
7 | border-radius: 0.25rem;
8 | margin-left: 1ch;
9 | height: 0.8rem;
10 | line-height: 0.8rem;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/replay-next/components/ExternalLink.tsx:
--------------------------------------------------------------------------------
1 | import React, { AnchorHTMLAttributes, ReactNode } from "react";
2 |
3 | export default function ExternalLink({
4 | children,
5 | ...props
6 | }: Omit, "target" | "rel"> & { children: ReactNode }) {
7 | return (
8 |
9 | {children}
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/packages/replay-next/components/Spinner.module.css:
--------------------------------------------------------------------------------
1 | .Spinner {
2 | width: 1rem;
3 | height: 1rem;
4 | color: var(--color-dim);
5 | animation: spin 1s linear infinite;
6 | }
7 |
8 | .Circle {
9 | opacity: 0.2;
10 | }
11 |
12 | .Path {
13 | opacity: 0.85;
14 | }
15 |
16 | @keyframes spin {
17 | from {
18 | transform: rotate(0deg);
19 | }
20 | to {
21 | transform: rotate(360deg);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/filters/FilterText.module.css:
--------------------------------------------------------------------------------
1 | .Input {
2 | flex: 1;
3 | height: 1.25rem;
4 | background-color: var(--background-color-inputs);
5 | color: var(--color-default);
6 | padding: 0 0.25rem;
7 | margin: 0.25rem;
8 | border: 2px solid transparent;
9 | border-radius: 0.25rem;
10 | outline: none;
11 | }
12 | .Input:focus {
13 | border-color: var(--primary-accent);
14 | }
15 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/utils/clipboard.ts:
--------------------------------------------------------------------------------
1 | export function copyToClipboard(text: string): void {
2 | const doCopy = function (event: ClipboardEvent) {
3 | event.clipboardData?.setData("text/plain", text);
4 | event.preventDefault();
5 | };
6 |
7 | document.addEventListener("copy", doCopy);
8 | document.execCommand("copy", false);
9 | document.removeEventListener("copy", doCopy);
10 | }
11 |
--------------------------------------------------------------------------------
/packages/e2e-tests/scripts/aws_secrets.ts:
--------------------------------------------------------------------------------
1 | /* Copyright 2024 Record Replay Inc. */
2 |
3 | import { execSync } from "child_process";
4 |
5 | export function getSecret(key: string, region: string) {
6 | return execSync(
7 | `aws secretsmanager get-secret-value --secret-id "${key}" --region ${region} --output json --query "SecretString"`
8 | )
9 | .toString()
10 | .trim()
11 | .replace(/"/g, "");
12 | }
13 |
--------------------------------------------------------------------------------
/packages/e2e-tests/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "target": "es2018",
5 | "moduleResolution": "Node",
6 | "downlevelIteration": true,
7 | "esModuleInterop": true,
8 | "resolveJsonModule": true,
9 | "types": ["cypress", "node"],
10 | "paths": {
11 | "@devtools-repo/playwright-recorder": ["../playwright-recorder/src/index.ts"],
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/public/images/dotted-mask-dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/public/images/dotted-mask-light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/public/images/timer.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/docs/codebase-notes/README.md:
--------------------------------------------------------------------------------
1 | # Codebase Structure Running Notes
2 |
3 | I'm taking some general notes on the structure of the codebase as it currently exists (2022-03) and adding them here for reference.
4 |
5 | These may very quickly get outdated depending on how we continue doing cleaning up and refactoring, but hopefully this can both help with the refactoring process and serve as a guide to what's going on inside the codebase atm.
6 |
--------------------------------------------------------------------------------
/packages/shared/theme/useTheme.ts:
--------------------------------------------------------------------------------
1 | import { getSystemColorScheme } from "shared/theme/getSystemColorScheme";
2 | import { useGraphQLUserData } from "shared/user-data/GraphQL/useGraphQLUserData";
3 |
4 | export function useTheme(): "dark" | "light" {
5 | const [theme] = useGraphQLUserData("global_theme");
6 | if (theme === "system") {
7 | return getSystemColorScheme();
8 | } else {
9 | return theme;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/scripts/perf-analysis/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "target": "ES2022",
5 | "lib": ["es2023"],
6 | "moduleResolution": "Node",
7 | "downlevelIteration": true,
8 | "esModuleInterop": true,
9 | "resolveJsonModule": true,
10 | "paths": {
11 | "@devtools-repo/playwright-recorder": ["../../packages/playwright-recorder/src/index.ts"],
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/sort-ascending-arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/sort-descending-arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/test/examples/doc_exceptions.html:
--------------------------------------------------------------------------------
1 | Hello World!
2 |
19 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/document.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/selectors/index.ts:
--------------------------------------------------------------------------------
1 | export * from "../reducers/tabs";
2 | export * from "../reducers/pause";
3 | export * from "../reducers/threads";
4 | export * from "../reducers/ui";
5 | export * from "../reducers/ast";
6 | export * from "../reducers/source-tree";
7 | export * from "../reducers/preview";
8 |
9 | export * from "../reducers/quick-open";
10 |
11 | export { getSelectedFrameSuspense } from "./pause";
12 |
--------------------------------------------------------------------------------
/src/ui/components/UploadScreen/ExpiredWorkspaces.module.css:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | position: absolute;
3 | top: -4rem;
4 | background-color: #fffbd2;
5 | color: #6e4400;
6 | border: 1px solid #f7ea9c;
7 | border-radius: 0.5rem;
8 | padding: 0.5rem 1rem;
9 | cursor: default;
10 | }
11 |
12 | .warning {
13 | font-weight: bold;
14 | }
15 |
16 | .wrapper a {
17 | margin-left: 0.3rem;
18 | text-decoration: underline;
19 | }
20 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: New Issue
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Description:**
11 |
12 |
13 | **Steps to Reproduce:**
14 |
15 |
16 | **Expected Result:**
17 |
18 | **Additional Context:**
19 |
20 | * Screenshots:
21 | * Video (Loom):
22 | * Replay ([replay.io/record-bugs](https://replay.io/record-bugs) for instructions):
23 |
--------------------------------------------------------------------------------
/.github/workflows/mirror.yml:
--------------------------------------------------------------------------------
1 | on:
2 | push:
3 | branches:
4 | - 'main'
5 |
6 | jobs:
7 | mirror_job:
8 | runs-on: ubuntu-latest
9 | name: Mirror main branch to staging branch
10 | steps:
11 | - name: Mirror action step
12 | id: mirror
13 | uses: google/mirror-branch-action@v1.0
14 | with:
15 | github-token: ${{ secrets.GITHUB_TOKEN }}
16 | source: 'main'
17 | dest: 'staging'
--------------------------------------------------------------------------------
/public/test/examples/doc_recursion.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Hello World!
4 |
5 |
18 |
19 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/animation-fast-track.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/src/exampleAddons/middleware.js:
--------------------------------------------------------------------------------
1 | export const print1 = (storeAPI) => (next) => (action) => {
2 | console.log('1')
3 | return next(action)
4 | }
5 |
6 | export const print2 = (storeAPI) => (next) => (action) => {
7 | console.log('2')
8 | return next(action)
9 | }
10 |
11 | export const print3 = (storeAPI) => (next) => (action) => {
12 | console.log('3')
13 | return next(action)
14 | }
15 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/mentions/types.ts:
--------------------------------------------------------------------------------
1 | import type { Spread } from "lexical";
2 | import { SerializedTextNode } from "lexical";
3 |
4 | export type Collaborator = {
5 | id: string;
6 | name: string;
7 | };
8 |
9 | export type SerializedMentionsTextNode = Spread<
10 | {
11 | id: string;
12 | name: string;
13 | type: "mentions-item";
14 | version: 1;
15 | },
16 | SerializedTextNode
17 | >;
18 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/shared/Badge.js:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 | import React from "react";
7 |
8 | const Badge = ({ children }) => {children} ;
9 |
10 | export default Badge;
11 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/grid.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/graphql/utils.ts:
--------------------------------------------------------------------------------
1 | import { ApolloError } from "@apollo/client";
2 |
3 | export function getBackendErrorMessage(err: ApolloError) {
4 | const networkError = err.networkError as any;
5 |
6 | // The apollo client doesn't expose the network error details via its type
7 | // so we're cautiously walking down the object to see if the backend threw
8 | // a specific error
9 | return networkError?.result?.errors?.[0]?.message;
10 | }
11 |
--------------------------------------------------------------------------------
/packages/design/svgs/file.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-vite/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/public/test/examples/doc_events.html:
--------------------------------------------------------------------------------
1 |
2 | Hello World!
3 |
19 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/shared/Button/index.js:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 |
7 | import CloseButton from "./CloseButton";
8 | import CommandBarButton from "./CommandBarButton";
9 |
10 | export { CloseButton, CommandBarButton };
11 |
--------------------------------------------------------------------------------
/src/ui/components/Toolbox.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import DebuggerApp from "devtools/client/debugger/src/components/App";
4 |
5 | export default function Toolbox() {
6 | return (
7 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-15-app/src/appInjector.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 |
4 | import App from "./App";
5 |
6 | export const inject = (parentElementId: string) =>
7 | ReactDOM.render( , document.getElementById(parentElementId)!);
8 |
9 | export const unmount = (parentElementId: string) =>
10 | ReactDOM.unmountComponentAtNode(document.getElementById(parentElementId)!);
11 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-16-app/src/appInjector.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 |
4 | import App from "./App";
5 |
6 | export const inject = (parentElementId: string) =>
7 | ReactDOM.render( , document.getElementById(parentElementId)!);
8 |
9 | export const unmount = (parentElementId: string) =>
10 | ReactDOM.unmountComponentAtNode(document.getElementById(parentElementId)!);
11 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-17-app/src/appInjector.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 |
4 | import App from "./App";
5 |
6 | export const inject = (parentElementId: string) =>
7 | ReactDOM.render( , document.getElementById(parentElementId)!);
8 |
9 | export const unmount = (parentElementId: string) =>
10 | ReactDOM.unmountComponentAtNode(document.getElementById(parentElementId)!);
11 |
--------------------------------------------------------------------------------
/packages/replay-next/components/errors/ReportProblemLink.module.css:
--------------------------------------------------------------------------------
1 | .Flex {
2 | display: inline-flex;
3 | flex-direction: row;
4 | align-items: center;
5 | gap: 0.25rem;
6 | }
7 |
8 | .Icon {
9 | width: 1.75ch;
10 | height: 1.75ch;
11 | color: var(--color-link);
12 | }
13 |
14 | .Link {
15 | text-decoration: underline;
16 | color: var(--color-link);
17 | cursor: pointer;
18 | }
19 | .Link:hover {
20 | text-decoration: none;
21 | }
22 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/SourceList.module.css:
--------------------------------------------------------------------------------
1 | .List {
2 | overscroll-behavior: none;
3 | }
4 |
5 | .List > div {
6 | /**
7 | * Each row should grow as much as needed to fit its code/content.
8 | * The parent list will measure rows after render and adjust the min-width of the list.
9 | * This prevents horizontal scrolling from jumping as new rows are rendered.
10 | */
11 | width: var(--longest-line-width) !important;
12 | }
13 |
--------------------------------------------------------------------------------
/packages/shared/client/ReplayClientContext.tsx:
--------------------------------------------------------------------------------
1 | import { createContext } from "react";
2 |
3 | import { createReplayClientForProduction } from "shared/utils/client";
4 |
5 | import { ReplayClientInterface } from "./types";
6 |
7 | export type ReplayClientContextType = ReplayClientInterface;
8 |
9 | export const replayClient = createReplayClientForProduction();
10 | export const ReplayClientContext = createContext(replayClient);
11 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/document-text.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/ui/components/Avatar.module.css:
--------------------------------------------------------------------------------
1 | .avatar {
2 | display: flex;
3 | align-items: center;
4 | }
5 |
6 | .avatar:not(.authenticated) {
7 | height: 24px;
8 | width: 24px;
9 | border-radius: 50%;
10 | box-shadow: 0 0 0 2px var(--chrome);
11 | overflow: hidden;
12 | }
13 |
14 | .avatar:not(.authenticated):not(:last-child) {
15 | margin-left: -10px;
16 | }
17 |
18 | .avatar.firstPlayer img {
19 | height: 24px;
20 | width: 24px;
21 | }
22 |
--------------------------------------------------------------------------------
/src/ui/utils/thunk.ts:
--------------------------------------------------------------------------------
1 | import { ProtocolClient } from "@replayio/protocol";
2 |
3 | import type { objectCache } from "replay-next/src/suspense/ObjectPreviews";
4 | import { ReplayClientInterface } from "shared/client/types";
5 |
6 | export interface ThunkExtraArgs {
7 | replayClient: ReplayClientInterface;
8 | protocolClient: ProtocolClient;
9 | objectCache: typeof objectCache;
10 | }
11 |
12 | export const extraThunkArgs = {} as ThunkExtraArgs;
13 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/cra/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/SourceLineLoadingPlaceholder.tsx:
--------------------------------------------------------------------------------
1 | import { useMemo } from "react";
2 |
3 | import styles from "./SourceLineLoadingPlaceholder.module.css";
4 |
5 | export default function SourceLineLoadingPlaceholder() {
6 | const width = useMemo(() => Math.round(5 + Math.random() * 30), []);
7 |
8 | return (
9 |
10 |
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/public/test/examples/doc_events_chromium.html:
--------------------------------------------------------------------------------
1 |
2 | Hello World!
3 |
19 |
--------------------------------------------------------------------------------
/src/devtools/client/inspector/computed/components/ComputedApp.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import ComputedProperties from "./ComputedProperties";
4 | import ComputedToolbar from "./ComputedToolbar";
5 |
6 | export default function ComputedApp() {
7 | return (
8 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/.github/workflows/nightly.yaml:
--------------------------------------------------------------------------------
1 | name: Nightly
2 | on:
3 | schedule:
4 | - cron: 0 8 * * 1-5
5 | workflow_dispatch:
6 |
7 | jobs:
8 | trunk_check:
9 | name: Trunk Check Upload
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - name: Checkout
14 | uses: actions/checkout@v4
15 |
16 | - name: Trunk Check
17 | uses: trunk-io/trunk-action@v1.1.19
18 | with:
19 | trunk-token: ${{ secrets.TRUNK_TOKEN }}
20 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_minified/bundle_input.js:
--------------------------------------------------------------------------------
1 | function z(n){return n;}z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);z(100);
2 |
--------------------------------------------------------------------------------
/packages/shared/user-data/GraphQL/queries.ts:
--------------------------------------------------------------------------------
1 | import { gql } from "@apollo/client";
2 |
3 | export const GET_USER_PREFERENCES = gql`
4 | query GetUserPreferences {
5 | viewer {
6 | preferences
7 | }
8 | }
9 | `;
10 |
11 | export const UPDATE_USER_PREFERENCES = gql`
12 | mutation UpdateUserPreferences($preferences: JSONObject!) {
13 | updateUserPreferences(input: { preferences: $preferences }) {
14 | success
15 | }
16 | }
17 | `;
18 |
--------------------------------------------------------------------------------
/public/icons/video.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/rewind-button.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/window.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/add.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/CommandPalette/CommandPalette.module.css:
--------------------------------------------------------------------------------
1 | .commandPaletteWrapper {
2 | max-width: 400px;
3 | min-width: 280px;
4 | background-color: var(--theme-base-100);
5 | color: var(--body-color);
6 | }
7 |
8 | .commandPallete {
9 | border-bottom: 1px solid var(--theme-base-85);
10 | }
11 |
12 | .shortcut:hover {
13 | background-color: var(--theme-base-90);
14 | }
15 |
16 | .shortcutHover {
17 | background-color: var(--theme-base-90);
18 | }
19 |
--------------------------------------------------------------------------------
/src/ui/hooks/comments/index.ts:
--------------------------------------------------------------------------------
1 | import * as comments from "./comments";
2 | import useAddComment from "./useAddComment";
3 | import useAddCommentReply from "./useAddCommentReply";
4 | import useDeleteComment from "./useDeleteComment";
5 | import useDeleteCommentReply from "./useDeleteCommentReply";
6 |
7 | export const commentsHooks = {
8 | ...comments,
9 | useAddComment,
10 | useAddCommentReply,
11 | useDeleteComment,
12 | useDeleteCommentReply,
13 | };
14 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/utils/getBadgeStyleVars.ts:
--------------------------------------------------------------------------------
1 | import { CSSProperties } from "react";
2 |
3 | import { Badge } from "shared/client/types";
4 |
5 | export function getBadgeStyleVars(badge: Badge | null): CSSProperties {
6 | const badgeName = badge || "default";
7 | return {
8 | "--badge-background-color": `var(--badge-${badgeName}-color)`,
9 | "--badge-color": `var(--badge-${badgeName}-contrast-color)`,
10 | } as CSSProperties;
11 | }
12 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react15/assets/index-4ab65188.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index-4ab65188.js","mappings":"+CAKAA,EAAS,OAAQC,EAAA,IAAAC,EAAA,EAAI,EAAI,SAAS,eAAe,MAAM,CAAE","names":["ReactDOM","jsx","App"],"sources":["../../react-15-app/src/main.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport App from \"./App\";\n\nReactDOM.render( , document.getElementById(\"root\")!);\n"]}
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react16/assets/index-4d2a71e4.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index-4d2a71e4.js","mappings":"+CAKAA,EAAS,OAAQC,EAAA,IAAAC,EAAA,EAAI,EAAI,SAAS,eAAe,MAAM,CAAE","names":["ReactDOM","jsx","App"],"sources":["../../react-16-app/src/main.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport App from \"./App\";\n\nReactDOM.render( , document.getElementById(\"root\")!);\n"]}
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react17/assets/index-36b1bcdb.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index-36b1bcdb.js","mappings":"+CAKAA,EAAS,OAAQC,EAAA,IAAAC,EAAA,EAAI,EAAI,SAAS,eAAe,MAAM,CAAE","names":["ReactDOM","jsx","App"],"sources":["../../react-17-app/src/main.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport App from \"./App\";\n\nReactDOM.render( , document.getElementById(\"root\")!);\n"]}
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/resume.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/utils/pause/frames/getFrameUrl.ts:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | import type { PauseFrame } from "devtools/client/debugger/src/reducers/pause";
6 |
7 | export function getFrameUrl(frame?: PauseFrame) {
8 | return frame?.source?.url ?? "";
9 | }
10 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/arrow-white.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/webconsole/actions/index.ts:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 |
5 | export * from "devtools/client/webconsole/actions/toolbox";
6 |
7 | export interface DebuggerLocation {
8 | url?: string;
9 | sourceId?: string;
10 | line?: number;
11 | column?: number;
12 | }
13 |
--------------------------------------------------------------------------------
/packages/design/Icon/index.tsx:
--------------------------------------------------------------------------------
1 | import type { IconNames } from "./types";
2 | import iconSprite from "./sprite.svg";
3 |
4 | export type IconProps = { name: IconNames; size?: number; className: string };
5 |
6 | export function Icon({ name, size = 20, className }: IconProps) {
7 | return (
8 |
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/packages/design/svgs/external.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/auto-link/AutoLink.module.css:
--------------------------------------------------------------------------------
1 | .Link {
2 | font-weight: bold;
3 | text-decoration: underline;
4 | color: var(--color-link);
5 | }
6 |
7 | [data-lexical-editor="true"][contenteditable="false"] .Link[data-lexical-formatted-link] span {
8 | display: none;
9 | }
10 | [data-lexical-editor="true"][contenteditable="false"] .Link[data-lexical-formatted-link]::after {
11 | content: attr(data-lexical-formatted-link);
12 | }
13 |
--------------------------------------------------------------------------------
/public/test/examples/doc_debugger_statements.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Hello World!
4 |
5 |
17 |
18 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/rewind.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/arrow-e.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react-swc'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig(({ command, mode }) => {
6 | const base =
7 | command === 'serve' ? '' : '/recording/test/examples/redux-fundamentals/dist/'
8 | return {
9 | base,
10 | plugins: [react()],
11 | build: {
12 | sourcemap: true,
13 | },
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/arrow-up.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/pause-circle-16x16.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/tab.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/utils/pause/frames/index.ts:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 |
7 | export * from "./annotateFrames";
8 | export * from "./collapseFrames";
9 | export * from "./displayName";
10 | export * from "./getFrameUrl";
11 | export * from "./getLibraryFromUrl";
12 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/arrow-big.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/Timeline/EditableTimeInput.module.css:
--------------------------------------------------------------------------------
1 | .Input {
2 | border-width: 0px;
3 | padding: 0px;
4 | font-size: 1rem;
5 | line-height: 1rem;
6 | background-color: var(--focus-mode-popout-text-input-background-color);
7 | color: var(--theme-text-field-color);
8 | }
9 | .Input:focus {
10 | outline: none;
11 | box-shadow: 0 0 0 1px var(--focus-mode-popout-text-input-ring);
12 | }
13 |
14 | .Input:first-of-type {
15 | border-radius: 9px 0 0 9px;
16 | }
17 |
--------------------------------------------------------------------------------
/packages/design/svgs/video.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-15-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-16-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/rdt-react-versions/react-17-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-vite/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "redux-e2e-test-app",
3 | "private": true,
4 | "version": "0.0.0",
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vite build",
8 | "preview": "vite preview",
9 | "updateExample": "node updateExample.js"
10 | },
11 | "devDependencies": {
12 | "@replayio/replay": "^0.15.0",
13 | "vite": "^4.3.9"
14 | },
15 | "dependencies": {
16 | "@reduxjs/toolkit": "^1.9.5"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/public/test/examples/redux/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/arrow-down.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/item-arrow-dark-ltr.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/item-arrow-dark-rtl.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/item-arrow-ltr.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/item-arrow-rtl.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/tool-debugger.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/test/examples/node/async.js:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | function finished() {
7 | process.exit(0);
8 | }
9 | async function foo() {
10 | console.log("foo");
11 | bar();
12 | await baz(4);
13 | setTimeout(finished, 0);
14 | }
15 | function bar() {
16 | console.log("bar");
17 | }
18 | async function baz(n) {
19 | console.log("baz", n);
20 | if (n) {
21 | await new Promise(r => setTimeout(r, 0));
22 | await baz(n - 1);
23 | }
24 | return n;
25 | }
26 | foo();
27 |
--------------------------------------------------------------------------------
/packages/replay-next/src/suspense/PaintHashCache.ts:
--------------------------------------------------------------------------------
1 | import { ScreenShot } from "@replayio/protocol";
2 | import { createExternallyManagedCache } from "suspense";
3 |
4 | // The DOM.repaintGraphics API only returns screenshot data for a given paint hash once; see FE-2357
5 | export const paintHashCache = createExternallyManagedCache<[paintHash: string], ScreenShot>({
6 | config: { immutable: true },
7 | debugLabel: "paintHashCache",
8 | getKey: ([paintHash]) => paintHash,
9 | });
10 |
--------------------------------------------------------------------------------
/public/test/examples/iframe.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | IFRAME
4 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/column-marker.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/SecondaryPanes/Frames/FrameIndent.tsx:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 |
7 | import React from "react";
8 |
9 | export default function FrameIndent() {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/more.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/views/GroupedTestCases/TestRecordingTree.module.css:
--------------------------------------------------------------------------------
1 | .Tree {
2 | display: flex;
3 | flex-direction: column;
4 | gap: 0.5rem;
5 | }
6 | .Tree[data-nested] {
7 | margin-left: 1rem;
8 | }
9 |
10 | .List {
11 | display: flex;
12 | flex-direction: column;
13 | margin-bottom: 0.5rem;
14 | }
15 |
16 | .Scope {
17 | font-size: var(--font-size-medium);
18 | color: var(--theme-base-60);
19 | font-weight: bold;
20 | text-transform: uppercase;
21 | }
22 |
--------------------------------------------------------------------------------
/packages/design/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "design",
3 | "private": true,
4 | "version": "0.0.0",
5 | "sideEffects": false,
6 | "scripts": {
7 | "icons": "node scripts/icons.js --fetch"
8 | },
9 | "dependencies": {
10 | "classnames": "*",
11 | "react": "*"
12 | },
13 | "devDependencies": {
14 | "case-anything": "^2.1.10",
15 | "figma-tools": "^0.4.0",
16 | "nanospinner": "^1.1.0",
17 | "svgo": "^2.8.0",
18 | "svgson": "^5.2.1"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/mentions/utils/$createMentionsTextNode.ts:
--------------------------------------------------------------------------------
1 | import { $applyNodeReplacement } from "lexical";
2 |
3 | import MentionsTextNode from "../MentionsTextNode";
4 |
5 | export default function $createMentionsTextNode(id: string, name: string): MentionsTextNode {
6 | const mentionsTextNode = new MentionsTextNode(id, name);
7 | mentionsTextNode.setMode("segmented").toggleDirectionless();
8 |
9 | return $applyNodeReplacement(mentionsTextNode);
10 | }
11 |
--------------------------------------------------------------------------------
/packages/replay-next/components/sources/SourceLineLoadingPlaceholder.module.css:
--------------------------------------------------------------------------------
1 | .Shimmer {
2 | display: inline-block;
3 | height: 0.5rem;
4 | background-color: var(--chrome);
5 | border-radius: 0.25rem;
6 |
7 | animation-name: shimmer;
8 | animation-duration: 2s;
9 | animation-iteration-count: infinite;
10 | }
11 |
12 | @keyframes shimmer {
13 | 0% {
14 | opacity: 0.5;
15 | }
16 | 50% {
17 | opacity: 1;
18 | }
19 | 100% {
20 | opacity: 0.5;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/packages/replay-next/src/utils/group.ts:
--------------------------------------------------------------------------------
1 | import groupBy from "lodash/groupBy";
2 |
3 | /**
4 | * Takes an array of [Key, Value | Value[]] entries, and groups them by key.
5 | * @return A new entry array, where values of the same key are merged into one entry.
6 | */
7 | export function groupEntries(entries: [K, V | V[]][]): [K, V[]][] {
8 | return Object.values(groupBy(entries, x => x[0])).map(group => [
9 | group[0][0],
10 | group.flatMap(([k, v]) => v),
11 | ]);
12 | }
13 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/SecondaryPanes/Points/LogpointsPane.module.css:
--------------------------------------------------------------------------------
1 | .LogpointsPane {
2 | color: var(--body-color);
3 | padding: 8px 0px;
4 | user-select: none;
5 | }
6 |
7 | .List {
8 | margin: 0 0.5rem;
9 | border-radius: 0.125rem;
10 | }
11 | .List:not(:last-child) {
12 | margin-bottom: 0.25rem;
13 | }
14 |
15 | .Empty {
16 | font-style: italic;
17 | text-align: center;
18 | padding: 0.5em;
19 | user-select: none;
20 | cursor: default;
21 | }
22 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/debugging-tabs.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/tool-explorer.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/vview-edit.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/design/svgs/card.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/design/svgs/rewind.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/lexical/plugins/code/utils/$convertCodeElement.ts:
--------------------------------------------------------------------------------
1 | import { DOMConversionOutput } from "lexical";
2 |
3 | import $createCodeNode from "./$createCodeNode";
4 |
5 | export default function $convertCodeElement(domNode: HTMLElement): DOMConversionOutput | null {
6 | const textContent = domNode.textContent;
7 | if (textContent !== null) {
8 | const node = $createCodeNode();
9 | return {
10 | node,
11 | };
12 | }
13 |
14 | return null;
15 | }
16 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/webconsole/run.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/SecondaryToolbox/SecondaryToolbox.module.css:
--------------------------------------------------------------------------------
1 | .RoutinePanelMessage {
2 | width: 100%;
3 | display: flex;
4 | flex-direction: column;
5 | gap: 0.5rem;
6 | padding: 0.5rem;
7 | border-radius: 0.25rem;
8 | font-size: var(--font-size-regular);
9 | }
10 |
11 | .CouldNotLoadMessage {
12 | height: 100%;
13 | display: flex;
14 | justify-content: center;
15 | align-items: center;
16 | padding: 1rem;
17 | text-align: center;
18 | color: var(--color-dim);
19 | }
20 |
--------------------------------------------------------------------------------
/packages/design/PrefixBadgePicker/Picker.module.css:
--------------------------------------------------------------------------------
1 | .Picker {
2 | position: relative;
3 | display: inline-grid;
4 | align-items: center;
5 | padding: 0 3px;
6 | }
7 |
8 | .PickerFill {
9 | --badge-background: var(--theme-toolbar-background);
10 | position: absolute;
11 | inset: 0;
12 | background-color: var(--badge-background);
13 | transition: background-color 0.18s ease-out;
14 | }
15 |
16 | .Picker:hover .PickerFill {
17 | background-color: var(--badge-background--active);
18 | }
19 |
--------------------------------------------------------------------------------
/packages/design/svgs/legal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/components/Editor/NewSourceNag.module.css:
--------------------------------------------------------------------------------
1 | .Nag {
2 | background-color: var(--nag-background-color);
3 | background: linear-gradient(
4 | 90deg,
5 | var(--nag-gradient-color-begin),
6 | var(--nag-gradient-color-end)
7 | );
8 | color: var(--nag-color);
9 | padding: 0.25em 0.5em;
10 | gap: 0.5em;
11 | display: flex;
12 | align-items: center;
13 |
14 | font-weight: bold;
15 | font-size: var(--font-size-regular);
16 | display: none;
17 | }
18 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/badge-blue.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/breadcrumbs-scrollbutton.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/MaintenanceMode.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import ReplayLogo from "./shared/ReplayLogo";
4 |
5 | export default function MaintenanceModeScreen() {
6 | return (
7 |
8 |
9 |
10 |
Replay is down for maintenance, come back later!
11 |
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/utils/isTestSuiteReplay.ts:
--------------------------------------------------------------------------------
1 | import { Recording } from "shared/graphql/types";
2 | import {
3 | isGroupedTestCasesV2,
4 | isGroupedTestCasesV3,
5 | } from "shared/test-suites/RecordingTestMetadata";
6 |
7 | export function isTestSuiteReplay(recording: Recording): boolean {
8 | const testMetadata = recording?.metadata?.test;
9 | return (
10 | testMetadata != null &&
11 | (isGroupedTestCasesV2(testMetadata) || isGroupedTestCasesV3(testMetadata))
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/packages/design/SystemProvider/index.tsx:
--------------------------------------------------------------------------------
1 | import Head from "next/head";
2 | import type { ReactNode } from "react";
3 |
4 | import iconSprite from "../Icon/sprite.svg";
5 |
6 | /** Provides design system functionality to all descendant components. */
7 | export function SystemProvider({ children }: { children: ReactNode }) {
8 | return (
9 | <>
10 |
11 |
12 |
13 |
14 | {children}
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/sources/vuejs.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/play.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/design/svgs/fast-forward.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/mapped_styles/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | context: __dirname,
5 | entry: "./bundle_input.js",
6 | output: {
7 | filename: "mapped_styles.js",
8 | path: path.resolve(__dirname, "dist"),
9 | },
10 | devtool: "source-map",
11 | mode: "production",
12 | module: {
13 | rules: [
14 | {
15 | test: /\.css$/i,
16 | use: ["style-loader", "css-loader"],
17 | },
18 | ],
19 | },
20 | };
21 |
--------------------------------------------------------------------------------
/packages/replay-next/components/Loader.tsx:
--------------------------------------------------------------------------------
1 | import { CSSProperties, ReactNode } from "react";
2 |
3 | import styles from "./Loader.module.css";
4 |
5 | export default function Loader({
6 | className = "",
7 | message = "Loading…",
8 | style,
9 | }: {
10 | className?: string;
11 | message?: ReactNode;
12 | style?: CSSProperties;
13 | }) {
14 | return (
15 |
16 | {message}
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react15/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react16/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/public/test/examples/rdt-react-versions/dist/react17/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/breakpoint.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/src/utils/assert.js:
--------------------------------------------------------------------------------
1 | /* This Source Code Form is subject to the terms of the Mozilla Public
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this
3 | * file, You can obtain one at . */
4 |
5 | //
6 | import { isDevelopment } from "shared/utils/environment";
7 |
8 | export default function assert(condition, message) {
9 | if (isDevelopment() && !condition) {
10 | throw new Error(`Assertion failure: ${message}`);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/packages/replay-next/components/elements/ElementList.module.css:
--------------------------------------------------------------------------------
1 | .ListWrapper {
2 | position: relative;
3 | }
4 |
5 | .List:focus {
6 | outline: none;
7 | }
8 |
9 | .List > div {
10 | /**
11 | * Each row should grow as much as needed to fit its code/content.
12 | * The parent list will measure rows after render and adjust the min-width of the list.
13 | * This prevents horizontal scrolling from jumping as new rows are rendered.
14 | */
15 | width: max(100%, var(--longest-line-width)) !important;
16 | }
17 |
--------------------------------------------------------------------------------
/packages/replay-next/src/hooks/usePreferredFontSize.ts:
--------------------------------------------------------------------------------
1 | import { useLayoutEffect } from "react";
2 |
3 | export default function usePreferredFontSize(enableLargeText: boolean): void {
4 | useLayoutEffect(() => {
5 | const size = enableLargeText ? "large" : "default";
6 |
7 | const root = document.body.parentElement!;
8 | root.classList.add(`prefers-${size}-font-size`);
9 | return () => {
10 | root.classList.remove(`prefers-${size}-font-size`);
11 | };
12 | }, [enableLargeText]);
13 | }
14 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/markup-breakpoint.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/test/examples/README.md:
--------------------------------------------------------------------------------
1 | # Replay E2E Examples
2 |
3 | All of the build artifacts used by our E2E tests are committed to this folder, and will be served up by our Next dev server at `localhost:8080` when we create new "golden recordings".
4 |
5 | The majority of the examples are plain HTML files with embedded JS. For other examples, such as `cra`, `redux`, and some Webpack bundles, the actual source code lives in `packages/e2e-tests/examples` - see instructions there for rebuilding and recreating the build artifacts if necessary.
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/design/svgs/debug-play.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/protocol/execution-point-utils.ts:
--------------------------------------------------------------------------------
1 | import { ExecutionPoint } from "@replayio/protocol";
2 |
3 | import { compareNumericStrings } from "protocol/utils";
4 |
5 | export function pointEquals(p1: ExecutionPoint, p2: ExecutionPoint) {
6 | p1 == p2;
7 | }
8 |
9 | export function pointPrecedes(p1: ExecutionPoint, p2: ExecutionPoint) {
10 | return compareNumericStrings(p1, p2) < 0;
11 | }
12 |
13 | export function comparePoints(p1: ExecutionPoint, p2: ExecutionPoint) {
14 | return compareNumericStrings(p1, p2);
15 | }
16 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/security-state-secure.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/tool-comments.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/vview-delete.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/vview-lock.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/Comments/CommentReplyButton.module.css:
--------------------------------------------------------------------------------
1 | .Row {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 | margin: 0.25rem 0.5rem 0;
6 | }
7 |
8 | .Button {
9 | padding: 0 0.25rem;
10 | color: var(--theme-icon-dimmed-color);
11 | text-align: left;
12 | }
13 | .Button:hover {
14 | color: var(--primary-accent);
15 | }
16 |
17 | .AttachmentIcon {
18 | color: var(--theme-icon-dimmed-color);
19 | }
20 | .AttachmentIcon:hover {
21 | color: var(--primary-accent);
22 | }
23 |
--------------------------------------------------------------------------------
/test/examples/node/run_worker.js:
--------------------------------------------------------------------------------
1 | const { Worker } = require("worker_threads");
2 |
3 | let gWorker;
4 |
5 | function spawnWorker() {
6 | gWorker = new Worker(`${__dirname}/worker.js`);
7 | gWorker.on("message", onWorkerMessage);
8 | setTimeout(sendWorkerMessage, 0);
9 | }
10 | setTimeout(spawnWorker, 0);
11 |
12 | function sendWorkerMessage() {
13 | gWorker.postMessage({ kind: "ping" });
14 | }
15 |
16 | function onWorkerMessage({ kind }) {
17 | console.log("GotWorkerMessage", kind);
18 | process.exit();
19 | }
20 |
--------------------------------------------------------------------------------
/packages/docs/README.md:
--------------------------------------------------------------------------------
1 | # Docs Site
2 |
3 | This is the docs site for Replay packages. It uses a NextJS site with Esbuild and TS Morph to compile isolated source code for a quick prototyping environment.
4 |
5 | ## Development
6 |
7 | To get started, clone the repo and run the following:
8 |
9 | ```bash
10 | yarn dev
11 | ```
12 |
13 | This will start two servers. One is the NextJS development server and the other is a data gathering Node script that uses Esbuild and TS Morph to compile examples and collect type information.
14 |
--------------------------------------------------------------------------------
/packages/e2e-tests/examples/redux-fundamentals/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | .yarn/*
27 | !.yarn/patches
28 | !.yarn/plugins
29 | !.yarn/releases
30 | !.yarn/sdks
31 | !.yarn/versions
32 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/file-small.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/TestSuite/components/TestResultIcon.module.css:
--------------------------------------------------------------------------------
1 | .SuccessIcon {
2 | background-color: var(--testsuites-success-color);
3 | }
4 | .SuccessText {
5 | color: var(--testsuites-success-color);
6 | }
7 |
8 | .ErrorIcon {
9 | background-color: var(--testsuites-error-icon-bgcolor);
10 | }
11 | .ErrorText {
12 | color: var(--testsuites-error-color);
13 | }
14 |
15 | .SkippedIcon {
16 | background-color: var(--testsuites-skipped-color);
17 | }
18 | .SkippedText {
19 | color: var(--testsuites-skipped-color);
20 | }
21 |
--------------------------------------------------------------------------------
/src/ui/components/shared/Confirm/ConfirmModal.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import Modal from "../NewModal";
4 | import { ConfirmDialog, ConfirmOptions } from "./ConfirmDialog";
5 |
6 | export const ConfirmModal = ({ onDecline, ...props }: ConfirmOptions) => {
7 | return (
8 |
13 |
14 |
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/devtools/client/themes/images/tool-accessibility.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/ui/components/Events/EventsDropDownMenu.module.css:
--------------------------------------------------------------------------------
1 | .DropDownButton {
2 | background: none;
3 | border: none;
4 | outline: none;
5 | flex: 0 0 1rem;
6 | cursor: pointer;
7 | }
8 |
9 | .Icon {
10 | height: 1rem;
11 | width: 1rem;
12 | flex: 0 0 auto;
13 | }
14 | .Icon[data-selected] {
15 | color: var(--color-link);
16 | }
17 |
18 | .MenuItem {
19 | width: 100%;
20 | display: flex;
21 | align-items: center;
22 | gap: 1ch;
23 | text-transform: capitalize;
24 | }
25 |
26 | .Checkbox {
27 | gap: 1ch;
28 | }
29 |
--------------------------------------------------------------------------------
/packages/design/svgs/share.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/replay-pause.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/search.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/devtools/client/shared/components/reps/images/open-inspector.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/ui/components/Events/Event.module.css:
--------------------------------------------------------------------------------
1 | .eventRow {
2 | display: block;
3 | display: flex;
4 | padding-top: 0.25rem;
5 | padding-bottom: 0.25rem;
6 | padding-right: 0.25rem;
7 | padding-left: 1rem;
8 | margin-top: 0.25rem;
9 | margin-bottom: 0.25rem;
10 | flex-direction: row;
11 | justify-content: space-between;
12 | align-items: center;
13 | width: 100%;
14 | border-radius: 9999px;
15 | cursor: pointer;
16 | }
17 |
18 | .eventRow:hover {
19 | background-color: var(--event-row-hover-background-color);
20 | }
21 |
--------------------------------------------------------------------------------
/packages/design/svgs/cog.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/ContextMenu.module.css:
--------------------------------------------------------------------------------
1 | .ColorBadge,
2 | .ColorBadgeClear,
3 | .UnicornBadge {
4 | display: inline-block;
5 | width: 0.75rem;
6 | height: 0.75rem;
7 | border-radius: 0.75rem;
8 | }
9 | .ColorBadge {
10 | background-color: var(--badge-color);
11 | }
12 | .ColorBadgeClear {
13 | background: var(--theme-base-80);
14 | }
15 | .UnicornBadge {
16 | background-image: url(../../public/unicorn.svg) !important;
17 | background-size: auto 100%;
18 | }
19 |
20 | .SmallerIcon {
21 | height: 1rem;
22 | }
23 |
--------------------------------------------------------------------------------
/packages/replay-next/components/console/filters/EventCategory.module.css:
--------------------------------------------------------------------------------
1 | .Header {
2 | width: 100%;
3 | display: grid;
4 | grid-template-columns: auto min-content;
5 | gap: 0.25rem;
6 | }
7 | .Header[data-disabled] {
8 | opacity: 0.5;
9 | }
10 |
11 | .HeaderWrapper {
12 | display: flex;
13 | }
14 |
15 | .Category {
16 | overflow: hidden;
17 | text-overflow: ellipsis;
18 | white-space: nowrap;
19 | }
20 |
21 | .List {
22 | display: flex;
23 | flex-direction: column;
24 | margin-top: 0.25rem;
25 | gap: 0.25rem;
26 | }
27 |
--------------------------------------------------------------------------------
/src/devtools/client/debugger/images/sources/prefix-picker.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------