storybook-addon-playwright 7.2.2 → 7.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/register.js +8 -8
- package/dist/register.js.map +1 -1
- package/dist/register.mjs +8 -8
- package/dist/register.mjs.map +1 -1
- package/package.json +1 -1
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/common/ActionPanel.tsx","../src/utils/resolve-mui-icon.ts","../src/components/common/Dialog.tsx","../src/components/common/ActionDialog.tsx","../src/components/common/ActionPopover.tsx","../src/components/common/ErrorPanel.tsx","../src/utils/capitalize.ts","../src/utils/construct-story-url.ts","../src/utils/get-preview-iframe.ts","../src/utils/find-selector.ts","../src/utils/get-schema.ts","../src/data/deviceDescriptorsSource.json","../src/utils/get-device-info.ts","../src/utils/get-iframe-document.ts","../src/utils/get-iframe-scroll-position.ts","../src/utils/get-image-diff-messages.ts","../src/utils/get-screenshot-prop.ts","../src/utils/get-screenshot-globals.ts","../src/utils/get-screenshot-args.ts","../src/utils/is-story-json-file.ts","../src/utils/is-valid-selector.ts","../src/utils/toast/AlertToast.tsx","../src/utils/toast/toast.tsx","../src/utils/valid-action.ts","../src/components/common/InputDialog.tsx","../src/components/common/Loader.tsx","../src/api/trpc/client.ts","../src/features/theme/hooks/use-custom-theme.ts","../src/components/common/ThemeProvider.tsx","../src/components/common/Toolbar.tsx","../src/components/common/ConfirmationPopover.tsx","../src/components/common/DragHandle.tsx","../src/components/common/ListItemWrapper.tsx","../src/components/common/ListWrapper.tsx","../src/components/common/DeleteConfirmationButton.tsx","../src/components/common/CheckBox.tsx","../src/components/common/DeviceListItem.tsx","../src/components/common/DeviceList.tsx","../src/hooks/use-current-story-data.ts","../src/features/action-set/store/action-set-store.ts","../src/features/action-set/store/utils/is-same-actions.ts","../src/features/action-set/store/actions.ts","../src/features/action-set/store/selectors.ts","../src/store/ui-store.ts","../src/store/ui-actions.ts","../src/store/ui-selectors.ts","../src/features/action-set/hooks/use-action-editor.ts","../src/features/action-set/hooks/use-copy-action-set.ts","../src/features/action-set/hooks/use-current-actions.ts","../src/features/action-set/hooks/use-current-story-action-sets.ts","../src/features/action-set/hooks/use-editor-action.ts","../src/features/action-set/hooks/use-story-action-sets-loader.tsx","../src/features/schema/hooks/use-action-schema-loader.ts","../src/features/screenshot/hooks/use-screenshot-update-state.ts","../src/features/screenshot/store/screenshot-store.ts","../src/features/screenshot/store/actions.ts","../src/features/screenshot/store/selectors.ts","../src/features/screenshot/hooks/use-delete-story-screenshots.ts","../src/features/screenshot/hooks/use-screenshot-diff-test-by-type.ts","../src/features/screenshot/hooks/use-story-screenshot-loader.ts","../src/hooks/use-drag-start.ts","../src/hooks/use-addon-state.ts","../src/hooks/use-browser-state-manager.ts","../src/hooks/use-browser-options.ts","../src/features/screenshot/hooks/use-screenshot-options.ts","../src/features/screenshot/hooks/use-load-screenshot-settings.ts","../src/features/screenshot/hooks/use-edit-screenshot.ts","../src/features/screenshot/hooks/use-screenshot-diff-test.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotInfo.tsx","../src/features/screenshot/hooks/use-delete-screenshot.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotDelete.tsx","../src/features/screenshot/hooks/use-screenshot-update.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotUpdate.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListItemMenu.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListItemWrapper.tsx","../src/features/screenshot/hooks/use-fix-screenshot-file-name.ts","../src/hooks/use-knobs.ts","../src/features/screenshot/hooks/use-generate-screenshot-title.ts","../src/features/screenshot/hooks/use-global-imageDiff-results.ts","../src/features/screenshot/hooks/use-imagediff-screenshots.ts","../src/hooks/use-globals.ts","../src/features/screenshot/hooks/use-save-screenshot.ts","../src/features/screenshot/hooks/use-screenshot.ts","../src/features/screenshot/hooks/use-screenshot-index-change.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotPreviewDialog.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListItem.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListSortable.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotList.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListToolbar.tsx","../src/hooks/use-key-press-fn.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotListPreviewDialog.tsx","../src/features/screenshot/components/screenshot-panel/StoryScreenshotPreview.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotPanel.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotMain.tsx","../src/hooks/use-story-url.ts","../src/features/screenshot/components/screenshot-preview/OptionPopover.tsx","../src/features/screenshot/components/screenshot-preview/BrowserOptions.tsx","../src/features/screenshot/components/screenshot-preview/ScreenShotViewToolbar.tsx","../src/features/screenshot/components/screenshot-preview/utils/get-border-color.ts","../src/features/screenshot/components/screenshot-preview/ScreenshotView.tsx","../src/components/common/IframeOverlay.tsx","../src/components/Clipper/Clipper.tsx","../src/components/Clipper/ClipperButton.tsx","../src/icons/Browser.tsx","../src/icons/Chrome.tsx","../src/icons/Firefox.tsx","../src/icons/Webkit.tsx","../src/components/common/BrowserIcon.tsx","../src/components/common/BrowserIconButton.tsx","../src/components/ResizeBrowserToIframeContent/ResizeBrowserToIframeContent.tsx","../src/components/ResizeBrowserToPreview/ResizeBrowserToPreview.tsx","../src/features/screenshot/components/screenshot-preview/ResetSettings.tsx","../src/features/screenshot/components/screenshot-preview/ScreenshotOptions.tsx","../src/features/screenshot/components/screenshot-preview/Toolbar.tsx","../src/features/screenshot/components/screenshot-preview/hooks/use-screenshot-list-layout.ts","../src/features/screenshot/components/screenshot-preview/hooks/use-screenshot-save-flow.ts","../src/features/screenshot/components/screenshot-preview/ScreenshotListView.tsx","../src/features/screenshot/components/screenshot-preview/PreviewDialog.tsx","../src/components/preview/EditScreenshotAlert.tsx","../src/components/preview/utils/is-horizontal.ts","../src/components/preview/utils/normalize-root-selector-path.ts","../src/components/preview/SelectorOverlay.tsx","../src/components/preview/Selector.tsx","../src/components/preview/Preview.tsx","../src/constants/add-on.ts","../src/constants/messages.ts","../src/components/tool-bar/ImageDiffMenuItem.tsx","../src/components/tool-bar/ImageDiff.tsx","../src/hooks/use-reset-setting.ts","../src/components/tool-bar/ScreenshotUpdateIcon.tsx","../src/components/tool-bar/Tool.tsx","../src/features/schema/hooks/use-control.ts","../src/hooks/use-anchor-el.ts","../src/hooks/use-key-press.ts","../src/hooks/use-preview-iframe.ts","../src/hooks/use-selector-manager.ts","../src/components/common/ImagePreview.tsx","../src/components/common/ImageDiffPreview.tsx","../src/components/common/ImageDiffPreviewDialog.tsx","../src/components/common/ImageDiffMessage.tsx","../src/components/common/CommonProvider.tsx","../src/features/schema/components/FormControl.tsx","../src/features/schema/components/Control.tsx","../src/features/schema/components/SelectorControl.tsx","../src/features/schema/components/SchemaProp.tsx","../src/features/schema/components/SchemaRenderer.tsx","../src/components/common/SchemaFormLoader.tsx","../src/components/common/FixScreenshotFileDialog.tsx","../src/features/action-set/components/actions/utils/get-action-option-value.ts","../src/features/action-set/components/actions/ActionSchemaRenderer.tsx","../src/features/action-set/components/actions/ActionOptions.tsx","../src/features/action-set/components/actions/ActionList.tsx","../src/features/action-set/components/action-set-panel/ActionMenuItem.tsx","../src/features/action-set/components/action-set-panel/utils/get-menu.ts","../src/features/action-set/components/action-set-panel/utils/filter-favourite-actions.ts","../src/features/action-set/components/action-set-panel/ActionMenu.tsx","../src/features/action-set/components/action-set-panel/ActionSetEditorIcons.tsx","../src/features/action-set/components/action-set-panel/ActionSetEditor.tsx","../src/features/action-set/components/action-set-panel/AddFavouriteAction.tsx","../src/features/action-set/components/action-set-panel/ActionSetListItem.tsx","../src/features/action-set/components/action-set-panel/ActionSetList.tsx","../src/features/action-set/components/action-set-panel/FavouriteActions.tsx","../src/features/action-set/components/action-set-panel/ActionSetToolbar.tsx","../src/features/action-set/components/action-set-panel/ActionSetMain.tsx","../src/components/panel/ActionPanel.tsx","../src/components/panel/ScreenshotPanel.tsx","../src/register.tsx"],"names":["ActionPanel","memo","onPositiveAction","title","onNegativeAction","children","positiveActionName","negativeActionName","React","DialogTitle","DialogContent","DialogActions","Button","resolveMuiIcon","iconModule","CloseIconComponent","CloseIcon","useStyles","makeStyles","theme","primary","p","Dialog","width","height","onClose","footerActions","subtitle","titleActions","open","enableCloseButton","rest","classes","ActionsComponent","TitleActions","MuDialog","Typography","IconButton","Divider","ActionDialog","onCancel","handleClose","useCallback","ActionPopover","Popover","ErrorPanel","props","message","Backdrop","capitalize","str","constructStoryUrl","endpoint","id","args","globals","normalized","normalize","storyUrl","getPreviewIframe","findSelector","selector","getActionSchema","schema","key","extendedKey","get","deviceDescriptorsSource_default","getDeviceInfo","deviceName","device","getIframeDocument","iframe","getIframeScrollPosition","iframeDocument","frameWindow","scrollTop","getImageDiffMessages","result","getScreenshotProp","candidates","i","value","getScreenshotGlobals","data","getScreenshotArgs","isStoryJsonFile","jsonOrStoryFileName","storyFileName","jsonName","isValidSelector","getVariantIcon","variant","PassedIcon","FailedIcon","AlertIcon","getVariantIconColor","isDarkMode","ToastMessageContainer","AlertToast","description","style","closeButton","isLightMode","backgroundColor","borderColor","textColor","titleColor","closeButtonColor","containerStyle","getHighestZindex","variantIcon","variantIconColor","descriptioncomponent","line","index","CrossIcon","AlertToast_default","DEFAULT_ALERT_DURATION","toastInstances","getToastId","baseId","instance","sonnerToast","getToastHandlers","cleanUp","tId","latestInstance","t","toast","duration","dismissible","position","toastId","handlers","simpleHash","createToast","options","component","validAction","action","actionSchema","requiredParams","requiredParam","validateActionList","actions","arr","res","InputDialog","onSave","requiredMessage","required","label","onGenerateContent","inputValue","setValue","useState","hasError","setHasError","isGenerating","setIsGenerating","showGenerateButton","handleChange","e","handleSave","handleGenerate","generated","useEffect","TextField","CircularProgress","InputDialogModal","NiceModal","modal","useModal","content","INPUT_DIALOG_MODAL_ID","registered","registerInputDialogModal","inputModal","background","color","tinycolor","Loader","progressSize","BASE","trpcClient","createTRPCReact","createTrpcHttpClient","httpBatchLink","useCustomTheme","setTheme","isTheme","ThemeProvider","storyBookTheme","useStorybookState","customTheme","createTheme","MuThemeProvider","divider","text","Toolbar","border","clsx","x","ConfirmationPopover","onConfirm","handleCancel","DragIndicatorSharpIcon","DragIndicatorSharp","DragHandle","className","setNodeRef","secondary","ListItemWrapper","draggable","selected","onClick","tooltip","icons","secondaryColor","dragHandleProps","handleClick","ListWrapper","ref","useRef","ScrollArea","ListWrapperSortableContainer","DeleteConfirmationButton","onDelete","StorybookIconButton","disabled","confirmAnchorEl","setConfirmAnchorEl","handleDelete","closeDeleteConfirmation","handleDeleteConfirmation","TrashIcon","CheckBox","checked","onChange","FormIcon","StopAltHollowIcon","DeviceListItem","forwardRef","viewportSize","name","MenuItem","DeviceList","onDeviceSelect","selectedDevice","anchorEl","setAnchorEl","event","devices","useMemo","handleSelection","Menu","useCurrentStoryData","storyData","setData","currentStory","useStorybookApi","filePath","fileName","initialActionSetState","useActionSetStore","create","devtools","actionsWithoutId","isSameActions","a","b","newA","newB","equal","getState","setState","partial","updateStoryActionSet","state","storyId","actionSets","updateStoryEditingActionSet","actionSetId","updater","storyActionSets","act","removeActionSet","addActionSetList","setScreenShotActionSets","matched","actionSet","storyActionSet","nanoid","currentActionSets","updated","addActionSet","isNew","newAction","clearCurrentActionSets","deleteActionSet","deleteTempActionSets","sortActionSets","oldIndex","newIndex","arrayMove","toggleCurrentActionSet","isCurrent","toggleActionExpansion","actionId","expand","clearActionExpansion","setActionSchema","cancelEditActionSet","orgEditingActionSet","editActionSet","setActionSetTitle","addActionSetAction","toggleSubtitleItem","actionOptionPath","hasItem","moveActionSetAction","deleteActionSetAction","setActionOptions","objPath","val","Fn","saveActionSet","useActionSetStoreState","initialUIState","useUIStore","persist","setAddonState","addonState","setBrowserOptions","browserOptions","setScreenshotOptionsState","screenshotOptions","setDragStart","dragStart","setSelectorManager","selectorManager","setScreenshotUpdateState","screenshotUpdateState","setEditScreenshotState","editScreenshotState","setSchemaLoaded","schemaLoaded","useAddonStateValue","s","useBrowserOptionsValue","useScreenshotOptionsValue","useDragStartValue","useSelectorManagerValue","useScreenshotUpdateStateValue","useEditScreenshotStateValue","useSchemaLoaded","useActionEditor","mutateAsync","inProgress","error","handleAddAction","actionName","validateResult","handleDescriptionChange","handleCancelEditActionSet","editingAction","useCopyActionSet","copyActionSet","useCurrentActions","useCurrentStoryActionSets","storybookState","setStoryActionSets","useEditorAction","setAction","story","editingActionSet","__loadedFiles","useStoryActionSetsLoader","loading","useActionSchemaLoader","loaded","refetch","load","useScreenshotUpdateState","reqBy","target","updateInf","isLoadingFinish","setIsLoadingFinish","runDiffTest","initialScreenshotState","useScreenshotStore","addScreenshot","screenshot","screenshots","removeScreenshot","screenshotId","changeScreenshotIndex","removeStoryScreenshots","setScreenshots","setImageDiffResults","imageDiffResults","addImageDiffResult","imageDiffResult","updateImageDiffResult","setPauseDeleteImageDiffResult","paused","removeImageDiffResult","removePassedImageDiffResult","deleteScreenshot","useImageDiffResults","useScreenshotStoreState","useDeleteStoryScreenshot","deleteInProgress","deleteStoryScreenshots","useScreenshotDiffTestByType","imageDiffTestInProgress","testStoryScreenShots","type","results","useStoryScreenshotLoader","loadedStoryId","screenshotLoaderInProgress","loadScreenShots","useDragStart","useAddonState","defaultBrowserTypes","useBrowserStateManager","browserView","refreshingBrowsers","setRefreshBrowsers","browserTypes","isDisabled","browserType","setBrowserState","activePanel","disable","unsubscribe","prevState","deepEqual","current","channel","addons","onStoryRendered","activeBrowserTypes","STORY_RENDERED","toggleBrowser","browser","clearBrowserRefresh","useBrowserOptions","browserName","setBrowserDeviceOptions","getBrowserOptions","hasOption","useScreenshotOptions","useLoadScreenshotSettings","setScreenshotOptions","api","dispatchActions","screenshotData","loadSetting","force","RESET_STORY_ARGS","UPDATE_STORY_ARGS","UPDATE_GLOBALS","useEditScreenshot","unmounted","clearScreenshotEdit","editScreenshot","isEditing","useScreenshotDiffTest","testScreenshotError","setTestScreenshotError","reset","testScreenshot","ScreenshotInfo","size","getInfo","_id","_index","togglePopover","CogIcon","ReactJson","useDeleteScreenshot","setError","mutationError","clearError","ScreenshotDelete","onStateChange","deleteLoading","useScreenshotUpdate","successMessage","updateScreenshotInProgress","updateScreenshotClearResult","newImageDiffResult","ScreenshotUpdate","updateScreenshot","testScreenshotInProgress","testScreenshotClearResult","testScreenshotResult","handleUpdate","handleSaveScreenshotClick","RefreshIcon","ImageDiffPreviewDialog","ScreenshotListItemMenu","enableLoadSetting","openUpdateDialog","enableImageDiff","enableUpdate","enableEditScreenshot","show","onHide","onRunImageDiff","onLoadSettingClick","onEditClick","working","setWorking","EditIcon","OutboxIcon","ContrastIcon","ScreenshotListItemWrapper","useFixScreenshotFileName","fixFunction","currentStoryData","reload","setReload","functionName","setFunctionName","fixFileNamesError","setFixFileNamesError","fixFileNamesInProgress","fixFileNames","handleReload","handleFunctionNameInput","useKnobs","setArgs","apiRef","setArgsStore","initialArgs","propObj","obj","argValue","storyChange","STORY_ARGS_UPDATED","STORY_CHANGED","useGenerateScreenshotTitle","currentActions","hasGenerator","useGlobalImageDiffResults","getScreenshotDataFromDiffResult","useImageDiffScreenshots","onLoaded","setLoaded","loadData","useGlobals","setGlobals","setGlobalStore","initialGlobals","changedGlobals","globalValue","GLOBALS_UPDATED","useSaveScreenshot","mutationResult","titleMsg","clearResult","isUpdating","getUpdatingScreenshotTitle","saveScreenShot","base64String","deviceDescriptor","saveResult","base64","onSuccessClose","useScreenshot","prevHash","mutate","renderCount","setRenderCount","handler","c","getSnapshot","currentHash","sum","useScreenshotIndexChange","ChangeIndexInProgress","changeIndex","ScreenshotPreviewDialog","screenShotData","CheckCircleIcon","CheckCircle","ErrorIcon","Error","ScreenshotListItem","pauseDeleteImageDiffResult","showPreviewOnClick","sortableId","forceShowMenu","showImageDiffResultDialog","attributes","listeners","setActivatorNodeRef","transform","transition","isDragging","useSortable","showMenu","setShowMenu","showImageDiffResult","setShowImageDiffResult","timer","showPreview","setShowPreview","isPassesImageDiff","handleRemoveScreenShotResult","handleShowImageDiffResult","handleMouseEnter","handleMouseLeave","handleRunDiffTest","toggleSelectedItem","handleEdit","handleLoadSetting","CSS","BrowserIcon","MemoizedImageDiffMessage","ScreenshotListSortable","items","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragStart","handleDragCancel","handleDragEnd","active","over","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","ScreenshotList","hasScreenshot","sortedScreenshots","ScreenshotListToolbar","hasScreenShot","onTestClick","onPreviewClick","onUpdateClick","openFixDialog","setOpenFixDialog","FixScreenshotFileDialog","WrenchIcon","PhotoIcon","useKeyPressFn","keydown","keyup","ScreenshotListPreviewDialog","selectedItem","currentItem","setCurrentItem","handleItemClick","handleKeyUp","ev","selectedScreenshot","diffResult","ImageDiffPreview","StoryScreenshotPreview","updating","onLoad","updateInProgress","setUpdateInProgress","promises","MemoizedStoryScreenshotPreview","ScreenshotPanel","toggleShowPreview","handleStoryImgDiff","ScreenshotMain","showPanel","dialogOpen","setDialogOpen","handleOnLoad","handleOnClose","CommonProvider","useStoryUrl","url","setUrl","newUrl","queryKeys","query","OptionPopover","Icon","SIconButton","Tooltip","SettingIconComponent","SettingIcon","BrowserOptions","isActive","setReset","handleDeviceSelection","MemoizedSchemaFormLoader","FullscreenIcon","Fullscreen","RefreshOutlinedIcon","SaveAltOutlinedIcon","SaveIcon","palette","ScreenShotViewToolbar","showSaveButton","onRefresh","onFullScreen","getBorderColor","coefficient","lighten","darken","getBackgroundColor","ScreenshotView","refresh","onRefreshEnd","onScreenshotDataChange","openFullScreen","setOpenFullScreen","containerHeight","isValidToSave","toggleFullScreen","errorMessage","handleSaveRequest","ImagePreview","IframeOverlay","useClipperState","set","Clipper","clipping","stop","clippingWarningDismissed","overlayRef","usePreviewIframe","handleEnd","iframeScroll","top","left","iframeHeight","iframeRect","iframeViewportWidth","iframeViewportHeight","iframeClientWidth","iframeClientHeight","previewWidth","previewHeight","previewRight","previewBottom","rawScaleX","rawScaleY","scaleX","scaleY","selectionRight","selectionBottom","boundedLeft","boundedTop","boundedRight","boundedBottom","boundedWidth","boundedHeight","clipperPos","dismiss","Selecto","ClipperButton","toggleClippingState","Browser","Vo","Chrome","Uo","Firefox","mi","Webkit","P","BrowserIconButton","PhotoSizeSelectLargeIcon","PhotoSizeSelectLargeIconModule","getIframeInnerSize","body","documentElement","ResizeBrowserToIframeContent","innerSize","AspectRatioIcon","AspectRatioIconModule","ResizeBrowserToPreview","RotateLeftIconComponent","RotateLeftIcon","ResetSettings","CameraIconComponent","CameraIcon","ScreenshotOptions","d","CloseOutlinedIcon","CloseOutlined","NearMeOutlinedIcon","NearMeIcon","RefreshSharpIcon","RefreshSharp","activeBrowsers","onCLose","isVertical","enableDisableCursor","enable","GRID_PERCENT","TWO_COLUMNS","LIST_GAP_PX","useScreenshotListLayout","column","activeBrowsersCount","rect","useMeasure","useScreenshotSaveFlow","isQueueSaving","setIsQueueSaving","screenshotDataRef","generateTitle","setScreenshotData","saveForBrowsers","browsersToSave","openSaveDialog","dialogTitle","requestSaveAll","requestSaveOne","ScreenshotListView","showStorybook","viewPanel","refreshBrowsers","itemHeight","isSaving","handleRefresh","PreviewDialog","EditScreenshotAlert","Alert","isHorizontalPanel","storybookPanelPosition","ROOT_SELECTOR","STORYBOOK_ROOT_SELECTOR","hasQuerySelector","documentNode","getRootSelector","normalizeRootSelectorPath","selectorPath","rootSelector","rootElement","legacyRootSelector","legacyRootElement","defaultRect","SelectorOverlay","stopSelector","setSelectorData","useSelectorManager","mouseupRef","setMouseupRef","selectorRef","isIdSelector","isSelector","selectorInfo","setSelectorInfo","elX","elY","useMouseHovered","useKey","useThrottleFn","y","node","path","getSelectorPath","isInBoundary","mouseup","Selector","rootRef","setIframe","DEVIDER_SIZE","Preview","isHorizontal","handleResizeChange","previewPaneIndex","previewPane","Pane","screenshotPane","Separator","panes","SplitPane","sizes","ADDON_ID","ACTIONS_PANEL_ID","SCREENSHOT_PANEL_ID","TOOL_ID","TOAST_ID","PREVIEW_ID","TEMP_ACTION_SET","ImageDiffMenuItem","imageDiff","handleLoadStory","ListItem","ImageDiff","diffResults","failedDiffResults","hasFailedDiff","handleImageDiffClick","handleClearAllResults","sc","iconButton","Badge","WithTooltip","self","diff","PREVIEW_PANEL_SIZE","useResetSetting","ScreenshotUpdateIcon","Tool","setOpen","showFixScreenshotFileDialog","setShowFixScreenshotFileDialog","resetSetting","isEnablePreviewPanelEnabled","handleOpen","handleBowserClose","handlePlacementChange","placement","TooltipLinkList","ShareAltIcon","EyeCloseIcon","EyeIcon","SidebarAltIcon","BottomBarIcon","SyncIcon","ChevronRightIcon","convertOptions","getDefault","defVal","SimpleControl","knob","handleBooleanChange","handleInputChange","handleSelectChange","handleTextareaChange","Form","opt","opts","getControl","_type","useControl","display","setKnob","Control","useAnchorEl","anchorElRef","_setAnchorEl","clearAnchorEl","useKeyPress","targetKey","keyPressed","setKeyPressed","downHandler","upHandler","startSelector","onData","onStop","imgSrcString","diffDirection","isPressed","prevImage","MapInteraction","translation","scale","activeTab","shouldShowDiff","showDiff","setShowDiff","safeCurrentImage","toggleScreenshotDiff","_event","newValue","Tabs","Tab","ImageDiffMessage","trpcHttpClient","queryClient","QueryClient","QueryClientProvider","StateInspector","CheckSelectedIcon","CheckSelected","HelpOutlineSharpIcon","HelpOutlineSharp","CheckNotSelectedIcon","CheckNotSelected","FormControl","appendValueToTitle","onAppendValueToTitle","isRequired","defaultValue","StorybookControl","TargetIconComponent","TargetIcon","PointerIconComponent","PointerIcon","SelectorControl","selectorType","isFollowedByPositionProp","fullObjectPath","onSelectorChange","validate","setValidate","invalidSelector","setInvalidSelector","startSelectorClick","handleSelectorClick","handleIdSelectorClick","handleControlChange","handleBlur","SchemaProp","parents","nextPropName","getValue","shouldAppendToTitle","optionObjectPath","shouldAppend","handleOnAppendValueToTitle","startCase","SchemaRenderer","MemoizedSchemaProp","schemaProps","array","param","MemoizedSchemaRenderer","SchemaFormLoader","defaultData","FooterComponent","schemaName","tempOptions","setTempOptions","requestedSchemaName","handleClear","cr","getActionOptionValue","optionPath","rl","ActionSchemaRenderer","handleGetValue","handleSelectorChange","ActionOptions","setSubtitle","handleExpand","titles","handleDeleteAction","hasParameters","Accordion","AccordionSummary","sub","Chip","QuestionIcon","AccordionDetails","SortableItem","SortableList","onSortEnd","localItems","setLocalItems","handleDragOver","prev","ActionList","handleSortEnd","ActionMenuItem","getMenu","def","actionArr","menuItems","actionKey","prop","childProps","filterFavouriteActions","item","visibleTo","ActionMenu","actionItems","setActionItems","actionList","ActionSetEditorIcons","onEditDescription","onAddAction","menuAnchorEl","setMenuAnchorEl","handleMenuOpen","handleMenuClose","handleMenuChange","PlusIcon","ActionSetEditor","toggleEditDescription","AddFavouriteAction","input","setInput","radioValue","setRadioValue","addFavouriteAction","parent","onAddToFavourite","StarIcon","RadioGroup","v","FormControlLabel","Radio","ActionSetListItem","onEdit","onCheckBoxClick","hideIcons","onDuplicate","handleCheckStateChanged","handleDuplicateActionSet","CopyIcon","SortableActionSetListItem","ActionSetList","copyInProgress","handleCheckBox","defaults","FavouriteActions","getContainerHeight","setActionSets","deleteFavouriteAction","refetchFavouriteActions","loadActions","onAddQuickAction","newActionSet","deleteAction","ActionToolbar","onAddActionSet","onReset","onFavoriteActionsClick","onDeleteSelectedActionSets","deleteDisabled","ActionSetMain","changeActionSetIndex","createNewActionSet","desc","toggleDescriptionDialog","handleReset","handleDeleteSelectedActionSets","types","Toaster","AddonPanel"],"mappings":"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","file":"register.js","sourcesContent":["import { Button, DialogActions, DialogContent, DialogTitle } from '@material-ui/core';\nimport React, { memo } from 'react';\n\nexport interface ActionPanelProps {\n title?: string;\n onPositiveAction?: () => void;\n onNegativeAction?: () => void;\n positiveActionName?: string;\n negativeActionName?: string;\n}\n\nconst ActionPanel: React.FC<ActionPanelProps> = memo(\n ({\n onPositiveAction,\n title,\n onNegativeAction,\n children,\n positiveActionName = 'Save',\n negativeActionName = 'Cancel',\n }) => {\n return (\n <>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>{children}</DialogContent>\n <DialogActions>\n <Button onClick={onNegativeAction}>{negativeActionName}</Button>\n <Button onClick={onPositiveAction}>{positiveActionName}</Button>\n </DialogActions>\n </>\n );\n },\n);\n\nActionPanel.displayName = 'ActionPanel';\n\nexport { ActionPanel };\n","import type React from 'react';\n\nexport function resolveMuiIcon(iconModule: unknown): React.ElementType {\n const maybeModule = iconModule as { default?: React.ElementType };\n return (maybeModule.default ?? (iconModule as React.ElementType)) as React.ElementType;\n}\n","import type { DialogProps as MuDialogProps } from '@material-ui/core';\nimport {\n DialogActions,\n DialogTitle,\n Divider,\n IconButton,\n makeStyles,\n Dialog as MuDialog,\n Typography,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport React from 'react';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst CloseIconComponent = resolveMuiIcon(CloseIcon);\n\ninterface StyleProps {\n width?: string | number;\n height?: string | number;\n}\n\nconst useStyles = makeStyles(\n (theme) => {\n const { primary } = theme.palette;\n\n return {\n closIcon: {\n zIndex: 100,\n },\n input: {\n width: '100%',\n },\n paper: {\n height: (p: StyleProps) => p.height,\n margin: 10,\n maxHeight: 'calc(100% - 20px)',\n maxWidth: (p: StyleProps) => p.width,\n width: (p: StyleProps) => p.width,\n },\n title: {\n '& h6': {\n fontSize: 17,\n },\n color: primary.main,\n display: 'flex',\n justifyContent: 'space-between',\n padding: '12px 24px',\n },\n titleActions: {\n marginBottom: '-10px',\n marginRight: '-18px',\n marginTop: '-8px',\n },\n };\n },\n { name: 'Dialog' },\n);\n\nexport interface DialogProps extends MuDialogProps, StyleProps {\n title?: string;\n subtitle?: string;\n onClose?: () => void;\n footerActions?: React.ComponentType | undefined;\n titleActions?: React.ComponentType | undefined;\n enableCloseButton?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = ({\n children,\n width = '80%',\n height = 'auto',\n title,\n onClose,\n footerActions,\n subtitle,\n titleActions,\n open = false,\n enableCloseButton = true,\n ...rest\n}) => {\n const classes = useStyles({ height, width });\n\n const ActionsComponent = footerActions;\n\n const TitleActions = titleActions;\n\n return (\n <MuDialog\n open={open}\n classes={{\n paper: classes.paper,\n }}\n onClose={onClose}\n {...rest}\n >\n {(TitleActions || enableCloseButton || title || subtitle) && (\n <>\n <DialogTitle disableTypography={true} className={classes.title}>\n <div>\n {title && <Typography variant=\"h6\">{title}</Typography>}\n {subtitle && <Typography variant=\"body1\">{subtitle}</Typography>}\n </div>\n\n <div className={classes.titleActions}>\n {TitleActions && <TitleActions />}\n {enableCloseButton && (\n <IconButton\n color=\"primary\"\n className={classes.closIcon}\n onClick={onClose}\n >\n <CloseIconComponent />\n </IconButton>\n )}\n </div>\n </DialogTitle>\n <Divider />\n </>\n )}\n\n {children}\n {ActionsComponent && (\n <DialogActions>\n <ActionsComponent />\n </DialogActions>\n )}\n </MuDialog>\n );\n};\n\nDialog.displayName = 'Dialog';\n\nexport { Dialog };\n","import type { ActionPanelProps } from './ActionPanel';\nimport type { DialogProps } from './Dialog';\nimport React, { memo, useCallback } from 'react';\nimport { ActionPanel } from './ActionPanel';\nimport { Dialog } from './Dialog';\n\ninterface StyleProps {\n width?: number | string;\n}\n\nexport interface ActionDialogDialogProps\n extends StyleProps, DialogProps, ActionPanelProps {\n open: boolean;\n onClose: () => void;\n value?: string;\n onCancel?: () => void;\n}\n\nconst ActionDialog: React.FC<ActionDialogDialogProps> = memo(\n ({\n onPositiveAction,\n title,\n onNegativeAction,\n open,\n onClose,\n width = '30%',\n children,\n positiveActionName,\n negativeActionName,\n onCancel,\n ...rest\n }) => {\n const handleClose = useCallback(() => {\n onClose();\n if (onCancel) {\n onCancel();\n }\n }, [onCancel, onClose]);\n\n return (\n <Dialog\n enableCloseButton={false}\n open={open}\n onClose={handleClose}\n width={width}\n {...rest}\n >\n <ActionPanel\n onPositiveAction={onPositiveAction}\n negativeActionName={negativeActionName}\n title={title}\n onNegativeAction={onNegativeAction}\n positiveActionName={positiveActionName}\n >\n {children}\n </ActionPanel>\n </Dialog>\n );\n },\n);\n\nActionDialog.displayName = 'ActionDialog';\n\nexport { ActionDialog };\n","import type { PopoverProps } from '@material-ui/core';\nimport type { ActionPanelProps } from './ActionPanel';\nimport { Popover } from '@material-ui/core';\nimport React, { memo } from 'react';\nimport { ActionPanel } from './ActionPanel';\n\nexport interface ActionPopoverProps\n extends ActionPanelProps, Omit<PopoverProps, 'open' | 'onClose'> {\n onClose?: PopoverProps['onClose'];\n}\n\nconst ActionPopover: React.FC<ActionPopoverProps> = memo(\n ({\n onPositiveAction,\n title,\n onNegativeAction,\n children,\n positiveActionName,\n negativeActionName,\n ...rest\n }) => {\n return (\n <Popover open={true} {...rest}>\n <ActionPanel\n onPositiveAction={onPositiveAction}\n negativeActionName={negativeActionName}\n title={title}\n onNegativeAction={onNegativeAction}\n positiveActionName={positiveActionName}\n >\n {children}\n </ActionPanel>\n </Popover>\n );\n },\n);\n\nActionPopover.displayName = 'ActionPopover';\n\nexport { ActionPopover };\n","import { Backdrop, makeStyles } from '@material-ui/core';\nimport React, { memo } from 'react';\n\nconst useStyles = makeStyles(\n () => {\n return {\n backdrop: {\n position: 'absolute',\n },\n root: {\n color: 'red',\n },\n };\n },\n { name: 'ErrorPanel' },\n);\n\nexport interface ErrorPanelProps {\n message: string;\n}\n\nconst ErrorPanel: React.FC<ErrorPanelProps> = memo((props) => {\n const { message } = props;\n\n const classes = useStyles();\n\n return (\n <Backdrop open={true} className={classes.backdrop}>\n <div className={classes.root}>{message}</div>{' '}\n </Backdrop>\n );\n});\n\nErrorPanel.displayName = 'ErrorPanel';\n\nexport { ErrorPanel };\n","export function capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { ScreenshotProp } from '../typings';\n\nimport normalize from 'normalize-url';\nimport { argsToQuerystring } from './args-to-querystring';\nimport { globalsToQuerystring } from './globals-to-querystring';\nimport { knobsToQuerystring } from './knobs-to-querystring';\n\nexport function constructStoryUrl(\n endpoint: string,\n id: string,\n props?: ScreenshotProp,\n args?: ScreenshotProp,\n globals?: ScreenshotProp,\n) {\n let normalized: string;\n\n if (/^\\.{0,2}[/\\\\]/.test(endpoint)) {\n // File-system path (./storybook-static, /abs/path, ../rel/path)\n normalized = `file:///${endpoint.replace(/\\\\/g, '/').replace(/^\\/+/, '')}`;\n } else if (/^https?:\\/\\//i.test(endpoint) || /^file:\\/\\//i.test(endpoint)) {\n // Already has explicit protocol\n normalized = normalize(endpoint);\n } else {\n // Bare hostname:port, IPv4, or plain hostname (e.g. localhost:1090)\n // Prepend http:// so normalize preserves it instead of defaulting to https://\n normalized = normalize(`http://${endpoint}`);\n }\n\n let storyUrl = `${normalized}/iframe.html?id=${id}`;\n\n const argsQuery = argsToQuerystring(args);\n if (argsQuery) {\n storyUrl = `${storyUrl}&args=${argsQuery}`;\n }\n\n const globalsQuery = globalsToQuerystring(globals);\n if (globalsQuery) {\n storyUrl = `${storyUrl}&globals=${globalsQuery}`;\n }\n\n if (props) {\n const propsQuery = knobsToQuerystring(props);\n if (propsQuery) {\n storyUrl = `${storyUrl}&${propsQuery}`;\n }\n }\n\n return storyUrl.replace(/\\\\/g, '/');\n}\n","export function getPreviewIframe() {\n const iframe = document.body.querySelector<HTMLIFrameElement>(\n '#storybook-preview-iframe',\n );\n return iframe;\n}\n","import { getPreviewIframe } from './get-preview-iframe';\n\nexport function findSelector(selector: string) {\n const iframe = getPreviewIframe();\n const element = iframe?.contentWindow?.document.querySelector(selector);\n return element;\n}\n","import type { ActionSchema } from '../typings';\nimport { get } from 'object-path-immutable';\n\nexport function getActionSchema(\n schema: ActionSchema,\n key: string,\n): ActionSchema | undefined {\n if (!key) return undefined;\n\n const extendedKey = key.split('.').join('.properties.');\n const actionSchema = get(schema, extendedKey);\n return actionSchema;\n}\n","{\n \"Blackberry PlayBook\": {\n \"userAgent\": \"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.4 Safari/536.2+\",\n \"viewport\": {\n \"width\": 600,\n \"height\": 1024\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Blackberry PlayBook landscape\": {\n \"userAgent\": \"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.4 Safari/536.2+\",\n \"viewport\": {\n \"width\": 1024,\n \"height\": 600\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"BlackBerry Z30\": {\n \"userAgent\": \"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/15.4 Mobile Safari/537.10+\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"BlackBerry Z30 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/15.4 Mobile Safari/537.10+\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note 3\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note 3 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note II\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note II landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy S III\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy S III landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy S5\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S5 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S8\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 740\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S8 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 740,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S9+\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 658\n },\n \"deviceScaleFactor\": 4.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S9+ landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 658,\n \"height\": 320\n },\n \"deviceScaleFactor\": 4.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy Tab S4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 712,\n \"height\": 1138\n },\n \"deviceScaleFactor\": 2.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy Tab S4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 1138,\n \"height\": 712\n },\n \"deviceScaleFactor\": 2.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"iPad (gen 6)\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 768,\n \"height\": 1024\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad (gen 6) landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1024,\n \"height\": 768\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad (gen 7)\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 810,\n \"height\": 1080\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad (gen 7) landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1080,\n \"height\": 810\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Mini\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 768,\n \"height\": 1024\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Mini landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1024,\n \"height\": 768\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Pro 11\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 834,\n \"height\": 1194\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Pro 11 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1194,\n \"height\": 834\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 667\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 667,\n \"height\": 375\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6 Plus\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 736\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6 Plus landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 736,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 667\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 667,\n \"height\": 375\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7 Plus\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 736\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7 Plus landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 736,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 667\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 667,\n \"height\": 375\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8 Plus\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 736\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8 Plus landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 736,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone SE\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/15.4 Mobile/14E304 Safari/602.1\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 568\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone SE landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/15.4 Mobile/14E304 Safari/602.1\",\n \"viewport\": {\n \"width\": 568,\n \"height\": 320\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone X\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 812\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone X landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 812,\n \"height\": 375\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone XR\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 896\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone XR landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 896,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 414,\n \"height\": 715\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 800,\n \"height\": 364\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 375,\n \"height\": 635\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 724,\n \"height\": 325\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro Max\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 414,\n \"height\": 715\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro Max landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 808,\n \"height\": 364\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 340\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 340\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro Max\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 428,\n \"height\": 746\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro Max landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 832,\n \"height\": 378\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 342\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 342\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro Max\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 428,\n \"height\": 746\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro Max landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 832,\n \"height\": 380\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Mini\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 375,\n \"height\": 629\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Mini landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 712,\n \"height\": 327\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"JioPhone 2\": {\n \"userAgent\": \"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:89.0 Gecko/48.0 Firefox/93.0 KAIOS/2.5\",\n \"viewport\": {\n \"width\": 240,\n \"height\": 320\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"firefox\"\n },\n \"JioPhone 2 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:89.0 Gecko/48.0 Firefox/93.0 KAIOS/2.5\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 240\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"firefox\"\n },\n \"Kindle Fire HDX\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true\",\n \"viewport\": {\n \"width\": 800,\n \"height\": 1280\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Kindle Fire HDX landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true\",\n \"viewport\": {\n \"width\": 1280,\n \"height\": 800\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"LG Optimus L70\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 384,\n \"height\": 640\n },\n \"deviceScaleFactor\": 1.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"LG Optimus L70 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 384\n },\n \"deviceScaleFactor\": 1.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 550\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 550 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 950\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 4,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 950 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 4,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 10\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 800,\n \"height\": 1280\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 10 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 1280,\n \"height\": 800\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 384,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 384\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5X\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 412,\n \"height\": 732\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5X landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 732,\n \"height\": 412\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 412,\n \"height\": 732\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 732,\n \"height\": 412\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6P\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 412,\n \"height\": 732\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6P landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 732,\n \"height\": 412\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 7\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 600,\n \"height\": 960\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 7 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 960,\n \"height\": 600\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nokia Lumia 520\": {\n \"userAgent\": \"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 533\n },\n \"deviceScaleFactor\": 1.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nokia Lumia 520 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)\",\n \"viewport\": {\n \"width\": 533,\n \"height\": 320\n },\n \"deviceScaleFactor\": 1.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nokia N9\": {\n \"userAgent\": \"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\",\n \"viewport\": {\n \"width\": 480,\n \"height\": 854\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Nokia N9 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\",\n \"viewport\": {\n \"width\": 854,\n \"height\": 480\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Pixel 2\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 411,\n \"height\": 731\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 2 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 731,\n \"height\": 411\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 2 XL\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 411,\n \"height\": 823\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 2 XL landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 823,\n \"height\": 411\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 3\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 393,\n \"height\": 786\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 3 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 786,\n \"height\": 393\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 353,\n \"height\": 745\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 745,\n \"height\": 353\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4a (5G)\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"width\": 412,\n \"height\": 892\n },\n \"viewport\": {\n \"width\": 412,\n \"height\": 765\n },\n \"deviceScaleFactor\": 2.63,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4a (5G) landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"height\": 892,\n \"width\": 412\n },\n \"viewport\": {\n \"width\": 840,\n \"height\": 312\n },\n \"deviceScaleFactor\": 2.63,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 5\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"width\": 393,\n \"height\": 851\n },\n \"viewport\": {\n \"width\": 393,\n \"height\": 727\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 5 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"width\": 851,\n \"height\": 393\n },\n \"viewport\": {\n \"width\": 802,\n \"height\": 293\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Moto G4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Moto G4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Chrome HiDPI\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Edge HiDPI\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36 Edg/97.0.4666.0\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Firefox HiDPI\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0 Gecko/20100101 Firefox/93.0\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"firefox\"\n },\n \"Desktop Safari\": {\n \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Desktop Chrome\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"screen\": {\n \"width\": 1920,\n \"height\": 1080\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Edge\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36 Edg/97.0.4666.0\",\n \"screen\": {\n \"width\": 1920,\n \"height\": 1080\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Firefox\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0 Gecko/20100101 Firefox/93.0\",\n \"screen\": {\n \"width\": 1920,\n \"height\": 1080\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"firefox\"\n }\n}\n","import type { BrowserContextOptions } from '../typings';\nimport DeviceDescriptors from '../data/deviceDescriptorsSource.json';\n\nexport function getDeviceInfo(deviceName?: string): BrowserContextOptions | undefined {\n if (!deviceName) return undefined;\n const device = DeviceDescriptors[deviceName] as BrowserContextOptions;\n if (!device) return undefined;\n device.deviceName = deviceName;\n return device;\n}\n","export function getIframeDocument(iframe: HTMLIFrameElement) {\n return iframe.contentDocument || iframe.contentWindow?.document;\n}\n","import { getIframeDocument } from './get-iframe-document';\n\nexport function getIframeScrollPosition(iframe: HTMLIFrameElement) {\n const iframeDocument = getIframeDocument(iframe);\n\n if (!iframeDocument) {\n return { scrollLeft: 0, scrollTop: 0 };\n }\n\n const frameWindow = iframeDocument.defaultView;\n\n const scrollTop =\n (frameWindow ? frameWindow.pageYOffset : 0) ||\n iframeDocument.documentElement.scrollTop;\n const scrollLeft =\n (frameWindow ? frameWindow.pageXOffset : 0) ||\n iframeDocument.documentElement.scrollLeft;\n\n return { scrollLeft, scrollTop };\n}\n","import type { ImageDiffResult } from '../api/typings';\n\nexport function getImageDiffMessages(result: ImageDiffResult) {\n if (result.error) return result.error;\n\n if (result.diffSize && result.imageDimensions) {\n return `Expected image to be the same size as the snapshot (${result.imageDimensions.baselineWidth}x${result.imageDimensions.baselineHeight}), but was different (${result.imageDimensions.receivedWidth}x${result.imageDimensions.receivedHeight}).`;\n }\n\n if (result.diffRatio) {\n const differencePercentage = result.diffRatio * 100;\n return `Expected image to match or be a close match to snapshot but was ${differencePercentage}% different from snapshot (${result.diffPixelCount} differing pixels).`;\n }\n return '';\n}\n","import type { ScreenshotProp } from '../typings';\n\nexport function getScreenshotProp(\n ...candidates: Array<ScreenshotProp | undefined>\n): ScreenshotProp | undefined {\n for (let i = 0; i < candidates.length; i++) {\n const value = candidates[i];\n if (value && Object.keys(value).length > 0) {\n return value;\n }\n }\n\n return undefined;\n}\n","import type { ScreenshotProp } from '../typings';\nimport { getScreenshotProp } from './get-screenshot-prop';\n\ninterface ScreenshotGlobalsLike {\n globals?: ScreenshotProp;\n}\n\nexport const getScreenshotGlobals = (\n data?: ScreenshotGlobalsLike,\n): ScreenshotProp | undefined => {\n if (!data) return undefined;\n\n return getScreenshotProp(data.globals);\n};\n","import { ScreenshotProp } from '../typings';\nimport { getScreenshotProp } from './get-screenshot-prop';\n\ninterface ScreenshotArgsLike {\n args?: ScreenshotProp;\n props?: ScreenshotProp;\n}\n\nexport const getScreenshotArgs = (\n data?: ScreenshotArgsLike,\n): ScreenshotProp | undefined => {\n if (!data) return undefined;\n\n return getScreenshotProp(data.args, data.props);\n};\n","export function isStoryJsonFile(jsonOrStoryFileName: string, storyFileName: string) {\n if (jsonOrStoryFileName === storyFileName) return true;\n const jsonName = jsonOrStoryFileName.split('.').slice(0, -2).join('.');\n const storyName = storyFileName.split('.').slice(0, -1).join('.');\n return storyName.endsWith(jsonName);\n}\n","import { findSelector } from './find-selector';\n\nexport function isValidSelector(selector: string) {\n try {\n if (!selector || findSelector(selector) == null) {\n return false;\n }\n return true;\n } catch {\n return false;\n }\n}\n","import { getHighestZindex } from '@pixpilot/dom';\nimport { IconButton } from '@storybook/components';\nimport { AlertIcon, CrossIcon, FailedIcon, PassedIcon } from '@storybook/icons';\nimport React from 'react';\n\nexport type AlertVariant = 'error' | 'info' | 'warning' | 'success' | 'default';\n\nexport interface AlertBaseProps {\n variant?: AlertVariant;\n description?: React.ReactNode;\n duration?: number; // in milliseconds\n title?: string;\n className?: string;\n closeButton?: boolean;\n}\n\nexport interface AlertToastProps extends AlertBaseProps {\n onClose?: () => void;\n description?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction getVariantIcon(variant: AlertVariant) {\n switch (variant) {\n case 'success':\n return <PassedIcon />;\n case 'error':\n return <FailedIcon />;\n case 'warning':\n return <AlertIcon />;\n case 'info':\n return <AlertIcon />;\n default:\n return null;\n }\n}\n\nfunction getVariantIconColor(variant: AlertVariant, isDarkMode: boolean) {\n switch (variant) {\n case 'success':\n return isDarkMode ? '#4ade80' : '#166534';\n case 'error':\n return isDarkMode ? '#f87171' : '#991b1b';\n case 'warning':\n return isDarkMode ? '#fbbf24' : '#92400e';\n case 'info':\n return isDarkMode ? '#60a5fa' : '#1e40af';\n default:\n return 'currentColor';\n }\n}\n\nexport const ToastMessageContainer: React.FC<React.HTMLAttributes<HTMLDivElement>> = (\n props,\n) => {\n return (\n <div\n {...props}\n style={{\n fontSize: '11px',\n lineHeight: '14px',\n opacity: 0.9,\n overflowWrap: 'anywhere',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n ...props.style,\n }}\n ></div>\n );\n};\n\nconst AlertToast: React.FC<AlertToastProps> = ({\n title,\n description,\n variant = 'info',\n onClose,\n style,\n closeButton = true,\n children,\n ...rest\n}) => {\n const isLightMode = document.body.classList.contains('light');\n\n const backgroundColor = isLightMode ? 'rgba(32, 34, 37, 0.98)' : 'rgb(238, 243, 246)';\n const borderColor = isLightMode\n ? 'rgba(255, 255, 255, 0.08)'\n : 'rgba(206, 197, 197, 0.315)';\n const textColor = isLightMode ? 'rgba(255, 255, 255, 0.88)' : 'rgba(34, 36, 37, 0.75)';\n const titleColor = isLightMode ? 'rgba(255, 255, 255, 0.96)' : 'rgb(115, 130, 140)';\n const closeButtonColor = isLightMode\n ? 'rgba(255, 255, 255, 0.72)'\n : 'rgba(34, 36, 37, 0.6)';\n\n const containerStyle: React.CSSProperties = {\n alignItems: 'center',\n background: backgroundColor,\n border: `1px solid ${borderColor}`,\n borderRadius: '5px',\n boxShadow: isLightMode\n ? '0 14px 32px rgba(0, 0, 0, 0.35)'\n : '0 10px 28px rgba(15, 23, 42, 0.12)',\n color: textColor,\n display: 'flex',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n gap: '12px',\n maxWidth: '450px',\n overflow: 'hidden',\n padding: '12px 16px',\n position: 'relative',\n zIndex: getHighestZindex() + 1,\n ...style,\n };\n\n const variantIcon = getVariantIcon(variant);\n const variantIconColor = getVariantIconColor(variant, isLightMode);\n\n const descriptioncomponent =\n typeof description === 'string'\n ? description.split('\\n').map((line, index) => (\n <span key={index}>\n {line}\n <br />\n </span>\n ))\n : description;\n\n return (\n <div style={containerStyle} {...rest}>\n {variantIcon && <div style={{ color: variantIconColor }}>{variantIcon}</div>}\n\n <div style={{ flex: 1, minWidth: 0 }}>\n {title && (\n <div\n style={{\n color: titleColor,\n fontSize: '12px',\n fontWeight: 700,\n lineHeight: '16px',\n marginBottom: '2px',\n }}\n >\n {title}\n </div>\n )}\n {description && (\n <ToastMessageContainer>{descriptioncomponent}</ToastMessageContainer>\n )}\n {children}\n </div>\n\n {onClose && closeButton && (\n <IconButton\n onClick={onClose}\n aria-label=\"Dismiss notification\"\n title=\"Dismiss notification\"\n style={{ color: closeButtonColor }}\n >\n <CrossIcon />\n </IconButton>\n )}\n </div>\n );\n};\n\nexport default AlertToast;\n","import type { ExternalToast, ToastT } from 'sonner';\nimport type { AlertBaseProps, AlertToastProps, AlertVariant } from './AlertToast';\nimport { simpleHash } from '@pixpilot/hash';\nimport React from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport AlertToast from './AlertToast';\n\nexport const DEFAULT_ALERT_DURATION = 10_000;\n\ninterface ToastOwnProps extends Pick<\n ToastT,\n 'dismissible' | 'duration' | 'position' | 'onAutoClose' | 'onDismiss' | 'closeButton'\n> {\n id?: string;\n}\n\ninterface ToastProps extends AlertBaseProps, ToastOwnProps {\n description?: string;\n}\n\nexport type ToastMessage =\n | string\n | ({ title: string; description: string } & AlertToastProps);\n\ninterface ToastCustomRenderProps {\n id: string | number;\n dismiss: () => void;\n}\n\ntype ToastCustomContent =\n | React.ReactElement\n | ((props: ToastCustomRenderProps) => React.ReactElement);\n\nexport interface ToastFunction {\n (props: ToastProps): string;\n error: (message: ToastMessage, options?: ToastOwnProps) => string;\n success: (message: ToastMessage, options?: ToastOwnProps) => string;\n warning: (message: ToastMessage, options?: ToastOwnProps) => string;\n info: (message: ToastMessage, options?: ToastOwnProps) => string;\n custom: (component: ToastCustomContent, options?: ExternalToast) => string | number;\n dismiss: (id: string | number) => void;\n dismissAll: () => void;\n}\n\n// Track toast instances with counter\nconst toastInstances = new Map<string, { currentId: string; counter: number }>();\n\nfunction getToastId(baseId: string) {\n // Get or initialize the instance tracker\n const instance = toastInstances.get(baseId);\n\n if (instance) {\n // Dismiss the previous instance\n sonnerToast.dismiss(instance.currentId);\n\n // Increment counter and create new ID\n instance.counter += 1;\n instance.currentId = `${baseId}_${instance.counter}`;\n } else {\n // First time showing this toast\n toastInstances.set(baseId, {\n counter: 0,\n currentId: `${baseId}_0`,\n });\n }\n\n const currentInstance = toastInstances.get(baseId);\n return currentInstance?.currentId ?? baseId;\n}\n\nfunction getToastHandlers(baseId: string) {\n const cleanUp = (tId: string | number) => {\n const latestInstance = toastInstances.get(baseId);\n if (latestInstance && latestInstance.currentId === tId) {\n toastInstances.delete(baseId);\n }\n };\n\n return {\n onAutoClose: (t: ToastT) => {\n cleanUp(t.id);\n },\n onDismiss: (t: ToastT) => {\n cleanUp(t.id);\n },\n };\n}\nconst toast: ToastFunction = function (props: ToastProps) {\n const { duration, id, dismissible = true, position, ...rest } = props;\n\n let toastId: string;\n let handlers: ReturnType<typeof getToastHandlers> | undefined;\n\n if (id != null) {\n // Use explicit ID directly - no tracking or counter\n toastId = id;\n } else {\n // Auto-generated ID with tracking for replacement\n const baseId = `toast_${simpleHash(\n `${props.title ?? ''}::${props.description ?? ''}`,\n )}`;\n toastId = getToastId(baseId);\n handlers = getToastHandlers(baseId);\n }\n\n sonnerToast.custom(\n (t) => (\n <AlertToast\n {...rest}\n onClose={dismissible ? () => sonnerToast.dismiss(t) : undefined}\n />\n ),\n {\n duration: duration ?? DEFAULT_ALERT_DURATION,\n id: toastId,\n position,\n ...handlers,\n },\n );\n\n return toastId;\n};\n\nfunction createToast(\n variant: AlertVariant,\n message: ToastMessage,\n options?: ToastOwnProps,\n) {\n if (typeof message === 'string') {\n return toast({ ...options, description: message, variant });\n }\n return toast({ ...options, ...message, variant });\n}\n\ntoast.error = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('error', message, options);\ntoast.success = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('success', message, options);\ntoast.warning = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('warning', message, options);\ntoast.info = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('info', message, options);\n\ntoast.custom = (component: ToastCustomContent, options?: ExternalToast) => {\n const { duration, ...rest } = options || {};\n\n // 1. No tracking Map!\n // 2. No ID generation! (Sonner does this natively if `id` is missing)\n // 3. No counter suffixes!\n\n return sonnerToast.custom(\n (t) => {\n if (typeof component === 'function') {\n return component({\n dismiss: () => sonnerToast.dismiss(t),\n id: t,\n });\n }\n\n return component;\n },\n {\n duration: duration ?? DEFAULT_ALERT_DURATION,\n ...rest, // This passes 'id', 'position', etc., straight to Sonner\n },\n );\n};\ntoast.dismiss = (id: string | number) => {\n sonnerToast.dismiss(id);\n};\n\ntoast.dismissAll = () => {\n sonnerToast.dismiss();\n toastInstances.clear();\n};\n\nexport { toast };\n","import type { ActionSchemaList, StoryAction } from '../typings';\nimport { getActionSchema } from './get-schema';\n\nexport interface ValidationResult {\n required?: string[];\n}\n\nexport interface ActionListValidationResult extends ValidationResult {\n id: string;\n name: string;\n}\n\nexport function validAction(\n schema: ActionSchemaList,\n action: StoryAction,\n): ValidationResult {\n const actionSchema = getActionSchema(schema, action.name);\n\n if (!actionSchema || !actionSchema.required || !actionSchema.required.length) return {};\n\n if (!action.args) {\n return { required: actionSchema.required };\n }\n\n const argKeys = Object.keys(action.args);\n\n if (argKeys.length === 0) {\n return { required: actionSchema.required };\n }\n\n const requiredParams: string[] = [];\n\n for (let i = 0; i < actionSchema.required.length; i++) {\n const requiredParam = actionSchema.required[i];\n const val = action.args[requiredParam];\n if (!val) {\n requiredParams.push(requiredParam);\n }\n }\n\n return {\n required: requiredParams.length === 0 ? undefined : requiredParams,\n };\n}\n\nexport function isValidAction(schema: ActionSchemaList, action: StoryAction) {\n const result = validAction(schema, action);\n\n return result.required === undefined;\n}\n\nexport function validateActionList(schema: ActionSchemaList, actions: StoryAction[]) {\n const result = actions.reduce<ActionListValidationResult[]>((arr, action) => {\n const res = validAction(schema, action);\n if (res.required) {\n arr.push({\n id: action.id,\n name: action.name,\n ...res,\n });\n }\n return arr;\n }, []);\n return result.length === 0 ? undefined : result;\n}\n","import type { ActionDialogDialogProps } from './ActionDialog';\nimport { Button, CircularProgress, makeStyles, TextField } from '@material-ui/core';\nimport NiceModal, { useModal } from '@ebay/nice-modal-react';\n\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { ActionDialog } from './ActionDialog';\nimport { toast } from '../../utils';\n\ninterface StyleProps {\n width?: number | string;\n}\n\nconst useStyles = makeStyles(\n () => {\n return {\n generateButton: {\n marginTop: 8,\n },\n input: {\n width: '100%',\n },\n paper: {\n width: (p: StyleProps) => p.width,\n },\n };\n },\n { name: 'InputDialog' },\n);\nexport { useStyles as useInputDialogStyles };\n\nexport interface InputDialogProps\n extends\n StyleProps,\n Omit<ActionDialogDialogProps, 'onNegativeAction' | 'onPositiveAction' | 'onClose'> {\n onSave: (content: string) => void;\n onCancel?: () => void;\n onClose: (closed?: true) => void;\n value?: string;\n required?: boolean;\n requiredMessage?: string;\n label?: string;\n onGenerateContent?: () => Promise<string | undefined>;\n}\n\nconst InputDialog: React.FC<InputDialogProps> = ({\n value = '',\n onSave,\n requiredMessage = 'Field is required',\n required,\n onCancel,\n onClose,\n width = '30%',\n open,\n children,\n label,\n onGenerateContent,\n ...rest\n}) => {\n const [inputValue, setValue] = useState(value);\n const [hasError, setHasError] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n\n const classes = useStyles({ width });\n const showGenerateButton = Boolean(onGenerateContent);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n }, []);\n\n const handleClose = useCallback(() => {\n onClose(true);\n if (onCancel) {\n onCancel();\n }\n }, [onCancel, onClose]);\n\n const handleSave = useCallback(() => {\n if (required && !inputValue) {\n toast.error(requiredMessage);\n setHasError(true);\n return;\n }\n onSave(inputValue.trim());\n }, [inputValue, onSave, required, requiredMessage]);\n\n const handleGenerate = useCallback(async () => {\n if (!onGenerateContent) return;\n setIsGenerating(true);\n try {\n const generated = await onGenerateContent();\n if (generated !== undefined) {\n setValue(generated);\n }\n } finally {\n setIsGenerating(false);\n }\n }, [onGenerateContent]);\n\n useEffect(() => {\n setValue(value);\n }, [value, open]);\n\n return (\n <ActionDialog\n onPositiveAction={handleSave}\n onNegativeAction={handleClose}\n onClose={handleClose}\n open={open}\n {...rest}\n >\n <TextField\n className={classes.input}\n multiline\n rows={3}\n value={inputValue}\n onChange={handleChange}\n variant=\"outlined\"\n autoFocus\n label={label}\n error={hasError}\n required\n InputLabelProps={{\n shrink: true,\n }}\n ></TextField>\n\n {showGenerateButton && (\n <div style={{ justifyContent: 'end', display: 'flex' }}>\n <Button\n className={classes.generateButton}\n size=\"small\"\n onClick={handleGenerate}\n disabled={isGenerating}\n startIcon={isGenerating ? <CircularProgress size={14} /> : undefined}\n >\n {isGenerating ? 'Generating...' : 'Generate Title'}\n </Button>\n </div>\n )}\n {children}\n </ActionDialog>\n );\n};\n\nInputDialog.displayName = 'InputDialog';\n\nexport type InputModalProps = Omit<InputDialogProps, 'open' | 'onClose'>;\n\nconst InputDialogModal = NiceModal.create<InputModalProps>((props) => {\n const modal = useModal();\n\n const handleClose = useCallback(() => {\n modal.hide();\n }, [modal]);\n\n const handleSave = useCallback(\n (content: string) => {\n props.onSave(content);\n modal.hide();\n },\n [modal, props],\n );\n\n return (\n <InputDialog\n {...props}\n open={modal.visible}\n onClose={handleClose}\n onSave={handleSave}\n />\n );\n});\n\nInputDialogModal.displayName = 'InputDialogModal';\n\nexport const INPUT_DIALOG_MODAL_ID = 'input-dialog';\n\nlet registered = false;\n\nconst registerInputDialogModal = () => {\n if (registered) return;\n NiceModal.register(INPUT_DIALOG_MODAL_ID, InputDialogModal);\n registered = true;\n};\n\nconst inputModal = {\n show: (props: InputModalProps) => NiceModal.show(INPUT_DIALOG_MODAL_ID, props),\n};\n\nexport { InputDialog, inputModal, registerInputDialogModal };\n","import { Backdrop, CircularProgress, makeStyles } from '@material-ui/core';\nimport { getHighestZindex } from '@pixpilot/dom';\nimport React, { memo } from 'react';\nimport tinycolor from 'tinycolor2';\n\nconst useStyles = makeStyles(\n (theme) => {\n const { background } = theme.palette;\n const color = tinycolor(background.paper);\n color.setAlpha(0.5);\n return {\n root: {\n backgroundColor: color.toString(),\n },\n };\n },\n { name: 'Loader' },\n);\n\nexport interface LoaderProps {\n open: boolean;\n progressSize?: number;\n position?: 'relative' | 'absolute';\n}\n\nconst Loader: React.FC<LoaderProps> = memo((props) => {\n const { open, progressSize, position } = props;\n\n const classes = useStyles();\n\n if (!open) return null;\n\n return (\n <Backdrop\n className={`${classes.root} loader-backdrop`}\n style={{ position, zIndex: getHighestZindex() }}\n open={open}\n >\n {open && <CircularProgress size={progressSize} />}\n </Backdrop>\n );\n});\n\nLoader.displayName = 'Loader';\n\nexport { Loader };\n","import type { AppRouter } from './router';\nimport { httpBatchLink } from '@trpc/client';\nimport { createTRPCReact } from '@trpc/react-query';\n\nconst BASE = typeof window !== 'undefined' ? window.location.origin : '';\n\nexport const trpcClient = createTRPCReact<AppRouter>();\n\nexport function createTrpcHttpClient() {\n return trpcClient.createClient({\n links: [\n httpBatchLink({\n maxURLLength: 2083,\n url: `${BASE}/__storybook_playwright/trpc`,\n }),\n ],\n });\n}\n","import type { Theme } from '@material-ui/core';\nimport React from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\n\nexport function useCustomTheme() {\n const [theme, setTheme] = React.useState<Theme>();\n const isTheme = React.useRef(false);\n\n const { data } = trpcClient.theme.getThemeData.useQuery();\n\n React.useEffect(() => {\n if (!isTheme.current && data) {\n setTheme(data as Theme);\n }\n return () => {\n isTheme.current = true;\n };\n }, [data]);\n\n return { setTheme, theme };\n}\n","import { createTheme, ThemeProvider as MuThemeProvider } from '@material-ui/core/styles';\nimport { useStorybookState } from '@storybook/manager-api';\nimport React, { memo } from 'react';\nimport { useCustomTheme } from '../../features/theme/hooks/use-custom-theme';\n// import global from 'jss-plugin-global';\n\nconst ThemeProvider: React.FC = memo((props) => {\n const { children } = props;\n\n const { theme: storyBookTheme } = useStorybookState();\n const { theme: customTheme } = useCustomTheme();\n const theme = createTheme(\n {\n palette: {\n action: { active: storyBookTheme.barTextColor },\n background: {\n default: storyBookTheme.appBg,\n paper: storyBookTheme.appContentBg,\n },\n divider: storyBookTheme.appBorderColor,\n primary: { main: storyBookTheme.colorSecondary },\n secondary: { main: storyBookTheme.colorPrimary },\n text: { primary: storyBookTheme.barTextColor },\n type: storyBookTheme.base === 'dark' ? 'dark' : 'light',\n },\n typography: {\n fontFamily: storyBookTheme.fontBase,\n },\n },\n customTheme || {},\n );\n\n return <MuThemeProvider theme={theme}>{children}</MuThemeProvider>;\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n\nexport { ThemeProvider };\n","import { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React from 'react';\n\nconst useStyles = makeStyles(\n (theme) => {\n const { divider, text } = theme.palette;\n\n return {\n root: {\n '& button': {\n alignItems: 'center',\n display: 'flex',\n marginTop: 0,\n },\n '& svg': {\n width: 18,\n },\n '&.border-bottom': {\n borderBottom: `1px solid ${divider}`,\n },\n '&.border-left': {\n borderLeft: `1px solid ${divider}`,\n },\n '&.border-right': {\n borderRight: `1px solid ${divider}`,\n },\n '&.border-top': {\n borderTop: `1px solid ${divider}`,\n },\n padding: 2,\n },\n toolbar: {\n '& > .left': {\n '& > *': {\n marginLeft: 8,\n },\n },\n '& > .left,& > .right': {\n alignItems: 'center',\n display: 'flex',\n minWidth: 0,\n },\n '& > .right': {\n '& > *': {\n marginRight: 6,\n },\n },\n alignItems: 'center',\n color: text.primary,\n display: 'flex',\n justifyContent: 'space-between',\n },\n };\n },\n { name: 'Toolbar' },\n);\n\ntype Border = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface ToolbarProps {\n border?: Border[];\n}\n\nconst Toolbar: React.FC<ToolbarProps> = (props) => {\n const { children, border } = props;\n\n const classes = useStyles();\n\n return (\n <div\n className={\n clsx(classes.root) + (border && border.map((x) => ` border-${x}`).join(' '))\n }\n >\n <div className={classes.toolbar}>{children}</div>\n </div>\n );\n};\n\nToolbar.displayName = 'Toolbar';\n\nexport { Toolbar };\n","import type { ActionPopoverProps } from './ActionPopover';\nimport { Typography } from '@material-ui/core';\nimport React, { memo, useCallback } from 'react';\nimport { ActionPopover } from './ActionPopover';\n\nexport interface ConfirmationPopoverProps extends ActionPopoverProps {\n onConfirm: () => void;\n onCancel?: () => void;\n message?: string;\n}\n\nconst ConfirmationPopover: React.FC<ConfirmationPopoverProps> = memo(\n ({\n message = 'Are you sure you want to continue?',\n title = 'Confirmation',\n onConfirm,\n onCancel,\n onClose,\n ...rest\n }) => {\n const handleCancel = useCallback(() => {\n if (onCancel) onCancel();\n if (onClose) {\n onClose({}, 'backdropClick');\n }\n }, [onCancel, onClose]);\n\n return (\n <ActionPopover\n onPositiveAction={onConfirm}\n onNegativeAction={handleCancel}\n positiveActionName=\"yes\"\n negativeActionName=\"no\"\n onClose={handleCancel}\n title={title}\n {...rest}\n >\n <Typography>{message}</Typography>\n </ActionPopover>\n );\n },\n);\n\nConfirmationPopover.displayName = 'ConfirmationPopover';\n\nexport { ConfirmationPopover };\n","import DragIndicatorSharp from '@material-ui/icons/DragIndicatorSharp';\nimport clsx from 'clsx';\nimport React from 'react';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst DragIndicatorSharpIcon = resolveMuiIcon(DragIndicatorSharp);\n\nexport interface DragHandleProps extends React.HTMLAttributes<HTMLSpanElement> {\n setNodeRef?: (element: HTMLSpanElement | null) => void;\n}\n\nexport const DragHandle: React.FC<DragHandleProps> = ({\n className,\n setNodeRef,\n ...rest\n}) => {\n return (\n <span\n className={clsx('drag-handle', className)}\n ref={setNodeRef}\n style={{ cursor: 'move', display: 'inline-flex' }}\n {...rest}\n >\n <DragIndicatorSharpIcon\n style={{\n cursor: 'move',\n fontSize: 25,\n marginLeft: -12,\n marginRight: 2,\n }}\n />\n </span>\n );\n};\n\nDragHandle.displayName = 'DragHandle';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { DragHandleProps } from './DragHandle';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { useCallback } from 'react';\nimport tinycolor from 'tinycolor2';\nimport { DragHandle } from './DragHandle';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { divider, text, primary, secondary },\n } = theme;\n\n return {\n column: {\n alignItems: 'center',\n display: 'flex',\n },\n handle: {\n fontSize: 24,\n },\n header: {\n '& svg': {\n '&:hover': {\n color: primary.main,\n },\n fontSize: 18,\n },\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n minHeight: '48px',\n padding: '5px 8px',\n paddingLeft: 16,\n },\n icons: {\n display: 'flex',\n gap: 2,\n },\n root: {\n border: `1px solid ${divider}`,\n color: text.primary,\n display: 'flex',\n flexDirection: 'column',\n fontSize: 14,\n marginBottom: 4,\n position: 'relative',\n },\n secondaryColor: {\n '& svg': {\n color: secondary.main,\n },\n color: secondary.main,\n },\n selected: {\n border: `1px solid ${tinycolor(primary.main).setAlpha(0.6)}`,\n },\n selectedSecondary: {\n border: `1px solid ${secondary.main}`,\n },\n };\n },\n { name: 'ListItemWrapper' },\n);\n\nexport interface ListItemWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n draggable?: boolean;\n selected?: boolean;\n tooltip: string;\n icons?: React.ReactNode;\n secondaryColor?: boolean;\n dragHandleProps?: DragHandleProps;\n}\n\nconst ListItemWrapper: React.FC<ListItemWrapperProps> = (props) => {\n const {\n title,\n draggable,\n children,\n selected,\n className,\n onClick,\n tooltip,\n icons,\n secondaryColor,\n dragHandleProps,\n ...rest\n } = props;\n\n const classes = useStyles();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (onClick && (e.target as HTMLDivElement).classList.contains('clickable')) {\n onClick(e);\n }\n },\n [onClick],\n );\n\n return (\n <div\n className={clsx(\n classes.root,\n { [classes.selected]: selected && !secondaryColor },\n { [classes.selectedSecondary]: selected && secondaryColor },\n className,\n )}\n {...rest}\n title={tooltip}\n onClick={handleClick}\n >\n <div className={clsx('clickable', classes.header, 'list-item-header')}>\n <div\n className={clsx(classes.column, 'clickable', {\n [classes.secondaryColor]: secondaryColor,\n })}\n >\n {draggable && <DragHandle {...dragHandleProps} />}\n {capitalize(title)}\n </div>\n <div\n className={clsx('clickable', classes.column, classes.icons, {\n [classes.secondaryColor]: secondaryColor,\n })}\n >\n {icons}\n </div>\n </div>\n {children && <div className=\"list-item-content\">{children}</div>}\n </div>\n );\n};\n\nListItemWrapper.displayName = 'ListItemWrapper';\n\nexport { ListItemWrapper };\n","import { makeStyles } from '@material-ui/core';\nimport { ScrollArea } from '@storybook/components';\nimport clsx from 'clsx';\nimport React, { useEffect, useRef } from 'react';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n root: {\n '& *:focus': { outline: 'none' },\n color: theme.palette.text.primary,\n height: 'calc(100% - 50px)',\n padding: 4,\n width: '100%',\n },\n };\n },\n { name: 'ListWrapper' },\n);\n\nexport { useStyles as useListWrapperStyles };\n\nconst ListWrapper: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => {\n const { children, ...rest } = props;\n\n const classes = useStyles();\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current || !ref.current.parentElement) return;\n // setting storybook panel to height to stretch our panel\n ref.current.parentElement.style.height = '100%';\n }, []);\n\n return (\n <div ref={ref} {...rest} className={clsx(classes.root, props.className)}>\n <ScrollArea vertical>{children}</ScrollArea>\n </div>\n );\n};\n\nconst ListWrapperSortableContainer: React.FC<React.HTMLAttributes<HTMLDivElement>> = (\n props,\n) => {\n return <ListWrapper {...props} />;\n};\n\nListWrapperSortableContainer.displayName = 'ListWrapperSortableContainer';\n\nListWrapper.displayName = 'ListWrapper';\n\nexport { ListWrapper, ListWrapperSortableContainer };\n","import { IconButton as StorybookIconButton } from '@storybook/components';\nimport { TrashIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport { ConfirmationPopover } from '../common';\n\nexport interface DeleteConfirmationButtonProps {\n onDelete: () => void;\n IconButton?: React.ComponentType<unknown>;\n onClose?: () => void;\n disabled?: boolean;\n}\n\nconst DeleteConfirmationButton: React.FC<DeleteConfirmationButtonProps> = ({\n onDelete,\n IconButton = StorybookIconButton,\n onClose,\n disabled,\n}) => {\n const [confirmAnchorEl, setConfirmAnchorEl] = React.useState<HTMLButtonElement | null>(\n null,\n );\n\n const handleDelete = useCallback((e: React.SyntheticEvent<Element, Event>) => {\n e.stopPropagation();\n setConfirmAnchorEl(e.currentTarget as HTMLButtonElement);\n }, []);\n\n const closeDeleteConfirmation = useCallback(() => {\n if (onClose) onClose();\n setConfirmAnchorEl(null);\n }, [onClose]);\n\n const handleDeleteConfirmation = useCallback(() => {\n closeDeleteConfirmation();\n onDelete();\n }, [closeDeleteConfirmation, onDelete]);\n\n return (\n <>\n <IconButton\n disabled={disabled}\n onClick={handleDelete}\n title=\"Delete Item\"\n size=\"small\"\n >\n <TrashIcon />\n </IconButton>\n\n {confirmAnchorEl && (\n <ConfirmationPopover\n onClose={closeDeleteConfirmation}\n onConfirm={handleDeleteConfirmation}\n anchorEl={confirmAnchorEl}\n />\n )}\n </>\n );\n};\n\nDeleteConfirmationButton.displayName = 'DeleteConfirmationButton';\n\nexport { DeleteConfirmationButton };\n","import { IconButton } from '@storybook/components';\n\nimport { FormIcon, StopAltHollowIcon } from '@storybook/icons';\nimport React from 'react';\n\nexport interface CheckBoxProps {\n onClick: () => void;\n checked: boolean;\n onChange?: (checked: boolean) => void;\n}\n\nconst CheckBox: React.FC<CheckBoxProps> = (props) => {\n const { onClick, checked, onChange } = props;\n\n const handleClick = React.useCallback(() => {\n onClick();\n if (onChange) {\n onChange(!checked);\n }\n }, [onClick, onChange, checked]);\n\n return (\n <IconButton className=\"check-box\" onClick={handleClick} size=\"small\" active={checked}>\n {checked ? <FormIcon /> : <StopAltHollowIcon />}\n </IconButton>\n );\n};\n\nCheckBox.displayName = 'CheckBox';\n\nexport { CheckBox };\n","import type { ViewportSize } from 'playwright';\nimport type { Ref } from 'react';\nimport { makeStyles, MenuItem } from '@material-ui/core';\nimport React, { forwardRef, memo, useCallback } from 'react';\n\nconst useStyles = makeStyles(\n () => {\n return {\n root: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n };\n },\n { name: 'DeviceListItem' },\n);\n\nexport interface DeviceListItemProps {\n name: string;\n viewportSize?: ViewportSize | null;\n onClick: (deviceName?: string) => void;\n selected?: boolean;\n value?: string;\n}\n\nconst DeviceListItem: React.FC<DeviceListItemProps> = memo(\n forwardRef((props, ref: Ref<HTMLLIElement>) => {\n const { viewportSize, name, value, onClick, selected } = props;\n\n const classes = useStyles();\n\n const handleClick = useCallback(() => {\n onClick(value);\n }, [value, onClick]);\n\n return (\n <MenuItem\n selected={selected}\n ref={ref}\n onClick={handleClick}\n className={classes.root}\n >\n <div>{name}</div>\n <div>{viewportSize && `${viewportSize.width}x${viewportSize.height}`}</div>\n </MenuItem>\n );\n }),\n);\n\nDeviceListItem.displayName = 'DeviceListItem';\n\nexport { DeviceListItem };\n","import type { BrowserContextOptions } from '../../typings';\nimport { Button, Menu } from '@material-ui/core';\nimport React, { useCallback, useMemo } from 'react';\nimport DeviceDescriptors from '../../data/deviceDescriptorsSource.json';\nimport { DeviceListItem } from './DeviceListItem';\n\nexport interface DeviceListProps {\n onDeviceSelect: (deviceName?: string) => void;\n selectedDevice?: BrowserContextOptions;\n}\n\nconst DeviceList: React.FC<DeviceListProps> = (props) => {\n const { onDeviceSelect, selectedDevice } = props;\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLButtonElement>(null);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const devices = useMemo(() => {\n return Object.keys(DeviceDescriptors);\n }, []);\n\n const handleSelection = useCallback(\n (name?: string) => {\n setAnchorEl(null);\n onDeviceSelect(name);\n },\n [onDeviceSelect],\n );\n\n return (\n <>\n <Button onClick={handleClick}>Load From Device Descriptors</Button>\n\n <Menu\n id=\"simple-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <DeviceListItem\n name=\"None\"\n value={undefined}\n onClick={handleSelection}\n selected={false}\n />\n {devices.map((deviceName) => (\n <DeviceListItem\n name={deviceName}\n key={deviceName}\n viewportSize={selectedDevice && selectedDevice.viewport}\n onClick={handleSelection}\n selected={Boolean(selectedDevice && selectedDevice.deviceName === deviceName)}\n value={deviceName}\n />\n ))}\n </Menu>\n </>\n );\n};\n\nDeviceList.displayName = 'DeviceList';\n\nexport { DeviceList };\n","import type { StoryData } from '../schema';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport { useEffect, useState } from 'react';\n\nexport function useCurrentStoryData() {\n const [storyData, setData] = useState<StoryData & { fileName: string }>();\n\n const api = useStorybookApi();\n\n const currentStory = api.getCurrentStoryData();\n\n useEffect(() => {\n if (!currentStory || !currentStory.importPath) return;\n const data = currentStory;\n const filePath = data.importPath;\n const fileName = filePath.substring(filePath.lastIndexOf('/') + 1);\n\n setData({\n fileName,\n filePath,\n id: data.id,\n name: data.name,\n parent: data.parent,\n });\n }, [currentStory]);\n\n return storyData;\n}\n","import type {\n ActionSchemaList,\n ActionSet,\n PlaywrightDataStories,\n} from '../../../typings';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport interface ActionSetState {\n actionSchema: ActionSchemaList;\n expandedActions: { [k: string]: boolean };\n stories: PlaywrightDataStories;\n initialised: boolean;\n currentActionSets: string[];\n orgEditingActionSet?: ActionSet & { isNew?: boolean };\n}\n\nexport const initialActionSetState: ActionSetState = {\n actionSchema: {},\n currentActionSets: [],\n expandedActions: {},\n initialised: true,\n stories: {},\n};\n\nexport const useActionSetStore = create<ActionSetState>()(\n devtools(\n () => ({\n ...initialActionSetState,\n }),\n { name: 'action-set-store' },\n ),\n);\n","import type { StoryAction } from '../../../../typings';\nimport equal from 'fast-deep-equal';\n\nfunction actionsWithoutId(actions: Partial<StoryAction>[]) {\n return actions.map((action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, ...rest } = action;\n return rest;\n });\n}\n\nexport function isSameActions(a: Partial<StoryAction>[], b: Partial<StoryAction>[]) {\n if (a.length !== b.length) return false;\n\n const newA = actionsWithoutId(a);\n\n const newB = actionsWithoutId(b);\n\n return equal(newA, newB);\n}\n","import type { ActionSchemaList, ActionSet, StoryAction } from '../../../typings';\nimport type { ActionSetState } from './action-set-store';\nimport arrayMove from 'array-move';\nimport { nanoid } from 'nanoid';\nimport * as immutableObject from 'object-path-immutable';\nimport { useActionSetStore } from './action-set-store';\nimport { isSameActions } from './utils/index';\n\nconst getState = () => useActionSetStore.getState();\nfunction setState(\n partial: Partial<ActionSetState> | ((state: ActionSetState) => Partial<ActionSetState>),\n) {\n return useActionSetStore.setState(partial);\n}\n\n// --- helpers ---\n\nfunction updateStoryActionSet(\n state: ActionSetState,\n storyId: string,\n actionSets: ActionSet[],\n): Partial<ActionSetState> {\n return {\n stories: {\n ...state.stories,\n [storyId]: {\n ...state.stories[storyId],\n actionSets,\n },\n },\n };\n}\n\nfunction updateStoryEditingActionSet(\n state: ActionSetState,\n storyId: string,\n actionSetId: string,\n updater: (actionSet: ActionSet) => ActionSet,\n): Partial<ActionSetState> {\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n return {\n stories: {\n ...state.stories,\n [storyId]: {\n ...state.stories[storyId],\n actionSets: storyActionSets.map((act) => {\n if (act.id !== actionSetId) return act;\n return updater(act);\n }),\n },\n },\n };\n}\n\nfunction removeActionSet(\n state: ActionSetState,\n storyId: string,\n actionSetId: string,\n): Partial<ActionSetState> {\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n const updated = updateStoryActionSet(\n state,\n storyId,\n storyActionSets.filter((x) => x.id !== actionSetId),\n );\n return {\n ...updated,\n orgEditingActionSet: undefined,\n };\n}\n\n// --- public actions ---\n\nexport function addActionSetList({\n storyId,\n actionSets,\n}: {\n storyId: string;\n actionSets: ActionSet[];\n}) {\n const state = getState();\n setState(updateStoryActionSet(state, storyId, actionSets));\n}\n\nexport function setScreenShotActionSets({\n storyId,\n actionSets,\n}: {\n storyId: string;\n actionSets: ActionSet[];\n}) {\n const state = getState();\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n const matched = actionSets.reduce((arr, actionSet) => {\n if (storyActionSets.length) {\n let storyActionSet: ActionSet | undefined;\n\n for (let i = 0; i < storyActionSets.length; i++) {\n const act = storyActionSets[i];\n\n if (arr.find((x) => x.id === act.id)) continue;\n\n if (isSameActions(act.actions, actionSet.actions)) {\n storyActionSet = act;\n break;\n }\n }\n\n if (storyActionSet) {\n arr.push(storyActionSet);\n } else {\n arr.push({\n ...actionSet,\n actions: actionSet.actions.map((action) => {\n action.id = nanoid(12);\n return action;\n }),\n id: nanoid(12),\n temp: true,\n });\n }\n } else {\n arr.push({\n ...actionSet,\n actions: actionSet.actions.map((action) => {\n action.id = nanoid(12);\n return action;\n }),\n id: nanoid(12),\n temp: true,\n });\n }\n return arr;\n }, [] as ActionSet[]);\n\n const currentActionSets: string[] = matched.map((x) => x.id);\n\n const updated = updateStoryActionSet(state, storyId, [\n ...matched,\n ...storyActionSets.filter((x) => !currentActionSets.includes(x.id)),\n ]);\n\n setState({\n ...updated,\n currentActionSets,\n });\n}\n\nexport function addActionSet({\n storyId,\n actionSet,\n selected,\n isNew,\n}: {\n storyId: string;\n actionSet: ActionSet;\n selected: boolean;\n isNew?: boolean;\n}) {\n const state = getState();\n const newAction = [\n ...(state.stories[storyId]\n ? (state.stories[storyId].actionSets || []).filter((x) => x.id !== actionSet.id)\n : []),\n actionSet,\n ];\n\n const updated = updateStoryActionSet(state, storyId, newAction);\n\n setState({\n ...updated,\n currentActionSets: selected\n ? [...(state.currentActionSets ? state.currentActionSets : []), actionSet.id]\n : state.currentActionSets,\n orgEditingActionSet: isNew ? { ...actionSet, isNew: true } : undefined,\n });\n}\n\nexport function setCurrentActionSets(actionSetIds: string[]) {\n setState({ currentActionSets: actionSetIds });\n}\n\nexport function clearCurrentActionSets() {\n setState({ currentActionSets: [] });\n}\n\nexport function deleteActionSet({\n storyId,\n actionSetId,\n}: {\n storyId: string;\n actionSetId: string;\n}) {\n const state = getState();\n setState(removeActionSet(state, storyId, actionSetId));\n}\n\nexport function deleteTempActionSets(storyId: string) {\n const state = getState();\n if (!state.stories[storyId] || !state.stories[storyId].actionSets) {\n return;\n }\n\n setState(\n updateStoryActionSet(\n state,\n storyId,\n state.stories[storyId].actionSets.filter((x) => !x.temp),\n ),\n );\n}\n\nexport function sortActionSets({\n storyId,\n oldIndex,\n newIndex,\n}: {\n storyId: string;\n oldIndex: number;\n newIndex: number;\n}) {\n const state = getState();\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n setState(\n updateStoryActionSet(state, storyId, [\n ...arrayMove(storyActionSets, oldIndex, newIndex),\n ]),\n );\n}\n\nexport function toggleCurrentActionSet(actionSetId: string) {\n const state = getState();\n const isCurrent = state.currentActionSets.find((x) => x === actionSetId);\n setState({\n currentActionSets: isCurrent\n ? state.currentActionSets.filter((x) => x !== actionSetId)\n : [...state.currentActionSets, actionSetId],\n });\n}\n\nexport function toggleActionExpansion(actionId: string) {\n const state = getState();\n const expand = state.expandedActions[actionId] === true;\n setState({\n expandedActions: {\n ...state.expandedActions,\n [actionId]: !expand,\n },\n });\n}\n\nexport function clearActionExpansion() {\n setState({ expandedActions: {} });\n}\n\nexport function setActionSchema(actionSchema: ActionSchemaList) {\n setState({ actionSchema });\n}\n\nexport function cancelEditActionSet(storyId: string) {\n const state = getState();\n const { orgEditingActionSet } = state;\n\n if (!orgEditingActionSet) return;\n\n const { isNew, ...rest } = orgEditingActionSet;\n\n if (isNew) {\n setState(removeActionSet(state, storyId, orgEditingActionSet.id));\n } else {\n const updated = updateStoryEditingActionSet(\n state,\n storyId,\n orgEditingActionSet.id,\n (actionSet) => ({ ...actionSet, ...rest }),\n );\n setState({\n ...updated,\n orgEditingActionSet: undefined,\n });\n }\n}\n\nexport function editActionSet(actionSet: ActionSet) {\n const state = getState();\n setState({\n currentActionSets: [...state.currentActionSets, actionSet.id],\n orgEditingActionSet: actionSet,\n });\n}\n\nexport function setActionSetTitle({\n storyId,\n actionSetId,\n title,\n}: {\n storyId: string;\n actionSetId: string;\n title: string;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n title,\n })),\n );\n}\n\nexport function addActionSetAction({\n storyId,\n actionSetId,\n action,\n}: {\n storyId: string;\n actionSetId: string;\n action: StoryAction;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: [...actionSet.actions, action],\n })),\n );\n}\n\nexport function toggleSubtitleItem({\n storyId,\n actionSetId,\n actionId,\n actionOptionPath,\n}: {\n storyId: string;\n actionSetId: string;\n actionId: string;\n actionOptionPath: string;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: actionSet.actions.map((act) => {\n if (act.id === actionId) {\n const hasItem =\n act.subtitleItems && act.subtitleItems.find((x) => x === actionOptionPath);\n return {\n ...act,\n subtitleItems:\n hasItem && act.subtitleItems\n ? act.subtitleItems.filter((x) => x !== actionOptionPath)\n : [...(act.subtitleItems || []), actionOptionPath],\n };\n }\n return act;\n }),\n })),\n );\n}\n\nexport function moveActionSetAction({\n storyId,\n actionSetId,\n oldIndex,\n newIndex,\n}: {\n storyId: string;\n actionSetId: string;\n oldIndex: number;\n newIndex: number;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: [...arrayMove(actionSet.actions, oldIndex, newIndex)],\n })),\n );\n}\n\nexport function deleteActionSetAction({\n storyId,\n actionSetId,\n actionId,\n}: {\n storyId: string;\n actionSetId: string;\n actionId: string;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: actionSet.actions.filter((x) => x.id !== actionId),\n })),\n );\n}\n\nexport function setActionOptions({\n storyId,\n actionSetId,\n actionId,\n objPath,\n val,\n}: {\n storyId: string;\n actionSetId: string;\n actionId: string;\n objPath: string;\n val: unknown;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: actionSet.actions.map((act) => {\n if (act.id === actionId) {\n return {\n ...act,\n args: immutableObject.set(act.args, objPath, val),\n };\n }\n return act;\n }),\n })),\n );\n}\n\nexport function saveActionSet() {\n setState({ orgEditingActionSet: undefined });\n}\n","import type { ActionSetState } from './action-set-store';\nimport { useActionSetStore } from './action-set-store';\n\nexport function getActionSetState(): ActionSetState {\n return useActionSetStore.getState();\n}\n\nexport function useActionSchema() {\n return useActionSetStore((s) => s.actionSchema);\n}\n\nexport function useExpandedActions() {\n return useActionSetStore((s) => s.expandedActions);\n}\n\nexport function useStories() {\n return useActionSetStore((s) => s.stories);\n}\n\nexport function useCurrentActionSetIds() {\n return useActionSetStore((s) => s.currentActionSets);\n}\n\nexport function useOrgEditingActionSet() {\n return useActionSetStore((s) => s.orgEditingActionSet);\n}\n\nexport function useInitialised() {\n return useActionSetStore((s) => s.initialised);\n}\n\nexport function useActionSetStoreState() {\n return useActionSetStore();\n}\n","import type {\n AddonState,\n BrowserContextOptions,\n ScreenshotData,\n ScreenshotOptions,\n ScreenshotTestTargetType,\n} from '../typings';\nimport type { SelectorState } from '../typings/selector';\nimport { create } from 'zustand';\nimport { devtools, persist } from 'zustand/middleware';\n\nexport interface BrowsersOption {\n chromium?: BrowserContextOptions;\n firefox?: BrowserContextOptions;\n webkit?: BrowserContextOptions;\n all?: BrowserContextOptions;\n}\n\nexport type BrowsersOptionTypes = keyof BrowsersOption;\n\nexport type SelectorType = 'selector' | 'position' | 'id-selector';\n\nexport interface SelectorManageSharedProps {\n type?: SelectorType;\n onData?: (data: SelectorState) => void;\n onStop?: () => void;\n}\n\nexport interface SelectorManger extends SelectorManageSharedProps {\n start: boolean;\n}\n\nexport interface EditScreenshotState {\n storyId: string;\n screenshotData: ScreenshotData;\n currentScreenshotOptions?: ScreenshotOptions;\n currentBrowserOptions?: BrowserContextOptions;\n}\n\nexport interface ScreenshotUpdateOptions {\n inProgress?: boolean;\n target?: ScreenshotTestTargetType;\n reqBy?: string;\n}\n\nexport interface UIState {\n addonState: AddonState;\n browserOptions: BrowsersOption;\n screenshotOptions: ScreenshotOptions;\n dragStart: boolean;\n selectorManager: SelectorManger;\n screenshotUpdateState: ScreenshotUpdateOptions;\n editScreenshotState: EditScreenshotState | undefined;\n schemaLoaded: boolean;\n}\n\nexport const initialUIState: UIState = {\n addonState: {\n clippingWarningDismissed: false,\n previewPanelEnabled: true,\n } as AddonState,\n browserOptions: { all: {} },\n dragStart: false,\n editScreenshotState: undefined,\n schemaLoaded: false,\n screenshotOptions: {},\n screenshotUpdateState: {},\n selectorManager: {} as SelectorManger,\n};\n\nexport const useUIStore = create<UIState>()(\n devtools(\n persist(() => ({ ...initialUIState }), {\n name: '__playwright_ui-store',\n partialize: (state) => ({\n addonState: state.addonState,\n browserOptions: state.browserOptions,\n screenshotOptions: state.screenshotOptions,\n }),\n }),\n { name: 'ui-store' },\n ),\n);\n","import type { AddonState, ScreenshotOptions } from '../typings';\nimport type {\n BrowsersOption,\n EditScreenshotState,\n ScreenshotUpdateOptions,\n SelectorManger,\n UIState,\n} from './ui-store';\nimport { useUIStore } from './ui-store';\n\nfunction setState(partial: Partial<UIState> | ((state: UIState) => Partial<UIState>)) {\n return useUIStore.setState(partial);\n}\n\nexport function setAddonState(addonState: AddonState) {\n setState({ addonState });\n}\n\nexport function setBrowserOptions(browserOptions: BrowsersOption) {\n setState({ browserOptions });\n}\n\nexport function setScreenshotOptionsState(screenshotOptions: ScreenshotOptions) {\n setState({ screenshotOptions });\n}\n\nexport function setDragStart(dragStart: boolean) {\n setState({ dragStart });\n}\n\nexport function setSelectorManager(selectorManager: SelectorManger) {\n setState({ selectorManager });\n}\n\nexport function setScreenshotUpdateState(screenshotUpdateState: ScreenshotUpdateOptions) {\n setState({ screenshotUpdateState });\n}\n\nexport function setEditScreenshotState(\n editScreenshotState: EditScreenshotState | undefined,\n) {\n setState({ editScreenshotState });\n}\n\nexport function setSchemaLoaded(schemaLoaded: boolean) {\n setState({ schemaLoaded });\n}\n","import { useUIStore } from './ui-store';\n\nexport function useAddonStateValue() {\n return useUIStore((s) => s.addonState);\n}\n\nexport function useBrowserOptionsValue() {\n return useUIStore((s) => s.browserOptions);\n}\n\nexport function useScreenshotOptionsValue() {\n return useUIStore((s) => s.screenshotOptions);\n}\n\nexport function useDragStartValue() {\n return useUIStore((s) => s.dragStart);\n}\n\nexport function useSelectorManagerValue() {\n return useUIStore((s) => s.selectorManager);\n}\n\nexport function useScreenshotUpdateStateValue() {\n return useUIStore((s) => s.screenshotUpdateState);\n}\n\nexport function useEditScreenshotStateValue() {\n return useUIStore((s) => s.editScreenshotState);\n}\n\nexport function useSchemaLoaded() {\n return useUIStore((s) => s.schemaLoaded);\n}\n","import type { ActionSet, StoryAction } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport React, { useCallback, useEffect } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport {\n addActionSetAction,\n cancelEditActionSet,\n clearActionExpansion,\n saveActionSet as saveActionSetStore,\n setActionSetTitle,\n toggleActionExpansion,\n useActionSetStoreState,\n} from '../../../store';\nimport { validateActionList } from '../../../utils';\nimport { toast } from '../../../utils/toast';\n\nexport function useActionEditor(actionSet: ActionSet) {\n const { mutateAsync, isPending: inProgress } =\n trpcClient.actionSet.saveActionSet.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n });\n\n const state = useActionSetStoreState();\n\n const storyData = useCurrentStoryData();\n\n const handleAddAction = useCallback(\n (actionName: string) => {\n if (!storyData) return;\n\n const actionId = nanoid(10);\n const newAction: StoryAction = {\n id: actionId,\n name: actionName,\n };\n clearActionExpansion();\n addActionSetAction({\n action: newAction,\n actionSetId: actionSet.id,\n storyId: storyData.id,\n });\n toggleActionExpansion(actionId);\n },\n [storyData, actionSet.id],\n );\n\n useEffect(() => () => clearActionExpansion(), []);\n\n const handleSave = useCallback(async () => {\n const validateResult = validateActionList(state.actionSchema, actionSet.actions);\n\n if (validateResult) {\n const message = validateResult\n .map((result) => {\n if (!result.required || result.required.length === 0) return undefined;\n\n return `Action name: ${result.name}\\nRequired: ${result.required.join(',')}`;\n })\n .filter(Boolean)\n .join('\\n\\n');\n\n if (message) {\n toast.error(message, {\n closeButton: true,\n duration: 60000,\n id: 'action-set-editor-validation',\n });\n return;\n }\n }\n\n if (!actionSet.temp) {\n if (!storyData) return;\n\n try {\n await mutateAsync({\n actionSet,\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n } catch {\n return;\n }\n }\n saveActionSetStore();\n }, [actionSet, mutateAsync, state.actionSchema, storyData]);\n\n // const clearValidationResult = useCallback(() => {\n // setValidationResult(undefined);\n // }, []);\n\n const handleDescriptionChange = useCallback(\n (title: string) => {\n if (!storyData || !state.orgEditingActionSet) return;\n\n setActionSetTitle({\n actionSetId: state.orgEditingActionSet.id,\n storyId: storyData.id,\n title,\n });\n },\n [storyData, state.orgEditingActionSet],\n );\n\n const handleCancelEditActionSet = useCallback(() => {\n if (!storyData) return;\n\n cancelEditActionSet(storyData.id);\n }, [storyData]);\n\n const editingAction = actionSet !== undefined;\n const storyId = storyData && storyData.id;\n\n React.useEffect(\n () => () => {\n if (editingAction && storyId) handleCancelEditActionSet();\n },\n [handleCancelEditActionSet, editingAction, storyId],\n );\n\n return {\n cancelEditActionSet: handleCancelEditActionSet,\n\n handleAddAction,\n handleDescriptionChange,\n handleSave,\n inProgress,\n state,\n };\n}\n","import type { StoryData } from '../../../schema';\nimport type { ActionSet } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { addActionSet as addActionSetToStore } from '../../../store';\nimport { toast } from '../../../utils/toast';\n\nexport function useCopyActionSet(storyData?: StoryData) {\n const { mutateAsync, isPending: inProgress } =\n trpcClient.actionSet.saveActionSet.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n });\n\n const copyActionSet = useCallback(\n async (actionSet: ActionSet) => {\n if (!storyData) return;\n\n const copyActionSet = JSON.parse(JSON.stringify(actionSet)) as ActionSet;\n copyActionSet.id = nanoid(12);\n try {\n await mutateAsync({\n actionSet: copyActionSet,\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n addActionSetToStore({\n actionSet: copyActionSet,\n isNew: false,\n selected: true,\n storyId: storyData.id,\n });\n } catch {}\n },\n [storyData, mutateAsync],\n );\n\n return { copyActionSet, inProgress };\n}\n","import type { ActionSet } from '../../../typings';\nimport { useMemo } from 'react';\nimport { useActionSetStoreState } from '../../../store';\n\nexport function useCurrentActions(storyId: string) {\n const state = useActionSetStoreState();\n\n const currentActions = useMemo((): ActionSet[] => {\n if (!state.initialised) return [];\n\n const storyData = state.stories[storyId];\n if (!storyData?.actionSets) return [];\n\n return storyData.actionSets.filter((x) => state.currentActionSets.includes(x.id));\n }, [state.currentActionSets, state.initialised, state.stories, storyId]);\n\n return { currentActions, state };\n}\n","import type { ActionSet } from '../../../typings';\nimport { useStorybookState } from '@storybook/manager-api';\nimport { useEffect, useState } from 'react';\nimport { useActionSetStoreState } from '../../../store';\n\nexport function useCurrentStoryActionSets() {\n const storybookState = useStorybookState();\n\n const state = useActionSetStoreState();\n\n const [storyActionSets, setStoryActionSets] = useState<ActionSet[]>([]);\n\n useEffect(() => {\n if (!state.stories || !state.stories[storybookState.storyId]) {\n setStoryActionSets([]);\n return;\n }\n const actionSets = state.stories[storybookState.storyId].actionSets || [];\n setStoryActionSets(actionSets);\n }, [state.stories, storybookState.storyId]);\n\n return { currentActionSets: state.currentActionSets, state, storyActionSets };\n}\n","import type { StoryAction } from '../../../typings';\nimport { useEffect, useState } from 'react';\nimport { useActionSetStoreState } from '../../../store';\n\nexport function useEditorAction(\n storyId: string,\n actionId: string,\n): StoryAction | undefined {\n const [action, setAction] = useState<StoryAction>();\n const state = useActionSetStoreState();\n\n useEffect(() => {\n const story = storyId ? state.stories?.[storyId] : undefined;\n\n if (\n !storyId ||\n !story ||\n !story.actionSets ||\n !story.actionSets.length ||\n !state.orgEditingActionSet\n ) {\n setAction(undefined);\n return;\n }\n\n const editingActionSet = state.orgEditingActionSet;\n if (!editingActionSet) {\n setAction(undefined);\n return;\n }\n\n const actionSet = story.actionSets.find((x) => x.id === editingActionSet.id);\n\n if (!actionSet) {\n setAction(undefined);\n return;\n }\n\n const result = actionSet.actions.find((x) => x.id === actionId);\n setAction(result);\n }, [actionId, state, storyId]);\n\n return action;\n}\n","import { useEffect } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks';\nimport { addActionSetList } from '../../../store';\nimport { toast } from '../../../utils';\n\ninterface LoadedStory {\n [fileName: string]: {\n [storyId: string]: boolean;\n };\n}\n\nconst __loadedFiles: LoadedStory = {};\n\nexport function useStoryActionSetsLoader() {\n const { mutateAsync, isPending: loading } =\n trpcClient.actionSet.getActionSet.useMutation();\n\n const { id: storyId, filePath } = useCurrentStoryData() || {};\n\n useEffect(() => {\n if (\n !filePath ||\n !storyId ||\n loading ||\n (__loadedFiles[filePath] && __loadedFiles[filePath][storyId])\n )\n return;\n\n mutateAsync({ filePath, storyId })\n .then((actionSets) => {\n if (!__loadedFiles[filePath]) {\n __loadedFiles[filePath] = {};\n }\n\n __loadedFiles[filePath][storyId] = true;\n\n if (actionSets) {\n addActionSetList({ actionSets, storyId });\n }\n })\n .catch((error) => {\n const message =\n error instanceof Error ? error.message : 'Failed to load action sets';\n\n toast.error(message, {\n duration: Infinity,\n id: `action-set-list:${message}`,\n });\n });\n }, [filePath, loading, mutateAsync, storyId]);\n\n return { loading };\n}\n","import type { ActionSchemaList } from '../../../typings';\nimport { useCallback, useEffect } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { setActionSchema, setSchemaLoaded, useSchemaLoaded } from '../../../store';\nimport { toast } from '../../../utils/toast';\n\nexport function useActionSchemaLoader() {\n const loaded = useSchemaLoaded();\n\n const {\n data,\n isLoading: inProgress,\n error,\n refetch,\n } = trpcClient.schema.getActionsSchema.useQuery(undefined, {\n enabled: !loaded,\n });\n\n useEffect(() => {\n if (!error) return;\n toast.error(error.message || 'Unexpected error occurred');\n }, [error]);\n\n const load = useCallback(async () => {\n const result = await refetch();\n if (!result.data) return;\n setActionSchema(result.data as unknown as ActionSchemaList);\n setSchemaLoaded(true);\n }, [refetch]);\n\n useEffect(() => {\n if (!data) return;\n setActionSchema(data as unknown as ActionSchemaList);\n setSchemaLoaded(true);\n }, [data]);\n\n useEffect(() => {\n if (inProgress || loaded) return;\n load();\n }, [inProgress, load, loaded]);\n\n return { loaded, loading: inProgress };\n}\n","import type { ScreenshotTestTargetType } from '../../../typings';\nimport React from 'react';\nimport { setScreenshotUpdateState, useScreenshotUpdateStateValue } from '../../../store';\n\nexport function useScreenshotUpdateState(\n reqBy: string,\n target?: ScreenshotTestTargetType,\n) {\n const updateInf = useScreenshotUpdateStateValue();\n\n // to prevent rendering loop\n const [isLoadingFinish, setIsLoadingFinish] = React.useState<boolean>(false);\n\n const runDiffTest = React.useCallback(() => {\n setScreenshotUpdateState({ inProgress: true, reqBy, target });\n }, [reqBy, target]);\n\n const handleClose = React.useCallback(() => {\n setScreenshotUpdateState({});\n setIsLoadingFinish(false);\n }, []);\n\n React.useEffect(() => {\n if (updateInf && updateInf.inProgress && isLoadingFinish)\n setScreenshotUpdateState({ ...updateInf, inProgress: false });\n }, [isLoadingFinish, updateInf]);\n\n return {\n handleClose,\n runDiffTest,\n setIsLoadingFinish,\n updateInf,\n };\n}\n","import type { ImageDiffResult } from '../../../api/typings';\nimport type { ScreenshotData } from '../../../typings';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport interface ScreenshotState {\n screenshots: ScreenshotData[];\n imageDiffResults: ImageDiffResult[];\n pauseDeleteImageDiffResult: boolean;\n}\n\nexport const initialScreenshotState: ScreenshotState = {\n imageDiffResults: [],\n pauseDeleteImageDiffResult: false,\n screenshots: [],\n};\n\nexport const useScreenshotStore = create<ScreenshotState>()(\n devtools(\n () => ({\n ...initialScreenshotState,\n }),\n { name: 'screenshot-store' },\n ),\n);\n","import type { ImageDiffResult } from '../../../api/typings';\nimport type { ScreenshotData } from '../../../typings';\nimport type { ScreenshotState } from './screenshot-store';\nimport arrayMove from 'array-move';\nimport { useScreenshotStore } from './screenshot-store';\n\nconst getState = () => useScreenshotStore.getState();\nfunction setState(\n partial:\n | Partial<ScreenshotState>\n | ((state: ScreenshotState) => Partial<ScreenshotState>),\n) {\n return useScreenshotStore.setState(partial);\n}\n\nexport function addScreenshot(screenshot: ScreenshotData) {\n const state = getState();\n const screenshots = state.screenshots\n ? [...state.screenshots, screenshot]\n : [screenshot];\n setState({ screenshots: [...screenshots] });\n}\n\nexport function removeScreenshot(screenshotId: string) {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults\n ? state.imageDiffResults.filter((x) => x.screenshotId !== screenshotId)\n : [],\n screenshots: state.screenshots.filter((x) => x.id !== screenshotId),\n });\n}\n\nexport function changeScreenshotIndex({\n oldIndex,\n newIndex,\n}: {\n oldIndex: number;\n newIndex: number;\n}) {\n const state = getState();\n setState({\n screenshots: [\n ...arrayMove(state.screenshots, oldIndex, newIndex).map((x, i) => {\n x.index = i;\n return x;\n }),\n ],\n });\n}\n\nexport function removeStoryScreenshots() {\n setState({ screenshots: [] });\n}\n\nexport function setScreenshots(screenshots: ScreenshotData[]) {\n setState({ screenshots });\n}\n\nexport function setImageDiffResults(imageDiffResults: ImageDiffResult[]) {\n setState({ imageDiffResults });\n}\n\nexport function addImageDiffResult(imageDiffResult: ImageDiffResult) {\n const state = getState();\n setState({\n imageDiffResults: [\n ...state.imageDiffResults.filter(\n (x) => x.screenshotId !== imageDiffResult.screenshotId,\n ),\n imageDiffResult,\n ],\n });\n}\n\nexport function updateImageDiffResult(imageDiffResult: ImageDiffResult) {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults.map((result) => {\n if (result.screenshotId !== imageDiffResult.screenshotId) return result;\n return { ...result, ...imageDiffResult };\n }),\n });\n}\n\nexport function setPauseDeleteImageDiffResult(paused: boolean) {\n setState({ pauseDeleteImageDiffResult: paused });\n}\n\nexport function removeImageDiffResult(screenshotId: string) {\n const state = getState();\n if (state.pauseDeleteImageDiffResult) return;\n setState({\n imageDiffResults: state.imageDiffResults.filter(\n (x) => x.screenshotId !== screenshotId,\n ),\n });\n}\n\nexport function removePassedImageDiffResult() {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults.filter((x) => !x.pass),\n });\n}\n\nexport function deleteScreenshot(screenshotId: string) {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults.filter(\n (x) => x.screenshotId !== screenshotId,\n ),\n screenshots: state.screenshots.filter((x) => x.id !== screenshotId),\n });\n}\n","import type { ScreenshotState } from './screenshot-store';\nimport { useScreenshotStore } from './screenshot-store';\n\nexport function getScreenshotState(): ScreenshotState {\n return useScreenshotStore.getState();\n}\n\nexport function useScreenshots() {\n return useScreenshotStore((s) => s.screenshots);\n}\n\nexport function useImageDiffResults() {\n return useScreenshotStore((s) => s.imageDiffResults);\n}\n\nexport function usePauseDeleteImageDiffResult() {\n return useScreenshotStore((s) => s.pauseDeleteImageDiffResult);\n}\n\nexport function useScreenshotStoreState() {\n return useScreenshotStore();\n}\n","import { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { removeStoryScreenshots } from '../store/index';\n\nexport function useDeleteStoryScreenshot() {\n const { mutateAsync, isPending: deleteInProgress } =\n trpcClient.screenshot.deleteStoryScreenshots.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n onSuccess: () => {\n toast.success('Story screenshots deleted successfully.');\n },\n });\n\n const data = useCurrentStoryData();\n\n const deleteStoryScreenshots = useCallback(async () => {\n if (!data) return;\n\n try {\n await mutateAsync({\n filePath: data.filePath,\n storyId: data.id,\n });\n removeStoryScreenshots();\n } catch {}\n }, [data, mutateAsync]);\n\n return {\n deleteInProgress,\n deleteStoryScreenshots,\n };\n}\n","import type { ScreenshotTestTargetType } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { addImageDiffResult, setImageDiffResults } from '../store/actions';\n\nexport function useScreenshotDiffTestByType() {\n const storyData = useCurrentStoryData();\n\n const { mutateAsync, isPending: imageDiffTestInProgress } =\n trpcClient.screenshot.testScreenshots.useMutation({\n onError: (error) => {\n const message = error.message || 'Unexpected error occurred';\n toast.error(message);\n },\n });\n\n const testStoryScreenShots = useCallback(\n async (type: ScreenshotTestTargetType) => {\n if (!storyData) {\n return undefined;\n }\n\n try {\n const results = await mutateAsync({\n filePath: storyData.filePath,\n requestId: nanoid(),\n requestType: type,\n storyId: storyData.id,\n });\n if (type === 'file' || type === 'story') {\n results.forEach((result) => {\n addImageDiffResult(result);\n });\n } else {\n setImageDiffResults(results);\n }\n return results;\n } catch {\n return undefined;\n }\n },\n [mutateAsync, storyData],\n );\n\n return {\n imageDiffTestInProgress,\n storyData,\n testStoryScreenShots,\n };\n}\n","import type { ScreenshotData } from '../../../typings';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { setScreenshots } from '../store/index';\n\nexport function useStoryScreenshotLoader() {\n const loadedStoryId = useRef<string>();\n\n const storyData = useCurrentStoryData();\n\n const { mutateAsync, isPending: screenshotLoaderInProgress } =\n trpcClient.screenshot.getStoryScreenshots.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n });\n\n const loadScreenShots = useCallback(async () => {\n if (!storyData) return;\n\n try {\n const result = await mutateAsync({\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n loadedStoryId.current = storyData.id;\n setScreenshots((result || []) as ScreenshotData[]);\n } catch {}\n }, [mutateAsync, storyData]);\n\n useEffect(() => {\n if (screenshotLoaderInProgress || !storyData) return;\n if (loadedStoryId.current && loadedStoryId.current === storyData.id) {\n return;\n }\n loadScreenShots();\n }, [loadScreenShots, screenshotLoaderInProgress, storyData]);\n\n return {\n error: undefined,\n loadScreenShots,\n screenshotLoaderInProgress,\n storyData,\n };\n}\n","import { setDragStart, useDragStartValue } from '../store';\n\nexport function useDragStart() {\n const dragStart = useDragStartValue();\n return { dragStart, setDragStart };\n}\n","import { setAddonState, useAddonStateValue } from '../store';\n\nexport function useAddonState() {\n const addonState = useAddonStateValue();\n return { addonState, setAddonState };\n}\n","import type { BrowserTypes, ScreenShotViewPanel } from '../typings';\nimport { STORY_RENDERED } from '@storybook/core-events';\nimport { addons } from '@storybook/manager-api';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useAddonState } from './use-addon-state';\nimport { useUIStore } from '../store';\nimport { deepEqual } from '@pixpilot/object';\n\nconst defaultBrowserTypes: BrowserTypes[] = ['chromium', 'firefox', 'webkit'];\n\nexport function useBrowserStateManager(browserView: ScreenShotViewPanel) {\n const { addonState, setAddonState } = useAddonState();\n const [refreshingBrowsers, setRefreshBrowsers] = useState<BrowserTypes[]>([]);\n const [browserTypes] = useState<BrowserTypes[]>(defaultBrowserTypes);\n\n const isDisabled = useCallback(\n (browserType: BrowserTypes) => {\n if (\n !addonState ||\n !addonState.disabledBrowser ||\n !addonState.disabledBrowser[browserView] ||\n !addonState.disabledBrowser[browserView][browserType]\n ) {\n return false;\n }\n return true;\n },\n [addonState, browserView],\n );\n\n const setBrowserState = useCallback(\n (browserType: BrowserTypes, activePanel: ScreenShotViewPanel, disable: boolean) => {\n if (!addonState.disabledBrowser) addonState.disabledBrowser = {};\n setAddonState({\n ...addonState,\n disabledBrowser: {\n ...addonState.disabledBrowser,\n [activePanel]: {\n ...addonState.disabledBrowser[activePanel],\n [browserType]: disable,\n },\n },\n });\n },\n [addonState, setAddonState],\n );\n\n useEffect(() => {\n const unsubscribe = useUIStore.subscribe((state, prevState) => {\n if (\n !deepEqual(state.browserOptions.all, prevState.browserOptions.all) ||\n !deepEqual(state.screenshotOptions, prevState.screenshotOptions)\n ) {\n setRefreshBrowsers(defaultBrowserTypes);\n }\n defaultBrowserTypes.forEach((browserType) => {\n if (\n !deepEqual(\n state.browserOptions[browserType],\n prevState.browserOptions[browserType],\n )\n ) {\n setRefreshBrowsers((current) =>\n current.includes(browserType) ? current : [...current, browserType],\n );\n }\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [browserTypes]);\n\n useEffect(() => {\n const channel = addons.getChannel();\n\n const onStoryRendered = () => {\n const activeBrowserTypes = defaultBrowserTypes.filter(\n (browserType) => !isDisabled(browserType),\n );\n\n setRefreshBrowsers((current) => {\n if (\n current.length === activeBrowserTypes.length &&\n activeBrowserTypes.every((browserType) => current.includes(browserType))\n ) {\n return current;\n }\n\n return activeBrowserTypes;\n });\n };\n\n channel.on(STORY_RENDERED, onStoryRendered);\n\n return () => {\n channel.off(STORY_RENDERED, onStoryRendered);\n };\n }, [isDisabled]);\n\n const toggleBrowser = useCallback(\n (browserType: BrowserTypes) => {\n const disable = !isDisabled(browserType);\n\n setBrowserState(browserType, browserView, disable);\n\n if (disable) {\n setRefreshBrowsers((current) =>\n current.filter((browser) => browser !== browserType),\n );\n return;\n }\n\n setRefreshBrowsers((current) =>\n current.includes(browserType) ? current : [...current, browserType],\n );\n },\n [browserView, isDisabled, setBrowserState],\n );\n\n const clearBrowserRefresh = useCallback((browserType: BrowserTypes) => {\n setRefreshBrowsers((current) => current.filter((browser) => browser !== browserType));\n }, []);\n\n const activeBrowsers = useMemo(\n () => browserTypes.filter((browserType) => !isDisabled(browserType)),\n [browserTypes, isDisabled],\n );\n\n return {\n activeBrowsers,\n browserTypes,\n isDisabled,\n refreshingBrowsers,\n clearBrowserRefresh,\n setBrowserState,\n toggleBrowser,\n refreshBrowsers: setRefreshBrowsers,\n };\n}\n","import type { BrowsersOptionTypes } from '../store';\nimport type { BrowserContextOptions, BrowserTypes } from '../typings';\nimport { useCallback, useMemo } from 'react';\nimport {\n setBrowserOptions as setStoreBrowserOptions,\n useBrowserOptionsValue,\n} from '../store';\nimport { getDeviceInfo } from '../utils';\n\nexport type { BrowsersOption, BrowsersOptionTypes } from '../store';\n\nexport function useBrowserOptions(browserName?: BrowsersOptionTypes) {\n const browserOptions = useBrowserOptionsValue();\n\n const setBrowserDeviceOptions = useCallback(\n (browserType: BrowsersOptionTypes, deviceName: string) => {\n setStoreBrowserOptions({\n ...browserOptions,\n [browserType]: getDeviceInfo(deviceName),\n });\n },\n [browserOptions],\n );\n\n const setBrowserOptions = useCallback(\n (browserType: BrowsersOptionTypes, options: BrowserContextOptions) => {\n setStoreBrowserOptions({\n ...browserOptions,\n [browserType]: options,\n });\n },\n [browserOptions],\n );\n\n const getBrowserOptions = useCallback(\n (browserType: BrowserTypes) => ({\n ...browserOptions.all,\n ...browserOptions[browserType],\n }),\n [browserOptions],\n );\n\n const hasOption = useMemo(() => {\n if (!browserName) return false;\n\n const hasOpt =\n browserOptions &&\n browserOptions[browserName] &&\n Object.keys(browserOptions[browserName]).length > 0;\n return hasOpt;\n }, [browserOptions, browserName]);\n\n return {\n browserOptions,\n getBrowserOptions,\n hasOption,\n setBrowserDeviceOptions,\n setBrowserOptions,\n };\n}\n","import { setScreenshotOptionsState, useScreenshotOptionsValue } from '../../../store';\n\nexport function useScreenshotOptions() {\n const screenshotOptions = useScreenshotOptionsValue();\n return { screenshotOptions, setScreenshotOptions: setScreenshotOptionsState };\n}\n","import type { BrowserContextOptions } from 'playwright';\nimport type { BrowsersOption } from '../../../hooks/use-browser-options';\nimport type { ScreenshotData, ScreenshotOptions } from '../../../typings';\nimport {\n RESET_STORY_ARGS,\n UPDATE_GLOBALS,\n UPDATE_STORY_ARGS,\n} from '@storybook/core-events';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport { useCallback } from 'react';\nimport { useBrowserOptions } from '../../../hooks/use-browser-options';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { getScreenshotArgs, getScreenshotGlobals } from '../../../utils';\nimport { setScreenShotActionSets } from '../../action-set/store/actions';\nimport { useScreenshotOptions } from './use-screenshot-options';\n\ninterface ReturnType {\n browserOptions: BrowsersOption;\n loadSetting: (screenshotData: ScreenshotData, force?: boolean) => void;\n screenshotOptions: ScreenshotOptions;\n}\n\nexport function useLoadScreenshotSettings(): ReturnType {\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const api = useStorybookApi();\n\n const storyData = useCurrentStoryData();\n\n const dispatchActions = useCallback(\n (screenshotData: ScreenshotData) => {\n if (!storyData) return;\n\n if (!screenshotData.actionSets || !screenshotData.actionSets.length) return;\n setScreenShotActionSets({\n actionSets: screenshotData.actionSets,\n storyId: storyData.id,\n });\n },\n [storyData],\n );\n const loadSetting = useCallback(\n (screenshotData: ScreenshotData, force = false) => {\n if (!storyData) return;\n\n api.emit(RESET_STORY_ARGS, { storyId: storyData?.id });\n const args = getScreenshotArgs(screenshotData);\n if (args && Object.keys(args).length) {\n api.emit(UPDATE_STORY_ARGS, {\n storyId: storyData?.id,\n updatedArgs: args,\n });\n }\n const globals = getScreenshotGlobals(screenshotData);\n if (globals && Object.keys(globals).length) {\n api.emit(UPDATE_GLOBALS, {\n globals,\n });\n }\n dispatchActions(screenshotData);\n if (screenshotData.browserOptions || force) {\n setBrowserOptions('all', screenshotData.browserOptions as BrowserContextOptions);\n }\n if (screenshotData.screenshotOptions || force) {\n setScreenshotOptions(screenshotData.screenshotOptions);\n }\n },\n [api, dispatchActions, setBrowserOptions, setScreenshotOptions, storyData],\n );\n\n return { browserOptions, loadSetting, screenshotOptions };\n}\n","import type { BrowserTypes, ScreenshotData } from '../../../typings';\nimport { RESET_STORY_ARGS } from '@storybook/core-events';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useBrowserStateManager } from '../../../hooks/use-browser-state-manager';\nimport { useAddonState } from '../../../hooks/use-addon-state';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { setEditScreenshotState, useEditScreenshotStateValue } from '../../../store';\nimport {\n clearCurrentActionSets,\n deleteTempActionSets,\n} from '../../action-set/store/actions';\nimport { useLoadScreenshotSettings } from './use-load-screenshot-settings';\n\nexport type { EditScreenshotState } from '../../../store';\n\nexport function useEditScreenshot() {\n const editScreenshotState = useEditScreenshotStateValue();\n\n const storyData = useCurrentStoryData();\n\n const { setAddonState, addonState } = useAddonState();\n\n const { setBrowserState } = useBrowserStateManager('dialog');\n\n const { loadSetting, screenshotOptions, browserOptions } = useLoadScreenshotSettings();\n\n const unmounted = useRef<boolean>(false);\n\n const api = useStorybookApi();\n\n const clearScreenshotEdit = useCallback(() => {\n if (storyData?.id) {\n deleteTempActionSets(storyData.id);\n }\n\n clearCurrentActionSets();\n\n api.emit(RESET_STORY_ARGS, { storyId: storyData?.id });\n\n if (editScreenshotState) {\n loadSetting(\n {\n browserOptions: editScreenshotState.currentBrowserOptions,\n browserType: editScreenshotState.screenshotData.browserType,\n id: editScreenshotState.screenshotData.id,\n screenshotOptions: editScreenshotState.currentScreenshotOptions,\n title: editScreenshotState.screenshotData.title,\n },\n true,\n );\n }\n if (!unmounted.current) {\n setEditScreenshotState(undefined);\n }\n }, [api, editScreenshotState, loadSetting, storyData]);\n\n const editScreenshot = useCallback(\n (screenshotData: ScreenshotData) => {\n if (!storyData) return;\n\n clearScreenshotEdit();\n setEditScreenshotState({\n currentBrowserOptions: browserOptions.all,\n currentScreenshotOptions: screenshotOptions,\n screenshotData,\n storyId: storyData.id,\n });\n loadSetting(screenshotData);\n setBrowserState(screenshotData.browserType, 'main', false);\n if (!addonState.previewPanelEnabled) {\n setAddonState({\n ...addonState,\n previewPanelEnabled: true,\n });\n }\n },\n [\n addonState,\n browserOptions.all,\n clearScreenshotEdit,\n loadSetting,\n screenshotOptions,\n setAddonState,\n setBrowserState,\n storyData,\n ],\n );\n\n const isEditing = useCallback(\n (browser: BrowserTypes) => {\n if (!editScreenshotState) return false;\n\n return editScreenshotState.screenshotData.browserType === browser;\n },\n [editScreenshotState],\n );\n\n useEffect(\n () => () => {\n unmounted.current = true;\n },\n [],\n );\n\n useEffect(() => {\n if (!editScreenshotState || !storyData) return undefined;\n\n if (editScreenshotState.storyId !== storyData.id) {\n clearScreenshotEdit();\n return undefined;\n }\n }, [clearScreenshotEdit, editScreenshotState, storyData]);\n\n return {\n clearScreenshotEdit,\n editScreenshot,\n editScreenshotState,\n isEditing,\n loadSetting,\n };\n}\n","import type { StoryData } from '../../../schema';\nimport { useCallback, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { toast } from '../../../utils/toast';\nimport { addImageDiffResult } from '../store/index';\n\nexport function useScreenshotDiffTest() {\n const [testScreenshotError, setTestScreenshotError] = useState<string | undefined>(\n undefined,\n );\n\n const {\n mutateAsync,\n isPending: inProgress,\n reset,\n data,\n } = trpcClient.screenshot.testScreenshot.useMutation({\n onError: (error) => {\n const message = error.message || 'Unexpected error occurred';\n setTestScreenshotError(message);\n toast.error(message);\n },\n });\n\n const testScreenshot = useCallback(\n async (storyData: StoryData & { screenshotId: string }) => {\n setTestScreenshotError(undefined);\n try {\n const result = await mutateAsync({\n ...storyData,\n screenshotId: storyData.screenshotId,\n storyId: storyData.id,\n });\n addImageDiffResult(result);\n return result;\n } catch {\n return undefined;\n }\n },\n [mutateAsync],\n );\n\n return {\n inProgress,\n reset,\n result: data,\n testScreenshot,\n testScreenshotError,\n };\n}\n","import type { ScreenshotData } from '../../../../typings';\n\nimport { Popover } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport { CogIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport ReactJson from 'react-json-view';\n\nexport interface ScreenshotInfoProps {\n screenshotData: ScreenshotData;\n size?: 'small' | 'medium';\n color?: 'inherit' | 'primary' | 'secondary' | 'default';\n onClose?: () => void;\n}\n\nconst ScreenshotInfo: React.FC<ScreenshotInfoProps> = ({\n screenshotData,\n size = 'small',\n color,\n onClose,\n}) => {\n const [anchorEl, setAnchorEl] = React.useState<Element | null>(null);\n\n const getInfo = useCallback(() => {\n const { id: _id, index: _index, ...data } = screenshotData;\n return data;\n }, [screenshotData]);\n\n const togglePopover = useCallback(\n (event: React.SyntheticEvent<Element, Event>) => {\n if (onClose && anchorEl) onClose();\n setAnchorEl(anchorEl ? null : event.currentTarget);\n },\n [anchorEl, onClose],\n );\n\n return (\n <>\n <IconButton color={color} onClick={togglePopover} size={size}>\n <CogIcon />\n </IconButton>\n <Popover anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={togglePopover}>\n <div>\n {anchorEl && (\n <ReactJson\n enableClipboard={false}\n theme=\"railscasts\"\n src={getInfo()}\n displayObjectSize={false}\n displayDataTypes={false}\n style={{ fontSize: 13 }}\n />\n )}\n </div>\n </Popover>\n </>\n );\n};\n\nScreenshotInfo.displayName = 'ScreenshotInfo';\n\nexport { ScreenshotInfo };\n","import { useCallback, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { deleteScreenshot as deleteScreenshotFromStore } from '../store/index';\n\nexport function useDeleteScreenshot() {\n const storyData = useCurrentStoryData();\n const [error, setError] = useState<string>();\n\n const {\n mutateAsync,\n reset,\n isPending: inProgress,\n } = trpcClient.screenshot.deleteScreenshot.useMutation({\n onError: (mutationError) => {\n const message = mutationError.message || 'Unexpected error occurred';\n setError(message);\n toast.error(message);\n },\n onSuccess: () => {\n toast.success('Screenshot deleted successfully.');\n },\n });\n\n const clearError = useCallback(() => {\n setError(undefined);\n reset();\n }, [reset]);\n\n const deleteScreenshot = useCallback(\n async (id: string) => {\n if (!storyData) return;\n\n setError(undefined);\n try {\n await mutateAsync({\n filePath: storyData.filePath,\n screenshotId: id,\n storyId: storyData.id,\n });\n deleteScreenshotFromStore(id);\n } catch {}\n },\n [mutateAsync, storyData],\n );\n\n return {\n clearError,\n deleteScreenshot,\n error,\n inProgress,\n };\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport type { ScreenshotData } from '../../../../typings';\nimport React, { useCallback, useEffect } from 'react';\nimport { DeleteConfirmationButton } from '../../../../components/common';\nimport { useDeleteScreenshot } from '../../hooks/use-delete-screenshot';\n\nexport interface ScreenshotDeleteProps {\n screenshot: ScreenshotData;\n onClose: () => void;\n onStateChange: (working: boolean) => void;\n onDelete: () => void;\n}\n\nconst ScreenshotDelete: React.FC<ScreenshotDeleteProps> = (props) => {\n const { onStateChange, screenshot, onClose, onDelete } = props;\n\n const { deleteScreenshot, inProgress: deleteLoading } = useDeleteScreenshot();\n\n const handleDeleteConfirmation = useCallback(() => {\n deleteScreenshot(screenshot.id);\n onDelete();\n }, [deleteScreenshot, screenshot.id]);\n\n useEffect(() => {\n onStateChange(deleteLoading);\n }, [deleteLoading]);\n\n return (\n <>\n <DeleteConfirmationButton onClose={onClose} onDelete={handleDeleteConfirmation} />\n </>\n );\n};\n\nScreenshotDelete.displayName = 'ScreenshotDelete';\n\nexport { ScreenshotDelete };\n","import type { ImageDiffResult } from '../../../api/typings';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { toast } from '../../../utils/toast';\nimport { updateImageDiffResult } from '../store/index';\n\nexport function useScreenshotUpdate(successMessage?: string) {\n const {\n mutateAsync,\n isPending: updateScreenshotInProgress,\n reset,\n } = trpcClient.screenshot.updateScreenshot.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n onSuccess: () => {\n if (successMessage) {\n toast.success(successMessage);\n }\n },\n });\n\n const updateScreenshotClearResult = useCallback(() => {\n reset();\n }, [reset]);\n\n const updateScreenshot = useCallback(\n async (imageDiffResult: ImageDiffResult) => {\n if (\n !imageDiffResult.filePath ||\n !imageDiffResult.screenshotId ||\n !imageDiffResult.storyId\n ) {\n return;\n }\n\n try {\n await mutateAsync({\n base64: imageDiffResult.newScreenshot,\n filePath: imageDiffResult.filePath,\n screenshotId: imageDiffResult.screenshotId,\n storyId: imageDiffResult.storyId,\n });\n } catch {\n return;\n }\n\n const newImageDiffResult: ImageDiffResult = {\n diffSize: false,\n filePath: imageDiffResult.filePath,\n index: imageDiffResult.index,\n newScreenshot: imageDiffResult.newScreenshot,\n pass: true,\n screenshotId: imageDiffResult.screenshotId,\n storyId: imageDiffResult.storyId,\n };\n\n updateImageDiffResult(newImageDiffResult);\n },\n [mutateAsync],\n );\n\n return {\n updateScreenshot,\n updateScreenshotClearResult,\n updateScreenshotInProgress,\n };\n}\n","import type { ImageDiffResult } from '../../../../api/typings';\nimport type { ScreenshotData } from '../../../../typings';\nimport { Button } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport { RefreshIcon } from '@storybook/icons';\nimport React, { useCallback, useEffect } from 'react';\nimport { ImageDiffPreviewDialog, Loader } from '../../../../components/common';\nimport { useCurrentStoryData, useScreenshotDiffTest } from '../../../../hooks';\nimport { useScreenshotUpdate } from '../../hooks/use-screenshot-update';\nimport { ScreenshotInfo } from './ScreenshotInfo';\n\nexport interface ScreenshotUpdateProps {\n screenshot: ScreenshotData;\n onStateChange: (state: boolean) => void;\n imageDiffResult?: ImageDiffResult;\n}\n\nconst ScreenshotUpdate: React.FC<ScreenshotUpdateProps> = (props) => {\n const { screenshot, onStateChange, imageDiffResult } = props;\n\n const storyData = useCurrentStoryData();\n\n const { updateScreenshot, updateScreenshotInProgress } = useScreenshotUpdate(\n 'Successfully updated.',\n );\n\n const {\n testScreenshot,\n inProgress: testScreenshotInProgress,\n reset: testScreenshotClearResult,\n result: testScreenshotResult,\n } = useScreenshotDiffTest();\n\n const handleUpdate = useCallback(async () => {\n if (imageDiffResult) {\n await updateScreenshot(imageDiffResult);\n } else {\n if (!storyData) return;\n\n await testScreenshot({ ...storyData, screenshotId: screenshot.id });\n }\n }, [imageDiffResult, screenshot.id, storyData, testScreenshot, updateScreenshot]);\n\n const handleSaveScreenshotClick = useCallback(async () => {\n if (!testScreenshotResult) return;\n\n await updateScreenshot(testScreenshotResult);\n testScreenshotClearResult();\n }, [testScreenshotClearResult, testScreenshotResult, updateScreenshot]);\n\n useEffect(() => {\n onStateChange(testScreenshotInProgress || updateScreenshotInProgress);\n }, [testScreenshotInProgress, onStateChange, updateScreenshotInProgress]);\n\n return (\n <>\n <IconButton onClick={handleUpdate} size=\"small\" title=\"Update screenshot\">\n <RefreshIcon />\n </IconButton>\n {testScreenshotResult && (\n <ImageDiffPreviewDialog\n title=\"Following screenshot will be saved, would you like to continue?\"\n subtitle={screenshot.title}\n imageDiffResult={testScreenshotResult}\n onClose={testScreenshotClearResult}\n open={true}\n titleActions={() => (\n <ScreenshotInfo color=\"primary\" size=\"medium\" screenshotData={screenshot} />\n )}\n footerActions={() => (\n <>\n <Button onClick={testScreenshotClearResult} color=\"primary\">\n No\n </Button>\n <Button onClick={handleSaveScreenshotClick} color=\"primary\" autoFocus>\n Yes\n </Button>\n </>\n )}\n />\n )}\n <Loader open={updateScreenshotInProgress} />\n </>\n );\n};\n\nScreenshotUpdate.displayName = 'ScreenshotUpdate';\n\nexport { ScreenshotUpdate };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Ref } from 'react';\nimport type { ImageDiffResult } from '../../../../api/typings';\n\nimport type { ScreenshotData } from '../../../../typings';\nimport { makeStyles } from '@material-ui/core';\n\nimport { IconButton } from '@storybook/components';\nimport { ContrastIcon, EditIcon, OutboxIcon } from '@storybook/icons';\nimport clsx from 'clsx';\n\nimport React, { forwardRef, useState } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { ScreenshotDelete } from './ScreenshotDelete';\nimport { ScreenshotInfo } from './ScreenshotInfo';\nimport { ScreenshotUpdate } from './ScreenshotUpdate';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n menu: {\n '&::before': {\n backgroundColor: theme.palette.background.paper,\n bottom: 0,\n content: '\"\"',\n left: 0,\n opacity: 0.9,\n position: 'absolute',\n right: 0,\n top: 0,\n },\n display: 'none',\n position: 'absolute',\n right: 30,\n top: 10,\n },\n visible: {\n display: 'block',\n },\n };\n },\n { name: 'ScreenshotListItemMenu' },\n);\n\nexport interface ScreenshotListItemMenuProps {\n screenshot: ScreenshotData;\n enableImageDiff?: boolean;\n enableUpdate?: boolean;\n enableLoadSetting?: boolean;\n enableEditScreenshot?: boolean;\n show?: boolean;\n onHide?: () => void;\n onRunImageDiff?: () => void;\n imageDiffResult?: ImageDiffResult;\n openUpdateDialog?: boolean;\n onEditClick?: () => void;\n onLoadSettingClick?: () => void;\n isEditing?: boolean;\n onDelete: () => void;\n}\n\nconst ScreenshotListItemMenu: React.FC<ScreenshotListItemMenuProps> = forwardRef(\n (\n {\n enableLoadSetting,\n openUpdateDialog,\n screenshot,\n enableImageDiff,\n enableUpdate,\n enableEditScreenshot,\n show,\n onHide,\n onRunImageDiff,\n imageDiffResult,\n onLoadSettingClick,\n onEditClick,\n isEditing,\n onDelete,\n },\n ref: Ref<HTMLDivElement>,\n ) => {\n const [working, setWorking] = useState(false);\n\n const classes = useStyles();\n\n return (\n <>\n <Loader progressSize={20} position=\"absolute\" open={working} />\n <div ref={ref} className={clsx(classes.menu, { [classes.visible]: show })}>\n {!isEditing && enableEditScreenshot && (\n <IconButton onClick={onEditClick} title=\"Edit screenshot\">\n <EditIcon />\n </IconButton>\n )}\n\n {enableLoadSetting && (\n <IconButton onClick={onLoadSettingClick} title=\"Load screenshot settings\">\n <OutboxIcon />\n </IconButton>\n )}\n\n {enableUpdate && (\n <ScreenshotUpdate\n onStateChange={setWorking}\n screenshot={screenshot}\n imageDiffResult={openUpdateDialog ? undefined : imageDiffResult}\n />\n )}\n\n {enableImageDiff && (\n <IconButton onClick={onRunImageDiff} title=\"Run diff test\">\n <ContrastIcon />\n </IconButton>\n )}\n\n <ScreenshotDelete\n onClose={onHide || (() => undefined)}\n onStateChange={setWorking}\n screenshot={screenshot}\n onDelete={onDelete}\n />\n\n <ScreenshotInfo onClose={onHide} screenshotData={screenshot} />\n </div>\n </>\n );\n },\n);\n\nScreenshotListItemMenu.displayName = 'ScreenshotListItemMenu';\n\nexport { ScreenshotListItemMenu };\n","import type { ListItemWrapperProps } from '../../../../components/common';\nimport React from 'react';\nimport { ListItemWrapper } from '../../../../components/common';\n\nconst ScreenshotListItemWrapper: React.FC<ListItemWrapperProps> = ({\n children,\n ...rest\n}) => {\n return (\n <ListItemWrapper\n style={{\n cursor: 'pointer',\n }}\n icons={children}\n {...rest}\n />\n );\n};\n\nScreenshotListItemWrapper.displayName = 'ScreenshotListItemWrapper';\n\nexport { ScreenshotListItemWrapper };\n","import React from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\n\ninterface Props {\n fixFunction?: boolean;\n}\n\nexport function useFixScreenshotFileName(props: Props) {\n const { fixFunction } = props;\n\n const currentStoryData = useCurrentStoryData();\n\n const [reload, setReload] = React.useState<boolean>(false);\n\n const [functionName, setFunctionName] = React.useState<string>('');\n\n const [fixFileNamesError, setFixFileNamesError] = React.useState<string | undefined>(\n undefined,\n );\n\n const { mutateAsync, isPending: fixFileNamesInProgress } =\n trpcClient.fixTitle.fixScreenshotFileName.useMutation({\n onError: (error) => {\n const message = error.message || 'Unexpected error occurred';\n setFixFileNamesError(message);\n toast.error(message);\n },\n });\n\n const clearError = React.useCallback(() => {\n setFixFileNamesError(undefined);\n }, []);\n\n const fixFileNames = React.useCallback(() => {\n if (!functionName && fixFunction) {\n toast.error('Enter previous name export function.');\n return;\n }\n\n if (!currentStoryData) {\n toast.error('Unable to find current story data.');\n return;\n }\n\n setFixFileNamesError(undefined);\n mutateAsync({\n ...currentStoryData,\n previousNamedExport: functionName,\n })\n .then(() => {\n setReload(true);\n })\n .catch(() => {});\n }, [currentStoryData, fixFunction, functionName, mutateAsync]);\n\n const handleReload = React.useCallback(() => {\n document.location.reload();\n }, []);\n\n const handleFunctionNameInput = React.useCallback((e) => {\n setFunctionName(e.target.value);\n }, []);\n\n return {\n clearError,\n fixFileNames,\n fixFileNamesError,\n fixFileNamesInProgress,\n functionName,\n handleFunctionNameInput,\n handleReload,\n\n reload,\n };\n}\n","import type { ScreenshotProp } from '../typings';\nimport { STORY_ARGS_UPDATED, STORY_CHANGED } from '@storybook/core-events';\nimport { addons, useStorybookApi } from '@storybook/manager-api';\nimport equal from 'fast-deep-equal';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useKnobs() {\n const [args, setArgs] = useState<ScreenshotProp>();\n const api = useStorybookApi();\n const apiRef = useRef(api);\n\n apiRef.current = api;\n\n useEffect(() => {\n setArgs(undefined);\n const channel = addons.getChannel();\n const setArgsStore = (data: { storyId: string; args: Record<string, unknown> }) => {\n if (!data || !data.args) return;\n const currentStoryData = apiRef.current.getCurrentStoryData() as\n | { initialArgs?: Record<string, unknown> }\n | undefined;\n const initialArgs = currentStoryData?.initialArgs || {};\n\n const propObj = Object.keys(data.args).reduce((obj, key) => {\n const argValue = data.args[key];\n if (argValue !== undefined && !equal(argValue, initialArgs[key])) {\n obj[key] = data.args[key];\n }\n return obj;\n }, {} as ScreenshotProp);\n\n setArgs(Object.keys(propObj).length > 0 ? propObj : undefined);\n };\n\n const storyChange = () => {\n setArgs(undefined);\n };\n\n channel.on(STORY_ARGS_UPDATED, setArgsStore);\n\n channel.on(STORY_CHANGED, storyChange);\n\n return () => {\n channel.off(STORY_ARGS_UPDATED, setArgsStore);\n channel.off(STORY_CHANGED, storyChange);\n };\n }, []);\n\n return args;\n}\n","import type { BrowserTypes } from '../../../typings';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { useKnobs } from '../../../hooks/use-knobs';\nimport { toast } from '../../../utils/toast';\nimport { API, useStorybookApi, StoryEntry } from '@storybook/manager-api';\nimport { useBrowserOptions } from '../../../hooks';\nimport { useScreenshotOptionsValue } from '../../../store';\nimport { useCurrentActions } from '../../../features/action-set/hooks/use-current-actions';\n\nexport function useGenerateScreenshotTitle(\n browserType: BrowserTypes | 'storybook' | null,\n) {\n const storyData = useCurrentStoryData();\n const { currentActions } = useCurrentActions(storyData?.id ?? '');\n const args = useKnobs();\n const api = useStorybookApi() as API;\n const { getBrowserOptions } = useBrowserOptions();\n const screenshotOptions = useScreenshotOptionsValue();\n const { data: hasGenerator = false } =\n trpcClient.screenshot.hasScreenshotTitleGenerator.useQuery();\n\n const browserOptions = getBrowserOptions(browserType as BrowserTypes);\n\n const { mutateAsync, isPending: isGenerating } =\n trpcClient.screenshot.generateScreenshotTitle.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Failed to generate screenshot title');\n },\n });\n\n const generateTitle = useCallback(async (): Promise<string | undefined> => {\n if (!storyData || browserType === 'storybook') return undefined;\n const currentStoryData = api.getCurrentStoryData() as StoryEntry & {\n parameters: {\n docs?: {\n description?: {\n story?: string;\n };\n };\n };\n };\n\n try {\n return await mutateAsync({\n browser: {\n type: browserType,\n options: browserOptions,\n },\n story: {\n actions: currentActions,\n changedArgs: args,\n filePath: storyData.filePath,\n id: storyData.id,\n initialArgs: currentStoryData.initialArgs,\n argTypes: currentStoryData.argTypes,\n parameters: currentStoryData.parameters as Record<string, unknown>,\n name: currentStoryData.name,\n title: currentStoryData.title,\n },\n screenshotOptions,\n });\n } catch {\n return undefined;\n }\n }, [\n api,\n args,\n browserOptions,\n browserType,\n currentActions,\n mutateAsync,\n screenshotOptions,\n storyData,\n ]);\n\n return { generateTitle, hasGenerator, isGenerating };\n}\n","import type { ImageDiffResult } from '../../../api/typings';\nimport { setImageDiffResults } from '../store/actions';\nimport { useImageDiffResults } from '../store/selectors';\n\nexport interface UseGlobalImageDiffResults {\n imageDiffResult: ImageDiffResult[];\n setImageDiffResult: (results: ImageDiffResult[]) => void;\n}\n\nexport function useGlobalImageDiffResults(): UseGlobalImageDiffResults {\n const imageDiffResult = useImageDiffResults();\n return { imageDiffResult, setImageDiffResult: setImageDiffResults };\n}\n","import type { ImageDiffResult } from '../../../api/typings';\nimport type { StoryData } from '../../../schema';\nimport type { ScreenshotData, ScreenshotTestTargetType } from '../../../typings';\nimport React, { useEffect } from 'react';\nimport { isStoryJsonFile } from '../../../utils';\nimport { setScreenshots } from '../store/index';\nimport { useScreenshotDiffTestByType } from './use-screenshot-diff-test-by-type';\n\nfunction getScreenshotDataFromDiffResult(\n results: ImageDiffResult[],\n target: ScreenshotTestTargetType,\n storyData?: StoryData,\n) {\n if (target === 'all') return results.map((x) => x.screenshotData);\n\n if (target === 'file') {\n if (!storyData) return [];\n\n return results\n .filter((x) =>\n x.filePath ? isStoryJsonFile(x.filePath, storyData.filePath) : false,\n )\n .map((x) => x.screenshotData);\n }\n\n if (!storyData) return [];\n\n return results.filter((x) => x.storyId === storyData.id).map((x) => x.screenshotData);\n}\n\nexport function useImageDiffScreenshots(\n target: ScreenshotTestTargetType,\n onLoaded?: () => void,\n) {\n const { imageDiffTestInProgress, testStoryScreenShots, storyData } =\n useScreenshotDiffTestByType();\n\n const [loaded, setLoaded] = React.useState<boolean>(false);\n\n const loadData = React.useCallback(async () => {\n const results = await testStoryScreenShots(target);\n if (Array.isArray(results))\n setScreenshots(\n getScreenshotDataFromDiffResult(results, target, storyData).filter(\n (screenshotData): screenshotData is ScreenshotData => Boolean(screenshotData),\n ),\n );\n if (onLoaded) onLoaded();\n setLoaded(true);\n }, [testStoryScreenShots, target, storyData, onLoaded]);\n\n useEffect(() => {\n if (!storyData || loaded) return;\n loadData();\n }, [loadData, loaded, storyData]);\n\n return { loading: imageDiffTestInProgress, storyData };\n}\n","import type { ScreenshotProp } from '../typings';\nimport { GLOBALS_UPDATED, STORY_CHANGED } from '@storybook/core-events';\nimport { addons, useStorybookApi } from '@storybook/manager-api';\nimport equal from 'fast-deep-equal';\nimport { useEffect, useRef, useState } from 'react';\nimport { getScreenshotProp } from '../utils';\n\ninterface GlobalsUpdatedData {\n globals?: Record<string, unknown>;\n initialGlobals?: Record<string, unknown>;\n}\n\nexport function useGlobals() {\n const [globals, setGlobals] = useState<ScreenshotProp>();\n const api = useStorybookApi();\n const apiRef = useRef(api);\n\n apiRef.current = api;\n\n useEffect(() => {\n setGlobals(undefined);\n\n const channel = addons.getChannel();\n\n const setGlobalStore = (data?: GlobalsUpdatedData) => {\n if (!data || !data.globals) {\n setGlobals(undefined);\n return;\n }\n\n const currentStoryData = apiRef.current.getCurrentStoryData() as\n | { initialGlobals?: Record<string, unknown> }\n | undefined;\n const initialGlobals =\n data.initialGlobals || currentStoryData?.initialGlobals || {};\n\n const changedGlobals = Object.keys(data.globals).reduce((obj, key) => {\n const globalValue = data.globals?.[key];\n\n if (globalValue !== undefined && !equal(globalValue, initialGlobals[key])) {\n obj[key] = globalValue;\n }\n\n return obj;\n }, {} as ScreenshotProp);\n\n setGlobals(getScreenshotProp(changedGlobals));\n };\n\n const storyChange = () => {\n setGlobals(undefined);\n };\n\n channel.on(GLOBALS_UPDATED, setGlobalStore);\n channel.on(STORY_CHANGED, storyChange);\n\n return () => {\n channel.off(GLOBALS_UPDATED, setGlobalStore);\n channel.off(STORY_CHANGED, storyChange);\n };\n }, []);\n\n return globals;\n}\n","import type { SaveScreenshotRequest } from '../../../api/typings';\nimport type { BrowserContextOptions, BrowserTypes } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport { useCallback, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { useGlobals } from '../../../hooks/use-globals';\nimport { useKnobs } from '../../../hooks/use-knobs';\nimport { getImageDiffMessages } from '../../../utils';\nimport { toast } from '../../../utils/toast';\nimport { useCurrentActions } from '../../action-set/hooks/use-current-actions';\nimport { addScreenshot, removeScreenshot } from '../store/actions';\nimport { useEditScreenshot } from './use-edit-screenshot';\nimport { useScreenshotOptions } from './use-screenshot-options';\n\ninterface Options {\n title?: string;\n browserType?: BrowserTypes;\n}\n\nexport function useSaveScreenshot(options?: Options) {\n const { title, browserType } = options || {};\n const args = useKnobs();\n const globals = useGlobals();\n\n const { screenshotOptions } = useScreenshotOptions();\n\n const storyData = useCurrentStoryData();\n\n const { editScreenshotState, clearScreenshotEdit } = useEditScreenshot();\n\n const { currentActions } = useCurrentActions(storyData?.id ?? '');\n\n const [error, setError] = useState<string | undefined>(undefined);\n\n const {\n mutateAsync,\n data: mutationResult,\n reset,\n isPending: inProgress,\n } = trpcClient.screenshot.saveScreenshot.useMutation({\n onError: (mutationError) => {\n const message = mutationError.message || 'Unexpected error occurred';\n setError(message);\n toast.error(message);\n },\n onSettled(result, error) {\n if (error) {\n toast.error(error.message || 'Unexpected error occurred in saving screenshot');\n return;\n }\n if (!result) return;\n const titleMsg = title || result.oldScreenShotTitle;\n if (result.added) {\n toast.success(\n // prettier-ignore\n `Screenshot ${ `${browserType ? ` for '${browserType}'` : ''}` } saved successfully.`,\n {\n duration: 5000,\n id: `image-diff-message:added:${browserType || 'default'}`,\n onAutoClose: reset,\n onDismiss: reset,\n },\n );\n } else if (result.pass) {\n const message =\n // prettier-ignore\n `Testing existing screenshot were successful, no change has been detected.${titleMsg ? `\\nTitle: ${titleMsg}` : ''}${browserType ? `\\nBrowser: ${ browserType}` : '' }`;\n\n toast.success(message, {\n duration: 5000,\n id: `image-diff-message:pass:${message}`,\n onAutoClose: reset,\n onDismiss: reset,\n });\n } else if (result.diffSize || result.error) {\n const message = getImageDiffMessages(result);\n\n toast.error(message, {\n duration: Infinity,\n id: `image-diff-message:error:${message}`,\n onDismiss: reset,\n });\n }\n },\n });\n\n const clearError = useCallback(() => {\n setError(undefined);\n }, []);\n\n const clearResult = useCallback(() => {\n reset();\n }, [reset]);\n\n const isUpdating = useCallback(\n (browserType: BrowserTypes) => {\n if (!editScreenshotState) return false;\n if (editScreenshotState.screenshotData.browserType === browserType) return true;\n return false;\n },\n [editScreenshotState],\n );\n\n const getUpdatingScreenshotTitle = useCallback(\n () => editScreenshotState && editScreenshotState.screenshotData.title,\n [editScreenshotState],\n );\n\n const saveScreenShot = useCallback(\n async (\n browserType: BrowserTypes,\n title: string,\n base64String?: string,\n deviceDescriptor?: BrowserContextOptions,\n ) => {\n if (!storyData) {\n return new Error('Unable to find story data');\n }\n\n if (!base64String) {\n return new Error('Unable to find screenshot image data');\n }\n\n const browserOptions = deviceDescriptor ? { ...deviceDescriptor } : undefined;\n\n const data: SaveScreenshotRequest = {\n actionSets: currentActions,\n args,\n base64: base64String,\n browserOptions,\n browserType,\n filePath: storyData.filePath,\n globals,\n id: nanoid(12),\n props: args,\n screenshotOptions:\n screenshotOptions && Object.keys(screenshotOptions).length\n ? screenshotOptions\n : undefined,\n storyId: storyData.id,\n title,\n };\n\n if (editScreenshotState && isUpdating(browserType)) {\n data.updateScreenshot = editScreenshotState.screenshotData;\n }\n\n let saveResult;\n\n clearError();\n try {\n saveResult = await mutateAsync(data);\n } catch {\n return new Error('Unexpected error occurred');\n }\n\n if (editScreenshotState && isUpdating(browserType)) {\n if (saveResult.added) {\n removeScreenshot(editScreenshotState.screenshotData.id);\n }\n clearScreenshotEdit();\n }\n\n if (saveResult.added) {\n data.index = saveResult.index;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { base64, ...rest } = data;\n addScreenshot(rest);\n }\n return saveResult;\n },\n [\n currentActions,\n args,\n globals,\n screenshotOptions,\n storyData,\n isUpdating,\n editScreenshotState,\n mutateAsync,\n clearScreenshotEdit,\n clearError,\n ],\n );\n\n const onSuccessClose = useCallback(() => {\n clearResult();\n }, [clearResult]);\n\n return {\n clearError,\n error,\n getUpdatingScreenshotTitle,\n inProgress,\n isUpdating,\n onSuccessClose,\n result: mutationResult,\n saveScreenShot,\n };\n}\n","import type { BrowserContextOptions, BrowserTypes } from '../../../typings';\nimport { STORY_RENDERED } from '@storybook/core-events';\nimport { addons, useStorybookState } from '@storybook/manager-api';\nimport sum from 'hash-sum';\nimport { nanoid } from 'nanoid';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useGlobals } from '../../../hooks/use-globals';\nimport { useKnobs } from '../../../hooks/use-knobs';\nimport { toast } from '../../../utils/toast';\nimport { useCurrentActions } from '../../action-set/hooks/use-current-actions';\nimport { useScreenshotOptions } from './use-screenshot-options';\n\nexport function useScreenshot(\n browserType: BrowserTypes | 'storybook',\n browserOptions?: BrowserContextOptions,\n) {\n const args = useKnobs();\n const globals = useGlobals();\n\n const state = useStorybookState();\n\n const { screenshotOptions } = useScreenshotOptions();\n\n const { currentActions } = useCurrentActions(state.storyId);\n\n const prevHash = useRef<string>();\n\n const [error, setError] = useState<string>();\n\n const {\n mutate,\n isPending: inProgress,\n data: result,\n } = trpcClient.screenshot.takeScreenshot.useMutation({\n onError: (mutationError) => {\n const message = mutationError.message || 'Unexpected error occurred';\n setError(message);\n toast.error(message);\n },\n });\n\n // Incremented each time the preview finishes rendering (including HMR).\n // Used instead of polling iframe.contentWindow.__playwright_addon_hot_reload_time__.\n const [renderCount, setRenderCount] = useState(0);\n\n useEffect(() => {\n const channel = addons.getChannel();\n const handler = () => setRenderCount((c) => c + 1);\n channel.on(STORY_RENDERED, handler);\n return () => {\n channel.off(STORY_RENDERED, handler);\n };\n }, []);\n\n const getSnapshot = useCallback(() => {\n if (browserType === 'storybook') return;\n\n setError(undefined);\n\n mutate({\n actionSets: currentActions,\n args,\n browserOptions,\n browserType,\n globals,\n props: args,\n requestId: nanoid(),\n screenshotOptions,\n storyId: state.storyId,\n });\n }, [\n browserType,\n currentActions,\n args,\n browserOptions,\n globals,\n mutate,\n screenshotOptions,\n state.storyId,\n ]);\n\n useEffect(() => {\n if (inProgress || renderCount === 0) return;\n\n const currentHash = sum({\n args,\n browserOptions,\n currentActions,\n globals,\n id: state.storyId,\n screenshotOptions,\n });\n\n if (prevHash.current === currentHash) {\n return;\n }\n\n prevHash.current = currentHash;\n\n getSnapshot();\n }, [\n currentActions,\n getSnapshot,\n args,\n browserOptions,\n globals,\n state.storyId,\n screenshotOptions,\n inProgress,\n renderCount,\n ]);\n\n return { error, getSnapshot, loading: inProgress, screenshot: result };\n}\n","import { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { changeScreenshotIndex } from '../store/index';\n\nexport interface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\nexport function useScreenshotIndexChange() {\n const { mutateAsync, isPending: ChangeIndexInProgress } =\n trpcClient.screenshot.changeScreenshotIndex.useMutation();\n\n const storyData = useCurrentStoryData();\n\n const changeIndex = useCallback(\n async (e: SortableIndexChangeEvent) => {\n if (!storyData) return;\n\n changeScreenshotIndex({ newIndex: e.newIndex, oldIndex: e.oldIndex });\n try {\n await mutateAsync({\n filePath: storyData.filePath,\n newIndex: e.newIndex,\n oldIndex: e.oldIndex,\n storyId: storyData.id,\n });\n } catch {\n changeScreenshotIndex({ newIndex: e.oldIndex, oldIndex: e.newIndex });\n }\n },\n [mutateAsync, storyData],\n );\n return {\n ChangeIndexInProgress,\n changeIndex,\n };\n}\n","import type { DialogProps, ImageDiffPreviewProps } from '../../../../components/common';\nimport type { StoryData } from '../../../../schema';\nimport type { ScreenshotData } from '../../../../typings';\nimport React, { useEffect } from 'react';\nimport { ImageDiffPreviewDialog, Loader } from '../../../../components/common';\nimport { useScreenshotDiffTest } from '../../hooks';\nimport { ScreenshotInfo } from './ScreenshotInfo';\n\nexport interface ScreenshotPreviewDialogProps\n extends DialogProps, Partial<ImageDiffPreviewProps> {\n screenShotData: ScreenshotData;\n storyData: StoryData;\n}\n\nconst ScreenshotPreviewDialog: React.FC<ScreenshotPreviewDialogProps> = (props) => {\n const { storyData, screenShotData, onClose, open = true, ...rest } = props;\n\n const { testScreenshot, inProgress, result } = useScreenshotDiffTest();\n\n useEffect(() => {\n testScreenshot({ ...storyData, screenshotId: screenShotData.id });\n }, [storyData, screenShotData.id, testScreenshot]);\n\n return (\n <>\n {result?.filePath && (\n <ImageDiffPreviewDialog\n title={screenShotData.title}\n imageDiffResult={result}\n open={open}\n onClose={onClose}\n titleActions={() => (\n <ScreenshotInfo\n color=\"primary\"\n size=\"medium\"\n screenshotData={screenShotData}\n />\n )}\n {...rest}\n />\n )}\n <Loader open={inProgress} />\n </>\n );\n};\n\nScreenshotPreviewDialog.displayName = 'ScreenshotPreviewDialog';\n\nexport { ScreenshotPreviewDialog };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ImageDiffResult } from '../../../../api/typings';\nimport type { StoryData } from '../../../../schema';\nimport type { ScreenshotData } from '../../../../typings';\nimport type { ScreenshotListItemMenuProps } from './ScreenshotListItemMenu';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { makeStyles } from '@material-ui/core';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport Error from '@material-ui/icons/Error';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n BrowserIcon,\n Loader,\n MemoizedImageDiffMessage,\n} from '../../../../components/common';\nimport { useDragStart } from '../../../../hooks/use-drag-start';\nimport { useEditScreenshot } from '../../hooks/use-edit-screenshot';\nimport { useScreenshotDiffTest } from '../../hooks/use-screenshot-diff-test';\nimport { removeImageDiffResult } from '../../store/actions';\nimport { ScreenshotInfo } from './ScreenshotInfo';\nimport { ScreenshotListItemMenu } from './ScreenshotListItemMenu';\nimport { ScreenshotListItemWrapper } from './ScreenshotListItemWrapper';\nimport { ScreenshotPreviewDialog } from './ScreenshotPreviewDialog';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\n\nconst CheckCircleIcon = resolveMuiIcon(CheckCircle);\nconst ErrorIcon = resolveMuiIcon(Error);\n\nconst useStyles = makeStyles(\n () => {\n return {\n indicatorIcon: {\n height: 16,\n position: 'absolute',\n right: -1,\n top: 0,\n zIndex: 1,\n },\n visible: {\n display: 'block',\n },\n };\n },\n { name: 'ScreenshotListItemMenu' },\n);\n\nexport interface ScreenshotListItemProps extends Omit<\n ScreenshotListItemMenuProps,\n 'onDelete'\n> {\n onClick?: (item: ScreenshotData) => void;\n selected?: boolean;\n forceShowMenu?: boolean;\n draggable?: boolean;\n imageDiffResult?: ImageDiffResult;\n showImageDiffResultDialog?: boolean;\n storyData: StoryData;\n showPreviewOnClick?: boolean;\n pauseDeleteImageDiffResult?: boolean;\n openUpdateDialog?: boolean;\n index?: number;\n sortableId?: string;\n}\n\nfunction ScreenshotListItem({\n pauseDeleteImageDiffResult,\n showPreviewOnClick,\n screenshot,\n sortableId,\n imageDiffResult,\n selected,\n onClick,\n draggable,\n forceShowMenu,\n showImageDiffResultDialog,\n storyData,\n ...rest\n}: ScreenshotListItemProps) {\n const {\n attributes,\n listeners,\n setActivatorNodeRef,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n disabled: !draggable,\n id: sortableId ?? screenshot.id,\n });\n\n const classes = useStyles();\n\n const [showMenu, setShowMenu] = useState(false);\n const [showImageDiffResult, setShowImageDiffResult] = useState(false);\n\n const timer = useRef(0);\n\n const { dragStart } = useDragStart();\n\n const [showPreview, setShowPreview] = useState(false);\n\n const { inProgress, testScreenshot } = useScreenshotDiffTest();\n\n const isPassesImageDiff = imageDiffResult && imageDiffResult.pass;\n\n const handleRemoveScreenShotResult = useCallback(() => {\n setShowImageDiffResult(false);\n if (\n !pauseDeleteImageDiffResult &&\n isPassesImageDiff &&\n imageDiffResult?.screenshotId\n ) {\n removeImageDiffResult(imageDiffResult.screenshotId);\n } else {\n window.clearTimeout(timer.current);\n }\n }, [pauseDeleteImageDiffResult, isPassesImageDiff, imageDiffResult]);\n\n useEffect(() => {\n if (!pauseDeleteImageDiffResult && imageDiffResult && imageDiffResult.pass) {\n timer.current = window.setTimeout(() => {\n handleRemoveScreenShotResult();\n }, 10000);\n }\n return () => {\n window.clearTimeout(timer.current);\n };\n }, [pauseDeleteImageDiffResult, handleRemoveScreenShotResult, imageDiffResult]);\n\n const handleShowImageDiffResult = useCallback(() => {\n setShowImageDiffResult(true);\n }, []);\n\n const handleMouseEnter = useCallback(() => {\n setShowMenu(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setShowMenu(false);\n }, []);\n\n const handleRunDiffTest = useCallback(async () => {\n await testScreenshot({ ...storyData, screenshotId: screenshot.id });\n setShowImageDiffResult(true);\n }, [screenshot.id, storyData, testScreenshot]);\n\n const toggleSelectedItem = useCallback(() => {\n if (onClick) onClick(screenshot);\n if (showPreviewOnClick) {\n setShowPreview(!showPreview);\n }\n }, [onClick, screenshot, showPreview, showPreviewOnClick]);\n\n const { editScreenshot, loadSetting, editScreenshotState, clearScreenshotEdit } =\n useEditScreenshot();\n\n const handleEdit = useCallback(\n () => editScreenshot(screenshot),\n [editScreenshot, screenshot],\n );\n\n const handleLoadSetting = useCallback(() => {\n loadSetting(screenshot);\n }, [loadSetting, screenshot]);\n\n return (\n <div\n ref={setNodeRef}\n style={{\n opacity: isDragging ? 0.8 : 1,\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <ScreenshotListItemWrapper\n onClick={toggleSelectedItem}\n title={screenshot.title}\n draggable={draggable}\n selected={\n selected ||\n (editScreenshotState && editScreenshotState.screenshotData.id === screenshot.id)\n }\n tooltip={screenshot.title + (storyData && ` - ${storyData.id}`)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n dragHandleProps={\n draggable\n ? {\n ...(attributes as React.HTMLAttributes<HTMLSpanElement>),\n ...(listeners as React.HTMLAttributes<HTMLSpanElement>),\n setNodeRef: setActivatorNodeRef,\n }\n : undefined\n }\n style={{\n cursor: 'pointer',\n }}\n >\n <>\n <Loader progressSize={20} position=\"absolute\" open={inProgress} />\n\n {isPassesImageDiff && (\n <CheckCircleIcon\n color=\"primary\"\n onClick={handleRemoveScreenShotResult}\n className={classes.indicatorIcon}\n />\n )}\n\n {imageDiffResult && !imageDiffResult.pass && (\n <ErrorIcon\n color=\"secondary\"\n onClick={handleShowImageDiffResult}\n className={classes.indicatorIcon}\n />\n )}\n\n <BrowserIcon style={{ height: 16 }} browserType={screenshot.browserType} />\n\n {showImageDiffResult && showImageDiffResultDialog && imageDiffResult && (\n <MemoizedImageDiffMessage\n result={imageDiffResult}\n onClose={handleRemoveScreenShotResult}\n title={screenshot.title}\n titleActions={() => (\n <ScreenshotInfo\n color=\"primary\"\n size=\"medium\"\n screenshotData={screenshot}\n />\n )}\n />\n )}\n <ScreenshotListItemMenu\n show={(forceShowMenu || showMenu) && !dragStart}\n screenshot={screenshot}\n onHide={handleMouseLeave}\n onRunImageDiff={handleRunDiffTest}\n imageDiffResult={imageDiffResult}\n onEditClick={handleEdit}\n onLoadSettingClick={handleLoadSetting}\n isEditing={Boolean(editScreenshotState)}\n onDelete={clearScreenshotEdit}\n {...rest}\n />\n\n {showPreview && showPreviewOnClick && (\n <ScreenshotPreviewDialog\n screenShotData={screenshot}\n storyData={storyData}\n onClose={toggleSelectedItem}\n open={true}\n width=\"100%\"\n height=\"100%\"\n activeTab={!isPassesImageDiff ? 'imageDiff' : 'newScreenshot'}\n />\n )}\n </>\n </ScreenshotListItemWrapper>\n </div>\n );\n}\n\nScreenshotListItem.displayName = 'ScreenshotListItem';\n\nexport { ScreenshotListItem as SortableScreenshotListItem };\n","import type { DragEndEvent } from '@dnd-kit/core';\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport React, { useCallback } from 'react';\nimport { ListWrapperSortableContainer, Loader } from '../../../../components/common';\nimport { useDragStart } from '../../../../hooks/use-drag-start';\nimport { useScreenshotIndexChange } from '../../hooks/use-screenshot-index-change';\n\ninterface ScreenshotListSortableProps {\n items: Array<string | number>;\n}\n\nconst ScreenshotListSortable: React.FC<ScreenshotListSortableProps> = ({\n children,\n items,\n}) => {\n const { setDragStart } = useDragStart();\n\n const { changeIndex, ChangeIndexInProgress } = useScreenshotIndexChange();\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragStart = useCallback(() => {\n setDragStart(true);\n }, [setDragStart]);\n\n const handleDragCancel = useCallback(() => {\n setDragStart(false);\n }, [setDragStart]);\n\n const handleDragEnd = useCallback(\n ({ active, over }: DragEndEvent) => {\n setDragStart(false);\n\n if (!over || active.id === over.id) return;\n\n const oldIndex = items.findIndex((x) => x === active.id);\n const newIndex = items.findIndex((x) => x === over.id);\n\n if (oldIndex < 0 || newIndex < 0) return;\n\n changeIndex({ newIndex, oldIndex });\n },\n [changeIndex, items, setDragStart],\n );\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n <ListWrapperSortableContainer>\n <Loader open={ChangeIndexInProgress} />\n {children}\n </ListWrapperSortableContainer>\n </SortableContext>\n </DndContext>\n );\n};\n\nScreenshotListSortable.displayName = 'ScreenshotListSortable';\n\nexport { ScreenshotListSortable };\n","import React from 'react';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { useScreenshotStoreState } from '../../store/selectors';\n\nimport { SortableScreenshotListItem } from './ScreenshotListItem';\nimport { ScreenshotListSortable } from './ScreenshotListSortable';\n\nconst ScreenshotList: React.FC = ({ children }) => {\n const storyData = useCurrentStoryData();\n\n const state = useScreenshotStoreState();\n\n const hasScreenshot = state.screenshots && state.screenshots.length > 0;\n const sortedScreenshots = [...(state.screenshots || [])].sort(\n (a, b) => (a.index ?? 0) - (b.index ?? 0),\n );\n\n return (\n <>\n <ScreenshotListSortable items={sortedScreenshots.map((x) => x.id)}>\n {hasScreenshot ? (\n <>\n {storyData &&\n sortedScreenshots.map((screenshot, index) => (\n <SortableScreenshotListItem\n index={index}\n sortableId={screenshot.id}\n openUpdateDialog={true}\n key={screenshot.id}\n screenshot={screenshot}\n storyData={storyData}\n showPreviewOnClick={true}\n draggable={true}\n enableImageDiff={true}\n enableUpdate={true}\n showImageDiffResultDialog={true}\n enableLoadSetting={true}\n enableEditScreenshot={true}\n pauseDeleteImageDiffResult={state.pauseDeleteImageDiffResult}\n imageDiffResult={state.imageDiffResults.find(\n (x) => x.screenshotId === screenshot.id,\n )}\n />\n ))}\n </>\n ) : (\n <div style={{ marginTop: 30, textAlign: 'center' }}>\n <div>No screenshot has been found!</div>\n </div>\n )}\n\n {children}\n </ScreenshotListSortable>\n </>\n );\n};\n\nScreenshotList.displayName = 'ScreenshotList';\n\nexport { ScreenshotList };\n","import { IconButton } from '@storybook/components';\nimport { ContrastIcon, PhotoIcon, RefreshIcon, WrenchIcon } from '@storybook/icons';\nimport React from 'react';\nimport {\n DeleteConfirmationButton,\n FixScreenshotFileDialog,\n Toolbar,\n} from '../../../../components/common';\n\nexport interface ScreenshotListToolbarProps {\n onTestClick: () => void;\n title: string;\n onPreviewClick: () => void;\n onUpdateClick: () => void;\n hasScreenShot?: boolean;\n onDelete: () => void;\n}\n\nconst ScreenshotListToolbar: React.FC<ScreenshotListToolbarProps> = (props) => {\n const { hasScreenShot, title, onTestClick, onPreviewClick, onUpdateClick, onDelete } =\n props;\n\n const [openFixDialog, setOpenFixDialog] = React.useState<boolean>(false);\n\n return (\n <Toolbar border={['bottom']}>\n <div className=\"left\">\n <div title={title}>Story Screenshots</div>\n </div>\n <div className=\"right\">\n <FixScreenshotFileDialog\n fixFunction={true}\n onClose={setOpenFixDialog}\n open={openFixDialog}\n />\n <IconButton onClick={() => setOpenFixDialog(true)} title=\"Fix screenshot name\">\n <WrenchIcon />\n </IconButton>\n {hasScreenShot && (\n <>\n <IconButton onClick={onUpdateClick} title=\"Update story screenshots\">\n <RefreshIcon />\n </IconButton>\n <IconButton onClick={onTestClick} title=\"Run diff test for story screenshots\">\n <ContrastIcon />\n </IconButton>\n <IconButton onClick={onPreviewClick} title=\"Display story screenshots\">\n <PhotoIcon />\n </IconButton>\n <DeleteConfirmationButton IconButton={IconButton} onDelete={onDelete} />\n </>\n )}\n </div>\n </Toolbar>\n );\n};\n\nScreenshotListToolbar.displayName = 'ScreenshotListToolbar';\n\nexport { ScreenshotListToolbar };\n","import { useEffect } from 'react';\n\nexport function useKeyPressFn(\n keydown?: (ev: KeyboardEvent) => void,\n keyup?: (ev: KeyboardEvent) => void,\n disable = false,\n) {\n // Add event listeners\n useEffect(() => {\n if (disable) return undefined;\n if (keydown) window.addEventListener('keydown', keydown);\n if (keyup) window.addEventListener('keyup', keyup);\n // Remove event listeners on cleanup\n return () => {\n if (keydown) window.removeEventListener('keydown', keydown);\n if (keyup) window.removeEventListener('keyup', keyup);\n };\n }, [disable, keydown, keyup]); // Empty array ensures that effect is only run on mount and unmount\n}\n","import type { DialogProps } from '../../../../components/common';\nimport type { StoryData } from '../../../../schema';\nimport type { ScreenshotData } from '../../../../typings';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Dialog, ImageDiffPreview } from '../../../../components/common';\nimport { useKeyPressFn } from '../../../../hooks/use-key-press-fn';\nimport { useScreenshotStoreState } from '../../store/selectors';\nimport { SortableScreenshotListItem } from './ScreenshotListItem';\nimport { ScreenshotListSortable } from './ScreenshotListSortable';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { divider },\n } = theme;\n\n return {\n line: {\n backgroundColor: divider,\n width: 1,\n },\n list: {\n width: '350px',\n },\n root: {\n display: 'flex',\n flexDirection: 'row',\n height: 'calc(100% - 70px) !important',\n position: 'relative',\n width: '100%',\n },\n };\n },\n { name: 'ScreenshotListPreviewDialog' },\n);\n\nexport interface ScreenshotListPreviewDialogProps {\n screenshots: ScreenshotData[];\n storyData: StoryData;\n selectedItem?: string;\n title?: string;\n draggable?: boolean;\n}\n\nconst ScreenshotListPreviewDialog: React.FC<\n ScreenshotListPreviewDialogProps & DialogProps\n> = ({\n screenshots,\n storyData,\n selectedItem,\n title,\n children,\n draggable = true,\n ...rest\n}) => {\n const [currentItem, setCurrentItem] = useState<ScreenshotData>();\n\n const state = useScreenshotStoreState();\n\n const classes = useStyles();\n\n const handleItemClick = useCallback(async (screenshot: ScreenshotData) => {\n setCurrentItem(screenshot);\n }, []);\n\n const handleKeyUp = useCallback(\n (ev: KeyboardEvent) => {\n if (!currentItem) return;\n const index = screenshots.findIndex((x) => x.id === currentItem.id);\n switch (ev.key) {\n case 'ArrowDown': {\n if (screenshots[index + 1]) {\n setCurrentItem(screenshots[index + 1]);\n }\n break;\n }\n case 'ArrowUp': {\n if (screenshots[index - 1]) {\n setCurrentItem(screenshots[index - 1]);\n }\n break;\n }\n default:\n break;\n }\n },\n [currentItem, screenshots],\n );\n\n useKeyPressFn(undefined, handleKeyUp);\n\n useEffect(() => {\n if (\n state.imageDiffResults &&\n state.imageDiffResults.length &&\n screenshots &&\n !currentItem\n ) {\n if (selectedItem) {\n const selectedScreenshot = screenshots.find((x) => x.id === selectedItem);\n if (selectedScreenshot) {\n handleItemClick(selectedScreenshot);\n }\n } else if (screenshots[0]) {\n handleItemClick(screenshots[0]);\n }\n }\n }, [currentItem, handleItemClick, screenshots, selectedItem, state.imageDiffResults]);\n\n const diffResult =\n currentItem && state.imageDiffResults.find((x) => x.screenshotId === currentItem.id);\n\n return (\n <Dialog\n width=\"100%\"\n title={title || (currentItem ? capitalize(currentItem.title) : 'Loading ...')}\n subtitle={\n (title && currentItem && currentItem.title) + (storyData && ` (${storyData.id})`)\n }\n height=\"100%\"\n {...rest}\n >\n <div className={classes.root}>\n <div className={classes.list}>\n <ScreenshotListSortable items={screenshots.map((x) => x.id)}>\n {currentItem &&\n screenshots.map((screenshot, i) => (\n <SortableScreenshotListItem\n index={i}\n sortableId={screenshot.id}\n openUpdateDialog={false}\n showPreviewOnClick={false}\n key={screenshot.id}\n screenshot={screenshot}\n forceShowMenu={true}\n enableUpdate={true}\n draggable={draggable}\n storyData={storyData}\n pauseDeleteImageDiffResult={state.pauseDeleteImageDiffResult}\n onClick={handleItemClick}\n selected={currentItem.id === screenshot.id}\n imageDiffResult={state.imageDiffResults.find(\n (x) => x.screenshotId === screenshot.id,\n )}\n />\n ))}\n </ScreenshotListSortable>\n </div>\n\n <div className={classes.line} />\n {diffResult && <ImageDiffPreview imageDiffResult={diffResult} />}\n {children}\n </div>\n </Dialog>\n );\n};\n\nScreenshotListPreviewDialog.displayName = 'ScreenshotListPreviewDialog';\n\nexport { ScreenshotListPreviewDialog };\n","import type { ScreenshotTestTargetType } from '../../../../typings';\nimport { Button } from '@material-ui/core';\nimport React, { useCallback, useState } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { toast } from '../../../../utils/toast';\nimport { useImageDiffScreenshots } from '../../hooks/use-imagediff-screenshots';\nimport { useScreenshotUpdate } from '../../hooks/use-screenshot-update';\nimport {\n removePassedImageDiffResult,\n setPauseDeleteImageDiffResult,\n} from '../../store/actions';\nimport { useScreenshotStoreState } from '../../store/selectors';\nimport { ScreenshotListPreviewDialog } from './ScreenshotListPreviewDialog';\n\nexport interface StoryScreenshotPreviewProps {\n onClose: () => void;\n updating?: boolean;\n target: ScreenshotTestTargetType;\n onLoad?: () => void;\n}\n\nconst StoryScreenshotPreview: React.FC<StoryScreenshotPreviewProps> = (props) => {\n const { onClose, updating, target, onLoad } = props;\n\n const { loading, storyData } = useImageDiffScreenshots(target, onLoad);\n\n const [updateInProgress, setUpdateInProgress] = useState(false);\n\n const state = useScreenshotStoreState();\n\n const { updateScreenshot } = useScreenshotUpdate();\n\n const handleSave = useCallback(async () => {\n setUpdateInProgress(true);\n try {\n const promises = state.screenshots.reduce<Array<Promise<void>>>((arr, s) => {\n const imageDiffResult = state.imageDiffResults.find(\n (x) => x.screenshotId === s.id,\n );\n if (!imageDiffResult) {\n throw new Error(\n `Unable to find image diff result for '${s.title}' screenshot.`,\n );\n }\n arr.push(updateScreenshot(imageDiffResult));\n return arr;\n }, []);\n\n await Promise.all(promises);\n toast.success('Successfully updated.', {\n duration: Infinity,\n id: 'story-screenshot-preview:updated',\n });\n } catch (error) {\n toast.error((error as { message: string }).message);\n }\n setUpdateInProgress(false);\n }, [state, updateScreenshot]);\n\n React.useEffect(() => {\n setPauseDeleteImageDiffResult(true);\n\n return () => {\n setPauseDeleteImageDiffResult(false);\n removePassedImageDiffResult();\n };\n }, []);\n\n return (\n <>\n <Loader open={loading || updateInProgress} />\n {!loading && (\n <ScreenshotListPreviewDialog\n title={\n updating\n ? 'Following screenshots will be saved, would you like to continue?'\n : undefined\n }\n screenshots={state.screenshots}\n onClose={onClose}\n open={true}\n storyData={storyData || { filePath: '', id: '', name: '', parent: '' }}\n draggable={target === 'story' && !updateInProgress}\n footerActions={\n updating\n ? () => (\n <>\n <Button onClick={onClose} color=\"primary\">\n No\n </Button>\n <Button onClick={handleSave} color=\"primary\" autoFocus>\n Yes\n </Button>\n </>\n )\n : undefined\n }\n >\n <Loader open={updateInProgress} />\n </ScreenshotListPreviewDialog>\n )}\n </>\n );\n};\n\nStoryScreenshotPreview.displayName = 'StoryScreenshotPreview';\nconst MemoizedStoryScreenshotPreview = React.memo(StoryScreenshotPreview);\n\nexport { MemoizedStoryScreenshotPreview, StoryScreenshotPreview };\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { useDeleteStoryScreenshot } from '../../hooks/use-delete-story-screenshots';\nimport { useScreenshotDiffTestByType } from '../../hooks/use-screenshot-diff-test-by-type';\nimport { useScreenshotUpdateState } from '../../hooks/use-screenshot-update-state';\nimport { useStoryScreenshotLoader } from '../../hooks/use-story-screenshot-loader';\nimport { setPauseDeleteImageDiffResult } from '../../store/actions';\nimport { useScreenshotStoreState } from '../../store/selectors';\nimport { ScreenshotList } from './ScreenshotList';\nimport { ScreenshotListToolbar } from './ScreenshotListToolbar';\nimport { StoryScreenshotPreview } from './StoryScreenshotPreview';\n\nfunction ScreenshotPanel() {\n const [showPreview, setShowPreview] = useState(false);\n\n const reqBy = 'screenshot-panel';\n const { runDiffTest, updateInf } = useScreenshotUpdateState(reqBy, 'story');\n\n const { screenshotLoaderInProgress } = useStoryScreenshotLoader();\n\n const { deleteInProgress, deleteStoryScreenshots } = useDeleteStoryScreenshot();\n\n const state = useScreenshotStoreState();\n\n const { testStoryScreenShots, imageDiffTestInProgress } = useScreenshotDiffTestByType();\n\n const toggleShowPreview = useCallback(() => {\n setShowPreview(!showPreview);\n }, [showPreview]);\n\n const hasScreenshot = state.screenshots && state.screenshots.length > 0;\n\n useEffect(() => {\n setPauseDeleteImageDiffResult(showPreview);\n }, [showPreview]);\n\n const handleStoryImgDiff = React.useCallback(() => {\n testStoryScreenShots('story');\n }, [testStoryScreenShots]);\n\n return (\n <>\n <ScreenshotListToolbar\n onUpdateClick={runDiffTest}\n title=\"Story Screenshots\"\n onTestClick={handleStoryImgDiff}\n onPreviewClick={toggleShowPreview}\n hasScreenShot={hasScreenshot}\n onDelete={deleteStoryScreenshots}\n />\n <ScreenshotList>\n <Loader\n open={\n screenshotLoaderInProgress ||\n imageDiffTestInProgress ||\n deleteInProgress ||\n updateInf.reqBy !== undefined\n }\n />\n </ScreenshotList>\n {showPreview && (\n <StoryScreenshotPreview onClose={toggleShowPreview} target=\"story\" />\n )}\n </>\n );\n}\n\nScreenshotPanel.displayName = 'ScreenshotPanel';\n\nexport { ScreenshotPanel };\n","import React from 'react';\nimport { CommonProvider } from '../../../../components/common';\nimport { useScreenshotUpdateState } from '../../hooks/use-screenshot-update-state';\nimport { ScreenshotPanel } from './ScreenshotPanel';\nimport { MemoizedStoryScreenshotPreview } from './StoryScreenshotPreview';\n\nexport interface ScreenshotMainProps {\n showPanel: boolean;\n}\n\nconst ScreenshotMain: React.FC<ScreenshotMainProps> = ({ showPanel }) => {\n const [dialogOpen, setDialogOpen] = React.useState<boolean>(false);\n\n const { updateInf, handleClose, setIsLoadingFinish } = useScreenshotUpdateState('');\n\n const handleOnLoad = React.useCallback(() => {\n setDialogOpen(true);\n setIsLoadingFinish(true);\n }, [setIsLoadingFinish]);\n\n const handleOnClose = React.useCallback(() => {\n handleClose();\n setDialogOpen(false);\n }, [handleClose]);\n\n return (\n <CommonProvider>\n {showPanel && !dialogOpen && <ScreenshotPanel />}\n\n {updateInf.reqBy && (\n <MemoizedStoryScreenshotPreview\n onClose={handleOnClose}\n updating={true}\n target={updateInf.target ?? 'story'}\n onLoad={handleOnLoad}\n />\n )}\n </CommonProvider>\n );\n};\n\nScreenshotMain.displayName = 'ScreenshotMain';\n\nexport { ScreenshotMain };\n","import { useStorybookState } from '@storybook/manager-api';\nimport { useEffect, useState } from 'react';\nimport { constructStoryUrl } from '../utils';\n\nexport function useStoryUrl() {\n const state = useStorybookState();\n const [url, setUrl] = useState<string>();\n\n useEffect(() => {\n let newUrl = constructStoryUrl(window.location.host, state.storyId);\n\n const queryKeys = Object.keys(state.customQueryParams);\n if (queryKeys.length > 0) {\n const query = queryKeys.map((key) => {\n const val = state.customQueryParams[key];\n\n return `${key}=${val}`;\n });\n newUrl += `&${query.join('&')}`;\n }\n\n setUrl(newUrl);\n }, [state.customQueryParams, state.storyId]);\n\n return url;\n}\n","import { Divider, IconButton, makeStyles, Popover, Tooltip } from '@material-ui/core';\n\nimport CloseIcon from '@material-ui/icons/Close';\nimport { IconButton as SIconButton } from '@storybook/components';\nimport React, { useCallback, useState } from 'react';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\n\nconst CloseIconComponent = resolveMuiIcon(CloseIcon);\n\nconst useStyles = makeStyles(\n () => {\n return {\n content: {\n padding: 5,\n },\n root: {\n padding: 5,\n width: 450,\n },\n title: {\n display: 'flex',\n fontSize: 20,\n justifyContent: 'space-between',\n padding: 5,\n },\n };\n },\n { name: 'OptionPopover' },\n);\n\nexport interface OptionPopoverProps {\n title: string;\n Icon: React.ElementType;\n width?: number;\n active?: boolean;\n}\n\nconst OptionPopover: React.FC<OptionPopoverProps> = ({\n title,\n Icon,\n children,\n width,\n active,\n}) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement>();\n\n const classes = useStyles();\n\n const handleClick = useCallback((e) => {\n setAnchorEl(e.target);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(undefined);\n }, []);\n\n return (\n <>\n <Popover\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n style={{ margin: 20 }}\n anchorOrigin={{ horizontal: 'center', vertical: 'top' }}\n transformOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n >\n <div className={classes.root} style={{ width }}>\n <div className={classes.title}>\n <span>{title}</span>\n <IconButton size=\"small\" onClick={handleClose}>\n <CloseIconComponent />\n </IconButton>\n </div>\n <Divider />\n <div>{children}</div>\n </div>\n </Popover>\n\n <SIconButton onClick={handleClick} active={active}>\n <Tooltip placement=\"top\" title=\"Browser Options\">\n <Icon />\n </Tooltip>\n </SIconButton>\n </>\n );\n};\n\nOptionPopover.displayName = 'OptionPopover';\n\nexport { OptionPopover };\n","import type { BrowsersOption } from '../../../../hooks/use-browser-options';\nimport SettingIcon from '@material-ui/icons/Settings';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { DeviceList, MemoizedSchemaFormLoader } from '../../../../components/common';\nimport { useBrowserOptions } from '../../../../hooks/use-browser-options';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { OptionPopover } from './OptionPopover';\n\nconst SettingIconComponent = resolveMuiIcon(SettingIcon);\n\nexport interface BrowserOptionsProps {\n browserType: keyof BrowsersOption;\n}\n\nconst BrowserOptions: React.FC<BrowserOptionsProps> = ({ browserType }) => {\n const {\n setBrowserOptions,\n browserOptions,\n hasOption: isActive,\n setBrowserDeviceOptions,\n } = useBrowserOptions(browserType);\n\n const [reset, setReset] = useState(false);\n\n const handleSave = useCallback(\n (data) => {\n setBrowserOptions(browserType, data);\n },\n [browserType, setBrowserOptions],\n );\n\n const handleDeviceSelection = useCallback(\n (deviceName) => {\n setBrowserDeviceOptions(browserType, deviceName);\n setReset(true);\n },\n [browserType, setBrowserDeviceOptions],\n );\n\n useEffect(() => {\n if (reset) setReset(false);\n }, [reset]);\n\n if (!browserOptions) return null;\n\n return (\n <OptionPopover title=\"Browser Options\" Icon={SettingIconComponent} active={isActive}>\n {!reset && (\n <MemoizedSchemaFormLoader\n onSave={handleSave}\n schemaName=\"browser-options\"\n defaultData={browserOptions && browserOptions[browserType]}\n FooterComponent={<DeviceList onDeviceSelect={handleDeviceSelection} />}\n />\n )}\n </OptionPopover>\n );\n};\n\nBrowserOptions.displayName = 'BrowserOptions';\n\nexport { BrowserOptions };\n","import type { BrowserTypes } from '../../../../typings';\nimport { CircularProgress, makeStyles, Tooltip } from '@material-ui/core';\nimport Fullscreen from '@material-ui/icons/FullscreenSharp';\nimport RefreshIcon from '@material-ui/icons/RefreshOutlined';\nimport SaveIcon from '@material-ui/icons/SaveAltOutlined';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { BrowserOptions } from './BrowserOptions';\n\nconst FullscreenIcon = resolveMuiIcon(Fullscreen);\nconst RefreshOutlinedIcon = resolveMuiIcon(RefreshIcon);\nconst SaveAltOutlinedIcon = resolveMuiIcon(SaveIcon);\n\nconst useStyles = makeStyles((theme) => {\n const { palette } = theme;\n\n return {\n label: {\n textTransform: 'uppercase',\n },\n\n root: {\n alignItems: 'center',\n backgroundColor: palette.divider,\n color: palette.text.secondary,\n display: 'flex',\n flexWrap: 'nowrap',\n fontSize: 14,\n height: 30,\n justifyContent: 'space-between',\n minHeight: 'auto',\n paddingLeft: 10,\n paddingRight: 10,\n textAlign: 'right',\n },\n\n toolbarPanels: {\n '& button': {\n alignItems: 'center',\n display: 'flex',\n height: 30,\n marginLeft: 6,\n marginTop: 0,\n },\n '& svg:not(.browser-loader)': {\n width: 17,\n },\n alignItems: 'center',\n display: 'flex',\n },\n };\n});\n\nexport interface PreviewItemProps {\n browserType: BrowserTypes | 'storybook';\n onSave: () => void;\n loading: boolean;\n showSaveButton: boolean;\n onRefresh: () => void;\n onFullScreen: () => void;\n}\n\nconst ScreenShotViewToolbar: React.FC<PreviewItemProps> = (props) => {\n const { browserType, onSave, showSaveButton, loading, onRefresh, onFullScreen } = props;\n\n const classes = useStyles();\n\n return (\n <div className={classes.root}>\n <div className={classes.toolbarPanels}>\n <label className={classes.label}>{browserType}</label>\n {loading && (\n <CircularProgress\n classes={{\n svg: 'browser-loader',\n }}\n style={{ marginLeft: 10 }}\n size={15}\n />\n )}\n </div>\n <div className={classes.toolbarPanels}>\n {showSaveButton && (\n <IconButton onClick={onSave}>\n <Tooltip placement=\"top\" title=\"Save screenshot\">\n <SaveAltOutlinedIcon />\n </Tooltip>\n </IconButton>\n )}\n <IconButton onClick={onRefresh}>\n <Tooltip placement=\"top\" title=\"Refresh\">\n <RefreshOutlinedIcon />\n </Tooltip>\n </IconButton>\n {browserType !== 'storybook' && <BrowserOptions browserType={browserType} />}\n\n <IconButton onClick={onFullScreen}>\n <Tooltip placement=\"top\" title=\"Full screen\">\n <FullscreenIcon />\n </Tooltip>\n </IconButton>\n </div>\n </div>\n );\n};\n\nScreenShotViewToolbar.displayName = 'ScreenShotViewToolbar';\n\nexport { ScreenShotViewToolbar };\n","import { lighten, darken } from '@material-ui/core/styles';\n\nexport const getBorderColor = (\n type: 'dark' | 'light',\n color: string,\n coefficient = 0.1,\n) => {\n return type === 'dark' ? lighten(color, coefficient) : darken(color, coefficient);\n};\n","import type { BrowserContextOptions, BrowserTypes } from '../../../../typings';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport { darken, lighten } from '@material-ui/core/styles';\nimport { ScrollArea } from '@storybook/components';\nimport clsx from 'clsx';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Dialog, ErrorPanel, ImagePreview } from '../../../../components/common';\nimport { useBrowserOptions } from '../../../../hooks/use-browser-options';\nimport { useEditScreenshot } from '../../hooks/use-edit-screenshot';\nimport { useScreenshot } from '../../hooks/use-screenshot';\nimport { ScreenShotViewToolbar } from './ScreenShotViewToolbar';\nimport { getBorderColor } from './utils/index';\n\nconst useStyles = makeStyles(\n (theme) => {\n const getBackgroundColor = theme.palette.type === 'light' ? lighten : darken;\n const { palette } = theme;\n const { background } = palette;\n\n return {\n card: {\n '& .os-scrollbar': {\n opacity: 1,\n visibility: 'visible !important',\n zIndex: 10,\n },\n '& .os-scrollbar-track': {\n '& .os-scrollbar-handle': {\n backgroundColor: getBorderColor(palette.type, background.paper, 0.6),\n },\n backgroundColor: 'transparent',\n visibility: 'visible !important',\n },\n\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n zIndex: 10,\n },\n\n container: {\n alignItems: 'center',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n },\n\n editMode: {\n '& $fakeBorder': {\n borderColor: getBackgroundColor(theme.palette.warning.main, 0.5),\n },\n backgroundColor: getBackgroundColor(theme.palette.warning.main, 0.6),\n },\n\n fakeBorder: {\n border: `10px solid ${getBorderColor(palette.type, background.paper, 0.1)}`,\n borderTop: 0,\n bottom: 0,\n left: 0,\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: 5,\n },\n\n iframe: {\n width: '100%',\n },\n\n image: {\n marginLeft: 10,\n marginRight: 12,\n },\n imageContainer: {\n paddingBottom: 10,\n },\n };\n },\n { name: 'ScreenshotView' },\n);\n\nexport interface PreviewItemProps {\n browserType: BrowserTypes | 'storybook';\n url?: string;\n height: number;\n refresh?: boolean;\n onRefreshEnd?: () => void;\n onSave?: (browserType: BrowserTypes) => void;\n onScreenshotDataChange?: (\n browserType: BrowserTypes,\n data?: {\n base64: string;\n browserOptions: BrowserContextOptions;\n },\n ) => void;\n}\n\nconst ScreenshotView: React.FC<PreviewItemProps> = (props) => {\n const {\n browserType,\n url,\n height,\n refresh,\n onRefreshEnd,\n onSave,\n onScreenshotDataChange,\n } = props;\n\n const { isEditing } = useEditScreenshot();\n\n const [openFullScreen, setOpenFullScreen] = useState(false);\n\n const classes = useStyles();\n\n const { getBrowserOptions } = useBrowserOptions();\n\n const browserOptions = getBrowserOptions(browserType as BrowserTypes);\n\n const { loading, screenshot, getSnapshot, error } = useScreenshot(\n browserType,\n browserOptions,\n );\n\n useEffect(() => {\n if (!refresh || loading) return;\n getSnapshot();\n onRefreshEnd?.();\n }, [getSnapshot, loading, onRefreshEnd, refresh]);\n\n const containerHeight = height - 30;\n\n const isValidToSave =\n Boolean(screenshot && screenshot.base64) && browserType !== 'storybook';\n\n const toggleFullScreen = useCallback(() => {\n setOpenFullScreen(!openFullScreen);\n }, [openFullScreen]);\n\n const errorMessage = error || (screenshot as { error?: string } | undefined)?.error;\n\n const handleSaveRequest = useCallback(() => {\n if (browserType === 'storybook' || !screenshot?.base64) return;\n onSave?.(browserType);\n }, [browserType, onSave, screenshot]);\n\n useEffect(() => {\n if (!onScreenshotDataChange || browserType === 'storybook') return;\n\n if (!screenshot?.base64) {\n onScreenshotDataChange(browserType, undefined);\n return;\n }\n\n onScreenshotDataChange(browserType, {\n base64: screenshot.base64,\n browserOptions,\n });\n }, [browserOptions, browserType, onScreenshotDataChange, screenshot]);\n\n return (\n <div\n className={clsx(classes.card, {\n [classes.editMode]: isEditing(browserType as BrowserTypes),\n })}\n >\n <ScreenShotViewToolbar\n browserType={browserType}\n onSave={handleSaveRequest}\n loading={loading}\n onRefresh={getSnapshot}\n showSaveButton={isValidToSave}\n onFullScreen={toggleFullScreen}\n />\n\n <div className={classes.container} style={{ height: containerHeight }}>\n <div className={classes.fakeBorder} />\n {browserType !== 'storybook' ? (\n <ScrollArea vertical={true} horizontal={true}>\n <div className={classes.imageContainer}>\n {screenshot && screenshot.base64 && !errorMessage ? (\n <img\n className={classes.image}\n src={`data:image/gif;base64,${screenshot.base64}`}\n />\n ) : (\n <>{errorMessage && <ErrorPanel message={errorMessage} />}</>\n )}\n </div>\n </ScrollArea>\n ) : (\n <iframe\n src={url}\n className={classes.iframe}\n style={{ height: containerHeight - 10 }}\n frameBorder=\"0\"\n ></iframe>\n )}\n </div>\n\n <Dialog\n open={openFullScreen}\n width=\"100%\"\n height=\"100%\"\n onClose={toggleFullScreen}\n title={`${capitalize(browserType)} screenshot`}\n >\n {screenshot && openFullScreen && screenshot.base64 && (\n <ImagePreview imgSrcString={screenshot.base64} />\n )}\n </Dialog>\n </div>\n );\n};\n\nScreenshotView.displayName = 'ScreenshotView';\n\nexport { ScreenshotView };\n","import { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { forwardRef } from 'react';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n overlay: {\n backgroundColor: 'transparent',\n border: `1px solid ${theme.palette.primary.main}`,\n bottom: 0,\n cursor: 'crosshair !important',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: 100,\n },\n };\n },\n { name: 'SelectorOverlay' },\n);\n\nexport type IframeOverlayProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst IframeOverlay = forwardRef<HTMLDivElement, IframeOverlayProps>((props, ref) => {\n const classes = useStyles();\n\n return <div {...props} className={clsx(classes.overlay)} ref={ref}></div>;\n});\n\nIframeOverlay.displayName = 'IframeOverlay';\n\nexport { IframeOverlay };\n","import { IconButton } from '@storybook/components';\nimport React from 'react';\nimport Selecto from 'react-selecto';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nimport {\n useAddonState,\n useBrowserOptions,\n useKeyPressFn,\n usePreviewIframe,\n useScreenshotOptions,\n} from '../../hooks';\nimport { getIframeScrollPosition, toast } from '../../utils';\nimport AlertToast, { ToastMessageContainer } from '../../utils/toast/AlertToast';\nimport { IframeOverlay } from '../common/IframeOverlay';\n\nexport interface ClipperProps {\n clipping: boolean;\n start: () => void;\n stop: () => void;\n toggleClippingState: () => void;\n}\n\nexport const useClipperState = create<ClipperProps>()(\n devtools(\n (set) => ({\n clipping: false,\n start: () => {\n set(() => ({\n clipping: true,\n }));\n },\n stop: () => {\n set(() => ({\n clipping: false,\n }));\n },\n toggleClippingState: () => {\n set((s) => ({\n clipping: !s.clipping,\n }));\n },\n }),\n { name: 'clipper-store' },\n ),\n);\n\nconst Clipper: React.FC = () => {\n const { clipping, stop } = useClipperState();\n const { addonState, setAddonState } = useAddonState();\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const clippingWarningDismissed = addonState.clippingWarningDismissed ?? false;\n\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const overlayRef = React.useRef<HTMLDivElement>(null);\n\n const iframe = usePreviewIframe();\n\n const handleEnd = React.useCallback(\n (e) => {\n if (!overlayRef.current || !iframe) return;\n const iframeScroll = getIframeScrollPosition(iframe);\n\n const { height, width, top, left } = e.rect as DOMRect;\n\n const iframeDocument = iframe.contentDocument ?? iframe.contentWindow?.document;\n const iframeHeight = iframeDocument\n ? Math.max(\n iframeDocument.body?.scrollHeight || 0,\n iframeDocument.body?.offsetHeight || 0,\n iframeDocument.documentElement.scrollHeight,\n iframeDocument.documentElement.offsetHeight,\n iframeDocument.documentElement.clientHeight,\n )\n : iframe.getBoundingClientRect().height;\n const iframeRect = iframe.getBoundingClientRect();\n const iframeViewportWidth = iframe.contentWindow?.innerWidth ?? iframeRect.width;\n const iframeViewportHeight = iframe.contentWindow?.innerHeight ?? iframeRect.height;\n const iframeClientWidth =\n iframeDocument?.documentElement?.clientWidth ?? iframeRect.width;\n const iframeClientHeight =\n iframeDocument?.documentElement?.clientHeight ?? iframeRect.height;\n const previewWidth = Math.min(iframeRect.width, iframeClientWidth);\n const previewHeight = Math.min(iframeRect.height, iframeClientHeight);\n const previewRight = iframeRect.left + previewWidth;\n const previewBottom = iframeRect.top + previewHeight;\n\n const rawScaleX = previewWidth ? iframeViewportWidth / previewWidth : 1;\n const rawScaleY = previewHeight ? iframeViewportHeight / previewHeight : 1;\n const scaleX = Number.isFinite(rawScaleX) && rawScaleX > 0 ? rawScaleX : 1;\n const scaleY = Number.isFinite(rawScaleY) && rawScaleY > 0 ? rawScaleY : 1;\n\n const selectionRight = left + width;\n const selectionBottom = top + height;\n const boundedLeft = Math.max(left, iframeRect.left);\n const boundedTop = Math.max(top, iframeRect.top);\n const boundedRight = Math.min(selectionRight, previewRight);\n const boundedBottom = Math.min(selectionBottom, previewBottom);\n const boundedWidth = Math.max(0, boundedRight - boundedLeft);\n const boundedHeight = Math.max(0, boundedBottom - boundedTop);\n\n if (boundedWidth === 0 || boundedHeight === 0) {\n stop();\n return;\n }\n\n setBrowserOptions('all', {\n ...(browserOptions.all || {}),\n viewport: {\n height: Math.round(iframeHeight),\n width: Math.round(iframeViewportWidth),\n },\n });\n\n const clipperPos = {\n left: iframeScroll.scrollLeft + (boundedLeft - iframeRect.left) * scaleX,\n top: iframeScroll.scrollTop + (boundedTop - iframeRect.top) * scaleY,\n };\n\n setScreenshotOptions({\n ...screenshotOptions,\n clip: {\n height: Math.ceil(boundedHeight * scaleY),\n width: Math.ceil(boundedWidth * scaleX),\n x: Math.floor(clipperPos.left),\n y: Math.floor(clipperPos.top),\n },\n });\n\n stop();\n if (!clippingWarningDismissed) {\n toast.custom(({ dismiss }) => (\n <AlertToast variant=\"info\" onClose={dismiss}>\n <ToastMessageContainer style={{ fontSize: 14 }}>\n Clipping may differ from the Storybook preview when browser zoom is not\n 100%, OS display scaling (DPI) is different, fonts or line height differ,\n text wraps differently, the preview is resized or transformed, or scrollbar\n behavior differs from the Playwright viewport.\n </ToastMessageContainer>\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-start',\n marginTop: 8,\n }}\n >\n <IconButton\n type=\"button\"\n onClick={() => {\n setAddonState({\n ...addonState,\n clippingWarningDismissed: true,\n });\n dismiss();\n }}\n >\n Do Not Show Again\n </IconButton>\n </div>\n </AlertToast>\n ));\n }\n },\n [\n addonState,\n browserOptions.all,\n iframe,\n clippingWarningDismissed,\n screenshotOptions,\n setBrowserOptions,\n setScreenshotOptions,\n setAddonState,\n stop,\n ],\n );\n\n useKeyPressFn(undefined, (e) => {\n if (e.code === 'Escape') stop();\n });\n\n if (!clipping) return null;\n\n return (\n <IframeOverlay ref={overlayRef}>\n <Selecto\n dragContainer={overlayRef.current}\n hitRate={100}\n selectByClick={true}\n selectFromInside={true}\n ratio={0}\n onSelectEnd={handleEnd}\n ></Selecto>\n </IframeOverlay>\n );\n};\n\nClipper.displayName = 'Clipper';\n\nexport { Clipper };\n","import { Tooltip } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useClipperState } from './Clipper';\n\nconst ClipperButton: React.FC = () => {\n const { clipping, toggleClippingState } = useClipperState();\n\n const handleClick = React.useCallback(() => {\n toggleClippingState();\n }, [toggleClippingState]);\n\n return (\n <IconButton active={clipping} onClick={handleClick}>\n <Tooltip placement=\"top\" title={clipping ? 'Stop Clipping' : 'Start Clipping'}>\n <svg\n className=\"MuiSvgIcon-root\"\n focusable=\"false\"\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n style={{\n height: 20,\n transform: 'rotate(180deg)',\n width: 20,\n }}\n >\n <path d=\"M17 5h-2V3h2v2zm-2 16h2v-2.59L19.59 21 21 19.59 18.41 17H21v-2h-6v6zm4-12h2V7h-2v2zm0 4h2v-2h-2v2zm-8 8h2v-2h-2v2zM7 5h2V3H7v2zM3 17h2v-2H3v2zm2 4v-2H3c0 1.1.9 2 2 2zM19 3v2h2c0-1.1-.9-2-2-2zm-8 2h2V3h-2v2zM3 9h2V7H3v2zm4 12h2v-2H7v2zm-4-8h2v-2H3v2zm0-8h2V3c-1.1 0-2 .9-2 2z\"></path>\n </svg>\n </Tooltip>\n </IconButton>\n );\n};\n\nClipperButton.displayName = 'ClipperButton';\n\nexport { ClipperButton };\n","import * as React from 'react';\n\nconst Browser: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"2 -1 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M12 9.984l3.984 4.031h-3v6h-1.969v-6h-3zM18.984 3.984q0.844 0 1.43 0.586t0.586 1.43v12q0 0.797-0.609 1.406t-1.406 0.609h-3.984v-2.016h3.984v-9.984h-13.969v9.984h3.984v2.016h-3.984q-0.844 0-1.43-0.586t-0.586-1.43v-12q0-0.844 0.586-1.43t1.43-0.586h13.969z\"></path>\n\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n);\n\nexport { Browser };\n","import * as React from 'react';\n\nconst Chrome: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"-4 -2 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.071 13.954l-4.579-7.931c2.932-3.671 7.445-6.023 12.508-6.023 5.857 0 10.978 3.148 13.767 7.844h-13.055c-0.235-0.020-0.472-0.031-0.711-0.031-3.809 0-7.018 2.614-7.929 6.142zM21.728 10.156h9.171c0.711 1.81 1.101 3.781 1.101 5.844 0 8.776-7.066 15.9-15.818 15.998l6.544-11.334c0.921-1.324 1.462-2.932 1.462-4.664 0-2.287-0.943-4.357-2.459-5.844zM10.188 16c0-3.205 2.607-5.813 5.813-5.813s5.813 2.607 5.813 5.813c0 3.205-2.608 5.813-5.813 5.813s-5.813-2.608-5.813-5.813zM18.193 23.889l-4.581 7.934c-7.704-1.153-13.613-7.797-13.613-15.822 0-2.851 0.746-5.526 2.053-7.845l6.532 11.314c1.308 2.785 4.14 4.718 7.415 4.718 0.759 0 1.495-0.104 2.193-0.299z\"></path>\n\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n);\n\nexport { Chrome };\n","import * as React from 'react';\n\nconst Firefox: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"-4 -2 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M31.954 10.442l-0.371 2.377c0 0-0.53-4.402-1.179-6.047-0.995-2.521-1.438-2.501-1.441-2.498 0.667 1.694 0.546 2.604 0.546 2.604s-1.181-3.219-4.303-4.243c-3.459-1.134-5.33-0.824-5.547-0.765-0.033-0-0.064-0-0.095-0 0.026 0.002 0.050 0.005 0.076 0.007-0.001 0.001-0.003 0.001-0.003 0.002 0.014 0.017 3.822 0.666 4.497 1.594 0 0-1.617 0-3.227 0.464-0.073 0.021 5.923 0.749 7.148 6.74 0 0-0.657-1.371-1.47-1.604 0.535 1.626 0.397 4.712-0.112 6.245-0.066 0.197-0.133-0.853-1.135-1.305 0.321 2.301-0.019 5.952-1.616 6.957-0.124 0.078 1.001-3.603 0.226-2.18-4.46 6.838-9.731 3.155-12.101 1.535 1.215 0.264 3.52-0.041 4.541-0.8 0.001-0.001 0.002-0.002 0.004-0.003 1.108-0.758 1.765-1.311 2.354-1.18s0.982-0.46 0.524-0.985c-0.459-0.526-1.572-1.249-3.079-0.855-1.063 0.278-2.379 1.454-4.389 0.264-1.543-0.914-1.688-1.673-1.702-2.199 0.038-0.186 0.086-0.361 0.143-0.52 0.178-0.496 0.716-0.646 1.015-0.764 0.508 0.087 0.946 0.246 1.405 0.481 0.006-0.153 0.008-0.356-0.001-0.586 0.044-0.088 0.017-0.352-0.054-0.674-0.041-0.322-0.107-0.655-0.211-0.959 0-0 0.001-0 0.001-0 0.002-0.001 0.003-0.001 0.005-0.002s0.005-0.004 0.007-0.006c0-0.001 0.001-0.001 0.001-0.002 0.003-0.004 0.005-0.008 0.006-0.015 0.032-0.144 0.376-0.423 0.804-0.722 0.383-0.268 0.834-0.553 1.19-0.774 0.314-0.195 0.554-0.34 0.605-0.378 0.019-0.015 0.042-0.032 0.068-0.051 0.005-0.004 0.009-0.007 0.014-0.011 0.003-0.002 0.006-0.005 0.009-0.007 0.169-0.135 0.421-0.389 0.474-0.924 0-0.001 0-0.002 0-0.004 0.002-0.016 0.003-0.032 0.004-0.048 0.001-0.011 0.002-0.023 0.002-0.034 0-0.009 0.001-0.018 0.001-0.027 0.001-0.021 0.002-0.043 0.002-0.065 0-0.001 0-0.002 0-0.004 0.001-0.052-0-0.106-0.003-0.163-0.002-0.032-0.004-0.060-0.009-0.086-0-0.001-0.001-0.003-0.001-0.004-0.001-0.003-0.001-0.005-0.002-0.008-0.001-0.005-0.002-0.009-0.004-0.013-0-0.001-0-0.001-0.001-0.001-0.002-0.005-0.004-0.010-0.005-0.014-0-0-0-0-0-0.001-0.055-0.128-0.26-0.177-1.108-0.191-0.001-0-0.002-0-0.002-0v0c-0.346-0.006-0.798-0.006-1.391-0.004-1.039 0.004-1.613-1.016-1.797-1.41 0.251-1.389 0.977-2.379 2.17-3.051 0.023-0.013 0.018-0.023-0.009-0.031 0.233-0.141-2.82-0.004-4.225 1.782-1.247-0.31-2.333-0.289-3.269-0.069-0.18-0.005-0.404-0.027-0.67-0.083-0.623-0.564-1.514-1.606-1.562-2.85 0 0-0.003 0.002-0.008 0.006-0.001-0.012-0.002-0.024-0.002-0.036 0 0-1.897 1.458-1.613 5.434-0.001 0.064-0.002 0.125-0.004 0.184-0.514 0.696-0.768 1.282-0.787 1.411-0.455 0.926-0.917 2.32-1.292 4.437 0 0 0.263-0.833 0.79-1.777-0.388 1.188-0.693 3.036-0.514 5.808 0 0 0.047-0.615 0.215-1.5 0.131 1.719 0.704 3.841 2.152 6.337 2.78 4.791 7.052 7.211 11.775 7.582 0.839 0.069 1.689 0.071 2.544 0.006 0.079-0.006 0.157-0.011 0.236-0.018 0.968-0.068 1.942-0.214 2.914-0.449 13.287-3.212 11.842-19.256 11.842-19.256z\"></path>\n </svg>\n);\n\nexport { Firefox };\n","import * as React from 'react';\n\nconst Webkit: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"-4 -2 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M16 0c-8.838 0-16 7.162-16 16s7.162 16 16 16 16-7.163 16-16-7.163-16-16-16zM29.95 14.775l-0.031-0.331c0.006 0.113 0.019 0.219 0.031 0.331zM27.762 8.4l-0.225-0.338c0.075 0.113 0.15 0.225 0.225 0.338zM26.894 7.206l-0.137-0.169c0.050 0.056 0.094 0.112 0.137 0.169zM24.956 5.237l-0.169-0.138c0.063 0.050 0.113 0.094 0.169 0.138zM23.938 4.463l-0.337-0.225c0.113 0.075 0.225 0.15 0.337 0.225zM17.556 2.087l-0.337-0.031c0.113 0.006 0.225 0.019 0.337 0.031zM14.775 2.050l-0.338 0.031c0.113-0.006 0.225-0.019 0.338-0.031zM8.4 4.237l-0.338 0.225c0.113-0.075 0.225-0.15 0.338-0.225zM7.206 5.106l-0.162 0.131c0.056-0.044 0.106-0.088 0.162-0.131zM5.237 7.044l-0.138 0.169c0.050-0.056 0.094-0.112 0.138-0.169zM4.463 8.063l-0.225 0.338c0.075-0.113 0.15-0.225 0.225-0.338zM2.087 14.444l-0.031 0.338c0.006-0.113 0.019-0.225 0.031-0.338zM2.050 17.225l0.031 0.337c-0.006-0.113-0.019-0.225-0.031-0.337zM4.237 23.594l0.225 0.337c-0.075-0.106-0.15-0.219-0.225-0.337zM4.5 23.988l2.494-1.669-0.275-0.419-2.494 1.669c-1.131-1.756-1.875-3.775-2.125-5.95l1.494-0.15-0.050-0.5-1.494 0.15c-0.025-0.288-0.038-0.581-0.044-0.875h3v-0.5h-3c0.006-0.294 0.019-0.581 0.044-0.875l1.494 0.144 0.050-0.5-1.494-0.144c0.25-2.175 1-4.194 2.131-5.95l2.494 1.669 0.275-0.419-2.5-1.656c0.169-0.237 0.338-0.475 0.519-0.7l1.156 0.95 0.319-0.388-1.156-0.95c0.188-0.225 0.388-0.438 0.588-0.65l2.119 2.119 0.356-0.356-2.119-2.119c0.213-0.2 0.425-0.4 0.644-0.588l0.95 1.162 0.387-0.319-0.95-1.156c0.231-0.181 0.463-0.356 0.7-0.525l1.669 2.494 0.419-0.275-1.669-2.494c1.756-1.131 3.775-1.875 5.95-2.125l0.15 1.494 0.5-0.050-0.15-1.494c0.287-0.025 0.581-0.038 0.875-0.044v3h0.5v-3c0.294 0.006 0.581 0.019 0.875 0.044l-0.144 1.494 0.5 0.050 0.144-1.494c2.175 0.25 4.194 1 5.95 2.131l-1.669 2.494 0.419 0.275 1.669-2.494c0.238 0.169 0.475 0.338 0.7 0.519l-0.95 1.156 0.387 0.319 0.95-1.156c0.225 0.188 0.438 0.388 0.65 0.588l-0.8 0.781-10.938 7.294-7.294 10.937-0.781 0.781c-0.2-0.212-0.4-0.425-0.588-0.644l1.156-0.95-0.319-0.387-1.156 0.95c-0.181-0.225-0.35-0.462-0.519-0.7zM5.237 24.956c-0.044-0.056-0.088-0.106-0.131-0.163l0.131 0.163zM7.044 26.762l0.162 0.131c-0.056-0.044-0.106-0.087-0.162-0.131zM8.063 27.531l0.338 0.225c-0.113-0.069-0.225-0.144-0.338-0.225zM14.444 29.913l0.338 0.031c-0.113-0.006-0.225-0.019-0.338-0.031zM17.225 29.95l0.331-0.031c-0.113 0.006-0.219 0.019-0.331 0.031zM23.6 27.762l0.337-0.225c-0.113 0.075-0.225 0.15-0.337 0.225zM24.794 26.894l0.169-0.137c-0.056 0.050-0.113 0.094-0.169 0.137zM25.887 25.913l0.025-0.025c-0.006 0.006-0.019 0.019-0.025 0.025zM26.762 24.956l0.137-0.169c-0.050 0.056-0.094 0.113-0.137 0.169zM26.981 24.688l-1.156-0.95-0.319 0.387 1.156 0.95c-0.188 0.225-0.387 0.438-0.587 0.65l-2.119-2.119-0.356 0.356 2.119 2.119c-0.212 0.2-0.425 0.4-0.644 0.587l-0.95-1.163-0.387 0.319 0.95 1.156c-0.231 0.181-0.462 0.356-0.7 0.525l-1.669-2.494-0.419 0.275 1.669 2.494c-1.756 1.131-3.775 1.875-5.95 2.125l-0.15-1.494-0.5 0.050 0.15 1.494c-0.288 0.025-0.581 0.038-0.875 0.044v-3h-0.5v3c-0.294-0.006-0.581-0.019-0.875-0.044l0.144-1.494-0.5-0.050-0.144 1.494c-2.175-0.25-4.194-1-5.95-2.131l1.669-2.494-0.419-0.275-1.656 2.494c-0.237-0.169-0.475-0.337-0.7-0.519l0.95-1.156-0.388-0.319-0.95 1.156c-0.225-0.188-0.438-0.387-0.65-0.587l0.787-0.781 10.937-7.294 7.294-10.938 0.781-0.781c0.2 0.213 0.4 0.425 0.587 0.644l-1.156 0.95 0.319 0.387 1.156-0.95c0.181 0.231 0.356 0.463 0.525 0.7l-2.494 1.669 0.275 0.419 2.494-1.669c1.131 1.756 1.875 3.775 2.125 5.95l-1.494 0.15 0.050 0.5 1.494-0.15c0.025 0.287 0.038 0.581 0.044 0.875h-3v0.5h3c-0.006 0.294-0.019 0.581-0.044 0.875l-1.494-0.144-0.050 0.5 1.494 0.144c-0.25 2.175-1 4.194-2.131 5.95l-2.494-1.669-0.275 0.419 2.494 1.669c-0.163 0.225-0.337 0.456-0.519 0.688zM29.95 17.219c-0.012 0.113-0.019 0.225-0.031 0.337l0.031-0.337zM27.762 23.6c-0.075 0.113-0.15 0.225-0.225 0.337l0.225-0.337z\"></path>\n <path d=\"M13.517 2.221l0.585 2.942-0.49 0.098-0.585-2.942 0.49-0.098z\"></path>\n <path d=\"M18.489 29.78l-0.585-2.942 0.49-0.098 0.585 2.942-0.49 0.098z\"></path>\n <path d=\"M12.176 2.528l0.436 1.435-0.478 0.145-0.436-1.435 0.478-0.145z\"></path>\n <path d=\"M19.826 29.465l-0.436-1.435 0.478-0.145 0.436 1.435-0.478 0.145z\"></path>\n <path d=\"M10.875 2.972l1.148 2.772-0.462 0.191-1.148-2.772 0.462-0.191z\"></path>\n <path d=\"M21.129 29.030l-1.148-2.772 0.462-0.191 1.148 2.772-0.462 0.191z\"></path>\n <path d=\"M9.176 3.771l0.441-0.236 0.707 1.323-0.441 0.236-0.707-1.323z\"></path>\n <path d=\"M22.816 28.228l-0.441 0.236-0.707-1.323 0.441-0.236 0.707 1.323z\"></path>\n <path d=\"M3.769 9.182l1.323 0.707-0.236 0.441-1.323-0.707 0.236-0.441z\"></path>\n <path d=\"M28.226 22.819l-1.323-0.707 0.236-0.441 1.323 0.707-0.236 0.441z\"></path>\n <path d=\"M5.744 12.019l-2.772-1.148 0.191-0.462 2.772 1.148-0.191 0.462z\"></path>\n <path d=\"M26.26 19.978l2.772 1.148-0.191 0.462-2.772-1.148 0.191-0.462z\"></path>\n <path d=\"M2.673 11.7l1.436 0.435-0.145 0.479-1.436-0.435 0.145-0.479z\"></path>\n <path d=\"M29.322 20.302l-1.436-0.435 0.145-0.479 1.436 0.435-0.145 0.479z\"></path>\n <path d=\"M2.315 13.024l2.942 0.585-0.098 0.49-2.942-0.585 0.098-0.49z\"></path>\n <path d=\"M29.679 18.976l-2.942-0.585 0.098-0.49 2.942 0.585-0.098 0.49z\"></path>\n <path d=\"M2.218 18.486l2.942-0.585 0.098 0.49-2.942 0.585-0.098-0.49z\"></path>\n <path d=\"M29.776 13.513l-2.942 0.585-0.098-0.49 2.942-0.585 0.098 0.49z\"></path>\n <path d=\"M2.53 19.829l1.435-0.436 0.145 0.478-1.435 0.436-0.145-0.478z\"></path>\n <path d=\"M29.468 12.178l-1.435 0.436-0.145-0.478 1.435-0.436 0.145 0.478z\"></path>\n <path d=\"M3.161 21.591l-0.191-0.462 2.772-1.148 0.191 0.462-2.772 1.148z\"></path>\n <path d=\"M28.837 10.413l0.191 0.462-2.772 1.148-0.191-0.462 2.772-1.148z\"></path>\n <path d=\"M3.776 22.821l-0.236-0.441 1.323-0.707 0.236 0.441-1.323 0.707z\"></path>\n <path d=\"M28.233 9.181l0.236 0.441-1.323 0.707-0.236-0.441 1.323-0.707z\"></path>\n <path d=\"M9.621 28.464l-0.441-0.236 0.707-1.323 0.441 0.236-0.707 1.323z\"></path>\n <path d=\"M22.377 3.534l0.441 0.236-0.707 1.323-0.441-0.236 0.707-1.323z\"></path>\n <path d=\"M10.415 28.837l1.148-2.772 0.462 0.191-1.148 2.772-0.462-0.191z\"></path>\n <path d=\"M21.59 3.16l-1.148 2.772-0.462-0.191 1.148-2.772 0.462 0.191z\"></path>\n <path d=\"M12.176 29.47l-0.478-0.145 0.435-1.435 0.478 0.145-0.435 1.435z\"></path>\n <path d=\"M19.823 2.528l0.479 0.145-0.435 1.436-0.479-0.145 0.435-1.436z\"></path>\n <path d=\"M13.515 29.776l-0.49-0.098 0.585-2.942 0.49 0.098-0.585 2.942z\"></path>\n <path d=\"M18.485 2.218l0.49 0.098-0.585 2.942-0.49-0.098 0.585-2.942z\"></path>\n\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n);\n\nexport { Webkit };\n","import type { SvgIconProps } from '@material-ui/core';\nimport type { BrowserTypes } from '../../typings';\nimport React, { memo } from 'react';\nimport { Browser, Chrome, Firefox, Webkit } from '../../icons';\n\nexport interface BrowserIconProps extends SvgIconProps {\n browserType?: BrowserTypes;\n}\n\nconst BrowserIcon: React.FC<BrowserIconProps> = memo((props) => {\n const { browserType, ...rest } = props;\n\n switch (browserType) {\n case 'chromium':\n return <Chrome {...rest} />;\n case 'firefox':\n return <Firefox {...rest} />;\n case 'webkit':\n return <Webkit {...rest} />;\n default:\n return <Browser {...rest} />;\n }\n});\n\nBrowserIcon.displayName = 'BrowserIcon';\n\nexport { BrowserIcon };\n","import type { BrowserTypes } from '../../typings';\nimport { capitalize } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport React, { useCallback } from 'react';\nimport { BrowserIcon } from '../common/BrowserIcon';\n\nexport interface BrowserIconProps {\n browserType: BrowserTypes;\n onClick: (browserType: BrowserTypes) => void;\n active: boolean;\n}\n\nconst BrowserIconButton: React.FC<BrowserIconProps> = (props) => {\n const { browserType, onClick, active } = props;\n\n const handleClick = useCallback(() => {\n onClick(browserType);\n }, [browserType, onClick]);\n\n return (\n <IconButton onClick={handleClick} active={active} title={capitalize(browserType)}>\n <BrowserIcon browserType={browserType} />\n </IconButton>\n );\n};\n\nBrowserIconButton.displayName = 'BrowserIconButton';\n\nexport { BrowserIconButton };\n","import { Tooltip } from '@material-ui/core';\nimport PhotoSizeSelectLargeIconModule from '@material-ui/icons/PhotoSizeSelectLarge';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useBrowserOptions, useScreenshotOptions } from '../../hooks';\nimport { getPreviewIframe } from '../../utils';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst PhotoSizeSelectLargeIcon = resolveMuiIcon(PhotoSizeSelectLargeIconModule);\n\nfunction getIframeInnerSize(iframe: HTMLIFrameElement) {\n const iframeDocument = iframe.contentDocument;\n if (!iframeDocument || !iframeDocument.body || !iframeDocument.documentElement) {\n return null;\n }\n\n const { body, documentElement } = iframeDocument;\n\n const width = Math.max(\n body.scrollWidth,\n body.offsetWidth,\n body.clientWidth,\n documentElement.scrollWidth,\n documentElement.offsetWidth,\n documentElement.clientWidth,\n );\n\n const height = Math.max(\n body.scrollHeight,\n body.offsetHeight,\n body.clientHeight,\n documentElement.scrollHeight,\n documentElement.offsetHeight,\n documentElement.clientHeight,\n );\n\n if (width <= 0 || height <= 0) {\n return null;\n }\n\n return { width, height };\n}\n\nconst ResizeBrowserToIframeContent: React.FC = () => {\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const handleClick = React.useCallback(() => {\n const iframe = getPreviewIframe();\n if (!iframe) {\n return;\n }\n\n const innerSize = getIframeInnerSize(iframe);\n if (!innerSize) {\n return;\n }\n\n setBrowserOptions('all', {\n ...browserOptions.all,\n viewport: {\n height: Math.round(innerSize.height),\n width: Math.round(innerSize.width),\n },\n });\n\n if (screenshotOptions && screenshotOptions.clip !== undefined) {\n setScreenshotOptions({\n ...screenshotOptions,\n clip: undefined,\n });\n }\n }, [browserOptions, screenshotOptions, setBrowserOptions, setScreenshotOptions]);\n\n return (\n <IconButton\n onClick={handleClick}\n aria-label=\"Match browser viewport to iframe content\"\n >\n <Tooltip placement=\"top\" title=\"Match browser viewport to iframe content\">\n <PhotoSizeSelectLargeIcon />\n </Tooltip>\n </IconButton>\n );\n};\n\nResizeBrowserToIframeContent.displayName = 'ResizeBrowserToIframeContent';\n\nexport { ResizeBrowserToIframeContent };\n","import { Tooltip } from '@material-ui/core';\nimport AspectRatioIconModule from '@material-ui/icons/AspectRatio';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useBrowserOptions, useScreenshotOptions } from '../../hooks';\nimport { getPreviewIframe } from '../../utils';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst AspectRatioIcon = resolveMuiIcon(AspectRatioIconModule);\n\nconst ResizeBrowserToPreview: React.FC = () => {\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const handleClick = React.useCallback(() => {\n const iframe = getPreviewIframe();\n if (!iframe) {\n return;\n }\n\n const iframeRect = iframe.getBoundingClientRect();\n\n setBrowserOptions('all', {\n ...browserOptions.all,\n viewport: {\n height: Math.round(iframeRect.height),\n width: Math.round(iframeRect.width),\n },\n });\n\n if (screenshotOptions && screenshotOptions.clip !== undefined) {\n setScreenshotOptions({\n ...screenshotOptions,\n clip: undefined,\n });\n }\n }, [browserOptions, screenshotOptions, setBrowserOptions, setScreenshotOptions]);\n\n return (\n <IconButton onClick={handleClick} aria-label=\"Match browser viewport to preview\">\n <Tooltip placement=\"top\" title=\"Match browser viewport to preview\">\n <AspectRatioIcon />\n </Tooltip>\n </IconButton>\n );\n};\n\nResizeBrowserToPreview.displayName = 'ResizeBrowserToPreview';\n\nexport { ResizeBrowserToPreview };\n","import { Tooltip } from '@material-ui/core';\nimport RotateLeftIcon from '@material-ui/icons/RotateLeft';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useBrowserOptions, useScreenshotOptions } from '../../../../hooks';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\n\nconst RotateLeftIconComponent = resolveMuiIcon(RotateLeftIcon);\n\nfunction ResetSettings() {\n const { setBrowserOptions } = useBrowserOptions();\n const { setScreenshotOptions } = useScreenshotOptions();\n\n const handleClick = React.useCallback(() => {\n setBrowserOptions('all', {});\n setScreenshotOptions({});\n }, [setBrowserOptions, setScreenshotOptions]);\n\n return (\n <IconButton onClick={handleClick}>\n <Tooltip placement=\"top\" title=\"Reset Settings\">\n <RotateLeftIconComponent style={{ marginTop: 4, width: '20px' }} />\n </Tooltip>\n </IconButton>\n );\n}\n\nResetSettings.displayName = 'ResetSettings';\n\nexport { ResetSettings };\n","import CameraIcon from '@material-ui/icons/Camera';\nimport React, { useCallback, useMemo } from 'react';\nimport { MemoizedSchemaFormLoader } from '../../../../components/common';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { useScreenshotOptions } from '../../hooks/use-screenshot-options';\nimport { OptionPopover } from './OptionPopover';\n\nconst CameraIconComponent = resolveMuiIcon(CameraIcon);\n\nconst ScreenshotOptions: React.FC = () => {\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const handleSave = useCallback(\n (d) => {\n setScreenshotOptions(d);\n },\n [setScreenshotOptions],\n );\n\n const isActive = useMemo(\n () => screenshotOptions && Object.keys(screenshotOptions).length > 0,\n [screenshotOptions],\n );\n\n return (\n <OptionPopover\n title=\"Screenshot Options\"\n Icon={CameraIconComponent}\n active={isActive}\n >\n <MemoizedSchemaFormLoader\n onSave={handleSave}\n schemaName=\"screenshot-options\"\n defaultData={screenshotOptions}\n excludeProps={['path']}\n />\n </OptionPopover>\n );\n};\n\nScreenshotOptions.displayName = 'ScreenshotOptions';\n\nexport { ScreenshotOptions };\n","import type { BrowserTypes } from '../../../../typings';\nimport { Tooltip } from '@material-ui/core';\nimport CloseOutlined from '@material-ui/icons/CloseOutlined';\nimport NearMeIcon from '@material-ui/icons/NearMe';\nimport RefreshSharp from '@material-ui/icons/RefreshSharp';\nimport SaveIcon from '@material-ui/icons/SaveAltOutlined';\nimport { IconButton } from '@storybook/components';\nimport React, { useCallback } from 'react';\nimport { ClipperButton } from '../../../../components/Clipper/ClipperButton';\nimport { Toolbar as CommonToolbar } from '../../../../components/common';\nimport { BrowserIconButton } from '../../../../components/common/BrowserIconButton';\nimport { ResizeBrowserToIframeContent } from '../../../../components/ResizeBrowserToIframeContent/ResizeBrowserToIframeContent';\nimport { ResizeBrowserToPreview } from '../../../../components/ResizeBrowserToPreview/ResizeBrowserToPreview';\nimport { useBrowserOptions } from '../../../../hooks/use-browser-options';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { BrowserOptions } from './BrowserOptions';\nimport { ResetSettings } from './ResetSettings';\nimport { ScreenshotOptions } from './ScreenshotOptions';\n\nconst CloseOutlinedIcon = resolveMuiIcon(CloseOutlined);\nconst NearMeOutlinedIcon = resolveMuiIcon(NearMeIcon);\nconst RefreshSharpIcon = resolveMuiIcon(RefreshSharp);\nconst SaveAltOutlinedIcon = resolveMuiIcon(SaveIcon);\n\nexport interface ToolbarProps {\n browserTypes: BrowserTypes[];\n activeBrowsers: BrowserTypes[];\n toggleBrowser: (type: BrowserTypes) => void;\n onCLose: () => void;\n onRefresh: () => void;\n onSave?: () => void;\n isVertical?: boolean;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = (props) => {\n const {\n browserTypes,\n toggleBrowser,\n activeBrowsers,\n onCLose,\n onRefresh,\n isVertical,\n onSave,\n } = props;\n\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n\n const enableDisableCursor = useCallback(() => {\n const enable = browserOptions.all && browserOptions.all.cursor;\n setBrowserOptions('all', {\n ...browserOptions.all,\n cursor: enable ? undefined : true,\n });\n }, [browserOptions, setBrowserOptions]);\n\n return (\n <CommonToolbar border={isVertical ? undefined : ['top']}>\n <div className=\"left\">\n {browserTypes.map((browserType) => (\n <BrowserIconButton\n key={browserType}\n browserType={browserType}\n onClick={toggleBrowser}\n active={activeBrowsers.find((x) => x === browserType) !== undefined}\n />\n ))}\n </div>\n <div className=\"right\">\n <IconButton\n className=\"cursor-button\"\n onClick={enableDisableCursor}\n active={browserOptions.all && browserOptions.all.cursor}\n >\n <Tooltip\n placement=\"top\"\n title={\n browserOptions.all && browserOptions.all.cursor\n ? 'Hide cursor'\n : 'Show cursor'\n }\n >\n <NearMeOutlinedIcon style={{ transform: 'rotate(-80deg)' }} />\n </Tooltip>\n </IconButton>\n\n <ClipperButton />\n\n <ResizeBrowserToPreview />\n <ResizeBrowserToIframeContent />\n\n <IconButton onClick={onSave}>\n <Tooltip placement=\"top\" title=\"Save screenshots\">\n <SaveAltOutlinedIcon />\n </Tooltip>\n </IconButton>\n\n <IconButton onClick={onRefresh}>\n <Tooltip placement=\"top\" title=\"Refresh\">\n <RefreshSharpIcon />\n </Tooltip>\n </IconButton>\n\n <ResetSettings />\n\n <ScreenshotOptions />\n <BrowserOptions browserType=\"all\" />\n\n <IconButton onClick={onCLose}>\n <Tooltip placement=\"top\" title=\"Close panel\">\n <CloseOutlinedIcon />\n </Tooltip>\n </IconButton>\n </div>\n </CommonToolbar>\n );\n};\n\nToolbar.displayName = 'Toolbar';\n\nexport { Toolbar };\n","import { useMemo } from 'react';\nimport { useMeasure } from 'react-use';\n\nconst GRID_PERCENT = 100;\nconst TWO_COLUMNS = 2;\nconst LIST_GAP_PX = 2;\n\nexport const useScreenshotListLayout = (\n column: number | undefined,\n activeBrowsersCount: number,\n) => {\n const [ref, rect] = useMeasure<HTMLDivElement>();\n\n const width = useMemo(() => {\n const columns = column || activeBrowsersCount || 1;\n return `calc(${GRID_PERCENT / columns}% - ${LIST_GAP_PX}px)`;\n }, [activeBrowsersCount, column]);\n\n const itemHeight = useMemo(() => {\n if (column === 1) {\n return rect.height / (activeBrowsersCount || 1);\n }\n if (column === TWO_COLUMNS) {\n return rect.height / TWO_COLUMNS;\n }\n return rect.height;\n }, [activeBrowsersCount, column, rect.height]);\n\n return {\n itemHeight,\n ref,\n width,\n };\n};\n","import type { BrowserContextOptions, BrowserTypes } from '../../../../../typings';\nimport { useCallback, useRef, useState } from 'react';\nimport { inputModal } from '../../../../../components/common';\nimport { useGenerateScreenshotTitle } from '../../../hooks/use-generate-screenshot-title';\nimport { useSaveScreenshot } from '../../../hooks/use-save-screenshot';\n\ninterface ScreenshotSaveData {\n base64: string;\n browserOptions: BrowserContextOptions;\n}\n\nexport const useScreenshotSaveFlow = (activeBrowsers: BrowserTypes[]) => {\n const [isQueueSaving, setIsQueueSaving] = useState(false);\n\n const screenshotDataRef = useRef<Record<string, ScreenshotSaveData>>({});\n\n const { generateTitle, hasGenerator } = useGenerateScreenshotTitle(null);\n const { getUpdatingScreenshotTitle, inProgress, saveScreenShot } = useSaveScreenshot();\n\n const setScreenshotData = useCallback(\n (browserType: BrowserTypes, data?: ScreenshotSaveData) => {\n if (!data) {\n delete screenshotDataRef.current[browserType];\n return;\n }\n\n screenshotDataRef.current[browserType] = data;\n },\n [],\n );\n\n const saveForBrowsers = useCallback(\n async (title: string, browsersToSave: BrowserTypes[]) => {\n setIsQueueSaving(true);\n try {\n for (const browserType of browsersToSave) {\n const screenshotData = screenshotDataRef.current[browserType];\n if (!screenshotData) continue;\n\n await saveScreenShot(\n browserType,\n title,\n screenshotData.base64,\n screenshotData.browserOptions,\n );\n }\n } finally {\n setIsQueueSaving(false);\n }\n },\n [saveScreenShot],\n );\n\n const openSaveDialog = useCallback(\n (browsersToSave: BrowserTypes[]) => {\n if (!browsersToSave.length) return;\n\n const dialogTitle =\n browsersToSave.length > 1 ? 'Screenshots Title' : 'Screenshot Title';\n\n void inputModal.show({\n onGenerateContent: hasGenerator ? generateTitle : undefined,\n onSave: (title) => {\n void saveForBrowsers(title, browsersToSave);\n },\n required: true,\n title: dialogTitle,\n value: getUpdatingScreenshotTitle(),\n });\n },\n [generateTitle, getUpdatingScreenshotTitle, hasGenerator, saveForBrowsers],\n );\n\n const requestSaveAll = useCallback(() => {\n openSaveDialog(activeBrowsers);\n }, [activeBrowsers, openSaveDialog]);\n\n const requestSaveOne = useCallback(\n (browserType: BrowserTypes) => {\n openSaveDialog([browserType]);\n },\n [openSaveDialog],\n );\n\n return {\n isSaving: isQueueSaving || inProgress,\n requestSaveAll,\n requestSaveOne,\n setScreenshotData,\n };\n};\n","import type { ScreenShotViewPanel } from '../../../../typings';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport React, { useCallback } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { useBrowserStateManager } from '../../../../hooks/use-browser-state-manager';\nimport { useStoryUrl } from '../../../../hooks/use-story-url';\nimport { ScreenshotView } from './ScreenshotView';\nimport { Toolbar } from './Toolbar';\nimport { useScreenshotListLayout } from './hooks/use-screenshot-list-layout';\nimport { useScreenshotSaveFlow } from './hooks/use-screenshot-save-flow';\n\nconst useStyles = makeStyles((theme) => ({\n error: {\n color: 'red',\n marginTop: '10%',\n padding: 30,\n textAlign: 'center',\n },\n\n list: {\n display: 'flex',\n height: '100%',\n position: 'relative',\n width: '100%',\n },\n listItem: {\n marginBottom: 2,\n marginLeft: 1,\n marginRight: 1,\n },\n listWrap: {\n flexFlow: ' row wrap',\n },\n preview: {\n boxShadow: `${theme.palette.divider} 0 1px 0 0 inset`,\n height: '100%',\n overflow: 'hidden',\n padding: 5,\n width: '100%',\n },\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n vertical: {\n borderLeft: `1px solid ${theme.palette.divider}`,\n },\n}));\n\ninterface Props {\n showStorybook?: boolean;\n column?: number;\n onClose: () => void;\n viewPanel: ScreenShotViewPanel;\n}\n\nconst ScreenshotListView: React.FC<Props> = (props) => {\n const { showStorybook, column, onClose, viewPanel } = props;\n\n const {\n activeBrowsers,\n toggleBrowser,\n browserTypes,\n refreshingBrowsers,\n clearBrowserRefresh,\n refreshBrowsers,\n } = useBrowserStateManager(viewPanel);\n\n const classes = useStyles();\n\n const storyUrl = useStoryUrl();\n\n const { itemHeight, ref, width } = useScreenshotListLayout(\n column,\n activeBrowsers.length,\n );\n\n const { isSaving, requestSaveAll, requestSaveOne, setScreenshotData } =\n useScreenshotSaveFlow(activeBrowsers);\n\n const handleRefresh = useCallback(() => {\n refreshBrowsers(activeBrowsers);\n }, [activeBrowsers, refreshBrowsers]);\n\n return (\n <div className={clsx(classes.root, { [classes.vertical]: column === 1 })}>\n <Toolbar\n browserTypes={browserTypes}\n activeBrowsers={activeBrowsers}\n toggleBrowser={toggleBrowser}\n onCLose={onClose}\n onRefresh={handleRefresh}\n onSave={requestSaveAll}\n isVertical={column === 1}\n />\n <div className={classes.preview}>\n {activeBrowsers && activeBrowsers.length > 0 && (\n <div\n ref={ref}\n className={clsx(classes.list, {\n [classes.listWrap]: column !== undefined,\n })}\n >\n {showStorybook && (\n <div className={classes.listItem} style={{ width }}>\n <ScreenshotView\n browserType=\"storybook\"\n url={storyUrl}\n height={itemHeight}\n />\n </div>\n )}\n {activeBrowsers.map((browser) => (\n <div key={browser} className={classes.listItem} style={{ width }}>\n <ScreenshotView\n browserType={browser}\n height={itemHeight}\n refresh={refreshingBrowsers.includes(browser)}\n onSave={requestSaveOne}\n onRefreshEnd={() => {\n clearBrowserRefresh(browser);\n }}\n onScreenshotDataChange={setScreenshotData}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n <Loader open={isSaving} />\n </div>\n );\n};\n\nScreenshotListView.displayName = 'ScreenshotListView';\n\nexport { ScreenshotListView };\n","import Dialog from '@material-ui/core/Dialog';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { ThemeProvider } from '../../../../components/common/ThemeProvider';\nimport { ScreenshotListView } from './ScreenshotListView';\n\nconst useStyles = makeStyles((theme) => ({\n appBar: {\n backgroundColor: theme.palette.divider,\n boxShadow: 'none',\n },\n\n closeIconAbsolute: {\n position: 'absolute',\n right: 30,\n top: 30,\n },\n\n container: {\n height: '100%',\n },\n\n dialogPaper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n minHeight: '100%',\n minWidth: '100%',\n overflow: 'hidden',\n },\n\n toolbar: {\n minHeight: 'auto',\n },\n\n toolbarRight: {\n display: 'flex',\n justifyContent: 'flex-end',\n width: '100%',\n },\n}));\n\nexport interface PreviewDialogProps {\n open: boolean;\n onClose: () => void;\n}\n\nconst PreviewDialog: React.FC<PreviewDialogProps> = (props) => {\n const { onClose, open } = props;\n\n const classes = useStyles();\n\n return (\n <ThemeProvider>\n <Dialog\n onClose={onClose}\n aria-labelledby=\"simple-dialog-title\"\n open={open}\n hideBackdrop={true}\n classes={{\n paper: classes.dialogPaper,\n }}\n >\n <div className={classes.container}>\n <ScreenshotListView\n showStorybook={true}\n column={2}\n onClose={onClose}\n viewPanel=\"dialog\"\n />\n </div>\n </Dialog>\n </ThemeProvider>\n );\n};\n\nPreviewDialog.displayName = 'PreviewDialog';\n\nexport { PreviewDialog };\n","import { Button, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport { useEditScreenshot } from '../../hooks';\n\nconst useStyles = makeStyles(\n () => {\n return {\n alert: {\n padding: '0px 16px',\n },\n icon: {\n alignSelf: 'center',\n },\n message: {\n flex: 1,\n },\n messageWrapper: {\n alignSelf: 'center',\n },\n root: {\n alignSelf: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n },\n };\n },\n { name: 'EditScreenshotAlert' },\n);\n\nconst EditScreenshotAlert: React.FC = () => {\n const { editScreenshotState, clearScreenshotEdit } = useEditScreenshot();\n\n const classes = useStyles();\n\n if (!editScreenshotState) return null;\n\n return (\n <Alert\n classes={{\n icon: classes.icon,\n message: classes.message,\n root: classes.alert,\n }}\n severity=\"warning\"\n >\n <div className={classes.root}>\n <div className={classes.messageWrapper}>\n {`Editing '${editScreenshotState.screenshotData.title}' screenshot (${editScreenshotState.screenshotData.browserType}).`}\n </div>\n\n <div>\n <Button size=\"small\" color=\"inherit\" onClick={clearScreenshotEdit}>\n Cancel\n </Button>\n </div>\n </div>\n </Alert>\n );\n};\n\nEditScreenshotAlert.displayName = 'EditScreenshotAlert';\n\nexport { EditScreenshotAlert };\n","import type { AddonState } from '../../../typings';\n\nexport function isHorizontalPanel(\n addonState: AddonState,\n storybookPanelPosition: string,\n) {\n if (addonState && addonState.placement && addonState.placement !== 'auto') {\n if (addonState.placement === 'bottom') return true;\n return false;\n }\n if (storybookPanelPosition === 'bottom') return false;\n return true;\n}\n","const ROOT_SELECTOR = 'html>body>#root';\nconst STORYBOOK_ROOT_SELECTOR = 'html>body>#storybook-root';\nconst MAX_LEGACY_ROOT_INDEX = 8;\n\nfunction hasQuerySelector(\n documentNode: Document | Partial<Document>,\n): documentNode is Document {\n return typeof documentNode.querySelector === 'function';\n}\n\nfunction getRootSelector(documentNode: Document | Partial<Document>): string | undefined {\n if (!hasQuerySelector(documentNode)) return undefined;\n\n if (documentNode.querySelector(ROOT_SELECTOR)) return ROOT_SELECTOR;\n if (documentNode.querySelector(STORYBOOK_ROOT_SELECTOR)) {\n return STORYBOOK_ROOT_SELECTOR;\n }\n\n return undefined;\n}\n\nexport function normalizeRootSelectorPath(\n selectorPath: string,\n documentNode: Document | Partial<Document>,\n): string {\n if (!hasQuerySelector(documentNode)) return selectorPath;\n\n const rootSelector = getRootSelector(documentNode);\n\n if (!rootSelector) return selectorPath;\n\n const rootElement = documentNode.querySelector(rootSelector);\n if (!rootElement) return selectorPath;\n\n for (let index = 1; index <= MAX_LEGACY_ROOT_INDEX; index += 1) {\n const legacyRootSelector = `html>body>div:nth-child(${index})`;\n\n if (!selectorPath.includes(legacyRootSelector)) continue;\n\n const legacyRootElement = documentNode.querySelector(legacyRootSelector);\n\n if (legacyRootElement && legacyRootElement === rootElement) {\n return selectorPath.replace(legacyRootSelector, rootSelector);\n }\n }\n\n return selectorPath;\n}\n","import { getSelectorPath } from '@dom-utils/selector-path';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useKey, useMouseHovered, useThrottleFn } from 'react-use';\nimport { useSelectorManager } from '../../hooks';\nimport { normalizeRootSelectorPath } from './utils';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n hidden: {\n display: 'none',\n pointerEvents: 'none',\n },\n info: {\n bottom: 0,\n color: theme.palette.primary.main,\n fontSize: 14,\n left: 2,\n pointerEvents: 'none',\n position: 'absolute',\n },\n overlay: {\n backgroundColor: 'transparent',\n bottom: 0,\n cursor: 'crosshair !important',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: 100,\n },\n preview: {\n border: `1px solid ${theme.palette.primary.main}`,\n position: 'absolute',\n },\n };\n },\n { name: 'SelectorOverlay' },\n);\n\ninterface Props {\n iframe?: HTMLIFrameElement;\n}\n\nconst defaultRect = {\n height: '100%' as unknown as number,\n left: 0,\n right: 0,\n width: '100%' as unknown as number,\n} as ClientRect;\n\nconst SelectorOverlay: React.FC<Props> = (props) => {\n const { iframe } = props;\n const { stopSelector, selectorManager, setSelectorData } = useSelectorManager();\n\n const [mouseupRef, setMouseupRef] = useState<HTMLElement>();\n\n const classes = useStyles();\n\n const selectorRef = useRef<HTMLDivElement>(null);\n\n const isIdSelector = selectorManager.type === 'id-selector';\n const isSelector = selectorManager.type === 'selector' || isIdSelector;\n\n const [selectorInfo, setSelectorInfo] = useState<{\n rect?: ClientRect;\n selector?: string;\n }>({ rect: defaultRect });\n\n const { elX, elY } = useMouseHovered(selectorRef, {\n bound: true,\n whenHovered: true,\n });\n\n useKey('Escape', stopSelector, undefined, [setSelectorInfo, stopSelector]);\n\n useThrottleFn(\n (x, y) => {\n if (iframe && iframe.contentWindow) {\n const iframeDocument = iframe.contentWindow.document;\n const node = iframeDocument.elementFromPoint(x, y);\n if (node) {\n if (isIdSelector) {\n setSelectorInfo({\n rect: node.getBoundingClientRect(),\n selector: node.id ? `#${node.id}` : '',\n });\n } else {\n const path = normalizeRootSelectorPath(\n getSelectorPath(node, { minify: true }),\n iframeDocument,\n );\n if (node.tagName === 'HTML') {\n setSelectorInfo({\n rect: defaultRect,\n selector: path,\n });\n } else {\n setSelectorInfo({\n rect: node.getBoundingClientRect(),\n selector: path,\n });\n }\n }\n } else {\n setSelectorInfo({ ...selectorInfo, rect: undefined });\n }\n }\n },\n 150,\n [elX, elY],\n );\n\n useEffect(() => {\n if (mouseupRef) {\n const isInBoundary = selectorRef.current\n ? selectorRef.current.contains(mouseupRef)\n : false;\n\n stopSelector();\n setSelectorData({\n path: isInBoundary ? selectorInfo.selector : undefined,\n x: Math.round(elX),\n y: Math.round(elY),\n });\n }\n }, [elX, elY, setSelectorData, mouseupRef, selectorInfo.selector, stopSelector]);\n\n useEffect(() => {\n const mouseup = (e: MouseEvent): void => {\n setMouseupRef(e.target as HTMLElement);\n };\n\n const style = document.createElement('STYLE');\n style.innerHTML = `html, body {\n cursor: crosshair !important;\n `;\n\n const { body } = document;\n\n document.head.appendChild(style);\n\n body.addEventListener('mouseup', mouseup);\n\n return (): void => {\n body.style.cursor = 'inherit';\n body.removeEventListener('mouseup', mouseup);\n document.head.removeChild(style);\n };\n }, []);\n\n return (\n <div ref={selectorRef} className={clsx(classes.overlay)}>\n {selectorManager && selectorInfo && selectorInfo.rect && (\n <>\n <div\n className={clsx(classes.preview, 'selector-preview')}\n style={\n isSelector\n ? {\n height: selectorInfo.rect.height,\n left: selectorInfo.rect.left,\n top: selectorInfo.rect.top,\n width: selectorInfo.rect.width,\n }\n : defaultRect\n }\n />\n\n <div className={classes.info}>\n <div>{`X: ${elX}`}</div>\n <div>{`Y: ${elY}`}</div>\n <div>{selectorInfo.selector}</div>\n </div>\n </>\n )}\n </div>\n );\n};\n\nSelectorOverlay.displayName = 'SelectorOverlay';\n\nexport { SelectorOverlay };\n","import React, { memo, useEffect, useRef, useState } from 'react';\nimport { useSelectorManager } from '../../hooks';\nimport { SelectorOverlay } from './SelectorOverlay';\n\nconst Selector: React.FC = memo((props) => {\n const { children } = props;\n const { selectorManager } = useSelectorManager();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const [iframe, setIframe] = useState<HTMLIFrameElement | undefined>();\n\n useEffect(() => {\n if (rootRef.current) setIframe(rootRef.current.querySelector('iframe') || undefined);\n }, []);\n\n const isActive = selectorManager && selectorManager.start;\n\n return (\n <div ref={rootRef} style={{ height: '100%' }}>\n {children}\n {isActive && <SelectorOverlay iframe={iframe} />}\n </div>\n );\n});\n\nSelector.displayName = 'Selector';\n\nexport { Selector };\n","import { makeStyles } from '@material-ui/core';\nimport { Separator } from '@storybook/components';\nimport { useStorybookState } from '@storybook/manager-api';\nimport clsx from 'clsx';\nimport React, { useCallback } from 'react';\nimport { Pane, SplitPane } from 'react-split-pane';\nimport { ScreenshotListView } from '../../features/screenshot/components/screenshot-preview/index';\nimport { useAddonState } from '../../hooks';\nimport { Clipper } from '../Clipper/Clipper';\nimport { CommonProvider } from '../common';\nimport { EditScreenshotAlert } from './EditScreenshotAlert';\nimport { Selector } from './Selector';\nimport { isHorizontalPanel } from './utils';\n\nconst useStyles = makeStyles(\n () => {\n return {\n horizontal: {\n '& $preview': {\n position: 'relative',\n },\n },\n iframeContainer: {\n height: '100%',\n position: 'relative',\n },\n interactive: {\n pointerEvents: 'auto',\n },\n notInteractive: {\n pointerEvents: 'none',\n },\n preview: {\n display: 'flex',\n flexFlow: 'column',\n height: '100%',\n position: 'relative',\n width: '100%',\n },\n root: {\n height: '100%',\n position: 'relative',\n width: '100%',\n },\n snapshotPanel: {\n '& > span': {\n display: 'none',\n },\n height: '100%',\n width: '100%',\n },\n splitPane: {\n '&:hover': {\n backgroundColor: 'rgb(2, 156, 253)',\n transition: 'background-color 0.3s ease',\n },\n backgroundColor: 'transparent',\n },\n vertical: {\n '& $preview': {\n position: 'relative',\n },\n },\n };\n },\n { name: 'Preview' },\n);\n\nconst DEVIDER_SIZE = 3;\n\nconst Preview: React.FC = (props) => {\n const { children } = props;\n\n const { addonState, setAddonState } = useAddonState();\n\n const state = useStorybookState();\n\n const classes = useStyles();\n\n const isHorizontal = isHorizontalPanel(addonState, state.layout.panelPosition);\n\n const handleResizeChange = useCallback(\n (size) => {\n setAddonState({ ...addonState, previewPanelSize: size });\n },\n [addonState, setAddonState],\n );\n\n const handleClose = useCallback(() => {\n setAddonState({ ...addonState, previewPanelEnabled: false });\n }, [addonState, setAddonState]);\n\n if (!addonState || !addonState.previewPanelEnabled) return <>{children}</>;\n\n const previewPaneIndex = 0;\n\n const previewPane = (\n <Pane\n key=\"preview\"\n minSize={50}\n size={(addonState && addonState.previewPanelSize) || '30%'}\n className={clsx('preview-main', classes.preview)}\n >\n <div className={classes.iframeContainer}>\n <Selector>{children}</Selector>\n </div>\n <Clipper />\n <EditScreenshotAlert />\n </Pane>\n );\n\n const screenshotPane = (\n <Pane key=\"screenshot\" minSize={50} className={clsx(classes.snapshotPanel)}>\n <Separator />\n {addonState && addonState.previewPanelEnabled && (\n <ScreenshotListView\n column={isHorizontal ? undefined : 1}\n onClose={handleClose}\n viewPanel=\"main\"\n />\n )}\n </Pane>\n );\n\n const panes = [previewPane, screenshotPane];\n\n return (\n <CommonProvider>\n <div id=\"preview-container\" className={clsx(classes.root)}>\n <SplitPane\n direction={isHorizontal ? 'vertical' : 'horizontal'}\n onResize={(sizes) => handleResizeChange(sizes[previewPaneIndex])}\n dividerClassName={clsx(classes.splitPane)}\n dividerStyle={{\n ...(isHorizontal ? { height: DEVIDER_SIZE } : { width: DEVIDER_SIZE }),\n }}\n >\n {panes}\n </SplitPane>\n </div>\n </CommonProvider>\n );\n};\n\nPreview.displayName = 'Preview';\n\nexport { Preview };\n","export const ADDON_ID = 'playwright-addon';\nexport const ACTIONS_PANEL_ID = `${ADDON_ID}/action-panel`;\nexport const SCREENSHOT_PANEL_ID = `${ADDON_ID}/screenshot-panel`;\nexport const TOOL_ID = `${ADDON_ID}/tool`;\nexport const TOAST_ID = `${ADDON_ID}/toast`;\nexport const PREVIEW_ID = `${ADDON_ID}/preview-panel`;\nexport const ADDON_STORAGE_KEY = `${ADDON_ID}/storage-key`;\n\nexport const EVENTS = {\n SELECTOR: `${ADDON_ID}/selector`,\n};\n","export const TEMP_ACTION_SET =\n ' (This action loaded from screenshot actions, its temporary and will be removed)';\n","import type { ImageDiffResult } from '../../api/typings';\nimport { makeStyles } from '@material-ui/core';\nimport { ListItem } from '@storybook/components';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport React, { useCallback } from 'react';\nimport { SCREENSHOT_PANEL_ID } from '../../constants';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n notFound: {\n '& > div': {\n '& > b': {\n color: theme.palette.error.main,\n },\n '& > p': {\n margin: 0,\n },\n fontSize: 14,\n },\n border: `1px solid ${theme.palette.error.main}`,\n marginBottom: 2,\n marginTop: 2,\n pointerEvents: 'none',\n userSelect: 'text',\n },\n };\n },\n { name: 'ImageDiff' },\n);\n\nexport interface ImageDiffMenuItemProps {\n imageDiff: ImageDiffResult;\n onClick: () => void;\n}\n\nconst ImageDiffMenuItem: React.FC<ImageDiffMenuItemProps> = (props) => {\n const { imageDiff, onClick } = props;\n\n const api = useStorybookApi();\n\n const classes = useStyles();\n\n const { storyId } = imageDiff;\n\n const data = storyId ? api.getData(storyId) : undefined;\n\n const handleLoadStory = useCallback(() => {\n if (!storyId) return;\n\n onClick();\n api.selectStory(storyId);\n api.setSelectedPanel(SCREENSHOT_PANEL_ID);\n }, [api, onClick, storyId]);\n\n if (!data) {\n return (\n <ListItem className={classes.notFound} title=\"Unable to locate story!\">\n <div>\n <b>Unable to locate story!</b>\n\n <p>\n <b>ID:</b> {props.imageDiff.storyId}\n </p>\n\n <p>\n <b>File:</b> {props.imageDiff.filePath}\n </p>\n </div>\n </ListItem>\n );\n }\n\n return <ListItem onClick={handleLoadStory} title={`${data.parent}--${data.name}`} />;\n};\n\nImageDiffMenuItem.displayName = 'ImageDiffMenuItem';\n\nexport { ImageDiffMenuItem };\n","import type { StoryData } from '../../schema';\nimport type { ScreenshotTestTargetType } from '../../typings';\nimport { Badge, makeStyles } from '@material-ui/core';\nimport { IconButton, ListItem, WithTooltip } from '@storybook/components';\nimport { ContrastIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport {\n removeImageDiffResult,\n setImageDiffResults,\n} from '../../features/screenshot/store/actions';\nimport { useGlobalImageDiffResults, useScreenshotDiffTestByType } from '../../hooks';\nimport { isStoryJsonFile } from '../../utils/is-story-json-file';\nimport { toast } from '../../utils/toast';\nimport { Loader } from '../common';\nimport { ImageDiffMenuItem } from './ImageDiffMenuItem';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n button: {\n overflow: 'visible !important',\n },\n imageDiffBadge: {\n '& span': {\n fontSize: '.6rem',\n height: 14,\n minWidth: 15,\n padding: '0 4px',\n },\n position: 'absolute',\n right: -2,\n top: 5,\n zIndex: 1,\n },\n successIcon: {\n color: theme.palette.primary.main,\n position: 'absolute',\n right: -10,\n top: -4,\n },\n };\n },\n { name: 'ImageDiff' },\n);\n\ninterface ImageDiffStyleProps {\n classes?: {\n button?: string;\n };\n target: ScreenshotTestTargetType;\n storyData?: StoryData;\n}\n\nconst ImageDiff: React.FC<ImageDiffStyleProps> = (props) => {\n const { target, storyData } = props;\n\n const classes = useStyles({ classes: props.classes });\n\n const { imageDiffResult } = useGlobalImageDiffResults();\n\n const { testStoryScreenShots, imageDiffTestInProgress } = useScreenshotDiffTestByType();\n\n const diffResults =\n target === 'file' && storyData\n ? imageDiffResult.filter((x) =>\n x.filePath ? isStoryJsonFile(x.filePath, storyData.filePath) : false,\n )\n : imageDiffResult;\n\n const failedDiffResults = diffResults.filter((x) => x.pass === false);\n\n const hasFailedDiff = failedDiffResults.length > 0;\n\n const handleImageDiffClick = useCallback(async () => {\n if (hasFailedDiff) return;\n\n const result = await testStoryScreenShots(target);\n\n if (!Array.isArray(result)) return;\n\n const imageDiffResults = result as Array<{ pass?: boolean }>;\n\n if (!imageDiffResults.find((x) => !x.pass)) {\n toast.success('All screenshot tests are passed successfully.', {\n id: 'image-diff:all-passed',\n });\n }\n }, [hasFailedDiff, target, testStoryScreenShots]);\n\n const handleClearAllResults = useCallback(() => {\n if (target === 'file') {\n diffResults.forEach((sc) => {\n if (sc.screenshotId) {\n removeImageDiffResult(sc.screenshotId);\n }\n });\n } else {\n setImageDiffResults([]);\n }\n }, [diffResults, target]);\n\n const title =\n target === 'file' && storyData\n ? `Run diff test for all stories in '${storyData.filePath}' file.`\n : 'Run diff test for all stories';\n\n const iconButton = (\n <IconButton\n title={title}\n className={classes.button}\n onClick={handleImageDiffClick}\n style={{ position: 'relative' }}\n disabled={imageDiffTestInProgress}\n >\n {hasFailedDiff && (\n <Badge\n badgeContent={failedDiffResults.length}\n color=\"secondary\"\n className={classes.imageDiffBadge}\n overlap=\"rectangular\"\n />\n )}\n <ContrastIcon />\n\n <Loader position=\"absolute\" open={imageDiffTestInProgress} progressSize={15} />\n </IconButton>\n );\n\n if (!hasFailedDiff) {\n return iconButton;\n }\n\n return (\n <WithTooltip\n closeOnOutsideClick\n placement=\"bottom\"\n trigger=\"click\"\n tooltip={({ onHide }) => (\n <div\n style={{\n maxHeight: '60vh',\n overflowY: 'auto',\n }}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <ListItem\n title=\"Clear results\"\n onClick={() => {\n handleClearAllResults();\n onHide();\n }}\n ></ListItem>\n\n {failedDiffResults\n .filter(\n (x, index, self) =>\n index === self.findIndex((t) => t.storyId === x.storyId),\n )\n .map((diff) => (\n <ImageDiffMenuItem\n key={`${diff.storyId || ''}${diff.screenshotId || ''}`}\n imageDiff={diff}\n onClick={onHide}\n />\n ))}\n </div>\n )}\n >\n {iconButton}\n </WithTooltip>\n );\n};\n\nImageDiff.displayName = 'ImageDiff';\n\nexport { ImageDiff };\n","import { RESET_STORY_ARGS } from '@storybook/core-events';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport {\n clearCurrentActionSets,\n deleteTempActionSets,\n} from '../features/action-set/store/actions';\nimport { useAddonState } from './use-addon-state';\nimport { useCurrentStoryData } from './use-current-story-data';\n\nexport const PREVIEW_PANEL_SIZE = 100;\n\nexport function useResetSetting() {\n const api = useStorybookApi();\n\n const data = useCurrentStoryData();\n\n const { addonState, setAddonState } = useAddonState();\n\n const reset = () => {\n setAddonState({\n ...addonState,\n placement: 'auto',\n previewPanelEnabled: true,\n previewPanelSize: PREVIEW_PANEL_SIZE,\n });\n api.emit(RESET_STORY_ARGS, { storyId: data?.id });\n clearCurrentActionSets();\n if (data?.id) {\n deleteTempActionSets(data.id);\n }\n };\n\n return reset;\n}\n","import type { ScreenshotTestTargetType } from '../../typings';\nimport { IconButton } from '@storybook/components';\nimport { RefreshIcon } from '@storybook/icons';\nimport React from 'react';\nimport { useScreenshotUpdateState } from '../../features/screenshot/hooks/use-screenshot-update-state';\nimport { Loader } from '../common';\n\nexport interface ScreenshotUpdateIconProps {\n target: ScreenshotTestTargetType;\n}\n\nconst ScreenshotUpdateIcon: React.FC<ScreenshotUpdateIconProps> = ({ target }) => {\n const reqBy = `tool-${target}`;\n\n const { runDiffTest, updateInf } = useScreenshotUpdateState(reqBy, target);\n\n const title =\n target == 'file'\n ? 'Update current story file screenshots'\n : 'Update all screen shots';\n\n return (\n <IconButton\n title={title}\n onClick={runDiffTest}\n style={{ position: 'relative' }}\n disabled={Boolean(updateInf.inProgress)}\n >\n <RefreshIcon />\n <Loader\n position=\"absolute\"\n open={updateInf.reqBy === reqBy && Boolean(updateInf.inProgress)}\n progressSize={15}\n />\n </IconButton>\n );\n};\n\nScreenshotUpdateIcon.displayName = 'ScreenshotUpdateIcon';\n\nexport { ScreenshotUpdateIcon };\n","import React, { useState, useCallback } from 'react';\nimport {\n IconButton,\n ListItem,\n Separator,\n TooltipLinkList,\n WithTooltip,\n} from '@storybook/components';\nimport { makeStyles } from '@material-ui/core';\nimport { CommonProvider } from '../common';\nimport { PreviewDialog } from '../../features/screenshot/components/screenshot-preview/index';\nimport { useAddonState, useCurrentStoryData } from '../../hooks';\nimport { ImageDiff } from './ImageDiff';\nimport { PREVIEW_PANEL_SIZE, useResetSetting } from '../../hooks/use-reset-setting';\nimport { ScreenshotUpdateIcon } from './ScreenshotUpdateIcon';\nimport { FixScreenshotFileDialog } from '../common';\nimport {\n RefreshIcon,\n BottomBarIcon,\n SidebarAltIcon,\n SyncIcon,\n ChevronRightIcon,\n ShareAltIcon,\n EyeCloseIcon,\n WrenchIcon,\n EyeIcon,\n BrowserIcon,\n} from '@storybook/icons';\nimport { DisplayPlacement } from '../../typings';\n\nconst useStyles = makeStyles(() => ({\n asterisk: {\n height: 2,\n left: -6,\n margin: 0,\n position: 'relative',\n top: 1,\n width: 1,\n },\n\n button: {\n position: 'relative',\n },\n progress: {\n left: -3,\n pointerEvents: 'none',\n position: 'absolute',\n top: 7,\n zIndex: 1,\n },\n}));\n\nconst Tool: React.FC = () => {\n const [open, setOpen] = useState(false);\n\n const { setAddonState, addonState } = useAddonState();\n\n const [showFixScreenshotFileDialog, setShowFixScreenshotFileDialog] =\n React.useState<boolean>(false);\n const storyData = useCurrentStoryData();\n\n const resetSetting = useResetSetting();\n\n const isEnablePreviewPanelEnabled = addonState && addonState.previewPanelEnabled;\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleBowserClose = useCallback(() => {\n setAddonState({\n ...addonState,\n previewPanelEnabled: !isEnablePreviewPanelEnabled,\n });\n }, [addonState, isEnablePreviewPanelEnabled, setAddonState]);\n\n const classes = useStyles();\n\n const handlePlacementChange = useCallback(\n (placement: DisplayPlacement) => {\n setAddonState({\n ...addonState,\n placement: placement,\n previewPanelSize: PREVIEW_PANEL_SIZE,\n });\n },\n [setAddonState, addonState],\n );\n const placement = addonState ? addonState.placement : 'auto';\n return (\n <CommonProvider>\n <Separator />\n <WithTooltip\n placement=\"bottom\"\n trigger=\"click\"\n closeOnOutsideClick\n tooltip={({ onHide }) => (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <TooltipLinkList\n links={[\n {\n icon: <WrenchIcon />,\n id: 'fix-screenshot-file-name',\n onClick: () => {\n setShowFixScreenshotFileDialog(true);\n onHide();\n },\n title: 'Fix screenshot file name',\n },\n {\n icon: <ShareAltIcon />,\n id: 'full-screen',\n onClick: () => {\n handleOpen();\n onHide();\n },\n title: 'Full screen view',\n },\n {\n icon: addonState.previewPanelEnabled ? <EyeCloseIcon /> : <EyeIcon />,\n id: 'panel-toggle',\n onClick: () => {\n handleBowserClose();\n },\n title: addonState.previewPanelEnabled\n ? 'Hide Preview Panel'\n : 'Show Preview Panel',\n },\n {\n content: (\n <WithTooltip\n trigger=\"click\"\n placement=\"right-start\"\n closeOnOutsideClick\n tooltip={() => (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <TooltipLinkList\n links={[\n {\n icon: <SidebarAltIcon />,\n id: 'right',\n onClick: () => {\n handlePlacementChange('right');\n },\n title: 'Right',\n },\n {\n icon: <BottomBarIcon />,\n id: 'bottom',\n onClick: () => {\n handlePlacementChange('bottom');\n },\n title: 'Bottom',\n },\n {\n icon: <SyncIcon />,\n id: 'auto',\n onClick: () => {\n handlePlacementChange('auto');\n },\n title: 'Auto',\n },\n ]}\n />\n </div>\n )}\n >\n <ListItem\n title=\"Preview Panel Placement\"\n icon={\n placement === 'right' ? (\n <SidebarAltIcon />\n ) : placement === 'bottom' ? (\n <BottomBarIcon />\n ) : (\n <SyncIcon />\n )\n }\n right={<ChevronRightIcon />}\n />\n </WithTooltip>\n ),\n id: 'position',\n title: 'Position',\n },\n {\n icon: <RefreshIcon />,\n id: 'reset',\n onClick: () => {\n resetSetting();\n onHide();\n },\n title: 'Reset Settings',\n },\n ]}\n />\n </div>\n )}\n >\n <IconButton aria-label=\"Open menu\" title=\"Open menu\">\n <BrowserIcon />\n </IconButton>\n </WithTooltip>\n {storyData && (\n <>\n <Separator />\n <ImageDiff\n classes={{ button: classes.button }}\n storyData={storyData}\n target=\"all\"\n />\n <ScreenshotUpdateIcon target=\"all\" />\n <span className={classes.asterisk}>*</span>\n <Separator />\n <ImageDiff\n classes={{ button: classes.button }}\n storyData={storyData}\n target=\"file\"\n />\n <ScreenshotUpdateIcon target=\"file\" />\n\n <FixScreenshotFileDialog\n onClose={setShowFixScreenshotFileDialog}\n open={showFixScreenshotFileDialog}\n />\n </>\n )}\n\n <Separator />\n <PreviewDialog open={open} onClose={handleClose} />\n </CommonProvider>\n );\n};\n\nTool.displayName = 'Tool';\n\nexport { Tool };\n","import type { ControlProps, ControlTypes } from '../../../typings';\nimport { Form } from '@storybook/components';\nimport React, { useCallback, useState } from 'react';\nimport { CheckBox } from '../../../components';\n\ninterface ControlKnob {\n defaultValue?: unknown;\n name: string;\n options?: string[] | Record<string, string>;\n optionsObj?: { display?: string };\n type: string;\n value: unknown;\n}\n\nfunction convertOptions(options?: string[]) {\n if (!options) return undefined;\n\n return options.reduce(\n (obj, key) => {\n obj[key] = key;\n return obj;\n },\n {} as Record<string, string>,\n );\n}\n\nfunction getDefault(type: ControlTypes, defVal: unknown): unknown {\n if (defVal !== undefined) return defVal;\n switch (type) {\n case 'boolean':\n return false;\n case 'number':\n return '';\n case 'options':\n return [];\n default:\n return '';\n }\n}\n\n// Simple control component that replaces @storybook/addon-knobs controls\nconst SimpleControl: React.FC<{\n onChange: (val: unknown) => void;\n knob: ControlKnob;\n}> = ({ onChange, knob }) => {\n const handleBooleanChange = (checked: boolean) => {\n onChange(checked);\n };\n\n const handleInputChange: React.FormEventHandler<HTMLInputElement> = (e) => {\n const value =\n knob.type === 'boolean'\n ? e.currentTarget.checked\n : knob.type === 'number'\n ? Number(e.currentTarget.value)\n : e.currentTarget.value;\n onChange(value);\n };\n\n const handleSelectChange: React.FormEventHandler<HTMLSelectElement> = (e) => {\n onChange(e.currentTarget.value);\n };\n\n const handleTextareaChange: React.FormEventHandler<HTMLTextAreaElement> = (e) => {\n const value =\n knob.type === 'number' ? Number(e.currentTarget.value) : e.currentTarget.value;\n onChange(value);\n };\n\n if (knob.type === 'boolean') {\n return React.createElement(CheckBox, {\n checked: Boolean(knob.value),\n onClick: () => undefined,\n onChange: handleBooleanChange,\n });\n }\n\n if (knob.type === 'number') {\n return React.createElement(Form.Input, {\n onChange: handleInputChange,\n type: 'number',\n value: knob.value as number,\n });\n }\n\n if (knob.type === 'select' && Array.isArray(knob.options)) {\n return React.createElement(\n Form.Select,\n { onChange: handleSelectChange, value: knob.value as string },\n knob.options.map((opt) =>\n React.createElement('option', { key: opt, value: opt }, opt),\n ),\n );\n }\n\n if (knob.type === 'options' && knob.options && typeof knob.options === 'object') {\n const opts = knob.options as Record<string, string>;\n return React.createElement(\n Form.Select,\n { onChange: handleSelectChange, value: knob.value as string },\n Object.entries(opts).map(([key, val]) =>\n React.createElement('option', { key, value: val }, key),\n ),\n );\n }\n\n // Default: text/textarea input\n return React.createElement(Form.Textarea, {\n onChange: handleTextareaChange,\n value: (knob.value as string) || '',\n });\n};\n\n// Factory that returns the control component for compatibility with previous API\nfunction getControl(_type: string) {\n void _type;\n return SimpleControl;\n}\n\nexport function useControl(props: ControlProps) {\n const { label, type, onChange, value, options, display } = props;\n\n const [knob, setKnob] = useState<ControlKnob>({\n defaultValue: value,\n name: label,\n options: type === 'select' ? options : options ? convertOptions(options) : undefined,\n optionsObj: { display },\n type,\n value: getDefault(type, value),\n });\n\n const Control = getControl(type);\n\n const handleChange = useCallback(\n (value): void => {\n setKnob({ ...knob, value });\n onChange(value);\n },\n [knob, onChange],\n );\n\n return { Control, handleChange, knob, setKnob };\n}\n","import React from 'react';\n\nexport function useAnchorEl() {\n const anchorElRef = React.useRef(null);\n const [anchorEl, _setAnchorEl] = React.useState();\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const setAnchorEl = React.useCallback((e?: any) => {\n _setAnchorEl(anchorElRef.current || e.currentTarget);\n }, []);\n\n const clearAnchorEl = React.useCallback(() => {\n _setAnchorEl(undefined);\n }, []);\n\n return { anchorEl, anchorElRef, clearAnchorEl, setAnchorEl };\n}\n","import { useCallback, useState } from 'react';\nimport { useKeyPressFn } from './use-key-press-fn';\n\nexport function useKeyPress(targetKey, disable = false) {\n // State for keeping track of whether key is pressed\n const [keyPressed, setKeyPressed] = useState(false);\n\n const downHandler = useCallback(\n ({ key }) => {\n if (keyPressed) return;\n if (key === targetKey) {\n setKeyPressed(true);\n }\n },\n [keyPressed, targetKey],\n );\n\n const upHandler = useCallback(\n ({ key }) => {\n if (key === targetKey) {\n setKeyPressed(false);\n }\n },\n [targetKey],\n );\n\n useKeyPressFn(downHandler, upHandler, disable);\n\n return keyPressed;\n}\n","import { useEffect, useRef } from 'react';\nimport { getPreviewIframe } from '../utils';\n\nexport function usePreviewIframe() {\n const iframe = useRef<HTMLIFrameElement | undefined>(undefined);\n\n if (!iframe.current) {\n iframe.current = getPreviewIframe() || undefined;\n }\n\n useEffect(\n () => () => {\n iframe.current = undefined;\n },\n [],\n );\n\n return iframe.current;\n}\n","import type { SelectorState } from '../typings/selector';\nimport { useCallback } from 'react';\nimport { setSelectorManager, useSelectorManagerValue } from '../store';\n\nexport type { SelectorManageSharedProps, SelectorManger, SelectorType } from '../store';\n\nexport function useSelectorManager() {\n const selectorManager = useSelectorManagerValue();\n\n const startSelector = useCallback(\n (options: {\n type?: string;\n onData?: (data: SelectorState) => void;\n onStop?: () => void;\n }) => {\n const { onData, type, onStop } = options;\n\n setSelectorManager({\n onData,\n onStop,\n start: true,\n type: type as 'selector' | 'position' | 'id-selector',\n });\n },\n [],\n );\n\n const stopSelector = useCallback(() => {\n if (selectorManager.onStop) {\n selectorManager.onStop();\n }\n setSelectorManager({\n onData: undefined,\n onStop: undefined,\n start: false,\n });\n }, [selectorManager]);\n\n const setSelectorData = useCallback(\n (data: SelectorState) => {\n if (selectorManager.onData) {\n selectorManager.onData(data);\n }\n },\n [selectorManager],\n );\n\n return {\n selectorManager,\n setSelectorData,\n startSelector,\n stopSelector,\n };\n}\n","import type { DiffDirection } from '../../api/typings/image-diff';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { MapInteraction } from 'react-map-interaction';\nimport { useKeyPress } from '../../hooks';\n\nexport interface ImagePreviewProps {\n imgSrcString?: string | null;\n diffDirection?: DiffDirection;\n}\n\nconst ImagePreview: React.FC<ImagePreviewProps> = (props) => {\n const { imgSrcString, diffDirection } = props;\n const isPressed = useKeyPress('Control');\n const prevImage = useRef<string | null>();\n\n const [reset, setReset] = useState(false);\n\n useEffect(() => {\n if (prevImage.current !== imgSrcString) {\n setReset(true);\n }\n prevImage.current = imgSrcString;\n }, [imgSrcString]);\n\n React.useEffect(() => {\n if (reset) setReset(false);\n }, [reset]);\n\n if (!imgSrcString || reset) return null;\n\n return (\n <MapInteraction defaultScale={1} disableZoom={!isPressed}>\n {({ translation, scale }) => {\n // Translate first and then scale. Otherwise, the scale would affect the translation.\n const transform = `translate(${translation.x}px, ${translation.y}px) scale(${scale})`;\n return (\n <div\n style={{\n MozUserSelect: 'none',\n WebkitUserSelect: 'none',\n cursor: 'all-scroll', // for absolutely positioned children\n height: '100%',\n msTouchAction: 'none', // Not supported in Safari :(\n msUserSelect: 'none',\n position: 'relative',\n touchAction: 'none',\n width: '100%',\n }}\n >\n <div\n style={{\n display: 'inline-block', // size to content\n transform,\n transformOrigin: '0 0 ',\n // width: '100%',\n }}\n >\n <img\n style={{\n width: diffDirection === 'horizontal' ? '100%' : undefined,\n }}\n src={\n imgSrcString.startsWith('data:image')\n ? imgSrcString\n : `data:image/gif;base64,${imgSrcString}`\n }\n />\n </div>\n </div>\n );\n }}\n </MapInteraction>\n );\n};\n\nImagePreview.displayName = 'ImagePreview';\n\nexport { ImagePreview };\n","import type { ImageDiffResult } from '../../api/typings';\nimport { Divider, makeStyles, Tab, Tabs } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React, { useCallback } from 'react';\nimport { getImageDiffMessages } from '../../utils';\nimport { ImagePreview } from './ImagePreview';\n\nconst useStyles = makeStyles(\n () => {\n return {\n preview: {\n flexGrow: 1,\n margin: 5,\n overflow: 'auto',\n },\n root: {\n display: 'flex',\n flexFlow: 'column',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n },\n };\n },\n { name: 'ImageDiffPreview' },\n);\nexport { useStyles as useImageDiffPreviewStyles };\n\nexport interface ImageDiffPreviewProps {\n imageDiffResult: ImageDiffResult;\n activeTab?: 'newScreenshot' | 'imageDiff';\n}\n\nconst ImageDiffPreview: React.FC<ImageDiffPreviewProps> = (props) => {\n const { imageDiffResult, activeTab } = props;\n\n const shouldShowDiff = activeTab === 'imageDiff' || imageDiffResult.error !== undefined;\n\n const [value, setValue] = React.useState(shouldShowDiff ? 1 : 0);\n\n const [showDiff, setShowDiff] = React.useState(shouldShowDiff);\n\n const classes = useStyles();\n\n const currentImage =\n imageDiffResult.pass || !showDiff\n ? imageDiffResult.newScreenshot\n : imageDiffResult.imgSrcString;\n\n const safeCurrentImage = currentImage || '';\n\n const error = getImageDiffMessages(imageDiffResult);\n\n const toggleScreenshotDiff = useCallback(\n (_event: React.ChangeEvent<unknown>, newValue: number) => {\n setValue(newValue);\n setShowDiff(!showDiff);\n },\n [showDiff],\n );\n\n return (\n <div className={classes.root}>\n {!imageDiffResult.pass && (\n <>\n <Tabs\n textColor=\"primary\"\n value={value}\n variant=\"fullWidth\"\n onChange={toggleScreenshotDiff}\n indicatorColor=\"primary\"\n >\n <Tab label=\"New screen shot\" />\n <Tab label=\"Screenshot image diff\" />\n </Tabs>\n <Divider />\n </>\n )}\n {error && value === 1 && (\n <Alert severity=\"error\">\n {error.split('\\n').map((x, i) => {\n return <div key={i}>{x}</div>;\n })}\n </Alert>\n )}\n <div className={classes.preview}>\n <ImagePreview\n imgSrcString={safeCurrentImage}\n diffDirection={imageDiffResult.diffDirection}\n />\n </div>\n </div>\n );\n};\n\nImageDiffPreview.displayName = 'ImageDiffPreview';\n\nexport { ImageDiffPreview };\n","import type { DialogProps } from './Dialog';\nimport type { ImageDiffPreviewProps } from './ImageDiffPreview';\nimport React from 'react';\nimport { Dialog } from './Dialog';\nimport { ImageDiffPreview } from './ImageDiffPreview';\n\nexport interface ImageDiffPreviewDialogProps extends DialogProps, ImageDiffPreviewProps {}\n\nconst ImageDiffPreviewDialog: React.FC<ImageDiffPreviewDialogProps> = (props) => {\n const { imageDiffResult, activeTab, ...rest } = props;\n\n return (\n <Dialog width=\"100%\" height=\"100%\" {...rest}>\n <ImageDiffPreview imageDiffResult={imageDiffResult} activeTab={activeTab} />\n </Dialog>\n );\n};\n\nImageDiffPreviewDialog.displayName = 'ImageDiffPreviewDialog';\n\nexport { ImageDiffPreviewDialog };\n","import type { ImageDiffResult } from '../../api/typings';\nimport type { BrowserTypes } from '../../typings';\nimport type { ImageDiffPreviewDialogProps } from './ImageDiffPreviewDialog';\nimport React from 'react';\nimport { getImageDiffMessages } from '../../utils';\nimport { toast } from '../../utils/toast';\nimport { ImageDiffPreviewDialog } from './ImageDiffPreviewDialog';\n\nexport interface ImageDiffMessageProps extends Partial<ImageDiffPreviewDialogProps> {\n result?: ImageDiffResult;\n onClose: () => void;\n title?: string;\n browserType?: BrowserTypes;\n}\n\nconst ImageDiffMessage: React.FC<ImageDiffMessageProps> = (props) => {\n const { title, result, onClose, browserType, ...rest } = props;\n\n const titleMsg = title || (result && result.oldScreenShotTitle);\n\n React.useEffect(() => {\n if (!result) return;\n\n if (result.added) {\n toast.success(\n // prettier-ignore\n `Screenshot ${ `${browserType ? ` for '${browserType}'` : ''}` } saved successfully.`,\n {\n duration: 5000,\n onAutoClose: onClose,\n onDismiss: onClose,\n },\n );\n }\n }, [browserType, onClose, result]);\n\n React.useEffect(() => {\n if (!result) return;\n\n if (result.pass) {\n toast.success(\n // prettier-ignore\n `Testing existing screenshot were successful, no change has been detected.${titleMsg ? `\\nTitle: ${titleMsg}` : ''}${browserType ? `\\nBrowser: ${ browserType}` : '' }`,\n {\n duration: 5000,\n onAutoClose: onClose,\n onDismiss: onClose,\n },\n );\n return;\n }\n\n if (result.diffSize || result.error) {\n toast.error(getImageDiffMessages(result), {\n duration: Infinity,\n onDismiss: onClose,\n });\n }\n }, [browserType, onClose, result, titleMsg]);\n\n if (!result || result.pass || result.added || result.diffSize || result.error)\n return null;\n\n return (\n <ImageDiffPreviewDialog\n imageDiffResult={result}\n onClose={onClose}\n open={true}\n activeTab=\"imageDiff\"\n title={titleMsg}\n {...rest}\n />\n );\n};\n\nImageDiffMessage.displayName = 'ImageDiffMessage';\n\nconst MemoizedImageDiffMessage = React.memo(ImageDiffMessage);\nexport { ImageDiffMessage, MemoizedImageDiffMessage };\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport NiceModal from '@ebay/nice-modal-react';\nimport React from 'react';\nimport { StateInspector } from 'reinspect';\nimport { createTrpcHttpClient, trpcClient } from '../../api/trpc/client';\nimport { ThemeProvider } from '../common';\n\nconst trpcHttpClient = createTrpcHttpClient();\nconst queryClient = new QueryClient({\n defaultOptions: {\n mutations: { retry: false },\n queries: { retry: false },\n },\n});\n\nconst CommonProvider: React.FC = (props) => {\n const { children } = props;\n\n return (\n <trpcClient.Provider client={trpcHttpClient} queryClient={queryClient}>\n <QueryClientProvider client={queryClient}>\n <ThemeProvider>\n <NiceModal.Provider>\n <StateInspector>{children}</StateInspector>\n </NiceModal.Provider>\n </ThemeProvider>\n </QueryClientProvider>\n </trpcClient.Provider>\n );\n};\n\nCommonProvider.displayName = 'CommonProvider';\n\nexport { CommonProvider };\n","import { makeStyles, Tooltip } from '@material-ui/core';\nimport CheckSelected from '@material-ui/icons/CheckCircleOutlineRounded';\nimport HelpOutlineSharp from '@material-ui/icons/HelpOutlineSharp';\nimport CheckNotSelected from '@material-ui/icons/RadioButtonUncheckedRounded';\nimport clsx from 'clsx';\nimport React, { memo } from 'react';\nimport { capitalize } from '../../../utils';\nimport { resolveMuiIcon } from '../../../utils/resolve-mui-icon';\n\nconst CheckSelectedIcon = resolveMuiIcon(CheckSelected);\nconst HelpOutlineSharpIcon = resolveMuiIcon(HelpOutlineSharp);\nconst CheckNotSelectedIcon = resolveMuiIcon(CheckNotSelected);\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n active: {\n color: theme.palette.primary.main,\n },\n controlWrap: {\n flex: 2,\n },\n iconWrapper: {\n marginBottom: -2,\n marginRight: -8,\n paddingLeft: 4,\n width: 14,\n },\n icons: {\n '&:hover': {\n opacity: 0.8,\n },\n cursor: 'pointer',\n fontSize: 14,\n opacity: 0.4,\n },\n labelWrap: {\n alignItems: 'center',\n display: 'flex',\n flex: 1,\n justifyContent: 'space-between',\n },\n root: {\n '& fieldset > div': {\n '&>div': {\n margin: 0,\n marginRight: 10,\n },\n },\n '& input[type=\"number\"], select,textarea': {\n transition: 'none',\n width: '100%',\n },\n '& label': {\n border: 'none !important',\n margin: '0 !important',\n },\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: 4,\n },\n };\n },\n { name: 'FormControl' },\n);\n\nexport interface ControlFormProps {\n label: string;\n description?: string;\n appendValueToTitle: boolean;\n onAppendValueToTitle?: () => void;\n isRequired: boolean;\n active?: boolean;\n}\n\nconst FormControl: React.FC<ControlFormProps> = memo((props) => {\n const {\n label,\n description,\n appendValueToTitle,\n onAppendValueToTitle,\n children,\n isRequired,\n active,\n } = props;\n\n const classes = useStyles();\n\n return (\n <div className={classes.root}>\n <div className={clsx(classes.labelWrap, { [classes.active]: active })}>\n <span className=\"form-label\">\n {capitalize(label)}\n {isRequired && <span style={{ marginLeft: 2 }}>*</span>}\n </span>\n </div>\n <div className={classes.controlWrap}>{children}</div>\n <div className={classes.iconWrapper}>\n <div>\n {description && (\n <Tooltip placement=\"top\" interactive enterDelay={800} title={description}>\n <HelpOutlineSharpIcon className={classes.icons} />\n </Tooltip>\n )}\n </div>\n {onAppendValueToTitle && (\n <div onClick={onAppendValueToTitle}>\n <Tooltip placement=\"top\" enterDelay={800} title=\"Append value to title\">\n {appendValueToTitle ? (\n <CheckSelectedIcon style={{ opacity: 1 }} className={classes.icons} />\n ) : (\n <CheckNotSelectedIcon className={classes.icons} />\n )}\n </Tooltip>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nFormControl.displayName = 'FormControl';\n\nexport { FormControl };\n","import type { ComponentType } from 'react';\nimport type { ControlProps } from '../../../typings';\nimport React, { memo } from 'react';\nimport { useControl } from '../../../hooks';\nimport { FormControl } from './FormControl';\n\nconst Control: React.FC<ControlProps & Partial<ComponentType>> = memo((props) => {\n const {\n label,\n description,\n appendValueToTitle,\n onAppendValueToTitle,\n isRequired,\n value,\n defaultValue,\n } = props;\n\n const { Control: StorybookControl, handleChange, knob } = useControl(props);\n\n return (\n <FormControl\n label={label}\n appendValueToTitle={appendValueToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n description={description}\n isRequired={isRequired}\n active={\n defaultValue !== value && value !== undefined && value !== '' && value !== false\n }\n >\n <StorybookControl onChange={handleChange} knob={knob} />\n </FormControl>\n );\n});\n\nControl.displayName = 'Control';\n\nexport { Control };\n","import type { SelectorType } from '../../../hooks';\nimport type { ControlProps } from '../../../typings';\nimport { IconButton, makeStyles } from '@material-ui/core';\nimport TargetIcon from '@material-ui/icons/FilterCenterFocusSharp';\nimport PointerIcon from '@material-ui/icons/FilterTiltShift';\nimport clsx from 'clsx';\nimport React, { memo, useCallback, useEffect, useState } from 'react';\nimport { useControl, useSelectorManager } from '../../../hooks';\nimport { isValidSelector } from '../../../utils';\nimport { resolveMuiIcon } from '../../../utils/resolve-mui-icon';\nimport { FormControl } from './FormControl';\n\nconst TargetIconComponent = resolveMuiIcon(TargetIcon);\nconst PointerIconComponent = resolveMuiIcon(PointerIcon);\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n button: {\n color: theme.palette.text.primary,\n },\n buttonWrap: {\n alignItems: 'center',\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n height: 66,\n marginBottom: -35,\n zIndex: 1,\n },\n error: {\n '& textarea': {\n border: '1px solid red',\n },\n },\n errorMessage: {\n color: 'red',\n },\n root: {\n alignItems: 'center',\n display: 'flex',\n },\n selectorButtonWrap: {\n alignItems: 'center',\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n },\n selectorHashIcon: {\n '&:before': {\n backgroundColor: theme.palette.background.paper,\n content: '\"#\"',\n fontSize: '12px',\n left: '6px',\n position: 'absolute',\n top: '3px',\n },\n height: 20,\n position: 'relative',\n },\n selectorIcon: {\n fontSize: '1.25rem',\n },\n };\n },\n { name: 'SelectorControl' },\n);\n\nexport interface SelectorControlProps extends ControlProps {\n selectorType: 'selector' | 'position';\n isFollowedByPositionProp: boolean;\n fullObjectPath: string;\n onSelectorChange: (objPath: string, val: unknown) => void;\n}\n\nconst SelectorControl: React.FC<SelectorControlProps> = memo((props) => {\n const {\n selectorType,\n label,\n appendValueToTitle,\n onAppendValueToTitle,\n description,\n value,\n isFollowedByPositionProp,\n fullObjectPath,\n isRequired,\n onSelectorChange,\n } = props;\n\n const [validate, setValidate] = useState(false);\n\n const classes = useStyles();\n\n const [invalidSelector, setInvalidSelector] = useState(false);\n\n const { startSelector } = useSelectorManager();\n\n const { Control, knob, handleChange, setKnob } = useControl(props);\n\n const startSelectorClick = useCallback(\n (type: SelectorType) => {\n setValidate(false);\n startSelector({\n onData: (data) => {\n if (type === 'selector' || type === 'id-selector') {\n onSelectorChange(fullObjectPath, data.path);\n } else if (isFollowedByPositionProp) {\n const objPath =\n fullObjectPath.length === 1 ? '' : `${fullObjectPath.slice(0, -2)}.`;\n onSelectorChange(`${objPath}x`, Math.round(data.x ?? 0));\n onSelectorChange(`${objPath}y`, Math.round(data.y ?? 0));\n } else {\n const key = label === 'top' ? 'y' : label === 'left' ? 'x' : label;\n handleChange(data[key]);\n }\n },\n type,\n });\n },\n [\n startSelector,\n isFollowedByPositionProp,\n onSelectorChange,\n fullObjectPath,\n label,\n handleChange,\n ],\n );\n\n const handleSelectorClick = React.useCallback(() => {\n startSelectorClick(selectorType);\n }, [selectorType, startSelectorClick]);\n\n const handleIdSelectorClick = React.useCallback(() => {\n startSelectorClick('id-selector');\n }, [startSelectorClick]);\n\n useEffect(() => {\n if (validate && selectorType !== 'selector') {\n setInvalidSelector(false);\n return;\n }\n\n setInvalidSelector(!isValidSelector(value as string));\n }, [selectorType, validate, value]);\n\n useEffect(() => {\n if (knob.defaultValue !== value) {\n handleChange(value);\n setKnob({ ...knob, defaultValue: value, value });\n }\n }, [handleChange, knob, setKnob, value]);\n\n const handleControlChange = useCallback(\n (value: unknown) => {\n setValidate(true);\n handleChange(value);\n },\n [handleChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLDivElement>) => setValidate(e.target.tagName === 'TEXTAREA'),\n [],\n );\n\n const isSelector = selectorType === 'selector';\n\n return (\n <FormControl\n label={label}\n appendValueToTitle={appendValueToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n description={description}\n isRequired={isRequired}\n >\n <div\n className={clsx('selector-root', classes.root, {\n [classes.error]: invalidSelector && validate,\n })}\n onBlur={handleBlur}\n >\n <Control onChange={handleControlChange} knob={knob} />\n <div\n className={clsx({\n [classes.buttonWrap]: isFollowedByPositionProp,\n [classes.selectorButtonWrap]: isSelector,\n })}\n >\n <IconButton\n size=\"small\"\n onClick={handleSelectorClick}\n className={classes.button}\n >\n {isSelector ? (\n <TargetIconComponent className={classes.selectorIcon} />\n ) : (\n <PointerIconComponent />\n )}\n </IconButton>\n\n {isSelector && (\n <IconButton\n size=\"small\"\n onClick={handleIdSelectorClick}\n className={classes.button}\n >\n <div className={classes.selectorHashIcon}>\n <TargetIconComponent className={classes.selectorIcon} />\n </div>\n </IconButton>\n )}\n </div>\n </div>\n {invalidSelector && validate && (\n <div className={clsx('selector-error', classes.errorMessage)}>\n Invalid Selector!\n </div>\n )}\n </FormControl>\n );\n});\n\nSelectorControl.displayName = 'SelectorControl';\n\nexport { SelectorControl };\n","import type { ActionSchema } from '../../../typings';\nimport { capitalize } from '@material-ui/core';\nimport startCase from 'lodash/startCase';\nimport React, { useCallback } from 'react';\nimport { Control } from './Control';\nimport { SchemaRenderer } from './SchemaRenderer';\nimport { SelectorControl } from './SelectorControl';\n\nexport interface SchemaPropProps {\n name: string;\n parents?: string[];\n schema: ActionSchema;\n nextPropName: string;\n isRequired?: boolean;\n onChange: (objPath: string, val: unknown) => void;\n getValue: (optionObjectPath: string, schema: ActionSchema) => unknown;\n shouldAppendToTitle?: (optionObjectPath: string) => boolean;\n onAppendValueToTitle?: (optionObjectPath: string) => void;\n onSelectorChange?: (objPath: string, val: unknown) => void;\n}\n\nconst SchemaProp: React.FC<SchemaPropProps> = ({\n name,\n schema,\n parents = [],\n nextPropName,\n isRequired,\n onChange,\n getValue,\n shouldAppendToTitle,\n onAppendValueToTitle,\n onSelectorChange,\n}) => {\n const optionObjectPath = [...parents, name].join('.');\n\n const handleChange = useCallback(\n (val) => {\n onChange(optionObjectPath, val);\n },\n [onChange, optionObjectPath],\n );\n\n const value = schema.type !== 'object' && getValue(optionObjectPath, schema);\n\n const appendToTile = shouldAppendToTitle && shouldAppendToTitle(optionObjectPath);\n\n const shouldAppend = Boolean(appendToTile);\n\n const handleOnAppendValueToTitle = useCallback(() => {\n if (onAppendValueToTitle) {\n onAppendValueToTitle(optionObjectPath);\n }\n }, [onAppendValueToTitle, optionObjectPath]);\n\n if (\n onSelectorChange &&\n (name === 'selector' ||\n (schema.type === 'number' && ['x', 'y', 'top', 'left'].includes(name)))\n ) {\n return (\n <SelectorControl\n label={name}\n type={name === 'selector' ? 'text' : 'number'}\n onChange={handleChange}\n selectorType={name === 'selector' ? 'selector' : 'position'}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isFollowedByPositionProp={nextPropName === 'x' || nextPropName === 'y'}\n fullObjectPath={optionObjectPath}\n isRequired={Boolean(isRequired)}\n onSelectorChange={onSelectorChange}\n defaultValue={schema.default}\n />\n );\n }\n\n if (schema.enum) {\n return (\n <Control\n label={name}\n type=\"select\"\n onChange={handleChange}\n options={schema.enum as string[]}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n }\n\n switch (schema.type as typeof schema.type | 'any') {\n case 'string':\n case 'any':\n return (\n <Control\n label={name}\n type=\"text\"\n onChange={handleChange}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n case 'number':\n case 'integer':\n return (\n <Control\n label={name}\n type=\"number\"\n onChange={handleChange}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n case 'boolean':\n return (\n <Control\n label={name}\n type=\"boolean\"\n onChange={handleChange}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n case 'array': {\n if (!schema.items) return null;\n const items = (schema.items as ActionSchema).enum;\n if (!items) return null;\n return (\n <Control\n label={name}\n type=\"options\"\n onChange={handleChange}\n display=\"inline-check\"\n options={items as string[]}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n }\n case 'object':\n return (\n <div\n style={{\n marginBottom: 6,\n }}\n >\n <p style={{ margin: '6px 0', marginTop: 14 }}>\n {capitalize(startCase(name).toLowerCase())}:\n </p>\n <div style={{ paddingLeft: 12 }}>\n <SchemaRenderer\n schemaProps={schema.properties || {}}\n parents={[...parents, name]}\n required={schema.required}\n onChange={onChange}\n getValue={getValue}\n shouldAppendToTitle={shouldAppendToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n onSelectorChange={onSelectorChange}\n />\n </div>\n </div>\n );\n default:\n return null;\n }\n};\n\nSchemaProp.displayName = 'SchemaProp';\n\nconst MemoizedSchemaProp = React.memo(SchemaProp);\nexport { MemoizedSchemaProp, SchemaProp };\n","import type { ActionSchema } from '../../../typings';\nimport React from 'react';\nimport { MemoizedSchemaProp } from './SchemaProp';\n\nexport interface SchemaRendererProps {\n schemaProps: ActionSchema;\n parents?: string[];\n required?: string[];\n onChange: (objPath: string, val: unknown) => void;\n getValue: (optionObjectPath: string, schema: ActionSchema) => unknown;\n shouldAppendToTitle?: (optionObjectPath: string) => boolean;\n onAppendValueToTitle?: (optionObjectPath: string) => void;\n onSelectorChange?: (objPath: string, val: unknown) => void;\n}\n\nconst SchemaRenderer: React.FC<SchemaRendererProps> = ({\n schemaProps,\n required,\n parents = [],\n onChange,\n getValue,\n shouldAppendToTitle,\n onAppendValueToTitle,\n onSelectorChange,\n}) => {\n return (\n <>\n {Object.keys(schemaProps).map((name, i, array) => {\n const param = schemaProps[name];\n return (\n <MemoizedSchemaProp\n key={name}\n name={name}\n schema={param}\n parents={parents}\n nextPropName={array[i + 1]}\n isRequired={required && required.includes(name)}\n onChange={onChange}\n getValue={getValue}\n shouldAppendToTitle={shouldAppendToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n onSelectorChange={onSelectorChange}\n />\n );\n })}\n </>\n );\n};\n\nSchemaRenderer.displayName = 'SchemaRenderer';\n\nconst MemoizedSchemaRenderer = React.memo(SchemaRenderer);\nexport { MemoizedSchemaRenderer, SchemaRenderer };\n","import type { Definition } from 'ts-to-json';\nimport type { Config } from 'ts-to-json/dist/src/Config';\nimport { Button, Divider, makeStyles } from '@material-ui/core';\nimport * as immutableObject from 'object-path-immutable';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { trpcClient } from '../../api/trpc/client';\nimport { MemoizedSchemaRenderer } from '../../features/schema/components/index';\nimport { Loader } from './Loader';\n\nconst useStyles = makeStyles(\n () => {\n return {\n footer: {\n display: 'flex',\n justifyContent: 'space-between',\n paddingTop: 2,\n },\n main: {\n fontSize: 14,\n height: 400,\n overflowX: 'hidden',\n overflowY: 'auto',\n padding: 5,\n paddingRight: 20,\n },\n };\n },\n { name: 'SchemaFormLoader' },\n);\n\nexport interface SchemaFormProps extends Partial<Config> {\n schemaName: string;\n defaultData?: unknown;\n onSave: (data: unknown) => void;\n active?: boolean;\n FooterComponent?: React.ReactNode;\n}\n\nconst SchemaFormLoader: React.FC<SchemaFormProps> = ({\n defaultData,\n onSave,\n FooterComponent,\n schemaName,\n}) => {\n const classes = useStyles();\n\n const [tempOptions, setTempOptions] = useState(defaultData);\n\n const [reset, setReset] = useState(false);\n\n const requestedSchemaName = useRef<string>();\n\n const { mutate, data: schema } = trpcClient.schema.getSchema.useMutation();\n\n useEffect(() => {\n if (requestedSchemaName.current === schemaName) {\n return;\n }\n\n requestedSchemaName.current = schemaName;\n mutate({ schemaName });\n }, [mutate, schemaName]);\n\n const handleSave = useCallback(() => {\n onSave(tempOptions);\n }, [onSave, tempOptions]);\n\n const handleClear = useCallback(() => {\n onSave({});\n setTempOptions({});\n setReset(true);\n }, [onSave]);\n\n const handleChange = useCallback(\n (path, val) => {\n const options = immutableObject.set(tempOptions, path, val);\n setTempOptions(options);\n },\n [tempOptions],\n );\n\n const getValue = (path) => {\n const val = immutableObject.get(tempOptions, path);\n return val;\n };\n\n useEffect(() => {\n if (reset) setReset(false);\n }, [reset]);\n\n return (\n <>\n <div className={classes.main}>\n <Loader open={schema === undefined} position=\"relative\" />\n {schema && !reset && (\n <MemoizedSchemaRenderer\n schemaProps={schema as unknown as Definition}\n onChange={handleChange}\n getValue={getValue}\n />\n )}\n </div>\n <Divider />\n <div className={classes.footer}>\n <div>{FooterComponent}</div>\n <div>\n <Button onClick={handleClear}>Clear</Button>\n <Button onClick={handleSave}>Save</Button>\n </div>\n </div>\n </>\n );\n};\n\nSchemaFormLoader.displayName = 'SchemaFormLoader';\n\nconst MemoizedSchemaFormLoader = React.memo(SchemaFormLoader);\nexport { MemoizedSchemaFormLoader, SchemaFormLoader };\n","import { Button, DialogActions, TextField } from '@material-ui/core';\nimport React from 'react';\nimport { useFixScreenshotFileName } from '../../hooks';\nimport { Dialog, Loader } from '../common';\n\ninterface Props {\n fixFunction?: boolean;\n onClose: (open: boolean) => void;\n open: boolean;\n}\n\nconst FixScreenshotFileDialog: React.FC<Props> = ({ fixFunction, onClose, open }) => {\n const {\n fixFileNames,\n clearError,\n fixFileNamesError,\n fixFileNamesInProgress,\n handleReload,\n reload,\n functionName,\n handleFunctionNameInput,\n } = useFixScreenshotFileName({ fixFunction });\n\n const handleClose = React.useCallback(() => {\n clearError();\n onClose(false);\n }, [onClose, clearError]);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={handleClose}\n title=\"Fix Screenshot File Name\"\n width=\"400px\"\n >\n <Loader open={fixFileNamesInProgress} />\n\n <div style={{ padding: 20, width: '100%' }}>\n {reload && !fixFileNamesError ? (\n <p>Fix applied, reload the page</p>\n ) : (\n <>\n <p>\n Screenshot file name consist of the story title and story function name,\n when the title or function name changes, plugin is no longer able to\n detect the screenshots, hence it wont list the screenshots in the panel.\n </p>\n <p>\n This utility will apply changes to the screenshot file name and playwright\n config file.\n </p>\n </>\n )}\n {fixFunction && (\n <TextField\n label=\"Enter previous name export function\"\n variant=\"outlined\"\n onChange={handleFunctionNameInput}\n value={functionName}\n fullWidth={true}\n focused={true}\n required={true}\n />\n )}\n\n {fixFileNamesError && <p style={{ color: 'red' }}>{fixFileNamesError}</p>}\n </div>\n <DialogActions>\n <>\n {reload ? (\n <Button onClick={handleReload} color=\"primary\">\n Reload Page\n </Button>\n ) : (\n <>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n <Button onClick={fixFileNames} color=\"primary\" autoFocus>\n Apply Fix\n </Button>\n </>\n )}\n </>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nFixScreenshotFileDialog.displayName = 'FixScreenshotFileDialog';\n\nconst MemoizedFixScreenshotFileDialog = React.memo(FixScreenshotFileDialog);\nexport { FixScreenshotFileDialog, MemoizedFixScreenshotFileDialog };\n","import type { ActionSchema, StoryAction } from '../../../../../typings';\nimport * as immutableObject from 'object-path-immutable';\n\nexport function getActionOptionValue(\n action: StoryAction,\n optionPath: string,\n schema?: ActionSchema,\n): undefined | unknown {\n if (action && action.args) {\n return immutableObject.get(action.args, optionPath);\n }\n return schema ? schema.default : undefined;\n}\n","import type { Definition } from 'ts-to-json';\nimport type { ActionSchema } from '../../../../typings';\nimport React, { useCallback } from 'react';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { MemoizedSchemaRenderer } from '../../../schema/components/index';\nimport { useEditorAction } from '../../hooks/use-editor-action';\nimport { setActionOptions, toggleSubtitleItem } from '../../store/actions';\nimport { getActionOptionValue } from './utils/index';\n\nexport interface ActionSchemaRendererProps {\n schema: ActionSchema;\n actionId: string;\n actionSetId: string;\n}\n\nconst ActionSchemaRenderer: React.FC<ActionSchemaRendererProps> = (props) => {\n const { schema, actionId, actionSetId } = props;\n\n const story = useCurrentStoryData();\n const storyId = story?.id;\n\n const action = useEditorAction(storyId || '', actionId);\n\n const handleChange = useCallback(\n (objPath, val) => {\n if (!storyId) return;\n\n setActionOptions({\n actionId,\n actionSetId,\n objPath,\n storyId,\n val,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n const handleGetValue = useCallback(\n (optionObjectPath: string, schema: ActionSchema) => {\n if (!action) return undefined;\n const val = getActionOptionValue(action, optionObjectPath, schema);\n return val;\n },\n [action],\n );\n\n const shouldAppendToTitle = useCallback(\n (optionObjectPath: string) => {\n if (!action || !action.subtitleItems) {\n return undefined;\n }\n\n return action.subtitleItems.includes(optionObjectPath);\n },\n [action],\n );\n\n const handleOnAppendValueToTitle = useCallback(\n (optionObjectPath) => {\n if (!storyId) return;\n\n toggleSubtitleItem({\n actionId,\n actionOptionPath: optionObjectPath,\n actionSetId,\n storyId,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n const handleSelectorChange = useCallback(\n (objPath: string, val: unknown) => {\n if (!storyId) return;\n\n setActionOptions({\n actionId,\n actionSetId,\n objPath,\n storyId,\n val,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n if (!action) return null;\n\n return (\n <div>\n <MemoizedSchemaRenderer\n schemaProps={schema.parameters as Definition}\n required={schema.required}\n onChange={handleChange}\n getValue={handleGetValue}\n shouldAppendToTitle={shouldAppendToTitle as (optionObjectPath: string) => boolean}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n onSelectorChange={handleSelectorChange}\n />\n </div>\n );\n};\n\nActionSchemaRenderer.displayName = 'ActionSchemaRenderer';\n\nexport { ActionSchemaRenderer };\n","import type { DragHandleProps } from '../../../../components/common';\nimport { AccordionDetails, Chip, makeStyles, Tooltip } from '@material-ui/core';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport { IconButton } from '@storybook/components';\nimport { QuestionIcon, TrashIcon } from '@storybook/icons';\nimport React, { memo, useCallback, useEffect, useState } from 'react';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { capitalize, getActionSchema } from '../../../../utils';\nimport { useEditorAction } from '../../hooks/use-editor-action';\nimport { deleteActionSetAction, toggleActionExpansion } from '../../store/actions';\n\nimport { useActionSetStoreState } from '../../store/selectors';\nimport { ActionSchemaRenderer } from './ActionSchemaRenderer';\nimport { getActionOptionValue } from './utils/index';\n\nconst useStyles = makeStyles(\n (theme) => {\n const { divider } = theme.palette;\n return {\n chip: {\n color: theme.palette.text.primary,\n height: 20,\n maxWidth: 150,\n },\n detailPanel: {\n display: 'block',\n },\n expanded: {\n transform: 'rotate(0deg) !important',\n },\n expansionPanel: {\n border: `1px solid ${divider}`,\n boxShadow: 'none',\n },\n heading: {\n alignItems: 'center',\n display: 'flex',\n fontWeight: theme.typography.fontWeightRegular as never,\n marginRight: 10,\n },\n icon: {\n fontSize: 20,\n },\n root: {\n padding: 4,\n width: '100%',\n },\n subtitleWrap: {\n width: '100%',\n },\n summary: {\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n summaryInner: {\n display: 'flex',\n },\n };\n },\n { name: 'ActionOptions' },\n);\n\nexport interface ActionOptionsProps {\n actionId: string;\n actionName: string;\n DragHandle: React.ComponentType<DragHandleProps>;\n actionSetId: string;\n dragHandleProps?: DragHandleProps;\n}\n\nconst ActionOptions: React.FC<ActionOptionsProps> = memo((props) => {\n const { actionId, actionName, DragHandle, actionSetId, dragHandleProps } = props;\n\n const [subtitle, setSubtitle] = useState<string[]>();\n\n const story = useCurrentStoryData();\n const storyId = story?.id;\n const state = useActionSetStoreState();\n\n const action = useEditorAction(storyId || '', actionId);\n const schema = getActionSchema(state.actionSchema, actionName);\n\n const classes = useStyles();\n\n const handleExpand = useCallback(() => {\n toggleActionExpansion(actionId);\n }, [actionId]);\n\n useEffect(() => {\n if (!action || !action.subtitleItems) return;\n const titles = action.subtitleItems.reduce<string[]>((arr, path) => {\n const label = path.split('.').pop();\n const value = getActionOptionValue(action, path);\n if (value) {\n arr.push(`${label}: ${value}`);\n }\n return arr;\n }, []);\n\n setSubtitle(titles);\n }, [action, actionName]);\n\n const handleDeleteAction = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!storyId) return;\n\n deleteActionSetAction({\n actionId,\n actionSetId,\n storyId,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n const hasParameters =\n schema && schema.parameters && Object.keys(schema.parameters).length !== 0;\n\n return (\n <div className={classes.root}>\n <Accordion\n expanded={\n state.expandedActions &&\n state.expandedActions[actionId] === true &&\n hasParameters\n }\n onChange={handleExpand}\n className={classes.expansionPanel}\n square\n TransitionProps={{\n timeout: 100,\n }}\n >\n <AccordionSummary\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n classes={{\n content: classes.summary,\n expanded: classes.expanded,\n }}\n >\n <div className={classes.summaryInner}>\n <DragHandle {...dragHandleProps} />\n <div className={classes.heading}>\n {capitalize(schema && schema.title ? schema.title : actionName)}\n </div>\n\n <div className={classes.subtitleWrap}>\n {subtitle &&\n subtitle.map((sub) => (\n <Chip\n className={classes.chip}\n key={sub}\n size=\"small\"\n label={sub}\n variant=\"outlined\"\n title={sub}\n />\n ))}\n </div>\n </div>\n <div>\n <Tooltip\n title={schema && schema.description ? schema.description : 'Not Available!'}\n >\n <IconButton>\n <QuestionIcon className={classes.icon} />\n </IconButton>\n </Tooltip>\n <IconButton onClick={handleDeleteAction}>\n <TrashIcon className={classes.icon} />\n </IconButton>\n </div>\n </AccordionSummary>\n <AccordionDetails className={classes.detailPanel}>\n {state.expandedActions && state.expandedActions[actionId] && hasParameters && (\n <ActionSchemaRenderer\n schema={schema}\n actionId={actionId}\n actionSetId={actionSetId}\n />\n )}\n </AccordionDetails>\n </Accordion>\n </div>\n );\n});\n\nActionOptions.displayName = 'ActionOptions';\n\nexport { ActionOptions };\n","import type { DragEndEvent, DragOverEvent } from '@dnd-kit/core';\nimport type { ActionSet } from '../../../../typings';\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { makeStyles } from '@material-ui/core';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { DragHandle, ListWrapper } from '../../../../components/common';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { moveActionSetAction } from '../../store/actions';\nimport { ActionOptions } from './ActionOptions';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { text },\n } = theme;\n\n return {\n noActionMessage: {\n color: text.primary,\n margin: 20,\n textAlign: 'center',\n },\n };\n },\n { name: 'ActionSetList' },\n);\n\ninterface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\ninterface SortableItemProps {\n action: ActionSet['actions'][number];\n actionSetId: string;\n sortableId: string;\n}\n\nexport const SortableItem: React.FC<SortableItemProps> = ({\n action,\n actionSetId,\n sortableId,\n}) => {\n const {\n attributes,\n listeners,\n setActivatorNodeRef,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortableId });\n\n return (\n <div\n ref={setNodeRef}\n style={{\n opacity: isDragging ? 0.8 : 1,\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <ActionOptions\n key={action.id}\n actionName={action.name}\n actionId={action.id}\n DragHandle={DragHandle}\n actionSetId={actionSetId}\n dragHandleProps={{\n ...(attributes as React.HTMLAttributes<HTMLSpanElement>),\n ...(listeners as React.HTMLAttributes<HTMLSpanElement>),\n setNodeRef: setActivatorNodeRef,\n }}\n />\n </div>\n );\n};\n\ninterface SortableListProps {\n actionSetId: string;\n items: ActionSet['actions'];\n onSortEnd?: (e: SortableIndexChangeEvent) => void;\n}\n\nexport const SortableList: React.FC<SortableListProps> = ({\n items,\n actionSetId,\n onSortEnd,\n}) => {\n const [localItems, setLocalItems] = useState(items);\n\n useEffect(() => {\n setLocalItems(items);\n }, [items]);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragOver = useCallback(({ active, over }: DragOverEvent) => {\n if (!over || active.id === over.id) return;\n setLocalItems((prev) => {\n const oldIndex = prev.findIndex((a) => a.id === active.id);\n const newIndex = prev.findIndex((a) => a.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(prev, oldIndex, newIndex);\n });\n }, []);\n\n const handleDragCancel = useCallback(() => {\n setLocalItems(items);\n }, [items]);\n\n const handleDragEnd = useCallback(\n ({ active }: DragEndEvent) => {\n const oldIndex = items.findIndex((a) => a.id === active.id);\n const newIndex = localItems.findIndex((a) => a.id === active.id);\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex || !onSortEnd) {\n setLocalItems(items);\n return;\n }\n\n onSortEnd({ newIndex, oldIndex });\n },\n [items, localItems, onSortEnd],\n );\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={localItems.map((action) => action.id)}\n strategy={verticalListSortingStrategy}\n >\n <div>\n {localItems.map((action) => (\n <SortableItem\n key={`item-${action.id}`}\n action={action}\n actionSetId={actionSetId}\n sortableId={action.id}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n );\n};\n\ninterface ActionListProps {\n actionSet: ActionSet;\n}\n\nconst ActionList: React.FC<ActionListProps> = ({ actionSet }) => {\n const classes = useStyles();\n\n const story = useCurrentStoryData();\n\n const handleSortEnd = useCallback(\n (e: SortableIndexChangeEvent) => {\n if (!story) return;\n\n moveActionSetAction({\n actionSetId: actionSet.id,\n newIndex: e.newIndex,\n oldIndex: e.oldIndex,\n storyId: story.id,\n });\n },\n [actionSet.id, story],\n );\n\n if (!actionSet || !actionSet.actions.length) {\n return (\n <div className={classes.noActionMessage}>\n <div>Click the '+' button to create an action.</div>\n </div>\n );\n }\n\n return (\n <ListWrapper>\n <SortableList\n items={actionSet.actions}\n onSortEnd={handleSortEnd}\n actionSetId={actionSet.id}\n />\n </ListWrapper>\n );\n};\n\nActionList.displayName = 'ActionList';\n\nexport { ActionList };\n","import type { Ref } from 'react';\nimport { MenuItem } from '@material-ui/core';\nimport React, { forwardRef, memo, useCallback } from 'react';\n\nexport interface ActionMenuItemBase {\n label: string;\n name: string;\n}\n\nexport interface ActionMenuItemProps extends ActionMenuItemBase {\n onChange: (key: string) => void;\n}\n\nconst ActionMenuItem: React.FC<ActionMenuItemProps> = memo(\n forwardRef((props, ref: Ref<HTMLLIElement>) => {\n const { onChange, label, name } = props;\n\n const handleChange = useCallback(() => {\n onChange(name);\n }, [name, onChange]);\n\n return (\n <MenuItem ref={ref} onClick={handleChange}>\n {label}\n </MenuItem>\n );\n }),\n);\n\nActionMenuItem.displayName = 'ActionMenuItem';\n\nexport { ActionMenuItem };\n","import { Definition } from 'ts-to-json';\nimport { ActionMenuItemBase } from '../ActionMenuItem';\n\nexport const getMenu = (\n def: Definition,\n parents: string[] = [],\n): ActionMenuItemBase[] => {\n const actionArr = Object.keys(def);\n let menuItems: ActionMenuItemBase[] = [];\n actionArr.forEach((actionKey) => {\n const prop = def[actionKey];\n\n if (prop.type === 'object') {\n const childProps = getMenu(prop.properties, [...parents, actionKey]);\n menuItems = [...menuItems, ...childProps];\n } else {\n const label = [...parents, actionKey];\n menuItems.push({\n label: label.join('.'),\n name: label.join('.'),\n });\n }\n });\n\n return menuItems.sort((a, b) => {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n });\n};\n","import { FavouriteActionSet } from '../../../../../typings/story-action';\n\nexport const filterFavouriteActions = (\n actions: FavouriteActionSet[],\n storyId: string,\n) => {\n return actions.reduce<FavouriteActionSet[]>((arr, item) => {\n const visibleTo = item.visibleTo || '*';\n\n if (visibleTo === '*' || new RegExp(visibleTo).test(storyId)) {\n arr.push(item);\n }\n return arr;\n }, []);\n};\n","import type { ActionMenuItemBase } from './ActionMenuItem';\nimport { makeStyles, Menu } from '@material-ui/core';\nimport React, { memo, useCallback, useState } from 'react';\nimport { useActionSetStoreState } from '../../store/index';\nimport { ActionMenuItem } from './ActionMenuItem';\nimport { getMenu } from './utils/index';\n\nconst useStyles = makeStyles(\n () => {\n return {\n menu: {\n minWidth: 100,\n },\n };\n },\n { name: 'ActionMenu' },\n);\n\nexport interface ActionMenuProps {\n onChange: (actionKey: string) => void;\n anchorEl: null | Element;\n onClose: () => void;\n}\n\nconst ActionMenu: React.FC<ActionMenuProps> = memo((props) => {\n const { onChange, onClose, anchorEl } = props;\n\n const state = useActionSetStoreState();\n\n const [actionItems, setActionItems] = useState<ActionMenuItemBase[]>([]);\n\n const classes = useStyles();\n\n React.useEffect(() => {\n if (!state.actionSchema) return undefined;\n const actionList = getMenu(state.actionSchema);\n setActionItems(actionList);\n }, [state.actionSchema]);\n\n const handleChange = useCallback(\n (key: string) => {\n onChange(key);\n },\n [onChange],\n );\n\n return (\n <Menu\n id=\"simple-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={onClose}\n className={classes.menu}\n >\n {actionItems.map((action) => (\n <ActionMenuItem\n key={action.name}\n name={action.name}\n label={action.label}\n onChange={handleChange}\n >\n Profile\n </ActionMenuItem>\n ))}\n </Menu>\n );\n});\n\nActionMenu.displayName = 'ActionMenu';\n\nexport { ActionMenu };\n","import { IconButton } from '@storybook/components';\nimport { CrossIcon, EditIcon, PlusIcon, SaveIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { useActionSchemaLoader } from '../../../../hooks';\nimport { ActionMenu } from './ActionMenu';\n\nexport interface ActionSetEditorIconsProps {\n onSave: () => void;\n onEditTitle: () => void;\n onCancel: () => void;\n onAddAction: (actionName: string) => void;\n}\n\nconst ActionSetEditorIcons: React.FC<ActionSetEditorIconsProps> = (props) => {\n const { onSave, onEditTitle: onEditDescription, onCancel, onAddAction } = props;\n\n const { loading } = useActionSchemaLoader();\n\n const [menuAnchorEl, setMenuAnchorEl] = React.useState<null | Element>(null);\n\n const handleMenuOpen = useCallback((event: React.SyntheticEvent<Element, Event>) => {\n setMenuAnchorEl(event.currentTarget);\n }, []);\n\n const handleMenuClose = useCallback(() => {\n setMenuAnchorEl(null);\n }, []);\n\n const handleMenuChange = useCallback(\n (action: string) => {\n onAddAction(action);\n setMenuAnchorEl(null);\n },\n [onAddAction],\n );\n\n return (\n <>\n <Loader open={loading} />\n <IconButton\n size=\"small\"\n className=\"edit-desc\"\n onClick={onEditDescription}\n title=\"Edit Title\"\n >\n <EditIcon />\n </IconButton>\n <IconButton\n size=\"small\"\n className=\"open-action-menu\"\n onClick={handleMenuOpen}\n title=\"Add Actions\"\n >\n <PlusIcon />\n </IconButton>\n <IconButton\n size=\"small\"\n className=\"save-action\"\n title=\"Save Actions\"\n onClick={onSave}\n >\n <SaveIcon />\n </IconButton>\n <IconButton size=\"small\" className=\"Cancel\" title=\"Cancel\" onClick={onCancel}>\n <CrossIcon />\n </IconButton>\n <ActionMenu\n onClose={handleMenuClose}\n anchorEl={menuAnchorEl}\n onChange={handleMenuChange}\n />\n </>\n );\n};\n\nActionSetEditorIcons.displayName = 'ActionSetEditorIcons';\n\nexport { ActionSetEditorIcons };\n","import type { ActionSet } from '../../../../typings';\nimport { Divider, makeStyles } from '@material-ui/core';\nimport React, { useCallback } from 'react';\nimport { inputModal, ListItemWrapper, Loader } from '../../../../components/common';\nimport { TEMP_ACTION_SET } from '../../../../constants';\nimport { useActionEditor, useActionSchemaLoader } from '../../../../hooks';\nimport { ActionList } from '../actions/ActionList';\nimport { ActionSetEditorIcons } from './ActionSetEditorIcons';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { secondary },\n } = theme;\n\n return {\n divider: {\n backgroundColor: secondary.main,\n },\n root: {\n height: '100%',\n },\n };\n },\n { name: 'ActionSetEditor' },\n);\n\ninterface Props {\n actionSet: ActionSet;\n}\n\nconst ActionSetEditor: React.FC<Props> = ({ actionSet }) => {\n const { handleAddAction, handleDescriptionChange, handleSave, cancelEditActionSet } =\n useActionEditor(actionSet);\n\n const classes = useStyles();\n\n const { loading } = useActionSchemaLoader();\n\n const toggleEditDescription = useCallback(() => {\n void inputModal.show({\n onSave: handleDescriptionChange,\n title: 'Edit Description',\n value: actionSet.title,\n });\n }, [actionSet.title, handleDescriptionChange]);\n\n return (\n <ListItemWrapper\n tooltip={actionSet.temp ? actionSet.title + TEMP_ACTION_SET : actionSet.title}\n title={actionSet.temp ? `${actionSet.title} *` : actionSet.title}\n draggable={true}\n selected={true}\n secondaryColor={true}\n icons={\n <ActionSetEditorIcons\n onAddAction={handleAddAction}\n onCancel={cancelEditActionSet}\n onEditTitle={toggleEditDescription}\n onSave={handleSave}\n />\n }\n >\n <div className={classes.root}>\n <Divider className={classes.divider} />\n <ActionList actionSet={actionSet} />\n <Loader open={loading} />\n </div>\n </ListItemWrapper>\n );\n};\n\nActionSetEditor.displayName = 'ActionSetEditor';\n\nexport { ActionSetEditor };\n","import type { FavouriteActionSet } from '../../../../typings';\n\nimport {\n Button,\n capitalize,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormControlLabel,\n Popover,\n Radio,\n RadioGroup,\n TextField,\n} from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport { StarIcon } from '@storybook/icons';\nimport React from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { useAnchorEl } from '../../../../hooks/use-anchor-el';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { toast } from '../../../../utils/toast';\n\nexport interface AddFavouriteActionProps {\n item: FavouriteActionSet;\n}\n\nconst AddFavouriteAction: React.FC<AddFavouriteActionProps> = (props) => {\n const { item } = props;\n\n const { anchorEl, setAnchorEl, clearAnchorEl } = useAnchorEl();\n\n const [input, setInput] = React.useState<string>('*');\n\n const [radioValue, setRadioValue] = React.useState('*');\n\n const data = useCurrentStoryData();\n\n const { mutateAsync: addFavouriteAction } =\n trpcClient.favouriteActions.addFavouriteAction.useMutation();\n\n const { parent = 'parent' } = data || {};\n\n const onAddToFavourite = React.useCallback(async () => {\n item.visibleTo = input;\n clearAnchorEl();\n try {\n await addFavouriteAction(item);\n toast.success(\n // prettier-ignore\n `Successfully added action to favourites`,\n { duration: 5000 },\n );\n } catch (error) {\n toast.error(\n // prettier-ignore\n `An error has occurred:\\n ${(error as { message?: string }).message || 'Unknown error'}`,\n { duration: 5000 },\n );\n }\n }, [addFavouriteAction, clearAnchorEl, input, item]);\n\n const handleRadioChange = (_event: React.ChangeEvent<HTMLInputElement>, v) => {\n setInput(v);\n setRadioValue(v);\n };\n\n return (\n <>\n <IconButton\n className=\"add-favourite\"\n onClick={setAnchorEl}\n size=\"small\"\n title=\"Add To Favourite\"\n >\n <StarIcon />\n </IconButton>\n {anchorEl && (\n <Popover anchorEl={anchorEl} open={true} onClose={clearAnchorEl}>\n <DialogTitle>Define witch story(s) can use this action:</DialogTitle>\n <DialogContent>\n <FormControl>\n <RadioGroup row value={radioValue} onChange={handleRadioChange}>\n <FormControlLabel\n value=\"*\"\n control={<Radio size=\"small\" />}\n label=\"All Stories\"\n />\n <FormControlLabel\n value={parent}\n control={<Radio size=\"small\" />}\n label={`${capitalize(parent)} Stories`}\n />\n </RadioGroup>\n </FormControl>\n <div>\n <TextField\n value={input}\n onChange={(e) => setInput(e.target.value)}\n helperText=\"Or enter regex expression\"\n fullWidth\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onAddToFavourite}>Save</Button>\n </DialogActions>\n </Popover>\n )}\n </>\n );\n};\n\nAddFavouriteAction.displayName = 'AddFavouriteAction';\n\nexport { AddFavouriteAction };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ActionSet } from '../../../../typings';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { IconButton } from '@storybook/components';\nimport { CopyIcon, EditIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport {\n CheckBox,\n DeleteConfirmationButton,\n ListItemWrapper,\n} from '../../../../components/common';\n\nimport { TEMP_ACTION_SET } from '../../../../constants';\nimport { ActionSetEditor } from './ActionSetEditor';\nimport { AddFavouriteAction } from './AddFavouriteAction';\n\nexport interface ActionSetActionSetListItemProps {\n onEdit: (item: ActionSet) => void;\n onDelete: (item: ActionSet) => void;\n onCheckBoxClick?: (item: ActionSet) => void;\n onDuplicate?: (item: ActionSet) => void;\n item: ActionSet;\n checked?: boolean;\n title: string;\n isEditing?: boolean;\n hideIcons?: boolean;\n index?: number;\n sortableId?: string;\n}\n\nexport function ActionSetListItem({\n onEdit,\n onDelete,\n item,\n onCheckBoxClick,\n checked,\n title,\n isEditing,\n hideIcons,\n onDuplicate,\n sortableId,\n}: ActionSetActionSetListItemProps) {\n const {\n attributes,\n listeners,\n setActivatorNodeRef,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n disabled: Boolean(isEditing),\n id: sortableId ?? item.id,\n });\n\n const handleEdit = useCallback(() => {\n onEdit(item);\n }, [item, onEdit]);\n\n const handleCheckStateChanged = useCallback(() => {\n if (onCheckBoxClick) {\n onCheckBoxClick(item);\n }\n }, [item, onCheckBoxClick]);\n\n const handleDeleteConfirmation = useCallback(() => {\n onDelete(item);\n }, [item, onDelete]);\n\n const handleDuplicateActionSet = useCallback(() => {\n if (onDuplicate) {\n onDuplicate(item);\n }\n }, [item, onDuplicate]);\n\n if (isEditing) {\n return (\n <div\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <ActionSetEditor actionSet={item} />\n </div>\n );\n }\n\n return (\n <div\n ref={setNodeRef}\n style={{\n opacity: isDragging ? 0.8 : 1,\n position: 'relative',\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: 1,\n }}\n >\n <ListItemWrapper\n tooltip={title + (item.temp ? TEMP_ACTION_SET : '')}\n title={title + (item.temp ? ' *' : '')}\n draggable={true}\n selected={checked}\n dragHandleProps={{\n ...(attributes as React.HTMLAttributes<HTMLSpanElement>),\n ...(listeners as React.HTMLAttributes<HTMLSpanElement>),\n setNodeRef: setActivatorNodeRef,\n }}\n icons={\n <>\n {!hideIcons && (\n <IconButton\n className=\"edit-button\"\n onClick={handleEdit}\n size=\"small\"\n title=\"Edit\"\n >\n <EditIcon />\n </IconButton>\n )}\n <IconButton\n className=\"duplicate-button\"\n onClick={handleDuplicateActionSet}\n size=\"small\"\n title=\"Duplicate Action\"\n >\n <CopyIcon />\n </IconButton>\n\n {!hideIcons && <AddFavouriteAction item={item} />}\n <CheckBox onClick={handleCheckStateChanged} checked={Boolean(checked)} />\n {!hideIcons && (\n <DeleteConfirmationButton onDelete={handleDeleteConfirmation} />\n )}\n </>\n }\n />\n </div>\n );\n}\n\nActionSetListItem.displayName = 'ActionSetListItem';\n\nconst SortableActionSetListItem: React.FC<ActionSetActionSetListItemProps> = (props) => (\n <ActionSetListItem {...props} />\n);\n\nSortableActionSetListItem.displayName = 'SortableActionSetListItem';\n\nexport { SortableActionSetListItem };\n","import type { DragEndEvent, DragOverEvent } from '@dnd-kit/core';\nimport type { ActionSet } from '../../../../typings';\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { ListWrapper, Loader } from '../../../../components/common';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { toast } from '../../../../utils/toast';\nimport { useCopyActionSet } from '../../hooks/use-copy-action-set';\nimport { useCurrentStoryActionSets } from '../../hooks/use-current-story-action-sets';\nimport { useStoryActionSetsLoader } from '../../hooks/use-story-action-sets-loader';\nimport {\n deleteActionSet as deleteActionSetFromStore,\n editActionSet,\n toggleCurrentActionSet,\n} from '../../store/actions';\nimport { SortableActionSetListItem } from './ActionSetListItem';\n\nconst useStyles = makeStyles(\n () => {\n return {\n message: {\n marginTop: 20,\n textAlign: 'center',\n },\n };\n },\n { name: 'ActionSetList' },\n);\n\ninterface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\ninterface ActionSetListProps {\n onSortEnd?: (e: SortableIndexChangeEvent) => void;\n}\n\nconst ActionSetList: React.FC<ActionSetListProps> = ({ onSortEnd }) => {\n const classes = useStyles();\n\n const storyData = useCurrentStoryData();\n\n const { copyActionSet, inProgress: copyInProgress } = useCopyActionSet(storyData);\n\n const { mutateAsync: deleteActionSet } =\n trpcClient.actionSet.deleteActionSet.useMutation();\n\n const { storyActionSets, currentActionSets, state } = useCurrentStoryActionSets();\n\n const { loading } = useStoryActionSetsLoader();\n\n const handleDelete = useCallback(\n async (actionSet: ActionSet) => {\n if (!storyData) return;\n\n try {\n await deleteActionSet({\n actionSetId: actionSet.id,\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n deleteActionSetFromStore({\n actionSetId: actionSet.id,\n storyId: storyData.id,\n });\n } catch (error) {\n toast.error(\n error instanceof Error ? error.message : 'Failed to delete action set',\n );\n }\n },\n [deleteActionSet, storyData],\n );\n\n const handleEdit = useCallback((actionSet: ActionSet) => {\n editActionSet(actionSet);\n }, []);\n\n const handleCheckBox = useCallback((actionSet: ActionSet) => {\n toggleCurrentActionSet(actionSet.id);\n }, []);\n\n const isEditing = state.orgEditingActionSet !== undefined;\n\n const [localItems, setLocalItems] = useState<ActionSet[]>(storyActionSets);\n\n useEffect(() => {\n setLocalItems(storyActionSets);\n }, [storyActionSets]);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragOver = useCallback(({ active, over }: DragOverEvent) => {\n if (!over || active.id === over.id) return;\n setLocalItems((prev) => {\n const oldIndex = prev.findIndex((x) => x.id === active.id);\n const newIndex = prev.findIndex((x) => x.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(prev, oldIndex, newIndex);\n });\n }, []);\n\n const handleDragCancel = useCallback(() => {\n setLocalItems(storyActionSets);\n }, [storyActionSets]);\n\n const handleDragEnd = useCallback(\n ({ active }: DragEndEvent) => {\n const oldIndex = storyActionSets.findIndex((x) => x.id === active.id);\n const newIndex = localItems.findIndex((x) => x.id === active.id);\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex || !onSortEnd) {\n setLocalItems(storyActionSets);\n return;\n }\n\n onSortEnd({ newIndex, oldIndex });\n },\n [localItems, onSortEnd, storyActionSets],\n );\n\n return (\n <ListWrapper>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={localItems.map((actionSet) => actionSet.id)}\n strategy={verticalListSortingStrategy}\n >\n {localItems.length > 0 ? (\n localItems.map((actionSet, i) => (\n <SortableActionSetListItem\n index={i}\n sortableId={actionSet.id}\n key={actionSet.id + isEditing}\n item={actionSet}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onCheckBoxClick={handleCheckBox}\n checked={currentActionSets.includes(actionSet.id)}\n title={actionSet.title}\n onDuplicate={copyActionSet}\n isEditing={\n isEditing &&\n state.orgEditingActionSet &&\n state.orgEditingActionSet.id === actionSet.id\n }\n hideIcons={isEditing}\n />\n ))\n ) : (\n <div className={clsx(classes.message, 'no-data')}>\n <div>No action set to display!</div>\n <div>Click the '+' button to create an action set.</div>\n </div>\n )}\n </SortableContext>\n </DndContext>\n <Loader open={loading || copyInProgress} />\n </ListWrapper>\n );\n};\n\nActionSetList.displayName = 'ActionSetList';\n\nexport { ActionSetList };\n","import type { FavouriteActionSet } from '../../../../typings';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport { IconButton, ListItem, WithTooltip } from '@storybook/components';\nimport { TrashIcon } from '@storybook/icons';\nimport { nanoid } from 'nanoid';\nimport React from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { addActionSet as addActionSetToStore } from '../../store/actions';\nimport { filterFavouriteActions } from './utils/filter-favourite-actions';\n\nconst useStyles = makeStyles(\n () => {\n return {\n menu: {\n minWidth: 100,\n },\n };\n },\n { name: 'ActionMenu' },\n);\n\nexport interface FavouriteActionsProps {\n children?: React.ReactNode;\n getContainerHeight?: () => number | undefined;\n}\n\nconst defaults: FavouriteActionSet[] = [\n {\n actions: [\n {\n id: 'Kj6iSI1D3BIF1yX',\n name: 'takeScreenshot',\n },\n ],\n id: '1--default',\n title: 'Take screenshot',\n visibleTo: '*',\n },\n {\n actions: [\n {\n id: 'zjgHFLzuMbXG',\n name: 'takeScreenshotAll',\n },\n ],\n id: '2--default',\n title: 'Take screenshot of all actions',\n visibleTo: '*',\n },\n];\n\nconst FavouriteActions: React.FC<FavouriteActionsProps> = (props) => {\n const { children, getContainerHeight } = props;\n\n const [actionSets, setActionSets] = React.useState<FavouriteActionSet[]>(defaults);\n\n const { mutateAsync: saveActionSet } = trpcClient.actionSet.saveActionSet.useMutation();\n\n const { mutateAsync: deleteFavouriteAction } =\n trpcClient.favouriteActions.deleteFavouriteAction.useMutation();\n\n const { refetch: refetchFavouriteActions } =\n trpcClient.favouriteActions.getFavouriteActions.useQuery(undefined, {\n enabled: false,\n });\n\n const storyData = useCurrentStoryData();\n\n const { id: storyId } = storyData || {};\n\n const classes = useStyles();\n\n const loadActions = React.useCallback(() => {\n refetchFavouriteActions().then(({ data: result }) => {\n const actions = [\n ...defaults,\n ...filterFavouriteActions(result || [], storyId ?? ''),\n ];\n\n setActionSets(actions);\n });\n }, [refetchFavouriteActions, storyId]);\n\n const onAddQuickAction = async (item: FavouriteActionSet) => {\n if (!storyData || !storyId) return;\n\n const id = nanoid(12);\n const newActionSet: FavouriteActionSet = {\n ...item,\n id,\n visibleTo: undefined,\n };\n\n await saveActionSet({\n actionSet: newActionSet,\n filePath: storyData.filePath,\n storyId,\n });\n\n addActionSetToStore({\n actionSet: newActionSet,\n isNew: false,\n selected: true,\n storyId,\n });\n };\n\n const deleteAction = async (actionSetId: string) => {\n await deleteFavouriteAction({ actionSetId });\n loadActions();\n };\n\n React.useEffect(() => {\n loadActions();\n }, [loadActions]);\n\n return (\n <WithTooltip\n closeOnOutsideClick\n placement=\"bottom-start\"\n trigger=\"click\"\n tooltip={({ onHide }) => {\n const containerHeight = getContainerHeight?.();\n return (\n <div\n className={classes.menu}\n style={{\n maxHeight: containerHeight ? `${containerHeight - 50}px` : '50vh',\n overflowY: 'auto',\n }}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {actionSets.map((item) => {\n return (\n <ListItem\n key={item.id}\n title={capitalize(item.title)}\n right={\n <IconButton\n disabled={item.id.endsWith('--default')}\n onClick={(e) => {\n e.stopPropagation();\n void deleteAction(item.id);\n onHide();\n }}\n >\n <TrashIcon fontSize=\"small\" />\n </IconButton>\n }\n onClick={async () => {\n await onAddQuickAction(item);\n onHide();\n }}\n />\n );\n })}\n </div>\n );\n }}\n >\n {children}\n </WithTooltip>\n );\n};\n\nFavouriteActions.displayName = 'FavouriteActions';\n\nexport { FavouriteActions };\n","import { IconButton } from '@storybook/components';\nimport { PlusIcon, RefreshIcon, StarIcon } from '@storybook/icons';\nimport React from 'react';\nimport { DeleteConfirmationButton, Toolbar } from '../../../../components/common';\nimport { FavouriteActions } from './FavouriteActions';\n\nexport interface ActionToolbarProps {\n onAddActionSet: () => void;\n onReset: () => void;\n onFavoriteActionsClick?: () => void;\n onDeleteSelectedActionSets: () => void;\n deleteDisabled?: boolean;\n getContainerHeight?: () => number | undefined;\n}\n\nconst ActionToolbar: React.FC<ActionToolbarProps> = (props) => {\n const {\n onAddActionSet,\n onReset,\n onFavoriteActionsClick,\n onDeleteSelectedActionSets,\n deleteDisabled,\n getContainerHeight,\n } = props;\n\n return (\n <>\n <Toolbar border={['bottom']}>\n <div className=\"left\">\n <span>Action Sets</span>\n </div>\n <div className=\"right\">\n <FavouriteActions getContainerHeight={getContainerHeight}>\n <IconButton onClick={onFavoriteActionsClick} title=\"Favourite Actions\">\n <StarIcon />\n </IconButton>\n </FavouriteActions>\n <IconButton onClick={onReset} title=\"Reset\">\n <RefreshIcon />\n </IconButton>\n\n <DeleteConfirmationButton\n disabled={deleteDisabled}\n onDelete={onDeleteSelectedActionSets}\n IconButton={IconButton}\n />\n\n <IconButton onClick={onAddActionSet} title=\"Add Action Set\">\n <PlusIcon />\n </IconButton>\n </div>\n </Toolbar>\n </>\n );\n};\n\nActionToolbar.displayName = 'ActionToolbar';\n\nexport { ActionToolbar };\n","import type { ActionSet } from '../../../../typings';\nimport { useStorybookState } from '@storybook/manager-api';\nimport { nanoid } from 'nanoid';\nimport React, { useCallback, useEffect } from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { inputModal } from '../../../../components/common';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { useCurrentActions } from '../../hooks/use-current-actions';\nimport {\n addActionSet as addActionSetAction,\n cancelEditActionSet,\n clearCurrentActionSets,\n deleteActionSet as deleteActionSetFromStore,\n deleteTempActionSets,\n sortActionSets,\n} from '../../store/actions';\nimport { ActionSetList } from './ActionSetList';\nimport { ActionToolbar } from './ActionSetToolbar';\n\ninterface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\nconst ActionSetMain: React.FC = () => {\n const { storyId } = useStorybookState();\n\n const storyData = useCurrentStoryData();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const { currentActions } = useCurrentActions(storyId);\n\n const { mutateAsync: deleteActionSet } =\n trpcClient.actionSet.deleteActionSet.useMutation();\n\n const { mutateAsync: changeActionSetIndex } =\n trpcClient.actionSet.changeActionSetIndex.useMutation();\n\n const createNewActionSet = useCallback(\n (desc: string) => {\n const id = nanoid(12);\n const newActionSet: ActionSet = {\n actions: [],\n id,\n title: desc,\n };\n\n cancelEditActionSet(storyId);\n\n addActionSetAction({\n actionSet: newActionSet,\n isNew: true,\n selected: true,\n storyId,\n });\n },\n [storyId],\n );\n\n const toggleDescriptionDialog = useCallback(() => {\n void inputModal.show({\n onSave: createNewActionSet,\n required: true,\n title: 'Action set title',\n });\n }, [createNewActionSet]);\n\n const handleReset = useCallback(() => {\n clearCurrentActionSets();\n deleteTempActionSets(storyId);\n }, [storyId]);\n\n const handleDeleteSelectedActionSets = useCallback(async () => {\n if (!storyData) return;\n\n for (const action of currentActions) {\n try {\n await deleteActionSet({\n actionSetId: action.id,\n filePath: storyData.filePath,\n storyId,\n });\n\n deleteActionSetFromStore({ actionSetId: action.id, storyId });\n } catch (error) {\n console.error(error);\n }\n }\n }, [currentActions, deleteActionSet, storyData, storyId]);\n\n useEffect(() => {\n clearCurrentActionSets();\n }, [storyId]);\n\n const handleSortEnd = useCallback(\n async (e: SortableIndexChangeEvent) => {\n if (!storyData) return;\n\n sortActionSets({ newIndex: e.newIndex, oldIndex: e.oldIndex, storyId });\n try {\n await changeActionSetIndex({\n filePath: storyData.filePath,\n newIndex: e.newIndex,\n oldIndex: e.oldIndex,\n storyId,\n });\n } catch (error) {\n // revert on failure\n sortActionSets({ newIndex: e.oldIndex, oldIndex: e.newIndex, storyId });\n console.error(error);\n }\n },\n [changeActionSetIndex, storyData, storyId],\n );\n\n const getContainerHeight = React.useCallback(() => {\n return ref.current?.offsetHeight ?? undefined;\n }, []);\n\n return (\n <div style={{ height: 'calc(100% - 55px)', transform: 'none' }} ref={ref}>\n <ActionToolbar\n onAddActionSet={toggleDescriptionDialog}\n onReset={handleReset}\n onDeleteSelectedActionSets={handleDeleteSelectedActionSets}\n deleteDisabled={currentActions.length === 0}\n getContainerHeight={getContainerHeight}\n />\n\n <ActionSetList onSortEnd={handleSortEnd} />\n </div>\n );\n};\n\nActionSetMain.displayName = 'ActionSetMain';\n\nexport { ActionSetMain };\n","import React, { memo } from 'react';\nimport { ActionSetMain } from '../../features/action-set/components/action-set-panel/index';\nimport { CommonProvider } from '../common';\n\nconst ActionPanel: React.FC = memo(() => {\n return (\n <CommonProvider>\n <ActionSetMain />\n </CommonProvider>\n );\n});\n\nActionPanel.displayName = 'ActionPanel';\n\nexport { ActionPanel };\n","import { useStorybookState } from '@storybook/manager-api';\nimport React from 'react';\nimport { SCREENSHOT_PANEL_ID } from '../../constants';\nimport { ScreenshotMain } from '../../features/screenshot/components/screenshot-panel/ScreenshotMain';\n\nconst ScreenshotPanel: React.FC = () => {\n const state = useStorybookState();\n return <ScreenshotMain showPanel={state.selectedPanel === SCREENSHOT_PANEL_ID} />;\n};\n\nScreenshotPanel.displayName = 'ScreenshotPanel';\n\nexport { ScreenshotPanel };\n","import { AddonPanel } from '@storybook/components';\nimport { addons, types } from '@storybook/manager-api';\nimport React from 'react';\nimport { registerInputDialogModal } from './components/common';\nimport { ActionPanel, ScreenshotPanel } from './components/panel';\nimport { Preview } from './components/preview';\nimport { Tool } from './components/tool-bar';\nimport {\n ACTIONS_PANEL_ID,\n ADDON_ID,\n PREVIEW_ID,\n SCREENSHOT_PANEL_ID,\n TOAST_ID,\n TOOL_ID,\n} from './constants';\nimport { Toaster } from 'sonner';\n\naddons.add(PREVIEW_ID, {\n render: Preview as any,\n type: types.PREVIEW,\n});\n\nregisterInputDialogModal();\n\naddons.register(ADDON_ID, () => {\n try {\n const parsedUrl = new URL(window.location.href);\n if (!parsedUrl.hostname) return;\n } catch {\n return;\n }\n\n // Toast must inject once at the manager level to ensure it is available in all panels and tools,\n // and not duplicated if multiple panels/tools use it.\n addons.add(TOAST_ID, {\n render: () => <Toaster position=\"bottom-left\" />,\n title: 'toast',\n type: types.TOOL,\n });\n\n addons.add(TOOL_ID, {\n render: () => <Tool />,\n title: 'snapshot',\n type: types.TOOL,\n });\n\n addons.add(ACTIONS_PANEL_ID, {\n render: ({ active }) => (\n <AddonPanel active={active ?? false}>\n <ActionPanel />\n </AddonPanel>\n ),\n title: 'Playwright Actions',\n type: types.PANEL,\n });\n\n addons.add(SCREENSHOT_PANEL_ID, {\n render: ({ active }) => (\n <AddonPanel active={active ?? false}>\n <ScreenshotPanel />\n </AddonPanel>\n ),\n title: 'Screenshots',\n type: types.PANEL,\n });\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/common/ActionPanel.tsx","../src/utils/resolve-mui-icon.ts","../src/components/common/Dialog.tsx","../src/components/common/ActionDialog.tsx","../src/components/common/ActionPopover.tsx","../src/components/common/ErrorPanel.tsx","../src/utils/capitalize.ts","../src/utils/construct-story-url.ts","../src/utils/get-preview-iframe.ts","../src/utils/find-selector.ts","../src/utils/get-schema.ts","../src/data/deviceDescriptorsSource.json","../src/utils/get-device-info.ts","../src/utils/get-iframe-document.ts","../src/utils/get-iframe-scroll-position.ts","../src/utils/get-image-diff-messages.ts","../src/utils/get-screenshot-prop.ts","../src/utils/get-screenshot-globals.ts","../src/utils/get-screenshot-args.ts","../src/utils/is-story-json-file.ts","../src/utils/is-valid-selector.ts","../src/utils/toast/AlertToast.tsx","../src/utils/toast/toast.tsx","../src/utils/valid-action.ts","../src/components/common/InputDialog.tsx","../src/components/common/Loader.tsx","../src/api/trpc/client.ts","../src/features/theme/hooks/use-custom-theme.ts","../src/components/common/ThemeProvider.tsx","../src/components/common/Toolbar.tsx","../src/components/common/ConfirmationPopover.tsx","../src/components/common/DragHandle.tsx","../src/components/common/ListItemWrapper.tsx","../src/components/common/ListWrapper.tsx","../src/components/common/DeleteConfirmationButton.tsx","../src/components/common/CheckBox.tsx","../src/components/common/DeviceListItem.tsx","../src/components/common/DeviceList.tsx","../src/hooks/use-current-story-data.ts","../src/features/action-set/store/action-set-store.ts","../src/features/action-set/store/utils/is-same-actions.ts","../src/features/action-set/store/actions.ts","../src/features/action-set/store/selectors.ts","../src/store/ui-store.ts","../src/store/ui-actions.ts","../src/store/ui-selectors.ts","../src/features/action-set/hooks/use-action-editor.ts","../src/features/action-set/hooks/use-copy-action-set.ts","../src/features/action-set/hooks/use-current-actions.ts","../src/features/action-set/hooks/use-current-story-action-sets.ts","../src/features/action-set/hooks/use-editor-action.ts","../src/features/action-set/hooks/use-story-action-sets-loader.tsx","../src/features/schema/hooks/use-action-schema-loader.ts","../src/features/screenshot/hooks/use-screenshot-update-state.ts","../src/features/screenshot/store/screenshot-store.ts","../src/features/screenshot/store/actions.ts","../src/features/screenshot/store/selectors.ts","../src/features/screenshot/hooks/use-delete-story-screenshots.ts","../src/features/screenshot/hooks/use-screenshot-diff-test-by-type.ts","../src/features/screenshot/hooks/use-story-screenshot-loader.ts","../src/hooks/use-drag-start.ts","../src/hooks/use-addon-state.ts","../src/hooks/use-browser-state-manager.ts","../src/hooks/use-browser-options.ts","../src/features/screenshot/hooks/use-screenshot-options.ts","../src/features/screenshot/hooks/use-load-screenshot-settings.ts","../src/features/screenshot/hooks/use-edit-screenshot.ts","../src/features/screenshot/hooks/use-screenshot-diff-test.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotInfo.tsx","../src/features/screenshot/hooks/use-delete-screenshot.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotDelete.tsx","../src/features/screenshot/hooks/use-screenshot-update.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotUpdate.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListItemMenu.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListItemWrapper.tsx","../src/features/screenshot/hooks/use-fix-screenshot-file-name.ts","../src/hooks/use-knobs.ts","../src/features/screenshot/hooks/use-generate-screenshot-title.ts","../src/features/screenshot/hooks/use-global-imageDiff-results.ts","../src/features/screenshot/hooks/use-imagediff-screenshots.ts","../src/hooks/use-globals.ts","../src/features/screenshot/hooks/use-save-screenshot.ts","../src/features/screenshot/hooks/use-screenshot.ts","../src/features/screenshot/hooks/use-screenshot-index-change.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotPreviewDialog.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListItem.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListSortable.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotList.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotListToolbar.tsx","../src/hooks/use-key-press-fn.ts","../src/features/screenshot/components/screenshot-panel/ScreenshotListPreviewDialog.tsx","../src/features/screenshot/components/screenshot-panel/StoryScreenshotPreview.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotPanel.tsx","../src/features/screenshot/components/screenshot-panel/ScreenshotMain.tsx","../src/hooks/use-story-url.ts","../src/features/screenshot/components/screenshot-preview/OptionPopover.tsx","../src/features/screenshot/components/screenshot-preview/BrowserOptions.tsx","../src/features/screenshot/components/screenshot-preview/ScreenShotViewToolbar.tsx","../src/features/screenshot/components/screenshot-preview/utils/get-border-color.ts","../src/features/screenshot/components/screenshot-preview/ScreenshotView.tsx","../src/components/common/IframeOverlay.tsx","../src/components/Clipper/Clipper.tsx","../src/components/Clipper/ClipperButton.tsx","../src/icons/Browser.tsx","../src/icons/Chrome.tsx","../src/icons/Firefox.tsx","../src/icons/Webkit.tsx","../src/components/common/BrowserIcon.tsx","../src/components/common/BrowserIconButton.tsx","../src/components/ResizeBrowserToIframeContent/ResizeBrowserToIframeContent.tsx","../src/components/ResizeBrowserToPreview/ResizeBrowserToPreview.tsx","../src/features/screenshot/components/screenshot-preview/ResetSettings.tsx","../src/features/screenshot/components/screenshot-preview/ScreenshotOptions.tsx","../src/features/screenshot/components/screenshot-preview/Toolbar.tsx","../src/features/screenshot/components/screenshot-preview/hooks/use-screenshot-list-layout.ts","../src/features/screenshot/components/screenshot-preview/hooks/use-screenshot-save-flow.ts","../src/features/screenshot/components/screenshot-preview/ScreenshotListView.tsx","../src/features/screenshot/components/screenshot-preview/PreviewDialog.tsx","../src/components/preview/EditScreenshotAlert.tsx","../src/components/preview/utils/is-horizontal.ts","../src/components/preview/utils/normalize-root-selector-path.ts","../src/components/preview/SelectorOverlay.tsx","../src/components/preview/Selector.tsx","../src/components/preview/Preview.tsx","../src/constants/add-on.ts","../src/constants/messages.ts","../src/components/tool-bar/ImageDiffMenuItem.tsx","../src/components/tool-bar/ImageDiff.tsx","../src/hooks/use-reset-setting.ts","../src/components/tool-bar/ScreenshotUpdateIcon.tsx","../src/components/tool-bar/Tool.tsx","../src/features/schema/hooks/use-control.ts","../src/hooks/use-anchor-el.ts","../src/hooks/use-key-press.ts","../src/hooks/use-preview-iframe.ts","../src/hooks/use-selector-manager.ts","../src/components/common/ImagePreview.tsx","../src/components/common/ImageDiffPreview.tsx","../src/components/common/ImageDiffPreviewDialog.tsx","../src/components/common/ImageDiffMessage.tsx","../src/components/common/CommonProvider.tsx","../src/features/schema/components/FormControl.tsx","../src/features/schema/components/Control.tsx","../src/features/schema/components/SelectorControl.tsx","../src/features/schema/components/SchemaProp.tsx","../src/features/schema/components/SchemaRenderer.tsx","../src/components/common/SchemaFormLoader.tsx","../src/components/common/FixScreenshotFileDialog.tsx","../src/features/action-set/components/actions/utils/get-action-option-value.ts","../src/features/action-set/components/actions/ActionSchemaRenderer.tsx","../src/features/action-set/components/actions/ActionOptions.tsx","../src/features/action-set/components/actions/ActionList.tsx","../src/features/action-set/components/action-set-panel/ActionMenuItem.tsx","../src/features/action-set/components/action-set-panel/utils/get-menu.ts","../src/features/action-set/components/action-set-panel/utils/filter-favourite-actions.ts","../src/features/action-set/components/action-set-panel/ActionMenu.tsx","../src/features/action-set/components/action-set-panel/ActionSetEditorIcons.tsx","../src/features/action-set/components/action-set-panel/ActionSetEditor.tsx","../src/features/action-set/components/action-set-panel/AddFavouriteAction.tsx","../src/features/action-set/components/action-set-panel/ActionSetListItem.tsx","../src/features/action-set/components/action-set-panel/ActionSetList.tsx","../src/features/action-set/components/action-set-panel/FavouriteActions.tsx","../src/features/action-set/components/action-set-panel/ActionSetToolbar.tsx","../src/features/action-set/components/action-set-panel/ActionSetMain.tsx","../src/components/panel/ActionPanel.tsx","../src/components/panel/ScreenshotPanel.tsx","../src/register.tsx"],"names":["ActionPanel","memo","onPositiveAction","title","onNegativeAction","children","positiveActionName","negativeActionName","React","DialogTitle","DialogContent","DialogActions","Button","resolveMuiIcon","iconModule","CloseIconComponent","CloseIcon","useStyles","makeStyles","theme","primary","p","Dialog","width","height","onClose","footerActions","subtitle","titleActions","open","enableCloseButton","rest","classes","ActionsComponent","TitleActions","MuDialog","Typography","IconButton","Divider","ActionDialog","onCancel","handleClose","useCallback","ActionPopover","Popover","ErrorPanel","props","message","Backdrop","capitalize","str","constructStoryUrl","endpoint","id","args","globals","normalized","normalize","storyUrl","getPreviewIframe","findSelector","selector","getActionSchema","schema","key","extendedKey","get","deviceDescriptorsSource_default","getDeviceInfo","deviceName","device","getIframeDocument","iframe","getIframeScrollPosition","iframeDocument","frameWindow","scrollTop","getImageDiffMessages","result","getScreenshotProp","candidates","i","value","getScreenshotGlobals","data","getScreenshotArgs","isStoryJsonFile","jsonOrStoryFileName","storyFileName","jsonName","isValidSelector","getVariantIcon","variant","PassedIcon","FailedIcon","AlertIcon","getVariantIconColor","isDarkMode","ToastMessageContainer","AlertToast","description","style","closeButton","isLightMode","backgroundColor","borderColor","textColor","titleColor","closeButtonColor","containerStyle","getHighestZindex","variantIcon","variantIconColor","descriptioncomponent","line","index","CrossIcon","AlertToast_default","DEFAULT_ALERT_DURATION","toastInstances","getToastId","baseId","instance","sonnerToast","getToastHandlers","cleanUp","tId","latestInstance","t","toast","duration","dismissible","position","toastId","handlers","simpleHash","createToast","options","component","validAction","action","actionSchema","requiredParams","requiredParam","validateActionList","actions","arr","res","InputDialog","onSave","requiredMessage","required","label","onGenerateContent","inputValue","setValue","useState","hasError","setHasError","isGenerating","setIsGenerating","showGenerateButton","handleChange","e","handleSave","handleGenerate","generated","useEffect","TextField","CircularProgress","InputDialogModal","NiceModal","modal","useModal","content","INPUT_DIALOG_MODAL_ID","registered","registerInputDialogModal","inputModal","background","color","tinycolor","Loader","progressSize","BASE","trpcClient","createTRPCReact","createTrpcHttpClient","httpBatchLink","useCustomTheme","setTheme","isTheme","ThemeProvider","storyBookTheme","useStorybookState","customTheme","createTheme","MuThemeProvider","divider","text","Toolbar","border","clsx","x","ConfirmationPopover","onConfirm","handleCancel","DragIndicatorSharpIcon","DragIndicatorSharp","DragHandle","className","setNodeRef","secondary","ListItemWrapper","draggable","selected","onClick","tooltip","icons","secondaryColor","dragHandleProps","handleClick","ListWrapper","ref","useRef","ScrollArea","ListWrapperSortableContainer","DeleteConfirmationButton","onDelete","StorybookIconButton","disabled","confirmAnchorEl","setConfirmAnchorEl","handleDelete","closeDeleteConfirmation","handleDeleteConfirmation","TrashIcon","CheckBox","checked","onChange","FormIcon","StopAltHollowIcon","DeviceListItem","forwardRef","viewportSize","name","MenuItem","DeviceList","onDeviceSelect","selectedDevice","anchorEl","setAnchorEl","event","devices","useMemo","handleSelection","Menu","useCurrentStoryData","storyData","setData","currentStory","useStorybookApi","filePath","fileName","initialActionSetState","useActionSetStore","create","devtools","actionsWithoutId","isSameActions","a","b","newA","newB","equal","getState","setState","partial","updateStoryActionSet","state","storyId","actionSets","updateStoryEditingActionSet","actionSetId","updater","storyActionSets","act","removeActionSet","addActionSetList","setScreenShotActionSets","matched","actionSet","storyActionSet","nanoid","currentActionSets","updated","addActionSet","isNew","newAction","clearCurrentActionSets","deleteActionSet","deleteTempActionSets","sortActionSets","oldIndex","newIndex","arrayMove","toggleCurrentActionSet","isCurrent","toggleActionExpansion","actionId","expand","clearActionExpansion","setActionSchema","cancelEditActionSet","orgEditingActionSet","editActionSet","setActionSetTitle","addActionSetAction","toggleSubtitleItem","actionOptionPath","hasItem","moveActionSetAction","deleteActionSetAction","setActionOptions","objPath","val","Fn","saveActionSet","useActionSetStoreState","initialUIState","useUIStore","persist","setAddonState","addonState","setBrowserOptions","browserOptions","setScreenshotOptionsState","screenshotOptions","setDragStart","dragStart","setSelectorManager","selectorManager","setScreenshotUpdateState","screenshotUpdateState","setEditScreenshotState","editScreenshotState","setSchemaLoaded","schemaLoaded","useAddonStateValue","s","useBrowserOptionsValue","useScreenshotOptionsValue","useDragStartValue","useSelectorManagerValue","useScreenshotUpdateStateValue","useEditScreenshotStateValue","useSchemaLoaded","useActionEditor","mutateAsync","inProgress","error","handleAddAction","actionName","validateResult","handleDescriptionChange","handleCancelEditActionSet","editingAction","useCopyActionSet","copyActionSet","useCurrentActions","useCurrentStoryActionSets","storybookState","setStoryActionSets","useEditorAction","setAction","story","editingActionSet","__loadedFiles","useStoryActionSetsLoader","loading","useActionSchemaLoader","loaded","refetch","load","useScreenshotUpdateState","reqBy","target","updateInf","isLoadingFinish","setIsLoadingFinish","runDiffTest","initialScreenshotState","useScreenshotStore","addScreenshot","screenshot","screenshots","removeScreenshot","screenshotId","changeScreenshotIndex","removeStoryScreenshots","setScreenshots","setImageDiffResults","imageDiffResults","addImageDiffResult","imageDiffResult","updateImageDiffResult","setPauseDeleteImageDiffResult","paused","removeImageDiffResult","removePassedImageDiffResult","deleteScreenshot","useImageDiffResults","useScreenshotStoreState","useDeleteStoryScreenshot","deleteInProgress","deleteStoryScreenshots","useScreenshotDiffTestByType","imageDiffTestInProgress","testStoryScreenShots","type","results","useStoryScreenshotLoader","loadedStoryId","screenshotLoaderInProgress","loadScreenShots","useDragStart","useAddonState","defaultBrowserTypes","useBrowserStateManager","browserView","refreshingBrowsers","setRefreshBrowsers","browserTypes","isDisabled","browserType","setBrowserState","activePanel","disable","unsubscribe","prevState","deepEqual","current","channel","addons","onStoryRendered","activeBrowserTypes","STORY_RENDERED","toggleBrowser","browser","clearBrowserRefresh","useBrowserOptions","browserName","setBrowserDeviceOptions","getBrowserOptions","hasOption","useScreenshotOptions","useLoadScreenshotSettings","setScreenshotOptions","api","dispatchActions","screenshotData","loadSetting","force","RESET_STORY_ARGS","UPDATE_STORY_ARGS","UPDATE_GLOBALS","useEditScreenshot","unmounted","clearScreenshotEdit","editScreenshot","isEditing","useScreenshotDiffTest","testScreenshotError","setTestScreenshotError","reset","testScreenshot","ScreenshotInfo","size","getInfo","_id","_index","togglePopover","CogIcon","ReactJson","useDeleteScreenshot","setError","mutationError","clearError","ScreenshotDelete","onStateChange","deleteLoading","useScreenshotUpdate","successMessage","updateScreenshotInProgress","updateScreenshotClearResult","newImageDiffResult","ScreenshotUpdate","updateScreenshot","testScreenshotInProgress","testScreenshotClearResult","testScreenshotResult","handleUpdate","handleSaveScreenshotClick","RefreshIcon","ImageDiffPreviewDialog","ScreenshotListItemMenu","enableLoadSetting","openUpdateDialog","enableImageDiff","enableUpdate","enableEditScreenshot","show","onHide","onRunImageDiff","onLoadSettingClick","onEditClick","working","setWorking","EditIcon","OutboxIcon","ContrastIcon","ScreenshotListItemWrapper","useFixScreenshotFileName","fixFunction","currentStoryData","reload","setReload","functionName","setFunctionName","fixFileNamesError","setFixFileNamesError","fixFileNamesInProgress","fixFileNames","handleReload","handleFunctionNameInput","useKnobs","setArgs","apiRef","setArgsStore","initialArgs","propObj","obj","argValue","storyChange","STORY_ARGS_UPDATED","STORY_CHANGED","useGenerateScreenshotTitle","currentActions","hasGenerator","useGlobalImageDiffResults","getScreenshotDataFromDiffResult","useImageDiffScreenshots","onLoaded","setLoaded","loadData","useGlobals","setGlobals","setGlobalStore","initialGlobals","changedGlobals","globalValue","GLOBALS_UPDATED","useSaveScreenshot","mutationResult","titleMsg","clearResult","isUpdating","getUpdatingScreenshotTitle","saveScreenShot","base64String","deviceDescriptor","saveResult","base64","onSuccessClose","useScreenshot","prevHash","mutate","renderCount","setRenderCount","handler","c","getSnapshot","currentHash","sum","useScreenshotIndexChange","ChangeIndexInProgress","changeIndex","ScreenshotPreviewDialog","screenShotData","CheckCircleIcon","CheckCircle","ErrorIcon","Error","ScreenshotListItem","pauseDeleteImageDiffResult","showPreviewOnClick","sortableId","forceShowMenu","showImageDiffResultDialog","attributes","listeners","setActivatorNodeRef","transform","transition","isDragging","useSortable","showMenu","setShowMenu","showImageDiffResult","setShowImageDiffResult","timer","showPreview","setShowPreview","isPassesImageDiff","handleRemoveScreenShotResult","handleShowImageDiffResult","handleMouseEnter","handleMouseLeave","handleRunDiffTest","toggleSelectedItem","handleEdit","handleLoadSetting","CSS","BrowserIcon","MemoizedImageDiffMessage","ScreenshotListSortable","items","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragStart","handleDragCancel","handleDragEnd","active","over","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","ScreenshotList","hasScreenshot","sortedScreenshots","ScreenshotListToolbar","hasScreenShot","onTestClick","onPreviewClick","onUpdateClick","openFixDialog","setOpenFixDialog","FixScreenshotFileDialog","WrenchIcon","PhotoIcon","useKeyPressFn","keydown","keyup","ScreenshotListPreviewDialog","selectedItem","currentItem","setCurrentItem","handleItemClick","handleKeyUp","ev","selectedScreenshot","diffResult","ImageDiffPreview","StoryScreenshotPreview","updating","onLoad","updateInProgress","setUpdateInProgress","promises","MemoizedStoryScreenshotPreview","ScreenshotPanel","toggleShowPreview","handleStoryImgDiff","ScreenshotMain","showPanel","dialogOpen","setDialogOpen","handleOnLoad","handleOnClose","CommonProvider","useStoryUrl","url","setUrl","newUrl","queryKeys","query","OptionPopover","Icon","SIconButton","Tooltip","SettingIconComponent","SettingIcon","BrowserOptions","isActive","setReset","handleDeviceSelection","MemoizedSchemaFormLoader","FullscreenIcon","Fullscreen","RefreshOutlinedIcon","SaveAltOutlinedIcon","SaveIcon","palette","ScreenShotViewToolbar","showSaveButton","onRefresh","onFullScreen","getBorderColor","coefficient","lighten","darken","getBackgroundColor","ScreenshotView","refresh","onRefreshEnd","onScreenshotDataChange","openFullScreen","setOpenFullScreen","containerHeight","isStorybook","isValidToSave","toggleFullScreen","errorMessage","handleSaveRequest","ImagePreview","IframeOverlay","useClipperState","set","Clipper","clipping","stop","clippingWarningDismissed","overlayRef","usePreviewIframe","handleEnd","iframeScroll","top","left","iframeHeight","iframeRect","iframeViewportWidth","iframeViewportHeight","iframeClientWidth","iframeClientHeight","previewWidth","previewHeight","previewRight","previewBottom","rawScaleX","rawScaleY","scaleX","scaleY","selectionRight","selectionBottom","boundedLeft","boundedTop","boundedRight","boundedBottom","boundedWidth","boundedHeight","clipperPos","dismiss","Selecto","ClipperButton","toggleClippingState","Browser","Vo","Chrome","Uo","Firefox","mi","Webkit","T","BrowserIconButton","PhotoSizeSelectLargeIcon","PhotoSizeSelectLargeIconModule","getIframeInnerSize","body","documentElement","ResizeBrowserToIframeContent","innerSize","AspectRatioIcon","AspectRatioIconModule","ResizeBrowserToPreview","RotateLeftIconComponent","RotateLeftIcon","ResetSettings","CameraIconComponent","CameraIcon","ScreenshotOptions","d","CloseOutlinedIcon","CloseOutlined","NearMeOutlinedIcon","NearMeIcon","RefreshSharpIcon","RefreshSharp","activeBrowsers","onCLose","isVertical","enableDisableCursor","enable","GRID_PERCENT","TWO_COLUMNS","LIST_GAP_PX","useScreenshotListLayout","column","activeBrowsersCount","rect","useMeasure","useScreenshotSaveFlow","isQueueSaving","setIsQueueSaving","screenshotDataRef","generateTitle","setScreenshotData","saveForBrowsers","browsersToSave","openSaveDialog","dialogTitle","requestSaveAll","requestSaveOne","ScreenshotListView","showStorybook","viewPanel","refreshBrowsers","itemHeight","isSaving","handleRefresh","PreviewDialog","EditScreenshotAlert","Alert","isHorizontalPanel","storybookPanelPosition","ROOT_SELECTOR","STORYBOOK_ROOT_SELECTOR","hasQuerySelector","documentNode","getRootSelector","normalizeRootSelectorPath","selectorPath","rootSelector","rootElement","legacyRootSelector","legacyRootElement","defaultRect","SelectorOverlay","stopSelector","setSelectorData","useSelectorManager","mouseupRef","setMouseupRef","selectorRef","isIdSelector","isSelector","selectorInfo","setSelectorInfo","elX","elY","useMouseHovered","useKey","useThrottleFn","y","node","path","getSelectorPath","isInBoundary","mouseup","Selector","rootRef","setIframe","DEVIDER_SIZE","Preview","isHorizontal","handleResizeChange","previewPaneIndex","previewPane","Pane","screenshotPane","Separator","panes","SplitPane","sizes","ADDON_ID","ACTIONS_PANEL_ID","SCREENSHOT_PANEL_ID","TOOL_ID","TOAST_ID","PREVIEW_ID","TEMP_ACTION_SET","ImageDiffMenuItem","imageDiff","handleLoadStory","ListItem","ImageDiff","diffResults","failedDiffResults","hasFailedDiff","handleImageDiffClick","handleClearAllResults","sc","iconButton","Badge","WithTooltip","self","diff","PREVIEW_PANEL_SIZE","useResetSetting","ScreenshotUpdateIcon","Tool","setOpen","showFixScreenshotFileDialog","setShowFixScreenshotFileDialog","resetSetting","isEnablePreviewPanelEnabled","handleOpen","handleBowserClose","handlePlacementChange","placement","TooltipLinkList","ShareAltIcon","EyeCloseIcon","EyeIcon","SidebarAltIcon","BottomBarIcon","SyncIcon","ChevronRightIcon","convertOptions","getDefault","defVal","SimpleControl","knob","handleBooleanChange","handleInputChange","handleSelectChange","handleTextareaChange","Form","opt","opts","getControl","_type","useControl","display","setKnob","Control","useAnchorEl","anchorElRef","_setAnchorEl","clearAnchorEl","useKeyPress","targetKey","keyPressed","setKeyPressed","downHandler","upHandler","startSelector","onData","onStop","imgSrcString","diffDirection","isPressed","prevImage","MapInteraction","translation","scale","activeTab","shouldShowDiff","showDiff","setShowDiff","safeCurrentImage","toggleScreenshotDiff","_event","newValue","Tabs","Tab","ImageDiffMessage","trpcHttpClient","queryClient","QueryClient","QueryClientProvider","StateInspector","CheckSelectedIcon","CheckSelected","HelpOutlineSharpIcon","HelpOutlineSharp","CheckNotSelectedIcon","CheckNotSelected","FormControl","appendValueToTitle","onAppendValueToTitle","isRequired","defaultValue","StorybookControl","TargetIconComponent","TargetIcon","PointerIconComponent","PointerIcon","SelectorControl","selectorType","isFollowedByPositionProp","fullObjectPath","onSelectorChange","validate","setValidate","invalidSelector","setInvalidSelector","startSelectorClick","handleSelectorClick","handleIdSelectorClick","handleControlChange","handleBlur","SchemaProp","parents","nextPropName","getValue","shouldAppendToTitle","optionObjectPath","shouldAppend","handleOnAppendValueToTitle","startCase","SchemaRenderer","MemoizedSchemaProp","schemaProps","array","param","MemoizedSchemaRenderer","SchemaFormLoader","defaultData","FooterComponent","schemaName","tempOptions","setTempOptions","requestedSchemaName","handleClear","cr","getActionOptionValue","optionPath","rl","ActionSchemaRenderer","handleGetValue","handleSelectorChange","ActionOptions","setSubtitle","handleExpand","titles","handleDeleteAction","hasParameters","Accordion","AccordionSummary","sub","Chip","QuestionIcon","AccordionDetails","SortableItem","SortableList","onSortEnd","localItems","setLocalItems","handleDragOver","prev","ActionList","handleSortEnd","ActionMenuItem","getMenu","def","actionArr","menuItems","actionKey","prop","childProps","filterFavouriteActions","item","visibleTo","ActionMenu","actionItems","setActionItems","actionList","ActionSetEditorIcons","onEditDescription","onAddAction","menuAnchorEl","setMenuAnchorEl","handleMenuOpen","handleMenuClose","handleMenuChange","PlusIcon","ActionSetEditor","toggleEditDescription","AddFavouriteAction","input","setInput","radioValue","setRadioValue","addFavouriteAction","parent","onAddToFavourite","StarIcon","RadioGroup","v","FormControlLabel","Radio","ActionSetListItem","onEdit","onCheckBoxClick","hideIcons","onDuplicate","handleCheckStateChanged","handleDuplicateActionSet","CopyIcon","SortableActionSetListItem","ActionSetList","copyInProgress","handleCheckBox","defaults","FavouriteActions","getContainerHeight","setActionSets","deleteFavouriteAction","refetchFavouriteActions","loadActions","onAddQuickAction","newActionSet","deleteAction","ActionToolbar","onAddActionSet","onReset","onFavoriteActionsClick","onDeleteSelectedActionSets","deleteDisabled","ActionSetMain","changeActionSetIndex","createNewActionSet","desc","toggleDescriptionDialog","handleReset","handleDeleteSelectedActionSets","types","Toaster","AddonPanel"],"mappings":"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","file":"register.js","sourcesContent":["import { Button, DialogActions, DialogContent, DialogTitle } from '@material-ui/core';\nimport React, { memo } from 'react';\n\nexport interface ActionPanelProps {\n title?: string;\n onPositiveAction?: () => void;\n onNegativeAction?: () => void;\n positiveActionName?: string;\n negativeActionName?: string;\n}\n\nconst ActionPanel: React.FC<ActionPanelProps> = memo(\n ({\n onPositiveAction,\n title,\n onNegativeAction,\n children,\n positiveActionName = 'Save',\n negativeActionName = 'Cancel',\n }) => {\n return (\n <>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>{children}</DialogContent>\n <DialogActions>\n <Button onClick={onNegativeAction}>{negativeActionName}</Button>\n <Button onClick={onPositiveAction}>{positiveActionName}</Button>\n </DialogActions>\n </>\n );\n },\n);\n\nActionPanel.displayName = 'ActionPanel';\n\nexport { ActionPanel };\n","import type React from 'react';\n\nexport function resolveMuiIcon(iconModule: unknown): React.ElementType {\n const maybeModule = iconModule as { default?: React.ElementType };\n return (maybeModule.default ?? (iconModule as React.ElementType)) as React.ElementType;\n}\n","import type { DialogProps as MuDialogProps } from '@material-ui/core';\nimport {\n DialogActions,\n DialogTitle,\n Divider,\n IconButton,\n makeStyles,\n Dialog as MuDialog,\n Typography,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport React from 'react';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst CloseIconComponent = resolveMuiIcon(CloseIcon);\n\ninterface StyleProps {\n width?: string | number;\n height?: string | number;\n}\n\nconst useStyles = makeStyles(\n (theme) => {\n const { primary } = theme.palette;\n\n return {\n closIcon: {\n zIndex: 100,\n },\n input: {\n width: '100%',\n },\n paper: {\n height: (p: StyleProps) => p.height,\n margin: 10,\n maxHeight: 'calc(100% - 20px)',\n maxWidth: (p: StyleProps) => p.width,\n width: (p: StyleProps) => p.width,\n },\n title: {\n '& h6': {\n fontSize: 17,\n },\n color: primary.main,\n display: 'flex',\n justifyContent: 'space-between',\n padding: '12px 24px',\n },\n titleActions: {\n marginBottom: '-10px',\n marginRight: '-18px',\n marginTop: '-8px',\n },\n };\n },\n { name: 'Dialog' },\n);\n\nexport interface DialogProps extends MuDialogProps, StyleProps {\n title?: string;\n subtitle?: string;\n onClose?: () => void;\n footerActions?: React.ComponentType | undefined;\n titleActions?: React.ComponentType | undefined;\n enableCloseButton?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = ({\n children,\n width = '80%',\n height = 'auto',\n title,\n onClose,\n footerActions,\n subtitle,\n titleActions,\n open = false,\n enableCloseButton = true,\n ...rest\n}) => {\n const classes = useStyles({ height, width });\n\n const ActionsComponent = footerActions;\n\n const TitleActions = titleActions;\n\n return (\n <MuDialog\n open={open}\n classes={{\n paper: classes.paper,\n }}\n onClose={onClose}\n {...rest}\n >\n {(TitleActions || enableCloseButton || title || subtitle) && (\n <>\n <DialogTitle disableTypography={true} className={classes.title}>\n <div>\n {title && <Typography variant=\"h6\">{title}</Typography>}\n {subtitle && <Typography variant=\"body1\">{subtitle}</Typography>}\n </div>\n\n <div className={classes.titleActions}>\n {TitleActions && <TitleActions />}\n {enableCloseButton && (\n <IconButton\n color=\"primary\"\n className={classes.closIcon}\n onClick={onClose}\n >\n <CloseIconComponent />\n </IconButton>\n )}\n </div>\n </DialogTitle>\n <Divider />\n </>\n )}\n\n {children}\n {ActionsComponent && (\n <DialogActions>\n <ActionsComponent />\n </DialogActions>\n )}\n </MuDialog>\n );\n};\n\nDialog.displayName = 'Dialog';\n\nexport { Dialog };\n","import type { ActionPanelProps } from './ActionPanel';\nimport type { DialogProps } from './Dialog';\nimport React, { memo, useCallback } from 'react';\nimport { ActionPanel } from './ActionPanel';\nimport { Dialog } from './Dialog';\n\ninterface StyleProps {\n width?: number | string;\n}\n\nexport interface ActionDialogDialogProps\n extends StyleProps, DialogProps, ActionPanelProps {\n open: boolean;\n onClose: () => void;\n value?: string;\n onCancel?: () => void;\n}\n\nconst ActionDialog: React.FC<ActionDialogDialogProps> = memo(\n ({\n onPositiveAction,\n title,\n onNegativeAction,\n open,\n onClose,\n width = '30%',\n children,\n positiveActionName,\n negativeActionName,\n onCancel,\n ...rest\n }) => {\n const handleClose = useCallback(() => {\n onClose();\n if (onCancel) {\n onCancel();\n }\n }, [onCancel, onClose]);\n\n return (\n <Dialog\n enableCloseButton={false}\n open={open}\n onClose={handleClose}\n width={width}\n {...rest}\n >\n <ActionPanel\n onPositiveAction={onPositiveAction}\n negativeActionName={negativeActionName}\n title={title}\n onNegativeAction={onNegativeAction}\n positiveActionName={positiveActionName}\n >\n {children}\n </ActionPanel>\n </Dialog>\n );\n },\n);\n\nActionDialog.displayName = 'ActionDialog';\n\nexport { ActionDialog };\n","import type { PopoverProps } from '@material-ui/core';\nimport type { ActionPanelProps } from './ActionPanel';\nimport { Popover } from '@material-ui/core';\nimport React, { memo } from 'react';\nimport { ActionPanel } from './ActionPanel';\n\nexport interface ActionPopoverProps\n extends ActionPanelProps, Omit<PopoverProps, 'open' | 'onClose'> {\n onClose?: PopoverProps['onClose'];\n}\n\nconst ActionPopover: React.FC<ActionPopoverProps> = memo(\n ({\n onPositiveAction,\n title,\n onNegativeAction,\n children,\n positiveActionName,\n negativeActionName,\n ...rest\n }) => {\n return (\n <Popover open={true} {...rest}>\n <ActionPanel\n onPositiveAction={onPositiveAction}\n negativeActionName={negativeActionName}\n title={title}\n onNegativeAction={onNegativeAction}\n positiveActionName={positiveActionName}\n >\n {children}\n </ActionPanel>\n </Popover>\n );\n },\n);\n\nActionPopover.displayName = 'ActionPopover';\n\nexport { ActionPopover };\n","import { Backdrop, makeStyles } from '@material-ui/core';\nimport React, { memo } from 'react';\n\nconst useStyles = makeStyles(\n () => {\n return {\n backdrop: {\n position: 'absolute',\n },\n root: {\n color: 'red',\n },\n };\n },\n { name: 'ErrorPanel' },\n);\n\nexport interface ErrorPanelProps {\n message: string;\n}\n\nconst ErrorPanel: React.FC<ErrorPanelProps> = memo((props) => {\n const { message } = props;\n\n const classes = useStyles();\n\n return (\n <Backdrop open={true} className={classes.backdrop}>\n <div className={classes.root}>{message}</div>{' '}\n </Backdrop>\n );\n});\n\nErrorPanel.displayName = 'ErrorPanel';\n\nexport { ErrorPanel };\n","export function capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { ScreenshotProp } from '../typings';\n\nimport normalize from 'normalize-url';\nimport { argsToQuerystring } from './args-to-querystring';\nimport { globalsToQuerystring } from './globals-to-querystring';\nimport { knobsToQuerystring } from './knobs-to-querystring';\n\nexport function constructStoryUrl(\n endpoint: string,\n id: string,\n props?: ScreenshotProp,\n args?: ScreenshotProp,\n globals?: ScreenshotProp,\n) {\n let normalized: string;\n\n if (/^\\.{0,2}[/\\\\]/.test(endpoint)) {\n // File-system path (./storybook-static, /abs/path, ../rel/path)\n normalized = `file:///${endpoint.replace(/\\\\/g, '/').replace(/^\\/+/, '')}`;\n } else if (/^https?:\\/\\//i.test(endpoint) || /^file:\\/\\//i.test(endpoint)) {\n // Already has explicit protocol\n normalized = normalize(endpoint);\n } else {\n // Bare hostname:port, IPv4, or plain hostname (e.g. localhost:1090)\n // Prepend http:// so normalize preserves it instead of defaulting to https://\n normalized = normalize(`http://${endpoint}`);\n }\n\n let storyUrl = `${normalized}/iframe.html?id=${id}`;\n\n const argsQuery = argsToQuerystring(args);\n if (argsQuery) {\n storyUrl = `${storyUrl}&args=${argsQuery}`;\n }\n\n const globalsQuery = globalsToQuerystring(globals);\n if (globalsQuery) {\n storyUrl = `${storyUrl}&globals=${globalsQuery}`;\n }\n\n if (props) {\n const propsQuery = knobsToQuerystring(props);\n if (propsQuery) {\n storyUrl = `${storyUrl}&${propsQuery}`;\n }\n }\n\n return storyUrl.replace(/\\\\/g, '/');\n}\n","export function getPreviewIframe() {\n const iframe = document.body.querySelector<HTMLIFrameElement>(\n '#storybook-preview-iframe',\n );\n return iframe;\n}\n","import { getPreviewIframe } from './get-preview-iframe';\n\nexport function findSelector(selector: string) {\n const iframe = getPreviewIframe();\n const element = iframe?.contentWindow?.document.querySelector(selector);\n return element;\n}\n","import type { ActionSchema } from '../typings';\nimport { get } from 'object-path-immutable';\n\nexport function getActionSchema(\n schema: ActionSchema,\n key: string,\n): ActionSchema | undefined {\n if (!key) return undefined;\n\n const extendedKey = key.split('.').join('.properties.');\n const actionSchema = get(schema, extendedKey);\n return actionSchema;\n}\n","{\n \"Blackberry PlayBook\": {\n \"userAgent\": \"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.4 Safari/536.2+\",\n \"viewport\": {\n \"width\": 600,\n \"height\": 1024\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Blackberry PlayBook landscape\": {\n \"userAgent\": \"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.4 Safari/536.2+\",\n \"viewport\": {\n \"width\": 1024,\n \"height\": 600\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"BlackBerry Z30\": {\n \"userAgent\": \"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/15.4 Mobile Safari/537.10+\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"BlackBerry Z30 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/15.4 Mobile Safari/537.10+\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note 3\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note 3 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note II\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy Note II landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy S III\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy S III landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/15.4 Mobile Safari/534.30\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Galaxy S5\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S5 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S8\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 740\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S8 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 740,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S9+\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 658\n },\n \"deviceScaleFactor\": 4.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy S9+ landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 658,\n \"height\": 320\n },\n \"deviceScaleFactor\": 4.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy Tab S4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 712,\n \"height\": 1138\n },\n \"deviceScaleFactor\": 2.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Galaxy Tab S4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 1138,\n \"height\": 712\n },\n \"deviceScaleFactor\": 2.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"iPad (gen 6)\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 768,\n \"height\": 1024\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad (gen 6) landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1024,\n \"height\": 768\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad (gen 7)\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 810,\n \"height\": 1080\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad (gen 7) landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1080,\n \"height\": 810\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Mini\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 768,\n \"height\": 1024\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Mini landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1024,\n \"height\": 768\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Pro 11\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 834,\n \"height\": 1194\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPad Pro 11 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 1194,\n \"height\": 834\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 667\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 667,\n \"height\": 375\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6 Plus\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 736\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 6 Plus landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 736,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 667\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 667,\n \"height\": 375\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7 Plus\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 736\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 7 Plus landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 736,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 667\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 667,\n \"height\": 375\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8 Plus\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 736\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 8 Plus landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 736,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone SE\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/15.4 Mobile/14E304 Safari/602.1\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 568\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone SE landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/15.4 Mobile/14E304 Safari/602.1\",\n \"viewport\": {\n \"width\": 568,\n \"height\": 320\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone X\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 375,\n \"height\": 812\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone X landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1\",\n \"viewport\": {\n \"width\": 812,\n \"height\": 375\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone XR\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 414,\n \"height\": 896\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone XR landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"viewport\": {\n \"width\": 896,\n \"height\": 414\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 414,\n \"height\": 715\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 800,\n \"height\": 364\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 375,\n \"height\": 635\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 724,\n \"height\": 325\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro Max\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 414,\n \"height\": 715\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 11 Pro Max landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 414,\n \"height\": 896\n },\n \"viewport\": {\n \"width\": 808,\n \"height\": 364\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 340\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 340\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro Max\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 428,\n \"height\": 746\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 12 Pro Max landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 832,\n \"height\": 378\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 342\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 390,\n \"height\": 664\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 390,\n \"height\": 844\n },\n \"viewport\": {\n \"width\": 750,\n \"height\": 342\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro Max\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 428,\n \"height\": 746\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Pro Max landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 428,\n \"height\": 926\n },\n \"viewport\": {\n \"width\": 832,\n \"height\": 380\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Mini\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 375,\n \"height\": 629\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"iPhone 13 Mini landscape\": {\n \"userAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1\",\n \"screen\": {\n \"width\": 375,\n \"height\": 812\n },\n \"viewport\": {\n \"width\": 712,\n \"height\": 327\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"JioPhone 2\": {\n \"userAgent\": \"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:89.0 Gecko/48.0 Firefox/93.0 KAIOS/2.5\",\n \"viewport\": {\n \"width\": 240,\n \"height\": 320\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"firefox\"\n },\n \"JioPhone 2 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:89.0 Gecko/48.0 Firefox/93.0 KAIOS/2.5\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 240\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"firefox\"\n },\n \"Kindle Fire HDX\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true\",\n \"viewport\": {\n \"width\": 800,\n \"height\": 1280\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Kindle Fire HDX landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true\",\n \"viewport\": {\n \"width\": 1280,\n \"height\": 800\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"LG Optimus L70\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 384,\n \"height\": 640\n },\n \"deviceScaleFactor\": 1.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"LG Optimus L70 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 384\n },\n \"deviceScaleFactor\": 1.25,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 550\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 550 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 950\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 4,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Microsoft Lumia 950 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36 Edge/14.14263\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 4,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 10\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 800,\n \"height\": 1280\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 10 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 1280,\n \"height\": 800\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 384,\n \"height\": 640\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 384\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5X\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 412,\n \"height\": 732\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 5X landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 732,\n \"height\": 412\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 412,\n \"height\": 732\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 732,\n \"height\": 412\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6P\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 412,\n \"height\": 732\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 6P landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 732,\n \"height\": 412\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 7\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 600,\n \"height\": 960\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nexus 7 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"viewport\": {\n \"width\": 960,\n \"height\": 600\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nokia Lumia 520\": {\n \"userAgent\": \"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)\",\n \"viewport\": {\n \"width\": 320,\n \"height\": 533\n },\n \"deviceScaleFactor\": 1.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nokia Lumia 520 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)\",\n \"viewport\": {\n \"width\": 533,\n \"height\": 320\n },\n \"deviceScaleFactor\": 1.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Nokia N9\": {\n \"userAgent\": \"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\",\n \"viewport\": {\n \"width\": 480,\n \"height\": 854\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Nokia N9 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\",\n \"viewport\": {\n \"width\": 854,\n \"height\": 480\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Pixel 2\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 411,\n \"height\": 731\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 2 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 731,\n \"height\": 411\n },\n \"deviceScaleFactor\": 2.625,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 2 XL\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 411,\n \"height\": 823\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 2 XL landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 823,\n \"height\": 411\n },\n \"deviceScaleFactor\": 3.5,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 3\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 393,\n \"height\": 786\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 3 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 786,\n \"height\": 393\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 353,\n \"height\": 745\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 745,\n \"height\": 353\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4a (5G)\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"width\": 412,\n \"height\": 892\n },\n \"viewport\": {\n \"width\": 412,\n \"height\": 765\n },\n \"deviceScaleFactor\": 2.63,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 4a (5G) landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"height\": 892,\n \"width\": 412\n },\n \"viewport\": {\n \"width\": 840,\n \"height\": 312\n },\n \"deviceScaleFactor\": 2.63,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 5\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"width\": 393,\n \"height\": 851\n },\n \"viewport\": {\n \"width\": 393,\n \"height\": 727\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Pixel 5 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"screen\": {\n \"width\": 851,\n \"height\": 393\n },\n \"viewport\": {\n \"width\": 802,\n \"height\": 293\n },\n \"deviceScaleFactor\": 2.75,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Moto G4\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 360,\n \"height\": 640\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Moto G4 landscape\": {\n \"userAgent\": \"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Mobile Safari/537.36\",\n \"viewport\": {\n \"width\": 640,\n \"height\": 360\n },\n \"deviceScaleFactor\": 3,\n \"isMobile\": true,\n \"hasTouch\": true,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Chrome HiDPI\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Edge HiDPI\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36 Edg/97.0.4666.0\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Firefox HiDPI\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0 Gecko/20100101 Firefox/93.0\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"firefox\"\n },\n \"Desktop Safari\": {\n \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15\",\n \"screen\": {\n \"width\": 1792,\n \"height\": 1120\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 2,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"webkit\"\n },\n \"Desktop Chrome\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36\",\n \"screen\": {\n \"width\": 1920,\n \"height\": 1080\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Edge\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4666.0 Safari/537.36 Edg/97.0.4666.0\",\n \"screen\": {\n \"width\": 1920,\n \"height\": 1080\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"chromium\"\n },\n \"Desktop Firefox\": {\n \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0 Gecko/20100101 Firefox/93.0\",\n \"screen\": {\n \"width\": 1920,\n \"height\": 1080\n },\n \"viewport\": {\n \"width\": 1280,\n \"height\": 720\n },\n \"deviceScaleFactor\": 1,\n \"isMobile\": false,\n \"hasTouch\": false,\n \"defaultBrowserType\": \"firefox\"\n }\n}\n","import type { BrowserContextOptions } from '../typings';\nimport DeviceDescriptors from '../data/deviceDescriptorsSource.json';\n\nexport function getDeviceInfo(deviceName?: string): BrowserContextOptions | undefined {\n if (!deviceName) return undefined;\n const device = DeviceDescriptors[deviceName] as BrowserContextOptions;\n if (!device) return undefined;\n device.deviceName = deviceName;\n return device;\n}\n","export function getIframeDocument(iframe: HTMLIFrameElement) {\n return iframe.contentDocument || iframe.contentWindow?.document;\n}\n","import { getIframeDocument } from './get-iframe-document';\n\nexport function getIframeScrollPosition(iframe: HTMLIFrameElement) {\n const iframeDocument = getIframeDocument(iframe);\n\n if (!iframeDocument) {\n return { scrollLeft: 0, scrollTop: 0 };\n }\n\n const frameWindow = iframeDocument.defaultView;\n\n const scrollTop =\n (frameWindow ? frameWindow.pageYOffset : 0) ||\n iframeDocument.documentElement.scrollTop;\n const scrollLeft =\n (frameWindow ? frameWindow.pageXOffset : 0) ||\n iframeDocument.documentElement.scrollLeft;\n\n return { scrollLeft, scrollTop };\n}\n","import type { ImageDiffResult } from '../api/typings';\n\nexport function getImageDiffMessages(result: ImageDiffResult) {\n if (result.error) return result.error;\n\n if (result.diffSize && result.imageDimensions) {\n return `Expected image to be the same size as the snapshot (${result.imageDimensions.baselineWidth}x${result.imageDimensions.baselineHeight}), but was different (${result.imageDimensions.receivedWidth}x${result.imageDimensions.receivedHeight}).`;\n }\n\n if (result.diffRatio) {\n const differencePercentage = result.diffRatio * 100;\n return `Expected image to match or be a close match to snapshot but was ${differencePercentage}% different from snapshot (${result.diffPixelCount} differing pixels).`;\n }\n return '';\n}\n","import type { ScreenshotProp } from '../typings';\n\nexport function getScreenshotProp(\n ...candidates: Array<ScreenshotProp | undefined>\n): ScreenshotProp | undefined {\n for (let i = 0; i < candidates.length; i++) {\n const value = candidates[i];\n if (value && Object.keys(value).length > 0) {\n return value;\n }\n }\n\n return undefined;\n}\n","import type { ScreenshotProp } from '../typings';\nimport { getScreenshotProp } from './get-screenshot-prop';\n\ninterface ScreenshotGlobalsLike {\n globals?: ScreenshotProp;\n}\n\nexport const getScreenshotGlobals = (\n data?: ScreenshotGlobalsLike,\n): ScreenshotProp | undefined => {\n if (!data) return undefined;\n\n return getScreenshotProp(data.globals);\n};\n","import { ScreenshotProp } from '../typings';\nimport { getScreenshotProp } from './get-screenshot-prop';\n\ninterface ScreenshotArgsLike {\n args?: ScreenshotProp;\n props?: ScreenshotProp;\n}\n\nexport const getScreenshotArgs = (\n data?: ScreenshotArgsLike,\n): ScreenshotProp | undefined => {\n if (!data) return undefined;\n\n return getScreenshotProp(data.args, data.props);\n};\n","export function isStoryJsonFile(jsonOrStoryFileName: string, storyFileName: string) {\n if (jsonOrStoryFileName === storyFileName) return true;\n const jsonName = jsonOrStoryFileName.split('.').slice(0, -2).join('.');\n const storyName = storyFileName.split('.').slice(0, -1).join('.');\n return storyName.endsWith(jsonName);\n}\n","import { findSelector } from './find-selector';\n\nexport function isValidSelector(selector: string) {\n try {\n if (!selector || findSelector(selector) == null) {\n return false;\n }\n return true;\n } catch {\n return false;\n }\n}\n","import { getHighestZindex } from '@pixpilot/dom';\nimport { IconButton } from '@storybook/components';\nimport { AlertIcon, CrossIcon, FailedIcon, PassedIcon } from '@storybook/icons';\nimport React from 'react';\n\nexport type AlertVariant = 'error' | 'info' | 'warning' | 'success' | 'default';\n\nexport interface AlertBaseProps {\n variant?: AlertVariant;\n description?: React.ReactNode;\n duration?: number; // in milliseconds\n title?: string;\n className?: string;\n closeButton?: boolean;\n}\n\nexport interface AlertToastProps extends AlertBaseProps {\n onClose?: () => void;\n description?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction getVariantIcon(variant: AlertVariant) {\n switch (variant) {\n case 'success':\n return <PassedIcon />;\n case 'error':\n return <FailedIcon />;\n case 'warning':\n return <AlertIcon />;\n case 'info':\n return <AlertIcon />;\n default:\n return null;\n }\n}\n\nfunction getVariantIconColor(variant: AlertVariant, isDarkMode: boolean) {\n switch (variant) {\n case 'success':\n return isDarkMode ? '#4ade80' : '#166534';\n case 'error':\n return isDarkMode ? '#f87171' : '#991b1b';\n case 'warning':\n return isDarkMode ? '#fbbf24' : '#92400e';\n case 'info':\n return isDarkMode ? '#60a5fa' : '#1e40af';\n default:\n return 'currentColor';\n }\n}\n\nexport const ToastMessageContainer: React.FC<React.HTMLAttributes<HTMLDivElement>> = (\n props,\n) => {\n return (\n <div\n {...props}\n style={{\n fontSize: '11px',\n lineHeight: '14px',\n opacity: 0.9,\n overflowWrap: 'anywhere',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n ...props.style,\n }}\n ></div>\n );\n};\n\nconst AlertToast: React.FC<AlertToastProps> = ({\n title,\n description,\n variant = 'info',\n onClose,\n style,\n closeButton = true,\n children,\n ...rest\n}) => {\n const isLightMode = document.body.classList.contains('light');\n\n const backgroundColor = isLightMode ? 'rgba(32, 34, 37, 0.98)' : 'rgb(238, 243, 246)';\n const borderColor = isLightMode\n ? 'rgba(255, 255, 255, 0.08)'\n : 'rgba(206, 197, 197, 0.315)';\n const textColor = isLightMode ? 'rgba(255, 255, 255, 0.88)' : 'rgba(34, 36, 37, 0.75)';\n const titleColor = isLightMode ? 'rgba(255, 255, 255, 0.96)' : 'rgb(115, 130, 140)';\n const closeButtonColor = isLightMode\n ? 'rgba(255, 255, 255, 0.72)'\n : 'rgba(34, 36, 37, 0.6)';\n\n const containerStyle: React.CSSProperties = {\n alignItems: 'center',\n background: backgroundColor,\n border: `1px solid ${borderColor}`,\n borderRadius: '5px',\n boxShadow: isLightMode\n ? '0 14px 32px rgba(0, 0, 0, 0.35)'\n : '0 10px 28px rgba(15, 23, 42, 0.12)',\n color: textColor,\n display: 'flex',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n gap: '12px',\n maxWidth: '450px',\n overflow: 'hidden',\n padding: '12px 16px',\n position: 'relative',\n zIndex: getHighestZindex() + 1,\n ...style,\n };\n\n const variantIcon = getVariantIcon(variant);\n const variantIconColor = getVariantIconColor(variant, isLightMode);\n\n const descriptioncomponent =\n typeof description === 'string'\n ? description.split('\\n').map((line, index) => (\n <span key={index}>\n {line}\n <br />\n </span>\n ))\n : description;\n\n return (\n <div style={containerStyle} {...rest}>\n {variantIcon && <div style={{ color: variantIconColor }}>{variantIcon}</div>}\n\n <div style={{ flex: 1, minWidth: 0 }}>\n {title && (\n <div\n style={{\n color: titleColor,\n fontSize: '12px',\n fontWeight: 700,\n lineHeight: '16px',\n marginBottom: '2px',\n }}\n >\n {title}\n </div>\n )}\n {description && (\n <ToastMessageContainer>{descriptioncomponent}</ToastMessageContainer>\n )}\n {children}\n </div>\n\n {onClose && closeButton && (\n <IconButton\n onClick={onClose}\n aria-label=\"Dismiss notification\"\n title=\"Dismiss notification\"\n style={{ color: closeButtonColor }}\n >\n <CrossIcon />\n </IconButton>\n )}\n </div>\n );\n};\n\nexport default AlertToast;\n","import type { ExternalToast, ToastT } from 'sonner';\nimport type { AlertBaseProps, AlertToastProps, AlertVariant } from './AlertToast';\nimport { simpleHash } from '@pixpilot/hash';\nimport React from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport AlertToast from './AlertToast';\n\nexport const DEFAULT_ALERT_DURATION = 10_000;\n\ninterface ToastOwnProps extends Pick<\n ToastT,\n 'dismissible' | 'duration' | 'position' | 'onAutoClose' | 'onDismiss' | 'closeButton'\n> {\n id?: string;\n}\n\ninterface ToastProps extends AlertBaseProps, ToastOwnProps {\n description?: string;\n}\n\nexport type ToastMessage =\n | string\n | ({ title: string; description: string } & AlertToastProps);\n\ninterface ToastCustomRenderProps {\n id: string | number;\n dismiss: () => void;\n}\n\ntype ToastCustomContent =\n | React.ReactElement\n | ((props: ToastCustomRenderProps) => React.ReactElement);\n\nexport interface ToastFunction {\n (props: ToastProps): string;\n error: (message: ToastMessage, options?: ToastOwnProps) => string;\n success: (message: ToastMessage, options?: ToastOwnProps) => string;\n warning: (message: ToastMessage, options?: ToastOwnProps) => string;\n info: (message: ToastMessage, options?: ToastOwnProps) => string;\n custom: (component: ToastCustomContent, options?: ExternalToast) => string | number;\n dismiss: (id: string | number) => void;\n dismissAll: () => void;\n}\n\n// Track toast instances with counter\nconst toastInstances = new Map<string, { currentId: string; counter: number }>();\n\nfunction getToastId(baseId: string) {\n // Get or initialize the instance tracker\n const instance = toastInstances.get(baseId);\n\n if (instance) {\n // Dismiss the previous instance\n sonnerToast.dismiss(instance.currentId);\n\n // Increment counter and create new ID\n instance.counter += 1;\n instance.currentId = `${baseId}_${instance.counter}`;\n } else {\n // First time showing this toast\n toastInstances.set(baseId, {\n counter: 0,\n currentId: `${baseId}_0`,\n });\n }\n\n const currentInstance = toastInstances.get(baseId);\n return currentInstance?.currentId ?? baseId;\n}\n\nfunction getToastHandlers(baseId: string) {\n const cleanUp = (tId: string | number) => {\n const latestInstance = toastInstances.get(baseId);\n if (latestInstance && latestInstance.currentId === tId) {\n toastInstances.delete(baseId);\n }\n };\n\n return {\n onAutoClose: (t: ToastT) => {\n cleanUp(t.id);\n },\n onDismiss: (t: ToastT) => {\n cleanUp(t.id);\n },\n };\n}\nconst toast: ToastFunction = function (props: ToastProps) {\n const { duration, id, dismissible = true, position, ...rest } = props;\n\n let toastId: string;\n let handlers: ReturnType<typeof getToastHandlers> | undefined;\n\n if (id != null) {\n // Use explicit ID directly - no tracking or counter\n toastId = id;\n } else {\n // Auto-generated ID with tracking for replacement\n const baseId = `toast_${simpleHash(\n `${props.title ?? ''}::${props.description ?? ''}`,\n )}`;\n toastId = getToastId(baseId);\n handlers = getToastHandlers(baseId);\n }\n\n sonnerToast.custom(\n (t) => (\n <AlertToast\n {...rest}\n onClose={dismissible ? () => sonnerToast.dismiss(t) : undefined}\n />\n ),\n {\n duration: duration ?? DEFAULT_ALERT_DURATION,\n id: toastId,\n position,\n ...handlers,\n },\n );\n\n return toastId;\n};\n\nfunction createToast(\n variant: AlertVariant,\n message: ToastMessage,\n options?: ToastOwnProps,\n) {\n if (typeof message === 'string') {\n return toast({ ...options, description: message, variant });\n }\n return toast({ ...options, ...message, variant });\n}\n\ntoast.error = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('error', message, options);\ntoast.success = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('success', message, options);\ntoast.warning = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('warning', message, options);\ntoast.info = (message: ToastMessage, options?: ToastOwnProps) =>\n createToast('info', message, options);\n\ntoast.custom = (component: ToastCustomContent, options?: ExternalToast) => {\n const { duration, ...rest } = options || {};\n\n // 1. No tracking Map!\n // 2. No ID generation! (Sonner does this natively if `id` is missing)\n // 3. No counter suffixes!\n\n return sonnerToast.custom(\n (t) => {\n if (typeof component === 'function') {\n return component({\n dismiss: () => sonnerToast.dismiss(t),\n id: t,\n });\n }\n\n return component;\n },\n {\n duration: duration ?? DEFAULT_ALERT_DURATION,\n ...rest, // This passes 'id', 'position', etc., straight to Sonner\n },\n );\n};\ntoast.dismiss = (id: string | number) => {\n sonnerToast.dismiss(id);\n};\n\ntoast.dismissAll = () => {\n sonnerToast.dismiss();\n toastInstances.clear();\n};\n\nexport { toast };\n","import type { ActionSchemaList, StoryAction } from '../typings';\nimport { getActionSchema } from './get-schema';\n\nexport interface ValidationResult {\n required?: string[];\n}\n\nexport interface ActionListValidationResult extends ValidationResult {\n id: string;\n name: string;\n}\n\nexport function validAction(\n schema: ActionSchemaList,\n action: StoryAction,\n): ValidationResult {\n const actionSchema = getActionSchema(schema, action.name);\n\n if (!actionSchema || !actionSchema.required || !actionSchema.required.length) return {};\n\n if (!action.args) {\n return { required: actionSchema.required };\n }\n\n const argKeys = Object.keys(action.args);\n\n if (argKeys.length === 0) {\n return { required: actionSchema.required };\n }\n\n const requiredParams: string[] = [];\n\n for (let i = 0; i < actionSchema.required.length; i++) {\n const requiredParam = actionSchema.required[i];\n const val = action.args[requiredParam];\n if (!val) {\n requiredParams.push(requiredParam);\n }\n }\n\n return {\n required: requiredParams.length === 0 ? undefined : requiredParams,\n };\n}\n\nexport function isValidAction(schema: ActionSchemaList, action: StoryAction) {\n const result = validAction(schema, action);\n\n return result.required === undefined;\n}\n\nexport function validateActionList(schema: ActionSchemaList, actions: StoryAction[]) {\n const result = actions.reduce<ActionListValidationResult[]>((arr, action) => {\n const res = validAction(schema, action);\n if (res.required) {\n arr.push({\n id: action.id,\n name: action.name,\n ...res,\n });\n }\n return arr;\n }, []);\n return result.length === 0 ? undefined : result;\n}\n","import type { ActionDialogDialogProps } from './ActionDialog';\nimport { Button, CircularProgress, makeStyles, TextField } from '@material-ui/core';\nimport NiceModal, { useModal } from '@ebay/nice-modal-react';\n\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { ActionDialog } from './ActionDialog';\nimport { toast } from '../../utils';\n\ninterface StyleProps {\n width?: number | string;\n}\n\nconst useStyles = makeStyles(\n () => {\n return {\n generateButton: {\n marginTop: 8,\n },\n input: {\n width: '100%',\n },\n paper: {\n width: (p: StyleProps) => p.width,\n },\n };\n },\n { name: 'InputDialog' },\n);\nexport { useStyles as useInputDialogStyles };\n\nexport interface InputDialogProps\n extends\n StyleProps,\n Omit<ActionDialogDialogProps, 'onNegativeAction' | 'onPositiveAction' | 'onClose'> {\n onSave: (content: string) => void;\n onCancel?: () => void;\n onClose: (closed?: true) => void;\n value?: string;\n required?: boolean;\n requiredMessage?: string;\n label?: string;\n onGenerateContent?: () => Promise<string | undefined>;\n}\n\nconst InputDialog: React.FC<InputDialogProps> = ({\n value = '',\n onSave,\n requiredMessage = 'Field is required',\n required,\n onCancel,\n onClose,\n width = '30%',\n open,\n children,\n label,\n onGenerateContent,\n ...rest\n}) => {\n const [inputValue, setValue] = useState(value);\n const [hasError, setHasError] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n\n const classes = useStyles({ width });\n const showGenerateButton = Boolean(onGenerateContent);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n }, []);\n\n const handleClose = useCallback(() => {\n onClose(true);\n if (onCancel) {\n onCancel();\n }\n }, [onCancel, onClose]);\n\n const handleSave = useCallback(() => {\n if (required && !inputValue) {\n toast.error(requiredMessage);\n setHasError(true);\n return;\n }\n onSave(inputValue.trim());\n }, [inputValue, onSave, required, requiredMessage]);\n\n const handleGenerate = useCallback(async () => {\n if (!onGenerateContent) return;\n setIsGenerating(true);\n try {\n const generated = await onGenerateContent();\n if (generated !== undefined) {\n setValue(generated);\n }\n } finally {\n setIsGenerating(false);\n }\n }, [onGenerateContent]);\n\n useEffect(() => {\n setValue(value);\n }, [value, open]);\n\n return (\n <ActionDialog\n onPositiveAction={handleSave}\n onNegativeAction={handleClose}\n onClose={handleClose}\n open={open}\n {...rest}\n >\n <TextField\n className={classes.input}\n multiline\n rows={3}\n value={inputValue}\n onChange={handleChange}\n variant=\"outlined\"\n autoFocus\n label={label}\n error={hasError}\n required\n InputLabelProps={{\n shrink: true,\n }}\n ></TextField>\n\n {showGenerateButton && (\n <div style={{ justifyContent: 'end', display: 'flex' }}>\n <Button\n className={classes.generateButton}\n size=\"small\"\n onClick={handleGenerate}\n disabled={isGenerating}\n startIcon={isGenerating ? <CircularProgress size={14} /> : undefined}\n >\n {isGenerating ? 'Generating...' : 'Generate Title'}\n </Button>\n </div>\n )}\n {children}\n </ActionDialog>\n );\n};\n\nInputDialog.displayName = 'InputDialog';\n\nexport type InputModalProps = Omit<InputDialogProps, 'open' | 'onClose'>;\n\nconst InputDialogModal = NiceModal.create<InputModalProps>((props) => {\n const modal = useModal();\n\n const handleClose = useCallback(() => {\n modal.hide();\n }, [modal]);\n\n const handleSave = useCallback(\n (content: string) => {\n props.onSave(content);\n modal.hide();\n },\n [modal, props],\n );\n\n return (\n <InputDialog\n {...props}\n open={modal.visible}\n onClose={handleClose}\n onSave={handleSave}\n />\n );\n});\n\nInputDialogModal.displayName = 'InputDialogModal';\n\nexport const INPUT_DIALOG_MODAL_ID = 'input-dialog';\n\nlet registered = false;\n\nconst registerInputDialogModal = () => {\n if (registered) return;\n NiceModal.register(INPUT_DIALOG_MODAL_ID, InputDialogModal);\n registered = true;\n};\n\nconst inputModal = {\n show: (props: InputModalProps) => NiceModal.show(INPUT_DIALOG_MODAL_ID, props),\n};\n\nexport { InputDialog, inputModal, registerInputDialogModal };\n","import { Backdrop, CircularProgress, makeStyles } from '@material-ui/core';\nimport { getHighestZindex } from '@pixpilot/dom';\nimport React, { memo } from 'react';\nimport tinycolor from 'tinycolor2';\n\nconst useStyles = makeStyles(\n (theme) => {\n const { background } = theme.palette;\n const color = tinycolor(background.paper);\n color.setAlpha(0.5);\n return {\n root: {\n backgroundColor: color.toString(),\n },\n };\n },\n { name: 'Loader' },\n);\n\nexport interface LoaderProps {\n open: boolean;\n progressSize?: number;\n position?: 'relative' | 'absolute';\n}\n\nconst Loader: React.FC<LoaderProps> = memo((props) => {\n const { open, progressSize, position } = props;\n\n const classes = useStyles();\n\n if (!open) return null;\n\n return (\n <Backdrop\n className={`${classes.root} loader-backdrop`}\n style={{ position, zIndex: getHighestZindex() }}\n open={open}\n >\n {open && <CircularProgress size={progressSize} />}\n </Backdrop>\n );\n});\n\nLoader.displayName = 'Loader';\n\nexport { Loader };\n","import type { AppRouter } from './router';\nimport { httpBatchLink } from '@trpc/client';\nimport { createTRPCReact } from '@trpc/react-query';\n\nconst BASE = typeof window !== 'undefined' ? window.location.origin : '';\n\nexport const trpcClient = createTRPCReact<AppRouter>();\n\nexport function createTrpcHttpClient() {\n return trpcClient.createClient({\n links: [\n httpBatchLink({\n maxURLLength: 2083,\n url: `${BASE}/__storybook_playwright/trpc`,\n }),\n ],\n });\n}\n","import type { Theme } from '@material-ui/core';\nimport React from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\n\nexport function useCustomTheme() {\n const [theme, setTheme] = React.useState<Theme>();\n const isTheme = React.useRef(false);\n\n const { data } = trpcClient.theme.getThemeData.useQuery();\n\n React.useEffect(() => {\n if (!isTheme.current && data) {\n setTheme(data as Theme);\n }\n return () => {\n isTheme.current = true;\n };\n }, [data]);\n\n return { setTheme, theme };\n}\n","import { createTheme, ThemeProvider as MuThemeProvider } from '@material-ui/core/styles';\nimport { useStorybookState } from '@storybook/manager-api';\nimport React, { memo } from 'react';\nimport { useCustomTheme } from '../../features/theme/hooks/use-custom-theme';\n// import global from 'jss-plugin-global';\n\nconst ThemeProvider: React.FC = memo((props) => {\n const { children } = props;\n\n const { theme: storyBookTheme } = useStorybookState();\n const { theme: customTheme } = useCustomTheme();\n const theme = createTheme(\n {\n palette: {\n action: { active: storyBookTheme.barTextColor },\n background: {\n default: storyBookTheme.appBg,\n paper: storyBookTheme.appContentBg,\n },\n divider: storyBookTheme.appBorderColor,\n primary: { main: storyBookTheme.colorSecondary },\n secondary: { main: storyBookTheme.colorPrimary },\n text: { primary: storyBookTheme.barTextColor },\n type: storyBookTheme.base === 'dark' ? 'dark' : 'light',\n },\n typography: {\n fontFamily: storyBookTheme.fontBase,\n },\n },\n customTheme || {},\n );\n\n return <MuThemeProvider theme={theme}>{children}</MuThemeProvider>;\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n\nexport { ThemeProvider };\n","import { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React from 'react';\n\nconst useStyles = makeStyles(\n (theme) => {\n const { divider, text } = theme.palette;\n\n return {\n root: {\n '& button': {\n alignItems: 'center',\n display: 'flex',\n marginTop: 0,\n },\n '& svg': {\n width: 18,\n },\n '&.border-bottom': {\n borderBottom: `1px solid ${divider}`,\n },\n '&.border-left': {\n borderLeft: `1px solid ${divider}`,\n },\n '&.border-right': {\n borderRight: `1px solid ${divider}`,\n },\n '&.border-top': {\n borderTop: `1px solid ${divider}`,\n },\n padding: 2,\n },\n toolbar: {\n '& > .left': {\n '& > *': {\n marginLeft: 8,\n },\n },\n '& > .left,& > .right': {\n alignItems: 'center',\n display: 'flex',\n minWidth: 0,\n },\n '& > .right': {\n '& > *': {\n marginRight: 6,\n },\n },\n alignItems: 'center',\n color: text.primary,\n display: 'flex',\n justifyContent: 'space-between',\n },\n };\n },\n { name: 'Toolbar' },\n);\n\ntype Border = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface ToolbarProps {\n border?: Border[];\n}\n\nconst Toolbar: React.FC<ToolbarProps> = (props) => {\n const { children, border } = props;\n\n const classes = useStyles();\n\n return (\n <div\n className={\n clsx(classes.root) + (border && border.map((x) => ` border-${x}`).join(' '))\n }\n >\n <div className={classes.toolbar}>{children}</div>\n </div>\n );\n};\n\nToolbar.displayName = 'Toolbar';\n\nexport { Toolbar };\n","import type { ActionPopoverProps } from './ActionPopover';\nimport { Typography } from '@material-ui/core';\nimport React, { memo, useCallback } from 'react';\nimport { ActionPopover } from './ActionPopover';\n\nexport interface ConfirmationPopoverProps extends ActionPopoverProps {\n onConfirm: () => void;\n onCancel?: () => void;\n message?: string;\n}\n\nconst ConfirmationPopover: React.FC<ConfirmationPopoverProps> = memo(\n ({\n message = 'Are you sure you want to continue?',\n title = 'Confirmation',\n onConfirm,\n onCancel,\n onClose,\n ...rest\n }) => {\n const handleCancel = useCallback(() => {\n if (onCancel) onCancel();\n if (onClose) {\n onClose({}, 'backdropClick');\n }\n }, [onCancel, onClose]);\n\n return (\n <ActionPopover\n onPositiveAction={onConfirm}\n onNegativeAction={handleCancel}\n positiveActionName=\"yes\"\n negativeActionName=\"no\"\n onClose={handleCancel}\n title={title}\n {...rest}\n >\n <Typography>{message}</Typography>\n </ActionPopover>\n );\n },\n);\n\nConfirmationPopover.displayName = 'ConfirmationPopover';\n\nexport { ConfirmationPopover };\n","import DragIndicatorSharp from '@material-ui/icons/DragIndicatorSharp';\nimport clsx from 'clsx';\nimport React from 'react';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst DragIndicatorSharpIcon = resolveMuiIcon(DragIndicatorSharp);\n\nexport interface DragHandleProps extends React.HTMLAttributes<HTMLSpanElement> {\n setNodeRef?: (element: HTMLSpanElement | null) => void;\n}\n\nexport const DragHandle: React.FC<DragHandleProps> = ({\n className,\n setNodeRef,\n ...rest\n}) => {\n return (\n <span\n className={clsx('drag-handle', className)}\n ref={setNodeRef}\n style={{ cursor: 'move', display: 'inline-flex' }}\n {...rest}\n >\n <DragIndicatorSharpIcon\n style={{\n cursor: 'move',\n fontSize: 25,\n marginLeft: -12,\n marginRight: 2,\n }}\n />\n </span>\n );\n};\n\nDragHandle.displayName = 'DragHandle';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { DragHandleProps } from './DragHandle';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { useCallback } from 'react';\nimport tinycolor from 'tinycolor2';\nimport { DragHandle } from './DragHandle';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { divider, text, primary, secondary },\n } = theme;\n\n return {\n column: {\n alignItems: 'center',\n display: 'flex',\n },\n handle: {\n fontSize: 24,\n },\n header: {\n '& svg': {\n '&:hover': {\n color: primary.main,\n },\n fontSize: 18,\n },\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n minHeight: '48px',\n padding: '5px 8px',\n paddingLeft: 16,\n },\n icons: {\n display: 'flex',\n gap: 2,\n },\n root: {\n border: `1px solid ${divider}`,\n color: text.primary,\n display: 'flex',\n flexDirection: 'column',\n fontSize: 14,\n marginBottom: 4,\n position: 'relative',\n },\n secondaryColor: {\n '& svg': {\n color: secondary.main,\n },\n color: secondary.main,\n },\n selected: {\n border: `1px solid ${tinycolor(primary.main).setAlpha(0.6)}`,\n },\n selectedSecondary: {\n border: `1px solid ${secondary.main}`,\n },\n };\n },\n { name: 'ListItemWrapper' },\n);\n\nexport interface ListItemWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n draggable?: boolean;\n selected?: boolean;\n tooltip: string;\n icons?: React.ReactNode;\n secondaryColor?: boolean;\n dragHandleProps?: DragHandleProps;\n}\n\nconst ListItemWrapper: React.FC<ListItemWrapperProps> = (props) => {\n const {\n title,\n draggable,\n children,\n selected,\n className,\n onClick,\n tooltip,\n icons,\n secondaryColor,\n dragHandleProps,\n ...rest\n } = props;\n\n const classes = useStyles();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (onClick && (e.target as HTMLDivElement).classList.contains('clickable')) {\n onClick(e);\n }\n },\n [onClick],\n );\n\n return (\n <div\n className={clsx(\n classes.root,\n { [classes.selected]: selected && !secondaryColor },\n { [classes.selectedSecondary]: selected && secondaryColor },\n className,\n )}\n {...rest}\n title={tooltip}\n onClick={handleClick}\n >\n <div className={clsx('clickable', classes.header, 'list-item-header')}>\n <div\n className={clsx(classes.column, 'clickable', {\n [classes.secondaryColor]: secondaryColor,\n })}\n >\n {draggable && <DragHandle {...dragHandleProps} />}\n {capitalize(title)}\n </div>\n <div\n className={clsx('clickable', classes.column, classes.icons, {\n [classes.secondaryColor]: secondaryColor,\n })}\n >\n {icons}\n </div>\n </div>\n {children && <div className=\"list-item-content\">{children}</div>}\n </div>\n );\n};\n\nListItemWrapper.displayName = 'ListItemWrapper';\n\nexport { ListItemWrapper };\n","import { makeStyles } from '@material-ui/core';\nimport { ScrollArea } from '@storybook/components';\nimport clsx from 'clsx';\nimport React, { useEffect, useRef } from 'react';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n root: {\n '& *:focus': { outline: 'none' },\n color: theme.palette.text.primary,\n height: 'calc(100% - 50px)',\n padding: 4,\n width: '100%',\n },\n };\n },\n { name: 'ListWrapper' },\n);\n\nexport { useStyles as useListWrapperStyles };\n\nconst ListWrapper: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => {\n const { children, ...rest } = props;\n\n const classes = useStyles();\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current || !ref.current.parentElement) return;\n // setting storybook panel to height to stretch our panel\n ref.current.parentElement.style.height = '100%';\n }, []);\n\n return (\n <div ref={ref} {...rest} className={clsx(classes.root, props.className)}>\n <ScrollArea vertical>{children}</ScrollArea>\n </div>\n );\n};\n\nconst ListWrapperSortableContainer: React.FC<React.HTMLAttributes<HTMLDivElement>> = (\n props,\n) => {\n return <ListWrapper {...props} />;\n};\n\nListWrapperSortableContainer.displayName = 'ListWrapperSortableContainer';\n\nListWrapper.displayName = 'ListWrapper';\n\nexport { ListWrapper, ListWrapperSortableContainer };\n","import { IconButton as StorybookIconButton } from '@storybook/components';\nimport { TrashIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport { ConfirmationPopover } from '../common';\n\nexport interface DeleteConfirmationButtonProps {\n onDelete: () => void;\n IconButton?: React.ComponentType<unknown>;\n onClose?: () => void;\n disabled?: boolean;\n}\n\nconst DeleteConfirmationButton: React.FC<DeleteConfirmationButtonProps> = ({\n onDelete,\n IconButton = StorybookIconButton,\n onClose,\n disabled,\n}) => {\n const [confirmAnchorEl, setConfirmAnchorEl] = React.useState<HTMLButtonElement | null>(\n null,\n );\n\n const handleDelete = useCallback((e: React.SyntheticEvent<Element, Event>) => {\n e.stopPropagation();\n setConfirmAnchorEl(e.currentTarget as HTMLButtonElement);\n }, []);\n\n const closeDeleteConfirmation = useCallback(() => {\n if (onClose) onClose();\n setConfirmAnchorEl(null);\n }, [onClose]);\n\n const handleDeleteConfirmation = useCallback(() => {\n closeDeleteConfirmation();\n onDelete();\n }, [closeDeleteConfirmation, onDelete]);\n\n return (\n <>\n <IconButton\n disabled={disabled}\n onClick={handleDelete}\n title=\"Delete Item\"\n size=\"small\"\n >\n <TrashIcon />\n </IconButton>\n\n {confirmAnchorEl && (\n <ConfirmationPopover\n onClose={closeDeleteConfirmation}\n onConfirm={handleDeleteConfirmation}\n anchorEl={confirmAnchorEl}\n />\n )}\n </>\n );\n};\n\nDeleteConfirmationButton.displayName = 'DeleteConfirmationButton';\n\nexport { DeleteConfirmationButton };\n","import { IconButton } from '@storybook/components';\n\nimport { FormIcon, StopAltHollowIcon } from '@storybook/icons';\nimport React from 'react';\n\nexport interface CheckBoxProps {\n onClick: () => void;\n checked: boolean;\n onChange?: (checked: boolean) => void;\n}\n\nconst CheckBox: React.FC<CheckBoxProps> = (props) => {\n const { onClick, checked, onChange } = props;\n\n const handleClick = React.useCallback(() => {\n onClick();\n if (onChange) {\n onChange(!checked);\n }\n }, [onClick, onChange, checked]);\n\n return (\n <IconButton className=\"check-box\" onClick={handleClick} size=\"small\" active={checked}>\n {checked ? <FormIcon /> : <StopAltHollowIcon />}\n </IconButton>\n );\n};\n\nCheckBox.displayName = 'CheckBox';\n\nexport { CheckBox };\n","import type { ViewportSize } from 'playwright';\nimport type { Ref } from 'react';\nimport { makeStyles, MenuItem } from '@material-ui/core';\nimport React, { forwardRef, memo, useCallback } from 'react';\n\nconst useStyles = makeStyles(\n () => {\n return {\n root: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n };\n },\n { name: 'DeviceListItem' },\n);\n\nexport interface DeviceListItemProps {\n name: string;\n viewportSize?: ViewportSize | null;\n onClick: (deviceName?: string) => void;\n selected?: boolean;\n value?: string;\n}\n\nconst DeviceListItem: React.FC<DeviceListItemProps> = memo(\n forwardRef((props, ref: Ref<HTMLLIElement>) => {\n const { viewportSize, name, value, onClick, selected } = props;\n\n const classes = useStyles();\n\n const handleClick = useCallback(() => {\n onClick(value);\n }, [value, onClick]);\n\n return (\n <MenuItem\n selected={selected}\n ref={ref}\n onClick={handleClick}\n className={classes.root}\n >\n <div>{name}</div>\n <div>{viewportSize && `${viewportSize.width}x${viewportSize.height}`}</div>\n </MenuItem>\n );\n }),\n);\n\nDeviceListItem.displayName = 'DeviceListItem';\n\nexport { DeviceListItem };\n","import type { BrowserContextOptions } from '../../typings';\nimport { Button, Menu } from '@material-ui/core';\nimport React, { useCallback, useMemo } from 'react';\nimport DeviceDescriptors from '../../data/deviceDescriptorsSource.json';\nimport { DeviceListItem } from './DeviceListItem';\n\nexport interface DeviceListProps {\n onDeviceSelect: (deviceName?: string) => void;\n selectedDevice?: BrowserContextOptions;\n}\n\nconst DeviceList: React.FC<DeviceListProps> = (props) => {\n const { onDeviceSelect, selectedDevice } = props;\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLButtonElement>(null);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const devices = useMemo(() => {\n return Object.keys(DeviceDescriptors);\n }, []);\n\n const handleSelection = useCallback(\n (name?: string) => {\n setAnchorEl(null);\n onDeviceSelect(name);\n },\n [onDeviceSelect],\n );\n\n return (\n <>\n <Button onClick={handleClick}>Load From Device Descriptors</Button>\n\n <Menu\n id=\"simple-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <DeviceListItem\n name=\"None\"\n value={undefined}\n onClick={handleSelection}\n selected={false}\n />\n {devices.map((deviceName) => (\n <DeviceListItem\n name={deviceName}\n key={deviceName}\n viewportSize={selectedDevice && selectedDevice.viewport}\n onClick={handleSelection}\n selected={Boolean(selectedDevice && selectedDevice.deviceName === deviceName)}\n value={deviceName}\n />\n ))}\n </Menu>\n </>\n );\n};\n\nDeviceList.displayName = 'DeviceList';\n\nexport { DeviceList };\n","import type { StoryData } from '../schema';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport { useEffect, useState } from 'react';\n\nexport function useCurrentStoryData() {\n const [storyData, setData] = useState<StoryData & { fileName: string }>();\n\n const api = useStorybookApi();\n\n const currentStory = api.getCurrentStoryData();\n\n useEffect(() => {\n if (!currentStory || !currentStory.importPath) return;\n const data = currentStory;\n const filePath = data.importPath;\n const fileName = filePath.substring(filePath.lastIndexOf('/') + 1);\n\n setData({\n fileName,\n filePath,\n id: data.id,\n name: data.name,\n parent: data.parent,\n });\n }, [currentStory]);\n\n return storyData;\n}\n","import type {\n ActionSchemaList,\n ActionSet,\n PlaywrightDataStories,\n} from '../../../typings';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport interface ActionSetState {\n actionSchema: ActionSchemaList;\n expandedActions: { [k: string]: boolean };\n stories: PlaywrightDataStories;\n initialised: boolean;\n currentActionSets: string[];\n orgEditingActionSet?: ActionSet & { isNew?: boolean };\n}\n\nexport const initialActionSetState: ActionSetState = {\n actionSchema: {},\n currentActionSets: [],\n expandedActions: {},\n initialised: true,\n stories: {},\n};\n\nexport const useActionSetStore = create<ActionSetState>()(\n devtools(\n () => ({\n ...initialActionSetState,\n }),\n { name: 'action-set-store' },\n ),\n);\n","import type { StoryAction } from '../../../../typings';\nimport equal from 'fast-deep-equal';\n\nfunction actionsWithoutId(actions: Partial<StoryAction>[]) {\n return actions.map((action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, ...rest } = action;\n return rest;\n });\n}\n\nexport function isSameActions(a: Partial<StoryAction>[], b: Partial<StoryAction>[]) {\n if (a.length !== b.length) return false;\n\n const newA = actionsWithoutId(a);\n\n const newB = actionsWithoutId(b);\n\n return equal(newA, newB);\n}\n","import type { ActionSchemaList, ActionSet, StoryAction } from '../../../typings';\nimport type { ActionSetState } from './action-set-store';\nimport arrayMove from 'array-move';\nimport { nanoid } from 'nanoid';\nimport * as immutableObject from 'object-path-immutable';\nimport { useActionSetStore } from './action-set-store';\nimport { isSameActions } from './utils/index';\n\nconst getState = () => useActionSetStore.getState();\nfunction setState(\n partial: Partial<ActionSetState> | ((state: ActionSetState) => Partial<ActionSetState>),\n) {\n return useActionSetStore.setState(partial);\n}\n\n// --- helpers ---\n\nfunction updateStoryActionSet(\n state: ActionSetState,\n storyId: string,\n actionSets: ActionSet[],\n): Partial<ActionSetState> {\n return {\n stories: {\n ...state.stories,\n [storyId]: {\n ...state.stories[storyId],\n actionSets,\n },\n },\n };\n}\n\nfunction updateStoryEditingActionSet(\n state: ActionSetState,\n storyId: string,\n actionSetId: string,\n updater: (actionSet: ActionSet) => ActionSet,\n): Partial<ActionSetState> {\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n return {\n stories: {\n ...state.stories,\n [storyId]: {\n ...state.stories[storyId],\n actionSets: storyActionSets.map((act) => {\n if (act.id !== actionSetId) return act;\n return updater(act);\n }),\n },\n },\n };\n}\n\nfunction removeActionSet(\n state: ActionSetState,\n storyId: string,\n actionSetId: string,\n): Partial<ActionSetState> {\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n const updated = updateStoryActionSet(\n state,\n storyId,\n storyActionSets.filter((x) => x.id !== actionSetId),\n );\n return {\n ...updated,\n orgEditingActionSet: undefined,\n };\n}\n\n// --- public actions ---\n\nexport function addActionSetList({\n storyId,\n actionSets,\n}: {\n storyId: string;\n actionSets: ActionSet[];\n}) {\n const state = getState();\n setState(updateStoryActionSet(state, storyId, actionSets));\n}\n\nexport function setScreenShotActionSets({\n storyId,\n actionSets,\n}: {\n storyId: string;\n actionSets: ActionSet[];\n}) {\n const state = getState();\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n const matched = actionSets.reduce((arr, actionSet) => {\n if (storyActionSets.length) {\n let storyActionSet: ActionSet | undefined;\n\n for (let i = 0; i < storyActionSets.length; i++) {\n const act = storyActionSets[i];\n\n if (arr.find((x) => x.id === act.id)) continue;\n\n if (isSameActions(act.actions, actionSet.actions)) {\n storyActionSet = act;\n break;\n }\n }\n\n if (storyActionSet) {\n arr.push(storyActionSet);\n } else {\n arr.push({\n ...actionSet,\n actions: actionSet.actions.map((action) => {\n action.id = nanoid(12);\n return action;\n }),\n id: nanoid(12),\n temp: true,\n });\n }\n } else {\n arr.push({\n ...actionSet,\n actions: actionSet.actions.map((action) => {\n action.id = nanoid(12);\n return action;\n }),\n id: nanoid(12),\n temp: true,\n });\n }\n return arr;\n }, [] as ActionSet[]);\n\n const currentActionSets: string[] = matched.map((x) => x.id);\n\n const updated = updateStoryActionSet(state, storyId, [\n ...matched,\n ...storyActionSets.filter((x) => !currentActionSets.includes(x.id)),\n ]);\n\n setState({\n ...updated,\n currentActionSets,\n });\n}\n\nexport function addActionSet({\n storyId,\n actionSet,\n selected,\n isNew,\n}: {\n storyId: string;\n actionSet: ActionSet;\n selected: boolean;\n isNew?: boolean;\n}) {\n const state = getState();\n const newAction = [\n ...(state.stories[storyId]\n ? (state.stories[storyId].actionSets || []).filter((x) => x.id !== actionSet.id)\n : []),\n actionSet,\n ];\n\n const updated = updateStoryActionSet(state, storyId, newAction);\n\n setState({\n ...updated,\n currentActionSets: selected\n ? [...(state.currentActionSets ? state.currentActionSets : []), actionSet.id]\n : state.currentActionSets,\n orgEditingActionSet: isNew ? { ...actionSet, isNew: true } : undefined,\n });\n}\n\nexport function setCurrentActionSets(actionSetIds: string[]) {\n setState({ currentActionSets: actionSetIds });\n}\n\nexport function clearCurrentActionSets() {\n setState({ currentActionSets: [] });\n}\n\nexport function deleteActionSet({\n storyId,\n actionSetId,\n}: {\n storyId: string;\n actionSetId: string;\n}) {\n const state = getState();\n setState(removeActionSet(state, storyId, actionSetId));\n}\n\nexport function deleteTempActionSets(storyId: string) {\n const state = getState();\n if (!state.stories[storyId] || !state.stories[storyId].actionSets) {\n return;\n }\n\n setState(\n updateStoryActionSet(\n state,\n storyId,\n state.stories[storyId].actionSets.filter((x) => !x.temp),\n ),\n );\n}\n\nexport function sortActionSets({\n storyId,\n oldIndex,\n newIndex,\n}: {\n storyId: string;\n oldIndex: number;\n newIndex: number;\n}) {\n const state = getState();\n const storyActionSets = state.stories[storyId]?.actionSets || [];\n\n setState(\n updateStoryActionSet(state, storyId, [\n ...arrayMove(storyActionSets, oldIndex, newIndex),\n ]),\n );\n}\n\nexport function toggleCurrentActionSet(actionSetId: string) {\n const state = getState();\n const isCurrent = state.currentActionSets.find((x) => x === actionSetId);\n setState({\n currentActionSets: isCurrent\n ? state.currentActionSets.filter((x) => x !== actionSetId)\n : [...state.currentActionSets, actionSetId],\n });\n}\n\nexport function toggleActionExpansion(actionId: string) {\n const state = getState();\n const expand = state.expandedActions[actionId] === true;\n setState({\n expandedActions: {\n ...state.expandedActions,\n [actionId]: !expand,\n },\n });\n}\n\nexport function clearActionExpansion() {\n setState({ expandedActions: {} });\n}\n\nexport function setActionSchema(actionSchema: ActionSchemaList) {\n setState({ actionSchema });\n}\n\nexport function cancelEditActionSet(storyId: string) {\n const state = getState();\n const { orgEditingActionSet } = state;\n\n if (!orgEditingActionSet) return;\n\n const { isNew, ...rest } = orgEditingActionSet;\n\n if (isNew) {\n setState(removeActionSet(state, storyId, orgEditingActionSet.id));\n } else {\n const updated = updateStoryEditingActionSet(\n state,\n storyId,\n orgEditingActionSet.id,\n (actionSet) => ({ ...actionSet, ...rest }),\n );\n setState({\n ...updated,\n orgEditingActionSet: undefined,\n });\n }\n}\n\nexport function editActionSet(actionSet: ActionSet) {\n const state = getState();\n setState({\n currentActionSets: [...state.currentActionSets, actionSet.id],\n orgEditingActionSet: actionSet,\n });\n}\n\nexport function setActionSetTitle({\n storyId,\n actionSetId,\n title,\n}: {\n storyId: string;\n actionSetId: string;\n title: string;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n title,\n })),\n );\n}\n\nexport function addActionSetAction({\n storyId,\n actionSetId,\n action,\n}: {\n storyId: string;\n actionSetId: string;\n action: StoryAction;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: [...actionSet.actions, action],\n })),\n );\n}\n\nexport function toggleSubtitleItem({\n storyId,\n actionSetId,\n actionId,\n actionOptionPath,\n}: {\n storyId: string;\n actionSetId: string;\n actionId: string;\n actionOptionPath: string;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: actionSet.actions.map((act) => {\n if (act.id === actionId) {\n const hasItem =\n act.subtitleItems && act.subtitleItems.find((x) => x === actionOptionPath);\n return {\n ...act,\n subtitleItems:\n hasItem && act.subtitleItems\n ? act.subtitleItems.filter((x) => x !== actionOptionPath)\n : [...(act.subtitleItems || []), actionOptionPath],\n };\n }\n return act;\n }),\n })),\n );\n}\n\nexport function moveActionSetAction({\n storyId,\n actionSetId,\n oldIndex,\n newIndex,\n}: {\n storyId: string;\n actionSetId: string;\n oldIndex: number;\n newIndex: number;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: [...arrayMove(actionSet.actions, oldIndex, newIndex)],\n })),\n );\n}\n\nexport function deleteActionSetAction({\n storyId,\n actionSetId,\n actionId,\n}: {\n storyId: string;\n actionSetId: string;\n actionId: string;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: actionSet.actions.filter((x) => x.id !== actionId),\n })),\n );\n}\n\nexport function setActionOptions({\n storyId,\n actionSetId,\n actionId,\n objPath,\n val,\n}: {\n storyId: string;\n actionSetId: string;\n actionId: string;\n objPath: string;\n val: unknown;\n}) {\n const state = getState();\n setState(\n updateStoryEditingActionSet(state, storyId, actionSetId, (actionSet) => ({\n ...actionSet,\n actions: actionSet.actions.map((act) => {\n if (act.id === actionId) {\n return {\n ...act,\n args: immutableObject.set(act.args, objPath, val),\n };\n }\n return act;\n }),\n })),\n );\n}\n\nexport function saveActionSet() {\n setState({ orgEditingActionSet: undefined });\n}\n","import type { ActionSetState } from './action-set-store';\nimport { useActionSetStore } from './action-set-store';\n\nexport function getActionSetState(): ActionSetState {\n return useActionSetStore.getState();\n}\n\nexport function useActionSchema() {\n return useActionSetStore((s) => s.actionSchema);\n}\n\nexport function useExpandedActions() {\n return useActionSetStore((s) => s.expandedActions);\n}\n\nexport function useStories() {\n return useActionSetStore((s) => s.stories);\n}\n\nexport function useCurrentActionSetIds() {\n return useActionSetStore((s) => s.currentActionSets);\n}\n\nexport function useOrgEditingActionSet() {\n return useActionSetStore((s) => s.orgEditingActionSet);\n}\n\nexport function useInitialised() {\n return useActionSetStore((s) => s.initialised);\n}\n\nexport function useActionSetStoreState() {\n return useActionSetStore();\n}\n","import type {\n AddonState,\n BrowserContextOptions,\n ScreenshotData,\n ScreenshotOptions,\n ScreenshotTestTargetType,\n} from '../typings';\nimport type { SelectorState } from '../typings/selector';\nimport { create } from 'zustand';\nimport { devtools, persist } from 'zustand/middleware';\n\nexport interface BrowsersOption {\n chromium?: BrowserContextOptions;\n firefox?: BrowserContextOptions;\n webkit?: BrowserContextOptions;\n all?: BrowserContextOptions;\n}\n\nexport type BrowsersOptionTypes = keyof BrowsersOption;\n\nexport type SelectorType = 'selector' | 'position' | 'id-selector';\n\nexport interface SelectorManageSharedProps {\n type?: SelectorType;\n onData?: (data: SelectorState) => void;\n onStop?: () => void;\n}\n\nexport interface SelectorManger extends SelectorManageSharedProps {\n start: boolean;\n}\n\nexport interface EditScreenshotState {\n storyId: string;\n screenshotData: ScreenshotData;\n currentScreenshotOptions?: ScreenshotOptions;\n currentBrowserOptions?: BrowserContextOptions;\n}\n\nexport interface ScreenshotUpdateOptions {\n inProgress?: boolean;\n target?: ScreenshotTestTargetType;\n reqBy?: string;\n}\n\nexport interface UIState {\n addonState: AddonState;\n browserOptions: BrowsersOption;\n screenshotOptions: ScreenshotOptions;\n dragStart: boolean;\n selectorManager: SelectorManger;\n screenshotUpdateState: ScreenshotUpdateOptions;\n editScreenshotState: EditScreenshotState | undefined;\n schemaLoaded: boolean;\n}\n\nexport const initialUIState: UIState = {\n addonState: {\n clippingWarningDismissed: false,\n previewPanelEnabled: true,\n } as AddonState,\n browserOptions: { all: {} },\n dragStart: false,\n editScreenshotState: undefined,\n schemaLoaded: false,\n screenshotOptions: {},\n screenshotUpdateState: {},\n selectorManager: {} as SelectorManger,\n};\n\nexport const useUIStore = create<UIState>()(\n devtools(\n persist(() => ({ ...initialUIState }), {\n name: '__playwright_ui-store',\n partialize: (state) => ({\n addonState: state.addonState,\n browserOptions: state.browserOptions,\n screenshotOptions: state.screenshotOptions,\n }),\n }),\n { name: 'ui-store' },\n ),\n);\n","import type { AddonState, ScreenshotOptions } from '../typings';\nimport type {\n BrowsersOption,\n EditScreenshotState,\n ScreenshotUpdateOptions,\n SelectorManger,\n UIState,\n} from './ui-store';\nimport { useUIStore } from './ui-store';\n\nfunction setState(partial: Partial<UIState> | ((state: UIState) => Partial<UIState>)) {\n return useUIStore.setState(partial);\n}\n\nexport function setAddonState(addonState: AddonState) {\n setState({ addonState });\n}\n\nexport function setBrowserOptions(browserOptions: BrowsersOption) {\n setState({ browserOptions });\n}\n\nexport function setScreenshotOptionsState(screenshotOptions: ScreenshotOptions) {\n setState({ screenshotOptions });\n}\n\nexport function setDragStart(dragStart: boolean) {\n setState({ dragStart });\n}\n\nexport function setSelectorManager(selectorManager: SelectorManger) {\n setState({ selectorManager });\n}\n\nexport function setScreenshotUpdateState(screenshotUpdateState: ScreenshotUpdateOptions) {\n setState({ screenshotUpdateState });\n}\n\nexport function setEditScreenshotState(\n editScreenshotState: EditScreenshotState | undefined,\n) {\n setState({ editScreenshotState });\n}\n\nexport function setSchemaLoaded(schemaLoaded: boolean) {\n setState({ schemaLoaded });\n}\n","import { useUIStore } from './ui-store';\n\nexport function useAddonStateValue() {\n return useUIStore((s) => s.addonState);\n}\n\nexport function useBrowserOptionsValue() {\n return useUIStore((s) => s.browserOptions);\n}\n\nexport function useScreenshotOptionsValue() {\n return useUIStore((s) => s.screenshotOptions);\n}\n\nexport function useDragStartValue() {\n return useUIStore((s) => s.dragStart);\n}\n\nexport function useSelectorManagerValue() {\n return useUIStore((s) => s.selectorManager);\n}\n\nexport function useScreenshotUpdateStateValue() {\n return useUIStore((s) => s.screenshotUpdateState);\n}\n\nexport function useEditScreenshotStateValue() {\n return useUIStore((s) => s.editScreenshotState);\n}\n\nexport function useSchemaLoaded() {\n return useUIStore((s) => s.schemaLoaded);\n}\n","import type { ActionSet, StoryAction } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport React, { useCallback, useEffect } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport {\n addActionSetAction,\n cancelEditActionSet,\n clearActionExpansion,\n saveActionSet as saveActionSetStore,\n setActionSetTitle,\n toggleActionExpansion,\n useActionSetStoreState,\n} from '../../../store';\nimport { validateActionList } from '../../../utils';\nimport { toast } from '../../../utils/toast';\n\nexport function useActionEditor(actionSet: ActionSet) {\n const { mutateAsync, isPending: inProgress } =\n trpcClient.actionSet.saveActionSet.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n });\n\n const state = useActionSetStoreState();\n\n const storyData = useCurrentStoryData();\n\n const handleAddAction = useCallback(\n (actionName: string) => {\n if (!storyData) return;\n\n const actionId = nanoid(10);\n const newAction: StoryAction = {\n id: actionId,\n name: actionName,\n };\n clearActionExpansion();\n addActionSetAction({\n action: newAction,\n actionSetId: actionSet.id,\n storyId: storyData.id,\n });\n toggleActionExpansion(actionId);\n },\n [storyData, actionSet.id],\n );\n\n useEffect(() => () => clearActionExpansion(), []);\n\n const handleSave = useCallback(async () => {\n const validateResult = validateActionList(state.actionSchema, actionSet.actions);\n\n if (validateResult) {\n const message = validateResult\n .map((result) => {\n if (!result.required || result.required.length === 0) return undefined;\n\n return `Action name: ${result.name}\\nRequired: ${result.required.join(',')}`;\n })\n .filter(Boolean)\n .join('\\n\\n');\n\n if (message) {\n toast.error(message, {\n closeButton: true,\n duration: 60000,\n id: 'action-set-editor-validation',\n });\n return;\n }\n }\n\n if (!actionSet.temp) {\n if (!storyData) return;\n\n try {\n await mutateAsync({\n actionSet,\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n } catch {\n return;\n }\n }\n saveActionSetStore();\n }, [actionSet, mutateAsync, state.actionSchema, storyData]);\n\n // const clearValidationResult = useCallback(() => {\n // setValidationResult(undefined);\n // }, []);\n\n const handleDescriptionChange = useCallback(\n (title: string) => {\n if (!storyData || !state.orgEditingActionSet) return;\n\n setActionSetTitle({\n actionSetId: state.orgEditingActionSet.id,\n storyId: storyData.id,\n title,\n });\n },\n [storyData, state.orgEditingActionSet],\n );\n\n const handleCancelEditActionSet = useCallback(() => {\n if (!storyData) return;\n\n cancelEditActionSet(storyData.id);\n }, [storyData]);\n\n const editingAction = actionSet !== undefined;\n const storyId = storyData && storyData.id;\n\n React.useEffect(\n () => () => {\n if (editingAction && storyId) handleCancelEditActionSet();\n },\n [handleCancelEditActionSet, editingAction, storyId],\n );\n\n return {\n cancelEditActionSet: handleCancelEditActionSet,\n\n handleAddAction,\n handleDescriptionChange,\n handleSave,\n inProgress,\n state,\n };\n}\n","import type { StoryData } from '../../../schema';\nimport type { ActionSet } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { addActionSet as addActionSetToStore } from '../../../store';\nimport { toast } from '../../../utils/toast';\n\nexport function useCopyActionSet(storyData?: StoryData) {\n const { mutateAsync, isPending: inProgress } =\n trpcClient.actionSet.saveActionSet.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n });\n\n const copyActionSet = useCallback(\n async (actionSet: ActionSet) => {\n if (!storyData) return;\n\n const copyActionSet = JSON.parse(JSON.stringify(actionSet)) as ActionSet;\n copyActionSet.id = nanoid(12);\n try {\n await mutateAsync({\n actionSet: copyActionSet,\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n addActionSetToStore({\n actionSet: copyActionSet,\n isNew: false,\n selected: true,\n storyId: storyData.id,\n });\n } catch {}\n },\n [storyData, mutateAsync],\n );\n\n return { copyActionSet, inProgress };\n}\n","import type { ActionSet } from '../../../typings';\nimport { useMemo } from 'react';\nimport { useActionSetStoreState } from '../../../store';\n\nexport function useCurrentActions(storyId: string) {\n const state = useActionSetStoreState();\n\n const currentActions = useMemo((): ActionSet[] => {\n if (!state.initialised) return [];\n\n const storyData = state.stories[storyId];\n if (!storyData?.actionSets) return [];\n\n return storyData.actionSets.filter((x) => state.currentActionSets.includes(x.id));\n }, [state.currentActionSets, state.initialised, state.stories, storyId]);\n\n return { currentActions, state };\n}\n","import type { ActionSet } from '../../../typings';\nimport { useStorybookState } from '@storybook/manager-api';\nimport { useEffect, useState } from 'react';\nimport { useActionSetStoreState } from '../../../store';\n\nexport function useCurrentStoryActionSets() {\n const storybookState = useStorybookState();\n\n const state = useActionSetStoreState();\n\n const [storyActionSets, setStoryActionSets] = useState<ActionSet[]>([]);\n\n useEffect(() => {\n if (!state.stories || !state.stories[storybookState.storyId]) {\n setStoryActionSets([]);\n return;\n }\n const actionSets = state.stories[storybookState.storyId].actionSets || [];\n setStoryActionSets(actionSets);\n }, [state.stories, storybookState.storyId]);\n\n return { currentActionSets: state.currentActionSets, state, storyActionSets };\n}\n","import type { StoryAction } from '../../../typings';\nimport { useEffect, useState } from 'react';\nimport { useActionSetStoreState } from '../../../store';\n\nexport function useEditorAction(\n storyId: string,\n actionId: string,\n): StoryAction | undefined {\n const [action, setAction] = useState<StoryAction>();\n const state = useActionSetStoreState();\n\n useEffect(() => {\n const story = storyId ? state.stories?.[storyId] : undefined;\n\n if (\n !storyId ||\n !story ||\n !story.actionSets ||\n !story.actionSets.length ||\n !state.orgEditingActionSet\n ) {\n setAction(undefined);\n return;\n }\n\n const editingActionSet = state.orgEditingActionSet;\n if (!editingActionSet) {\n setAction(undefined);\n return;\n }\n\n const actionSet = story.actionSets.find((x) => x.id === editingActionSet.id);\n\n if (!actionSet) {\n setAction(undefined);\n return;\n }\n\n const result = actionSet.actions.find((x) => x.id === actionId);\n setAction(result);\n }, [actionId, state, storyId]);\n\n return action;\n}\n","import { useEffect } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks';\nimport { addActionSetList } from '../../../store';\nimport { toast } from '../../../utils';\n\ninterface LoadedStory {\n [fileName: string]: {\n [storyId: string]: boolean;\n };\n}\n\nconst __loadedFiles: LoadedStory = {};\n\nexport function useStoryActionSetsLoader() {\n const { mutateAsync, isPending: loading } =\n trpcClient.actionSet.getActionSet.useMutation();\n\n const { id: storyId, filePath } = useCurrentStoryData() || {};\n\n useEffect(() => {\n if (\n !filePath ||\n !storyId ||\n loading ||\n (__loadedFiles[filePath] && __loadedFiles[filePath][storyId])\n )\n return;\n\n mutateAsync({ filePath, storyId })\n .then((actionSets) => {\n if (!__loadedFiles[filePath]) {\n __loadedFiles[filePath] = {};\n }\n\n __loadedFiles[filePath][storyId] = true;\n\n if (actionSets) {\n addActionSetList({ actionSets, storyId });\n }\n })\n .catch((error) => {\n const message =\n error instanceof Error ? error.message : 'Failed to load action sets';\n\n toast.error(message, {\n duration: Infinity,\n id: `action-set-list:${message}`,\n });\n });\n }, [filePath, loading, mutateAsync, storyId]);\n\n return { loading };\n}\n","import type { ActionSchemaList } from '../../../typings';\nimport { useCallback, useEffect } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { setActionSchema, setSchemaLoaded, useSchemaLoaded } from '../../../store';\nimport { toast } from '../../../utils/toast';\n\nexport function useActionSchemaLoader() {\n const loaded = useSchemaLoaded();\n\n const {\n data,\n isLoading: inProgress,\n error,\n refetch,\n } = trpcClient.schema.getActionsSchema.useQuery(undefined, {\n enabled: !loaded,\n });\n\n useEffect(() => {\n if (!error) return;\n toast.error(error.message || 'Unexpected error occurred');\n }, [error]);\n\n const load = useCallback(async () => {\n const result = await refetch();\n if (!result.data) return;\n setActionSchema(result.data as unknown as ActionSchemaList);\n setSchemaLoaded(true);\n }, [refetch]);\n\n useEffect(() => {\n if (!data) return;\n setActionSchema(data as unknown as ActionSchemaList);\n setSchemaLoaded(true);\n }, [data]);\n\n useEffect(() => {\n if (inProgress || loaded) return;\n load();\n }, [inProgress, load, loaded]);\n\n return { loaded, loading: inProgress };\n}\n","import type { ScreenshotTestTargetType } from '../../../typings';\nimport React from 'react';\nimport { setScreenshotUpdateState, useScreenshotUpdateStateValue } from '../../../store';\n\nexport function useScreenshotUpdateState(\n reqBy: string,\n target?: ScreenshotTestTargetType,\n) {\n const updateInf = useScreenshotUpdateStateValue();\n\n // to prevent rendering loop\n const [isLoadingFinish, setIsLoadingFinish] = React.useState<boolean>(false);\n\n const runDiffTest = React.useCallback(() => {\n setScreenshotUpdateState({ inProgress: true, reqBy, target });\n }, [reqBy, target]);\n\n const handleClose = React.useCallback(() => {\n setScreenshotUpdateState({});\n setIsLoadingFinish(false);\n }, []);\n\n React.useEffect(() => {\n if (updateInf && updateInf.inProgress && isLoadingFinish)\n setScreenshotUpdateState({ ...updateInf, inProgress: false });\n }, [isLoadingFinish, updateInf]);\n\n return {\n handleClose,\n runDiffTest,\n setIsLoadingFinish,\n updateInf,\n };\n}\n","import type { ImageDiffResult } from '../../../api/typings';\nimport type { ScreenshotData } from '../../../typings';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport interface ScreenshotState {\n screenshots: ScreenshotData[];\n imageDiffResults: ImageDiffResult[];\n pauseDeleteImageDiffResult: boolean;\n}\n\nexport const initialScreenshotState: ScreenshotState = {\n imageDiffResults: [],\n pauseDeleteImageDiffResult: false,\n screenshots: [],\n};\n\nexport const useScreenshotStore = create<ScreenshotState>()(\n devtools(\n () => ({\n ...initialScreenshotState,\n }),\n { name: 'screenshot-store' },\n ),\n);\n","import type { ImageDiffResult } from '../../../api/typings';\nimport type { ScreenshotData } from '../../../typings';\nimport type { ScreenshotState } from './screenshot-store';\nimport arrayMove from 'array-move';\nimport { useScreenshotStore } from './screenshot-store';\n\nconst getState = () => useScreenshotStore.getState();\nfunction setState(\n partial:\n | Partial<ScreenshotState>\n | ((state: ScreenshotState) => Partial<ScreenshotState>),\n) {\n return useScreenshotStore.setState(partial);\n}\n\nexport function addScreenshot(screenshot: ScreenshotData) {\n const state = getState();\n const screenshots = state.screenshots\n ? [...state.screenshots, screenshot]\n : [screenshot];\n setState({ screenshots: [...screenshots] });\n}\n\nexport function removeScreenshot(screenshotId: string) {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults\n ? state.imageDiffResults.filter((x) => x.screenshotId !== screenshotId)\n : [],\n screenshots: state.screenshots.filter((x) => x.id !== screenshotId),\n });\n}\n\nexport function changeScreenshotIndex({\n oldIndex,\n newIndex,\n}: {\n oldIndex: number;\n newIndex: number;\n}) {\n const state = getState();\n setState({\n screenshots: [\n ...arrayMove(state.screenshots, oldIndex, newIndex).map((x, i) => {\n x.index = i;\n return x;\n }),\n ],\n });\n}\n\nexport function removeStoryScreenshots() {\n setState({ screenshots: [] });\n}\n\nexport function setScreenshots(screenshots: ScreenshotData[]) {\n setState({ screenshots });\n}\n\nexport function setImageDiffResults(imageDiffResults: ImageDiffResult[]) {\n setState({ imageDiffResults });\n}\n\nexport function addImageDiffResult(imageDiffResult: ImageDiffResult) {\n const state = getState();\n setState({\n imageDiffResults: [\n ...state.imageDiffResults.filter(\n (x) => x.screenshotId !== imageDiffResult.screenshotId,\n ),\n imageDiffResult,\n ],\n });\n}\n\nexport function updateImageDiffResult(imageDiffResult: ImageDiffResult) {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults.map((result) => {\n if (result.screenshotId !== imageDiffResult.screenshotId) return result;\n return { ...result, ...imageDiffResult };\n }),\n });\n}\n\nexport function setPauseDeleteImageDiffResult(paused: boolean) {\n setState({ pauseDeleteImageDiffResult: paused });\n}\n\nexport function removeImageDiffResult(screenshotId: string) {\n const state = getState();\n if (state.pauseDeleteImageDiffResult) return;\n setState({\n imageDiffResults: state.imageDiffResults.filter(\n (x) => x.screenshotId !== screenshotId,\n ),\n });\n}\n\nexport function removePassedImageDiffResult() {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults.filter((x) => !x.pass),\n });\n}\n\nexport function deleteScreenshot(screenshotId: string) {\n const state = getState();\n setState({\n imageDiffResults: state.imageDiffResults.filter(\n (x) => x.screenshotId !== screenshotId,\n ),\n screenshots: state.screenshots.filter((x) => x.id !== screenshotId),\n });\n}\n","import type { ScreenshotState } from './screenshot-store';\nimport { useScreenshotStore } from './screenshot-store';\n\nexport function getScreenshotState(): ScreenshotState {\n return useScreenshotStore.getState();\n}\n\nexport function useScreenshots() {\n return useScreenshotStore((s) => s.screenshots);\n}\n\nexport function useImageDiffResults() {\n return useScreenshotStore((s) => s.imageDiffResults);\n}\n\nexport function usePauseDeleteImageDiffResult() {\n return useScreenshotStore((s) => s.pauseDeleteImageDiffResult);\n}\n\nexport function useScreenshotStoreState() {\n return useScreenshotStore();\n}\n","import { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { removeStoryScreenshots } from '../store/index';\n\nexport function useDeleteStoryScreenshot() {\n const { mutateAsync, isPending: deleteInProgress } =\n trpcClient.screenshot.deleteStoryScreenshots.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n onSuccess: () => {\n toast.success('Story screenshots deleted successfully.');\n },\n });\n\n const data = useCurrentStoryData();\n\n const deleteStoryScreenshots = useCallback(async () => {\n if (!data) return;\n\n try {\n await mutateAsync({\n filePath: data.filePath,\n storyId: data.id,\n });\n removeStoryScreenshots();\n } catch {}\n }, [data, mutateAsync]);\n\n return {\n deleteInProgress,\n deleteStoryScreenshots,\n };\n}\n","import type { ScreenshotTestTargetType } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { addImageDiffResult, setImageDiffResults } from '../store/actions';\n\nexport function useScreenshotDiffTestByType() {\n const storyData = useCurrentStoryData();\n\n const { mutateAsync, isPending: imageDiffTestInProgress } =\n trpcClient.screenshot.testScreenshots.useMutation({\n onError: (error) => {\n const message = error.message || 'Unexpected error occurred';\n toast.error(message);\n },\n });\n\n const testStoryScreenShots = useCallback(\n async (type: ScreenshotTestTargetType) => {\n if (!storyData) {\n return undefined;\n }\n\n try {\n const results = await mutateAsync({\n filePath: storyData.filePath,\n requestId: nanoid(),\n requestType: type,\n storyId: storyData.id,\n });\n if (type === 'file' || type === 'story') {\n results.forEach((result) => {\n addImageDiffResult(result);\n });\n } else {\n setImageDiffResults(results);\n }\n return results;\n } catch {\n return undefined;\n }\n },\n [mutateAsync, storyData],\n );\n\n return {\n imageDiffTestInProgress,\n storyData,\n testStoryScreenShots,\n };\n}\n","import type { ScreenshotData } from '../../../typings';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { setScreenshots } from '../store/index';\n\nexport function useStoryScreenshotLoader() {\n const loadedStoryId = useRef<string>();\n\n const storyData = useCurrentStoryData();\n\n const { mutateAsync, isPending: screenshotLoaderInProgress } =\n trpcClient.screenshot.getStoryScreenshots.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n });\n\n const loadScreenShots = useCallback(async () => {\n if (!storyData) return;\n\n try {\n const result = await mutateAsync({\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n loadedStoryId.current = storyData.id;\n setScreenshots((result || []) as ScreenshotData[]);\n } catch {}\n }, [mutateAsync, storyData]);\n\n useEffect(() => {\n if (screenshotLoaderInProgress || !storyData) return;\n if (loadedStoryId.current && loadedStoryId.current === storyData.id) {\n return;\n }\n loadScreenShots();\n }, [loadScreenShots, screenshotLoaderInProgress, storyData]);\n\n return {\n error: undefined,\n loadScreenShots,\n screenshotLoaderInProgress,\n storyData,\n };\n}\n","import { setDragStart, useDragStartValue } from '../store';\n\nexport function useDragStart() {\n const dragStart = useDragStartValue();\n return { dragStart, setDragStart };\n}\n","import { setAddonState, useAddonStateValue } from '../store';\n\nexport function useAddonState() {\n const addonState = useAddonStateValue();\n return { addonState, setAddonState };\n}\n","import type { BrowserTypes, ScreenShotViewPanel } from '../typings';\nimport { STORY_RENDERED } from '@storybook/core-events';\nimport { addons } from '@storybook/manager-api';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useAddonState } from './use-addon-state';\nimport { useUIStore } from '../store';\nimport { deepEqual } from '@pixpilot/object';\n\nconst defaultBrowserTypes: BrowserTypes[] = ['chromium', 'firefox', 'webkit'];\n\nexport function useBrowserStateManager(browserView: ScreenShotViewPanel) {\n const { addonState, setAddonState } = useAddonState();\n const [refreshingBrowsers, setRefreshBrowsers] = useState<BrowserTypes[]>([]);\n const [browserTypes] = useState<BrowserTypes[]>(defaultBrowserTypes);\n\n const isDisabled = useCallback(\n (browserType: BrowserTypes) => {\n if (\n !addonState ||\n !addonState.disabledBrowser ||\n !addonState.disabledBrowser[browserView] ||\n !addonState.disabledBrowser[browserView][browserType]\n ) {\n return false;\n }\n return true;\n },\n [addonState, browserView],\n );\n\n const setBrowserState = useCallback(\n (browserType: BrowserTypes, activePanel: ScreenShotViewPanel, disable: boolean) => {\n if (!addonState.disabledBrowser) addonState.disabledBrowser = {};\n setAddonState({\n ...addonState,\n disabledBrowser: {\n ...addonState.disabledBrowser,\n [activePanel]: {\n ...addonState.disabledBrowser[activePanel],\n [browserType]: disable,\n },\n },\n });\n },\n [addonState, setAddonState],\n );\n\n useEffect(() => {\n const unsubscribe = useUIStore.subscribe((state, prevState) => {\n if (\n !deepEqual(state.browserOptions.all, prevState.browserOptions.all) ||\n !deepEqual(state.screenshotOptions, prevState.screenshotOptions)\n ) {\n setRefreshBrowsers(defaultBrowserTypes);\n }\n defaultBrowserTypes.forEach((browserType) => {\n if (\n !deepEqual(\n state.browserOptions[browserType],\n prevState.browserOptions[browserType],\n )\n ) {\n setRefreshBrowsers((current) =>\n current.includes(browserType) ? current : [...current, browserType],\n );\n }\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [browserTypes]);\n\n useEffect(() => {\n const channel = addons.getChannel();\n\n const onStoryRendered = () => {\n const activeBrowserTypes = defaultBrowserTypes.filter(\n (browserType) => !isDisabled(browserType),\n );\n\n setRefreshBrowsers((current) => {\n if (\n current.length === activeBrowserTypes.length &&\n activeBrowserTypes.every((browserType) => current.includes(browserType))\n ) {\n return current;\n }\n\n return activeBrowserTypes;\n });\n };\n\n channel.on(STORY_RENDERED, onStoryRendered);\n\n return () => {\n channel.off(STORY_RENDERED, onStoryRendered);\n };\n }, [isDisabled]);\n\n const toggleBrowser = useCallback(\n (browserType: BrowserTypes) => {\n const disable = !isDisabled(browserType);\n\n setBrowserState(browserType, browserView, disable);\n\n if (disable) {\n setRefreshBrowsers((current) =>\n current.filter((browser) => browser !== browserType),\n );\n return;\n }\n\n setRefreshBrowsers((current) =>\n current.includes(browserType) ? current : [...current, browserType],\n );\n },\n [browserView, isDisabled, setBrowserState],\n );\n\n const clearBrowserRefresh = useCallback((browserType: BrowserTypes) => {\n setRefreshBrowsers((current) => current.filter((browser) => browser !== browserType));\n }, []);\n\n const activeBrowsers = useMemo(\n () => browserTypes.filter((browserType) => !isDisabled(browserType)),\n [browserTypes, isDisabled],\n );\n\n return {\n activeBrowsers,\n browserTypes,\n isDisabled,\n refreshingBrowsers,\n clearBrowserRefresh,\n setBrowserState,\n toggleBrowser,\n refreshBrowsers: setRefreshBrowsers,\n };\n}\n","import type { BrowsersOptionTypes } from '../store';\nimport type { BrowserContextOptions, BrowserTypes } from '../typings';\nimport { useCallback, useMemo } from 'react';\nimport {\n setBrowserOptions as setStoreBrowserOptions,\n useBrowserOptionsValue,\n} from '../store';\nimport { getDeviceInfo } from '../utils';\n\nexport type { BrowsersOption, BrowsersOptionTypes } from '../store';\n\nexport function useBrowserOptions(browserName?: BrowsersOptionTypes) {\n const browserOptions = useBrowserOptionsValue();\n\n const setBrowserDeviceOptions = useCallback(\n (browserType: BrowsersOptionTypes, deviceName: string) => {\n setStoreBrowserOptions({\n ...browserOptions,\n [browserType]: getDeviceInfo(deviceName),\n });\n },\n [browserOptions],\n );\n\n const setBrowserOptions = useCallback(\n (browserType: BrowsersOptionTypes, options: BrowserContextOptions) => {\n setStoreBrowserOptions({\n ...browserOptions,\n [browserType]: options,\n });\n },\n [browserOptions],\n );\n\n const getBrowserOptions = useCallback(\n (browserType: BrowserTypes) => ({\n ...browserOptions.all,\n ...browserOptions[browserType],\n }),\n [browserOptions],\n );\n\n const hasOption = useMemo(() => {\n if (!browserName) return false;\n\n const hasOpt =\n browserOptions &&\n browserOptions[browserName] &&\n Object.keys(browserOptions[browserName]).length > 0;\n return hasOpt;\n }, [browserOptions, browserName]);\n\n return {\n browserOptions,\n getBrowserOptions,\n hasOption,\n setBrowserDeviceOptions,\n setBrowserOptions,\n };\n}\n","import { setScreenshotOptionsState, useScreenshotOptionsValue } from '../../../store';\n\nexport function useScreenshotOptions() {\n const screenshotOptions = useScreenshotOptionsValue();\n return { screenshotOptions, setScreenshotOptions: setScreenshotOptionsState };\n}\n","import type { BrowserContextOptions } from 'playwright';\nimport type { BrowsersOption } from '../../../hooks/use-browser-options';\nimport type { ScreenshotData, ScreenshotOptions } from '../../../typings';\nimport {\n RESET_STORY_ARGS,\n UPDATE_GLOBALS,\n UPDATE_STORY_ARGS,\n} from '@storybook/core-events';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport { useCallback } from 'react';\nimport { useBrowserOptions } from '../../../hooks/use-browser-options';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { getScreenshotArgs, getScreenshotGlobals } from '../../../utils';\nimport { setScreenShotActionSets } from '../../action-set/store/actions';\nimport { useScreenshotOptions } from './use-screenshot-options';\n\ninterface ReturnType {\n browserOptions: BrowsersOption;\n loadSetting: (screenshotData: ScreenshotData, force?: boolean) => void;\n screenshotOptions: ScreenshotOptions;\n}\n\nexport function useLoadScreenshotSettings(): ReturnType {\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const api = useStorybookApi();\n\n const storyData = useCurrentStoryData();\n\n const dispatchActions = useCallback(\n (screenshotData: ScreenshotData) => {\n if (!storyData) return;\n\n if (!screenshotData.actionSets || !screenshotData.actionSets.length) return;\n setScreenShotActionSets({\n actionSets: screenshotData.actionSets,\n storyId: storyData.id,\n });\n },\n [storyData],\n );\n const loadSetting = useCallback(\n (screenshotData: ScreenshotData, force = false) => {\n if (!storyData) return;\n\n api.emit(RESET_STORY_ARGS, { storyId: storyData?.id });\n const args = getScreenshotArgs(screenshotData);\n if (args && Object.keys(args).length) {\n api.emit(UPDATE_STORY_ARGS, {\n storyId: storyData?.id,\n updatedArgs: args,\n });\n }\n const globals = getScreenshotGlobals(screenshotData);\n if (globals && Object.keys(globals).length) {\n api.emit(UPDATE_GLOBALS, {\n globals,\n });\n }\n dispatchActions(screenshotData);\n if (screenshotData.browserOptions || force) {\n setBrowserOptions('all', screenshotData.browserOptions as BrowserContextOptions);\n }\n if (screenshotData.screenshotOptions || force) {\n setScreenshotOptions(screenshotData.screenshotOptions);\n }\n },\n [api, dispatchActions, setBrowserOptions, setScreenshotOptions, storyData],\n );\n\n return { browserOptions, loadSetting, screenshotOptions };\n}\n","import type { BrowserTypes, ScreenshotData } from '../../../typings';\nimport { RESET_STORY_ARGS } from '@storybook/core-events';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useBrowserStateManager } from '../../../hooks/use-browser-state-manager';\nimport { useAddonState } from '../../../hooks/use-addon-state';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { setEditScreenshotState, useEditScreenshotStateValue } from '../../../store';\nimport {\n clearCurrentActionSets,\n deleteTempActionSets,\n} from '../../action-set/store/actions';\nimport { useLoadScreenshotSettings } from './use-load-screenshot-settings';\n\nexport type { EditScreenshotState } from '../../../store';\n\nexport function useEditScreenshot() {\n const editScreenshotState = useEditScreenshotStateValue();\n\n const storyData = useCurrentStoryData();\n\n const { setAddonState, addonState } = useAddonState();\n\n const { setBrowserState } = useBrowserStateManager('dialog');\n\n const { loadSetting, screenshotOptions, browserOptions } = useLoadScreenshotSettings();\n\n const unmounted = useRef<boolean>(false);\n\n const api = useStorybookApi();\n\n const clearScreenshotEdit = useCallback(() => {\n if (storyData?.id) {\n deleteTempActionSets(storyData.id);\n }\n\n clearCurrentActionSets();\n\n api.emit(RESET_STORY_ARGS, { storyId: storyData?.id });\n\n if (editScreenshotState) {\n loadSetting(\n {\n browserOptions: editScreenshotState.currentBrowserOptions,\n browserType: editScreenshotState.screenshotData.browserType,\n id: editScreenshotState.screenshotData.id,\n screenshotOptions: editScreenshotState.currentScreenshotOptions,\n title: editScreenshotState.screenshotData.title,\n },\n true,\n );\n }\n if (!unmounted.current) {\n setEditScreenshotState(undefined);\n }\n }, [api, editScreenshotState, loadSetting, storyData]);\n\n const editScreenshot = useCallback(\n (screenshotData: ScreenshotData) => {\n if (!storyData) return;\n\n clearScreenshotEdit();\n setEditScreenshotState({\n currentBrowserOptions: browserOptions.all,\n currentScreenshotOptions: screenshotOptions,\n screenshotData,\n storyId: storyData.id,\n });\n loadSetting(screenshotData);\n setBrowserState(screenshotData.browserType, 'main', false);\n if (!addonState.previewPanelEnabled) {\n setAddonState({\n ...addonState,\n previewPanelEnabled: true,\n });\n }\n },\n [\n addonState,\n browserOptions.all,\n clearScreenshotEdit,\n loadSetting,\n screenshotOptions,\n setAddonState,\n setBrowserState,\n storyData,\n ],\n );\n\n const isEditing = useCallback(\n (browser: BrowserTypes) => {\n if (!editScreenshotState) return false;\n\n return editScreenshotState.screenshotData.browserType === browser;\n },\n [editScreenshotState],\n );\n\n useEffect(\n () => () => {\n unmounted.current = true;\n },\n [],\n );\n\n useEffect(() => {\n if (!editScreenshotState || !storyData) return undefined;\n\n if (editScreenshotState.storyId !== storyData.id) {\n clearScreenshotEdit();\n return undefined;\n }\n }, [clearScreenshotEdit, editScreenshotState, storyData]);\n\n return {\n clearScreenshotEdit,\n editScreenshot,\n editScreenshotState,\n isEditing,\n loadSetting,\n };\n}\n","import type { StoryData } from '../../../schema';\nimport { useCallback, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { toast } from '../../../utils/toast';\nimport { addImageDiffResult } from '../store/index';\n\nexport function useScreenshotDiffTest() {\n const [testScreenshotError, setTestScreenshotError] = useState<string | undefined>(\n undefined,\n );\n\n const {\n mutateAsync,\n isPending: inProgress,\n reset,\n data,\n } = trpcClient.screenshot.testScreenshot.useMutation({\n onError: (error) => {\n const message = error.message || 'Unexpected error occurred';\n setTestScreenshotError(message);\n toast.error(message);\n },\n });\n\n const testScreenshot = useCallback(\n async (storyData: StoryData & { screenshotId: string }) => {\n setTestScreenshotError(undefined);\n try {\n const result = await mutateAsync({\n ...storyData,\n screenshotId: storyData.screenshotId,\n storyId: storyData.id,\n });\n addImageDiffResult(result);\n return result;\n } catch {\n return undefined;\n }\n },\n [mutateAsync],\n );\n\n return {\n inProgress,\n reset,\n result: data,\n testScreenshot,\n testScreenshotError,\n };\n}\n","import type { ScreenshotData } from '../../../../typings';\n\nimport { Popover } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport { CogIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport ReactJson from 'react-json-view';\n\nexport interface ScreenshotInfoProps {\n screenshotData: ScreenshotData;\n size?: 'small' | 'medium';\n color?: 'inherit' | 'primary' | 'secondary' | 'default';\n onClose?: () => void;\n}\n\nconst ScreenshotInfo: React.FC<ScreenshotInfoProps> = ({\n screenshotData,\n size = 'small',\n color,\n onClose,\n}) => {\n const [anchorEl, setAnchorEl] = React.useState<Element | null>(null);\n\n const getInfo = useCallback(() => {\n const { id: _id, index: _index, ...data } = screenshotData;\n return data;\n }, [screenshotData]);\n\n const togglePopover = useCallback(\n (event: React.SyntheticEvent<Element, Event>) => {\n if (onClose && anchorEl) onClose();\n setAnchorEl(anchorEl ? null : event.currentTarget);\n },\n [anchorEl, onClose],\n );\n\n return (\n <>\n <IconButton color={color} onClick={togglePopover} size={size}>\n <CogIcon />\n </IconButton>\n <Popover anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={togglePopover}>\n <div>\n {anchorEl && (\n <ReactJson\n enableClipboard={false}\n theme=\"railscasts\"\n src={getInfo()}\n displayObjectSize={false}\n displayDataTypes={false}\n style={{ fontSize: 13 }}\n />\n )}\n </div>\n </Popover>\n </>\n );\n};\n\nScreenshotInfo.displayName = 'ScreenshotInfo';\n\nexport { ScreenshotInfo };\n","import { useCallback, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\nimport { deleteScreenshot as deleteScreenshotFromStore } from '../store/index';\n\nexport function useDeleteScreenshot() {\n const storyData = useCurrentStoryData();\n const [error, setError] = useState<string>();\n\n const {\n mutateAsync,\n reset,\n isPending: inProgress,\n } = trpcClient.screenshot.deleteScreenshot.useMutation({\n onError: (mutationError) => {\n const message = mutationError.message || 'Unexpected error occurred';\n setError(message);\n toast.error(message);\n },\n onSuccess: () => {\n toast.success('Screenshot deleted successfully.');\n },\n });\n\n const clearError = useCallback(() => {\n setError(undefined);\n reset();\n }, [reset]);\n\n const deleteScreenshot = useCallback(\n async (id: string) => {\n if (!storyData) return;\n\n setError(undefined);\n try {\n await mutateAsync({\n filePath: storyData.filePath,\n screenshotId: id,\n storyId: storyData.id,\n });\n deleteScreenshotFromStore(id);\n } catch {}\n },\n [mutateAsync, storyData],\n );\n\n return {\n clearError,\n deleteScreenshot,\n error,\n inProgress,\n };\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport type { ScreenshotData } from '../../../../typings';\nimport React, { useCallback, useEffect } from 'react';\nimport { DeleteConfirmationButton } from '../../../../components/common';\nimport { useDeleteScreenshot } from '../../hooks/use-delete-screenshot';\n\nexport interface ScreenshotDeleteProps {\n screenshot: ScreenshotData;\n onClose: () => void;\n onStateChange: (working: boolean) => void;\n onDelete: () => void;\n}\n\nconst ScreenshotDelete: React.FC<ScreenshotDeleteProps> = (props) => {\n const { onStateChange, screenshot, onClose, onDelete } = props;\n\n const { deleteScreenshot, inProgress: deleteLoading } = useDeleteScreenshot();\n\n const handleDeleteConfirmation = useCallback(() => {\n deleteScreenshot(screenshot.id);\n onDelete();\n }, [deleteScreenshot, screenshot.id]);\n\n useEffect(() => {\n onStateChange(deleteLoading);\n }, [deleteLoading]);\n\n return (\n <>\n <DeleteConfirmationButton onClose={onClose} onDelete={handleDeleteConfirmation} />\n </>\n );\n};\n\nScreenshotDelete.displayName = 'ScreenshotDelete';\n\nexport { ScreenshotDelete };\n","import type { ImageDiffResult } from '../../../api/typings';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { toast } from '../../../utils/toast';\nimport { updateImageDiffResult } from '../store/index';\n\nexport function useScreenshotUpdate(successMessage?: string) {\n const {\n mutateAsync,\n isPending: updateScreenshotInProgress,\n reset,\n } = trpcClient.screenshot.updateScreenshot.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Unexpected error occurred');\n },\n onSuccess: () => {\n if (successMessage) {\n toast.success(successMessage);\n }\n },\n });\n\n const updateScreenshotClearResult = useCallback(() => {\n reset();\n }, [reset]);\n\n const updateScreenshot = useCallback(\n async (imageDiffResult: ImageDiffResult) => {\n if (\n !imageDiffResult.filePath ||\n !imageDiffResult.screenshotId ||\n !imageDiffResult.storyId\n ) {\n return;\n }\n\n try {\n await mutateAsync({\n base64: imageDiffResult.newScreenshot,\n filePath: imageDiffResult.filePath,\n screenshotId: imageDiffResult.screenshotId,\n storyId: imageDiffResult.storyId,\n });\n } catch {\n return;\n }\n\n const newImageDiffResult: ImageDiffResult = {\n diffSize: false,\n filePath: imageDiffResult.filePath,\n index: imageDiffResult.index,\n newScreenshot: imageDiffResult.newScreenshot,\n pass: true,\n screenshotId: imageDiffResult.screenshotId,\n storyId: imageDiffResult.storyId,\n };\n\n updateImageDiffResult(newImageDiffResult);\n },\n [mutateAsync],\n );\n\n return {\n updateScreenshot,\n updateScreenshotClearResult,\n updateScreenshotInProgress,\n };\n}\n","import type { ImageDiffResult } from '../../../../api/typings';\nimport type { ScreenshotData } from '../../../../typings';\nimport { Button } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport { RefreshIcon } from '@storybook/icons';\nimport React, { useCallback, useEffect } from 'react';\nimport { ImageDiffPreviewDialog, Loader } from '../../../../components/common';\nimport { useCurrentStoryData, useScreenshotDiffTest } from '../../../../hooks';\nimport { useScreenshotUpdate } from '../../hooks/use-screenshot-update';\nimport { ScreenshotInfo } from './ScreenshotInfo';\n\nexport interface ScreenshotUpdateProps {\n screenshot: ScreenshotData;\n onStateChange: (state: boolean) => void;\n imageDiffResult?: ImageDiffResult;\n}\n\nconst ScreenshotUpdate: React.FC<ScreenshotUpdateProps> = (props) => {\n const { screenshot, onStateChange, imageDiffResult } = props;\n\n const storyData = useCurrentStoryData();\n\n const { updateScreenshot, updateScreenshotInProgress } = useScreenshotUpdate(\n 'Successfully updated.',\n );\n\n const {\n testScreenshot,\n inProgress: testScreenshotInProgress,\n reset: testScreenshotClearResult,\n result: testScreenshotResult,\n } = useScreenshotDiffTest();\n\n const handleUpdate = useCallback(async () => {\n if (imageDiffResult) {\n await updateScreenshot(imageDiffResult);\n } else {\n if (!storyData) return;\n\n await testScreenshot({ ...storyData, screenshotId: screenshot.id });\n }\n }, [imageDiffResult, screenshot.id, storyData, testScreenshot, updateScreenshot]);\n\n const handleSaveScreenshotClick = useCallback(async () => {\n if (!testScreenshotResult) return;\n\n await updateScreenshot(testScreenshotResult);\n testScreenshotClearResult();\n }, [testScreenshotClearResult, testScreenshotResult, updateScreenshot]);\n\n useEffect(() => {\n onStateChange(testScreenshotInProgress || updateScreenshotInProgress);\n }, [testScreenshotInProgress, onStateChange, updateScreenshotInProgress]);\n\n return (\n <>\n <IconButton onClick={handleUpdate} size=\"small\" title=\"Update screenshot\">\n <RefreshIcon />\n </IconButton>\n {testScreenshotResult && (\n <ImageDiffPreviewDialog\n title=\"Following screenshot will be saved, would you like to continue?\"\n subtitle={screenshot.title}\n imageDiffResult={testScreenshotResult}\n onClose={testScreenshotClearResult}\n open={true}\n titleActions={() => (\n <ScreenshotInfo color=\"primary\" size=\"medium\" screenshotData={screenshot} />\n )}\n footerActions={() => (\n <>\n <Button onClick={testScreenshotClearResult} color=\"primary\">\n No\n </Button>\n <Button onClick={handleSaveScreenshotClick} color=\"primary\" autoFocus>\n Yes\n </Button>\n </>\n )}\n />\n )}\n <Loader open={updateScreenshotInProgress} />\n </>\n );\n};\n\nScreenshotUpdate.displayName = 'ScreenshotUpdate';\n\nexport { ScreenshotUpdate };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Ref } from 'react';\nimport type { ImageDiffResult } from '../../../../api/typings';\n\nimport type { ScreenshotData } from '../../../../typings';\nimport { makeStyles } from '@material-ui/core';\n\nimport { IconButton } from '@storybook/components';\nimport { ContrastIcon, EditIcon, OutboxIcon } from '@storybook/icons';\nimport clsx from 'clsx';\n\nimport React, { forwardRef, useState } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { ScreenshotDelete } from './ScreenshotDelete';\nimport { ScreenshotInfo } from './ScreenshotInfo';\nimport { ScreenshotUpdate } from './ScreenshotUpdate';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n menu: {\n '&::before': {\n backgroundColor: theme.palette.background.paper,\n bottom: 0,\n content: '\"\"',\n left: 0,\n opacity: 0.9,\n position: 'absolute',\n right: 0,\n top: 0,\n },\n display: 'none',\n position: 'absolute',\n right: 30,\n top: 10,\n },\n visible: {\n display: 'block',\n },\n };\n },\n { name: 'ScreenshotListItemMenu' },\n);\n\nexport interface ScreenshotListItemMenuProps {\n screenshot: ScreenshotData;\n enableImageDiff?: boolean;\n enableUpdate?: boolean;\n enableLoadSetting?: boolean;\n enableEditScreenshot?: boolean;\n show?: boolean;\n onHide?: () => void;\n onRunImageDiff?: () => void;\n imageDiffResult?: ImageDiffResult;\n openUpdateDialog?: boolean;\n onEditClick?: () => void;\n onLoadSettingClick?: () => void;\n isEditing?: boolean;\n onDelete: () => void;\n}\n\nconst ScreenshotListItemMenu: React.FC<ScreenshotListItemMenuProps> = forwardRef(\n (\n {\n enableLoadSetting,\n openUpdateDialog,\n screenshot,\n enableImageDiff,\n enableUpdate,\n enableEditScreenshot,\n show,\n onHide,\n onRunImageDiff,\n imageDiffResult,\n onLoadSettingClick,\n onEditClick,\n isEditing,\n onDelete,\n },\n ref: Ref<HTMLDivElement>,\n ) => {\n const [working, setWorking] = useState(false);\n\n const classes = useStyles();\n\n return (\n <>\n <Loader progressSize={20} position=\"absolute\" open={working} />\n <div ref={ref} className={clsx(classes.menu, { [classes.visible]: show })}>\n {!isEditing && enableEditScreenshot && (\n <IconButton onClick={onEditClick} title=\"Edit screenshot\">\n <EditIcon />\n </IconButton>\n )}\n\n {enableLoadSetting && (\n <IconButton onClick={onLoadSettingClick} title=\"Load screenshot settings\">\n <OutboxIcon />\n </IconButton>\n )}\n\n {enableUpdate && (\n <ScreenshotUpdate\n onStateChange={setWorking}\n screenshot={screenshot}\n imageDiffResult={openUpdateDialog ? undefined : imageDiffResult}\n />\n )}\n\n {enableImageDiff && (\n <IconButton onClick={onRunImageDiff} title=\"Run diff test\">\n <ContrastIcon />\n </IconButton>\n )}\n\n <ScreenshotDelete\n onClose={onHide || (() => undefined)}\n onStateChange={setWorking}\n screenshot={screenshot}\n onDelete={onDelete}\n />\n\n <ScreenshotInfo onClose={onHide} screenshotData={screenshot} />\n </div>\n </>\n );\n },\n);\n\nScreenshotListItemMenu.displayName = 'ScreenshotListItemMenu';\n\nexport { ScreenshotListItemMenu };\n","import type { ListItemWrapperProps } from '../../../../components/common';\nimport React from 'react';\nimport { ListItemWrapper } from '../../../../components/common';\n\nconst ScreenshotListItemWrapper: React.FC<ListItemWrapperProps> = ({\n children,\n ...rest\n}) => {\n return (\n <ListItemWrapper\n style={{\n cursor: 'pointer',\n }}\n icons={children}\n {...rest}\n />\n );\n};\n\nScreenshotListItemWrapper.displayName = 'ScreenshotListItemWrapper';\n\nexport { ScreenshotListItemWrapper };\n","import React from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { toast } from '../../../utils/toast';\n\ninterface Props {\n fixFunction?: boolean;\n}\n\nexport function useFixScreenshotFileName(props: Props) {\n const { fixFunction } = props;\n\n const currentStoryData = useCurrentStoryData();\n\n const [reload, setReload] = React.useState<boolean>(false);\n\n const [functionName, setFunctionName] = React.useState<string>('');\n\n const [fixFileNamesError, setFixFileNamesError] = React.useState<string | undefined>(\n undefined,\n );\n\n const { mutateAsync, isPending: fixFileNamesInProgress } =\n trpcClient.fixTitle.fixScreenshotFileName.useMutation({\n onError: (error) => {\n const message = error.message || 'Unexpected error occurred';\n setFixFileNamesError(message);\n toast.error(message);\n },\n });\n\n const clearError = React.useCallback(() => {\n setFixFileNamesError(undefined);\n }, []);\n\n const fixFileNames = React.useCallback(() => {\n if (!functionName && fixFunction) {\n toast.error('Enter previous name export function.');\n return;\n }\n\n if (!currentStoryData) {\n toast.error('Unable to find current story data.');\n return;\n }\n\n setFixFileNamesError(undefined);\n mutateAsync({\n ...currentStoryData,\n previousNamedExport: functionName,\n })\n .then(() => {\n setReload(true);\n })\n .catch(() => {});\n }, [currentStoryData, fixFunction, functionName, mutateAsync]);\n\n const handleReload = React.useCallback(() => {\n document.location.reload();\n }, []);\n\n const handleFunctionNameInput = React.useCallback((e) => {\n setFunctionName(e.target.value);\n }, []);\n\n return {\n clearError,\n fixFileNames,\n fixFileNamesError,\n fixFileNamesInProgress,\n functionName,\n handleFunctionNameInput,\n handleReload,\n\n reload,\n };\n}\n","import type { ScreenshotProp } from '../typings';\nimport { STORY_ARGS_UPDATED, STORY_CHANGED } from '@storybook/core-events';\nimport { addons, useStorybookApi } from '@storybook/manager-api';\nimport equal from 'fast-deep-equal';\nimport { useEffect, useRef, useState } from 'react';\n\nexport function useKnobs() {\n const [args, setArgs] = useState<ScreenshotProp>();\n const api = useStorybookApi();\n const apiRef = useRef(api);\n\n apiRef.current = api;\n\n useEffect(() => {\n setArgs(undefined);\n const channel = addons.getChannel();\n const setArgsStore = (data: { storyId: string; args: Record<string, unknown> }) => {\n if (!data || !data.args) return;\n const currentStoryData = apiRef.current.getCurrentStoryData() as\n | { initialArgs?: Record<string, unknown> }\n | undefined;\n const initialArgs = currentStoryData?.initialArgs || {};\n\n const propObj = Object.keys(data.args).reduce((obj, key) => {\n const argValue = data.args[key];\n if (argValue !== undefined && !equal(argValue, initialArgs[key])) {\n obj[key] = data.args[key];\n }\n return obj;\n }, {} as ScreenshotProp);\n\n setArgs(Object.keys(propObj).length > 0 ? propObj : undefined);\n };\n\n const storyChange = () => {\n setArgs(undefined);\n };\n\n channel.on(STORY_ARGS_UPDATED, setArgsStore);\n\n channel.on(STORY_CHANGED, storyChange);\n\n return () => {\n channel.off(STORY_ARGS_UPDATED, setArgsStore);\n channel.off(STORY_CHANGED, storyChange);\n };\n }, []);\n\n return args;\n}\n","import type { BrowserTypes } from '../../../typings';\nimport { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { useKnobs } from '../../../hooks/use-knobs';\nimport { toast } from '../../../utils/toast';\nimport { API, useStorybookApi, StoryEntry } from '@storybook/manager-api';\nimport { useBrowserOptions } from '../../../hooks';\nimport { useScreenshotOptionsValue } from '../../../store';\nimport { useCurrentActions } from '../../../features/action-set/hooks/use-current-actions';\n\nexport function useGenerateScreenshotTitle(\n browserType: BrowserTypes | 'storybook' | null,\n) {\n const storyData = useCurrentStoryData();\n const { currentActions } = useCurrentActions(storyData?.id ?? '');\n const args = useKnobs();\n const api = useStorybookApi() as API;\n const { getBrowserOptions } = useBrowserOptions();\n const screenshotOptions = useScreenshotOptionsValue();\n const { data: hasGenerator = false } =\n trpcClient.screenshot.hasScreenshotTitleGenerator.useQuery();\n\n const browserOptions = getBrowserOptions(browserType as BrowserTypes);\n\n const { mutateAsync, isPending: isGenerating } =\n trpcClient.screenshot.generateScreenshotTitle.useMutation({\n onError: (error) => {\n toast.error(error.message || 'Failed to generate screenshot title');\n },\n });\n\n const generateTitle = useCallback(async (): Promise<string | undefined> => {\n if (!storyData || browserType === 'storybook') return undefined;\n const currentStoryData = api.getCurrentStoryData() as StoryEntry & {\n parameters: {\n docs?: {\n description?: {\n story?: string;\n };\n };\n };\n };\n\n try {\n return await mutateAsync({\n browser: {\n type: browserType,\n options: browserOptions,\n },\n story: {\n actions: currentActions,\n changedArgs: args,\n filePath: storyData.filePath,\n id: storyData.id,\n initialArgs: currentStoryData.initialArgs,\n argTypes: currentStoryData.argTypes,\n parameters: currentStoryData.parameters as Record<string, unknown>,\n name: currentStoryData.name,\n title: currentStoryData.title,\n },\n screenshotOptions,\n });\n } catch {\n return undefined;\n }\n }, [\n api,\n args,\n browserOptions,\n browserType,\n currentActions,\n mutateAsync,\n screenshotOptions,\n storyData,\n ]);\n\n return { generateTitle, hasGenerator, isGenerating };\n}\n","import type { ImageDiffResult } from '../../../api/typings';\nimport { setImageDiffResults } from '../store/actions';\nimport { useImageDiffResults } from '../store/selectors';\n\nexport interface UseGlobalImageDiffResults {\n imageDiffResult: ImageDiffResult[];\n setImageDiffResult: (results: ImageDiffResult[]) => void;\n}\n\nexport function useGlobalImageDiffResults(): UseGlobalImageDiffResults {\n const imageDiffResult = useImageDiffResults();\n return { imageDiffResult, setImageDiffResult: setImageDiffResults };\n}\n","import type { ImageDiffResult } from '../../../api/typings';\nimport type { StoryData } from '../../../schema';\nimport type { ScreenshotData, ScreenshotTestTargetType } from '../../../typings';\nimport React, { useEffect } from 'react';\nimport { isStoryJsonFile } from '../../../utils';\nimport { setScreenshots } from '../store/index';\nimport { useScreenshotDiffTestByType } from './use-screenshot-diff-test-by-type';\n\nfunction getScreenshotDataFromDiffResult(\n results: ImageDiffResult[],\n target: ScreenshotTestTargetType,\n storyData?: StoryData,\n) {\n if (target === 'all') return results.map((x) => x.screenshotData);\n\n if (target === 'file') {\n if (!storyData) return [];\n\n return results\n .filter((x) =>\n x.filePath ? isStoryJsonFile(x.filePath, storyData.filePath) : false,\n )\n .map((x) => x.screenshotData);\n }\n\n if (!storyData) return [];\n\n return results.filter((x) => x.storyId === storyData.id).map((x) => x.screenshotData);\n}\n\nexport function useImageDiffScreenshots(\n target: ScreenshotTestTargetType,\n onLoaded?: () => void,\n) {\n const { imageDiffTestInProgress, testStoryScreenShots, storyData } =\n useScreenshotDiffTestByType();\n\n const [loaded, setLoaded] = React.useState<boolean>(false);\n\n const loadData = React.useCallback(async () => {\n const results = await testStoryScreenShots(target);\n if (Array.isArray(results))\n setScreenshots(\n getScreenshotDataFromDiffResult(results, target, storyData).filter(\n (screenshotData): screenshotData is ScreenshotData => Boolean(screenshotData),\n ),\n );\n if (onLoaded) onLoaded();\n setLoaded(true);\n }, [testStoryScreenShots, target, storyData, onLoaded]);\n\n useEffect(() => {\n if (!storyData || loaded) return;\n loadData();\n }, [loadData, loaded, storyData]);\n\n return { loading: imageDiffTestInProgress, storyData };\n}\n","import type { ScreenshotProp } from '../typings';\nimport { GLOBALS_UPDATED, STORY_CHANGED } from '@storybook/core-events';\nimport { addons, useStorybookApi } from '@storybook/manager-api';\nimport equal from 'fast-deep-equal';\nimport { useEffect, useRef, useState } from 'react';\nimport { getScreenshotProp } from '../utils';\n\ninterface GlobalsUpdatedData {\n globals?: Record<string, unknown>;\n initialGlobals?: Record<string, unknown>;\n}\n\nexport function useGlobals() {\n const [globals, setGlobals] = useState<ScreenshotProp>();\n const api = useStorybookApi();\n const apiRef = useRef(api);\n\n apiRef.current = api;\n\n useEffect(() => {\n setGlobals(undefined);\n\n const channel = addons.getChannel();\n\n const setGlobalStore = (data?: GlobalsUpdatedData) => {\n if (!data || !data.globals) {\n setGlobals(undefined);\n return;\n }\n\n const currentStoryData = apiRef.current.getCurrentStoryData() as\n | { initialGlobals?: Record<string, unknown> }\n | undefined;\n const initialGlobals =\n data.initialGlobals || currentStoryData?.initialGlobals || {};\n\n const changedGlobals = Object.keys(data.globals).reduce((obj, key) => {\n const globalValue = data.globals?.[key];\n\n if (globalValue !== undefined && !equal(globalValue, initialGlobals[key])) {\n obj[key] = globalValue;\n }\n\n return obj;\n }, {} as ScreenshotProp);\n\n setGlobals(getScreenshotProp(changedGlobals));\n };\n\n const storyChange = () => {\n setGlobals(undefined);\n };\n\n channel.on(GLOBALS_UPDATED, setGlobalStore);\n channel.on(STORY_CHANGED, storyChange);\n\n return () => {\n channel.off(GLOBALS_UPDATED, setGlobalStore);\n channel.off(STORY_CHANGED, storyChange);\n };\n }, []);\n\n return globals;\n}\n","import type { SaveScreenshotRequest } from '../../../api/typings';\nimport type { BrowserContextOptions, BrowserTypes } from '../../../typings';\nimport { nanoid } from 'nanoid';\nimport { useCallback, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { useGlobals } from '../../../hooks/use-globals';\nimport { useKnobs } from '../../../hooks/use-knobs';\nimport { getImageDiffMessages } from '../../../utils';\nimport { toast } from '../../../utils/toast';\nimport { useCurrentActions } from '../../action-set/hooks/use-current-actions';\nimport { addScreenshot, removeScreenshot } from '../store/actions';\nimport { useEditScreenshot } from './use-edit-screenshot';\nimport { useScreenshotOptions } from './use-screenshot-options';\n\ninterface Options {\n title?: string;\n browserType?: BrowserTypes;\n}\n\nexport function useSaveScreenshot(options?: Options) {\n const { title, browserType } = options || {};\n const args = useKnobs();\n const globals = useGlobals();\n\n const { screenshotOptions } = useScreenshotOptions();\n\n const storyData = useCurrentStoryData();\n\n const { editScreenshotState, clearScreenshotEdit } = useEditScreenshot();\n\n const { currentActions } = useCurrentActions(storyData?.id ?? '');\n\n const [error, setError] = useState<string | undefined>(undefined);\n\n const {\n mutateAsync,\n data: mutationResult,\n reset,\n isPending: inProgress,\n } = trpcClient.screenshot.saveScreenshot.useMutation({\n onError: (mutationError) => {\n const message = mutationError.message || 'Unexpected error occurred';\n setError(message);\n toast.error(message);\n },\n onSettled(result, error) {\n if (error) {\n toast.error(error.message || 'Unexpected error occurred in saving screenshot');\n return;\n }\n if (!result) return;\n const titleMsg = title || result.oldScreenShotTitle;\n if (result.added) {\n toast.success(\n // prettier-ignore\n `Screenshot ${ `${browserType ? ` for '${browserType}'` : ''}` } saved successfully.`,\n {\n duration: 5000,\n id: `image-diff-message:added:${browserType || 'default'}`,\n onAutoClose: reset,\n onDismiss: reset,\n },\n );\n } else if (result.pass) {\n const message =\n // prettier-ignore\n `Testing existing screenshot were successful, no change has been detected.${titleMsg ? `\\nTitle: ${titleMsg}` : ''}${browserType ? `\\nBrowser: ${ browserType}` : '' }`;\n\n toast.success(message, {\n duration: 5000,\n id: `image-diff-message:pass:${message}`,\n onAutoClose: reset,\n onDismiss: reset,\n });\n } else if (result.diffSize || result.error) {\n const message = getImageDiffMessages(result);\n\n toast.error(message, {\n duration: Infinity,\n id: `image-diff-message:error:${message}`,\n onDismiss: reset,\n });\n }\n },\n });\n\n const clearError = useCallback(() => {\n setError(undefined);\n }, []);\n\n const clearResult = useCallback(() => {\n reset();\n }, [reset]);\n\n const isUpdating = useCallback(\n (browserType: BrowserTypes) => {\n if (!editScreenshotState) return false;\n if (editScreenshotState.screenshotData.browserType === browserType) return true;\n return false;\n },\n [editScreenshotState],\n );\n\n const getUpdatingScreenshotTitle = useCallback(\n () => editScreenshotState && editScreenshotState.screenshotData.title,\n [editScreenshotState],\n );\n\n const saveScreenShot = useCallback(\n async (\n browserType: BrowserTypes,\n title: string,\n base64String?: string,\n deviceDescriptor?: BrowserContextOptions,\n ) => {\n if (!storyData) {\n return new Error('Unable to find story data');\n }\n\n if (!base64String) {\n return new Error('Unable to find screenshot image data');\n }\n\n const browserOptions = deviceDescriptor ? { ...deviceDescriptor } : undefined;\n\n const data: SaveScreenshotRequest = {\n actionSets: currentActions,\n args,\n base64: base64String,\n browserOptions,\n browserType,\n filePath: storyData.filePath,\n globals,\n id: nanoid(12),\n props: args,\n screenshotOptions:\n screenshotOptions && Object.keys(screenshotOptions).length\n ? screenshotOptions\n : undefined,\n storyId: storyData.id,\n title,\n };\n\n if (editScreenshotState && isUpdating(browserType)) {\n data.updateScreenshot = editScreenshotState.screenshotData;\n }\n\n let saveResult;\n\n clearError();\n try {\n saveResult = await mutateAsync(data);\n } catch {\n return new Error('Unexpected error occurred');\n }\n\n if (editScreenshotState && isUpdating(browserType)) {\n if (saveResult.added) {\n removeScreenshot(editScreenshotState.screenshotData.id);\n }\n clearScreenshotEdit();\n }\n\n if (saveResult.added) {\n data.index = saveResult.index;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { base64, ...rest } = data;\n addScreenshot(rest);\n }\n return saveResult;\n },\n [\n currentActions,\n args,\n globals,\n screenshotOptions,\n storyData,\n isUpdating,\n editScreenshotState,\n mutateAsync,\n clearScreenshotEdit,\n clearError,\n ],\n );\n\n const onSuccessClose = useCallback(() => {\n clearResult();\n }, [clearResult]);\n\n return {\n clearError,\n error,\n getUpdatingScreenshotTitle,\n inProgress,\n isUpdating,\n onSuccessClose,\n result: mutationResult,\n saveScreenShot,\n };\n}\n","import type { BrowserContextOptions, BrowserTypes } from '../../../typings';\nimport { STORY_RENDERED } from '@storybook/core-events';\nimport { addons, useStorybookState } from '@storybook/manager-api';\nimport sum from 'hash-sum';\nimport { nanoid } from 'nanoid';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useGlobals } from '../../../hooks/use-globals';\nimport { useKnobs } from '../../../hooks/use-knobs';\nimport { toast } from '../../../utils/toast';\nimport { useCurrentActions } from '../../action-set/hooks/use-current-actions';\nimport { useScreenshotOptions } from './use-screenshot-options';\n\nexport function useScreenshot(\n browserType: BrowserTypes | 'storybook',\n browserOptions?: BrowserContextOptions,\n) {\n const args = useKnobs();\n const globals = useGlobals();\n\n const state = useStorybookState();\n\n const { screenshotOptions } = useScreenshotOptions();\n\n const { currentActions } = useCurrentActions(state.storyId);\n\n const prevHash = useRef<string>();\n\n const [error, setError] = useState<string>();\n\n const {\n mutate,\n isPending: inProgress,\n data: result,\n } = trpcClient.screenshot.takeScreenshot.useMutation({\n onError: (mutationError) => {\n const message = mutationError.message || 'Unexpected error occurred';\n setError(message);\n toast.error(message);\n },\n });\n\n // Incremented each time the preview finishes rendering (including HMR).\n // Used instead of polling iframe.contentWindow.__playwright_addon_hot_reload_time__.\n const [renderCount, setRenderCount] = useState(0);\n\n useEffect(() => {\n const channel = addons.getChannel();\n const handler = () => setRenderCount((c) => c + 1);\n channel.on(STORY_RENDERED, handler);\n return () => {\n channel.off(STORY_RENDERED, handler);\n };\n }, []);\n\n const getSnapshot = useCallback(() => {\n if (browserType === 'storybook') return;\n\n setError(undefined);\n\n mutate({\n actionSets: currentActions,\n args,\n browserOptions,\n browserType,\n globals,\n props: args,\n requestId: nanoid(),\n screenshotOptions,\n storyId: state.storyId,\n });\n }, [\n browserType,\n currentActions,\n args,\n browserOptions,\n globals,\n mutate,\n screenshotOptions,\n state.storyId,\n ]);\n\n useEffect(() => {\n if (inProgress || renderCount === 0) return;\n\n const currentHash = sum({\n args,\n browserOptions,\n currentActions,\n globals,\n id: state.storyId,\n screenshotOptions,\n });\n\n if (prevHash.current === currentHash) {\n return;\n }\n\n prevHash.current = currentHash;\n\n getSnapshot();\n }, [\n currentActions,\n getSnapshot,\n args,\n browserOptions,\n globals,\n state.storyId,\n screenshotOptions,\n inProgress,\n renderCount,\n ]);\n\n return { error, getSnapshot, loading: inProgress, screenshot: result };\n}\n","import { useCallback } from 'react';\nimport { trpcClient } from '../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../hooks/use-current-story-data';\nimport { changeScreenshotIndex } from '../store/index';\n\nexport interface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\nexport function useScreenshotIndexChange() {\n const { mutateAsync, isPending: ChangeIndexInProgress } =\n trpcClient.screenshot.changeScreenshotIndex.useMutation();\n\n const storyData = useCurrentStoryData();\n\n const changeIndex = useCallback(\n async (e: SortableIndexChangeEvent) => {\n if (!storyData) return;\n\n changeScreenshotIndex({ newIndex: e.newIndex, oldIndex: e.oldIndex });\n try {\n await mutateAsync({\n filePath: storyData.filePath,\n newIndex: e.newIndex,\n oldIndex: e.oldIndex,\n storyId: storyData.id,\n });\n } catch {\n changeScreenshotIndex({ newIndex: e.oldIndex, oldIndex: e.newIndex });\n }\n },\n [mutateAsync, storyData],\n );\n return {\n ChangeIndexInProgress,\n changeIndex,\n };\n}\n","import type { DialogProps, ImageDiffPreviewProps } from '../../../../components/common';\nimport type { StoryData } from '../../../../schema';\nimport type { ScreenshotData } from '../../../../typings';\nimport React, { useEffect } from 'react';\nimport { ImageDiffPreviewDialog, Loader } from '../../../../components/common';\nimport { useScreenshotDiffTest } from '../../hooks';\nimport { ScreenshotInfo } from './ScreenshotInfo';\n\nexport interface ScreenshotPreviewDialogProps\n extends DialogProps, Partial<ImageDiffPreviewProps> {\n screenShotData: ScreenshotData;\n storyData: StoryData;\n}\n\nconst ScreenshotPreviewDialog: React.FC<ScreenshotPreviewDialogProps> = (props) => {\n const { storyData, screenShotData, onClose, open = true, ...rest } = props;\n\n const { testScreenshot, inProgress, result } = useScreenshotDiffTest();\n\n useEffect(() => {\n testScreenshot({ ...storyData, screenshotId: screenShotData.id });\n }, [storyData, screenShotData.id, testScreenshot]);\n\n return (\n <>\n {result?.filePath && (\n <ImageDiffPreviewDialog\n title={screenShotData.title}\n imageDiffResult={result}\n open={open}\n onClose={onClose}\n titleActions={() => (\n <ScreenshotInfo\n color=\"primary\"\n size=\"medium\"\n screenshotData={screenShotData}\n />\n )}\n {...rest}\n />\n )}\n <Loader open={inProgress} />\n </>\n );\n};\n\nScreenshotPreviewDialog.displayName = 'ScreenshotPreviewDialog';\n\nexport { ScreenshotPreviewDialog };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ImageDiffResult } from '../../../../api/typings';\nimport type { StoryData } from '../../../../schema';\nimport type { ScreenshotData } from '../../../../typings';\nimport type { ScreenshotListItemMenuProps } from './ScreenshotListItemMenu';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { makeStyles } from '@material-ui/core';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport Error from '@material-ui/icons/Error';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n BrowserIcon,\n Loader,\n MemoizedImageDiffMessage,\n} from '../../../../components/common';\nimport { useDragStart } from '../../../../hooks/use-drag-start';\nimport { useEditScreenshot } from '../../hooks/use-edit-screenshot';\nimport { useScreenshotDiffTest } from '../../hooks/use-screenshot-diff-test';\nimport { removeImageDiffResult } from '../../store/actions';\nimport { ScreenshotInfo } from './ScreenshotInfo';\nimport { ScreenshotListItemMenu } from './ScreenshotListItemMenu';\nimport { ScreenshotListItemWrapper } from './ScreenshotListItemWrapper';\nimport { ScreenshotPreviewDialog } from './ScreenshotPreviewDialog';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\n\nconst CheckCircleIcon = resolveMuiIcon(CheckCircle);\nconst ErrorIcon = resolveMuiIcon(Error);\n\nconst useStyles = makeStyles(\n () => {\n return {\n indicatorIcon: {\n height: 16,\n position: 'absolute',\n right: -1,\n top: 0,\n zIndex: 1,\n },\n visible: {\n display: 'block',\n },\n };\n },\n { name: 'ScreenshotListItemMenu' },\n);\n\nexport interface ScreenshotListItemProps extends Omit<\n ScreenshotListItemMenuProps,\n 'onDelete'\n> {\n onClick?: (item: ScreenshotData) => void;\n selected?: boolean;\n forceShowMenu?: boolean;\n draggable?: boolean;\n imageDiffResult?: ImageDiffResult;\n showImageDiffResultDialog?: boolean;\n storyData: StoryData;\n showPreviewOnClick?: boolean;\n pauseDeleteImageDiffResult?: boolean;\n openUpdateDialog?: boolean;\n index?: number;\n sortableId?: string;\n}\n\nfunction ScreenshotListItem({\n pauseDeleteImageDiffResult,\n showPreviewOnClick,\n screenshot,\n sortableId,\n imageDiffResult,\n selected,\n onClick,\n draggable,\n forceShowMenu,\n showImageDiffResultDialog,\n storyData,\n ...rest\n}: ScreenshotListItemProps) {\n const {\n attributes,\n listeners,\n setActivatorNodeRef,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n disabled: !draggable,\n id: sortableId ?? screenshot.id,\n });\n\n const classes = useStyles();\n\n const [showMenu, setShowMenu] = useState(false);\n const [showImageDiffResult, setShowImageDiffResult] = useState(false);\n\n const timer = useRef(0);\n\n const { dragStart } = useDragStart();\n\n const [showPreview, setShowPreview] = useState(false);\n\n const { inProgress, testScreenshot } = useScreenshotDiffTest();\n\n const isPassesImageDiff = imageDiffResult && imageDiffResult.pass;\n\n const handleRemoveScreenShotResult = useCallback(() => {\n setShowImageDiffResult(false);\n if (\n !pauseDeleteImageDiffResult &&\n isPassesImageDiff &&\n imageDiffResult?.screenshotId\n ) {\n removeImageDiffResult(imageDiffResult.screenshotId);\n } else {\n window.clearTimeout(timer.current);\n }\n }, [pauseDeleteImageDiffResult, isPassesImageDiff, imageDiffResult]);\n\n useEffect(() => {\n if (!pauseDeleteImageDiffResult && imageDiffResult && imageDiffResult.pass) {\n timer.current = window.setTimeout(() => {\n handleRemoveScreenShotResult();\n }, 10000);\n }\n return () => {\n window.clearTimeout(timer.current);\n };\n }, [pauseDeleteImageDiffResult, handleRemoveScreenShotResult, imageDiffResult]);\n\n const handleShowImageDiffResult = useCallback(() => {\n setShowImageDiffResult(true);\n }, []);\n\n const handleMouseEnter = useCallback(() => {\n setShowMenu(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setShowMenu(false);\n }, []);\n\n const handleRunDiffTest = useCallback(async () => {\n await testScreenshot({ ...storyData, screenshotId: screenshot.id });\n setShowImageDiffResult(true);\n }, [screenshot.id, storyData, testScreenshot]);\n\n const toggleSelectedItem = useCallback(() => {\n if (onClick) onClick(screenshot);\n if (showPreviewOnClick) {\n setShowPreview(!showPreview);\n }\n }, [onClick, screenshot, showPreview, showPreviewOnClick]);\n\n const { editScreenshot, loadSetting, editScreenshotState, clearScreenshotEdit } =\n useEditScreenshot();\n\n const handleEdit = useCallback(\n () => editScreenshot(screenshot),\n [editScreenshot, screenshot],\n );\n\n const handleLoadSetting = useCallback(() => {\n loadSetting(screenshot);\n }, [loadSetting, screenshot]);\n\n return (\n <div\n ref={setNodeRef}\n style={{\n opacity: isDragging ? 0.8 : 1,\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <ScreenshotListItemWrapper\n onClick={toggleSelectedItem}\n title={screenshot.title}\n draggable={draggable}\n selected={\n selected ||\n (editScreenshotState && editScreenshotState.screenshotData.id === screenshot.id)\n }\n tooltip={screenshot.title + (storyData && ` - ${storyData.id}`)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n dragHandleProps={\n draggable\n ? {\n ...(attributes as React.HTMLAttributes<HTMLSpanElement>),\n ...(listeners as React.HTMLAttributes<HTMLSpanElement>),\n setNodeRef: setActivatorNodeRef,\n }\n : undefined\n }\n style={{\n cursor: 'pointer',\n }}\n >\n <>\n <Loader progressSize={20} position=\"absolute\" open={inProgress} />\n\n {isPassesImageDiff && (\n <CheckCircleIcon\n color=\"primary\"\n onClick={handleRemoveScreenShotResult}\n className={classes.indicatorIcon}\n />\n )}\n\n {imageDiffResult && !imageDiffResult.pass && (\n <ErrorIcon\n color=\"secondary\"\n onClick={handleShowImageDiffResult}\n className={classes.indicatorIcon}\n />\n )}\n\n <BrowserIcon style={{ height: 16 }} browserType={screenshot.browserType} />\n\n {showImageDiffResult && showImageDiffResultDialog && imageDiffResult && (\n <MemoizedImageDiffMessage\n result={imageDiffResult}\n onClose={handleRemoveScreenShotResult}\n title={screenshot.title}\n titleActions={() => (\n <ScreenshotInfo\n color=\"primary\"\n size=\"medium\"\n screenshotData={screenshot}\n />\n )}\n />\n )}\n <ScreenshotListItemMenu\n show={(forceShowMenu || showMenu) && !dragStart}\n screenshot={screenshot}\n onHide={handleMouseLeave}\n onRunImageDiff={handleRunDiffTest}\n imageDiffResult={imageDiffResult}\n onEditClick={handleEdit}\n onLoadSettingClick={handleLoadSetting}\n isEditing={Boolean(editScreenshotState)}\n onDelete={clearScreenshotEdit}\n {...rest}\n />\n\n {showPreview && showPreviewOnClick && (\n <ScreenshotPreviewDialog\n screenShotData={screenshot}\n storyData={storyData}\n onClose={toggleSelectedItem}\n open={true}\n width=\"100%\"\n height=\"100%\"\n activeTab={!isPassesImageDiff ? 'imageDiff' : 'newScreenshot'}\n />\n )}\n </>\n </ScreenshotListItemWrapper>\n </div>\n );\n}\n\nScreenshotListItem.displayName = 'ScreenshotListItem';\n\nexport { ScreenshotListItem as SortableScreenshotListItem };\n","import type { DragEndEvent } from '@dnd-kit/core';\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport React, { useCallback } from 'react';\nimport { ListWrapperSortableContainer, Loader } from '../../../../components/common';\nimport { useDragStart } from '../../../../hooks/use-drag-start';\nimport { useScreenshotIndexChange } from '../../hooks/use-screenshot-index-change';\n\ninterface ScreenshotListSortableProps {\n items: Array<string | number>;\n}\n\nconst ScreenshotListSortable: React.FC<ScreenshotListSortableProps> = ({\n children,\n items,\n}) => {\n const { setDragStart } = useDragStart();\n\n const { changeIndex, ChangeIndexInProgress } = useScreenshotIndexChange();\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragStart = useCallback(() => {\n setDragStart(true);\n }, [setDragStart]);\n\n const handleDragCancel = useCallback(() => {\n setDragStart(false);\n }, [setDragStart]);\n\n const handleDragEnd = useCallback(\n ({ active, over }: DragEndEvent) => {\n setDragStart(false);\n\n if (!over || active.id === over.id) return;\n\n const oldIndex = items.findIndex((x) => x === active.id);\n const newIndex = items.findIndex((x) => x === over.id);\n\n if (oldIndex < 0 || newIndex < 0) return;\n\n changeIndex({ newIndex, oldIndex });\n },\n [changeIndex, items, setDragStart],\n );\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n <ListWrapperSortableContainer>\n <Loader open={ChangeIndexInProgress} />\n {children}\n </ListWrapperSortableContainer>\n </SortableContext>\n </DndContext>\n );\n};\n\nScreenshotListSortable.displayName = 'ScreenshotListSortable';\n\nexport { ScreenshotListSortable };\n","import React from 'react';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { useScreenshotStoreState } from '../../store/selectors';\n\nimport { SortableScreenshotListItem } from './ScreenshotListItem';\nimport { ScreenshotListSortable } from './ScreenshotListSortable';\n\nconst ScreenshotList: React.FC = ({ children }) => {\n const storyData = useCurrentStoryData();\n\n const state = useScreenshotStoreState();\n\n const hasScreenshot = state.screenshots && state.screenshots.length > 0;\n const sortedScreenshots = [...(state.screenshots || [])].sort(\n (a, b) => (a.index ?? 0) - (b.index ?? 0),\n );\n\n return (\n <>\n <ScreenshotListSortable items={sortedScreenshots.map((x) => x.id)}>\n {hasScreenshot ? (\n <>\n {storyData &&\n sortedScreenshots.map((screenshot, index) => (\n <SortableScreenshotListItem\n index={index}\n sortableId={screenshot.id}\n openUpdateDialog={true}\n key={screenshot.id}\n screenshot={screenshot}\n storyData={storyData}\n showPreviewOnClick={true}\n draggable={true}\n enableImageDiff={true}\n enableUpdate={true}\n showImageDiffResultDialog={true}\n enableLoadSetting={true}\n enableEditScreenshot={true}\n pauseDeleteImageDiffResult={state.pauseDeleteImageDiffResult}\n imageDiffResult={state.imageDiffResults.find(\n (x) => x.screenshotId === screenshot.id,\n )}\n />\n ))}\n </>\n ) : (\n <div style={{ marginTop: 30, textAlign: 'center' }}>\n <div>No screenshot has been found!</div>\n </div>\n )}\n\n {children}\n </ScreenshotListSortable>\n </>\n );\n};\n\nScreenshotList.displayName = 'ScreenshotList';\n\nexport { ScreenshotList };\n","import { IconButton } from '@storybook/components';\nimport { ContrastIcon, PhotoIcon, RefreshIcon, WrenchIcon } from '@storybook/icons';\nimport React from 'react';\nimport {\n DeleteConfirmationButton,\n FixScreenshotFileDialog,\n Toolbar,\n} from '../../../../components/common';\n\nexport interface ScreenshotListToolbarProps {\n onTestClick: () => void;\n title: string;\n onPreviewClick: () => void;\n onUpdateClick: () => void;\n hasScreenShot?: boolean;\n onDelete: () => void;\n}\n\nconst ScreenshotListToolbar: React.FC<ScreenshotListToolbarProps> = (props) => {\n const { hasScreenShot, title, onTestClick, onPreviewClick, onUpdateClick, onDelete } =\n props;\n\n const [openFixDialog, setOpenFixDialog] = React.useState<boolean>(false);\n\n return (\n <Toolbar border={['bottom']}>\n <div className=\"left\">\n <div title={title}>Story Screenshots</div>\n </div>\n <div className=\"right\">\n <FixScreenshotFileDialog\n fixFunction={true}\n onClose={setOpenFixDialog}\n open={openFixDialog}\n />\n <IconButton onClick={() => setOpenFixDialog(true)} title=\"Fix screenshot name\">\n <WrenchIcon />\n </IconButton>\n {hasScreenShot && (\n <>\n <IconButton onClick={onUpdateClick} title=\"Update story screenshots\">\n <RefreshIcon />\n </IconButton>\n <IconButton onClick={onTestClick} title=\"Run diff test for story screenshots\">\n <ContrastIcon />\n </IconButton>\n <IconButton onClick={onPreviewClick} title=\"Display story screenshots\">\n <PhotoIcon />\n </IconButton>\n <DeleteConfirmationButton IconButton={IconButton} onDelete={onDelete} />\n </>\n )}\n </div>\n </Toolbar>\n );\n};\n\nScreenshotListToolbar.displayName = 'ScreenshotListToolbar';\n\nexport { ScreenshotListToolbar };\n","import { useEffect } from 'react';\n\nexport function useKeyPressFn(\n keydown?: (ev: KeyboardEvent) => void,\n keyup?: (ev: KeyboardEvent) => void,\n disable = false,\n) {\n // Add event listeners\n useEffect(() => {\n if (disable) return undefined;\n if (keydown) window.addEventListener('keydown', keydown);\n if (keyup) window.addEventListener('keyup', keyup);\n // Remove event listeners on cleanup\n return () => {\n if (keydown) window.removeEventListener('keydown', keydown);\n if (keyup) window.removeEventListener('keyup', keyup);\n };\n }, [disable, keydown, keyup]); // Empty array ensures that effect is only run on mount and unmount\n}\n","import type { DialogProps } from '../../../../components/common';\nimport type { StoryData } from '../../../../schema';\nimport type { ScreenshotData } from '../../../../typings';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Dialog, ImageDiffPreview } from '../../../../components/common';\nimport { useKeyPressFn } from '../../../../hooks/use-key-press-fn';\nimport { useScreenshotStoreState } from '../../store/selectors';\nimport { SortableScreenshotListItem } from './ScreenshotListItem';\nimport { ScreenshotListSortable } from './ScreenshotListSortable';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { divider },\n } = theme;\n\n return {\n line: {\n backgroundColor: divider,\n width: 1,\n },\n list: {\n width: '350px',\n },\n root: {\n display: 'flex',\n flexDirection: 'row',\n height: 'calc(100% - 70px) !important',\n position: 'relative',\n width: '100%',\n },\n };\n },\n { name: 'ScreenshotListPreviewDialog' },\n);\n\nexport interface ScreenshotListPreviewDialogProps {\n screenshots: ScreenshotData[];\n storyData: StoryData;\n selectedItem?: string;\n title?: string;\n draggable?: boolean;\n}\n\nconst ScreenshotListPreviewDialog: React.FC<\n ScreenshotListPreviewDialogProps & DialogProps\n> = ({\n screenshots,\n storyData,\n selectedItem,\n title,\n children,\n draggable = true,\n ...rest\n}) => {\n const [currentItem, setCurrentItem] = useState<ScreenshotData>();\n\n const state = useScreenshotStoreState();\n\n const classes = useStyles();\n\n const handleItemClick = useCallback(async (screenshot: ScreenshotData) => {\n setCurrentItem(screenshot);\n }, []);\n\n const handleKeyUp = useCallback(\n (ev: KeyboardEvent) => {\n if (!currentItem) return;\n const index = screenshots.findIndex((x) => x.id === currentItem.id);\n switch (ev.key) {\n case 'ArrowDown': {\n if (screenshots[index + 1]) {\n setCurrentItem(screenshots[index + 1]);\n }\n break;\n }\n case 'ArrowUp': {\n if (screenshots[index - 1]) {\n setCurrentItem(screenshots[index - 1]);\n }\n break;\n }\n default:\n break;\n }\n },\n [currentItem, screenshots],\n );\n\n useKeyPressFn(undefined, handleKeyUp);\n\n useEffect(() => {\n if (\n state.imageDiffResults &&\n state.imageDiffResults.length &&\n screenshots &&\n !currentItem\n ) {\n if (selectedItem) {\n const selectedScreenshot = screenshots.find((x) => x.id === selectedItem);\n if (selectedScreenshot) {\n handleItemClick(selectedScreenshot);\n }\n } else if (screenshots[0]) {\n handleItemClick(screenshots[0]);\n }\n }\n }, [currentItem, handleItemClick, screenshots, selectedItem, state.imageDiffResults]);\n\n const diffResult =\n currentItem && state.imageDiffResults.find((x) => x.screenshotId === currentItem.id);\n\n return (\n <Dialog\n width=\"100%\"\n title={title || (currentItem ? capitalize(currentItem.title) : 'Loading ...')}\n subtitle={\n (title && currentItem && currentItem.title) + (storyData && ` (${storyData.id})`)\n }\n height=\"100%\"\n {...rest}\n >\n <div className={classes.root}>\n <div className={classes.list}>\n <ScreenshotListSortable items={screenshots.map((x) => x.id)}>\n {currentItem &&\n screenshots.map((screenshot, i) => (\n <SortableScreenshotListItem\n index={i}\n sortableId={screenshot.id}\n openUpdateDialog={false}\n showPreviewOnClick={false}\n key={screenshot.id}\n screenshot={screenshot}\n forceShowMenu={true}\n enableUpdate={true}\n draggable={draggable}\n storyData={storyData}\n pauseDeleteImageDiffResult={state.pauseDeleteImageDiffResult}\n onClick={handleItemClick}\n selected={currentItem.id === screenshot.id}\n imageDiffResult={state.imageDiffResults.find(\n (x) => x.screenshotId === screenshot.id,\n )}\n />\n ))}\n </ScreenshotListSortable>\n </div>\n\n <div className={classes.line} />\n {diffResult && <ImageDiffPreview imageDiffResult={diffResult} />}\n {children}\n </div>\n </Dialog>\n );\n};\n\nScreenshotListPreviewDialog.displayName = 'ScreenshotListPreviewDialog';\n\nexport { ScreenshotListPreviewDialog };\n","import type { ScreenshotTestTargetType } from '../../../../typings';\nimport { Button } from '@material-ui/core';\nimport React, { useCallback, useState } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { toast } from '../../../../utils/toast';\nimport { useImageDiffScreenshots } from '../../hooks/use-imagediff-screenshots';\nimport { useScreenshotUpdate } from '../../hooks/use-screenshot-update';\nimport {\n removePassedImageDiffResult,\n setPauseDeleteImageDiffResult,\n} from '../../store/actions';\nimport { useScreenshotStoreState } from '../../store/selectors';\nimport { ScreenshotListPreviewDialog } from './ScreenshotListPreviewDialog';\n\nexport interface StoryScreenshotPreviewProps {\n onClose: () => void;\n updating?: boolean;\n target: ScreenshotTestTargetType;\n onLoad?: () => void;\n}\n\nconst StoryScreenshotPreview: React.FC<StoryScreenshotPreviewProps> = (props) => {\n const { onClose, updating, target, onLoad } = props;\n\n const { loading, storyData } = useImageDiffScreenshots(target, onLoad);\n\n const [updateInProgress, setUpdateInProgress] = useState(false);\n\n const state = useScreenshotStoreState();\n\n const { updateScreenshot } = useScreenshotUpdate();\n\n const handleSave = useCallback(async () => {\n setUpdateInProgress(true);\n try {\n const promises = state.screenshots.reduce<Array<Promise<void>>>((arr, s) => {\n const imageDiffResult = state.imageDiffResults.find(\n (x) => x.screenshotId === s.id,\n );\n if (!imageDiffResult) {\n throw new Error(\n `Unable to find image diff result for '${s.title}' screenshot.`,\n );\n }\n arr.push(updateScreenshot(imageDiffResult));\n return arr;\n }, []);\n\n await Promise.all(promises);\n toast.success('Successfully updated.', {\n duration: Infinity,\n id: 'story-screenshot-preview:updated',\n });\n } catch (error) {\n toast.error((error as { message: string }).message);\n }\n setUpdateInProgress(false);\n }, [state, updateScreenshot]);\n\n React.useEffect(() => {\n setPauseDeleteImageDiffResult(true);\n\n return () => {\n setPauseDeleteImageDiffResult(false);\n removePassedImageDiffResult();\n };\n }, []);\n\n return (\n <>\n <Loader open={loading || updateInProgress} />\n {!loading && (\n <ScreenshotListPreviewDialog\n title={\n updating\n ? 'Following screenshots will be saved, would you like to continue?'\n : undefined\n }\n screenshots={state.screenshots}\n onClose={onClose}\n open={true}\n storyData={storyData || { filePath: '', id: '', name: '', parent: '' }}\n draggable={target === 'story' && !updateInProgress}\n footerActions={\n updating\n ? () => (\n <>\n <Button onClick={onClose} color=\"primary\">\n No\n </Button>\n <Button onClick={handleSave} color=\"primary\" autoFocus>\n Yes\n </Button>\n </>\n )\n : undefined\n }\n >\n <Loader open={updateInProgress} />\n </ScreenshotListPreviewDialog>\n )}\n </>\n );\n};\n\nStoryScreenshotPreview.displayName = 'StoryScreenshotPreview';\nconst MemoizedStoryScreenshotPreview = React.memo(StoryScreenshotPreview);\n\nexport { MemoizedStoryScreenshotPreview, StoryScreenshotPreview };\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { useDeleteStoryScreenshot } from '../../hooks/use-delete-story-screenshots';\nimport { useScreenshotDiffTestByType } from '../../hooks/use-screenshot-diff-test-by-type';\nimport { useScreenshotUpdateState } from '../../hooks/use-screenshot-update-state';\nimport { useStoryScreenshotLoader } from '../../hooks/use-story-screenshot-loader';\nimport { setPauseDeleteImageDiffResult } from '../../store/actions';\nimport { useScreenshotStoreState } from '../../store/selectors';\nimport { ScreenshotList } from './ScreenshotList';\nimport { ScreenshotListToolbar } from './ScreenshotListToolbar';\nimport { StoryScreenshotPreview } from './StoryScreenshotPreview';\n\nfunction ScreenshotPanel() {\n const [showPreview, setShowPreview] = useState(false);\n\n const reqBy = 'screenshot-panel';\n const { runDiffTest, updateInf } = useScreenshotUpdateState(reqBy, 'story');\n\n const { screenshotLoaderInProgress } = useStoryScreenshotLoader();\n\n const { deleteInProgress, deleteStoryScreenshots } = useDeleteStoryScreenshot();\n\n const state = useScreenshotStoreState();\n\n const { testStoryScreenShots, imageDiffTestInProgress } = useScreenshotDiffTestByType();\n\n const toggleShowPreview = useCallback(() => {\n setShowPreview(!showPreview);\n }, [showPreview]);\n\n const hasScreenshot = state.screenshots && state.screenshots.length > 0;\n\n useEffect(() => {\n setPauseDeleteImageDiffResult(showPreview);\n }, [showPreview]);\n\n const handleStoryImgDiff = React.useCallback(() => {\n testStoryScreenShots('story');\n }, [testStoryScreenShots]);\n\n return (\n <>\n <ScreenshotListToolbar\n onUpdateClick={runDiffTest}\n title=\"Story Screenshots\"\n onTestClick={handleStoryImgDiff}\n onPreviewClick={toggleShowPreview}\n hasScreenShot={hasScreenshot}\n onDelete={deleteStoryScreenshots}\n />\n <ScreenshotList>\n <Loader\n open={\n screenshotLoaderInProgress ||\n imageDiffTestInProgress ||\n deleteInProgress ||\n updateInf.reqBy !== undefined\n }\n />\n </ScreenshotList>\n {showPreview && (\n <StoryScreenshotPreview onClose={toggleShowPreview} target=\"story\" />\n )}\n </>\n );\n}\n\nScreenshotPanel.displayName = 'ScreenshotPanel';\n\nexport { ScreenshotPanel };\n","import React from 'react';\nimport { CommonProvider } from '../../../../components/common';\nimport { useScreenshotUpdateState } from '../../hooks/use-screenshot-update-state';\nimport { ScreenshotPanel } from './ScreenshotPanel';\nimport { MemoizedStoryScreenshotPreview } from './StoryScreenshotPreview';\n\nexport interface ScreenshotMainProps {\n showPanel: boolean;\n}\n\nconst ScreenshotMain: React.FC<ScreenshotMainProps> = ({ showPanel }) => {\n const [dialogOpen, setDialogOpen] = React.useState<boolean>(false);\n\n const { updateInf, handleClose, setIsLoadingFinish } = useScreenshotUpdateState('');\n\n const handleOnLoad = React.useCallback(() => {\n setDialogOpen(true);\n setIsLoadingFinish(true);\n }, [setIsLoadingFinish]);\n\n const handleOnClose = React.useCallback(() => {\n handleClose();\n setDialogOpen(false);\n }, [handleClose]);\n\n return (\n <CommonProvider>\n {showPanel && !dialogOpen && <ScreenshotPanel />}\n\n {updateInf.reqBy && (\n <MemoizedStoryScreenshotPreview\n onClose={handleOnClose}\n updating={true}\n target={updateInf.target ?? 'story'}\n onLoad={handleOnLoad}\n />\n )}\n </CommonProvider>\n );\n};\n\nScreenshotMain.displayName = 'ScreenshotMain';\n\nexport { ScreenshotMain };\n","import { useStorybookState } from '@storybook/manager-api';\nimport { useEffect, useState } from 'react';\nimport { constructStoryUrl } from '../utils';\n\nexport function useStoryUrl() {\n const state = useStorybookState();\n const [url, setUrl] = useState<string>();\n\n useEffect(() => {\n let newUrl = constructStoryUrl(window.location.host, state.storyId);\n\n const queryKeys = Object.keys(state.customQueryParams);\n if (queryKeys.length > 0) {\n const query = queryKeys.map((key) => {\n const val = state.customQueryParams[key];\n\n return `${key}=${val}`;\n });\n newUrl += `&${query.join('&')}`;\n }\n\n setUrl(newUrl);\n }, [state.customQueryParams, state.storyId]);\n\n return url;\n}\n","import { Divider, IconButton, makeStyles, Popover, Tooltip } from '@material-ui/core';\n\nimport CloseIcon from '@material-ui/icons/Close';\nimport { IconButton as SIconButton } from '@storybook/components';\nimport React, { useCallback, useState } from 'react';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\n\nconst CloseIconComponent = resolveMuiIcon(CloseIcon);\n\nconst useStyles = makeStyles(\n () => {\n return {\n content: {\n padding: 5,\n },\n root: {\n padding: 5,\n width: 450,\n },\n title: {\n display: 'flex',\n fontSize: 20,\n justifyContent: 'space-between',\n padding: 5,\n },\n };\n },\n { name: 'OptionPopover' },\n);\n\nexport interface OptionPopoverProps {\n title: string;\n Icon: React.ElementType;\n width?: number;\n active?: boolean;\n}\n\nconst OptionPopover: React.FC<OptionPopoverProps> = ({\n title,\n Icon,\n children,\n width,\n active,\n}) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement>();\n\n const classes = useStyles();\n\n const handleClick = useCallback((e) => {\n setAnchorEl(e.target);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(undefined);\n }, []);\n\n return (\n <>\n <Popover\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n style={{ margin: 20 }}\n anchorOrigin={{ horizontal: 'center', vertical: 'top' }}\n transformOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n >\n <div className={classes.root} style={{ width }}>\n <div className={classes.title}>\n <span>{title}</span>\n <IconButton size=\"small\" onClick={handleClose}>\n <CloseIconComponent />\n </IconButton>\n </div>\n <Divider />\n <div>{children}</div>\n </div>\n </Popover>\n\n <SIconButton onClick={handleClick} active={active}>\n <Tooltip placement=\"top\" title=\"Browser Options\">\n <Icon />\n </Tooltip>\n </SIconButton>\n </>\n );\n};\n\nOptionPopover.displayName = 'OptionPopover';\n\nexport { OptionPopover };\n","import type { BrowsersOption } from '../../../../hooks/use-browser-options';\nimport SettingIcon from '@material-ui/icons/Settings';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { DeviceList, MemoizedSchemaFormLoader } from '../../../../components/common';\nimport { useBrowserOptions } from '../../../../hooks/use-browser-options';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { OptionPopover } from './OptionPopover';\n\nconst SettingIconComponent = resolveMuiIcon(SettingIcon);\n\nexport interface BrowserOptionsProps {\n browserType: keyof BrowsersOption;\n}\n\nconst BrowserOptions: React.FC<BrowserOptionsProps> = ({ browserType }) => {\n const {\n setBrowserOptions,\n browserOptions,\n hasOption: isActive,\n setBrowserDeviceOptions,\n } = useBrowserOptions(browserType);\n\n const [reset, setReset] = useState(false);\n\n const handleSave = useCallback(\n (data) => {\n setBrowserOptions(browserType, data);\n },\n [browserType, setBrowserOptions],\n );\n\n const handleDeviceSelection = useCallback(\n (deviceName) => {\n setBrowserDeviceOptions(browserType, deviceName);\n setReset(true);\n },\n [browserType, setBrowserDeviceOptions],\n );\n\n useEffect(() => {\n if (reset) setReset(false);\n }, [reset]);\n\n if (!browserOptions) return null;\n\n return (\n <OptionPopover title=\"Browser Options\" Icon={SettingIconComponent} active={isActive}>\n {!reset && (\n <MemoizedSchemaFormLoader\n onSave={handleSave}\n schemaName=\"browser-options\"\n defaultData={browserOptions && browserOptions[browserType]}\n FooterComponent={<DeviceList onDeviceSelect={handleDeviceSelection} />}\n />\n )}\n </OptionPopover>\n );\n};\n\nBrowserOptions.displayName = 'BrowserOptions';\n\nexport { BrowserOptions };\n","import type { BrowserTypes } from '../../../../typings';\nimport { CircularProgress, makeStyles, Tooltip } from '@material-ui/core';\nimport Fullscreen from '@material-ui/icons/FullscreenSharp';\nimport RefreshIcon from '@material-ui/icons/RefreshOutlined';\nimport SaveIcon from '@material-ui/icons/SaveAltOutlined';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { BrowserOptions } from './BrowserOptions';\n\nconst FullscreenIcon = resolveMuiIcon(Fullscreen);\nconst RefreshOutlinedIcon = resolveMuiIcon(RefreshIcon);\nconst SaveAltOutlinedIcon = resolveMuiIcon(SaveIcon);\n\nconst useStyles = makeStyles((theme) => {\n const { palette } = theme;\n\n return {\n label: {\n textTransform: 'uppercase',\n },\n\n root: {\n alignItems: 'center',\n backgroundColor: palette.divider,\n color: palette.text.secondary,\n display: 'flex',\n flexWrap: 'nowrap',\n fontSize: 14,\n height: 30,\n justifyContent: 'space-between',\n minHeight: 'auto',\n paddingLeft: 10,\n paddingRight: 10,\n textAlign: 'right',\n },\n\n toolbarPanels: {\n '& button': {\n alignItems: 'center',\n display: 'flex',\n height: 30,\n marginLeft: 6,\n marginTop: 0,\n },\n '& svg:not(.browser-loader)': {\n width: 17,\n },\n alignItems: 'center',\n display: 'flex',\n },\n };\n});\n\nexport interface PreviewItemProps {\n browserType: BrowserTypes | 'storybook';\n onSave: () => void;\n loading: boolean;\n showSaveButton: boolean;\n onRefresh: () => void;\n onFullScreen: () => void;\n}\n\nconst ScreenShotViewToolbar: React.FC<PreviewItemProps> = (props) => {\n const { browserType, onSave, showSaveButton, loading, onRefresh, onFullScreen } = props;\n\n const classes = useStyles();\n\n return (\n <div className={classes.root}>\n <div className={classes.toolbarPanels}>\n <label className={classes.label}>{browserType}</label>\n {loading && (\n <CircularProgress\n classes={{\n svg: 'browser-loader',\n }}\n style={{ marginLeft: 10 }}\n size={15}\n />\n )}\n </div>\n <div className={classes.toolbarPanels}>\n {showSaveButton && (\n <IconButton onClick={onSave}>\n <Tooltip placement=\"top\" title=\"Save screenshot\">\n <SaveAltOutlinedIcon />\n </Tooltip>\n </IconButton>\n )}\n <IconButton onClick={onRefresh}>\n <Tooltip placement=\"top\" title=\"Refresh\">\n <RefreshOutlinedIcon />\n </Tooltip>\n </IconButton>\n {browserType !== 'storybook' && <BrowserOptions browserType={browserType} />}\n\n <IconButton onClick={onFullScreen}>\n <Tooltip placement=\"top\" title=\"Full screen\">\n <FullscreenIcon />\n </Tooltip>\n </IconButton>\n </div>\n </div>\n );\n};\n\nScreenShotViewToolbar.displayName = 'ScreenShotViewToolbar';\n\nexport { ScreenShotViewToolbar };\n","import { lighten, darken } from '@material-ui/core/styles';\n\nexport const getBorderColor = (\n type: 'dark' | 'light',\n color: string,\n coefficient = 0.1,\n) => {\n return type === 'dark' ? lighten(color, coefficient) : darken(color, coefficient);\n};\n","import type { BrowserContextOptions, BrowserTypes } from '../../../../typings';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport { darken, lighten } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Dialog, ErrorPanel, ImagePreview } from '../../../../components/common';\nimport { useBrowserOptions } from '../../../../hooks/use-browser-options';\nimport { useEditScreenshot } from '../../hooks/use-edit-screenshot';\nimport { useScreenshot } from '../../hooks/use-screenshot';\nimport { ScreenShotViewToolbar } from './ScreenShotViewToolbar';\nimport { getBorderColor } from './utils/index';\n\nconst useStyles = makeStyles(\n (theme) => {\n const getBackgroundColor = theme.palette.type === 'light' ? lighten : darken;\n const { palette } = theme;\n const { background } = palette;\n\n return {\n card: {\n '& .os-scrollbar': {\n opacity: 1,\n visibility: 'visible !important',\n zIndex: 10,\n },\n '& .os-scrollbar-track': {\n '& .os-scrollbar-handle': {\n backgroundColor: getBorderColor(palette.type, background.paper, 0.6),\n },\n backgroundColor: 'transparent',\n visibility: 'visible !important',\n },\n\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n zIndex: 10,\n backgroundColor: getBackgroundColor(background.default, 0.1),\n },\n\n container: {\n alignItems: 'center',\n height: '100%',\n position: 'relative',\n width: '100%',\n border: `3px solid ${palette.divider}`,\n borderTop: 0,\n },\n\n editMode: {\n '& $fakeBorder': {\n borderColor: getBackgroundColor(theme.palette.warning.main, 0.5),\n },\n backgroundColor: getBackgroundColor(theme.palette.warning.main, 0.6),\n },\n\n fakeBorder: {\n border: `10px solid ${getBorderColor(palette.type, background.paper, 0.1)}`,\n borderTop: 0,\n bottom: 0,\n left: 0,\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: 5,\n },\n\n iframe: {\n width: '100%',\n },\n\n image: {},\n imageContainer: {\n width: 'max-content',\n },\n };\n },\n { name: 'ScreenshotView' },\n);\n\nexport interface PreviewItemProps {\n browserType: BrowserTypes | 'storybook';\n url?: string;\n height: number;\n refresh?: boolean;\n onRefreshEnd?: () => void;\n onSave?: (browserType: BrowserTypes) => void;\n onScreenshotDataChange?: (\n browserType: BrowserTypes,\n data?: {\n base64: string;\n browserOptions: BrowserContextOptions;\n },\n ) => void;\n}\n\nconst ScreenshotView: React.FC<PreviewItemProps> = (props) => {\n const {\n browserType,\n url,\n height,\n refresh,\n onRefreshEnd,\n onSave,\n onScreenshotDataChange,\n } = props;\n\n const { isEditing } = useEditScreenshot();\n\n const [openFullScreen, setOpenFullScreen] = useState(false);\n\n const classes = useStyles();\n\n const { getBrowserOptions } = useBrowserOptions();\n\n const browserOptions = getBrowserOptions(browserType as BrowserTypes);\n\n const { loading, screenshot, getSnapshot, error } = useScreenshot(\n browserType,\n browserOptions,\n );\n\n useEffect(() => {\n if (!refresh || loading) return;\n getSnapshot();\n onRefreshEnd?.();\n }, [getSnapshot, loading, onRefreshEnd, refresh]);\n\n const containerHeight = height - 30;\n\n const isStorybook = browserType === 'storybook';\n\n const isValidToSave =\n Boolean(screenshot && screenshot.base64) && browserType !== 'storybook';\n\n const toggleFullScreen = useCallback(() => {\n setOpenFullScreen(!openFullScreen);\n }, [openFullScreen]);\n\n const errorMessage = error || (screenshot as { error?: string } | undefined)?.error;\n\n const handleSaveRequest = useCallback(() => {\n if (browserType === 'storybook' || !screenshot?.base64) return;\n onSave?.(browserType);\n }, [browserType, onSave, screenshot]);\n\n useEffect(() => {\n if (!onScreenshotDataChange || browserType === 'storybook') return;\n\n if (!screenshot?.base64) {\n onScreenshotDataChange(browserType, undefined);\n return;\n }\n\n onScreenshotDataChange(browserType, {\n base64: screenshot.base64,\n browserOptions,\n });\n }, [browserOptions, browserType, onScreenshotDataChange, screenshot]);\n\n return (\n <div\n className={clsx(classes.card, {\n [classes.editMode]: isEditing(browserType as BrowserTypes),\n })}\n >\n <ScreenShotViewToolbar\n browserType={browserType}\n onSave={handleSaveRequest}\n loading={loading}\n onRefresh={getSnapshot}\n showSaveButton={isValidToSave}\n onFullScreen={toggleFullScreen}\n />\n\n <div\n className={classes.container}\n style={{ height: containerHeight, overflow: isStorybook ? 'hidden' : 'auto' }}\n >\n {/* <div className={classes.fakeBorder} /> */}\n {browserType !== 'storybook' ? (\n <div className={classes.imageContainer}>\n {screenshot && screenshot.base64 && !errorMessage ? (\n <img\n className={classes.image}\n src={`data:image/gif;base64,${screenshot.base64}`}\n />\n ) : (\n <>{errorMessage && <ErrorPanel message={errorMessage} />}</>\n )}\n </div>\n ) : (\n <iframe\n src={url}\n className={classes.iframe}\n style={{ height: containerHeight }}\n frameBorder=\"0\"\n ></iframe>\n )}\n </div>\n\n <Dialog\n open={openFullScreen}\n width=\"100%\"\n height=\"100%\"\n onClose={toggleFullScreen}\n title={`${capitalize(browserType)} screenshot`}\n >\n {screenshot && openFullScreen && screenshot.base64 && (\n <ImagePreview imgSrcString={screenshot.base64} />\n )}\n </Dialog>\n </div>\n );\n};\n\nScreenshotView.displayName = 'ScreenshotView';\n\nexport { ScreenshotView };\n","import { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { forwardRef } from 'react';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n overlay: {\n backgroundColor: 'transparent',\n border: `1px solid ${theme.palette.primary.main}`,\n bottom: 0,\n cursor: 'crosshair !important',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: 100,\n },\n };\n },\n { name: 'SelectorOverlay' },\n);\n\nexport type IframeOverlayProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst IframeOverlay = forwardRef<HTMLDivElement, IframeOverlayProps>((props, ref) => {\n const classes = useStyles();\n\n return <div {...props} className={clsx(classes.overlay)} ref={ref}></div>;\n});\n\nIframeOverlay.displayName = 'IframeOverlay';\n\nexport { IframeOverlay };\n","import { IconButton } from '@storybook/components';\nimport React from 'react';\nimport Selecto from 'react-selecto';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nimport {\n useAddonState,\n useBrowserOptions,\n useKeyPressFn,\n usePreviewIframe,\n useScreenshotOptions,\n} from '../../hooks';\nimport { getIframeScrollPosition, toast } from '../../utils';\nimport AlertToast, { ToastMessageContainer } from '../../utils/toast/AlertToast';\nimport { IframeOverlay } from '../common/IframeOverlay';\n\nexport interface ClipperProps {\n clipping: boolean;\n start: () => void;\n stop: () => void;\n toggleClippingState: () => void;\n}\n\nexport const useClipperState = create<ClipperProps>()(\n devtools(\n (set) => ({\n clipping: false,\n start: () => {\n set(() => ({\n clipping: true,\n }));\n },\n stop: () => {\n set(() => ({\n clipping: false,\n }));\n },\n toggleClippingState: () => {\n set((s) => ({\n clipping: !s.clipping,\n }));\n },\n }),\n { name: 'clipper-store' },\n ),\n);\n\nconst Clipper: React.FC = () => {\n const { clipping, stop } = useClipperState();\n const { addonState, setAddonState } = useAddonState();\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const clippingWarningDismissed = addonState.clippingWarningDismissed ?? false;\n\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const overlayRef = React.useRef<HTMLDivElement>(null);\n\n const iframe = usePreviewIframe();\n\n const handleEnd = React.useCallback(\n (e) => {\n if (!overlayRef.current || !iframe) return;\n const iframeScroll = getIframeScrollPosition(iframe);\n\n const { height, width, top, left } = e.rect as DOMRect;\n\n const iframeDocument = iframe.contentDocument ?? iframe.contentWindow?.document;\n const iframeHeight = iframeDocument\n ? Math.max(\n iframeDocument.body?.scrollHeight || 0,\n iframeDocument.body?.offsetHeight || 0,\n iframeDocument.documentElement.scrollHeight,\n iframeDocument.documentElement.offsetHeight,\n iframeDocument.documentElement.clientHeight,\n )\n : iframe.getBoundingClientRect().height;\n const iframeRect = iframe.getBoundingClientRect();\n const iframeViewportWidth = iframe.contentWindow?.innerWidth ?? iframeRect.width;\n const iframeViewportHeight = iframe.contentWindow?.innerHeight ?? iframeRect.height;\n const iframeClientWidth =\n iframeDocument?.documentElement?.clientWidth ?? iframeRect.width;\n const iframeClientHeight =\n iframeDocument?.documentElement?.clientHeight ?? iframeRect.height;\n const previewWidth = Math.min(iframeRect.width, iframeClientWidth);\n const previewHeight = Math.min(iframeRect.height, iframeClientHeight);\n const previewRight = iframeRect.left + previewWidth;\n const previewBottom = iframeRect.top + previewHeight;\n\n const rawScaleX = previewWidth ? iframeViewportWidth / previewWidth : 1;\n const rawScaleY = previewHeight ? iframeViewportHeight / previewHeight : 1;\n const scaleX = Number.isFinite(rawScaleX) && rawScaleX > 0 ? rawScaleX : 1;\n const scaleY = Number.isFinite(rawScaleY) && rawScaleY > 0 ? rawScaleY : 1;\n\n const selectionRight = left + width;\n const selectionBottom = top + height;\n const boundedLeft = Math.max(left, iframeRect.left);\n const boundedTop = Math.max(top, iframeRect.top);\n const boundedRight = Math.min(selectionRight, previewRight);\n const boundedBottom = Math.min(selectionBottom, previewBottom);\n const boundedWidth = Math.max(0, boundedRight - boundedLeft);\n const boundedHeight = Math.max(0, boundedBottom - boundedTop);\n\n if (boundedWidth === 0 || boundedHeight === 0) {\n stop();\n return;\n }\n\n setBrowserOptions('all', {\n ...(browserOptions.all || {}),\n viewport: {\n height: Math.round(iframeHeight),\n width: Math.round(iframeViewportWidth),\n },\n });\n\n const clipperPos = {\n left: iframeScroll.scrollLeft + (boundedLeft - iframeRect.left) * scaleX,\n top: iframeScroll.scrollTop + (boundedTop - iframeRect.top) * scaleY,\n };\n\n setScreenshotOptions({\n ...screenshotOptions,\n clip: {\n height: Math.ceil(boundedHeight * scaleY),\n width: Math.ceil(boundedWidth * scaleX),\n x: Math.floor(clipperPos.left),\n y: Math.floor(clipperPos.top),\n },\n });\n\n stop();\n if (!clippingWarningDismissed) {\n toast.custom(({ dismiss }) => (\n <AlertToast variant=\"info\" onClose={dismiss}>\n <ToastMessageContainer style={{ fontSize: 14 }}>\n Clipping may differ from the Storybook preview when browser zoom is not\n 100%, OS display scaling (DPI) is different, fonts or line height differ,\n text wraps differently, the preview is resized or transformed, or scrollbar\n behavior differs from the Playwright viewport.\n </ToastMessageContainer>\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-start',\n marginTop: 8,\n }}\n >\n <IconButton\n type=\"button\"\n onClick={() => {\n setAddonState({\n ...addonState,\n clippingWarningDismissed: true,\n });\n dismiss();\n }}\n >\n Do Not Show Again\n </IconButton>\n </div>\n </AlertToast>\n ));\n }\n },\n [\n addonState,\n browserOptions.all,\n iframe,\n clippingWarningDismissed,\n screenshotOptions,\n setBrowserOptions,\n setScreenshotOptions,\n setAddonState,\n stop,\n ],\n );\n\n useKeyPressFn(undefined, (e) => {\n if (e.code === 'Escape') stop();\n });\n\n if (!clipping) return null;\n\n return (\n <IframeOverlay ref={overlayRef}>\n <Selecto\n dragContainer={overlayRef.current}\n hitRate={100}\n selectByClick={true}\n selectFromInside={true}\n ratio={0}\n onSelectEnd={handleEnd}\n ></Selecto>\n </IframeOverlay>\n );\n};\n\nClipper.displayName = 'Clipper';\n\nexport { Clipper };\n","import { Tooltip } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useClipperState } from './Clipper';\n\nconst ClipperButton: React.FC = () => {\n const { clipping, toggleClippingState } = useClipperState();\n\n const handleClick = React.useCallback(() => {\n toggleClippingState();\n }, [toggleClippingState]);\n\n return (\n <IconButton active={clipping} onClick={handleClick}>\n <Tooltip placement=\"top\" title={clipping ? 'Stop Clipping' : 'Start Clipping'}>\n <svg\n className=\"MuiSvgIcon-root\"\n focusable=\"false\"\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n style={{\n height: 20,\n transform: 'rotate(180deg)',\n width: 20,\n }}\n >\n <path d=\"M17 5h-2V3h2v2zm-2 16h2v-2.59L19.59 21 21 19.59 18.41 17H21v-2h-6v6zm4-12h2V7h-2v2zm0 4h2v-2h-2v2zm-8 8h2v-2h-2v2zM7 5h2V3H7v2zM3 17h2v-2H3v2zm2 4v-2H3c0 1.1.9 2 2 2zM19 3v2h2c0-1.1-.9-2-2-2zm-8 2h2V3h-2v2zM3 9h2V7H3v2zm4 12h2v-2H7v2zm-4-8h2v-2H3v2zm0-8h2V3c-1.1 0-2 .9-2 2z\"></path>\n </svg>\n </Tooltip>\n </IconButton>\n );\n};\n\nClipperButton.displayName = 'ClipperButton';\n\nexport { ClipperButton };\n","import * as React from 'react';\n\nconst Browser: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"2 -1 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M12 9.984l3.984 4.031h-3v6h-1.969v-6h-3zM18.984 3.984q0.844 0 1.43 0.586t0.586 1.43v12q0 0.797-0.609 1.406t-1.406 0.609h-3.984v-2.016h3.984v-9.984h-13.969v9.984h3.984v2.016h-3.984q-0.844 0-1.43-0.586t-0.586-1.43v-12q0-0.844 0.586-1.43t1.43-0.586h13.969z\"></path>\n\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n);\n\nexport { Browser };\n","import * as React from 'react';\n\nconst Chrome: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"-4 -2 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.071 13.954l-4.579-7.931c2.932-3.671 7.445-6.023 12.508-6.023 5.857 0 10.978 3.148 13.767 7.844h-13.055c-0.235-0.020-0.472-0.031-0.711-0.031-3.809 0-7.018 2.614-7.929 6.142zM21.728 10.156h9.171c0.711 1.81 1.101 3.781 1.101 5.844 0 8.776-7.066 15.9-15.818 15.998l6.544-11.334c0.921-1.324 1.462-2.932 1.462-4.664 0-2.287-0.943-4.357-2.459-5.844zM10.188 16c0-3.205 2.607-5.813 5.813-5.813s5.813 2.607 5.813 5.813c0 3.205-2.608 5.813-5.813 5.813s-5.813-2.608-5.813-5.813zM18.193 23.889l-4.581 7.934c-7.704-1.153-13.613-7.797-13.613-15.822 0-2.851 0.746-5.526 2.053-7.845l6.532 11.314c1.308 2.785 4.14 4.718 7.415 4.718 0.759 0 1.495-0.104 2.193-0.299z\"></path>\n\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n);\n\nexport { Chrome };\n","import * as React from 'react';\n\nconst Firefox: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"-4 -2 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M31.954 10.442l-0.371 2.377c0 0-0.53-4.402-1.179-6.047-0.995-2.521-1.438-2.501-1.441-2.498 0.667 1.694 0.546 2.604 0.546 2.604s-1.181-3.219-4.303-4.243c-3.459-1.134-5.33-0.824-5.547-0.765-0.033-0-0.064-0-0.095-0 0.026 0.002 0.050 0.005 0.076 0.007-0.001 0.001-0.003 0.001-0.003 0.002 0.014 0.017 3.822 0.666 4.497 1.594 0 0-1.617 0-3.227 0.464-0.073 0.021 5.923 0.749 7.148 6.74 0 0-0.657-1.371-1.47-1.604 0.535 1.626 0.397 4.712-0.112 6.245-0.066 0.197-0.133-0.853-1.135-1.305 0.321 2.301-0.019 5.952-1.616 6.957-0.124 0.078 1.001-3.603 0.226-2.18-4.46 6.838-9.731 3.155-12.101 1.535 1.215 0.264 3.52-0.041 4.541-0.8 0.001-0.001 0.002-0.002 0.004-0.003 1.108-0.758 1.765-1.311 2.354-1.18s0.982-0.46 0.524-0.985c-0.459-0.526-1.572-1.249-3.079-0.855-1.063 0.278-2.379 1.454-4.389 0.264-1.543-0.914-1.688-1.673-1.702-2.199 0.038-0.186 0.086-0.361 0.143-0.52 0.178-0.496 0.716-0.646 1.015-0.764 0.508 0.087 0.946 0.246 1.405 0.481 0.006-0.153 0.008-0.356-0.001-0.586 0.044-0.088 0.017-0.352-0.054-0.674-0.041-0.322-0.107-0.655-0.211-0.959 0-0 0.001-0 0.001-0 0.002-0.001 0.003-0.001 0.005-0.002s0.005-0.004 0.007-0.006c0-0.001 0.001-0.001 0.001-0.002 0.003-0.004 0.005-0.008 0.006-0.015 0.032-0.144 0.376-0.423 0.804-0.722 0.383-0.268 0.834-0.553 1.19-0.774 0.314-0.195 0.554-0.34 0.605-0.378 0.019-0.015 0.042-0.032 0.068-0.051 0.005-0.004 0.009-0.007 0.014-0.011 0.003-0.002 0.006-0.005 0.009-0.007 0.169-0.135 0.421-0.389 0.474-0.924 0-0.001 0-0.002 0-0.004 0.002-0.016 0.003-0.032 0.004-0.048 0.001-0.011 0.002-0.023 0.002-0.034 0-0.009 0.001-0.018 0.001-0.027 0.001-0.021 0.002-0.043 0.002-0.065 0-0.001 0-0.002 0-0.004 0.001-0.052-0-0.106-0.003-0.163-0.002-0.032-0.004-0.060-0.009-0.086-0-0.001-0.001-0.003-0.001-0.004-0.001-0.003-0.001-0.005-0.002-0.008-0.001-0.005-0.002-0.009-0.004-0.013-0-0.001-0-0.001-0.001-0.001-0.002-0.005-0.004-0.010-0.005-0.014-0-0-0-0-0-0.001-0.055-0.128-0.26-0.177-1.108-0.191-0.001-0-0.002-0-0.002-0v0c-0.346-0.006-0.798-0.006-1.391-0.004-1.039 0.004-1.613-1.016-1.797-1.41 0.251-1.389 0.977-2.379 2.17-3.051 0.023-0.013 0.018-0.023-0.009-0.031 0.233-0.141-2.82-0.004-4.225 1.782-1.247-0.31-2.333-0.289-3.269-0.069-0.18-0.005-0.404-0.027-0.67-0.083-0.623-0.564-1.514-1.606-1.562-2.85 0 0-0.003 0.002-0.008 0.006-0.001-0.012-0.002-0.024-0.002-0.036 0 0-1.897 1.458-1.613 5.434-0.001 0.064-0.002 0.125-0.004 0.184-0.514 0.696-0.768 1.282-0.787 1.411-0.455 0.926-0.917 2.32-1.292 4.437 0 0 0.263-0.833 0.79-1.777-0.388 1.188-0.693 3.036-0.514 5.808 0 0 0.047-0.615 0.215-1.5 0.131 1.719 0.704 3.841 2.152 6.337 2.78 4.791 7.052 7.211 11.775 7.582 0.839 0.069 1.689 0.071 2.544 0.006 0.079-0.006 0.157-0.011 0.236-0.018 0.968-0.068 1.942-0.214 2.914-0.449 13.287-3.212 11.842-19.256 11.842-19.256z\"></path>\n </svg>\n);\n\nexport { Firefox };\n","import * as React from 'react';\n\nconst Webkit: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n viewBox=\"-4 -2 38 38\"\n enableBackground=\"new 0 0 129 129\"\n height={22}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M16 0c-8.838 0-16 7.162-16 16s7.162 16 16 16 16-7.163 16-16-7.163-16-16-16zM29.95 14.775l-0.031-0.331c0.006 0.113 0.019 0.219 0.031 0.331zM27.762 8.4l-0.225-0.338c0.075 0.113 0.15 0.225 0.225 0.338zM26.894 7.206l-0.137-0.169c0.050 0.056 0.094 0.112 0.137 0.169zM24.956 5.237l-0.169-0.138c0.063 0.050 0.113 0.094 0.169 0.138zM23.938 4.463l-0.337-0.225c0.113 0.075 0.225 0.15 0.337 0.225zM17.556 2.087l-0.337-0.031c0.113 0.006 0.225 0.019 0.337 0.031zM14.775 2.050l-0.338 0.031c0.113-0.006 0.225-0.019 0.338-0.031zM8.4 4.237l-0.338 0.225c0.113-0.075 0.225-0.15 0.338-0.225zM7.206 5.106l-0.162 0.131c0.056-0.044 0.106-0.088 0.162-0.131zM5.237 7.044l-0.138 0.169c0.050-0.056 0.094-0.112 0.138-0.169zM4.463 8.063l-0.225 0.338c0.075-0.113 0.15-0.225 0.225-0.338zM2.087 14.444l-0.031 0.338c0.006-0.113 0.019-0.225 0.031-0.338zM2.050 17.225l0.031 0.337c-0.006-0.113-0.019-0.225-0.031-0.337zM4.237 23.594l0.225 0.337c-0.075-0.106-0.15-0.219-0.225-0.337zM4.5 23.988l2.494-1.669-0.275-0.419-2.494 1.669c-1.131-1.756-1.875-3.775-2.125-5.95l1.494-0.15-0.050-0.5-1.494 0.15c-0.025-0.288-0.038-0.581-0.044-0.875h3v-0.5h-3c0.006-0.294 0.019-0.581 0.044-0.875l1.494 0.144 0.050-0.5-1.494-0.144c0.25-2.175 1-4.194 2.131-5.95l2.494 1.669 0.275-0.419-2.5-1.656c0.169-0.237 0.338-0.475 0.519-0.7l1.156 0.95 0.319-0.388-1.156-0.95c0.188-0.225 0.388-0.438 0.588-0.65l2.119 2.119 0.356-0.356-2.119-2.119c0.213-0.2 0.425-0.4 0.644-0.588l0.95 1.162 0.387-0.319-0.95-1.156c0.231-0.181 0.463-0.356 0.7-0.525l1.669 2.494 0.419-0.275-1.669-2.494c1.756-1.131 3.775-1.875 5.95-2.125l0.15 1.494 0.5-0.050-0.15-1.494c0.287-0.025 0.581-0.038 0.875-0.044v3h0.5v-3c0.294 0.006 0.581 0.019 0.875 0.044l-0.144 1.494 0.5 0.050 0.144-1.494c2.175 0.25 4.194 1 5.95 2.131l-1.669 2.494 0.419 0.275 1.669-2.494c0.238 0.169 0.475 0.338 0.7 0.519l-0.95 1.156 0.387 0.319 0.95-1.156c0.225 0.188 0.438 0.388 0.65 0.588l-0.8 0.781-10.938 7.294-7.294 10.937-0.781 0.781c-0.2-0.212-0.4-0.425-0.588-0.644l1.156-0.95-0.319-0.387-1.156 0.95c-0.181-0.225-0.35-0.462-0.519-0.7zM5.237 24.956c-0.044-0.056-0.088-0.106-0.131-0.163l0.131 0.163zM7.044 26.762l0.162 0.131c-0.056-0.044-0.106-0.087-0.162-0.131zM8.063 27.531l0.338 0.225c-0.113-0.069-0.225-0.144-0.338-0.225zM14.444 29.913l0.338 0.031c-0.113-0.006-0.225-0.019-0.338-0.031zM17.225 29.95l0.331-0.031c-0.113 0.006-0.219 0.019-0.331 0.031zM23.6 27.762l0.337-0.225c-0.113 0.075-0.225 0.15-0.337 0.225zM24.794 26.894l0.169-0.137c-0.056 0.050-0.113 0.094-0.169 0.137zM25.887 25.913l0.025-0.025c-0.006 0.006-0.019 0.019-0.025 0.025zM26.762 24.956l0.137-0.169c-0.050 0.056-0.094 0.113-0.137 0.169zM26.981 24.688l-1.156-0.95-0.319 0.387 1.156 0.95c-0.188 0.225-0.387 0.438-0.587 0.65l-2.119-2.119-0.356 0.356 2.119 2.119c-0.212 0.2-0.425 0.4-0.644 0.587l-0.95-1.163-0.387 0.319 0.95 1.156c-0.231 0.181-0.462 0.356-0.7 0.525l-1.669-2.494-0.419 0.275 1.669 2.494c-1.756 1.131-3.775 1.875-5.95 2.125l-0.15-1.494-0.5 0.050 0.15 1.494c-0.288 0.025-0.581 0.038-0.875 0.044v-3h-0.5v3c-0.294-0.006-0.581-0.019-0.875-0.044l0.144-1.494-0.5-0.050-0.144 1.494c-2.175-0.25-4.194-1-5.95-2.131l1.669-2.494-0.419-0.275-1.656 2.494c-0.237-0.169-0.475-0.337-0.7-0.519l0.95-1.156-0.388-0.319-0.95 1.156c-0.225-0.188-0.438-0.387-0.65-0.587l0.787-0.781 10.937-7.294 7.294-10.938 0.781-0.781c0.2 0.213 0.4 0.425 0.587 0.644l-1.156 0.95 0.319 0.387 1.156-0.95c0.181 0.231 0.356 0.463 0.525 0.7l-2.494 1.669 0.275 0.419 2.494-1.669c1.131 1.756 1.875 3.775 2.125 5.95l-1.494 0.15 0.050 0.5 1.494-0.15c0.025 0.287 0.038 0.581 0.044 0.875h-3v0.5h3c-0.006 0.294-0.019 0.581-0.044 0.875l-1.494-0.144-0.050 0.5 1.494 0.144c-0.25 2.175-1 4.194-2.131 5.95l-2.494-1.669-0.275 0.419 2.494 1.669c-0.163 0.225-0.337 0.456-0.519 0.688zM29.95 17.219c-0.012 0.113-0.019 0.225-0.031 0.337l0.031-0.337zM27.762 23.6c-0.075 0.113-0.15 0.225-0.225 0.337l0.225-0.337z\"></path>\n <path d=\"M13.517 2.221l0.585 2.942-0.49 0.098-0.585-2.942 0.49-0.098z\"></path>\n <path d=\"M18.489 29.78l-0.585-2.942 0.49-0.098 0.585 2.942-0.49 0.098z\"></path>\n <path d=\"M12.176 2.528l0.436 1.435-0.478 0.145-0.436-1.435 0.478-0.145z\"></path>\n <path d=\"M19.826 29.465l-0.436-1.435 0.478-0.145 0.436 1.435-0.478 0.145z\"></path>\n <path d=\"M10.875 2.972l1.148 2.772-0.462 0.191-1.148-2.772 0.462-0.191z\"></path>\n <path d=\"M21.129 29.030l-1.148-2.772 0.462-0.191 1.148 2.772-0.462 0.191z\"></path>\n <path d=\"M9.176 3.771l0.441-0.236 0.707 1.323-0.441 0.236-0.707-1.323z\"></path>\n <path d=\"M22.816 28.228l-0.441 0.236-0.707-1.323 0.441-0.236 0.707 1.323z\"></path>\n <path d=\"M3.769 9.182l1.323 0.707-0.236 0.441-1.323-0.707 0.236-0.441z\"></path>\n <path d=\"M28.226 22.819l-1.323-0.707 0.236-0.441 1.323 0.707-0.236 0.441z\"></path>\n <path d=\"M5.744 12.019l-2.772-1.148 0.191-0.462 2.772 1.148-0.191 0.462z\"></path>\n <path d=\"M26.26 19.978l2.772 1.148-0.191 0.462-2.772-1.148 0.191-0.462z\"></path>\n <path d=\"M2.673 11.7l1.436 0.435-0.145 0.479-1.436-0.435 0.145-0.479z\"></path>\n <path d=\"M29.322 20.302l-1.436-0.435 0.145-0.479 1.436 0.435-0.145 0.479z\"></path>\n <path d=\"M2.315 13.024l2.942 0.585-0.098 0.49-2.942-0.585 0.098-0.49z\"></path>\n <path d=\"M29.679 18.976l-2.942-0.585 0.098-0.49 2.942 0.585-0.098 0.49z\"></path>\n <path d=\"M2.218 18.486l2.942-0.585 0.098 0.49-2.942 0.585-0.098-0.49z\"></path>\n <path d=\"M29.776 13.513l-2.942 0.585-0.098-0.49 2.942-0.585 0.098 0.49z\"></path>\n <path d=\"M2.53 19.829l1.435-0.436 0.145 0.478-1.435 0.436-0.145-0.478z\"></path>\n <path d=\"M29.468 12.178l-1.435 0.436-0.145-0.478 1.435-0.436 0.145 0.478z\"></path>\n <path d=\"M3.161 21.591l-0.191-0.462 2.772-1.148 0.191 0.462-2.772 1.148z\"></path>\n <path d=\"M28.837 10.413l0.191 0.462-2.772 1.148-0.191-0.462 2.772-1.148z\"></path>\n <path d=\"M3.776 22.821l-0.236-0.441 1.323-0.707 0.236 0.441-1.323 0.707z\"></path>\n <path d=\"M28.233 9.181l0.236 0.441-1.323 0.707-0.236-0.441 1.323-0.707z\"></path>\n <path d=\"M9.621 28.464l-0.441-0.236 0.707-1.323 0.441 0.236-0.707 1.323z\"></path>\n <path d=\"M22.377 3.534l0.441 0.236-0.707 1.323-0.441-0.236 0.707-1.323z\"></path>\n <path d=\"M10.415 28.837l1.148-2.772 0.462 0.191-1.148 2.772-0.462-0.191z\"></path>\n <path d=\"M21.59 3.16l-1.148 2.772-0.462-0.191 1.148-2.772 0.462 0.191z\"></path>\n <path d=\"M12.176 29.47l-0.478-0.145 0.435-1.435 0.478 0.145-0.435 1.435z\"></path>\n <path d=\"M19.823 2.528l0.479 0.145-0.435 1.436-0.479-0.145 0.435-1.436z\"></path>\n <path d=\"M13.515 29.776l-0.49-0.098 0.585-2.942 0.49 0.098-0.585 2.942z\"></path>\n <path d=\"M18.485 2.218l0.49 0.098-0.585 2.942-0.49-0.098 0.585-2.942z\"></path>\n\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n);\n\nexport { Webkit };\n","import type { SvgIconProps } from '@material-ui/core';\nimport type { BrowserTypes } from '../../typings';\nimport React, { memo } from 'react';\nimport { Browser, Chrome, Firefox, Webkit } from '../../icons';\n\nexport interface BrowserIconProps extends SvgIconProps {\n browserType?: BrowserTypes;\n}\n\nconst BrowserIcon: React.FC<BrowserIconProps> = memo((props) => {\n const { browserType, ...rest } = props;\n\n switch (browserType) {\n case 'chromium':\n return <Chrome {...rest} />;\n case 'firefox':\n return <Firefox {...rest} />;\n case 'webkit':\n return <Webkit {...rest} />;\n default:\n return <Browser {...rest} />;\n }\n});\n\nBrowserIcon.displayName = 'BrowserIcon';\n\nexport { BrowserIcon };\n","import type { BrowserTypes } from '../../typings';\nimport { capitalize } from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport React, { useCallback } from 'react';\nimport { BrowserIcon } from '../common/BrowserIcon';\n\nexport interface BrowserIconProps {\n browserType: BrowserTypes;\n onClick: (browserType: BrowserTypes) => void;\n active: boolean;\n}\n\nconst BrowserIconButton: React.FC<BrowserIconProps> = (props) => {\n const { browserType, onClick, active } = props;\n\n const handleClick = useCallback(() => {\n onClick(browserType);\n }, [browserType, onClick]);\n\n return (\n <IconButton onClick={handleClick} active={active} title={capitalize(browserType)}>\n <BrowserIcon browserType={browserType} />\n </IconButton>\n );\n};\n\nBrowserIconButton.displayName = 'BrowserIconButton';\n\nexport { BrowserIconButton };\n","import { Tooltip } from '@material-ui/core';\nimport PhotoSizeSelectLargeIconModule from '@material-ui/icons/PhotoSizeSelectLarge';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useBrowserOptions, useScreenshotOptions } from '../../hooks';\nimport { getPreviewIframe } from '../../utils';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst PhotoSizeSelectLargeIcon = resolveMuiIcon(PhotoSizeSelectLargeIconModule);\n\nfunction getIframeInnerSize(iframe: HTMLIFrameElement) {\n const iframeDocument = iframe.contentDocument;\n if (!iframeDocument || !iframeDocument.body || !iframeDocument.documentElement) {\n return null;\n }\n\n const { body, documentElement } = iframeDocument;\n\n const width = Math.max(\n body.scrollWidth,\n body.offsetWidth,\n body.clientWidth,\n documentElement.scrollWidth,\n documentElement.offsetWidth,\n documentElement.clientWidth,\n );\n\n const height = Math.max(\n body.scrollHeight,\n body.offsetHeight,\n body.clientHeight,\n documentElement.scrollHeight,\n documentElement.offsetHeight,\n documentElement.clientHeight,\n );\n\n if (width <= 0 || height <= 0) {\n return null;\n }\n\n return { width, height };\n}\n\nconst ResizeBrowserToIframeContent: React.FC = () => {\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const handleClick = React.useCallback(() => {\n const iframe = getPreviewIframe();\n if (!iframe) {\n return;\n }\n\n const innerSize = getIframeInnerSize(iframe);\n if (!innerSize) {\n return;\n }\n\n setBrowserOptions('all', {\n ...browserOptions.all,\n viewport: {\n height: Math.round(innerSize.height),\n width: Math.round(innerSize.width),\n },\n });\n\n if (screenshotOptions && screenshotOptions.clip !== undefined) {\n setScreenshotOptions({\n ...screenshotOptions,\n clip: undefined,\n });\n }\n }, [browserOptions, screenshotOptions, setBrowserOptions, setScreenshotOptions]);\n\n return (\n <IconButton\n onClick={handleClick}\n aria-label=\"Match browser viewport to iframe content\"\n >\n <Tooltip placement=\"top\" title=\"Match browser viewport to iframe content\">\n <PhotoSizeSelectLargeIcon />\n </Tooltip>\n </IconButton>\n );\n};\n\nResizeBrowserToIframeContent.displayName = 'ResizeBrowserToIframeContent';\n\nexport { ResizeBrowserToIframeContent };\n","import { Tooltip } from '@material-ui/core';\nimport AspectRatioIconModule from '@material-ui/icons/AspectRatio';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useBrowserOptions, useScreenshotOptions } from '../../hooks';\nimport { getPreviewIframe } from '../../utils';\nimport { resolveMuiIcon } from '../../utils/resolve-mui-icon';\n\nconst AspectRatioIcon = resolveMuiIcon(AspectRatioIconModule);\n\nconst ResizeBrowserToPreview: React.FC = () => {\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const handleClick = React.useCallback(() => {\n const iframe = getPreviewIframe();\n if (!iframe) {\n return;\n }\n\n const iframeRect = iframe.getBoundingClientRect();\n\n setBrowserOptions('all', {\n ...browserOptions.all,\n viewport: {\n height: Math.round(iframeRect.height),\n width: Math.round(iframeRect.width),\n },\n });\n\n if (screenshotOptions && screenshotOptions.clip !== undefined) {\n setScreenshotOptions({\n ...screenshotOptions,\n clip: undefined,\n });\n }\n }, [browserOptions, screenshotOptions, setBrowserOptions, setScreenshotOptions]);\n\n return (\n <IconButton onClick={handleClick} aria-label=\"Match browser viewport to preview\">\n <Tooltip placement=\"top\" title=\"Match browser viewport to preview\">\n <AspectRatioIcon />\n </Tooltip>\n </IconButton>\n );\n};\n\nResizeBrowserToPreview.displayName = 'ResizeBrowserToPreview';\n\nexport { ResizeBrowserToPreview };\n","import { Tooltip } from '@material-ui/core';\nimport RotateLeftIcon from '@material-ui/icons/RotateLeft';\nimport { IconButton } from '@storybook/components';\nimport React from 'react';\nimport { useBrowserOptions, useScreenshotOptions } from '../../../../hooks';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\n\nconst RotateLeftIconComponent = resolveMuiIcon(RotateLeftIcon);\n\nfunction ResetSettings() {\n const { setBrowserOptions } = useBrowserOptions();\n const { setScreenshotOptions } = useScreenshotOptions();\n\n const handleClick = React.useCallback(() => {\n setBrowserOptions('all', {});\n setScreenshotOptions({});\n }, [setBrowserOptions, setScreenshotOptions]);\n\n return (\n <IconButton onClick={handleClick}>\n <Tooltip placement=\"top\" title=\"Reset Settings\">\n <RotateLeftIconComponent style={{ marginTop: 4, width: '20px' }} />\n </Tooltip>\n </IconButton>\n );\n}\n\nResetSettings.displayName = 'ResetSettings';\n\nexport { ResetSettings };\n","import CameraIcon from '@material-ui/icons/Camera';\nimport React, { useCallback, useMemo } from 'react';\nimport { MemoizedSchemaFormLoader } from '../../../../components/common';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { useScreenshotOptions } from '../../hooks/use-screenshot-options';\nimport { OptionPopover } from './OptionPopover';\n\nconst CameraIconComponent = resolveMuiIcon(CameraIcon);\n\nconst ScreenshotOptions: React.FC = () => {\n const { setScreenshotOptions, screenshotOptions } = useScreenshotOptions();\n\n const handleSave = useCallback(\n (d) => {\n setScreenshotOptions(d);\n },\n [setScreenshotOptions],\n );\n\n const isActive = useMemo(\n () => screenshotOptions && Object.keys(screenshotOptions).length > 0,\n [screenshotOptions],\n );\n\n return (\n <OptionPopover\n title=\"Screenshot Options\"\n Icon={CameraIconComponent}\n active={isActive}\n >\n <MemoizedSchemaFormLoader\n onSave={handleSave}\n schemaName=\"screenshot-options\"\n defaultData={screenshotOptions}\n excludeProps={['path']}\n />\n </OptionPopover>\n );\n};\n\nScreenshotOptions.displayName = 'ScreenshotOptions';\n\nexport { ScreenshotOptions };\n","import type { BrowserTypes } from '../../../../typings';\nimport { Tooltip } from '@material-ui/core';\nimport CloseOutlined from '@material-ui/icons/CloseOutlined';\nimport NearMeIcon from '@material-ui/icons/NearMe';\nimport RefreshSharp from '@material-ui/icons/RefreshSharp';\nimport SaveIcon from '@material-ui/icons/SaveAltOutlined';\nimport { IconButton } from '@storybook/components';\nimport React, { useCallback } from 'react';\nimport { ClipperButton } from '../../../../components/Clipper/ClipperButton';\nimport { Toolbar as CommonToolbar } from '../../../../components/common';\nimport { BrowserIconButton } from '../../../../components/common/BrowserIconButton';\nimport { ResizeBrowserToIframeContent } from '../../../../components/ResizeBrowserToIframeContent/ResizeBrowserToIframeContent';\nimport { ResizeBrowserToPreview } from '../../../../components/ResizeBrowserToPreview/ResizeBrowserToPreview';\nimport { useBrowserOptions } from '../../../../hooks/use-browser-options';\nimport { resolveMuiIcon } from '../../../../utils/resolve-mui-icon';\nimport { BrowserOptions } from './BrowserOptions';\nimport { ResetSettings } from './ResetSettings';\nimport { ScreenshotOptions } from './ScreenshotOptions';\n\nconst CloseOutlinedIcon = resolveMuiIcon(CloseOutlined);\nconst NearMeOutlinedIcon = resolveMuiIcon(NearMeIcon);\nconst RefreshSharpIcon = resolveMuiIcon(RefreshSharp);\nconst SaveAltOutlinedIcon = resolveMuiIcon(SaveIcon);\n\nexport interface ToolbarProps {\n browserTypes: BrowserTypes[];\n activeBrowsers: BrowserTypes[];\n toggleBrowser: (type: BrowserTypes) => void;\n onCLose: () => void;\n onRefresh: () => void;\n onSave?: () => void;\n isVertical?: boolean;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = (props) => {\n const {\n browserTypes,\n toggleBrowser,\n activeBrowsers,\n onCLose,\n onRefresh,\n isVertical,\n onSave,\n } = props;\n\n const { setBrowserOptions, browserOptions } = useBrowserOptions();\n\n const enableDisableCursor = useCallback(() => {\n const enable = browserOptions.all && browserOptions.all.cursor;\n setBrowserOptions('all', {\n ...browserOptions.all,\n cursor: enable ? undefined : true,\n });\n }, [browserOptions, setBrowserOptions]);\n\n return (\n <CommonToolbar border={isVertical ? undefined : ['top']}>\n <div className=\"left\">\n {browserTypes.map((browserType) => (\n <BrowserIconButton\n key={browserType}\n browserType={browserType}\n onClick={toggleBrowser}\n active={activeBrowsers.find((x) => x === browserType) !== undefined}\n />\n ))}\n </div>\n <div className=\"right\">\n <IconButton\n className=\"cursor-button\"\n onClick={enableDisableCursor}\n active={browserOptions.all && browserOptions.all.cursor}\n >\n <Tooltip\n placement=\"top\"\n title={\n browserOptions.all && browserOptions.all.cursor\n ? 'Hide cursor'\n : 'Show cursor'\n }\n >\n <NearMeOutlinedIcon style={{ transform: 'rotate(-80deg)' }} />\n </Tooltip>\n </IconButton>\n\n <ClipperButton />\n\n <ResizeBrowserToPreview />\n <ResizeBrowserToIframeContent />\n\n <IconButton onClick={onSave}>\n <Tooltip placement=\"top\" title=\"Save screenshots\">\n <SaveAltOutlinedIcon />\n </Tooltip>\n </IconButton>\n\n <IconButton onClick={onRefresh}>\n <Tooltip placement=\"top\" title=\"Refresh\">\n <RefreshSharpIcon />\n </Tooltip>\n </IconButton>\n\n <ResetSettings />\n\n <ScreenshotOptions />\n <BrowserOptions browserType=\"all\" />\n\n <IconButton onClick={onCLose}>\n <Tooltip placement=\"top\" title=\"Close panel\">\n <CloseOutlinedIcon />\n </Tooltip>\n </IconButton>\n </div>\n </CommonToolbar>\n );\n};\n\nToolbar.displayName = 'Toolbar';\n\nexport { Toolbar };\n","import { useMemo } from 'react';\nimport { useMeasure } from 'react-use';\n\nconst GRID_PERCENT = 100;\nconst TWO_COLUMNS = 2;\nconst LIST_GAP_PX = 2;\n\nexport const useScreenshotListLayout = (\n column: number | undefined,\n activeBrowsersCount: number,\n) => {\n const [ref, rect] = useMeasure<HTMLDivElement>();\n\n const width = useMemo(() => {\n const columns = column || activeBrowsersCount || 1;\n return `calc(${GRID_PERCENT / columns}% - ${LIST_GAP_PX}px)`;\n }, [activeBrowsersCount, column]);\n\n const itemHeight = useMemo(() => {\n if (column === 1) {\n return rect.height / (activeBrowsersCount || 1);\n }\n if (column === TWO_COLUMNS) {\n return rect.height / TWO_COLUMNS;\n }\n return rect.height;\n }, [activeBrowsersCount, column, rect.height]);\n\n return {\n itemHeight,\n ref,\n width,\n };\n};\n","import type { BrowserContextOptions, BrowserTypes } from '../../../../../typings';\nimport { useCallback, useRef, useState } from 'react';\nimport { inputModal } from '../../../../../components/common';\nimport { useGenerateScreenshotTitle } from '../../../hooks/use-generate-screenshot-title';\nimport { useSaveScreenshot } from '../../../hooks/use-save-screenshot';\n\ninterface ScreenshotSaveData {\n base64: string;\n browserOptions: BrowserContextOptions;\n}\n\nexport const useScreenshotSaveFlow = (activeBrowsers: BrowserTypes[]) => {\n const [isQueueSaving, setIsQueueSaving] = useState(false);\n\n const screenshotDataRef = useRef<Record<string, ScreenshotSaveData>>({});\n\n const { generateTitle, hasGenerator } = useGenerateScreenshotTitle(null);\n const { getUpdatingScreenshotTitle, inProgress, saveScreenShot } = useSaveScreenshot();\n\n const setScreenshotData = useCallback(\n (browserType: BrowserTypes, data?: ScreenshotSaveData) => {\n if (!data) {\n delete screenshotDataRef.current[browserType];\n return;\n }\n\n screenshotDataRef.current[browserType] = data;\n },\n [],\n );\n\n const saveForBrowsers = useCallback(\n async (title: string, browsersToSave: BrowserTypes[]) => {\n setIsQueueSaving(true);\n try {\n for (const browserType of browsersToSave) {\n const screenshotData = screenshotDataRef.current[browserType];\n if (!screenshotData) continue;\n\n await saveScreenShot(\n browserType,\n title,\n screenshotData.base64,\n screenshotData.browserOptions,\n );\n }\n } finally {\n setIsQueueSaving(false);\n }\n },\n [saveScreenShot],\n );\n\n const openSaveDialog = useCallback(\n (browsersToSave: BrowserTypes[]) => {\n if (!browsersToSave.length) return;\n\n const dialogTitle =\n browsersToSave.length > 1 ? 'Screenshots Title' : 'Screenshot Title';\n\n void inputModal.show({\n onGenerateContent: hasGenerator ? generateTitle : undefined,\n onSave: (title) => {\n void saveForBrowsers(title, browsersToSave);\n },\n required: true,\n title: dialogTitle,\n value: getUpdatingScreenshotTitle(),\n });\n },\n [generateTitle, getUpdatingScreenshotTitle, hasGenerator, saveForBrowsers],\n );\n\n const requestSaveAll = useCallback(() => {\n openSaveDialog(activeBrowsers);\n }, [activeBrowsers, openSaveDialog]);\n\n const requestSaveOne = useCallback(\n (browserType: BrowserTypes) => {\n openSaveDialog([browserType]);\n },\n [openSaveDialog],\n );\n\n return {\n isSaving: isQueueSaving || inProgress,\n requestSaveAll,\n requestSaveOne,\n setScreenshotData,\n };\n};\n","import type { ScreenShotViewPanel } from '../../../../typings';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport React, { useCallback } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { useBrowserStateManager } from '../../../../hooks/use-browser-state-manager';\nimport { useStoryUrl } from '../../../../hooks/use-story-url';\nimport { ScreenshotView } from './ScreenshotView';\nimport { Toolbar } from './Toolbar';\nimport { useScreenshotListLayout } from './hooks/use-screenshot-list-layout';\nimport { useScreenshotSaveFlow } from './hooks/use-screenshot-save-flow';\n\nconst useStyles = makeStyles((theme) => ({\n error: {\n color: 'red',\n marginTop: '10%',\n padding: 30,\n textAlign: 'center',\n },\n\n list: {\n display: 'flex',\n height: '100%',\n position: 'relative',\n width: '100%',\n },\n listItem: {\n marginBottom: 2,\n marginLeft: 1,\n marginRight: 1,\n },\n listWrap: {\n flexFlow: ' row wrap',\n },\n preview: {\n boxShadow: `${theme.palette.divider} 0 1px 0 0 inset`,\n height: '100%',\n overflow: 'hidden',\n paddingTop: 2,\n width: '100%',\n },\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n vertical: {\n borderLeft: `1px solid ${theme.palette.divider}`,\n },\n}));\n\ninterface Props {\n showStorybook?: boolean;\n column?: number;\n onClose: () => void;\n viewPanel: ScreenShotViewPanel;\n}\n\nconst ScreenshotListView: React.FC<Props> = (props) => {\n const { showStorybook, column, onClose, viewPanel } = props;\n\n const {\n activeBrowsers,\n toggleBrowser,\n browserTypes,\n refreshingBrowsers,\n clearBrowserRefresh,\n refreshBrowsers,\n } = useBrowserStateManager(viewPanel);\n\n const classes = useStyles();\n\n const storyUrl = useStoryUrl();\n\n const { itemHeight, ref, width } = useScreenshotListLayout(\n column,\n activeBrowsers.length,\n );\n\n const { isSaving, requestSaveAll, requestSaveOne, setScreenshotData } =\n useScreenshotSaveFlow(activeBrowsers);\n\n const handleRefresh = useCallback(() => {\n refreshBrowsers(activeBrowsers);\n }, [activeBrowsers, refreshBrowsers]);\n\n return (\n <div className={clsx(classes.root, { [classes.vertical]: column === 1 })}>\n <Toolbar\n browserTypes={browserTypes}\n activeBrowsers={activeBrowsers}\n toggleBrowser={toggleBrowser}\n onCLose={onClose}\n onRefresh={handleRefresh}\n onSave={requestSaveAll}\n isVertical={column === 1}\n />\n <div className={classes.preview}>\n {activeBrowsers && activeBrowsers.length > 0 && (\n <div\n ref={ref}\n className={clsx(classes.list, {\n [classes.listWrap]: column !== undefined,\n })}\n >\n {showStorybook && (\n <div className={classes.listItem} style={{ width }}>\n <ScreenshotView\n browserType=\"storybook\"\n url={storyUrl}\n height={itemHeight}\n />\n </div>\n )}\n {activeBrowsers.map((browser) => (\n <div key={browser} className={classes.listItem} style={{ width }}>\n <ScreenshotView\n browserType={browser}\n height={itemHeight}\n refresh={refreshingBrowsers.includes(browser)}\n onSave={requestSaveOne}\n onRefreshEnd={() => {\n clearBrowserRefresh(browser);\n }}\n onScreenshotDataChange={setScreenshotData}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n <Loader open={isSaving} />\n </div>\n );\n};\n\nScreenshotListView.displayName = 'ScreenshotListView';\n\nexport { ScreenshotListView };\n","import Dialog from '@material-ui/core/Dialog';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { ThemeProvider } from '../../../../components/common/ThemeProvider';\nimport { ScreenshotListView } from './ScreenshotListView';\n\nconst useStyles = makeStyles((theme) => ({\n appBar: {\n backgroundColor: theme.palette.divider,\n boxShadow: 'none',\n },\n\n closeIconAbsolute: {\n position: 'absolute',\n right: 30,\n top: 30,\n },\n\n container: {\n height: '100%',\n },\n\n dialogPaper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n minHeight: '100%',\n minWidth: '100%',\n overflow: 'hidden',\n },\n\n toolbar: {\n minHeight: 'auto',\n },\n\n toolbarRight: {\n display: 'flex',\n justifyContent: 'flex-end',\n width: '100%',\n },\n}));\n\nexport interface PreviewDialogProps {\n open: boolean;\n onClose: () => void;\n}\n\nconst PreviewDialog: React.FC<PreviewDialogProps> = (props) => {\n const { onClose, open } = props;\n\n const classes = useStyles();\n\n return (\n <ThemeProvider>\n <Dialog\n onClose={onClose}\n aria-labelledby=\"simple-dialog-title\"\n open={open}\n hideBackdrop={true}\n classes={{\n paper: classes.dialogPaper,\n }}\n >\n <div className={classes.container}>\n <ScreenshotListView\n showStorybook={true}\n column={2}\n onClose={onClose}\n viewPanel=\"dialog\"\n />\n </div>\n </Dialog>\n </ThemeProvider>\n );\n};\n\nPreviewDialog.displayName = 'PreviewDialog';\n\nexport { PreviewDialog };\n","import { Button, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport { useEditScreenshot } from '../../hooks';\n\nconst useStyles = makeStyles(\n () => {\n return {\n alert: {\n padding: '0px 16px',\n },\n icon: {\n alignSelf: 'center',\n },\n message: {\n flex: 1,\n },\n messageWrapper: {\n alignSelf: 'center',\n },\n root: {\n alignSelf: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n },\n };\n },\n { name: 'EditScreenshotAlert' },\n);\n\nconst EditScreenshotAlert: React.FC = () => {\n const { editScreenshotState, clearScreenshotEdit } = useEditScreenshot();\n\n const classes = useStyles();\n\n if (!editScreenshotState) return null;\n\n return (\n <Alert\n classes={{\n icon: classes.icon,\n message: classes.message,\n root: classes.alert,\n }}\n severity=\"warning\"\n >\n <div className={classes.root}>\n <div className={classes.messageWrapper}>\n {`Editing '${editScreenshotState.screenshotData.title}' screenshot (${editScreenshotState.screenshotData.browserType}).`}\n </div>\n\n <div>\n <Button size=\"small\" color=\"inherit\" onClick={clearScreenshotEdit}>\n Cancel\n </Button>\n </div>\n </div>\n </Alert>\n );\n};\n\nEditScreenshotAlert.displayName = 'EditScreenshotAlert';\n\nexport { EditScreenshotAlert };\n","import type { AddonState } from '../../../typings';\n\nexport function isHorizontalPanel(\n addonState: AddonState,\n storybookPanelPosition: string,\n) {\n if (addonState && addonState.placement && addonState.placement !== 'auto') {\n if (addonState.placement === 'bottom') return true;\n return false;\n }\n if (storybookPanelPosition === 'bottom') return false;\n return true;\n}\n","const ROOT_SELECTOR = 'html>body>#root';\nconst STORYBOOK_ROOT_SELECTOR = 'html>body>#storybook-root';\nconst MAX_LEGACY_ROOT_INDEX = 8;\n\nfunction hasQuerySelector(\n documentNode: Document | Partial<Document>,\n): documentNode is Document {\n return typeof documentNode.querySelector === 'function';\n}\n\nfunction getRootSelector(documentNode: Document | Partial<Document>): string | undefined {\n if (!hasQuerySelector(documentNode)) return undefined;\n\n if (documentNode.querySelector(ROOT_SELECTOR)) return ROOT_SELECTOR;\n if (documentNode.querySelector(STORYBOOK_ROOT_SELECTOR)) {\n return STORYBOOK_ROOT_SELECTOR;\n }\n\n return undefined;\n}\n\nexport function normalizeRootSelectorPath(\n selectorPath: string,\n documentNode: Document | Partial<Document>,\n): string {\n if (!hasQuerySelector(documentNode)) return selectorPath;\n\n const rootSelector = getRootSelector(documentNode);\n\n if (!rootSelector) return selectorPath;\n\n const rootElement = documentNode.querySelector(rootSelector);\n if (!rootElement) return selectorPath;\n\n for (let index = 1; index <= MAX_LEGACY_ROOT_INDEX; index += 1) {\n const legacyRootSelector = `html>body>div:nth-child(${index})`;\n\n if (!selectorPath.includes(legacyRootSelector)) continue;\n\n const legacyRootElement = documentNode.querySelector(legacyRootSelector);\n\n if (legacyRootElement && legacyRootElement === rootElement) {\n return selectorPath.replace(legacyRootSelector, rootSelector);\n }\n }\n\n return selectorPath;\n}\n","import { getSelectorPath } from '@dom-utils/selector-path';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useKey, useMouseHovered, useThrottleFn } from 'react-use';\nimport { useSelectorManager } from '../../hooks';\nimport { normalizeRootSelectorPath } from './utils';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n hidden: {\n display: 'none',\n pointerEvents: 'none',\n },\n info: {\n bottom: 0,\n color: theme.palette.primary.main,\n fontSize: 14,\n left: 2,\n pointerEvents: 'none',\n position: 'absolute',\n },\n overlay: {\n backgroundColor: 'transparent',\n bottom: 0,\n cursor: 'crosshair !important',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n zIndex: 100,\n },\n preview: {\n border: `1px solid ${theme.palette.primary.main}`,\n position: 'absolute',\n },\n };\n },\n { name: 'SelectorOverlay' },\n);\n\ninterface Props {\n iframe?: HTMLIFrameElement;\n}\n\nconst defaultRect = {\n height: '100%' as unknown as number,\n left: 0,\n right: 0,\n width: '100%' as unknown as number,\n} as ClientRect;\n\nconst SelectorOverlay: React.FC<Props> = (props) => {\n const { iframe } = props;\n const { stopSelector, selectorManager, setSelectorData } = useSelectorManager();\n\n const [mouseupRef, setMouseupRef] = useState<HTMLElement>();\n\n const classes = useStyles();\n\n const selectorRef = useRef<HTMLDivElement>(null);\n\n const isIdSelector = selectorManager.type === 'id-selector';\n const isSelector = selectorManager.type === 'selector' || isIdSelector;\n\n const [selectorInfo, setSelectorInfo] = useState<{\n rect?: ClientRect;\n selector?: string;\n }>({ rect: defaultRect });\n\n const { elX, elY } = useMouseHovered(selectorRef, {\n bound: true,\n whenHovered: true,\n });\n\n useKey('Escape', stopSelector, undefined, [setSelectorInfo, stopSelector]);\n\n useThrottleFn(\n (x, y) => {\n if (iframe && iframe.contentWindow) {\n const iframeDocument = iframe.contentWindow.document;\n const node = iframeDocument.elementFromPoint(x, y);\n if (node) {\n if (isIdSelector) {\n setSelectorInfo({\n rect: node.getBoundingClientRect(),\n selector: node.id ? `#${node.id}` : '',\n });\n } else {\n const path = normalizeRootSelectorPath(\n getSelectorPath(node, { minify: true }),\n iframeDocument,\n );\n if (node.tagName === 'HTML') {\n setSelectorInfo({\n rect: defaultRect,\n selector: path,\n });\n } else {\n setSelectorInfo({\n rect: node.getBoundingClientRect(),\n selector: path,\n });\n }\n }\n } else {\n setSelectorInfo({ ...selectorInfo, rect: undefined });\n }\n }\n },\n 150,\n [elX, elY],\n );\n\n useEffect(() => {\n if (mouseupRef) {\n const isInBoundary = selectorRef.current\n ? selectorRef.current.contains(mouseupRef)\n : false;\n\n stopSelector();\n setSelectorData({\n path: isInBoundary ? selectorInfo.selector : undefined,\n x: Math.round(elX),\n y: Math.round(elY),\n });\n }\n }, [elX, elY, setSelectorData, mouseupRef, selectorInfo.selector, stopSelector]);\n\n useEffect(() => {\n const mouseup = (e: MouseEvent): void => {\n setMouseupRef(e.target as HTMLElement);\n };\n\n const style = document.createElement('STYLE');\n style.innerHTML = `html, body {\n cursor: crosshair !important;\n `;\n\n const { body } = document;\n\n document.head.appendChild(style);\n\n body.addEventListener('mouseup', mouseup);\n\n return (): void => {\n body.style.cursor = 'inherit';\n body.removeEventListener('mouseup', mouseup);\n document.head.removeChild(style);\n };\n }, []);\n\n return (\n <div ref={selectorRef} className={clsx(classes.overlay)}>\n {selectorManager && selectorInfo && selectorInfo.rect && (\n <>\n <div\n className={clsx(classes.preview, 'selector-preview')}\n style={\n isSelector\n ? {\n height: selectorInfo.rect.height,\n left: selectorInfo.rect.left,\n top: selectorInfo.rect.top,\n width: selectorInfo.rect.width,\n }\n : defaultRect\n }\n />\n\n <div className={classes.info}>\n <div>{`X: ${elX}`}</div>\n <div>{`Y: ${elY}`}</div>\n <div>{selectorInfo.selector}</div>\n </div>\n </>\n )}\n </div>\n );\n};\n\nSelectorOverlay.displayName = 'SelectorOverlay';\n\nexport { SelectorOverlay };\n","import React, { memo, useEffect, useRef, useState } from 'react';\nimport { useSelectorManager } from '../../hooks';\nimport { SelectorOverlay } from './SelectorOverlay';\n\nconst Selector: React.FC = memo((props) => {\n const { children } = props;\n const { selectorManager } = useSelectorManager();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const [iframe, setIframe] = useState<HTMLIFrameElement | undefined>();\n\n useEffect(() => {\n if (rootRef.current) setIframe(rootRef.current.querySelector('iframe') || undefined);\n }, []);\n\n const isActive = selectorManager && selectorManager.start;\n\n return (\n <div ref={rootRef} style={{ height: '100%' }}>\n {children}\n {isActive && <SelectorOverlay iframe={iframe} />}\n </div>\n );\n});\n\nSelector.displayName = 'Selector';\n\nexport { Selector };\n","import { makeStyles } from '@material-ui/core';\nimport { Separator } from '@storybook/components';\nimport { useStorybookState } from '@storybook/manager-api';\nimport clsx from 'clsx';\nimport React, { useCallback } from 'react';\nimport { Pane, SplitPane } from 'react-split-pane';\nimport { ScreenshotListView } from '../../features/screenshot/components/screenshot-preview/index';\nimport { useAddonState } from '../../hooks';\nimport { Clipper } from '../Clipper/Clipper';\nimport { CommonProvider } from '../common';\nimport { EditScreenshotAlert } from './EditScreenshotAlert';\nimport { Selector } from './Selector';\nimport { isHorizontalPanel } from './utils';\n\nconst useStyles = makeStyles(\n () => {\n return {\n horizontal: {\n '& $preview': {\n position: 'relative',\n },\n },\n iframeContainer: {\n height: '100%',\n position: 'relative',\n },\n interactive: {\n pointerEvents: 'auto',\n },\n notInteractive: {\n pointerEvents: 'none',\n },\n preview: {\n display: 'flex',\n flexFlow: 'column',\n height: '100%',\n position: 'relative',\n width: '100%',\n },\n root: {\n height: '100%',\n position: 'relative',\n width: '100%',\n },\n snapshotPanel: {\n '& > span': {\n display: 'none',\n },\n height: '100%',\n width: '100%',\n },\n splitPane: {\n '&:hover': {\n backgroundColor: 'rgb(2, 156, 253)',\n transition: 'background-color 0.3s ease',\n },\n backgroundColor: 'transparent',\n },\n vertical: {\n '& $preview': {\n position: 'relative',\n },\n },\n };\n },\n { name: 'Preview' },\n);\n\nconst DEVIDER_SIZE = 3;\n\nconst Preview: React.FC = (props) => {\n const { children } = props;\n\n const { addonState, setAddonState } = useAddonState();\n\n const state = useStorybookState();\n\n const classes = useStyles();\n\n const isHorizontal = isHorizontalPanel(addonState, state.layout.panelPosition);\n\n const handleResizeChange = useCallback(\n (size) => {\n setAddonState({ ...addonState, previewPanelSize: size });\n },\n [addonState, setAddonState],\n );\n\n const handleClose = useCallback(() => {\n setAddonState({ ...addonState, previewPanelEnabled: false });\n }, [addonState, setAddonState]);\n\n if (!addonState || !addonState.previewPanelEnabled) return <>{children}</>;\n\n const previewPaneIndex = 0;\n\n const previewPane = (\n <Pane\n key=\"preview\"\n minSize={50}\n size={(addonState && addonState.previewPanelSize) || '30%'}\n className={clsx('preview-main', classes.preview)}\n >\n <div className={classes.iframeContainer}>\n <Selector>{children}</Selector>\n </div>\n <Clipper />\n <EditScreenshotAlert />\n </Pane>\n );\n\n const screenshotPane = (\n <Pane key=\"screenshot\" minSize={50} className={clsx(classes.snapshotPanel)}>\n <Separator />\n {addonState && addonState.previewPanelEnabled && (\n <ScreenshotListView\n column={isHorizontal ? undefined : 1}\n onClose={handleClose}\n viewPanel=\"main\"\n />\n )}\n </Pane>\n );\n\n const panes = [previewPane, screenshotPane];\n\n return (\n <CommonProvider>\n <div id=\"preview-container\" className={clsx(classes.root)}>\n <SplitPane\n direction={isHorizontal ? 'vertical' : 'horizontal'}\n onResize={(sizes) => handleResizeChange(sizes[previewPaneIndex])}\n dividerClassName={clsx(classes.splitPane)}\n dividerStyle={{\n ...(isHorizontal ? { height: DEVIDER_SIZE } : { width: DEVIDER_SIZE }),\n }}\n >\n {panes}\n </SplitPane>\n </div>\n </CommonProvider>\n );\n};\n\nPreview.displayName = 'Preview';\n\nexport { Preview };\n","export const ADDON_ID = 'playwright-addon';\nexport const ACTIONS_PANEL_ID = `${ADDON_ID}/action-panel`;\nexport const SCREENSHOT_PANEL_ID = `${ADDON_ID}/screenshot-panel`;\nexport const TOOL_ID = `${ADDON_ID}/tool`;\nexport const TOAST_ID = `${ADDON_ID}/toast`;\nexport const PREVIEW_ID = `${ADDON_ID}/preview-panel`;\nexport const ADDON_STORAGE_KEY = `${ADDON_ID}/storage-key`;\n\nexport const EVENTS = {\n SELECTOR: `${ADDON_ID}/selector`,\n};\n","export const TEMP_ACTION_SET =\n ' (This action loaded from screenshot actions, its temporary and will be removed)';\n","import type { ImageDiffResult } from '../../api/typings';\nimport { makeStyles } from '@material-ui/core';\nimport { ListItem } from '@storybook/components';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport React, { useCallback } from 'react';\nimport { SCREENSHOT_PANEL_ID } from '../../constants';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n notFound: {\n '& > div': {\n '& > b': {\n color: theme.palette.error.main,\n },\n '& > p': {\n margin: 0,\n },\n fontSize: 14,\n },\n border: `1px solid ${theme.palette.error.main}`,\n marginBottom: 2,\n marginTop: 2,\n pointerEvents: 'none',\n userSelect: 'text',\n },\n };\n },\n { name: 'ImageDiff' },\n);\n\nexport interface ImageDiffMenuItemProps {\n imageDiff: ImageDiffResult;\n onClick: () => void;\n}\n\nconst ImageDiffMenuItem: React.FC<ImageDiffMenuItemProps> = (props) => {\n const { imageDiff, onClick } = props;\n\n const api = useStorybookApi();\n\n const classes = useStyles();\n\n const { storyId } = imageDiff;\n\n const data = storyId ? api.getData(storyId) : undefined;\n\n const handleLoadStory = useCallback(() => {\n if (!storyId) return;\n\n onClick();\n api.selectStory(storyId);\n api.setSelectedPanel(SCREENSHOT_PANEL_ID);\n }, [api, onClick, storyId]);\n\n if (!data) {\n return (\n <ListItem className={classes.notFound} title=\"Unable to locate story!\">\n <div>\n <b>Unable to locate story!</b>\n\n <p>\n <b>ID:</b> {props.imageDiff.storyId}\n </p>\n\n <p>\n <b>File:</b> {props.imageDiff.filePath}\n </p>\n </div>\n </ListItem>\n );\n }\n\n return <ListItem onClick={handleLoadStory} title={`${data.parent}--${data.name}`} />;\n};\n\nImageDiffMenuItem.displayName = 'ImageDiffMenuItem';\n\nexport { ImageDiffMenuItem };\n","import type { StoryData } from '../../schema';\nimport type { ScreenshotTestTargetType } from '../../typings';\nimport { Badge, makeStyles } from '@material-ui/core';\nimport { IconButton, ListItem, WithTooltip } from '@storybook/components';\nimport { ContrastIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport {\n removeImageDiffResult,\n setImageDiffResults,\n} from '../../features/screenshot/store/actions';\nimport { useGlobalImageDiffResults, useScreenshotDiffTestByType } from '../../hooks';\nimport { isStoryJsonFile } from '../../utils/is-story-json-file';\nimport { toast } from '../../utils/toast';\nimport { Loader } from '../common';\nimport { ImageDiffMenuItem } from './ImageDiffMenuItem';\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n button: {\n overflow: 'visible !important',\n },\n imageDiffBadge: {\n '& span': {\n fontSize: '.6rem',\n height: 14,\n minWidth: 15,\n padding: '0 4px',\n },\n position: 'absolute',\n right: -2,\n top: 5,\n zIndex: 1,\n },\n successIcon: {\n color: theme.palette.primary.main,\n position: 'absolute',\n right: -10,\n top: -4,\n },\n };\n },\n { name: 'ImageDiff' },\n);\n\ninterface ImageDiffStyleProps {\n classes?: {\n button?: string;\n };\n target: ScreenshotTestTargetType;\n storyData?: StoryData;\n}\n\nconst ImageDiff: React.FC<ImageDiffStyleProps> = (props) => {\n const { target, storyData } = props;\n\n const classes = useStyles({ classes: props.classes });\n\n const { imageDiffResult } = useGlobalImageDiffResults();\n\n const { testStoryScreenShots, imageDiffTestInProgress } = useScreenshotDiffTestByType();\n\n const diffResults =\n target === 'file' && storyData\n ? imageDiffResult.filter((x) =>\n x.filePath ? isStoryJsonFile(x.filePath, storyData.filePath) : false,\n )\n : imageDiffResult;\n\n const failedDiffResults = diffResults.filter((x) => x.pass === false);\n\n const hasFailedDiff = failedDiffResults.length > 0;\n\n const handleImageDiffClick = useCallback(async () => {\n if (hasFailedDiff) return;\n\n const result = await testStoryScreenShots(target);\n\n if (!Array.isArray(result)) return;\n\n const imageDiffResults = result as Array<{ pass?: boolean }>;\n\n if (!imageDiffResults.find((x) => !x.pass)) {\n toast.success('All screenshot tests are passed successfully.', {\n id: 'image-diff:all-passed',\n });\n }\n }, [hasFailedDiff, target, testStoryScreenShots]);\n\n const handleClearAllResults = useCallback(() => {\n if (target === 'file') {\n diffResults.forEach((sc) => {\n if (sc.screenshotId) {\n removeImageDiffResult(sc.screenshotId);\n }\n });\n } else {\n setImageDiffResults([]);\n }\n }, [diffResults, target]);\n\n const title =\n target === 'file' && storyData\n ? `Run diff test for all stories in '${storyData.filePath}' file.`\n : 'Run diff test for all stories';\n\n const iconButton = (\n <IconButton\n title={title}\n className={classes.button}\n onClick={handleImageDiffClick}\n style={{ position: 'relative' }}\n disabled={imageDiffTestInProgress}\n >\n {hasFailedDiff && (\n <Badge\n badgeContent={failedDiffResults.length}\n color=\"secondary\"\n className={classes.imageDiffBadge}\n overlap=\"rectangular\"\n />\n )}\n <ContrastIcon />\n\n <Loader position=\"absolute\" open={imageDiffTestInProgress} progressSize={15} />\n </IconButton>\n );\n\n if (!hasFailedDiff) {\n return iconButton;\n }\n\n return (\n <WithTooltip\n closeOnOutsideClick\n placement=\"bottom\"\n trigger=\"click\"\n tooltip={({ onHide }) => (\n <div\n style={{\n maxHeight: '60vh',\n overflowY: 'auto',\n }}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <ListItem\n title=\"Clear results\"\n onClick={() => {\n handleClearAllResults();\n onHide();\n }}\n ></ListItem>\n\n {failedDiffResults\n .filter(\n (x, index, self) =>\n index === self.findIndex((t) => t.storyId === x.storyId),\n )\n .map((diff) => (\n <ImageDiffMenuItem\n key={`${diff.storyId || ''}${diff.screenshotId || ''}`}\n imageDiff={diff}\n onClick={onHide}\n />\n ))}\n </div>\n )}\n >\n {iconButton}\n </WithTooltip>\n );\n};\n\nImageDiff.displayName = 'ImageDiff';\n\nexport { ImageDiff };\n","import { RESET_STORY_ARGS } from '@storybook/core-events';\nimport { useStorybookApi } from '@storybook/manager-api';\nimport {\n clearCurrentActionSets,\n deleteTempActionSets,\n} from '../features/action-set/store/actions';\nimport { useAddonState } from './use-addon-state';\nimport { useCurrentStoryData } from './use-current-story-data';\n\nexport const PREVIEW_PANEL_SIZE = 100;\n\nexport function useResetSetting() {\n const api = useStorybookApi();\n\n const data = useCurrentStoryData();\n\n const { addonState, setAddonState } = useAddonState();\n\n const reset = () => {\n setAddonState({\n ...addonState,\n placement: 'auto',\n previewPanelEnabled: true,\n previewPanelSize: PREVIEW_PANEL_SIZE,\n });\n api.emit(RESET_STORY_ARGS, { storyId: data?.id });\n clearCurrentActionSets();\n if (data?.id) {\n deleteTempActionSets(data.id);\n }\n };\n\n return reset;\n}\n","import type { ScreenshotTestTargetType } from '../../typings';\nimport { IconButton } from '@storybook/components';\nimport { RefreshIcon } from '@storybook/icons';\nimport React from 'react';\nimport { useScreenshotUpdateState } from '../../features/screenshot/hooks/use-screenshot-update-state';\nimport { Loader } from '../common';\n\nexport interface ScreenshotUpdateIconProps {\n target: ScreenshotTestTargetType;\n}\n\nconst ScreenshotUpdateIcon: React.FC<ScreenshotUpdateIconProps> = ({ target }) => {\n const reqBy = `tool-${target}`;\n\n const { runDiffTest, updateInf } = useScreenshotUpdateState(reqBy, target);\n\n const title =\n target == 'file'\n ? 'Update current story file screenshots'\n : 'Update all screen shots';\n\n return (\n <IconButton\n title={title}\n onClick={runDiffTest}\n style={{ position: 'relative' }}\n disabled={Boolean(updateInf.inProgress)}\n >\n <RefreshIcon />\n <Loader\n position=\"absolute\"\n open={updateInf.reqBy === reqBy && Boolean(updateInf.inProgress)}\n progressSize={15}\n />\n </IconButton>\n );\n};\n\nScreenshotUpdateIcon.displayName = 'ScreenshotUpdateIcon';\n\nexport { ScreenshotUpdateIcon };\n","import React, { useState, useCallback } from 'react';\nimport {\n IconButton,\n ListItem,\n Separator,\n TooltipLinkList,\n WithTooltip,\n} from '@storybook/components';\nimport { makeStyles } from '@material-ui/core';\nimport { CommonProvider } from '../common';\nimport { PreviewDialog } from '../../features/screenshot/components/screenshot-preview/index';\nimport { useAddonState, useCurrentStoryData } from '../../hooks';\nimport { ImageDiff } from './ImageDiff';\nimport { PREVIEW_PANEL_SIZE, useResetSetting } from '../../hooks/use-reset-setting';\nimport { ScreenshotUpdateIcon } from './ScreenshotUpdateIcon';\nimport { FixScreenshotFileDialog } from '../common';\nimport {\n RefreshIcon,\n BottomBarIcon,\n SidebarAltIcon,\n SyncIcon,\n ChevronRightIcon,\n ShareAltIcon,\n EyeCloseIcon,\n WrenchIcon,\n EyeIcon,\n BrowserIcon,\n} from '@storybook/icons';\nimport { DisplayPlacement } from '../../typings';\n\nconst useStyles = makeStyles(() => ({\n asterisk: {\n height: 2,\n left: -6,\n margin: 0,\n position: 'relative',\n top: 1,\n width: 1,\n },\n\n button: {\n position: 'relative',\n },\n progress: {\n left: -3,\n pointerEvents: 'none',\n position: 'absolute',\n top: 7,\n zIndex: 1,\n },\n}));\n\nconst Tool: React.FC = () => {\n const [open, setOpen] = useState(false);\n\n const { setAddonState, addonState } = useAddonState();\n\n const [showFixScreenshotFileDialog, setShowFixScreenshotFileDialog] =\n React.useState<boolean>(false);\n const storyData = useCurrentStoryData();\n\n const resetSetting = useResetSetting();\n\n const isEnablePreviewPanelEnabled = addonState && addonState.previewPanelEnabled;\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleBowserClose = useCallback(() => {\n setAddonState({\n ...addonState,\n previewPanelEnabled: !isEnablePreviewPanelEnabled,\n });\n }, [addonState, isEnablePreviewPanelEnabled, setAddonState]);\n\n const classes = useStyles();\n\n const handlePlacementChange = useCallback(\n (placement: DisplayPlacement) => {\n setAddonState({\n ...addonState,\n placement: placement,\n previewPanelSize: PREVIEW_PANEL_SIZE,\n });\n },\n [setAddonState, addonState],\n );\n const placement = addonState ? addonState.placement : 'auto';\n return (\n <CommonProvider>\n <Separator />\n <WithTooltip\n placement=\"bottom\"\n trigger=\"click\"\n closeOnOutsideClick\n tooltip={({ onHide }) => (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <TooltipLinkList\n links={[\n {\n icon: <WrenchIcon />,\n id: 'fix-screenshot-file-name',\n onClick: () => {\n setShowFixScreenshotFileDialog(true);\n onHide();\n },\n title: 'Fix screenshot file name',\n },\n {\n icon: <ShareAltIcon />,\n id: 'full-screen',\n onClick: () => {\n handleOpen();\n onHide();\n },\n title: 'Full screen view',\n },\n {\n icon: addonState.previewPanelEnabled ? <EyeCloseIcon /> : <EyeIcon />,\n id: 'panel-toggle',\n onClick: () => {\n handleBowserClose();\n },\n title: addonState.previewPanelEnabled\n ? 'Hide Preview Panel'\n : 'Show Preview Panel',\n },\n {\n content: (\n <WithTooltip\n trigger=\"click\"\n placement=\"right-start\"\n closeOnOutsideClick\n tooltip={() => (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <TooltipLinkList\n links={[\n {\n icon: <SidebarAltIcon />,\n id: 'right',\n onClick: () => {\n handlePlacementChange('right');\n },\n title: 'Right',\n },\n {\n icon: <BottomBarIcon />,\n id: 'bottom',\n onClick: () => {\n handlePlacementChange('bottom');\n },\n title: 'Bottom',\n },\n {\n icon: <SyncIcon />,\n id: 'auto',\n onClick: () => {\n handlePlacementChange('auto');\n },\n title: 'Auto',\n },\n ]}\n />\n </div>\n )}\n >\n <ListItem\n title=\"Preview Panel Placement\"\n icon={\n placement === 'right' ? (\n <SidebarAltIcon />\n ) : placement === 'bottom' ? (\n <BottomBarIcon />\n ) : (\n <SyncIcon />\n )\n }\n right={<ChevronRightIcon />}\n />\n </WithTooltip>\n ),\n id: 'position',\n title: 'Position',\n },\n {\n icon: <RefreshIcon />,\n id: 'reset',\n onClick: () => {\n resetSetting();\n onHide();\n },\n title: 'Reset Settings',\n },\n ]}\n />\n </div>\n )}\n >\n <IconButton aria-label=\"Open menu\" title=\"Open menu\">\n <BrowserIcon />\n </IconButton>\n </WithTooltip>\n {storyData && (\n <>\n <Separator />\n <ImageDiff\n classes={{ button: classes.button }}\n storyData={storyData}\n target=\"all\"\n />\n <ScreenshotUpdateIcon target=\"all\" />\n <span className={classes.asterisk}>*</span>\n <Separator />\n <ImageDiff\n classes={{ button: classes.button }}\n storyData={storyData}\n target=\"file\"\n />\n <ScreenshotUpdateIcon target=\"file\" />\n\n <FixScreenshotFileDialog\n onClose={setShowFixScreenshotFileDialog}\n open={showFixScreenshotFileDialog}\n />\n </>\n )}\n\n <Separator />\n <PreviewDialog open={open} onClose={handleClose} />\n </CommonProvider>\n );\n};\n\nTool.displayName = 'Tool';\n\nexport { Tool };\n","import type { ControlProps, ControlTypes } from '../../../typings';\nimport { Form } from '@storybook/components';\nimport React, { useCallback, useState } from 'react';\nimport { CheckBox } from '../../../components';\n\ninterface ControlKnob {\n defaultValue?: unknown;\n name: string;\n options?: string[] | Record<string, string>;\n optionsObj?: { display?: string };\n type: string;\n value: unknown;\n}\n\nfunction convertOptions(options?: string[]) {\n if (!options) return undefined;\n\n return options.reduce(\n (obj, key) => {\n obj[key] = key;\n return obj;\n },\n {} as Record<string, string>,\n );\n}\n\nfunction getDefault(type: ControlTypes, defVal: unknown): unknown {\n if (defVal !== undefined) return defVal;\n switch (type) {\n case 'boolean':\n return false;\n case 'number':\n return '';\n case 'options':\n return [];\n default:\n return '';\n }\n}\n\n// Simple control component that replaces @storybook/addon-knobs controls\nconst SimpleControl: React.FC<{\n onChange: (val: unknown) => void;\n knob: ControlKnob;\n}> = ({ onChange, knob }) => {\n const handleBooleanChange = (checked: boolean) => {\n onChange(checked);\n };\n\n const handleInputChange: React.FormEventHandler<HTMLInputElement> = (e) => {\n const value =\n knob.type === 'boolean'\n ? e.currentTarget.checked\n : knob.type === 'number'\n ? Number(e.currentTarget.value)\n : e.currentTarget.value;\n onChange(value);\n };\n\n const handleSelectChange: React.FormEventHandler<HTMLSelectElement> = (e) => {\n onChange(e.currentTarget.value);\n };\n\n const handleTextareaChange: React.FormEventHandler<HTMLTextAreaElement> = (e) => {\n const value =\n knob.type === 'number' ? Number(e.currentTarget.value) : e.currentTarget.value;\n onChange(value);\n };\n\n if (knob.type === 'boolean') {\n return React.createElement(CheckBox, {\n checked: Boolean(knob.value),\n onClick: () => undefined,\n onChange: handleBooleanChange,\n });\n }\n\n if (knob.type === 'number') {\n return React.createElement(Form.Input, {\n onChange: handleInputChange,\n type: 'number',\n value: knob.value as number,\n });\n }\n\n if (knob.type === 'select' && Array.isArray(knob.options)) {\n return React.createElement(\n Form.Select,\n { onChange: handleSelectChange, value: knob.value as string },\n knob.options.map((opt) =>\n React.createElement('option', { key: opt, value: opt }, opt),\n ),\n );\n }\n\n if (knob.type === 'options' && knob.options && typeof knob.options === 'object') {\n const opts = knob.options as Record<string, string>;\n return React.createElement(\n Form.Select,\n { onChange: handleSelectChange, value: knob.value as string },\n Object.entries(opts).map(([key, val]) =>\n React.createElement('option', { key, value: val }, key),\n ),\n );\n }\n\n // Default: text/textarea input\n return React.createElement(Form.Textarea, {\n onChange: handleTextareaChange,\n value: (knob.value as string) || '',\n });\n};\n\n// Factory that returns the control component for compatibility with previous API\nfunction getControl(_type: string) {\n void _type;\n return SimpleControl;\n}\n\nexport function useControl(props: ControlProps) {\n const { label, type, onChange, value, options, display } = props;\n\n const [knob, setKnob] = useState<ControlKnob>({\n defaultValue: value,\n name: label,\n options: type === 'select' ? options : options ? convertOptions(options) : undefined,\n optionsObj: { display },\n type,\n value: getDefault(type, value),\n });\n\n const Control = getControl(type);\n\n const handleChange = useCallback(\n (value): void => {\n setKnob({ ...knob, value });\n onChange(value);\n },\n [knob, onChange],\n );\n\n return { Control, handleChange, knob, setKnob };\n}\n","import React from 'react';\n\nexport function useAnchorEl() {\n const anchorElRef = React.useRef(null);\n const [anchorEl, _setAnchorEl] = React.useState();\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const setAnchorEl = React.useCallback((e?: any) => {\n _setAnchorEl(anchorElRef.current || e.currentTarget);\n }, []);\n\n const clearAnchorEl = React.useCallback(() => {\n _setAnchorEl(undefined);\n }, []);\n\n return { anchorEl, anchorElRef, clearAnchorEl, setAnchorEl };\n}\n","import { useCallback, useState } from 'react';\nimport { useKeyPressFn } from './use-key-press-fn';\n\nexport function useKeyPress(targetKey, disable = false) {\n // State for keeping track of whether key is pressed\n const [keyPressed, setKeyPressed] = useState(false);\n\n const downHandler = useCallback(\n ({ key }) => {\n if (keyPressed) return;\n if (key === targetKey) {\n setKeyPressed(true);\n }\n },\n [keyPressed, targetKey],\n );\n\n const upHandler = useCallback(\n ({ key }) => {\n if (key === targetKey) {\n setKeyPressed(false);\n }\n },\n [targetKey],\n );\n\n useKeyPressFn(downHandler, upHandler, disable);\n\n return keyPressed;\n}\n","import { useEffect, useRef } from 'react';\nimport { getPreviewIframe } from '../utils';\n\nexport function usePreviewIframe() {\n const iframe = useRef<HTMLIFrameElement | undefined>(undefined);\n\n if (!iframe.current) {\n iframe.current = getPreviewIframe() || undefined;\n }\n\n useEffect(\n () => () => {\n iframe.current = undefined;\n },\n [],\n );\n\n return iframe.current;\n}\n","import type { SelectorState } from '../typings/selector';\nimport { useCallback } from 'react';\nimport { setSelectorManager, useSelectorManagerValue } from '../store';\n\nexport type { SelectorManageSharedProps, SelectorManger, SelectorType } from '../store';\n\nexport function useSelectorManager() {\n const selectorManager = useSelectorManagerValue();\n\n const startSelector = useCallback(\n (options: {\n type?: string;\n onData?: (data: SelectorState) => void;\n onStop?: () => void;\n }) => {\n const { onData, type, onStop } = options;\n\n setSelectorManager({\n onData,\n onStop,\n start: true,\n type: type as 'selector' | 'position' | 'id-selector',\n });\n },\n [],\n );\n\n const stopSelector = useCallback(() => {\n if (selectorManager.onStop) {\n selectorManager.onStop();\n }\n setSelectorManager({\n onData: undefined,\n onStop: undefined,\n start: false,\n });\n }, [selectorManager]);\n\n const setSelectorData = useCallback(\n (data: SelectorState) => {\n if (selectorManager.onData) {\n selectorManager.onData(data);\n }\n },\n [selectorManager],\n );\n\n return {\n selectorManager,\n setSelectorData,\n startSelector,\n stopSelector,\n };\n}\n","import type { DiffDirection } from '../../api/typings/image-diff';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { MapInteraction } from 'react-map-interaction';\nimport { useKeyPress } from '../../hooks';\n\nexport interface ImagePreviewProps {\n imgSrcString?: string | null;\n diffDirection?: DiffDirection;\n}\n\nconst ImagePreview: React.FC<ImagePreviewProps> = (props) => {\n const { imgSrcString, diffDirection } = props;\n const isPressed = useKeyPress('Control');\n const prevImage = useRef<string | null>();\n\n const [reset, setReset] = useState(false);\n\n useEffect(() => {\n if (prevImage.current !== imgSrcString) {\n setReset(true);\n }\n prevImage.current = imgSrcString;\n }, [imgSrcString]);\n\n React.useEffect(() => {\n if (reset) setReset(false);\n }, [reset]);\n\n if (!imgSrcString || reset) return null;\n\n return (\n <MapInteraction defaultScale={1} disableZoom={!isPressed}>\n {({ translation, scale }) => {\n // Translate first and then scale. Otherwise, the scale would affect the translation.\n const transform = `translate(${translation.x}px, ${translation.y}px) scale(${scale})`;\n return (\n <div\n style={{\n MozUserSelect: 'none',\n WebkitUserSelect: 'none',\n cursor: 'all-scroll', // for absolutely positioned children\n height: '100%',\n msTouchAction: 'none', // Not supported in Safari :(\n msUserSelect: 'none',\n position: 'relative',\n touchAction: 'none',\n width: '100%',\n }}\n >\n <div\n style={{\n display: 'inline-block', // size to content\n transform,\n transformOrigin: '0 0 ',\n // width: '100%',\n }}\n >\n <img\n style={{\n width: diffDirection === 'horizontal' ? '100%' : undefined,\n }}\n src={\n imgSrcString.startsWith('data:image')\n ? imgSrcString\n : `data:image/gif;base64,${imgSrcString}`\n }\n />\n </div>\n </div>\n );\n }}\n </MapInteraction>\n );\n};\n\nImagePreview.displayName = 'ImagePreview';\n\nexport { ImagePreview };\n","import type { ImageDiffResult } from '../../api/typings';\nimport { Divider, makeStyles, Tab, Tabs } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React, { useCallback } from 'react';\nimport { getImageDiffMessages } from '../../utils';\nimport { ImagePreview } from './ImagePreview';\n\nconst useStyles = makeStyles(\n () => {\n return {\n preview: {\n flexGrow: 1,\n margin: 5,\n overflow: 'auto',\n },\n root: {\n display: 'flex',\n flexFlow: 'column',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n },\n };\n },\n { name: 'ImageDiffPreview' },\n);\nexport { useStyles as useImageDiffPreviewStyles };\n\nexport interface ImageDiffPreviewProps {\n imageDiffResult: ImageDiffResult;\n activeTab?: 'newScreenshot' | 'imageDiff';\n}\n\nconst ImageDiffPreview: React.FC<ImageDiffPreviewProps> = (props) => {\n const { imageDiffResult, activeTab } = props;\n\n const shouldShowDiff = activeTab === 'imageDiff' || imageDiffResult.error !== undefined;\n\n const [value, setValue] = React.useState(shouldShowDiff ? 1 : 0);\n\n const [showDiff, setShowDiff] = React.useState(shouldShowDiff);\n\n const classes = useStyles();\n\n const currentImage =\n imageDiffResult.pass || !showDiff\n ? imageDiffResult.newScreenshot\n : imageDiffResult.imgSrcString;\n\n const safeCurrentImage = currentImage || '';\n\n const error = getImageDiffMessages(imageDiffResult);\n\n const toggleScreenshotDiff = useCallback(\n (_event: React.ChangeEvent<unknown>, newValue: number) => {\n setValue(newValue);\n setShowDiff(!showDiff);\n },\n [showDiff],\n );\n\n return (\n <div className={classes.root}>\n {!imageDiffResult.pass && (\n <>\n <Tabs\n textColor=\"primary\"\n value={value}\n variant=\"fullWidth\"\n onChange={toggleScreenshotDiff}\n indicatorColor=\"primary\"\n >\n <Tab label=\"New screen shot\" />\n <Tab label=\"Screenshot image diff\" />\n </Tabs>\n <Divider />\n </>\n )}\n {error && value === 1 && (\n <Alert severity=\"error\">\n {error.split('\\n').map((x, i) => {\n return <div key={i}>{x}</div>;\n })}\n </Alert>\n )}\n <div className={classes.preview}>\n <ImagePreview\n imgSrcString={safeCurrentImage}\n diffDirection={imageDiffResult.diffDirection}\n />\n </div>\n </div>\n );\n};\n\nImageDiffPreview.displayName = 'ImageDiffPreview';\n\nexport { ImageDiffPreview };\n","import type { DialogProps } from './Dialog';\nimport type { ImageDiffPreviewProps } from './ImageDiffPreview';\nimport React from 'react';\nimport { Dialog } from './Dialog';\nimport { ImageDiffPreview } from './ImageDiffPreview';\n\nexport interface ImageDiffPreviewDialogProps extends DialogProps, ImageDiffPreviewProps {}\n\nconst ImageDiffPreviewDialog: React.FC<ImageDiffPreviewDialogProps> = (props) => {\n const { imageDiffResult, activeTab, ...rest } = props;\n\n return (\n <Dialog width=\"100%\" height=\"100%\" {...rest}>\n <ImageDiffPreview imageDiffResult={imageDiffResult} activeTab={activeTab} />\n </Dialog>\n );\n};\n\nImageDiffPreviewDialog.displayName = 'ImageDiffPreviewDialog';\n\nexport { ImageDiffPreviewDialog };\n","import type { ImageDiffResult } from '../../api/typings';\nimport type { BrowserTypes } from '../../typings';\nimport type { ImageDiffPreviewDialogProps } from './ImageDiffPreviewDialog';\nimport React from 'react';\nimport { getImageDiffMessages } from '../../utils';\nimport { toast } from '../../utils/toast';\nimport { ImageDiffPreviewDialog } from './ImageDiffPreviewDialog';\n\nexport interface ImageDiffMessageProps extends Partial<ImageDiffPreviewDialogProps> {\n result?: ImageDiffResult;\n onClose: () => void;\n title?: string;\n browserType?: BrowserTypes;\n}\n\nconst ImageDiffMessage: React.FC<ImageDiffMessageProps> = (props) => {\n const { title, result, onClose, browserType, ...rest } = props;\n\n const titleMsg = title || (result && result.oldScreenShotTitle);\n\n React.useEffect(() => {\n if (!result) return;\n\n if (result.added) {\n toast.success(\n // prettier-ignore\n `Screenshot ${ `${browserType ? ` for '${browserType}'` : ''}` } saved successfully.`,\n {\n duration: 5000,\n onAutoClose: onClose,\n onDismiss: onClose,\n },\n );\n }\n }, [browserType, onClose, result]);\n\n React.useEffect(() => {\n if (!result) return;\n\n if (result.pass) {\n toast.success(\n // prettier-ignore\n `Testing existing screenshot were successful, no change has been detected.${titleMsg ? `\\nTitle: ${titleMsg}` : ''}${browserType ? `\\nBrowser: ${ browserType}` : '' }`,\n {\n duration: 5000,\n onAutoClose: onClose,\n onDismiss: onClose,\n },\n );\n return;\n }\n\n if (result.diffSize || result.error) {\n toast.error(getImageDiffMessages(result), {\n duration: Infinity,\n onDismiss: onClose,\n });\n }\n }, [browserType, onClose, result, titleMsg]);\n\n if (!result || result.pass || result.added || result.diffSize || result.error)\n return null;\n\n return (\n <ImageDiffPreviewDialog\n imageDiffResult={result}\n onClose={onClose}\n open={true}\n activeTab=\"imageDiff\"\n title={titleMsg}\n {...rest}\n />\n );\n};\n\nImageDiffMessage.displayName = 'ImageDiffMessage';\n\nconst MemoizedImageDiffMessage = React.memo(ImageDiffMessage);\nexport { ImageDiffMessage, MemoizedImageDiffMessage };\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport NiceModal from '@ebay/nice-modal-react';\nimport React from 'react';\nimport { StateInspector } from 'reinspect';\nimport { createTrpcHttpClient, trpcClient } from '../../api/trpc/client';\nimport { ThemeProvider } from '../common';\n\nconst trpcHttpClient = createTrpcHttpClient();\nconst queryClient = new QueryClient({\n defaultOptions: {\n mutations: { retry: false },\n queries: { retry: false },\n },\n});\n\nconst CommonProvider: React.FC = (props) => {\n const { children } = props;\n\n return (\n <trpcClient.Provider client={trpcHttpClient} queryClient={queryClient}>\n <QueryClientProvider client={queryClient}>\n <ThemeProvider>\n <NiceModal.Provider>\n <StateInspector>{children}</StateInspector>\n </NiceModal.Provider>\n </ThemeProvider>\n </QueryClientProvider>\n </trpcClient.Provider>\n );\n};\n\nCommonProvider.displayName = 'CommonProvider';\n\nexport { CommonProvider };\n","import { makeStyles, Tooltip } from '@material-ui/core';\nimport CheckSelected from '@material-ui/icons/CheckCircleOutlineRounded';\nimport HelpOutlineSharp from '@material-ui/icons/HelpOutlineSharp';\nimport CheckNotSelected from '@material-ui/icons/RadioButtonUncheckedRounded';\nimport clsx from 'clsx';\nimport React, { memo } from 'react';\nimport { capitalize } from '../../../utils';\nimport { resolveMuiIcon } from '../../../utils/resolve-mui-icon';\n\nconst CheckSelectedIcon = resolveMuiIcon(CheckSelected);\nconst HelpOutlineSharpIcon = resolveMuiIcon(HelpOutlineSharp);\nconst CheckNotSelectedIcon = resolveMuiIcon(CheckNotSelected);\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n active: {\n color: theme.palette.primary.main,\n },\n controlWrap: {\n flex: 2,\n },\n iconWrapper: {\n marginBottom: -2,\n marginRight: -8,\n paddingLeft: 4,\n width: 14,\n },\n icons: {\n '&:hover': {\n opacity: 0.8,\n },\n cursor: 'pointer',\n fontSize: 14,\n opacity: 0.4,\n },\n labelWrap: {\n alignItems: 'center',\n display: 'flex',\n flex: 1,\n justifyContent: 'space-between',\n },\n root: {\n '& fieldset > div': {\n '&>div': {\n margin: 0,\n marginRight: 10,\n },\n },\n '& input[type=\"number\"], select,textarea': {\n transition: 'none',\n width: '100%',\n },\n '& label': {\n border: 'none !important',\n margin: '0 !important',\n },\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: 4,\n },\n };\n },\n { name: 'FormControl' },\n);\n\nexport interface ControlFormProps {\n label: string;\n description?: string;\n appendValueToTitle: boolean;\n onAppendValueToTitle?: () => void;\n isRequired: boolean;\n active?: boolean;\n}\n\nconst FormControl: React.FC<ControlFormProps> = memo((props) => {\n const {\n label,\n description,\n appendValueToTitle,\n onAppendValueToTitle,\n children,\n isRequired,\n active,\n } = props;\n\n const classes = useStyles();\n\n return (\n <div className={classes.root}>\n <div className={clsx(classes.labelWrap, { [classes.active]: active })}>\n <span className=\"form-label\">\n {capitalize(label)}\n {isRequired && <span style={{ marginLeft: 2 }}>*</span>}\n </span>\n </div>\n <div className={classes.controlWrap}>{children}</div>\n <div className={classes.iconWrapper}>\n <div>\n {description && (\n <Tooltip placement=\"top\" interactive enterDelay={800} title={description}>\n <HelpOutlineSharpIcon className={classes.icons} />\n </Tooltip>\n )}\n </div>\n {onAppendValueToTitle && (\n <div onClick={onAppendValueToTitle}>\n <Tooltip placement=\"top\" enterDelay={800} title=\"Append value to title\">\n {appendValueToTitle ? (\n <CheckSelectedIcon style={{ opacity: 1 }} className={classes.icons} />\n ) : (\n <CheckNotSelectedIcon className={classes.icons} />\n )}\n </Tooltip>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nFormControl.displayName = 'FormControl';\n\nexport { FormControl };\n","import type { ComponentType } from 'react';\nimport type { ControlProps } from '../../../typings';\nimport React, { memo } from 'react';\nimport { useControl } from '../../../hooks';\nimport { FormControl } from './FormControl';\n\nconst Control: React.FC<ControlProps & Partial<ComponentType>> = memo((props) => {\n const {\n label,\n description,\n appendValueToTitle,\n onAppendValueToTitle,\n isRequired,\n value,\n defaultValue,\n } = props;\n\n const { Control: StorybookControl, handleChange, knob } = useControl(props);\n\n return (\n <FormControl\n label={label}\n appendValueToTitle={appendValueToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n description={description}\n isRequired={isRequired}\n active={\n defaultValue !== value && value !== undefined && value !== '' && value !== false\n }\n >\n <StorybookControl onChange={handleChange} knob={knob} />\n </FormControl>\n );\n});\n\nControl.displayName = 'Control';\n\nexport { Control };\n","import type { SelectorType } from '../../../hooks';\nimport type { ControlProps } from '../../../typings';\nimport { IconButton, makeStyles } from '@material-ui/core';\nimport TargetIcon from '@material-ui/icons/FilterCenterFocusSharp';\nimport PointerIcon from '@material-ui/icons/FilterTiltShift';\nimport clsx from 'clsx';\nimport React, { memo, useCallback, useEffect, useState } from 'react';\nimport { useControl, useSelectorManager } from '../../../hooks';\nimport { isValidSelector } from '../../../utils';\nimport { resolveMuiIcon } from '../../../utils/resolve-mui-icon';\nimport { FormControl } from './FormControl';\n\nconst TargetIconComponent = resolveMuiIcon(TargetIcon);\nconst PointerIconComponent = resolveMuiIcon(PointerIcon);\n\nconst useStyles = makeStyles(\n (theme) => {\n return {\n button: {\n color: theme.palette.text.primary,\n },\n buttonWrap: {\n alignItems: 'center',\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n height: 66,\n marginBottom: -35,\n zIndex: 1,\n },\n error: {\n '& textarea': {\n border: '1px solid red',\n },\n },\n errorMessage: {\n color: 'red',\n },\n root: {\n alignItems: 'center',\n display: 'flex',\n },\n selectorButtonWrap: {\n alignItems: 'center',\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n },\n selectorHashIcon: {\n '&:before': {\n backgroundColor: theme.palette.background.paper,\n content: '\"#\"',\n fontSize: '12px',\n left: '6px',\n position: 'absolute',\n top: '3px',\n },\n height: 20,\n position: 'relative',\n },\n selectorIcon: {\n fontSize: '1.25rem',\n },\n };\n },\n { name: 'SelectorControl' },\n);\n\nexport interface SelectorControlProps extends ControlProps {\n selectorType: 'selector' | 'position';\n isFollowedByPositionProp: boolean;\n fullObjectPath: string;\n onSelectorChange: (objPath: string, val: unknown) => void;\n}\n\nconst SelectorControl: React.FC<SelectorControlProps> = memo((props) => {\n const {\n selectorType,\n label,\n appendValueToTitle,\n onAppendValueToTitle,\n description,\n value,\n isFollowedByPositionProp,\n fullObjectPath,\n isRequired,\n onSelectorChange,\n } = props;\n\n const [validate, setValidate] = useState(false);\n\n const classes = useStyles();\n\n const [invalidSelector, setInvalidSelector] = useState(false);\n\n const { startSelector } = useSelectorManager();\n\n const { Control, knob, handleChange, setKnob } = useControl(props);\n\n const startSelectorClick = useCallback(\n (type: SelectorType) => {\n setValidate(false);\n startSelector({\n onData: (data) => {\n if (type === 'selector' || type === 'id-selector') {\n onSelectorChange(fullObjectPath, data.path);\n } else if (isFollowedByPositionProp) {\n const objPath =\n fullObjectPath.length === 1 ? '' : `${fullObjectPath.slice(0, -2)}.`;\n onSelectorChange(`${objPath}x`, Math.round(data.x ?? 0));\n onSelectorChange(`${objPath}y`, Math.round(data.y ?? 0));\n } else {\n const key = label === 'top' ? 'y' : label === 'left' ? 'x' : label;\n handleChange(data[key]);\n }\n },\n type,\n });\n },\n [\n startSelector,\n isFollowedByPositionProp,\n onSelectorChange,\n fullObjectPath,\n label,\n handleChange,\n ],\n );\n\n const handleSelectorClick = React.useCallback(() => {\n startSelectorClick(selectorType);\n }, [selectorType, startSelectorClick]);\n\n const handleIdSelectorClick = React.useCallback(() => {\n startSelectorClick('id-selector');\n }, [startSelectorClick]);\n\n useEffect(() => {\n if (validate && selectorType !== 'selector') {\n setInvalidSelector(false);\n return;\n }\n\n setInvalidSelector(!isValidSelector(value as string));\n }, [selectorType, validate, value]);\n\n useEffect(() => {\n if (knob.defaultValue !== value) {\n handleChange(value);\n setKnob({ ...knob, defaultValue: value, value });\n }\n }, [handleChange, knob, setKnob, value]);\n\n const handleControlChange = useCallback(\n (value: unknown) => {\n setValidate(true);\n handleChange(value);\n },\n [handleChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLDivElement>) => setValidate(e.target.tagName === 'TEXTAREA'),\n [],\n );\n\n const isSelector = selectorType === 'selector';\n\n return (\n <FormControl\n label={label}\n appendValueToTitle={appendValueToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n description={description}\n isRequired={isRequired}\n >\n <div\n className={clsx('selector-root', classes.root, {\n [classes.error]: invalidSelector && validate,\n })}\n onBlur={handleBlur}\n >\n <Control onChange={handleControlChange} knob={knob} />\n <div\n className={clsx({\n [classes.buttonWrap]: isFollowedByPositionProp,\n [classes.selectorButtonWrap]: isSelector,\n })}\n >\n <IconButton\n size=\"small\"\n onClick={handleSelectorClick}\n className={classes.button}\n >\n {isSelector ? (\n <TargetIconComponent className={classes.selectorIcon} />\n ) : (\n <PointerIconComponent />\n )}\n </IconButton>\n\n {isSelector && (\n <IconButton\n size=\"small\"\n onClick={handleIdSelectorClick}\n className={classes.button}\n >\n <div className={classes.selectorHashIcon}>\n <TargetIconComponent className={classes.selectorIcon} />\n </div>\n </IconButton>\n )}\n </div>\n </div>\n {invalidSelector && validate && (\n <div className={clsx('selector-error', classes.errorMessage)}>\n Invalid Selector!\n </div>\n )}\n </FormControl>\n );\n});\n\nSelectorControl.displayName = 'SelectorControl';\n\nexport { SelectorControl };\n","import type { ActionSchema } from '../../../typings';\nimport { capitalize } from '@material-ui/core';\nimport startCase from 'lodash/startCase';\nimport React, { useCallback } from 'react';\nimport { Control } from './Control';\nimport { SchemaRenderer } from './SchemaRenderer';\nimport { SelectorControl } from './SelectorControl';\n\nexport interface SchemaPropProps {\n name: string;\n parents?: string[];\n schema: ActionSchema;\n nextPropName: string;\n isRequired?: boolean;\n onChange: (objPath: string, val: unknown) => void;\n getValue: (optionObjectPath: string, schema: ActionSchema) => unknown;\n shouldAppendToTitle?: (optionObjectPath: string) => boolean;\n onAppendValueToTitle?: (optionObjectPath: string) => void;\n onSelectorChange?: (objPath: string, val: unknown) => void;\n}\n\nconst SchemaProp: React.FC<SchemaPropProps> = ({\n name,\n schema,\n parents = [],\n nextPropName,\n isRequired,\n onChange,\n getValue,\n shouldAppendToTitle,\n onAppendValueToTitle,\n onSelectorChange,\n}) => {\n const optionObjectPath = [...parents, name].join('.');\n\n const handleChange = useCallback(\n (val) => {\n onChange(optionObjectPath, val);\n },\n [onChange, optionObjectPath],\n );\n\n const value = schema.type !== 'object' && getValue(optionObjectPath, schema);\n\n const appendToTile = shouldAppendToTitle && shouldAppendToTitle(optionObjectPath);\n\n const shouldAppend = Boolean(appendToTile);\n\n const handleOnAppendValueToTitle = useCallback(() => {\n if (onAppendValueToTitle) {\n onAppendValueToTitle(optionObjectPath);\n }\n }, [onAppendValueToTitle, optionObjectPath]);\n\n if (\n onSelectorChange &&\n (name === 'selector' ||\n (schema.type === 'number' && ['x', 'y', 'top', 'left'].includes(name)))\n ) {\n return (\n <SelectorControl\n label={name}\n type={name === 'selector' ? 'text' : 'number'}\n onChange={handleChange}\n selectorType={name === 'selector' ? 'selector' : 'position'}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isFollowedByPositionProp={nextPropName === 'x' || nextPropName === 'y'}\n fullObjectPath={optionObjectPath}\n isRequired={Boolean(isRequired)}\n onSelectorChange={onSelectorChange}\n defaultValue={schema.default}\n />\n );\n }\n\n if (schema.enum) {\n return (\n <Control\n label={name}\n type=\"select\"\n onChange={handleChange}\n options={schema.enum as string[]}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n }\n\n switch (schema.type as typeof schema.type | 'any') {\n case 'string':\n case 'any':\n return (\n <Control\n label={name}\n type=\"text\"\n onChange={handleChange}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n case 'number':\n case 'integer':\n return (\n <Control\n label={name}\n type=\"number\"\n onChange={handleChange}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n case 'boolean':\n return (\n <Control\n label={name}\n type=\"boolean\"\n onChange={handleChange}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n case 'array': {\n if (!schema.items) return null;\n const items = (schema.items as ActionSchema).enum;\n if (!items) return null;\n return (\n <Control\n label={name}\n type=\"options\"\n onChange={handleChange}\n display=\"inline-check\"\n options={items as string[]}\n value={value}\n description={schema.description}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n appendValueToTitle={shouldAppend}\n isRequired={Boolean(isRequired)}\n defaultValue={schema.default}\n />\n );\n }\n case 'object':\n return (\n <div\n style={{\n marginBottom: 6,\n }}\n >\n <p style={{ margin: '6px 0', marginTop: 14 }}>\n {capitalize(startCase(name).toLowerCase())}:\n </p>\n <div style={{ paddingLeft: 12 }}>\n <SchemaRenderer\n schemaProps={schema.properties || {}}\n parents={[...parents, name]}\n required={schema.required}\n onChange={onChange}\n getValue={getValue}\n shouldAppendToTitle={shouldAppendToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n onSelectorChange={onSelectorChange}\n />\n </div>\n </div>\n );\n default:\n return null;\n }\n};\n\nSchemaProp.displayName = 'SchemaProp';\n\nconst MemoizedSchemaProp = React.memo(SchemaProp);\nexport { MemoizedSchemaProp, SchemaProp };\n","import type { ActionSchema } from '../../../typings';\nimport React from 'react';\nimport { MemoizedSchemaProp } from './SchemaProp';\n\nexport interface SchemaRendererProps {\n schemaProps: ActionSchema;\n parents?: string[];\n required?: string[];\n onChange: (objPath: string, val: unknown) => void;\n getValue: (optionObjectPath: string, schema: ActionSchema) => unknown;\n shouldAppendToTitle?: (optionObjectPath: string) => boolean;\n onAppendValueToTitle?: (optionObjectPath: string) => void;\n onSelectorChange?: (objPath: string, val: unknown) => void;\n}\n\nconst SchemaRenderer: React.FC<SchemaRendererProps> = ({\n schemaProps,\n required,\n parents = [],\n onChange,\n getValue,\n shouldAppendToTitle,\n onAppendValueToTitle,\n onSelectorChange,\n}) => {\n return (\n <>\n {Object.keys(schemaProps).map((name, i, array) => {\n const param = schemaProps[name];\n return (\n <MemoizedSchemaProp\n key={name}\n name={name}\n schema={param}\n parents={parents}\n nextPropName={array[i + 1]}\n isRequired={required && required.includes(name)}\n onChange={onChange}\n getValue={getValue}\n shouldAppendToTitle={shouldAppendToTitle}\n onAppendValueToTitle={onAppendValueToTitle}\n onSelectorChange={onSelectorChange}\n />\n );\n })}\n </>\n );\n};\n\nSchemaRenderer.displayName = 'SchemaRenderer';\n\nconst MemoizedSchemaRenderer = React.memo(SchemaRenderer);\nexport { MemoizedSchemaRenderer, SchemaRenderer };\n","import type { Definition } from 'ts-to-json';\nimport type { Config } from 'ts-to-json/dist/src/Config';\nimport { Button, Divider, makeStyles } from '@material-ui/core';\nimport * as immutableObject from 'object-path-immutable';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { trpcClient } from '../../api/trpc/client';\nimport { MemoizedSchemaRenderer } from '../../features/schema/components/index';\nimport { Loader } from './Loader';\n\nconst useStyles = makeStyles(\n () => {\n return {\n footer: {\n display: 'flex',\n justifyContent: 'space-between',\n paddingTop: 2,\n },\n main: {\n fontSize: 14,\n height: 400,\n overflowX: 'hidden',\n overflowY: 'auto',\n padding: 5,\n paddingRight: 20,\n },\n };\n },\n { name: 'SchemaFormLoader' },\n);\n\nexport interface SchemaFormProps extends Partial<Config> {\n schemaName: string;\n defaultData?: unknown;\n onSave: (data: unknown) => void;\n active?: boolean;\n FooterComponent?: React.ReactNode;\n}\n\nconst SchemaFormLoader: React.FC<SchemaFormProps> = ({\n defaultData,\n onSave,\n FooterComponent,\n schemaName,\n}) => {\n const classes = useStyles();\n\n const [tempOptions, setTempOptions] = useState(defaultData);\n\n const [reset, setReset] = useState(false);\n\n const requestedSchemaName = useRef<string>();\n\n const { mutate, data: schema } = trpcClient.schema.getSchema.useMutation();\n\n useEffect(() => {\n if (requestedSchemaName.current === schemaName) {\n return;\n }\n\n requestedSchemaName.current = schemaName;\n mutate({ schemaName });\n }, [mutate, schemaName]);\n\n const handleSave = useCallback(() => {\n onSave(tempOptions);\n }, [onSave, tempOptions]);\n\n const handleClear = useCallback(() => {\n onSave({});\n setTempOptions({});\n setReset(true);\n }, [onSave]);\n\n const handleChange = useCallback(\n (path, val) => {\n const options = immutableObject.set(tempOptions, path, val);\n setTempOptions(options);\n },\n [tempOptions],\n );\n\n const getValue = (path) => {\n const val = immutableObject.get(tempOptions, path);\n return val;\n };\n\n useEffect(() => {\n if (reset) setReset(false);\n }, [reset]);\n\n return (\n <>\n <div className={classes.main}>\n <Loader open={schema === undefined} position=\"relative\" />\n {schema && !reset && (\n <MemoizedSchemaRenderer\n schemaProps={schema as unknown as Definition}\n onChange={handleChange}\n getValue={getValue}\n />\n )}\n </div>\n <Divider />\n <div className={classes.footer}>\n <div>{FooterComponent}</div>\n <div>\n <Button onClick={handleClear}>Clear</Button>\n <Button onClick={handleSave}>Save</Button>\n </div>\n </div>\n </>\n );\n};\n\nSchemaFormLoader.displayName = 'SchemaFormLoader';\n\nconst MemoizedSchemaFormLoader = React.memo(SchemaFormLoader);\nexport { MemoizedSchemaFormLoader, SchemaFormLoader };\n","import { Button, DialogActions, TextField } from '@material-ui/core';\nimport React from 'react';\nimport { useFixScreenshotFileName } from '../../hooks';\nimport { Dialog, Loader } from '../common';\n\ninterface Props {\n fixFunction?: boolean;\n onClose: (open: boolean) => void;\n open: boolean;\n}\n\nconst FixScreenshotFileDialog: React.FC<Props> = ({ fixFunction, onClose, open }) => {\n const {\n fixFileNames,\n clearError,\n fixFileNamesError,\n fixFileNamesInProgress,\n handleReload,\n reload,\n functionName,\n handleFunctionNameInput,\n } = useFixScreenshotFileName({ fixFunction });\n\n const handleClose = React.useCallback(() => {\n clearError();\n onClose(false);\n }, [onClose, clearError]);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={handleClose}\n title=\"Fix Screenshot File Name\"\n width=\"400px\"\n >\n <Loader open={fixFileNamesInProgress} />\n\n <div style={{ padding: 20, width: '100%' }}>\n {reload && !fixFileNamesError ? (\n <p>Fix applied, reload the page</p>\n ) : (\n <>\n <p>\n Screenshot file name consist of the story title and story function name,\n when the title or function name changes, plugin is no longer able to\n detect the screenshots, hence it wont list the screenshots in the panel.\n </p>\n <p>\n This utility will apply changes to the screenshot file name and playwright\n config file.\n </p>\n </>\n )}\n {fixFunction && (\n <TextField\n label=\"Enter previous name export function\"\n variant=\"outlined\"\n onChange={handleFunctionNameInput}\n value={functionName}\n fullWidth={true}\n focused={true}\n required={true}\n />\n )}\n\n {fixFileNamesError && <p style={{ color: 'red' }}>{fixFileNamesError}</p>}\n </div>\n <DialogActions>\n <>\n {reload ? (\n <Button onClick={handleReload} color=\"primary\">\n Reload Page\n </Button>\n ) : (\n <>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n <Button onClick={fixFileNames} color=\"primary\" autoFocus>\n Apply Fix\n </Button>\n </>\n )}\n </>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nFixScreenshotFileDialog.displayName = 'FixScreenshotFileDialog';\n\nconst MemoizedFixScreenshotFileDialog = React.memo(FixScreenshotFileDialog);\nexport { FixScreenshotFileDialog, MemoizedFixScreenshotFileDialog };\n","import type { ActionSchema, StoryAction } from '../../../../../typings';\nimport * as immutableObject from 'object-path-immutable';\n\nexport function getActionOptionValue(\n action: StoryAction,\n optionPath: string,\n schema?: ActionSchema,\n): undefined | unknown {\n if (action && action.args) {\n return immutableObject.get(action.args, optionPath);\n }\n return schema ? schema.default : undefined;\n}\n","import type { Definition } from 'ts-to-json';\nimport type { ActionSchema } from '../../../../typings';\nimport React, { useCallback } from 'react';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { MemoizedSchemaRenderer } from '../../../schema/components/index';\nimport { useEditorAction } from '../../hooks/use-editor-action';\nimport { setActionOptions, toggleSubtitleItem } from '../../store/actions';\nimport { getActionOptionValue } from './utils/index';\n\nexport interface ActionSchemaRendererProps {\n schema: ActionSchema;\n actionId: string;\n actionSetId: string;\n}\n\nconst ActionSchemaRenderer: React.FC<ActionSchemaRendererProps> = (props) => {\n const { schema, actionId, actionSetId } = props;\n\n const story = useCurrentStoryData();\n const storyId = story?.id;\n\n const action = useEditorAction(storyId || '', actionId);\n\n const handleChange = useCallback(\n (objPath, val) => {\n if (!storyId) return;\n\n setActionOptions({\n actionId,\n actionSetId,\n objPath,\n storyId,\n val,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n const handleGetValue = useCallback(\n (optionObjectPath: string, schema: ActionSchema) => {\n if (!action) return undefined;\n const val = getActionOptionValue(action, optionObjectPath, schema);\n return val;\n },\n [action],\n );\n\n const shouldAppendToTitle = useCallback(\n (optionObjectPath: string) => {\n if (!action || !action.subtitleItems) {\n return undefined;\n }\n\n return action.subtitleItems.includes(optionObjectPath);\n },\n [action],\n );\n\n const handleOnAppendValueToTitle = useCallback(\n (optionObjectPath) => {\n if (!storyId) return;\n\n toggleSubtitleItem({\n actionId,\n actionOptionPath: optionObjectPath,\n actionSetId,\n storyId,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n const handleSelectorChange = useCallback(\n (objPath: string, val: unknown) => {\n if (!storyId) return;\n\n setActionOptions({\n actionId,\n actionSetId,\n objPath,\n storyId,\n val,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n if (!action) return null;\n\n return (\n <div>\n <MemoizedSchemaRenderer\n schemaProps={schema.parameters as Definition}\n required={schema.required}\n onChange={handleChange}\n getValue={handleGetValue}\n shouldAppendToTitle={shouldAppendToTitle as (optionObjectPath: string) => boolean}\n onAppendValueToTitle={handleOnAppendValueToTitle}\n onSelectorChange={handleSelectorChange}\n />\n </div>\n );\n};\n\nActionSchemaRenderer.displayName = 'ActionSchemaRenderer';\n\nexport { ActionSchemaRenderer };\n","import type { DragHandleProps } from '../../../../components/common';\nimport { AccordionDetails, Chip, makeStyles, Tooltip } from '@material-ui/core';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport { IconButton } from '@storybook/components';\nimport { QuestionIcon, TrashIcon } from '@storybook/icons';\nimport React, { memo, useCallback, useEffect, useState } from 'react';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { capitalize, getActionSchema } from '../../../../utils';\nimport { useEditorAction } from '../../hooks/use-editor-action';\nimport { deleteActionSetAction, toggleActionExpansion } from '../../store/actions';\n\nimport { useActionSetStoreState } from '../../store/selectors';\nimport { ActionSchemaRenderer } from './ActionSchemaRenderer';\nimport { getActionOptionValue } from './utils/index';\n\nconst useStyles = makeStyles(\n (theme) => {\n const { divider } = theme.palette;\n return {\n chip: {\n color: theme.palette.text.primary,\n height: 20,\n maxWidth: 150,\n },\n detailPanel: {\n display: 'block',\n },\n expanded: {\n transform: 'rotate(0deg) !important',\n },\n expansionPanel: {\n border: `1px solid ${divider}`,\n boxShadow: 'none',\n },\n heading: {\n alignItems: 'center',\n display: 'flex',\n fontWeight: theme.typography.fontWeightRegular as never,\n marginRight: 10,\n },\n icon: {\n fontSize: 20,\n },\n root: {\n padding: 4,\n width: '100%',\n },\n subtitleWrap: {\n width: '100%',\n },\n summary: {\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n summaryInner: {\n display: 'flex',\n },\n };\n },\n { name: 'ActionOptions' },\n);\n\nexport interface ActionOptionsProps {\n actionId: string;\n actionName: string;\n DragHandle: React.ComponentType<DragHandleProps>;\n actionSetId: string;\n dragHandleProps?: DragHandleProps;\n}\n\nconst ActionOptions: React.FC<ActionOptionsProps> = memo((props) => {\n const { actionId, actionName, DragHandle, actionSetId, dragHandleProps } = props;\n\n const [subtitle, setSubtitle] = useState<string[]>();\n\n const story = useCurrentStoryData();\n const storyId = story?.id;\n const state = useActionSetStoreState();\n\n const action = useEditorAction(storyId || '', actionId);\n const schema = getActionSchema(state.actionSchema, actionName);\n\n const classes = useStyles();\n\n const handleExpand = useCallback(() => {\n toggleActionExpansion(actionId);\n }, [actionId]);\n\n useEffect(() => {\n if (!action || !action.subtitleItems) return;\n const titles = action.subtitleItems.reduce<string[]>((arr, path) => {\n const label = path.split('.').pop();\n const value = getActionOptionValue(action, path);\n if (value) {\n arr.push(`${label}: ${value}`);\n }\n return arr;\n }, []);\n\n setSubtitle(titles);\n }, [action, actionName]);\n\n const handleDeleteAction = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!storyId) return;\n\n deleteActionSetAction({\n actionId,\n actionSetId,\n storyId,\n });\n },\n [actionId, actionSetId, storyId],\n );\n\n const hasParameters =\n schema && schema.parameters && Object.keys(schema.parameters).length !== 0;\n\n return (\n <div className={classes.root}>\n <Accordion\n expanded={\n state.expandedActions &&\n state.expandedActions[actionId] === true &&\n hasParameters\n }\n onChange={handleExpand}\n className={classes.expansionPanel}\n square\n TransitionProps={{\n timeout: 100,\n }}\n >\n <AccordionSummary\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n classes={{\n content: classes.summary,\n expanded: classes.expanded,\n }}\n >\n <div className={classes.summaryInner}>\n <DragHandle {...dragHandleProps} />\n <div className={classes.heading}>\n {capitalize(schema && schema.title ? schema.title : actionName)}\n </div>\n\n <div className={classes.subtitleWrap}>\n {subtitle &&\n subtitle.map((sub) => (\n <Chip\n className={classes.chip}\n key={sub}\n size=\"small\"\n label={sub}\n variant=\"outlined\"\n title={sub}\n />\n ))}\n </div>\n </div>\n <div>\n <Tooltip\n title={schema && schema.description ? schema.description : 'Not Available!'}\n >\n <IconButton>\n <QuestionIcon className={classes.icon} />\n </IconButton>\n </Tooltip>\n <IconButton onClick={handleDeleteAction}>\n <TrashIcon className={classes.icon} />\n </IconButton>\n </div>\n </AccordionSummary>\n <AccordionDetails className={classes.detailPanel}>\n {state.expandedActions && state.expandedActions[actionId] && hasParameters && (\n <ActionSchemaRenderer\n schema={schema}\n actionId={actionId}\n actionSetId={actionSetId}\n />\n )}\n </AccordionDetails>\n </Accordion>\n </div>\n );\n});\n\nActionOptions.displayName = 'ActionOptions';\n\nexport { ActionOptions };\n","import type { DragEndEvent, DragOverEvent } from '@dnd-kit/core';\nimport type { ActionSet } from '../../../../typings';\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { makeStyles } from '@material-ui/core';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { DragHandle, ListWrapper } from '../../../../components/common';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { moveActionSetAction } from '../../store/actions';\nimport { ActionOptions } from './ActionOptions';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { text },\n } = theme;\n\n return {\n noActionMessage: {\n color: text.primary,\n margin: 20,\n textAlign: 'center',\n },\n };\n },\n { name: 'ActionSetList' },\n);\n\ninterface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\ninterface SortableItemProps {\n action: ActionSet['actions'][number];\n actionSetId: string;\n sortableId: string;\n}\n\nexport const SortableItem: React.FC<SortableItemProps> = ({\n action,\n actionSetId,\n sortableId,\n}) => {\n const {\n attributes,\n listeners,\n setActivatorNodeRef,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortableId });\n\n return (\n <div\n ref={setNodeRef}\n style={{\n opacity: isDragging ? 0.8 : 1,\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <ActionOptions\n key={action.id}\n actionName={action.name}\n actionId={action.id}\n DragHandle={DragHandle}\n actionSetId={actionSetId}\n dragHandleProps={{\n ...(attributes as React.HTMLAttributes<HTMLSpanElement>),\n ...(listeners as React.HTMLAttributes<HTMLSpanElement>),\n setNodeRef: setActivatorNodeRef,\n }}\n />\n </div>\n );\n};\n\ninterface SortableListProps {\n actionSetId: string;\n items: ActionSet['actions'];\n onSortEnd?: (e: SortableIndexChangeEvent) => void;\n}\n\nexport const SortableList: React.FC<SortableListProps> = ({\n items,\n actionSetId,\n onSortEnd,\n}) => {\n const [localItems, setLocalItems] = useState(items);\n\n useEffect(() => {\n setLocalItems(items);\n }, [items]);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragOver = useCallback(({ active, over }: DragOverEvent) => {\n if (!over || active.id === over.id) return;\n setLocalItems((prev) => {\n const oldIndex = prev.findIndex((a) => a.id === active.id);\n const newIndex = prev.findIndex((a) => a.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(prev, oldIndex, newIndex);\n });\n }, []);\n\n const handleDragCancel = useCallback(() => {\n setLocalItems(items);\n }, [items]);\n\n const handleDragEnd = useCallback(\n ({ active }: DragEndEvent) => {\n const oldIndex = items.findIndex((a) => a.id === active.id);\n const newIndex = localItems.findIndex((a) => a.id === active.id);\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex || !onSortEnd) {\n setLocalItems(items);\n return;\n }\n\n onSortEnd({ newIndex, oldIndex });\n },\n [items, localItems, onSortEnd],\n );\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={localItems.map((action) => action.id)}\n strategy={verticalListSortingStrategy}\n >\n <div>\n {localItems.map((action) => (\n <SortableItem\n key={`item-${action.id}`}\n action={action}\n actionSetId={actionSetId}\n sortableId={action.id}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n );\n};\n\ninterface ActionListProps {\n actionSet: ActionSet;\n}\n\nconst ActionList: React.FC<ActionListProps> = ({ actionSet }) => {\n const classes = useStyles();\n\n const story = useCurrentStoryData();\n\n const handleSortEnd = useCallback(\n (e: SortableIndexChangeEvent) => {\n if (!story) return;\n\n moveActionSetAction({\n actionSetId: actionSet.id,\n newIndex: e.newIndex,\n oldIndex: e.oldIndex,\n storyId: story.id,\n });\n },\n [actionSet.id, story],\n );\n\n if (!actionSet || !actionSet.actions.length) {\n return (\n <div className={classes.noActionMessage}>\n <div>Click the '+' button to create an action.</div>\n </div>\n );\n }\n\n return (\n <ListWrapper>\n <SortableList\n items={actionSet.actions}\n onSortEnd={handleSortEnd}\n actionSetId={actionSet.id}\n />\n </ListWrapper>\n );\n};\n\nActionList.displayName = 'ActionList';\n\nexport { ActionList };\n","import type { Ref } from 'react';\nimport { MenuItem } from '@material-ui/core';\nimport React, { forwardRef, memo, useCallback } from 'react';\n\nexport interface ActionMenuItemBase {\n label: string;\n name: string;\n}\n\nexport interface ActionMenuItemProps extends ActionMenuItemBase {\n onChange: (key: string) => void;\n}\n\nconst ActionMenuItem: React.FC<ActionMenuItemProps> = memo(\n forwardRef((props, ref: Ref<HTMLLIElement>) => {\n const { onChange, label, name } = props;\n\n const handleChange = useCallback(() => {\n onChange(name);\n }, [name, onChange]);\n\n return (\n <MenuItem ref={ref} onClick={handleChange}>\n {label}\n </MenuItem>\n );\n }),\n);\n\nActionMenuItem.displayName = 'ActionMenuItem';\n\nexport { ActionMenuItem };\n","import { Definition } from 'ts-to-json';\nimport { ActionMenuItemBase } from '../ActionMenuItem';\n\nexport const getMenu = (\n def: Definition,\n parents: string[] = [],\n): ActionMenuItemBase[] => {\n const actionArr = Object.keys(def);\n let menuItems: ActionMenuItemBase[] = [];\n actionArr.forEach((actionKey) => {\n const prop = def[actionKey];\n\n if (prop.type === 'object') {\n const childProps = getMenu(prop.properties, [...parents, actionKey]);\n menuItems = [...menuItems, ...childProps];\n } else {\n const label = [...parents, actionKey];\n menuItems.push({\n label: label.join('.'),\n name: label.join('.'),\n });\n }\n });\n\n return menuItems.sort((a, b) => {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n });\n};\n","import { FavouriteActionSet } from '../../../../../typings/story-action';\n\nexport const filterFavouriteActions = (\n actions: FavouriteActionSet[],\n storyId: string,\n) => {\n return actions.reduce<FavouriteActionSet[]>((arr, item) => {\n const visibleTo = item.visibleTo || '*';\n\n if (visibleTo === '*' || new RegExp(visibleTo).test(storyId)) {\n arr.push(item);\n }\n return arr;\n }, []);\n};\n","import type { ActionMenuItemBase } from './ActionMenuItem';\nimport { makeStyles, Menu } from '@material-ui/core';\nimport React, { memo, useCallback, useState } from 'react';\nimport { useActionSetStoreState } from '../../store/index';\nimport { ActionMenuItem } from './ActionMenuItem';\nimport { getMenu } from './utils/index';\n\nconst useStyles = makeStyles(\n () => {\n return {\n menu: {\n minWidth: 100,\n },\n };\n },\n { name: 'ActionMenu' },\n);\n\nexport interface ActionMenuProps {\n onChange: (actionKey: string) => void;\n anchorEl: null | Element;\n onClose: () => void;\n}\n\nconst ActionMenu: React.FC<ActionMenuProps> = memo((props) => {\n const { onChange, onClose, anchorEl } = props;\n\n const state = useActionSetStoreState();\n\n const [actionItems, setActionItems] = useState<ActionMenuItemBase[]>([]);\n\n const classes = useStyles();\n\n React.useEffect(() => {\n if (!state.actionSchema) return undefined;\n const actionList = getMenu(state.actionSchema);\n setActionItems(actionList);\n }, [state.actionSchema]);\n\n const handleChange = useCallback(\n (key: string) => {\n onChange(key);\n },\n [onChange],\n );\n\n return (\n <Menu\n id=\"simple-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={onClose}\n className={classes.menu}\n >\n {actionItems.map((action) => (\n <ActionMenuItem\n key={action.name}\n name={action.name}\n label={action.label}\n onChange={handleChange}\n >\n Profile\n </ActionMenuItem>\n ))}\n </Menu>\n );\n});\n\nActionMenu.displayName = 'ActionMenu';\n\nexport { ActionMenu };\n","import { IconButton } from '@storybook/components';\nimport { CrossIcon, EditIcon, PlusIcon, SaveIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport { Loader } from '../../../../components/common';\nimport { useActionSchemaLoader } from '../../../../hooks';\nimport { ActionMenu } from './ActionMenu';\n\nexport interface ActionSetEditorIconsProps {\n onSave: () => void;\n onEditTitle: () => void;\n onCancel: () => void;\n onAddAction: (actionName: string) => void;\n}\n\nconst ActionSetEditorIcons: React.FC<ActionSetEditorIconsProps> = (props) => {\n const { onSave, onEditTitle: onEditDescription, onCancel, onAddAction } = props;\n\n const { loading } = useActionSchemaLoader();\n\n const [menuAnchorEl, setMenuAnchorEl] = React.useState<null | Element>(null);\n\n const handleMenuOpen = useCallback((event: React.SyntheticEvent<Element, Event>) => {\n setMenuAnchorEl(event.currentTarget);\n }, []);\n\n const handleMenuClose = useCallback(() => {\n setMenuAnchorEl(null);\n }, []);\n\n const handleMenuChange = useCallback(\n (action: string) => {\n onAddAction(action);\n setMenuAnchorEl(null);\n },\n [onAddAction],\n );\n\n return (\n <>\n <Loader open={loading} />\n <IconButton\n size=\"small\"\n className=\"edit-desc\"\n onClick={onEditDescription}\n title=\"Edit Title\"\n >\n <EditIcon />\n </IconButton>\n <IconButton\n size=\"small\"\n className=\"open-action-menu\"\n onClick={handleMenuOpen}\n title=\"Add Actions\"\n >\n <PlusIcon />\n </IconButton>\n <IconButton\n size=\"small\"\n className=\"save-action\"\n title=\"Save Actions\"\n onClick={onSave}\n >\n <SaveIcon />\n </IconButton>\n <IconButton size=\"small\" className=\"Cancel\" title=\"Cancel\" onClick={onCancel}>\n <CrossIcon />\n </IconButton>\n <ActionMenu\n onClose={handleMenuClose}\n anchorEl={menuAnchorEl}\n onChange={handleMenuChange}\n />\n </>\n );\n};\n\nActionSetEditorIcons.displayName = 'ActionSetEditorIcons';\n\nexport { ActionSetEditorIcons };\n","import type { ActionSet } from '../../../../typings';\nimport { Divider, makeStyles } from '@material-ui/core';\nimport React, { useCallback } from 'react';\nimport { inputModal, ListItemWrapper, Loader } from '../../../../components/common';\nimport { TEMP_ACTION_SET } from '../../../../constants';\nimport { useActionEditor, useActionSchemaLoader } from '../../../../hooks';\nimport { ActionList } from '../actions/ActionList';\nimport { ActionSetEditorIcons } from './ActionSetEditorIcons';\n\nconst useStyles = makeStyles(\n (theme) => {\n const {\n palette: { secondary },\n } = theme;\n\n return {\n divider: {\n backgroundColor: secondary.main,\n },\n root: {\n height: '100%',\n },\n };\n },\n { name: 'ActionSetEditor' },\n);\n\ninterface Props {\n actionSet: ActionSet;\n}\n\nconst ActionSetEditor: React.FC<Props> = ({ actionSet }) => {\n const { handleAddAction, handleDescriptionChange, handleSave, cancelEditActionSet } =\n useActionEditor(actionSet);\n\n const classes = useStyles();\n\n const { loading } = useActionSchemaLoader();\n\n const toggleEditDescription = useCallback(() => {\n void inputModal.show({\n onSave: handleDescriptionChange,\n title: 'Edit Description',\n value: actionSet.title,\n });\n }, [actionSet.title, handleDescriptionChange]);\n\n return (\n <ListItemWrapper\n tooltip={actionSet.temp ? actionSet.title + TEMP_ACTION_SET : actionSet.title}\n title={actionSet.temp ? `${actionSet.title} *` : actionSet.title}\n draggable={true}\n selected={true}\n secondaryColor={true}\n icons={\n <ActionSetEditorIcons\n onAddAction={handleAddAction}\n onCancel={cancelEditActionSet}\n onEditTitle={toggleEditDescription}\n onSave={handleSave}\n />\n }\n >\n <div className={classes.root}>\n <Divider className={classes.divider} />\n <ActionList actionSet={actionSet} />\n <Loader open={loading} />\n </div>\n </ListItemWrapper>\n );\n};\n\nActionSetEditor.displayName = 'ActionSetEditor';\n\nexport { ActionSetEditor };\n","import type { FavouriteActionSet } from '../../../../typings';\n\nimport {\n Button,\n capitalize,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormControlLabel,\n Popover,\n Radio,\n RadioGroup,\n TextField,\n} from '@material-ui/core';\nimport { IconButton } from '@storybook/components';\nimport { StarIcon } from '@storybook/icons';\nimport React from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { useAnchorEl } from '../../../../hooks/use-anchor-el';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { toast } from '../../../../utils/toast';\n\nexport interface AddFavouriteActionProps {\n item: FavouriteActionSet;\n}\n\nconst AddFavouriteAction: React.FC<AddFavouriteActionProps> = (props) => {\n const { item } = props;\n\n const { anchorEl, setAnchorEl, clearAnchorEl } = useAnchorEl();\n\n const [input, setInput] = React.useState<string>('*');\n\n const [radioValue, setRadioValue] = React.useState('*');\n\n const data = useCurrentStoryData();\n\n const { mutateAsync: addFavouriteAction } =\n trpcClient.favouriteActions.addFavouriteAction.useMutation();\n\n const { parent = 'parent' } = data || {};\n\n const onAddToFavourite = React.useCallback(async () => {\n item.visibleTo = input;\n clearAnchorEl();\n try {\n await addFavouriteAction(item);\n toast.success(\n // prettier-ignore\n `Successfully added action to favourites`,\n { duration: 5000 },\n );\n } catch (error) {\n toast.error(\n // prettier-ignore\n `An error has occurred:\\n ${(error as { message?: string }).message || 'Unknown error'}`,\n { duration: 5000 },\n );\n }\n }, [addFavouriteAction, clearAnchorEl, input, item]);\n\n const handleRadioChange = (_event: React.ChangeEvent<HTMLInputElement>, v) => {\n setInput(v);\n setRadioValue(v);\n };\n\n return (\n <>\n <IconButton\n className=\"add-favourite\"\n onClick={setAnchorEl}\n size=\"small\"\n title=\"Add To Favourite\"\n >\n <StarIcon />\n </IconButton>\n {anchorEl && (\n <Popover anchorEl={anchorEl} open={true} onClose={clearAnchorEl}>\n <DialogTitle>Define witch story(s) can use this action:</DialogTitle>\n <DialogContent>\n <FormControl>\n <RadioGroup row value={radioValue} onChange={handleRadioChange}>\n <FormControlLabel\n value=\"*\"\n control={<Radio size=\"small\" />}\n label=\"All Stories\"\n />\n <FormControlLabel\n value={parent}\n control={<Radio size=\"small\" />}\n label={`${capitalize(parent)} Stories`}\n />\n </RadioGroup>\n </FormControl>\n <div>\n <TextField\n value={input}\n onChange={(e) => setInput(e.target.value)}\n helperText=\"Or enter regex expression\"\n fullWidth\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onAddToFavourite}>Save</Button>\n </DialogActions>\n </Popover>\n )}\n </>\n );\n};\n\nAddFavouriteAction.displayName = 'AddFavouriteAction';\n\nexport { AddFavouriteAction };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ActionSet } from '../../../../typings';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { IconButton } from '@storybook/components';\nimport { CopyIcon, EditIcon } from '@storybook/icons';\nimport React, { useCallback } from 'react';\nimport {\n CheckBox,\n DeleteConfirmationButton,\n ListItemWrapper,\n} from '../../../../components/common';\n\nimport { TEMP_ACTION_SET } from '../../../../constants';\nimport { ActionSetEditor } from './ActionSetEditor';\nimport { AddFavouriteAction } from './AddFavouriteAction';\n\nexport interface ActionSetActionSetListItemProps {\n onEdit: (item: ActionSet) => void;\n onDelete: (item: ActionSet) => void;\n onCheckBoxClick?: (item: ActionSet) => void;\n onDuplicate?: (item: ActionSet) => void;\n item: ActionSet;\n checked?: boolean;\n title: string;\n isEditing?: boolean;\n hideIcons?: boolean;\n index?: number;\n sortableId?: string;\n}\n\nexport function ActionSetListItem({\n onEdit,\n onDelete,\n item,\n onCheckBoxClick,\n checked,\n title,\n isEditing,\n hideIcons,\n onDuplicate,\n sortableId,\n}: ActionSetActionSetListItemProps) {\n const {\n attributes,\n listeners,\n setActivatorNodeRef,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n disabled: Boolean(isEditing),\n id: sortableId ?? item.id,\n });\n\n const handleEdit = useCallback(() => {\n onEdit(item);\n }, [item, onEdit]);\n\n const handleCheckStateChanged = useCallback(() => {\n if (onCheckBoxClick) {\n onCheckBoxClick(item);\n }\n }, [item, onCheckBoxClick]);\n\n const handleDeleteConfirmation = useCallback(() => {\n onDelete(item);\n }, [item, onDelete]);\n\n const handleDuplicateActionSet = useCallback(() => {\n if (onDuplicate) {\n onDuplicate(item);\n }\n }, [item, onDuplicate]);\n\n if (isEditing) {\n return (\n <div\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <ActionSetEditor actionSet={item} />\n </div>\n );\n }\n\n return (\n <div\n ref={setNodeRef}\n style={{\n opacity: isDragging ? 0.8 : 1,\n position: 'relative',\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: 1,\n }}\n >\n <ListItemWrapper\n tooltip={title + (item.temp ? TEMP_ACTION_SET : '')}\n title={title + (item.temp ? ' *' : '')}\n draggable={true}\n selected={checked}\n dragHandleProps={{\n ...(attributes as React.HTMLAttributes<HTMLSpanElement>),\n ...(listeners as React.HTMLAttributes<HTMLSpanElement>),\n setNodeRef: setActivatorNodeRef,\n }}\n icons={\n <>\n {!hideIcons && (\n <IconButton\n className=\"edit-button\"\n onClick={handleEdit}\n size=\"small\"\n title=\"Edit\"\n >\n <EditIcon />\n </IconButton>\n )}\n <IconButton\n className=\"duplicate-button\"\n onClick={handleDuplicateActionSet}\n size=\"small\"\n title=\"Duplicate Action\"\n >\n <CopyIcon />\n </IconButton>\n\n {!hideIcons && <AddFavouriteAction item={item} />}\n <CheckBox onClick={handleCheckStateChanged} checked={Boolean(checked)} />\n {!hideIcons && (\n <DeleteConfirmationButton onDelete={handleDeleteConfirmation} />\n )}\n </>\n }\n />\n </div>\n );\n}\n\nActionSetListItem.displayName = 'ActionSetListItem';\n\nconst SortableActionSetListItem: React.FC<ActionSetActionSetListItemProps> = (props) => (\n <ActionSetListItem {...props} />\n);\n\nSortableActionSetListItem.displayName = 'SortableActionSetListItem';\n\nexport { SortableActionSetListItem };\n","import type { DragEndEvent, DragOverEvent } from '@dnd-kit/core';\nimport type { ActionSet } from '../../../../typings';\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { ListWrapper, Loader } from '../../../../components/common';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { toast } from '../../../../utils/toast';\nimport { useCopyActionSet } from '../../hooks/use-copy-action-set';\nimport { useCurrentStoryActionSets } from '../../hooks/use-current-story-action-sets';\nimport { useStoryActionSetsLoader } from '../../hooks/use-story-action-sets-loader';\nimport {\n deleteActionSet as deleteActionSetFromStore,\n editActionSet,\n toggleCurrentActionSet,\n} from '../../store/actions';\nimport { SortableActionSetListItem } from './ActionSetListItem';\n\nconst useStyles = makeStyles(\n () => {\n return {\n message: {\n marginTop: 20,\n textAlign: 'center',\n },\n };\n },\n { name: 'ActionSetList' },\n);\n\ninterface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\ninterface ActionSetListProps {\n onSortEnd?: (e: SortableIndexChangeEvent) => void;\n}\n\nconst ActionSetList: React.FC<ActionSetListProps> = ({ onSortEnd }) => {\n const classes = useStyles();\n\n const storyData = useCurrentStoryData();\n\n const { copyActionSet, inProgress: copyInProgress } = useCopyActionSet(storyData);\n\n const { mutateAsync: deleteActionSet } =\n trpcClient.actionSet.deleteActionSet.useMutation();\n\n const { storyActionSets, currentActionSets, state } = useCurrentStoryActionSets();\n\n const { loading } = useStoryActionSetsLoader();\n\n const handleDelete = useCallback(\n async (actionSet: ActionSet) => {\n if (!storyData) return;\n\n try {\n await deleteActionSet({\n actionSetId: actionSet.id,\n filePath: storyData.filePath,\n storyId: storyData.id,\n });\n deleteActionSetFromStore({\n actionSetId: actionSet.id,\n storyId: storyData.id,\n });\n } catch (error) {\n toast.error(\n error instanceof Error ? error.message : 'Failed to delete action set',\n );\n }\n },\n [deleteActionSet, storyData],\n );\n\n const handleEdit = useCallback((actionSet: ActionSet) => {\n editActionSet(actionSet);\n }, []);\n\n const handleCheckBox = useCallback((actionSet: ActionSet) => {\n toggleCurrentActionSet(actionSet.id);\n }, []);\n\n const isEditing = state.orgEditingActionSet !== undefined;\n\n const [localItems, setLocalItems] = useState<ActionSet[]>(storyActionSets);\n\n useEffect(() => {\n setLocalItems(storyActionSets);\n }, [storyActionSets]);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragOver = useCallback(({ active, over }: DragOverEvent) => {\n if (!over || active.id === over.id) return;\n setLocalItems((prev) => {\n const oldIndex = prev.findIndex((x) => x.id === active.id);\n const newIndex = prev.findIndex((x) => x.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(prev, oldIndex, newIndex);\n });\n }, []);\n\n const handleDragCancel = useCallback(() => {\n setLocalItems(storyActionSets);\n }, [storyActionSets]);\n\n const handleDragEnd = useCallback(\n ({ active }: DragEndEvent) => {\n const oldIndex = storyActionSets.findIndex((x) => x.id === active.id);\n const newIndex = localItems.findIndex((x) => x.id === active.id);\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex || !onSortEnd) {\n setLocalItems(storyActionSets);\n return;\n }\n\n onSortEnd({ newIndex, oldIndex });\n },\n [localItems, onSortEnd, storyActionSets],\n );\n\n return (\n <ListWrapper>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={localItems.map((actionSet) => actionSet.id)}\n strategy={verticalListSortingStrategy}\n >\n {localItems.length > 0 ? (\n localItems.map((actionSet, i) => (\n <SortableActionSetListItem\n index={i}\n sortableId={actionSet.id}\n key={actionSet.id + isEditing}\n item={actionSet}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onCheckBoxClick={handleCheckBox}\n checked={currentActionSets.includes(actionSet.id)}\n title={actionSet.title}\n onDuplicate={copyActionSet}\n isEditing={\n isEditing &&\n state.orgEditingActionSet &&\n state.orgEditingActionSet.id === actionSet.id\n }\n hideIcons={isEditing}\n />\n ))\n ) : (\n <div className={clsx(classes.message, 'no-data')}>\n <div>No action set to display!</div>\n <div>Click the '+' button to create an action set.</div>\n </div>\n )}\n </SortableContext>\n </DndContext>\n <Loader open={loading || copyInProgress} />\n </ListWrapper>\n );\n};\n\nActionSetList.displayName = 'ActionSetList';\n\nexport { ActionSetList };\n","import type { FavouriteActionSet } from '../../../../typings';\nimport { capitalize, makeStyles } from '@material-ui/core';\nimport { IconButton, ListItem, WithTooltip } from '@storybook/components';\nimport { TrashIcon } from '@storybook/icons';\nimport { nanoid } from 'nanoid';\nimport React from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { addActionSet as addActionSetToStore } from '../../store/actions';\nimport { filterFavouriteActions } from './utils/filter-favourite-actions';\n\nconst useStyles = makeStyles(\n () => {\n return {\n menu: {\n minWidth: 100,\n },\n };\n },\n { name: 'ActionMenu' },\n);\n\nexport interface FavouriteActionsProps {\n children?: React.ReactNode;\n getContainerHeight?: () => number | undefined;\n}\n\nconst defaults: FavouriteActionSet[] = [\n {\n actions: [\n {\n id: 'Kj6iSI1D3BIF1yX',\n name: 'takeScreenshot',\n },\n ],\n id: '1--default',\n title: 'Take screenshot',\n visibleTo: '*',\n },\n {\n actions: [\n {\n id: 'zjgHFLzuMbXG',\n name: 'takeScreenshotAll',\n },\n ],\n id: '2--default',\n title: 'Take screenshot of all actions',\n visibleTo: '*',\n },\n];\n\nconst FavouriteActions: React.FC<FavouriteActionsProps> = (props) => {\n const { children, getContainerHeight } = props;\n\n const [actionSets, setActionSets] = React.useState<FavouriteActionSet[]>(defaults);\n\n const { mutateAsync: saveActionSet } = trpcClient.actionSet.saveActionSet.useMutation();\n\n const { mutateAsync: deleteFavouriteAction } =\n trpcClient.favouriteActions.deleteFavouriteAction.useMutation();\n\n const { refetch: refetchFavouriteActions } =\n trpcClient.favouriteActions.getFavouriteActions.useQuery(undefined, {\n enabled: false,\n });\n\n const storyData = useCurrentStoryData();\n\n const { id: storyId } = storyData || {};\n\n const classes = useStyles();\n\n const loadActions = React.useCallback(() => {\n refetchFavouriteActions().then(({ data: result }) => {\n const actions = [\n ...defaults,\n ...filterFavouriteActions(result || [], storyId ?? ''),\n ];\n\n setActionSets(actions);\n });\n }, [refetchFavouriteActions, storyId]);\n\n const onAddQuickAction = async (item: FavouriteActionSet) => {\n if (!storyData || !storyId) return;\n\n const id = nanoid(12);\n const newActionSet: FavouriteActionSet = {\n ...item,\n id,\n visibleTo: undefined,\n };\n\n await saveActionSet({\n actionSet: newActionSet,\n filePath: storyData.filePath,\n storyId,\n });\n\n addActionSetToStore({\n actionSet: newActionSet,\n isNew: false,\n selected: true,\n storyId,\n });\n };\n\n const deleteAction = async (actionSetId: string) => {\n await deleteFavouriteAction({ actionSetId });\n loadActions();\n };\n\n React.useEffect(() => {\n loadActions();\n }, [loadActions]);\n\n return (\n <WithTooltip\n closeOnOutsideClick\n placement=\"bottom-start\"\n trigger=\"click\"\n tooltip={({ onHide }) => {\n const containerHeight = getContainerHeight?.();\n return (\n <div\n className={classes.menu}\n style={{\n maxHeight: containerHeight ? `${containerHeight - 50}px` : '50vh',\n overflowY: 'auto',\n }}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {actionSets.map((item) => {\n return (\n <ListItem\n key={item.id}\n title={capitalize(item.title)}\n right={\n <IconButton\n disabled={item.id.endsWith('--default')}\n onClick={(e) => {\n e.stopPropagation();\n void deleteAction(item.id);\n onHide();\n }}\n >\n <TrashIcon fontSize=\"small\" />\n </IconButton>\n }\n onClick={async () => {\n await onAddQuickAction(item);\n onHide();\n }}\n />\n );\n })}\n </div>\n );\n }}\n >\n {children}\n </WithTooltip>\n );\n};\n\nFavouriteActions.displayName = 'FavouriteActions';\n\nexport { FavouriteActions };\n","import { IconButton } from '@storybook/components';\nimport { PlusIcon, RefreshIcon, StarIcon } from '@storybook/icons';\nimport React from 'react';\nimport { DeleteConfirmationButton, Toolbar } from '../../../../components/common';\nimport { FavouriteActions } from './FavouriteActions';\n\nexport interface ActionToolbarProps {\n onAddActionSet: () => void;\n onReset: () => void;\n onFavoriteActionsClick?: () => void;\n onDeleteSelectedActionSets: () => void;\n deleteDisabled?: boolean;\n getContainerHeight?: () => number | undefined;\n}\n\nconst ActionToolbar: React.FC<ActionToolbarProps> = (props) => {\n const {\n onAddActionSet,\n onReset,\n onFavoriteActionsClick,\n onDeleteSelectedActionSets,\n deleteDisabled,\n getContainerHeight,\n } = props;\n\n return (\n <>\n <Toolbar border={['bottom']}>\n <div className=\"left\">\n <span>Action Sets</span>\n </div>\n <div className=\"right\">\n <FavouriteActions getContainerHeight={getContainerHeight}>\n <IconButton onClick={onFavoriteActionsClick} title=\"Favourite Actions\">\n <StarIcon />\n </IconButton>\n </FavouriteActions>\n <IconButton onClick={onReset} title=\"Reset\">\n <RefreshIcon />\n </IconButton>\n\n <DeleteConfirmationButton\n disabled={deleteDisabled}\n onDelete={onDeleteSelectedActionSets}\n IconButton={IconButton}\n />\n\n <IconButton onClick={onAddActionSet} title=\"Add Action Set\">\n <PlusIcon />\n </IconButton>\n </div>\n </Toolbar>\n </>\n );\n};\n\nActionToolbar.displayName = 'ActionToolbar';\n\nexport { ActionToolbar };\n","import type { ActionSet } from '../../../../typings';\nimport { useStorybookState } from '@storybook/manager-api';\nimport { nanoid } from 'nanoid';\nimport React, { useCallback, useEffect } from 'react';\nimport { trpcClient } from '../../../../api/trpc/client';\nimport { inputModal } from '../../../../components/common';\nimport { useCurrentStoryData } from '../../../../hooks/use-current-story-data';\nimport { useCurrentActions } from '../../hooks/use-current-actions';\nimport {\n addActionSet as addActionSetAction,\n cancelEditActionSet,\n clearCurrentActionSets,\n deleteActionSet as deleteActionSetFromStore,\n deleteTempActionSets,\n sortActionSets,\n} from '../../store/actions';\nimport { ActionSetList } from './ActionSetList';\nimport { ActionToolbar } from './ActionSetToolbar';\n\ninterface SortableIndexChangeEvent {\n newIndex: number;\n oldIndex: number;\n}\n\nconst ActionSetMain: React.FC = () => {\n const { storyId } = useStorybookState();\n\n const storyData = useCurrentStoryData();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const { currentActions } = useCurrentActions(storyId);\n\n const { mutateAsync: deleteActionSet } =\n trpcClient.actionSet.deleteActionSet.useMutation();\n\n const { mutateAsync: changeActionSetIndex } =\n trpcClient.actionSet.changeActionSetIndex.useMutation();\n\n const createNewActionSet = useCallback(\n (desc: string) => {\n const id = nanoid(12);\n const newActionSet: ActionSet = {\n actions: [],\n id,\n title: desc,\n };\n\n cancelEditActionSet(storyId);\n\n addActionSetAction({\n actionSet: newActionSet,\n isNew: true,\n selected: true,\n storyId,\n });\n },\n [storyId],\n );\n\n const toggleDescriptionDialog = useCallback(() => {\n void inputModal.show({\n onSave: createNewActionSet,\n required: true,\n title: 'Action set title',\n });\n }, [createNewActionSet]);\n\n const handleReset = useCallback(() => {\n clearCurrentActionSets();\n deleteTempActionSets(storyId);\n }, [storyId]);\n\n const handleDeleteSelectedActionSets = useCallback(async () => {\n if (!storyData) return;\n\n for (const action of currentActions) {\n try {\n await deleteActionSet({\n actionSetId: action.id,\n filePath: storyData.filePath,\n storyId,\n });\n\n deleteActionSetFromStore({ actionSetId: action.id, storyId });\n } catch (error) {\n console.error(error);\n }\n }\n }, [currentActions, deleteActionSet, storyData, storyId]);\n\n useEffect(() => {\n clearCurrentActionSets();\n }, [storyId]);\n\n const handleSortEnd = useCallback(\n async (e: SortableIndexChangeEvent) => {\n if (!storyData) return;\n\n sortActionSets({ newIndex: e.newIndex, oldIndex: e.oldIndex, storyId });\n try {\n await changeActionSetIndex({\n filePath: storyData.filePath,\n newIndex: e.newIndex,\n oldIndex: e.oldIndex,\n storyId,\n });\n } catch (error) {\n // revert on failure\n sortActionSets({ newIndex: e.oldIndex, oldIndex: e.newIndex, storyId });\n console.error(error);\n }\n },\n [changeActionSetIndex, storyData, storyId],\n );\n\n const getContainerHeight = React.useCallback(() => {\n return ref.current?.offsetHeight ?? undefined;\n }, []);\n\n return (\n <div style={{ height: 'calc(100% - 55px)', transform: 'none' }} ref={ref}>\n <ActionToolbar\n onAddActionSet={toggleDescriptionDialog}\n onReset={handleReset}\n onDeleteSelectedActionSets={handleDeleteSelectedActionSets}\n deleteDisabled={currentActions.length === 0}\n getContainerHeight={getContainerHeight}\n />\n\n <ActionSetList onSortEnd={handleSortEnd} />\n </div>\n );\n};\n\nActionSetMain.displayName = 'ActionSetMain';\n\nexport { ActionSetMain };\n","import React, { memo } from 'react';\nimport { ActionSetMain } from '../../features/action-set/components/action-set-panel/index';\nimport { CommonProvider } from '../common';\n\nconst ActionPanel: React.FC = memo(() => {\n return (\n <CommonProvider>\n <ActionSetMain />\n </CommonProvider>\n );\n});\n\nActionPanel.displayName = 'ActionPanel';\n\nexport { ActionPanel };\n","import { useStorybookState } from '@storybook/manager-api';\nimport React from 'react';\nimport { SCREENSHOT_PANEL_ID } from '../../constants';\nimport { ScreenshotMain } from '../../features/screenshot/components/screenshot-panel/ScreenshotMain';\n\nconst ScreenshotPanel: React.FC = () => {\n const state = useStorybookState();\n return <ScreenshotMain showPanel={state.selectedPanel === SCREENSHOT_PANEL_ID} />;\n};\n\nScreenshotPanel.displayName = 'ScreenshotPanel';\n\nexport { ScreenshotPanel };\n","import { AddonPanel } from '@storybook/components';\nimport { addons, types } from '@storybook/manager-api';\nimport React from 'react';\nimport { registerInputDialogModal } from './components/common';\nimport { ActionPanel, ScreenshotPanel } from './components/panel';\nimport { Preview } from './components/preview';\nimport { Tool } from './components/tool-bar';\nimport {\n ACTIONS_PANEL_ID,\n ADDON_ID,\n PREVIEW_ID,\n SCREENSHOT_PANEL_ID,\n TOAST_ID,\n TOOL_ID,\n} from './constants';\nimport { Toaster } from 'sonner';\n\naddons.add(PREVIEW_ID, {\n render: Preview as any,\n type: types.PREVIEW,\n});\n\nregisterInputDialogModal();\n\naddons.register(ADDON_ID, () => {\n try {\n const parsedUrl = new URL(window.location.href);\n if (!parsedUrl.hostname) return;\n } catch {\n return;\n }\n\n // Toast must inject once at the manager level to ensure it is available in all panels and tools,\n // and not duplicated if multiple panels/tools use it.\n addons.add(TOAST_ID, {\n render: () => <Toaster position=\"bottom-left\" />,\n title: 'toast',\n type: types.TOOL,\n });\n\n addons.add(TOOL_ID, {\n render: () => <Tool />,\n title: 'snapshot',\n type: types.TOOL,\n });\n\n addons.add(ACTIONS_PANEL_ID, {\n render: ({ active }) => (\n <AddonPanel active={active ?? false}>\n <ActionPanel />\n </AddonPanel>\n ),\n title: 'Playwright Actions',\n type: types.PANEL,\n });\n\n addons.add(SCREENSHOT_PANEL_ID, {\n render: ({ active }) => (\n <AddonPanel active={active ?? false}>\n <ScreenshotPanel />\n </AddonPanel>\n ),\n title: 'Screenshots',\n type: types.PANEL,\n });\n});\n"]}
|