artcraft: drop apps PageScene shim layer; consumers point at ui-pagescene directly

Now that PageEditor, PageScene, host comps (Controls3D, ControlsTopButtons,
AssetMenu, ItemElement), TopBar, ErrorDialog, ApiManager classes,
backgroundLoadedMedia, and ImageTo3DExperience all import their store,
enums, models, contexts, hooks, actions, drag-and-drop, and comps
directly from @storyteller/ui-pagescene, the apps shim files have no
remaining consumers.

Deleted shims:
- pages/PageScene/{PageSceneStore,sceneMetadata}.ts
- pages/PageScene/{enums,models}/index.ts
- pages/PageScene/actions/* (12 files)
- pages/PageScene/hooks/* (4 files)
- pages/PageScene/contexts/EngineContext/* (3 files)
- pages/PageScene/DragAndDrop/DndAsset.ts
- pages/PageScene/comps/{DragComponent,PrecisionSelector,FocalLengthDisplay,
  AspectRatioMenu,Outliner,ControlPanelSceneObject,SceneContainer,
  PreviewEngineCamera}/ (and their index/impl files)
- pages/PageScene/comps/{EngineCanvases,PoseModeSelector,EditorLoadingBar,
  PreviewImages,OnboardingHelper}.tsx

Also deleted orphan files left over from earlier shimming that no caller
referenced anymore: SceneContainer/{Letterbox.tsx,helpers.ts},
ControlPanelSceneObject/{DraggablePrecisionMutator.tsx,utils/*}.

Apps PageScene now contains only host-only files: PageScene.tsx,
PageEditor.tsx, TabbedPages.tsx, useTauriPageSceneAdapter.ts,
GlobalSettingsManager.tsx, engineLifecycle.ts, signals/demoAssets/,
plus the still-host-coupled comps AssetMenu, Controls3D,
ControlsTopButtons.

Typecheck stays at the 60-error pre-existing baseline.
nx build ui-pagescene clean.
This commit is contained in:
Tanish Manku committed 2026-05-08 16:29:49 -07:00
1 parent ca4baf243c
commit ebb0341347
85 files changed
+85 -535

No files matched your search

@@ -1,6 +1,6 @@
import { ApiManager, ApiResponse } from "./ApiManager";
import { BetaKey } from "~/models";
import { Pagination } from "~/pages/PageScene/models";
import type { Pagination } from "@storyteller/ui-pagescene";
export class BetaKeysApi extends ApiManager {
public CreateBetaKey({
@@ -1,9 +1,9 @@
import {
import type {
MediaFile,
MediaInfo,
Pagination,
PaginationInfinite,
} from "~/pages/PageScene/models";
} from "@storyteller/ui-pagescene";
import { ApiManager, ApiResponse } from "./ApiManager";
import { authentication } from "~/signals";
import type { Property } from "csstype";
@@ -1,5 +1,5 @@
import { ApiManager, ApiResponse } from "./ApiManager";
import { Prompts } from "~/pages/PageScene/models";
import type { Prompts } from "@storyteller/ui-pagescene";
export class PromptsApi extends ApiManager {
public GetPromptsByToken({
@@ -1,5 +1,5 @@
import { ApiManager, ApiResponse } from "./ApiManager";
import { GenerateTtsAudioErrorType } from "~/pages/PageScene/enums";
import { GenerateTtsAudioErrorType } from "@storyteller/ui-pagescene";
import { Visibility } from "~/enums";
export interface GenerateTtsAudioRequest {
@@ -1,10 +1,10 @@
import { ApiManager, ApiResponse } from "./ApiManager";
import {
import type {
Pagination,
UserBookmarkBatch,
UserBookmarkByEntity,
UserBookmarkByUser,
} from "~/pages/PageScene/models";
} from "@storyteller/ui-pagescene";
import { authentication } from "~/signals";
export enum ScopedEntityTypes {
@@ -1,5 +1,5 @@
import { ApiManager, ApiResponse } from "./ApiManager";
import { Pagination } from "~/pages/PageScene/models";
import type { Pagination } from "@storyteller/ui-pagescene";
import { authentication } from "~/signals";
import { ZsDataset } from "~/models/Dataset";
@@ -1,7 +1,7 @@
import { ApiManager, ApiResponse } from "./ApiManager";
import { authentication } from "~/signals";
import { Weight } from "~/models";
import { Pagination, PaginationInfinite } from "~/pages/PageScene/models";
import type { Pagination, PaginationInfinite } from "@storyteller/ui-pagescene";
import {
FilterEngineCategories,
FilterMediaClasses,
@@ -25,11 +25,10 @@ import {
import { toast } from "react-hot-toast";
import { v4 as uuidv4 } from "uuid";
import { useTabStore } from "../../pages/Stores/TabState";
import { addObject } from "../../pages/PageScene/actions";
import { getActiveEditor } from "../../pages/PageScene/contexts/EngineContext";
import { addObject, getActiveEditor } from "@storyteller/ui-pagescene";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { set3DPageMounted } from "../../pages/PageScene/engineLifecycle";
import { AssetType } from "~/enums";
import type { MediaItem } from "../../pages/PageScene/models";
import { SPLAT_MODELS } from "@storyteller/model-list";
import {
ClassyModelSelector,
@@ -3,7 +3,7 @@ import { useShallow } from "zustand/shallow";
import { Modal } from "@storyteller/ui-modal";
import { Button } from "@storyteller/ui-button";
import { usePageSceneStore } from "~/pages/PageScene/PageSceneStore";
import { usePageSceneStore } from "@storyteller/ui-pagescene";
export function ErrorDialog() {
const { showErrorDialog, errorDialogTitle, errorDialogMessage, setShowErrorDialog } =
@@ -4,7 +4,7 @@ import { useSignals } from "@preact/signals-react/runtime";
import { faPencil, faSpinnerThird } from "@fortawesome/pro-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { scene, signalScene, authentication } from "~/signals";
import { usePageSceneStore } from "~/pages/PageScene/PageSceneStore";
import { usePageSceneStore } from "@storyteller/ui-pagescene";
import { Input } from "@storyteller/ui-input";
import { MediaFilesApi } from "~/Classes/ApiManager/MediaFilesApi";
import { getCreatorIcon, ModelCreator } from "@storyteller/model-list";
@@ -83,7 +83,7 @@ import { APP_DESCRIPTORS, goToApp } from "~/config/appMenu";
import { useStoryboardStore } from "~/pages/PageStoryboard";
import { useSceneStore } from "@storyteller/ui-pagedraw";
import { set3DPageMounted } from "~/pages/PageScene/engineLifecycle";
import { usePageSceneStore } from "~/pages/PageScene/PageSceneStore";
import { usePageSceneStore } from "@storyteller/ui-pagescene";
import { useImageTo3DStore } from "~/pages/PageImageTo3DObject/ImageTo3DStore";
import { useImageTo3DWorldStore } from "~/pages/PageImageTo3DWorld/ImageTo3DWorldStore";
import { useRemoveBackgroundStore } from "~/pages/PageRemoveBackground/RemoveBackgroundStore";
@@ -1,2 +0,0 @@
import { dragAndDrop } from "@storyteller/ui-pagescene";
export default dragAndDrop;
@@ -3,38 +3,41 @@ import { useSignals } from "@preact/signals-react/runtime";
import { TopBar } from "~/components";
import { Controls3D } from "./comps/Controls3D";
import { ControlsTopButtons } from "./comps/ControlsTopButtons";
import { ControlPanelSceneObject } from "./comps/ControlPanelSceneObject";
import { PreviewEngineCamera } from "./comps/PreviewEngineCamera";
import { authentication, pageHeight, pageWidth } from "~/signals";
import { PoseModeSelector } from "./comps/PoseModeSelector";
import { TabbedPages } from "./TabbedPages";
import { DomLevels } from "~/pages/PageScene/PageSceneStore";
import { setCameraAspect } from "@storyteller/ui-pagescene";
import { GridVisibleChangedEvent, pickDropPosition } from "@storyteller/ui-pagescene";
import { EditorCanvas } from "./comps/EngineCanvases";
import { SceneContainer } from "./comps/SceneContainer";
import { useEditorCanvas } from "@storyteller/ui-pagescene";
import { useFreeCam } from "@storyteller/ui-pagescene";
import { useViewportPointer } from "@storyteller/ui-pagescene";
import { useViewportKeyboard } from "@storyteller/ui-pagescene";
import { Outliner } from "./comps/Outliner";
import { CameraAspectRatio } from "./enums";
import {
CameraAspectRatio,
ControlPanelSceneObject,
DomLevels,
EditorCanvas,
EngineContext,
FocalLengthDisplay,
GridVisibleChangedEvent,
OnboardingHelper,
Outliner,
PoseModeSelector,
PreviewEngineCamera,
SceneContainer,
addCharacter,
addObject,
pickDropPosition,
setCameraAspect,
useEditorCanvas,
useFreeCam,
usePageSceneStore,
useViewportKeyboard,
useViewportPointer,
} from "@storyteller/ui-pagescene";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { PromptBox3D, commonToCameraAspect } from "@storyteller/ui-promptbox";
import { PopoverItem } from "@storyteller/ui-popover";
import { LoadingDots } from "@storyteller/ui-loading";
import { OnboardingHelper } from "./comps/OnboardingHelper";
import { FocalLengthDisplay } from "./comps/FocalLengthDisplay/FocalLengthDisplay";
import { uploadImage } from "~/components/reusable/UploadModalMedia/uploadImage";
import { EngineContext } from "@storyteller/ui-pagescene";
import { uploadPlaneFromMediaToken } from "~/components/reusable/UploadModalMedia/uploadPlane";
import { addObject, addCharacter } from "@storyteller/ui-pagescene";
import { usePageSceneStore } from "./PageSceneStore";
import { AssetType, AUTH_STATUS } from "~/enums";
import { v4 as uuidv4 } from "uuid";
import { MediaItem } from "~/pages/PageScene/models";
import { UploaderState } from "~/models";
import {
GalleryItem,
@@ -1,16 +1,18 @@
import { DragComponent } from "~/pages/PageScene/comps/DragComponent/DragComponent";
import { EngineProvider } from "@storyteller/ui-pagescene";
import {
DragComponent,
EditorLoadingBar,
EngineProvider,
PrecisionSelector,
} from "@storyteller/ui-pagescene";
import { useTabStore } from "~/pages/Stores/TabState";
import { useActiveJobs } from "~/hooks/useActiveJobs";
import { useBackgroundLoadingMedia } from "~/hooks/useBackgroundLoadingMedia";
import { ErrorDialog } from "~/components";
import { toast, Toaster } from "@storyteller/ui-toaster";
import { EditorLoadingBar } from "./comps/EditorLoadingBar";
import { useSignals } from "@preact/signals-react/runtime";
import { useEffect, useState } from "react";
import * as gpu from "detect-gpu";
import { UsersApi } from "~/Classes/ApiManager";
import { PrecisionSelector } from "./comps/PrecisionSelector/PrecisionSelector";
import { PageEditor } from "~/pages/PageScene/PageEditor";
import { GalleryDragComponent } from "@storyteller/ui-gallery-modal";
import {
@@ -1,27 +0,0 @@
// Re-export shim. The Zustand store now lives in
// @storyteller/ui-pagescene; this file exists so importers across
// artcraft (and PageScene's own files still in apps/) can keep their
// existing import paths during the staged lib extraction. Once every
// caller imports from `@storyteller/ui-pagescene` directly, this file
// can be deleted.
export {
usePageSceneStore,
DomLevels,
} from "@storyteller/ui-pagescene";
export type {
Camera,
FocalLengthDragging,
SceneObject,
SceneObjectKind,
OutlinerItem,
ObjectPanelObject,
DragPosition,
PrecisionSelectorCoords,
SelectedSceneObject,
TransformMode,
TransformSpace,
PoseMode,
HotkeyStatus,
EditorLoader,
} from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { addCharacter } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { addObject } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { addShape } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { deleteObject } from "@storyteller/ui-pagescene";
@@ -1,11 +0,0 @@
export * from "./addObject";
export * from "./addCharacter";
export * from "./addShape";
export * from "./deleteObject";
export * from "./selectObject";
export * from "./setTransformMode";
export * from "./setCameraAspect";
export * from "./setObjectColor";
export * from "./toggleObjectLock";
export * from "./toggleObjectVisibility";
export * from "./transformObject";
@@ -1 +0,0 @@
export { selectObject, deselectObject } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { setCameraAspect } from "@storyteller/ui-pagescene";
@@ -1,2 +0,0 @@
export { setObjectColor, beginColorSession } from "@storyteller/ui-pagescene";
export type { ColorSession } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { setTransformMode } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { toggleObjectLock } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { toggleObjectVisibility } from "@storyteller/ui-pagescene";
@@ -1,2 +0,0 @@
export { beginTransformSession } from "@storyteller/ui-pagescene";
export type { TransformSession } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { AspectRatioMenu } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export * from "./AspectRatioMenu";
@@ -1 +0,0 @@
export * from "./AspectRatioMenu";
@@ -3,7 +3,7 @@ import { Tooltip } from "~/components";
import { Button } from "@storyteller/ui-button";
import { useState } from "react";
import { AssetModal } from "./AssetModal";
import { usePageSceneStore } from "../../PageSceneStore";
import { usePageSceneStore } from "@storyteller/ui-pagescene";
export const AssetMenu = () => {
const [isModalOpen, setIsModalOpen] = useState(false);
@@ -34,8 +34,8 @@ import {
demoMemeItems,
} from "../../signals";
import { useShallow } from "zustand/shallow";
import { usePageSceneStore } from "../../PageSceneStore";
import { MediaItem } from "../../models";
import { usePageSceneStore } from "@storyteller/ui-pagescene";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { useUserObjects, useFeaturedObjects } from "./hooks";
import { FilterEngineCategories, FilterMediaType } from "~/enums";
import { twMerge } from "tailwind-merge";
@@ -1,5 +1,5 @@
import { useCallback, useEffect, useState, useRef } from "react";
import { FetchStatus } from "~/pages/PageScene/enums";
import { FetchStatus } from "@storyteller/ui-pagescene";
import { FetchMediaItemStates, fetchFeaturedMediaItems } from "../utilities";
import { FilterEngineCategories, FilterMediaType } from "~/enums";
import { MAX_FAILED_FETCHES } from "~/constants";
@@ -1,5 +1,5 @@
import { useCallback, useState, useRef } from "react";
import { FetchStatus } from "~/pages/PageScene/enums";
import { FetchStatus } from "@storyteller/ui-pagescene";
import { FetchMediaItemStates, fetchUserMediaItems } from "../utilities";
import { FilterEngineCategories, FilterMediaType } from "~/enums";
@@ -1,6 +1,6 @@
// TODO: Move into shared component.
import { useContext } from "react";
import { MediaItem } from "~/pages/PageScene/models";
import type { MediaItem } from "@storyteller/ui-pagescene";
import {
dragAndDrop as DndAsset,
EngineContext,
@@ -1,5 +1,5 @@
import { ItemElement } from "./ItemElement";
import { MediaItem } from "~/pages/PageScene/models";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { LoadingDots } from "@storyteller/ui-loading";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faEmptySet } from "@fortawesome/pro-solid-svg-icons";
@@ -1,12 +1,12 @@
import { FilterEngineCategories, FilterMediaType, ToastTypes } from "~/enums";
import { addToast } from "~/signals";
import { FetchStatus } from "~/pages/PageScene/enums";
import { FetchStatus } from "@storyteller/ui-pagescene";
import { MediaFilesApi } from "~/Classes/ApiManager";
import {
import type {
MediaItem,
Pagination,
PaginationInfinite,
} from "~/pages/PageScene/models";
} from "@storyteller/ui-pagescene";
import { responseMapping } from "./misc";
@@ -1,6 +1,6 @@
import { AssetType, FilterEngineCategories } from "~/enums";
import { FetchStatus } from "~/pages/PageScene/enums";
import { MediaInfo, MediaItem } from "~/pages/PageScene/models";
import { FetchStatus } from "@storyteller/ui-pagescene";
import type { MediaInfo, MediaItem } from "@storyteller/ui-pagescene";
import { BucketConfig } from "~/api/BucketConfig";
export const isAnyStatusFetching = (statuses: FetchStatus[]): boolean => {
@@ -1 +0,0 @@
export { ControlPanelSceneObject } from "@storyteller/ui-pagescene";
@@ -1,100 +0,0 @@
import { useCallback, useRef } from "react";
import { twMerge } from "tailwind-merge";
import { usePageSceneStore } from "~/pages/PageScene/PageSceneStore";
const DEFAULT_PRECISIONS = [
10,
1,
0.1,
0.01,
0.001
]
export const DraggablePrecisionMutator = ({
precisions = DEFAULT_PRECISIONS,
className = "",
initialValue = 0,
onChange = () => { },
onCommit = () => { },
children
}: {
precisions?: number[],
className?: string,
initialValue?: number,
onChange?: (value: number) => void,
onCommit?: (value: number) => void,
children?: React.ReactNode
}) => {
const classes = twMerge(["cursor-ew-resize", className]);
const divRef = useRef<HTMLDivElement>(null);
const isDraggingRef = useRef(false);
const dragStartCoordsRef = useRef<{ x: number, y: number } | null>(null);
const localAdjustedValueRef = useRef(initialValue);
const handleMouseMove = useCallback((event: MouseEvent) => {
const store = usePageSceneStore.getState();
// Ignore mouse movement if we're not even dragging
// or if the menu is still open (we're selecting the precision)
if (!isDraggingRef.current || store.precisionSelectorShowing) {
return;
}
event.stopPropagation();
// Record the initial drag coordinates if they haven't been set yet
if (!dragStartCoordsRef.current) {
dragStartCoordsRef.current = {
x: event.clientX,
y: event.clientY
};
return;
}
// Check how far the mouse has moved, and calculate the updated change
const distX = event.x - dragStartCoordsRef.current.x;
const scaledDistX = distX / 10;
const scaledPrecision = Math.round(scaledDistX) * store.precisionSelectedValue;
localAdjustedValueRef.current = initialValue + scaledPrecision;
// Update the listeners
onChange(localAdjustedValueRef.current);
}, [initialValue, onChange]);
const handleMouseUp = useCallback((event: MouseEvent) => {
event.stopPropagation();
usePageSceneStore.getState().hidePrecisionSelector();
isDraggingRef.current = false;
dragStartCoordsRef.current = null;
// clean up the mouse listeners
document.removeEventListener("mousemove", handleMouseMove);
document.removeEventListener("mouseup", handleMouseUp);
// Call back the commit listener
onCommit(localAdjustedValueRef.current);
}, [handleMouseMove, onCommit]);
const handleMouseDown = useCallback((event: React.MouseEvent) => {
if (event.button !== 0) {
return;
}
event.preventDefault();
event.stopPropagation();
usePageSceneStore.getState().showPrecisionSelector(
{ x: event.clientX, y: event.clientY },
precisions,
);
isDraggingRef.current = true;
document.addEventListener("mousemove", handleMouseMove);
document.addEventListener("mouseup", handleMouseUp);
}, [handleMouseMove, handleMouseUp, precisions]);
return (
<div className={classes} ref={divRef} onMouseDown={handleMouseDown}>
{children}
</div>
)
}
@@ -1 +0,0 @@
export { ControlPanelSceneObject } from './ControlPanelSceneObject';
@@ -1,9 +0,0 @@
export function objectMismatch(
inputObj: Record<string, string>,
refObj: Record<string, number>,
) {
return Object.keys(inputObj).some(
(currentKey: string) =>
parseFloat(inputObj[currentKey]) !== refObj[currentKey],
);
}
@@ -1,36 +0,0 @@
// runs sanitizeNumericInput on each axis, creating a new object of sanitized values
export function sanitize(xyz: Record<string, string>) {
return Object.keys(xyz).reduce(
(obj, currentKey) => {
return {
...obj,
[currentKey]: sanitizeNumericInput(xyz[currentKey].toString()),
};
},
{} as Record<string, number>,
);
}
// clears leading and trailing zeros
function sanitizeNumericInput(input: string): number {
const parts = input.split(".");
const integerPart = parts[0];
const decimalPart = parts[1];
const decimal = decimalPart !== "" ? parseFloat(`.${decimalPart}`) : 0.0;
if (integerPart === undefined) {
return decimal;
}
const integer = parseInt(integerPart);
if (decimalPart === undefined) {
return integer;
}
if (Number(input) > 0) {
return integer + decimal;
}
return integer - decimal;
}
@@ -12,19 +12,16 @@ import { ButtonIconSelect } from "@storyteller/ui-button-icon-select";
import { Button } from "@storyteller/ui-button";
import { Tooltip } from "@storyteller/ui-tooltip";
import { SettingsModal } from "@storyteller/ui-settings-modal";
import { EngineContext } from "@storyteller/ui-pagescene";
import {
EngineContext,
setTransformMode,
usePageSceneStore,
} from "@storyteller/ui-pagescene";
import type { TransformMode } from "@storyteller/ui-pagescene";
import { useContext, useEffect, useState } from "react";
import { useShallow } from "zustand/shallow";
import { usePageSceneStore } from "../../PageSceneStore";
import { useTabStore } from "~/pages/Stores/TabState";
// import { v4 as uuidv4 } from "uuid";
// import { addObject } from "../../signals/objectGroup/addObject";
// import { MediaItem } from "../../models/assets";
// eslint-disable-next-line import/no-unresolved
// import { AssetType } from "~/enums";
import { AssetModal } from "../AssetMenu/AssetModal";
import { setTransformMode } from "@storyteller/ui-pagescene";
import { TransformMode } from "../../PageSceneStore";
import { useSignals } from "@preact/signals-react/runtime";
// eslint-disable-next-line import/no-unresolved
import { setLogoutStates } from "~/signals/authentication/utilities";
@@ -7,7 +7,6 @@ import {
faKeyboard,
faSquare,
} from "@fortawesome/pro-solid-svg-icons";
import { EngineContext } from "~/pages/PageScene/contexts/EngineContext";
import { ToastTypes } from "~/enums";
import { scene, signalScene, authentication, addToast } from "~/signals";
import { ButtonDropdown } from "@storyteller/ui-button-dropdown";
@@ -15,12 +14,15 @@ import { Input } from "@storyteller/ui-input";
import { Button } from "@storyteller/ui-button";
import { LoadUserScenes } from "./LoadUserScenes";
import { getCurrentLocationWithoutParams, isNumberString } from "~/utilities";
import { usePageSceneStore } from "~/pages/PageScene/PageSceneStore";
import { CameraAspectRatio } from "~/pages/PageScene/enums";
import {
CameraAspectRatio,
EngineContext,
getSceneGenerationMetaData,
usePageSceneStore,
} from "@storyteller/ui-pagescene";
import { twMerge } from "tailwind-merge";
import { Help } from "./Help";
import { Modal } from "@storyteller/ui-modal";
import { getSceneGenerationMetaData } from "@storyteller/ui-pagescene";
export const ControlsTopButtons = () => {
useSignals();
@@ -6,7 +6,7 @@ import {
useState,
} from "react";
import dayjs from "dayjs";
import { MediaInfo } from "~/pages/PageScene/models";
import type { MediaInfo } from "@storyteller/ui-pagescene";
import { FilterEngineCategories, ToastTypes } from "~/enums";
import { addToast } from "~/signals";
import { ScenePicker, SceneTypes } from "../ScenePicker";
@@ -7,7 +7,7 @@ import {
} from "react";
import dayjs from "dayjs";
import { MediaInfo } from "~/pages/PageScene/models";
import type { MediaInfo } from "@storyteller/ui-pagescene";
import { FilterEngineCategories, ToastTypes } from "~/enums";
import { ScenePicker, SceneTypes } from "../ScenePicker";
@@ -1 +0,0 @@
export { DragComponent } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { EditorLoadingBar } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { EditorCanvas, CameraViewCanvas } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { FocalLengthDisplay } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { OnboardingHelper, OnboardingHelper as default } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { Outliner } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export * from "./Outliner";
@@ -1 +0,0 @@
export { PoseModeSelector } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { PrecisionSelector } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { PreviewEngineCamera } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export * from "./PreviewEngineCamera";
@@ -1 +0,0 @@
export { PreviewImages } from "@storyteller/ui-pagescene";
@@ -1,63 +0,0 @@
import { twMerge } from "tailwind-merge";
import { usePageSceneStore } from "~/pages/PageScene/PageSceneStore";
import {
calcMatteWidth,
calcMatteHeight,
getMatteOrientation,
MatteOrientation,
} from "./helpers";
export const Letterbox = ({
isShowing,
width,
height,
}: {
isShowing: boolean;
width: number;
height: number;
}) => {
const camAspect = usePageSceneStore((s) => s.cameraAspectRatio);
const matteOri = getMatteOrientation({ camAspect, width, height });
const matteWidth = calcMatteWidth({ matteOri, camAspect, width, height });
const matteHeight = calcMatteHeight({ matteOri, camAspect, width, height });
return (
<div
id="letterbox"
className={twMerge(
"user-select-none pointer-events-none absolute left-0 top-0 flex h-full w-full justify-between",
matteOri === MatteOrientation.TOP_BOTTOM ? "flex-col" : null,
)}
>
<Matte matteOri={matteOri} width={matteWidth} height={matteHeight} />
<Matte matteOri={matteOri} width={matteWidth} height={matteHeight} />
</div>
);
};
const Matte = ({
matteOri,
width,
height,
}: {
matteOri: MatteOrientation;
width?: number;
height?: number;
}) => {
if (matteOri === MatteOrientation.TOP_BOTTOM) {
return (
<div
className="pointer-events-none h-20 w-full bg-black/30 brightness-75"
style={{ height: `${height}px` }}
/>
);
}
return (
<div
className="pointer-events-none h-full w-80 bg-black/30 brightness-75"
style={{ width: `${width}px` }}
/>
);
};
@@ -1 +0,0 @@
export { SceneContainer } from "@storyteller/ui-pagescene";
@@ -1,117 +0,0 @@
import { CameraAspectRatio } from "../../enums";
export enum MatteOrientation {
TOP_BOTTOM,
LEFT_RIGHT,
}
export const getMatteOrientation = ({
camAspect,
width,
height,
}: {
camAspect: CameraAspectRatio;
width: number;
height: number;
}): MatteOrientation => {
switch (camAspect) {
case CameraAspectRatio.SQUARE_1_1: {
return width > height
? MatteOrientation.LEFT_RIGHT
: MatteOrientation.TOP_BOTTOM;
}
case CameraAspectRatio.VERTICAL_9_16: {
return (height / 16) * 9 - width >= 0
? MatteOrientation.TOP_BOTTOM
: MatteOrientation.LEFT_RIGHT;
}
case CameraAspectRatio.VERTICAL_2_3: {
return (height / 3) * 2 - width >= 0
? MatteOrientation.TOP_BOTTOM
: MatteOrientation.LEFT_RIGHT;
}
case CameraAspectRatio.HORIZONTAL_3_2: {
return (width / 3) * 2 - height >= 0
? MatteOrientation.LEFT_RIGHT
: MatteOrientation.TOP_BOTTOM;
}
case CameraAspectRatio.HORIZONTAL_16_9:
default: {
return (width / 16) * 9 - height >= 0
? MatteOrientation.LEFT_RIGHT
: MatteOrientation.TOP_BOTTOM;
}
}
};
export const calcMatteWidth = ({
matteOri,
camAspect,
width,
height,
}: {
matteOri: MatteOrientation;
camAspect: CameraAspectRatio;
width: number;
height: number;
}): number | undefined => {
if (matteOri === MatteOrientation.TOP_BOTTOM) {
return undefined;
}
switch (camAspect) {
case CameraAspectRatio.SQUARE_1_1: {
return (width - height) / 2;
}
case CameraAspectRatio.HORIZONTAL_16_9: {
return (width - (height / 9) * 16) / 2;
}
case CameraAspectRatio.VERTICAL_9_16: {
return (width - (height / 16) * 9) / 2;
}
case CameraAspectRatio.HORIZONTAL_3_2: {
return (width - (height / 2) * 3) / 2;
}
case CameraAspectRatio.VERTICAL_2_3: {
return (width - (height / 3) * 2) / 2;
}
default: {
return undefined;
}
}
};
export const calcMatteHeight = ({
matteOri,
camAspect,
width,
height,
}: {
matteOri: MatteOrientation;
camAspect: CameraAspectRatio;
width: number;
height: number;
}): number | undefined => {
if (matteOri === MatteOrientation.LEFT_RIGHT) {
return undefined;
}
switch (camAspect) {
case CameraAspectRatio.SQUARE_1_1: {
return (height - width) / 2;
}
case CameraAspectRatio.HORIZONTAL_16_9: {
return (height - (width / 16) * 9) / 2;
}
case CameraAspectRatio.VERTICAL_9_16: {
return (height - (width / 9) * 16) / 2;
}
case CameraAspectRatio.HORIZONTAL_3_2: {
return (height - (width / 3) * 2) / 2;
}
case CameraAspectRatio.VERTICAL_2_3: {
return (height - (width / 2) * 3) / 2;
}
default: {
return undefined;
}
}
};
@@ -1 +0,0 @@
export * from "./SceneContainer";
@@ -1 +0,0 @@
export * from "./SceneContainer";
@@ -1,6 +0,0 @@
export {
EngineContext,
setActiveEditor,
getActiveEditor,
} from "@storyteller/ui-pagescene";
export type { EditorExpandedI } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { EngineProvider } from "@storyteller/ui-pagescene";
@@ -1,2 +0,0 @@
export * from "./EngineContext";
export * from "./EngineProvider";
@@ -5,7 +5,7 @@
// to forward to PageSceneStore actions. Engine internals should emit
// EngineEvents on the bus instead of calling these.
import { usePageSceneStore } from "./PageSceneStore";
import { usePageSceneStore } from "@storyteller/ui-pagescene";
export const set3DPageMounted = (isMounted: boolean) =>
usePageSceneStore.getState().set3DPageMounted(isMounted);
@@ -1,18 +0,0 @@
// Re-export shim. The PageScene-specific enums (CameraAspectRatio,
// EditorStates, MediaFileType+Subtype, MediaFileClass, WeightCategory,
// WeightType, Visibility, FetchStatus, GenerateTtsAudioErrorType,
// JobState, ArtStyle) all live in @storyteller/ui-pagescene.
export {
CameraAspectRatio,
EditorStates,
MediaFileType,
MediaFileSubtype,
MediaFileClass,
WeightCategory,
WeightType,
Visibility,
FetchStatus,
GenerateTtsAudioErrorType,
JobState,
ArtStyle,
} from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { useEditorCanvas, useCamViewCanvas } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { useFreeCam } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { useViewportKeyboard } from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { useViewportPointer } from "@storyteller/ui-pagescene";
@@ -1,28 +0,0 @@
// Re-export shim. The full scene-model surface lives in
// @storyteller/ui-pagescene; this file keeps existing
// `~/pages/PageScene/models` imports working while host modules
// migrate to the package import.
export type {
MediaItem,
AudioMediaItem,
MediaInfo,
MaybeResult,
Request,
Status,
ActiveJob,
Pagination,
PaginationInfinite,
Prompts,
UserDetailsLight,
DefaultAvatarInfo,
MediaFile,
GetMediaListResponse,
GetMediaFileResponse,
VoiceConversionModelListItem,
VoiceConversionModelListResponse,
CreatorDetails,
UserBookmarkBatch,
UserBookmarkByEntity,
UserBookmarkByUser,
SceneGenereationMetaData,
} from "@storyteller/ui-pagescene";
@@ -1 +0,0 @@
export { getSceneGenerationMetaData } from "@storyteller/ui-pagescene";
@@ -1,5 +1,5 @@
import { AssetType } from "~/enums";
import { MediaItem } from "~/pages/PageScene/models";
import type { MediaItem } from "@storyteller/ui-pagescene";
export const demoAnimationItems: MediaItem[] = [
{
@@ -1,4 +1,4 @@
import { MediaItem } from "~/pages/PageScene/models";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { AssetType } from "~/enums";
// export const cameraItems = signal<MediaItem[]>([
@@ -1,4 +1,4 @@
import { MediaItem } from "~/pages/PageScene/models";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { AssetType } from "~/enums";
export const demoCharacterItems: MediaItem[] = [
@@ -1,4 +1,4 @@
import { MediaItem } from "~/pages/PageScene/models";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { AssetType } from "~/enums";
export const demoMemeItems: MediaItem[] = [
@@ -1,4 +1,4 @@
import { MediaItem } from "../../models";
import type { MediaItem } from "@storyteller/ui-pagescene";
import { AssetType } from "~/enums";
export const demoSkyboxItems: MediaItem[] = [
@@ -1,7 +1,7 @@
import { signal } from "@preact/signals-core";
import deepEqual from "deep-equal";
import { AudioMediaItem, MediaInfo } from "~/pages/PageScene/models";
import type { AudioMediaItem, MediaInfo } from "@storyteller/ui-pagescene";
import { remapResponseToAudioMediaItems } from "./utilities";
// Signals and signal functions for background loading User's Movies
@@ -1,5 +1,4 @@
import { MediaInfo } from "~/pages/PageScene/models/movies";
import { AudioMediaItem } from "~/pages/PageScene/models";
import type { MediaInfo, AudioMediaItem } from "@storyteller/ui-pagescene";
import { AssetType } from "~/enums";
export const remapResponseToAudioMediaItems = (
+1 -1
View File
@@ -1 +1 @@
{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@remix-run/node/dist/globals.d.ts","../../node_modules/@types/cookie/index.d.ts","../../node_modules/@remix-run/server-runtime/dist/crypto.d.ts","../../node_modules/@remix-run/server-runtime/dist/cookies.d.ts","../../node_modules/@remix-run/server-runtime/dLine truncated
{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@remix-run/node/dist/globals.d.ts","../../node_modules/@types/cookie/index.d.ts","../../node_modules/@remix-run/server-runtime/dist/crypto.d.ts","../../node_modules/@remix-run/server-runtime/dist/cookies.d.ts","../../node_modules/@remix-run/server-runtime/dLine truncated
@@ -11,6 +11,9 @@
{
"path": "../close-button"
},
{
"path": "../loading"
},
{
"path": "../label"
},
@@ -59,6 +59,9 @@
{
"path": "../close-button/tsconfig.lib.json"
},
{
"path": "../loading/tsconfig.lib.json"
},
{
"path": "../label/tsconfig.lib.json"
},