From c7b1a361b18772fab6116e3f5f46e223cdbdf3cd Mon Sep 17 00:00:00 2001 From: Tanish Manku Date: Tue, 27 May 2025 01:37:34 -0700 Subject: [PATCH] Move UploadModal --- .../app/src/components/reusable/index.ts | 1 - .../CharactersComboTabs/subtabAnimations.tsx | 5 +- .../CharactersComboTabs/subtabCharacters.tsx | 5 +- .../CharactersComboTabs/subtabExpressions.tsx | 5 +- .../src/lib/enums/MediaFileAnimationType.ts | 14 ++++++ .../src/lib/enums/ThumbnailsFileType.ts | 6 +++ frontend/libs/common/src/lib/enums/index.ts | 2 + .../libs/components/upload-modal/.babelrc | 12 +++++ .../libs/components/upload-modal/README.md | 7 +++ .../libs/components/upload-modal/package.json | 17 +++++++ .../libs/components/upload-modal/src/index.ts | 1 + .../src/lib}/UploadAssetError.tsx | 2 +- .../upload-modal/src/lib}/UploadFiles.tsx | 14 ++++-- .../upload-modal/src/lib}/UploadModal.tsx | 6 +++ .../upload-modal/src/lib}/UploadSuccess.tsx | 0 .../components/upload-modal/src/lib}/index.ts | 0 .../upload-modal/src/lib}/uploadAssets.ts | 16 +++--- .../components/upload-modal/tsconfig.json | 13 +++++ .../components/upload-modal/tsconfig.lib.json | 45 +++++++++++++++++ .../upload-modal/tsconfig.spec.json | 34 +++++++++++++ .../components/upload-modal/vite.config.ts | 49 +++++++++++++++++++ frontend/package-lock.json | 8 +++ frontend/tsconfig.json | 3 ++ 23 files changed, 251 insertions(+), 14 deletions(-) create mode 100644 frontend/libs/common/src/lib/enums/MediaFileAnimationType.ts create mode 100644 frontend/libs/common/src/lib/enums/ThumbnailsFileType.ts create mode 100644 frontend/libs/components/upload-modal/.babelrc create mode 100644 frontend/libs/components/upload-modal/README.md create mode 100644 frontend/libs/components/upload-modal/package.json create mode 100644 frontend/libs/components/upload-modal/src/index.ts rename frontend/{apps/editor3d/app/src/components/reusable/UploadModal => libs/components/upload-modal/src/lib}/UploadAssetError.tsx (91%) rename frontend/{apps/editor3d/app/src/components/reusable/UploadModal => libs/components/upload-modal/src/lib}/UploadFiles.tsx (93%) rename frontend/{apps/editor3d/app/src/components/reusable/UploadModal => libs/components/upload-modal/src/lib}/UploadModal.tsx (93%) rename frontend/{apps/editor3d/app/src/components/reusable/UploadModal => libs/components/upload-modal/src/lib}/UploadSuccess.tsx (100%) rename frontend/{apps/editor3d/app/src/components/reusable/UploadModal => libs/components/upload-modal/src/lib}/index.ts (100%) rename frontend/{apps/editor3d/app/src/components/reusable/UploadModal => libs/components/upload-modal/src/lib}/uploadAssets.ts (90%) create mode 100644 frontend/libs/components/upload-modal/tsconfig.json create mode 100644 frontend/libs/components/upload-modal/tsconfig.lib.json create mode 100644 frontend/libs/components/upload-modal/tsconfig.spec.json create mode 100644 frontend/libs/components/upload-modal/vite.config.ts diff --git a/frontend/apps/editor3d/app/src/components/reusable/index.ts b/frontend/apps/editor3d/app/src/components/reusable/index.ts index d5f5a2949b..267c329f2e 100644 --- a/frontend/apps/editor3d/app/src/components/reusable/index.ts +++ b/frontend/apps/editor3d/app/src/components/reusable/index.ts @@ -1,3 +1,2 @@ -export * from "./UploadModal"; export * from "./UploadModal3D"; export * from "./UploadModalMedia"; diff --git a/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabAnimations.tsx b/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabAnimations.tsx index 7eb8ddec4f..b197e6f06b 100644 --- a/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabAnimations.tsx +++ b/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabAnimations.tsx @@ -9,7 +9,7 @@ import { } from "~/enums"; import { UploadModal, -} from "~/components"; +} from "@storyteller/ui-upload-modal"; import { SearchFilter } from "@storyteller/ui-search"; import { Pagination } from "@storyteller/ui-pagination"; import { Button, FilterButtons } from "@storyteller/ui-button"; @@ -27,6 +27,7 @@ import { filterMMDAnimations, } from "./filterCharacterTypes"; import { MediaItem } from "~/pages/PageEnigma/models"; +import { getFileExtension, getFileName } from "~/utilities"; const filterEngineCategories = [FilterEngineCategories.ANIMATION]; @@ -177,6 +178,8 @@ export const AnimationsTab = ({ /> )} setOpenUploadModal(false)} onSuccess={fetchUserObjects} isOpen={openUploadModal} diff --git a/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabCharacters.tsx b/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabCharacters.tsx index 2cea1e6444..db6217076c 100644 --- a/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabCharacters.tsx +++ b/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabCharacters.tsx @@ -11,7 +11,7 @@ import { import { MediaItem } from "~/pages/PageEnigma/models"; import { UploadModal, -} from "~/components"; +} from "@storyteller/ui-upload-modal"; import { SearchFilter } from "@storyteller/ui-search"; import { Pagination } from "@storyteller/ui-pagination"; import { Button, FilterButtons } from "@storyteller/ui-button"; @@ -24,6 +24,7 @@ import { useSearchUserObjects, useFeatureFlags, } from "../../hooks"; +import { getFileExtension, getFileName } from "~/utilities"; const filterEngineCategories = [FilterEngineCategories.CHARACTER]; @@ -195,6 +196,8 @@ export const CharactersTab = ({ /> )} setOpenUploadModal(false)} onSuccess={fetchUserObjects} isOpen={openUploadModal} diff --git a/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabExpressions.tsx b/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabExpressions.tsx index b9fb84346e..299951b285 100644 --- a/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabExpressions.tsx +++ b/frontend/apps/editor3d/app/src/pages/PageEnigma/comps/SidePanelTabs/tabComps/CharactersComboTabs/subtabExpressions.tsx @@ -7,7 +7,7 @@ import { } from "~/enums"; import { UploadModal, -} from "~/components"; +} from "@storyteller/ui-upload-modal"; import { SearchFilter } from "@storyteller/ui-search"; import { Pagination } from "@storyteller/ui-pagination"; import { Button, FilterButtons } from "@storyteller/ui-button"; @@ -20,6 +20,7 @@ import { useSearchUserObjects, useFeatureFlags, } from "../../hooks"; +import { getFileExtension, getFileName } from "~/utilities"; const filterEngineCategories = [FilterEngineCategories.EXPRESSION]; @@ -154,6 +155,8 @@ export const ExpressionTab = () => { /> )} setOpenUploadModal(false)} onSuccess={fetchUserObjects} isOpen={openUploadModal} diff --git a/frontend/libs/common/src/lib/enums/MediaFileAnimationType.ts b/frontend/libs/common/src/lib/enums/MediaFileAnimationType.ts new file mode 100644 index 0000000000..27a7c94d77 --- /dev/null +++ b/frontend/libs/common/src/lib/enums/MediaFileAnimationType.ts @@ -0,0 +1,14 @@ +export enum MediaFileAnimationType { + ArKit = "ar_kit", + MikuMikuDance = "miku_miku_dance", + MikuMikuDanceArKit = "miku_miku_dance_ar_kit", + Mixamo = "mixamo", + MixamoArKit = "mixamo_ar_kit", + MocapNet = "mocap_net", + MocapNetArKit = "mocap_net_ar_kit", + MoveAi = "move_ai", + MoveAiArKit = "move_ai_ar_kit", + Rigify = "rigify", + RigifyArKit = "rigify_ar_kit", + Rokoko = "rokoko", +} diff --git a/frontend/libs/common/src/lib/enums/ThumbnailsFileType.ts b/frontend/libs/common/src/lib/enums/ThumbnailsFileType.ts new file mode 100644 index 0000000000..622ae6dcf0 --- /dev/null +++ b/frontend/libs/common/src/lib/enums/ThumbnailsFileType.ts @@ -0,0 +1,6 @@ +export enum THUMBNAILS_FILE_TYPE { + PNG = "png", + JPG = "jpg", + JPEG = "jpeg", + GIF = "gif", +} diff --git a/frontend/libs/common/src/lib/enums/index.ts b/frontend/libs/common/src/lib/enums/index.ts index 0865e3e89f..424823d2f9 100644 --- a/frontend/libs/common/src/lib/enums/index.ts +++ b/frontend/libs/common/src/lib/enums/index.ts @@ -4,3 +4,5 @@ export * from "./UploaderStates"; export * from "./Hotkeys"; export * from "./Toaster"; export * from "./AssetFilterOption"; +export * from "./ThumbnailsFileType"; +export * from "./MediaFileAnimationType"; diff --git a/frontend/libs/components/upload-modal/.babelrc b/frontend/libs/components/upload-modal/.babelrc new file mode 100644 index 0000000000..1ea870ead4 --- /dev/null +++ b/frontend/libs/components/upload-modal/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/frontend/libs/components/upload-modal/README.md b/frontend/libs/components/upload-modal/README.md new file mode 100644 index 0000000000..b970fa4f2a --- /dev/null +++ b/frontend/libs/components/upload-modal/README.md @@ -0,0 +1,7 @@ +# @storyteller/ui-upload-modal + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test @storyteller/ui-upload-modal` to execute the unit tests via [Vitest](https://vitest.dev/). diff --git a/frontend/libs/components/upload-modal/package.json b/frontend/libs/components/upload-modal/package.json new file mode 100644 index 0000000000..ec7cfed1ae --- /dev/null +++ b/frontend/libs/components/upload-modal/package.json @@ -0,0 +1,17 @@ +{ + "name": "@storyteller/ui-upload-modal", + "version": "0.0.1", + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "development": "./src/index.ts", + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + } +} diff --git a/frontend/libs/components/upload-modal/src/index.ts b/frontend/libs/components/upload-modal/src/index.ts new file mode 100644 index 0000000000..11aece60c4 --- /dev/null +++ b/frontend/libs/components/upload-modal/src/index.ts @@ -0,0 +1 @@ +export * from './lib/index'; diff --git a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadAssetError.tsx b/frontend/libs/components/upload-modal/src/lib/UploadAssetError.tsx similarity index 91% rename from frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadAssetError.tsx rename to frontend/libs/components/upload-modal/src/lib/UploadAssetError.tsx index 558d2f6c50..9a37385f04 100644 --- a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadAssetError.tsx +++ b/frontend/libs/components/upload-modal/src/lib/UploadAssetError.tsx @@ -1,4 +1,4 @@ -import { FilterEngineCategories } from "~/enums"; +import { FilterEngineCategories } from "@storyteller/api"; import { Button } from "@storyteller/ui-button"; interface Props { onCancel: () => void; diff --git a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadFiles.tsx b/frontend/libs/components/upload-modal/src/lib/UploadFiles.tsx similarity index 93% rename from frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadFiles.tsx rename to frontend/libs/components/upload-modal/src/lib/UploadFiles.tsx index fd9a6b529c..eb76d9b5a8 100644 --- a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadFiles.tsx +++ b/frontend/libs/components/upload-modal/src/lib/UploadFiles.tsx @@ -3,13 +3,15 @@ import { Input } from "@storyteller/ui-input"; import { Button } from "@storyteller/ui-button"; import { FileUploader } from "@storyteller/ui-file-uploader"; import { useState } from "react"; +import { + FilterEngineCategories, +} from "@storyteller/api"; import { THUMBNAILS_FILE_TYPE, MediaFileAnimationType, - FilterEngineCategories, -} from "~/enums"; + UploaderState +} from "@storyteller/common"; import { uploadAssets } from "./uploadAssets"; -import { UploaderState } from "~/models"; interface Props { title: string; @@ -22,6 +24,8 @@ interface Props { hasThumbnailUpload?: boolean; }; onUploadProgress: (newState: UploaderState) => void; + getFileName: (file: File) => string; + getFileExtension: (file: File) => string; } export const UploadFiles = ({ @@ -31,6 +35,8 @@ export const UploadFiles = ({ title, options, onUploadProgress, + getFileName, + getFileExtension, }: Props) => { const fileSubtypes = options?.fileSubtypes; const hasLength = options?.hasLength; @@ -82,6 +88,8 @@ export const UploadFiles = ({ thumbnailFile: thumbnailFile || undefined, length: uploadLength, progressCallback: onUploadProgress, + getFileName: getFileName, + getFileExtension: getFileExtension, }); }; diff --git a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadModal.tsx b/frontend/libs/components/upload-modal/src/lib/UploadModal.tsx similarity index 93% rename from frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadModal.tsx rename to frontend/libs/components/upload-modal/src/lib/UploadModal.tsx index ca0b1d2326..ff861edcad 100644 --- a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadModal.tsx +++ b/frontend/libs/components/upload-modal/src/lib/UploadModal.tsx @@ -19,6 +19,8 @@ interface Props { hasLength?: boolean; hasThumbnailUpload?: boolean; }; + getFileName: (file: File) => string; + getFileExtension: (file: File) => string; } export function UploadModal({ @@ -29,6 +31,8 @@ export function UploadModal({ fileTypes, type, options, + getFileName, + getFileExtension, }: Props) { const [uploaderState, setUploaderState] = useState(initialUploaderState); @@ -58,6 +62,8 @@ export function UploadModal({ options={options} onClose={onClose} onUploadProgress={updateUploaderState} + getFileName={getFileName} + getFileExtension={getFileExtension} /> ); case UploaderStates.uploadingAsset: diff --git a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadSuccess.tsx b/frontend/libs/components/upload-modal/src/lib/UploadSuccess.tsx similarity index 100% rename from frontend/apps/editor3d/app/src/components/reusable/UploadModal/UploadSuccess.tsx rename to frontend/libs/components/upload-modal/src/lib/UploadSuccess.tsx diff --git a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/index.ts b/frontend/libs/components/upload-modal/src/lib/index.ts similarity index 100% rename from frontend/apps/editor3d/app/src/components/reusable/UploadModal/index.ts rename to frontend/libs/components/upload-modal/src/lib/index.ts diff --git a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/uploadAssets.ts b/frontend/libs/components/upload-modal/src/lib/uploadAssets.ts similarity index 90% rename from frontend/apps/editor3d/app/src/components/reusable/UploadModal/uploadAssets.ts rename to frontend/libs/components/upload-modal/src/lib/uploadAssets.ts index c7a29fcd5c..8fe3953666 100644 --- a/frontend/apps/editor3d/app/src/components/reusable/UploadModal/uploadAssets.ts +++ b/frontend/libs/components/upload-modal/src/lib/uploadAssets.ts @@ -2,14 +2,14 @@ import { v4 as uuidv4 } from "uuid"; import { FilterEngineCategories, - MediaFileAnimationType, +} from "@storyteller/api"; +import { UploaderStates, -} from "~/enums"; + MediaFileAnimationType, + UploaderState +} from "@storyteller/common"; -import { getFileName, getFileExtension } from "~/utilities"; - -import { MediaUploadApi, MediaFilesApi } from "~/Classes/ApiManager"; -import { UploaderState } from "~/models"; +import { MediaUploadApi, MediaFilesApi } from "@storyteller/api"; export const uploadAssets = async ({ title, @@ -19,6 +19,8 @@ export const uploadAssets = async ({ animationType, length, progressCallback, + getFileName, + getFileExtension, }: { title: string; assetFile: File; @@ -27,6 +29,8 @@ export const uploadAssets = async ({ animationType?: MediaFileAnimationType; length?: number; progressCallback: (newState: UploaderState) => void; + getFileName: (file: File) => string; + getFileExtension: (file: File) => string; }) => { progressCallback({ status: UploaderStates.uploadingAsset }); const mediaUploadApi = new MediaUploadApi(); diff --git a/frontend/libs/components/upload-modal/tsconfig.json b/frontend/libs/components/upload-modal/tsconfig.json new file mode 100644 index 0000000000..b3d19d8f5e --- /dev/null +++ b/frontend/libs/components/upload-modal/tsconfig.json @@ -0,0 +1,13 @@ +{ + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/frontend/libs/components/upload-modal/tsconfig.lib.json b/frontend/libs/components/upload-modal/tsconfig.lib.json new file mode 100644 index 0000000000..f0782e3dd8 --- /dev/null +++ b/frontend/libs/components/upload-modal/tsconfig.lib.json @@ -0,0 +1,45 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "types": [ + "node", + "@nx/react/typings/cssmodule.d.ts", + "@nx/react/typings/image.d.ts", + "vite/client" + ], + "rootDir": "src", + "jsx": "react-jsx", + "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo" + }, + "exclude": [ + "out-tsc", + "dist", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx", + "**/*.spec.js", + "**/*.test.js", + "**/*.spec.jsx", + "**/*.test.jsx", + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx" + ], + "include": [ + "src/**/*.js", + "src/**/*.jsx", + "src/**/*.ts", + "src/**/*.tsx" + ] +} diff --git a/frontend/libs/components/upload-modal/tsconfig.spec.json b/frontend/libs/components/upload-modal/tsconfig.spec.json new file mode 100644 index 0000000000..18b7de51b8 --- /dev/null +++ b/frontend/libs/components/upload-modal/tsconfig.spec.json @@ -0,0 +1,34 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./out-tsc/vitest", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ], + "jsx": "react-jsx" + }, + "include": [ + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/frontend/libs/components/upload-modal/vite.config.ts b/frontend/libs/components/upload-modal/vite.config.ts new file mode 100644 index 0000000000..5bc1b2829d --- /dev/null +++ b/frontend/libs/components/upload-modal/vite.config.ts @@ -0,0 +1,49 @@ +/// +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import dts from 'vite-plugin-dts'; +import * as path from 'path'; + +export default defineConfig(() => ({ + root: __dirname, + cacheDir: '../../../node_modules/.vite/libs/components/upload-modal', + plugins: [react(), dts({ entryRoot: 'src', tsconfigPath: path.join(__dirname, 'tsconfig.lib.json') })], + // Uncomment this if you are using workers. + // worker: { + // plugins: [ nxViteTsPaths() ], + // }, + // Configuration for building your library. + // See: https://vitejs.dev/guide/build.html#library-mode + build: { + outDir: './dist', + emptyOutDir: true, + reportCompressedSize: true, + commonjsOptions: { + transformMixedEsModules: true, + }, + lib: { + // Could also be a dictionary or array of multiple entry points. + entry: 'src/index.ts', + name: '@storyteller/ui-upload-modal', + fileName: 'index', + // Change this to the formats you want to support. + // Don't forget to update your package.json as well. + formats: ['es' as const] + }, + rollupOptions: { + // External packages that should not be bundled into your library. + external: ['react','react-dom','react/jsx-runtime'] + }, + }, + test: { + watch: false, + globals: true, + environment: 'jsdom', + include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + coverage: { + reportsDirectory: './test-output/vitest/coverage', + provider: 'v8' as const, + } + }, +})); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 29f890dc82..3253a129a2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1433,6 +1433,10 @@ "version": "0.0.1", "extraneous": true }, + "libs/components/upload-modal": { + "name": "@storyteller/ui-upload-modal", + "version": "0.0.1" + }, "libs/login": { "name": "@frontend/login", "version": "0.0.1" @@ -9295,6 +9299,10 @@ "resolved": "libs/components/tooltip", "link": true }, + "node_modules/@storyteller/ui-upload-modal": { + "resolved": "libs/components/upload-modal", + "link": true + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index e6afaff036..24faefa318 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -125,6 +125,9 @@ }, { "path": "./libs/components/search" + }, + { + "path": "./libs/components/upload-modal" } ] }