@tomorrowevening/theatre-studio 1.0.5 → 1.0.6
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/index.js +105 -56
- package/package.json +1 -1
- package/dist/IDBStorage.js +0 -19
- package/dist/PaneManager.js +0 -112
- package/dist/Scrub.js +0 -134
- package/dist/Studio.js +0 -405
- package/dist/StudioBundle.js +0 -21
- package/dist/StudioStore/StudioStore.js +0 -163
- package/dist/StudioStore/createTransactionPrivateApi.js +0 -204
- package/dist/StudioStore/generateDiskStateRevision.js +0 -4
- package/dist/StudioStore/persistStateOfStudio.js +0 -61
- package/dist/TheatreStudio.js +0 -154
- package/dist/UI/UI.js +0 -65
- package/dist/UI/UINonSSRBits.js +0 -60
- package/dist/UIRoot/PanelsRoot.js +0 -19
- package/dist/UIRoot/PointerCapturing.js +0 -96
- package/dist/UIRoot/ProvideTheme.js +0 -9
- package/dist/UIRoot/UIRoot.js +0 -79
- package/dist/UIRoot/useKeyboardShortcuts.js +0 -158
- package/dist/checkForUpdates.js +0 -86
- package/dist/css.js +0 -116
- package/dist/getStudio.js +0 -10
- package/dist/notify.js +0 -328
- package/dist/panels/BasePanel/BasePanel.js +0 -74
- package/dist/panels/BasePanel/ExtensionPaneWrapper.js +0 -138
- package/dist/panels/BasePanel/PanelDragZone.js +0 -88
- package/dist/panels/BasePanel/PanelResizeHandle.js +0 -184
- package/dist/panels/BasePanel/PanelResizers.js +0 -14
- package/dist/panels/BasePanel/PanelWrapper.js +0 -34
- package/dist/panels/BasePanel/common.js +0 -52
- package/dist/panels/DetailPanel/DetailPanel.js +0 -146
- package/dist/panels/DetailPanel/DeterminePropEditorForDetail/DetailCompoundPropEditor.js +0 -169
- package/dist/panels/DetailPanel/DeterminePropEditorForDetail/DetailSimplePropEditor.js +0 -22
- package/dist/panels/DetailPanel/DeterminePropEditorForDetail/SingleRowPropEditor.js +0 -89
- package/dist/panels/DetailPanel/DeterminePropEditorForDetail/getDetailRowHighlightBackground.js +0 -7
- package/dist/panels/DetailPanel/DeterminePropEditorForDetail/rowIndentationFormulaCSS.js +0 -1
- package/dist/panels/DetailPanel/DeterminePropEditorForDetail.js +0 -28
- package/dist/panels/DetailPanel/EmptyState.js +0 -36
- package/dist/panels/DetailPanel/ObjectDetails.js +0 -52
- package/dist/panels/DetailPanel/ProjectDetails/StateConflictRow.js +0 -86
- package/dist/panels/DetailPanel/ProjectDetails.js +0 -98
- package/dist/panels/OutlinePanel/BaseItem.js +0 -136
- package/dist/panels/OutlinePanel/ObjectsList/ObjectItem.js +0 -14
- package/dist/panels/OutlinePanel/ObjectsList/ObjectsList.js +0 -85
- package/dist/panels/OutlinePanel/OutlinePanel.js +0 -73
- package/dist/panels/OutlinePanel/ProjectsList/ProjectListItem.js +0 -38
- package/dist/panels/OutlinePanel/ProjectsList/ProjectsList.js +0 -22
- package/dist/panels/OutlinePanel/SheetsList/SheetInstanceItem.js +0 -36
- package/dist/panels/OutlinePanel/SheetsList/SheetItem.js +0 -23
- package/dist/panels/OutlinePanel/SheetsList/SheetsList.js +0 -15
- package/dist/panels/OutlinePanel/outlinePanelUtils.js +0 -23
- package/dist/panels/SequenceEditorPanel/DopeSheet/DopeSheet.js +0 -21
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/AnyCompositeRow.js +0 -74
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/Left.js +0 -25
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/PrimitivePropRow.js +0 -97
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/PropWithChildrenRow.js +0 -15
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/SheetObjectRow.js +0 -19
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/SheetRow.js +0 -20
- package/dist/panels/SequenceEditorPanel/DopeSheet/Left/usePropHighlightMouseEnter.js +0 -33
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeConnector.js +0 -187
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeDot.js +0 -158
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeEditor.js +0 -32
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeVisualDot.js +0 -61
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/iif.js +0 -3
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/useAggregateKeyframeEditorUtils.js +0 -73
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregatedKeyframeTrack.js +0 -407
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/BasicKeyframedTrack.js +0 -108
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/BasicKeyframeConnector.js +0 -185
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/CurveEditorPopover.js +0 -397
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/CurveSegmentEditor.js +0 -136
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/EasingOption.js +0 -52
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/SVGCurveSegment.js +0 -43
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/colors.js +0 -3
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/shared.js +0 -84
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/useFreezableMemo.js +0 -16
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/useUIOptionGrid.js +0 -82
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/DeterminePropEditorForSingleKeyframe.js +0 -93
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/SingleKeyframeDot.js +0 -254
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/SingleKeyframeEditor.js +0 -22
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useSingleKeyframeInlineEditorPopover.js +0 -11
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useTempTransactionEditingTools.js +0 -43
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/DopeSheetBackground.js +0 -24
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/DopeSheetSelectionView.js +0 -272
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/FocusRangeCurtains.js +0 -88
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/HorizontallyScrollableArea.js +0 -215
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget.js +0 -55
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/LengthIndicator/LengthEditorPopover.js +0 -69
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/LengthIndicator/LengthIndicator.js +0 -217
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/PrimitivePropRow.js +0 -25
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/PropWithChildrenRow.js +0 -18
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/Right.js +0 -30
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/Row.js +0 -50
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/SheetObjectRow.js +0 -14
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/SheetRow.js +0 -14
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes.js +0 -92
- package/dist/panels/SequenceEditorPanel/DopeSheet/Right/keyframeRowUI/ConnectorLine.js +0 -62
- package/dist/panels/SequenceEditorPanel/DopeSheet/selections.js +0 -149
- package/dist/panels/SequenceEditorPanel/DopeSheet/setCollapsedSheetObjectOrCompoundProp.js +0 -10
- package/dist/panels/SequenceEditorPanel/FrameGrid/FrameGrid.js +0 -92
- package/dist/panels/SequenceEditorPanel/FrameGrid/StampsGrid.js +0 -99
- package/dist/panels/SequenceEditorPanel/FrameGrid/createGrid.js +0 -49
- package/dist/panels/SequenceEditorPanel/FrameStampPositionProvider.js +0 -189
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/BasicKeyframedTrack.js +0 -91
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/Curve.js +0 -87
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/CurveHandle.js +0 -186
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/GraphEditorDotNonScalar.js +0 -162
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/GraphEditorDotScalar.js +0 -209
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/GraphEditorNonScalarDash.js +0 -23
- package/dist/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/KeyframeEditor.js +0 -30
- package/dist/panels/SequenceEditorPanel/GraphEditor/GraphEditor.js +0 -73
- package/dist/panels/SequenceEditorPanel/GraphEditor/PrimitivePropGraph.js +0 -20
- package/dist/panels/SequenceEditorPanel/GraphEditorToggle.js +0 -59
- package/dist/panels/SequenceEditorPanel/RightOverlay/DopeSnap.js +0 -36
- package/dist/panels/SequenceEditorPanel/RightOverlay/DopeSnapHitZoneUI.js +0 -57
- package/dist/panels/SequenceEditorPanel/RightOverlay/FocusRangeZone/FocusRangeStrip.js +0 -233
- package/dist/panels/SequenceEditorPanel/RightOverlay/FocusRangeZone/FocusRangeThumb.js +0 -217
- package/dist/panels/SequenceEditorPanel/RightOverlay/FocusRangeZone/FocusRangeZone.js +0 -181
- package/dist/panels/SequenceEditorPanel/RightOverlay/FrameStamp.js +0 -65
- package/dist/panels/SequenceEditorPanel/RightOverlay/HorizontalScrollbar.js +0 -235
- package/dist/panels/SequenceEditorPanel/RightOverlay/Markers/MarkerDot.js +0 -184
- package/dist/panels/SequenceEditorPanel/RightOverlay/Markers/MarkerEditorPopover.js +0 -65
- package/dist/panels/SequenceEditorPanel/RightOverlay/Markers/Markers.js +0 -13
- package/dist/panels/SequenceEditorPanel/RightOverlay/Playhead.js +0 -265
- package/dist/panels/SequenceEditorPanel/RightOverlay/PlayheadPositionPopover.js +0 -64
- package/dist/panels/SequenceEditorPanel/RightOverlay/RightOverlay.js +0 -35
- package/dist/panels/SequenceEditorPanel/RightOverlay/TopStrip.js +0 -31
- package/dist/panels/SequenceEditorPanel/SequenceEditorPanel.js +0 -179
- package/dist/panels/SequenceEditorPanel/VerticalScrollContainer.js +0 -42
- package/dist/panels/SequenceEditorPanel/layout/layout.js +0 -166
- package/dist/panels/SequenceEditorPanel/layout/tree.js +0 -139
- package/dist/panels/SequenceEditorPanel/whatPropIsHighlighted.js +0 -58
- package/dist/propEditors/DefaultValueIndicator.js +0 -64
- package/dist/propEditors/NextPrevKeyframeCursors.js +0 -135
- package/dist/propEditors/getNearbyKeyframesOfTrack.js +0 -46
- package/dist/propEditors/simpleEditors/BooleanPropEditor.js +0 -17
- package/dist/propEditors/simpleEditors/FilePropEditor.js +0 -118
- package/dist/propEditors/simpleEditors/ISimplePropEditorReactProps.js +0 -1
- package/dist/propEditors/simpleEditors/ImagePropEditor.js +0 -126
- package/dist/propEditors/simpleEditors/NumberPropEditor.js +0 -9
- package/dist/propEditors/simpleEditors/RgbaPropEditor.js +0 -73
- package/dist/propEditors/simpleEditors/StringLiteralPropEditor.js +0 -10
- package/dist/propEditors/simpleEditors/StringPropEditor.js +0 -6
- package/dist/propEditors/simpleEditors/simplePropEditorByPropType.js +0 -16
- package/dist/propEditors/useEditingToolsForCompoundProp.js +0 -228
- package/dist/propEditors/useEditingToolsForSimpleProp.js +0 -229
- package/dist/propEditors/utils/IEditingTools.js +0 -1
- package/dist/propEditors/utils/PropConfigForType.js +0 -1
- package/dist/propEditors/utils/getPropTypeByPointer.js +0 -48
- package/dist/propEditors/utils/propNameTextCSS.js +0 -7
- package/dist/selectors.js +0 -63
- package/dist/store/index.js +0 -184
- package/dist/store/stateEditors.js +0 -774
- package/dist/store/types/ahistoric.js +0 -1
- package/dist/store/types/ephemeral.js +0 -1
- package/dist/store/types/historic.js +0 -1
- package/dist/store/types/index.js +0 -3
- package/dist/toolbars/ExtensionToolbar/ExtensionToolbar.js +0 -51
- package/dist/toolbars/ExtensionToolbar/Toolset.js +0 -27
- package/dist/toolbars/ExtensionToolbar/tools/ExtensionFlyoutMenu.js +0 -51
- package/dist/toolbars/ExtensionToolbar/tools/IconButton.js +0 -16
- package/dist/toolbars/ExtensionToolbar/tools/Switch.js +0 -20
- package/dist/toolbars/GlobalToolbar.js +0 -142
- package/dist/toolbars/MoreMenu/MoreMenu.js +0 -133
- package/dist/toolbars/PinButton.js +0 -26
- package/dist/uiComponents/DetailPanelButton.js +0 -21
- package/dist/uiComponents/PointerEventsHandler.js +0 -80
- package/dist/uiComponents/Popover/ArrowContext.js +0 -3
- package/dist/uiComponents/Popover/BasicPopover.js +0 -35
- package/dist/uiComponents/Popover/BasicTooltip.js +0 -10
- package/dist/uiComponents/Popover/ErrorTooltip.js +0 -9
- package/dist/uiComponents/Popover/MinimalTooltip.js +0 -6
- package/dist/uiComponents/Popover/PopoverArrow.js +0 -38
- package/dist/uiComponents/Popover/TooltipContext.js +0 -46
- package/dist/uiComponents/Popover/TooltipWrapper.js +0 -103
- package/dist/uiComponents/Popover/usePopover.js +0 -132
- package/dist/uiComponents/Popover/useTooltip.js +0 -33
- package/dist/uiComponents/RoomToClick.js +0 -10
- package/dist/uiComponents/SVGIcon.js +0 -19
- package/dist/uiComponents/ShowMousePosition.js +0 -30
- package/dist/uiComponents/colorPicker/components/EditingProvider.js +0 -15
- package/dist/uiComponents/colorPicker/components/RgbaColorPicker.js +0 -31
- package/dist/uiComponents/colorPicker/components/common/Alpha.js +0 -54
- package/dist/uiComponents/colorPicker/components/common/AlphaColorPicker.js +0 -28
- package/dist/uiComponents/colorPicker/components/common/Hue.js +0 -41
- package/dist/uiComponents/colorPicker/components/common/Interactive.js +0 -142
- package/dist/uiComponents/colorPicker/components/common/Pointer.js +0 -39
- package/dist/uiComponents/colorPicker/components/common/Saturation.js +0 -44
- package/dist/uiComponents/colorPicker/hooks/useColorManipulation.js +0 -77
- package/dist/uiComponents/colorPicker/hooks/useEventCallback.js +0 -10
- package/dist/uiComponents/colorPicker/hooks/useIsomorphicLayoutEffect.js +0 -5
- package/dist/uiComponents/colorPicker/index.js +0 -1
- package/dist/uiComponents/colorPicker/types.js +0 -1
- package/dist/uiComponents/colorPicker/utils/clamp.js +0 -6
- package/dist/uiComponents/colorPicker/utils/compare.js +0 -25
- package/dist/uiComponents/colorPicker/utils/convert.js +0 -165
- package/dist/uiComponents/colorPicker/utils/round.js +0 -3
- package/dist/uiComponents/colorPicker/utils/validate.js +0 -10
- package/dist/uiComponents/createCursorLock.js +0 -2
- package/dist/uiComponents/form/BasicCheckbox.js +0 -5
- package/dist/uiComponents/form/BasicNumberInput.js +0 -261
- package/dist/uiComponents/form/BasicSelect.js +0 -58
- package/dist/uiComponents/form/BasicStringInput.js +0 -151
- package/dist/uiComponents/form/BasicSwitch.js +0 -60
- package/dist/uiComponents/icons/AddImage.js +0 -6
- package/dist/uiComponents/icons/ArrowClockwise.js +0 -6
- package/dist/uiComponents/icons/ArrowsOutCardinal.js +0 -6
- package/dist/uiComponents/icons/Bell.js +0 -6
- package/dist/uiComponents/icons/Camera.js +0 -7
- package/dist/uiComponents/icons/ChevronDown.js +0 -6
- package/dist/uiComponents/icons/ChevronLeft.js +0 -6
- package/dist/uiComponents/icons/ChevronRight.js +0 -6
- package/dist/uiComponents/icons/Cube.js +0 -6
- package/dist/uiComponents/icons/CubeFull.js +0 -6
- package/dist/uiComponents/icons/CubeHalf.js +0 -6
- package/dist/uiComponents/icons/CubeRendered.js +0 -7
- package/dist/uiComponents/icons/Details.js +0 -6
- package/dist/uiComponents/icons/DoubleChevronLeft.js +0 -6
- package/dist/uiComponents/icons/DoubleChevronRight.js +0 -6
- package/dist/uiComponents/icons/Ellipsis.js +0 -6
- package/dist/uiComponents/icons/EllipsisFill.js +0 -6
- package/dist/uiComponents/icons/GlobeSimple.js +0 -6
- package/dist/uiComponents/icons/Outline.js +0 -6
- package/dist/uiComponents/icons/Package.js +0 -6
- package/dist/uiComponents/icons/Resize.js +0 -7
- package/dist/uiComponents/icons/Trash.js +0 -6
- package/dist/uiComponents/icons/index.js +0 -20
- package/dist/uiComponents/isSafari.js +0 -2
- package/dist/uiComponents/onPointerOutside.js +0 -19
- package/dist/uiComponents/selects/BasicSelect.js +0 -24
- package/dist/uiComponents/simpleContextMenu/ContextMenu/BaseMenu.js +0 -40
- package/dist/uiComponents/simpleContextMenu/ContextMenu/ContextMenu.js +0 -87
- package/dist/uiComponents/simpleContextMenu/ContextMenu/Item.js +0 -37
- package/dist/uiComponents/simpleContextMenu/useContextMenu.js +0 -20
- package/dist/uiComponents/simpleContextMenu/useRequestContextMenu.js +0 -22
- package/dist/uiComponents/toolbar/ToolbarDropdownSelect.js +0 -7
- package/dist/uiComponents/toolbar/ToolbarIconButton.js +0 -74
- package/dist/uiComponents/toolbar/ToolbarSwitchSelect.js +0 -12
- package/dist/uiComponents/toolbar/ToolbarSwitchSelectContainer.js +0 -9
- package/dist/uiComponents/useBoundingClientRect.js +0 -13
- package/dist/uiComponents/useDebugRefreshEvery.js +0 -19
- package/dist/uiComponents/useDrag.js +0 -199
- package/dist/uiComponents/useHotspot.js +0 -30
- package/dist/uiComponents/useHover.js +0 -23
- package/dist/uiComponents/useHoverWithoutDescendants.js +0 -33
- package/dist/uiComponents/useKeyDown.js +0 -9
- package/dist/uiComponents/useKeyDownCallback.js +0 -28
- package/dist/uiComponents/useLockSet.js +0 -17
- package/dist/uiComponents/useLogger.js +0 -16
- package/dist/uiComponents/useOnClickOutside.js +0 -25
- package/dist/uiComponents/useOnKeyDown.js +0 -12
- package/dist/uiComponents/usePresence.js +0 -156
- package/dist/uiComponents/useValToAtom.js +0 -11
- package/dist/utils/absoluteDims.js +0 -7
- package/dist/utils/contextualWebComponents.js +0 -44
- package/dist/utils/copyToClipboard.js +0 -28
- package/dist/utils/derive-utils.js +0 -61
- package/dist/utils/devStringify.js +0 -20
- package/dist/utils/invariant.js +0 -79
- package/dist/utils/isMac.js +0 -2
- package/dist/utils/keyboardUtils.js +0 -23
- package/dist/utils/mousePositionD.js +0 -18
- package/dist/utils/redux/actionCreator.js +0 -15
- package/dist/utils/redux/actionCreator.test.js +0 -35
- package/dist/utils/redux/actionReducersBundle.js +0 -18
- package/dist/utils/redux/atomFromReduxStore.js +0 -11
- package/dist/utils/redux/configureStore.js +0 -18
- package/dist/utils/redux/pointerFriendlySelector.js +0 -8
- package/dist/utils/redux/withHistory/withBatchActions.js +0 -13
- package/dist/utils/redux/withHistory/withHistory.js +0 -157
- package/dist/utils/renderInPortalInContext.js +0 -38
- package/dist/utils/selectClosestHTMLAncestor.js +0 -13
- package/dist/utils/tightJsonStringify.js +0 -27
- package/dist/utils/tightJsonStringify.test.js +0 -25
- package/dist/utils/useRefAndState.js +0 -32
package/dist/UI/UINonSSRBits.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import UIRoot from '@tomorrowevening/theatre-studio/UIRoot/UIRoot';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import ReactDOM from 'react-dom/client';
|
|
4
|
-
import { getMounter } from '@tomorrowevening/theatre-studio/utils/renderInPortalInContext';
|
|
5
|
-
import { withStyledShadow } from '@tomorrowevening/theatre-studio/css';
|
|
6
|
-
import ExtensionToolbar from '@tomorrowevening/theatre-studio/toolbars/ExtensionToolbar/ExtensionToolbar';
|
|
7
|
-
export default class UINonSSRBits {
|
|
8
|
-
containerEl = document.createElement('div');
|
|
9
|
-
_renderTimeout = undefined;
|
|
10
|
-
_documentBodyUIIsRenderedIn = undefined;
|
|
11
|
-
containerShadow;
|
|
12
|
-
constructor() {
|
|
13
|
-
// @todo we can't bootstrap Theatre.js (as in, to design Theatre.js using theatre), if we rely on IDed elements
|
|
14
|
-
this.containerEl.id = 'theatrejs-studio-root';
|
|
15
|
-
this.containerEl.style.cssText = `
|
|
16
|
-
position: fixed;
|
|
17
|
-
top: 0;
|
|
18
|
-
right: 0;
|
|
19
|
-
bottom: 0;
|
|
20
|
-
left: 0;
|
|
21
|
-
pointer-events: none;
|
|
22
|
-
z-index: 100;
|
|
23
|
-
`;
|
|
24
|
-
const createShadowRoot = () => {
|
|
25
|
-
if (window.__IS_VISUAL_REGRESSION_TESTING === true) {
|
|
26
|
-
const fauxRoot = document.createElement('div');
|
|
27
|
-
fauxRoot.id = 'theatrejs-faux-shadow-root';
|
|
28
|
-
document.body.appendChild(fauxRoot);
|
|
29
|
-
return fauxRoot;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
return this.containerEl.attachShadow({
|
|
33
|
-
mode: 'open',
|
|
34
|
-
// To see why I had to cast this value to HTMLElement, take a look at its
|
|
35
|
-
// references of this prop. There are a few functions that actually work
|
|
36
|
-
// with a ShadowRoot but are typed to accept HTMLElement
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
this.containerShadow = createShadowRoot();
|
|
41
|
-
}
|
|
42
|
-
render() {
|
|
43
|
-
const renderCallback = () => {
|
|
44
|
-
if (!document.body) {
|
|
45
|
-
this._renderTimeout = setTimeout(renderCallback, 5);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
this._renderTimeout = undefined;
|
|
49
|
-
this._documentBodyUIIsRenderedIn = document.body;
|
|
50
|
-
this._documentBodyUIIsRenderedIn.appendChild(this.containerEl);
|
|
51
|
-
ReactDOM.createRoot(this.containerShadow).render(React.createElement(UIRoot, { containerShadow: this.containerShadow }));
|
|
52
|
-
};
|
|
53
|
-
this._renderTimeout = setTimeout(renderCallback, 10);
|
|
54
|
-
}
|
|
55
|
-
renderToolset(toolsetId, htmlNode) {
|
|
56
|
-
const s = getMounter();
|
|
57
|
-
s.mountOrRender(withStyledShadow(ExtensionToolbar), { toolbarId: toolsetId }, htmlNode);
|
|
58
|
-
return s.unmount;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import OutlinePanel from '@tomorrowevening/theatre-studio/panels/OutlinePanel/OutlinePanel';
|
|
2
|
-
import DetailPanel from '@tomorrowevening/theatre-studio/panels/DetailPanel/DetailPanel';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import getStudio from '@tomorrowevening/theatre-studio/getStudio';
|
|
5
|
-
import { useVal } from '@tomorrowevening/theatre-react';
|
|
6
|
-
import ExtensionPaneWrapper from '@tomorrowevening/theatre-studio/panels/BasePanel/ExtensionPaneWrapper';
|
|
7
|
-
import SequenceEditorPanel from '@tomorrowevening/theatre-studio/panels/SequenceEditorPanel/SequenceEditorPanel';
|
|
8
|
-
const PanelsRoot = () => {
|
|
9
|
-
const panes = useVal(getStudio().paneManager.allPanesD);
|
|
10
|
-
const paneEls = Object.entries(panes).map(([instanceId, paneInstance]) => {
|
|
11
|
-
return (React.createElement(ExtensionPaneWrapper, { key: `pane-${instanceId}`, paneInstance: paneInstance }));
|
|
12
|
-
});
|
|
13
|
-
return (React.createElement(React.Fragment, null,
|
|
14
|
-
paneEls,
|
|
15
|
-
React.createElement(OutlinePanel, null),
|
|
16
|
-
React.createElement(DetailPanel, null),
|
|
17
|
-
React.createElement(SequenceEditorPanel, null)));
|
|
18
|
-
};
|
|
19
|
-
export default PanelsRoot;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import React, { useContext, useEffect, useMemo } from 'react';
|
|
2
|
-
import { useLogger } from '@tomorrowevening/theatre-studio/uiComponents/useLogger';
|
|
3
|
-
function _usePointerCapturingContext() {
|
|
4
|
-
const logger = useLogger('PointerCapturing');
|
|
5
|
-
let currentCaptureRef = React.useRef(null);
|
|
6
|
-
const isPointerBeingCaptured = () => currentCaptureRef.current != null;
|
|
7
|
-
return (forDebugName) => {
|
|
8
|
-
/** keep track of the captures being made by this user of {@link usePointerCapturing} */
|
|
9
|
-
let localCapture;
|
|
10
|
-
const updateCapture = (to) => {
|
|
11
|
-
localCapture = to;
|
|
12
|
-
currentCaptureRef.current = to;
|
|
13
|
-
return to;
|
|
14
|
-
};
|
|
15
|
-
const capturing = {
|
|
16
|
-
capturePointer(reason) {
|
|
17
|
-
logger._debug('Capturing pointer', { forDebugName, reason });
|
|
18
|
-
if (currentCaptureRef.current != null) {
|
|
19
|
-
throw new Error(`"${forDebugName}" attempted capturing pointer for "${reason}" while already captured by "${currentCaptureRef.current.debugOwnerName}" for "${currentCaptureRef.current.debugReason}"`);
|
|
20
|
-
}
|
|
21
|
-
const releaseCapture = updateCapture({
|
|
22
|
-
debugOwnerName: forDebugName,
|
|
23
|
-
debugReason: reason,
|
|
24
|
-
});
|
|
25
|
-
return {
|
|
26
|
-
isCapturing() {
|
|
27
|
-
return releaseCapture === currentCaptureRef.current;
|
|
28
|
-
},
|
|
29
|
-
release() {
|
|
30
|
-
if (releaseCapture === currentCaptureRef.current) {
|
|
31
|
-
logger._debug('Releasing pointer', {
|
|
32
|
-
forDebugName,
|
|
33
|
-
reason,
|
|
34
|
-
});
|
|
35
|
-
updateCapture(null);
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
},
|
|
42
|
-
isPointerBeingCaptured,
|
|
43
|
-
};
|
|
44
|
-
return {
|
|
45
|
-
capturing,
|
|
46
|
-
forceRelease() {
|
|
47
|
-
if (localCapture && currentCaptureRef.current === localCapture) {
|
|
48
|
-
logger._debug('Force releasing pointer', { localCapture });
|
|
49
|
-
updateCapture(null);
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
const PointerCapturingContext = React.createContext(null);
|
|
56
|
-
const ProviderChildrenMemo = React.memo(({ children }) => React.createElement(React.Fragment, null, children));
|
|
57
|
-
/**
|
|
58
|
-
* See {@link PointerCapturing}.
|
|
59
|
-
*
|
|
60
|
-
* This should likely live towards the root of the application.
|
|
61
|
-
*
|
|
62
|
-
* Uncertain about whether nesting pointer capturing providers should be cognizant of each other.
|
|
63
|
-
*/
|
|
64
|
-
export function ProvidePointerCapturing(props) {
|
|
65
|
-
const ctx = _usePointerCapturingContext();
|
|
66
|
-
// Consider whether we want to manage multiple providers nested (e.g. embedding Theatre.js in Theatre.js or studio into whatever else)
|
|
67
|
-
// This may not be necessary to consider due to the design of allowing a default value for contexts...
|
|
68
|
-
// 1/10 importance to think about, now.
|
|
69
|
-
// const parentCapturing = useContext(PointerCapturingContext)
|
|
70
|
-
return (React.createElement(PointerCapturingContext.Provider, { value: ctx },
|
|
71
|
-
React.createElement(ProviderChildrenMemo, { children: props.children })));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Used to ensure we're locking drag and pointer events to a single place in the UI logic.
|
|
75
|
-
* Without this, we can much more easily accidentally create multiple drag handlers on
|
|
76
|
-
* child / parent dom elements which both `useDrag`, for example.
|
|
77
|
-
*
|
|
78
|
-
* An example of this helping us was when we first started building the Curve editor popover.
|
|
79
|
-
* In that activity, we were experiencing a weird issue where the popover would unmount while
|
|
80
|
-
* dragging away from the popover, and the drag end listener would not be called.
|
|
81
|
-
* By having "Pointer Capturing" we're able to identify that the pointer was not being properly
|
|
82
|
-
* released, because there would be a lock contention when trying to drag something else.
|
|
83
|
-
*/
|
|
84
|
-
export function usePointerCapturing(forDebugName) {
|
|
85
|
-
const pointerCapturingFn = useContext(PointerCapturingContext);
|
|
86
|
-
const control = useMemo(() => {
|
|
87
|
-
return pointerCapturingFn(forDebugName);
|
|
88
|
-
}, [forDebugName, pointerCapturingFn]);
|
|
89
|
-
useEffect(() => {
|
|
90
|
-
return () => {
|
|
91
|
-
// force release on unmount
|
|
92
|
-
control.forceRelease();
|
|
93
|
-
};
|
|
94
|
-
}, [control]);
|
|
95
|
-
return control.capturing;
|
|
96
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import styled from 'styled-components';
|
|
3
|
-
const Container = styled.div `
|
|
4
|
-
--colors-panel-1: red;
|
|
5
|
-
`;
|
|
6
|
-
const ProvideTheme = (props) => {
|
|
7
|
-
return React.createElement(Container, null, props.children);
|
|
8
|
-
};
|
|
9
|
-
export default ProvideTheme;
|
package/dist/UIRoot/UIRoot.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import getStudio from '@tomorrowevening/theatre-studio/getStudio';
|
|
2
|
-
import { usePrism, useVal } from '@tomorrowevening/theatre-react';
|
|
3
|
-
import { val } from '@tomorrowevening/theatre-dataverse';
|
|
4
|
-
import React, { useEffect } from 'react';
|
|
5
|
-
import styled, { createGlobalStyle } from 'styled-components';
|
|
6
|
-
import PanelsRoot from './PanelsRoot';
|
|
7
|
-
import GlobalToolbar from '@tomorrowevening/theatre-studio/toolbars/GlobalToolbar';
|
|
8
|
-
import useRefAndState from '@tomorrowevening/theatre-studio/utils/useRefAndState';
|
|
9
|
-
import { PortalContext } from 'reakit';
|
|
10
|
-
import useKeyboardShortcuts from './useKeyboardShortcuts';
|
|
11
|
-
import PointerEventsHandler from '@tomorrowevening/theatre-studio/uiComponents/PointerEventsHandler';
|
|
12
|
-
import TooltipContext from '@tomorrowevening/theatre-studio/uiComponents/Popover/TooltipContext';
|
|
13
|
-
import { ProvidePointerCapturing } from './PointerCapturing';
|
|
14
|
-
import { MountAll } from '@tomorrowevening/theatre-studio/utils/renderInPortalInContext';
|
|
15
|
-
import { PortalLayer, ProvideStyles } from '@tomorrowevening/theatre-studio/css';
|
|
16
|
-
import { createTheatreInternalLogger, TheatreLoggerLevel, } from '@tomorrowevening/theatre-shared/logger';
|
|
17
|
-
import { ProvideLogger } from '@tomorrowevening/theatre-studio/uiComponents/useLogger';
|
|
18
|
-
import { Notifier } from '@tomorrowevening/theatre-studio/notify';
|
|
19
|
-
const MakeRootHostContainStatic = typeof window !== 'undefined'
|
|
20
|
-
? createGlobalStyle `
|
|
21
|
-
:host {
|
|
22
|
-
contain: strict;
|
|
23
|
-
}
|
|
24
|
-
`
|
|
25
|
-
: {};
|
|
26
|
-
const Container = styled(PointerEventsHandler) `
|
|
27
|
-
z-index: 50;
|
|
28
|
-
position: fixed;
|
|
29
|
-
inset: 0;
|
|
30
|
-
|
|
31
|
-
&.invisible {
|
|
32
|
-
pointer-events: none !important;
|
|
33
|
-
opacity: 0;
|
|
34
|
-
transform: translateX(1000000px);
|
|
35
|
-
}
|
|
36
|
-
`;
|
|
37
|
-
const INTERNAL_LOGGING = /Playground.+Theatre\.js/.test((typeof document !== 'undefined' ? document?.title : null) ?? '');
|
|
38
|
-
export default function UIRoot(props) {
|
|
39
|
-
const studio = getStudio();
|
|
40
|
-
const [portalLayerRef, portalLayer] = useRefAndState(undefined);
|
|
41
|
-
const uiRootLogger = createTheatreInternalLogger();
|
|
42
|
-
uiRootLogger.configureLogging({
|
|
43
|
-
min: TheatreLoggerLevel.DEBUG,
|
|
44
|
-
dev: INTERNAL_LOGGING,
|
|
45
|
-
internal: INTERNAL_LOGGING,
|
|
46
|
-
});
|
|
47
|
-
const logger = uiRootLogger.getLogger().named('Theatre.js UIRoot');
|
|
48
|
-
useKeyboardShortcuts();
|
|
49
|
-
const visiblityState = useVal(studio.atomP.ahistoric.visibilityState);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (visiblityState === 'everythingIsHidden') {
|
|
52
|
-
console.warn(`Theatre.js Studio is hidden. Use the keyboard shortcut 'alt + \\' to restore the studio, or call studio.ui.restore().`);
|
|
53
|
-
}
|
|
54
|
-
return () => { };
|
|
55
|
-
}, [visiblityState]);
|
|
56
|
-
const inside = usePrism(() => {
|
|
57
|
-
const visiblityState = val(studio.atomP.ahistoric.visibilityState);
|
|
58
|
-
const initialised = val(studio.atomP.ephemeral.initialised);
|
|
59
|
-
return !initialised ? null : (React.createElement(ProvideLogger, { logger: logger },
|
|
60
|
-
React.createElement(TooltipContext, null,
|
|
61
|
-
React.createElement(ProvidePointerCapturing, null,
|
|
62
|
-
React.createElement(MountExtensionComponents, null),
|
|
63
|
-
React.createElement(PortalContext.Provider, { value: portalLayer },
|
|
64
|
-
React.createElement(ProvideStyles, { target: window.__IS_VISUAL_REGRESSION_TESTING === true
|
|
65
|
-
? undefined
|
|
66
|
-
: props.containerShadow },
|
|
67
|
-
React.createElement(React.Fragment, null,
|
|
68
|
-
React.createElement(MakeRootHostContainStatic, null),
|
|
69
|
-
React.createElement(Container, { className: visiblityState === 'everythingIsHidden' ? 'invisible' : '' },
|
|
70
|
-
React.createElement(PortalLayer, { ref: portalLayerRef }),
|
|
71
|
-
React.createElement(GlobalToolbar, null),
|
|
72
|
-
React.createElement(PanelsRoot, null),
|
|
73
|
-
React.createElement(Notifier, null)))))))));
|
|
74
|
-
}, [studio, portalLayerRef, portalLayer]);
|
|
75
|
-
return inside;
|
|
76
|
-
}
|
|
77
|
-
const MountExtensionComponents = () => {
|
|
78
|
-
return React.createElement(MountAll, null);
|
|
79
|
-
};
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import getStudio from '@tomorrowevening/theatre-studio/getStudio';
|
|
3
|
-
import { cmdIsDown } from '@tomorrowevening/theatre-studio/utils/keyboardUtils';
|
|
4
|
-
import { getSelectedSequence } from '@tomorrowevening/theatre-studio/selectors';
|
|
5
|
-
import { Atom, prism, val } from '@tomorrowevening/theatre-dataverse';
|
|
6
|
-
import memoizeFn from '@tomorrowevening/theatre-shared/utils/memoizeFn';
|
|
7
|
-
let playPauseKeyboardShortcutIsEnabled = true;
|
|
8
|
-
export function __experimental_disblePlayPauseKeyboardShortcut() {
|
|
9
|
-
playPauseKeyboardShortcutIsEnabled = false;
|
|
10
|
-
}
|
|
11
|
-
export function __experimental_enablePlayPauseKeyboardShortcut() {
|
|
12
|
-
playPauseKeyboardShortcutIsEnabled = true;
|
|
13
|
-
}
|
|
14
|
-
export default function useKeyboardShortcuts() {
|
|
15
|
-
const studio = getStudio();
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
const handleKeyDown = (e) => {
|
|
18
|
-
const target = e.composedPath()[0];
|
|
19
|
-
if (target &&
|
|
20
|
-
(target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
if (e.key === 'z' || e.key === 'Z' || e.code === 'KeyZ') {
|
|
24
|
-
if (cmdIsDown(e)) {
|
|
25
|
-
if (e.shiftKey === true) {
|
|
26
|
-
studio.redo();
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
studio.undo();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
else if (e.code === 'Space' &&
|
|
37
|
-
!e.shiftKey &&
|
|
38
|
-
!e.metaKey &&
|
|
39
|
-
!e.altKey &&
|
|
40
|
-
!e.ctrlKey) {
|
|
41
|
-
if (!playPauseKeyboardShortcutIsEnabled)
|
|
42
|
-
return;
|
|
43
|
-
// Control the playback using the `Space` key
|
|
44
|
-
const seq = getSelectedSequence();
|
|
45
|
-
if (seq) {
|
|
46
|
-
if (seq.playing) {
|
|
47
|
-
seq.pause();
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
/*
|
|
51
|
-
* The sequence will be played in its whole length unless all of the
|
|
52
|
-
* following conditions are met:
|
|
53
|
-
* 1. the focus range is set and enabled
|
|
54
|
-
* 2. the playback starts within the focus range.
|
|
55
|
-
*/
|
|
56
|
-
const { projectId, sheetId } = seq.address;
|
|
57
|
-
/*
|
|
58
|
-
* The value of this prism is an array that contains the
|
|
59
|
-
* range of the playback (start and end), and a boolean that is
|
|
60
|
-
* `true` if the playback should be played within that range.
|
|
61
|
-
*/
|
|
62
|
-
const controlledPlaybackStateD = prism(() => {
|
|
63
|
-
const focusRange = val(getStudio().atomP.ahistoric.projects.stateByProjectId[projectId].stateBySheetId[sheetId].sequence.focusRange);
|
|
64
|
-
// Determines whether the playback should be played
|
|
65
|
-
// within the focus range.
|
|
66
|
-
const shouldFollowFocusRange = prism.memo('shouldFollowFocusRange', () => {
|
|
67
|
-
const posBeforePlay = seq.position;
|
|
68
|
-
if (focusRange) {
|
|
69
|
-
const withinRange = posBeforePlay >= focusRange.range.start &&
|
|
70
|
-
posBeforePlay <= focusRange.range.end;
|
|
71
|
-
if (focusRange.enabled) {
|
|
72
|
-
if (withinRange) {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
}, []);
|
|
87
|
-
if (shouldFollowFocusRange &&
|
|
88
|
-
focusRange &&
|
|
89
|
-
focusRange.enabled) {
|
|
90
|
-
return {
|
|
91
|
-
range: [focusRange.range.start, focusRange.range.end],
|
|
92
|
-
isFollowingARange: true,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
const sequenceLength = val(seq.pointer.length);
|
|
97
|
-
return { range: [0, sequenceLength], isFollowingARange: false };
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
const playbackPromise = seq.playDynamicRange(prism(() => val(controlledPlaybackStateD).range), getStudio().ticker);
|
|
101
|
-
const playbackStateBox = getPlaybackStateBox(seq);
|
|
102
|
-
void playbackPromise.finally(() => {
|
|
103
|
-
playbackStateBox.set(undefined);
|
|
104
|
-
});
|
|
105
|
-
playbackStateBox.set(controlledPlaybackStateD);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// alt + \
|
|
113
|
-
else if (e.altKey &&
|
|
114
|
-
(e.key === '\\' || e.code === 'Backslash' || e.code === 'IntlBackslash')) {
|
|
115
|
-
studio.transaction(({ stateEditors, drafts }) => {
|
|
116
|
-
stateEditors.studio.ahistoric.setVisibilityState(drafts.ahistoric.visibilityState === 'everythingIsHidden'
|
|
117
|
-
? 'everythingIsVisible'
|
|
118
|
-
: 'everythingIsHidden');
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
e.preventDefault();
|
|
125
|
-
e.stopPropagation();
|
|
126
|
-
};
|
|
127
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
128
|
-
return () => {
|
|
129
|
-
window.removeEventListener('keydown', handleKeyDown);
|
|
130
|
-
};
|
|
131
|
-
}, []);
|
|
132
|
-
}
|
|
133
|
-
const getPlaybackStateBox = memoizeFn((sequence) => {
|
|
134
|
-
const box = new Atom(undefined);
|
|
135
|
-
return box;
|
|
136
|
-
});
|
|
137
|
-
/*
|
|
138
|
-
* A memoized function that returns a prism with a boolean value.
|
|
139
|
-
* This value is set to `true` if:
|
|
140
|
-
* 1. the playback is playing and using the focus range instead of the whole sequence
|
|
141
|
-
* 2. the playback is stopped, but would use the focus range if it were started.
|
|
142
|
-
*/
|
|
143
|
-
export const getIsPlayheadAttachedToFocusRange = memoizeFn((sequence) => prism(() => {
|
|
144
|
-
const controlledPlaybackState = getPlaybackStateBox(sequence).prism.getValue();
|
|
145
|
-
if (controlledPlaybackState) {
|
|
146
|
-
return controlledPlaybackState.getValue().isFollowingARange;
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
const { projectId, sheetId } = sequence.address;
|
|
150
|
-
const focusRange = val(getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]
|
|
151
|
-
.stateBySheetId[sheetId].sequence.focusRange);
|
|
152
|
-
if (!focusRange || !focusRange.enabled)
|
|
153
|
-
return false;
|
|
154
|
-
const pos = val(sequence.pointer.position);
|
|
155
|
-
const withinRange = pos >= focusRange.range.start && pos <= focusRange.range.end;
|
|
156
|
-
return withinRange;
|
|
157
|
-
}
|
|
158
|
-
}));
|
package/dist/checkForUpdates.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { pointerToPrism, val } from '@tomorrowevening/theatre-dataverse';
|
|
2
|
-
import { defer } from '@tomorrowevening/theatre-shared/utils/defer';
|
|
3
|
-
import getStudio from './getStudio';
|
|
4
|
-
const UPDATE_CHECK_INTERVAL = 30 * 60 * 1000; // check for updates every 30 minutes
|
|
5
|
-
const TIME_TO_WAIT_ON_ERROR = 1000 * 60 * 60; // an hour
|
|
6
|
-
/**
|
|
7
|
-
* Returns a promise that will resolve when the UI is visible. If the UI is hidden, it'll
|
|
8
|
-
* wait for it to become visible.
|
|
9
|
-
*/
|
|
10
|
-
async function waitTilUIIsVisible() {
|
|
11
|
-
const visibilityStatePt = getStudio().atomP.ahistoric.visibilityState;
|
|
12
|
-
if (val(visibilityStatePt) === 'everythingIsVisible')
|
|
13
|
-
return;
|
|
14
|
-
const deferred = defer();
|
|
15
|
-
const unsub = pointerToPrism(visibilityStatePt).onStale(() => {
|
|
16
|
-
const newVal = val(visibilityStatePt);
|
|
17
|
-
if (newVal === 'everythingIsVisible') {
|
|
18
|
-
unsub();
|
|
19
|
-
deferred.resolve(undefined);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
return deferred.promise;
|
|
23
|
-
}
|
|
24
|
-
export default async function checkForUpdates() {
|
|
25
|
-
if (process.env.BUILT_FOR_PLAYGROUND === 'true') {
|
|
26
|
-
// Build for playground. Skipping update check
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (process.env.THEATRE_VERSION?.match(/COMPAT/)) {
|
|
30
|
-
// Built for compat tests. Skipping update check
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// let's wait a bit in case the user has called for the UI to be hidden.
|
|
34
|
-
await wait(500);
|
|
35
|
-
await waitTilUIIsVisible();
|
|
36
|
-
while (true) {
|
|
37
|
-
const state = val(getStudio().atomP.ahistoric.updateChecker);
|
|
38
|
-
if (state) {
|
|
39
|
-
if (state.result !== 'error') {
|
|
40
|
-
const lastChecked = state.lastChecked;
|
|
41
|
-
const now = Date.now();
|
|
42
|
-
const timeElapsedSinceLastCheckedForUpdate = Math.abs(now - lastChecked);
|
|
43
|
-
// doing Math.max in case the clock has shifted
|
|
44
|
-
if (timeElapsedSinceLastCheckedForUpdate < UPDATE_CHECK_INTERVAL) {
|
|
45
|
-
await wait(UPDATE_CHECK_INTERVAL - timeElapsedSinceLastCheckedForUpdate);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
const response = await fetch(new Request(`https://updates.theatrejs.com/updates/${process.env.THEATRE_VERSION}`));
|
|
51
|
-
if (response.ok) {
|
|
52
|
-
const json = await response.json();
|
|
53
|
-
if (!isValidUpdateCheckerResponse(json)) {
|
|
54
|
-
throw new Error(`Bad response`);
|
|
55
|
-
}
|
|
56
|
-
getStudio().transaction(({ drafts }) => {
|
|
57
|
-
drafts.ahistoric.updateChecker = {
|
|
58
|
-
lastChecked: Date.now(),
|
|
59
|
-
result: { ...json },
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
await wait(1000);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
throw new Error(`HTTP Error ${response.statusText}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
// TODO log an error here
|
|
70
|
-
await wait(TIME_TO_WAIT_ON_ERROR);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
75
|
-
function isValidUpdateCheckerResponse(json) {
|
|
76
|
-
if (typeof json !== 'object')
|
|
77
|
-
return false;
|
|
78
|
-
const obj = json;
|
|
79
|
-
if (typeof obj['hasUpdates'] !== 'boolean')
|
|
80
|
-
return false;
|
|
81
|
-
// could use a runtime type checker but not important yet
|
|
82
|
-
return ((obj.hasUpdates === true &&
|
|
83
|
-
typeof obj.newVersion === 'string' &&
|
|
84
|
-
typeof obj.releasePage === 'string') ||
|
|
85
|
-
obj.hasUpdates === false);
|
|
86
|
-
}
|
package/dist/css.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { lighten } from 'polished';
|
|
2
|
-
import { css } from 'styled-components';
|
|
3
|
-
import styled, { createGlobalStyle, StyleSheetManager } from 'styled-components';
|
|
4
|
-
import React, { useLayoutEffect, useState } from 'react';
|
|
5
|
-
import ReactDOM from 'react-dom';
|
|
6
|
-
import { PortalContext } from 'reakit';
|
|
7
|
-
import useRefAndState from './utils/useRefAndState';
|
|
8
|
-
/**
|
|
9
|
-
* This CSS string is used to correctly set pointer-events on an element
|
|
10
|
-
* when the pointer is dragging something.
|
|
11
|
-
* Naming explanation: "NormalMode" as opposed to dragging mode.
|
|
12
|
-
*
|
|
13
|
-
* @see PointerEventsHandler - the place that sets `.normal` on #pointer-root
|
|
14
|
-
*/
|
|
15
|
-
export const pointerEventsAutoInNormalMode = css `
|
|
16
|
-
#pointer-root & {
|
|
17
|
-
pointer-events: none;
|
|
18
|
-
}
|
|
19
|
-
#pointer-root.normal & {
|
|
20
|
-
pointer-events: auto;
|
|
21
|
-
}
|
|
22
|
-
`;
|
|
23
|
-
export const theme = {
|
|
24
|
-
panel: {
|
|
25
|
-
bg: `#282b2f`,
|
|
26
|
-
head: {
|
|
27
|
-
title: {
|
|
28
|
-
color: `#bbb`,
|
|
29
|
-
},
|
|
30
|
-
punctuation: {
|
|
31
|
-
color: `#808080`,
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
body: {
|
|
35
|
-
compoudThing: {
|
|
36
|
-
label: {
|
|
37
|
-
get color() {
|
|
38
|
-
return lighten(0.6, theme.panel.bg);
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
export const panelUtils = {
|
|
46
|
-
panelBorder: `2px solid #1f1f1f`,
|
|
47
|
-
};
|
|
48
|
-
const GlobalStyle = typeof window !== 'undefined'
|
|
49
|
-
? createGlobalStyle `
|
|
50
|
-
:host {
|
|
51
|
-
all: initial;
|
|
52
|
-
color: white;
|
|
53
|
-
font: 11px -apple-system, BlinkMacSystemFont, Segoe WPC, Segoe Editor,
|
|
54
|
-
HelveticaNeue-Light, Ubuntu, Droid Sans, sans-serif;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
* {
|
|
58
|
-
padding: 0;
|
|
59
|
-
margin: 0;
|
|
60
|
-
font-size: 100%;
|
|
61
|
-
font: inherit;
|
|
62
|
-
vertical-align: baseline;
|
|
63
|
-
list-style: none;
|
|
64
|
-
}
|
|
65
|
-
`
|
|
66
|
-
: {};
|
|
67
|
-
export const PortalLayer = styled.div `
|
|
68
|
-
z-index: 51;
|
|
69
|
-
position: fixed;
|
|
70
|
-
top: 0px;
|
|
71
|
-
right: 0px;
|
|
72
|
-
bottom: 0px;
|
|
73
|
-
left: 0px;
|
|
74
|
-
pointer-events: none;
|
|
75
|
-
`;
|
|
76
|
-
export const ProvideStyles = (props) => {
|
|
77
|
-
return (React.createElement(StyleSheetManager, { disableVendorPrefixes: true, target: props.target },
|
|
78
|
-
React.createElement(React.Fragment, null,
|
|
79
|
-
React.createElement(GlobalStyle, null),
|
|
80
|
-
props.children)));
|
|
81
|
-
};
|
|
82
|
-
export function withStyledShadow(Comp) {
|
|
83
|
-
return (props) => (React.createElement(ProvideStyledShadow, null,
|
|
84
|
-
React.createElement(Comp, { ...props })));
|
|
85
|
-
}
|
|
86
|
-
const ProvideStyledShadow = (props) => {
|
|
87
|
-
const [template, ref] = useState(null);
|
|
88
|
-
const [shadowRoot, setShadowRoot] = useState(null);
|
|
89
|
-
useLayoutEffect(() => {
|
|
90
|
-
if (!template)
|
|
91
|
-
return;
|
|
92
|
-
const { parentNode } = template;
|
|
93
|
-
if (!parentNode)
|
|
94
|
-
return;
|
|
95
|
-
const hadShadowRoot =
|
|
96
|
-
// @ts-ignore
|
|
97
|
-
!!parentNode.shadowRoot;
|
|
98
|
-
const shadowRoot = hadShadowRoot
|
|
99
|
-
? // @ts-ignore
|
|
100
|
-
parent.shadowRoot
|
|
101
|
-
: parentNode.attachShadow({
|
|
102
|
-
mode: 'open',
|
|
103
|
-
});
|
|
104
|
-
setShadowRoot(shadowRoot);
|
|
105
|
-
// no need to cleanup. The parent will be removed anyway if cleanup
|
|
106
|
-
// is needed.
|
|
107
|
-
}, [template]);
|
|
108
|
-
const [portalLayerRef, portalLayer] = useRefAndState(undefined);
|
|
109
|
-
if (!shadowRoot) {
|
|
110
|
-
return (React.createElement("template", { ref: ref, "shadow-root": 'open' }, props.children));
|
|
111
|
-
}
|
|
112
|
-
return ReactDOM.createPortal(React.createElement(ProvideStyles, { target: shadowRoot },
|
|
113
|
-
React.createElement(React.Fragment, null,
|
|
114
|
-
React.createElement(PortalLayer, { ref: portalLayerRef }),
|
|
115
|
-
React.createElement(PortalContext.Provider, { value: portalLayer }, props.children))), shadowRoot);
|
|
116
|
-
};
|