diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000..13566b81b0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/GottaGoFast.iml b/.idea/GottaGoFast.iml new file mode 100644 index 0000000000..3568360f28 --- /dev/null +++ b/.idea/GottaGoFast.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000000..9a4d2c2191 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000000..79ee123c2b --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000..03d9549ea8 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..700633daf5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000000..f324872a8b --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 0000000000..0c83ac4e89 --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/0/1/01907caaf8abcd59e24d8d26bdd37f7a07238793 b/.idea/sonarlint/issuestore/0/1/01907caaf8abcd59e24d8d26bdd37f7a07238793 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/1/1/1193d972f0d2d8e13bf2a89c9f1b856c95dfd960 b/.idea/sonarlint/issuestore/1/1/1193d972f0d2d8e13bf2a89c9f1b856c95dfd960 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/1/4/1420acf507a4c451001a79a2943ae324a632cb7f b/.idea/sonarlint/issuestore/1/4/1420acf507a4c451001a79a2943ae324a632cb7f new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/1/d/1d2d0feb3a048b584049c5ba95077f97e967bb36 b/.idea/sonarlint/issuestore/1/d/1d2d0feb3a048b584049c5ba95077f97e967bb36 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/2/a/2ae173334be35fe61e7a084bd67ecfa5b05015e4 b/.idea/sonarlint/issuestore/2/a/2ae173334be35fe61e7a084bd67ecfa5b05015e4 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/4/0/4078c3af2bc43a60f7345e34a7230534f9f7b245 b/.idea/sonarlint/issuestore/4/0/4078c3af2bc43a60f7345e34a7230534f9f7b245 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/4/f/4fbf6de228c6518666127eb4b8bf99bd053f99fe b/.idea/sonarlint/issuestore/4/f/4fbf6de228c6518666127eb4b8bf99bd053f99fe new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/5/2/52c961376029165b06e7861b1dc68c3b2455eeff b/.idea/sonarlint/issuestore/5/2/52c961376029165b06e7861b1dc68c3b2455eeff new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/5/d/5d3ccf1210662cac26b4f75e4524acb75a3e05c9 b/.idea/sonarlint/issuestore/5/d/5d3ccf1210662cac26b4f75e4524acb75a3e05c9 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/5/f/5f22b1bbace0f13f764b3c745759a6b7c4d6e5d9 b/.idea/sonarlint/issuestore/5/f/5f22b1bbace0f13f764b3c745759a6b7c4d6e5d9 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/6/1/61ebb9fd6e8cf9082658121d5d81e297791dacd0 b/.idea/sonarlint/issuestore/6/1/61ebb9fd6e8cf9082658121d5d81e297791dacd0 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/6/4/64b5dc72a41f7c1b594f0c4f67057c3fac409dba b/.idea/sonarlint/issuestore/6/4/64b5dc72a41f7c1b594f0c4f67057c3fac409dba new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/7/5/75ea7f3ea6d80d54bb5b2357996972d1632a5038 b/.idea/sonarlint/issuestore/7/5/75ea7f3ea6d80d54bb5b2357996972d1632a5038 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/8/1/81a15ef2fee7c3e161b66ac6f5bbd6523327059f b/.idea/sonarlint/issuestore/8/1/81a15ef2fee7c3e161b66ac6f5bbd6523327059f new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/8/8/887452a6317b847c87ae01be3bf58418fdeb2e04 b/.idea/sonarlint/issuestore/8/8/887452a6317b847c87ae01be3bf58418fdeb2e04 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/9/4/948fdf96da2c0e9325e8e3e8f8d14a3350da1b3e b/.idea/sonarlint/issuestore/9/4/948fdf96da2c0e9325e8e3e8f8d14a3350da1b3e new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/9/b/9b3cd0ade34737345060fc9dd9d369dbb2733205 b/.idea/sonarlint/issuestore/9/b/9b3cd0ade34737345060fc9dd9d369dbb2733205 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/a/e/ae6393cb0765a08a83849b56f401b2f8614aa21c b/.idea/sonarlint/issuestore/a/e/ae6393cb0765a08a83849b56f401b2f8614aa21c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/b/1/b137962450c33edc117c975cf0bdf9f95b0cb188 b/.idea/sonarlint/issuestore/b/1/b137962450c33edc117c975cf0bdf9f95b0cb188 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/b/a/ba2e6c6255fa02042bec9e54e0f73263850a1fdd b/.idea/sonarlint/issuestore/b/a/ba2e6c6255fa02042bec9e54e0f73263850a1fdd new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/c/2/c2403f3b1e36ca4357db2d4ba8d5cce7a637a0fc b/.idea/sonarlint/issuestore/c/2/c2403f3b1e36ca4357db2d4ba8d5cce7a637a0fc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/c/7/c77be8c5fbeeea4a34fb2465336598ccff026866 b/.idea/sonarlint/issuestore/c/7/c77be8c5fbeeea4a34fb2465336598ccff026866 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/c/b/cbc16b6483d87b2c5af91b2f6ee5b84e644e9f88 b/.idea/sonarlint/issuestore/c/b/cbc16b6483d87b2c5af91b2f6ee5b84e644e9f88 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/e/e/ee716328020ea5d007c5d60a9deed2c398037e16 b/.idea/sonarlint/issuestore/e/e/ee716328020ea5d007c5d60a9deed2c398037e16 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/f/4/f4da9805e7b7c03da93082b44221693aec65a52e b/.idea/sonarlint/issuestore/f/4/f4da9805e7b7c03da93082b44221693aec65a52e new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/f/c/fcfd183a1d0f4cd1a9e368888c85ea2fbe212d56 b/.idea/sonarlint/issuestore/f/c/fcfd183a1d0f4cd1a9e368888c85ea2fbe212d56 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000000..24f66cbe64 --- /dev/null +++ b/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,55 @@ + +9 + README.md,8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d +L +app/contexts/TopBarInner.tsx,b/1/b137962450c33edc117c975cf0bdf9f95b0cb188 +C +app/styles/base.css,c/b/cbc16b6483d87b2c5af91b2f6ee5b84e644e9f88 +H +app/styles/normalize.css,1/1/1193d972f0d2d8e13bf2a89c9f1b856c95dfd960 +G +app/styles/tailwind.css,6/4/64b5dc72a41f7c1b594f0c4f67057c3fac409dba +B +tailwind.config.ts,5/2/52c961376029165b06e7861b1dc68c3b2455eeff += + tsconfig.json,6/1/61ebb9fd6e8cf9082658121d5d81e297791dacd0 +> +vite.config.ts,7/5/75ea7f3ea6d80d54bb5b2357996972d1632a5038 +J +app/routes/IdealEnigma.tsx,5/d/5d3ccf1210662cac26b4f75e4524acb75a3e05c9 +E +app/routes/_index.tsx,9/4/948fdf96da2c0e9325e8e3e8f8d14a3350da1b3e +S +#app/pages/PageEnigma/PageEnigma.tsx,1/4/1420acf507a4c451001a79a2943ae324a632cb7f +` +0app/pages/PageEnigma/comps/Timeline/Timeline.tsx,8/8/887452a6317b847c87ae01be3bf58418fdeb2e04 +U +%app/modules/LowerPanel/LowerPanel.tsx,9/b/9b3cd0ade34737345060fc9dd9d369dbb2733205 +b +2app/pages/PageEnigma/comps/Character/Character.tsx,a/e/ae6393cb0765a08a83849b56f401b2f8614aa21c +] +-app/pages/PageEnigma/comps/Timeline/index.tsx,b/a/ba2e6c6255fa02042bec9e54e0f73263850a1fdd +^ +.app/pages/PageEnigma/comps/Character/index.tsx,0/1/01907caaf8abcd59e24d8d26bdd37f7a07238793 +j +:app/pages/PageEnigma/comps/ControlsVideo/ControlsVideo.tsx,1/d/1d2d0feb3a048b584049c5ba95077f97e967bb36 +f +6app/pages/PageEnigma/comps/Character/CharacterClip.tsx,c/2/c2403f3b1e36ca4357db2d4ba8d5cce7a637a0fc +a +1app/pages/PageEnigma/comps/Timeline/Character.tsx,4/0/4078c3af2bc43a60f7345e34a7230534f9f7b245 +a +1app/pages/PageEnigma/comps/Timeline/TrackClip.tsx,4/f/4fbf6de228c6518666127eb4b8bf99bd053f99fe +j +:app/pages/PageEnigma/comps/Timeline/utils/onPointerDown.ts,c/7/c77be8c5fbeeea4a34fb2465336598ccff026866 +k +;app/pages/PageEnigma/comps/Timeline/utils/useMouseEvents.ts,e/e/ee716328020ea5d007c5d60a9deed2c398037e16 +B +app/models/clip.ts,8/1/81a15ef2fee7c3e161b66ac6f5bbd6523327059f +M +app/contexts/TrackContext.tsx,2/a/2ae173334be35fe61e7a084bd67ecfa5b05015e4 +C +app/models/track.ts,f/c/fcfd183a1d0f4cd1a9e368888c85ea2fbe212d56 +M +app/contexts/TrackProvider.ts,5/f/5f22b1bbace0f13f764b3c745759a6b7c4d6e5d9 +N +app/contexts/TrackProvider.tsx,f/4/f4da9805e7b7c03da93082b44221693aec65a52e \ No newline at end of file diff --git a/.idea/sonarlint/securityhotspotstore/0/1/01907caaf8abcd59e24d8d26bdd37f7a07238793 b/.idea/sonarlint/securityhotspotstore/0/1/01907caaf8abcd59e24d8d26bdd37f7a07238793 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/1/1/1193d972f0d2d8e13bf2a89c9f1b856c95dfd960 b/.idea/sonarlint/securityhotspotstore/1/1/1193d972f0d2d8e13bf2a89c9f1b856c95dfd960 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/1/4/1420acf507a4c451001a79a2943ae324a632cb7f b/.idea/sonarlint/securityhotspotstore/1/4/1420acf507a4c451001a79a2943ae324a632cb7f new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/1/d/1d2d0feb3a048b584049c5ba95077f97e967bb36 b/.idea/sonarlint/securityhotspotstore/1/d/1d2d0feb3a048b584049c5ba95077f97e967bb36 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/2/a/2ae173334be35fe61e7a084bd67ecfa5b05015e4 b/.idea/sonarlint/securityhotspotstore/2/a/2ae173334be35fe61e7a084bd67ecfa5b05015e4 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/4/0/4078c3af2bc43a60f7345e34a7230534f9f7b245 b/.idea/sonarlint/securityhotspotstore/4/0/4078c3af2bc43a60f7345e34a7230534f9f7b245 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/4/f/4fbf6de228c6518666127eb4b8bf99bd053f99fe b/.idea/sonarlint/securityhotspotstore/4/f/4fbf6de228c6518666127eb4b8bf99bd053f99fe new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/5/2/52c961376029165b06e7861b1dc68c3b2455eeff b/.idea/sonarlint/securityhotspotstore/5/2/52c961376029165b06e7861b1dc68c3b2455eeff new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/5/d/5d3ccf1210662cac26b4f75e4524acb75a3e05c9 b/.idea/sonarlint/securityhotspotstore/5/d/5d3ccf1210662cac26b4f75e4524acb75a3e05c9 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/5/f/5f22b1bbace0f13f764b3c745759a6b7c4d6e5d9 b/.idea/sonarlint/securityhotspotstore/5/f/5f22b1bbace0f13f764b3c745759a6b7c4d6e5d9 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/6/1/61ebb9fd6e8cf9082658121d5d81e297791dacd0 b/.idea/sonarlint/securityhotspotstore/6/1/61ebb9fd6e8cf9082658121d5d81e297791dacd0 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/6/4/64b5dc72a41f7c1b594f0c4f67057c3fac409dba b/.idea/sonarlint/securityhotspotstore/6/4/64b5dc72a41f7c1b594f0c4f67057c3fac409dba new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/7/5/75ea7f3ea6d80d54bb5b2357996972d1632a5038 b/.idea/sonarlint/securityhotspotstore/7/5/75ea7f3ea6d80d54bb5b2357996972d1632a5038 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/8/1/81a15ef2fee7c3e161b66ac6f5bbd6523327059f b/.idea/sonarlint/securityhotspotstore/8/1/81a15ef2fee7c3e161b66ac6f5bbd6523327059f new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/8/8/887452a6317b847c87ae01be3bf58418fdeb2e04 b/.idea/sonarlint/securityhotspotstore/8/8/887452a6317b847c87ae01be3bf58418fdeb2e04 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/9/4/948fdf96da2c0e9325e8e3e8f8d14a3350da1b3e b/.idea/sonarlint/securityhotspotstore/9/4/948fdf96da2c0e9325e8e3e8f8d14a3350da1b3e new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/9/b/9b3cd0ade34737345060fc9dd9d369dbb2733205 b/.idea/sonarlint/securityhotspotstore/9/b/9b3cd0ade34737345060fc9dd9d369dbb2733205 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/a/e/ae6393cb0765a08a83849b56f401b2f8614aa21c b/.idea/sonarlint/securityhotspotstore/a/e/ae6393cb0765a08a83849b56f401b2f8614aa21c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/b/1/b137962450c33edc117c975cf0bdf9f95b0cb188 b/.idea/sonarlint/securityhotspotstore/b/1/b137962450c33edc117c975cf0bdf9f95b0cb188 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/b/a/ba2e6c6255fa02042bec9e54e0f73263850a1fdd b/.idea/sonarlint/securityhotspotstore/b/a/ba2e6c6255fa02042bec9e54e0f73263850a1fdd new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/c/2/c2403f3b1e36ca4357db2d4ba8d5cce7a637a0fc b/.idea/sonarlint/securityhotspotstore/c/2/c2403f3b1e36ca4357db2d4ba8d5cce7a637a0fc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/c/7/c77be8c5fbeeea4a34fb2465336598ccff026866 b/.idea/sonarlint/securityhotspotstore/c/7/c77be8c5fbeeea4a34fb2465336598ccff026866 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/c/b/cbc16b6483d87b2c5af91b2f6ee5b84e644e9f88 b/.idea/sonarlint/securityhotspotstore/c/b/cbc16b6483d87b2c5af91b2f6ee5b84e644e9f88 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/e/e/ee716328020ea5d007c5d60a9deed2c398037e16 b/.idea/sonarlint/securityhotspotstore/e/e/ee716328020ea5d007c5d60a9deed2c398037e16 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/f/4/f4da9805e7b7c03da93082b44221693aec65a52e b/.idea/sonarlint/securityhotspotstore/f/4/f4da9805e7b7c03da93082b44221693aec65a52e new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/f/c/fcfd183a1d0f4cd1a9e368888c85ea2fbe212d56 b/.idea/sonarlint/securityhotspotstore/f/c/fcfd183a1d0f4cd1a9e368888c85ea2fbe212d56 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb new file mode 100644 index 0000000000..24f66cbe64 --- /dev/null +++ b/.idea/sonarlint/securityhotspotstore/index.pb @@ -0,0 +1,55 @@ + +9 + README.md,8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d +L +app/contexts/TopBarInner.tsx,b/1/b137962450c33edc117c975cf0bdf9f95b0cb188 +C +app/styles/base.css,c/b/cbc16b6483d87b2c5af91b2f6ee5b84e644e9f88 +H +app/styles/normalize.css,1/1/1193d972f0d2d8e13bf2a89c9f1b856c95dfd960 +G +app/styles/tailwind.css,6/4/64b5dc72a41f7c1b594f0c4f67057c3fac409dba +B +tailwind.config.ts,5/2/52c961376029165b06e7861b1dc68c3b2455eeff += + tsconfig.json,6/1/61ebb9fd6e8cf9082658121d5d81e297791dacd0 +> +vite.config.ts,7/5/75ea7f3ea6d80d54bb5b2357996972d1632a5038 +J +app/routes/IdealEnigma.tsx,5/d/5d3ccf1210662cac26b4f75e4524acb75a3e05c9 +E +app/routes/_index.tsx,9/4/948fdf96da2c0e9325e8e3e8f8d14a3350da1b3e +S +#app/pages/PageEnigma/PageEnigma.tsx,1/4/1420acf507a4c451001a79a2943ae324a632cb7f +` +0app/pages/PageEnigma/comps/Timeline/Timeline.tsx,8/8/887452a6317b847c87ae01be3bf58418fdeb2e04 +U +%app/modules/LowerPanel/LowerPanel.tsx,9/b/9b3cd0ade34737345060fc9dd9d369dbb2733205 +b +2app/pages/PageEnigma/comps/Character/Character.tsx,a/e/ae6393cb0765a08a83849b56f401b2f8614aa21c +] +-app/pages/PageEnigma/comps/Timeline/index.tsx,b/a/ba2e6c6255fa02042bec9e54e0f73263850a1fdd +^ +.app/pages/PageEnigma/comps/Character/index.tsx,0/1/01907caaf8abcd59e24d8d26bdd37f7a07238793 +j +:app/pages/PageEnigma/comps/ControlsVideo/ControlsVideo.tsx,1/d/1d2d0feb3a048b584049c5ba95077f97e967bb36 +f +6app/pages/PageEnigma/comps/Character/CharacterClip.tsx,c/2/c2403f3b1e36ca4357db2d4ba8d5cce7a637a0fc +a +1app/pages/PageEnigma/comps/Timeline/Character.tsx,4/0/4078c3af2bc43a60f7345e34a7230534f9f7b245 +a +1app/pages/PageEnigma/comps/Timeline/TrackClip.tsx,4/f/4fbf6de228c6518666127eb4b8bf99bd053f99fe +j +:app/pages/PageEnigma/comps/Timeline/utils/onPointerDown.ts,c/7/c77be8c5fbeeea4a34fb2465336598ccff026866 +k +;app/pages/PageEnigma/comps/Timeline/utils/useMouseEvents.ts,e/e/ee716328020ea5d007c5d60a9deed2c398037e16 +B +app/models/clip.ts,8/1/81a15ef2fee7c3e161b66ac6f5bbd6523327059f +M +app/contexts/TrackContext.tsx,2/a/2ae173334be35fe61e7a084bd67ecfa5b05015e4 +C +app/models/track.ts,f/c/fcfd183a1d0f4cd1a9e368888c85ea2fbe212d56 +M +app/contexts/TrackProvider.ts,5/f/5f22b1bbace0f13f764b3c745759a6b7c4d6e5d9 +N +app/contexts/TrackProvider.tsx,f/4/f4da9805e7b7c03da93082b44221693aec65a52e \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/contexts/TrackContext.tsx b/app/contexts/TrackContext.tsx new file mode 100644 index 0000000000..d7172182bf --- /dev/null +++ b/app/contexts/TrackContext.tsx @@ -0,0 +1,20 @@ +import { createContext } from "react"; +import { CharacterTrack } from "~/models/track"; + +export const TrackContext = createContext<{ + characters: CharacterTrack[]; + updateCharacters: (options: { + type: "animations" | "positions" | "lipSync"; + id: string; + length: number; + offset: number; + }) => void; + selectClip: (options: { + type: "animations" | "positions" | "lipSync"; + id: string; + }) => void; +}>({ + characters: [], + updateCharacters: () => {}, + selectClip: () => {}, +}); diff --git a/app/contexts/TrackProvider.tsx b/app/contexts/TrackProvider.tsx new file mode 100644 index 0000000000..b108fd3740 --- /dev/null +++ b/app/contexts/TrackProvider.tsx @@ -0,0 +1,133 @@ +import { TrackContext } from "~/contexts/TrackContext"; +import { ReactNode, useCallback, useMemo, useState } from "react"; +import { CharacterTrack } from "~/models/track"; + +interface Props { + children: ReactNode; +} + +export const TrackProvider = ({ children }: Props) => { + const [characters, setCharacters] = useState([ + { + id: "t1", + animationClips: [ + { + id: "1", + length: 200, + offset: 0, + name: "track 1", + selected: false, + }, + { + id: "2", + length: 180, + offset: 300, + name: "track 2", + selected: false, + }, + ], + positionClips: [], + lipSyncClips: [], + }, + ]); + + const updateCharacters = useCallback( + ({ + type, + id, + offset, + length, + }: { + type: "animations" | "positions" | "lipSync"; + id: string; + length: number; + offset: number; + }) => { + if (type === "animations") { + setCharacters((oldCharacters) => { + return oldCharacters.map((character) => { + const newAnimationClips = [...character.animationClips]; + const clipIndex = newAnimationClips.findIndex( + (row) => row.id === id, + ); + if (clipIndex === -1) { + return { ...character }; + } + const clip = newAnimationClips[clipIndex]; + clip.offset = offset; + clip.length = length; + return { + ...character, + animationClips: newAnimationClips, + }; + }); + }); + return; + } + }, + [], + ); + + const selectClip = useCallback( + ({ + type, + id, + }: { + type: "animations" | "positions" | "lipSync"; + id: string; + }) => { + if (type === "animations") { + setCharacters((oldCharacters) => { + return oldCharacters.map((character) => { + const newAnimationClips = character.animationClips.map((clip) => ({ + ...clip, + selected: false, + })); + const newPositionClips = character.positionClips.map((clip) => ({ + ...clip, + selected: false, + })); + const newLipSyncClips = character.lipSyncClips.map((clip) => ({ + ...clip, + selected: false, + })); + const clipIndex = newAnimationClips.findIndex( + (row) => row.id === id, + ); + if (clipIndex === -1) { + return { + ...character, + animationClips: newAnimationClips, + positionClips: newPositionClips, + lipSyncClips: newLipSyncClips, + }; + } + const clip = newAnimationClips[clipIndex]; + clip.selected = true; + return { + ...character, + animationClips: newAnimationClips, + positionClips: newPositionClips, + lipSyncClips: newLipSyncClips, + }; + }); + }); + return; + } + }, + [], + ); + + console.log(characters); + + const values = useMemo(() => { + return { + characters, + updateCharacters, + selectClip, + }; + }, [characters, updateCharacters]); + return ( + {children} + ); +}; diff --git a/app/models/track.ts b/app/models/track.ts new file mode 100644 index 0000000000..7fd04024f6 --- /dev/null +++ b/app/models/track.ts @@ -0,0 +1,20 @@ +export interface BaseClip { + id: string; + name: string; + offset: number; + length: number; + selected: boolean; +} + +export interface AnimationClip extends BaseClip {} + +export interface PositionClip extends BaseClip {} + +export interface LipSyncClip extends BaseClip {} + +export interface CharacterTrack { + id: string; + animationClips: AnimationClip[]; + positionClips: PositionClip[]; + lipSyncClips: LipSyncClip[]; +} diff --git a/app/pages/PageEnigma/PageEnigma.tsx b/app/pages/PageEnigma/PageEnigma.tsx index e536ff8f89..98a23f28d5 100644 --- a/app/pages/PageEnigma/PageEnigma.tsx +++ b/app/pages/PageEnigma/PageEnigma.tsx @@ -1,28 +1,22 @@ -import { - useCallback, - useEffect, - useRef, -} from 'react'; +import { useCallback, useEffect, useRef } from "react"; import { faChevronLeft, faWandSparkles, } from "@fortawesome/pro-solid-svg-icons"; +import { Button, ButtonLink } from "~/components"; +import { ButtonDialogue } from "~/modules/ButtonDialogue"; +import { TopBarHelmet } from "~/modules/TopBarHelmet/TopBarHelmet"; +import { SidePanel } from "~/modules/SidePanel"; +import { Tabs } from "~/modules/Tabs"; +import { Controls3D } from "./comps/Controls3D"; +import { ControlsVideo } from "./comps/ControlsVideo"; +import { Timeline } from "./comps/Timeline"; -import { - Button, - ButtonLink, -} from '~/components'; -import { ButtonDialogue } from '~/modules/ButtonDialogue'; -import { TopBarHelmet } from '~/modules/TopBarHelmet/TopBarHelmet'; -import { SidePanel } from '~/modules/SidePanel'; -import { Tabs } from '~/modules/Tabs'; -import { Controls3D } from './comps/Controls3D'; -import { ControlsVideo } from './comps/ControlsVideo'; -import { Timeline } from './comps/Timeline'; - -import Editor from './js/editor'; +import Editor from "./js/editor"; +import { TrackContext } from "~/contexts/TrackContext"; +import { TrackProvider } from "~/contexts/TrackProvider"; export const PageEnigma = () => { // const { setTopBarInner } = useContext(TopBarInnerContext) || {}; @@ -30,61 +24,54 @@ export const PageEnigma = () => { const canvasRef = useRef(null); const editorRef = useRef(null); - const editorCallback = useCallback(() => { // handle editorCallback here - },[]); + }, []); - useEffect(() => { //componentDidMount + useEffect(() => { + //componentDidMount editorRef.current = new Editor(); - - function init(){ - if(editorRef.current!==null){ + + function init() { + if (editorRef.current !== null) { //TODO: init with editorRef.current.initialize(editorCallback); editorRef.current.initialize(); } } - - if(canvasRef!==null){ + + if (canvasRef !== null) { init(); - }else{ + } else { setTimeout(init, 500); } }, []); - const handleButtonSave = ()=>{ + const handleButtonSave = () => { editorRef.current?.save(); - } + }; - - return( + return (
- - Back to Dashboard - - - -
+ + Back to Dashboard + + + +
-
-
+
+
- + @@ -93,28 +80,35 @@ export const PageEnigma = () => {

Ask Miles about ThreeJS

Ask Wil about React

- - + +
- Animation Tab

- },{ - header: 'Camera', - children:

Camera Tab

- },{ - header: 'Audio', - children:

Audio Tab

- },{ - header: 'Styling', - children:

Styling Tab

- } - ]}/> + Animation Tab

, + }, + { + header: "Camera", + children:

Camera Tab

, + }, + { + header: "Audio", + children:

Audio Tab

, + }, + { + header: "Styling", + children:

Styling Tab

, + }, + ]} + />
- + + +
); -} \ No newline at end of file +}; diff --git a/app/pages/PageEnigma/comps/Timeline/Character.tsx b/app/pages/PageEnigma/comps/Timeline/Character.tsx new file mode 100644 index 0000000000..9827a2743e --- /dev/null +++ b/app/pages/PageEnigma/comps/Timeline/Character.tsx @@ -0,0 +1,50 @@ +import { TrackClip } from "./TrackClip"; +import { CharacterTrack } from "~/models/track"; + +interface Props { + scale: number; + time: number; + character: CharacterTrack; + updateClip: (id: string, offset: number, length: number) => void; +} + +export const Character = ({ + character: { animationClips }, + updateClip, +}: Props) => { + return ( +
+
Character
+
+
+
+ {animationClips.map((clip, index) => ( + 0 + ? animationClips[index - 1].offset + + animationClips[index - 1].length + : 0 + } + max={ + index < animationClips.length - 1 + ? animationClips[index + 1].offset + : 1000 + } + updateClip={updateClip} + clip={clip} + /> + ))} +
+
+
+
+
+
+
+
+
+
+ ); +}; diff --git a/app/pages/PageEnigma/comps/Timeline/Timeline.tsx b/app/pages/PageEnigma/comps/Timeline/Timeline.tsx index e0c1f6a20c..2377d8fe02 100644 --- a/app/pages/PageEnigma/comps/Timeline/Timeline.tsx +++ b/app/pages/PageEnigma/comps/Timeline/Timeline.tsx @@ -1,31 +1,43 @@ import { LowerPanel } from "~/modules/LowerPanel"; -import { - Button, -} from '~/components'; -import Editor from '../../js/editor'; +import Editor from "../../js/editor"; +import { Character } from "./Character"; +import { useCallback, useContext } from "react"; +import { TrackContext } from "~/contexts/TrackContext"; export const Timeline = ({ - editorCurrent -}:{ - editorCurrent: Editor|null; -})=>{ - const handleButtonLoad = ()=>{ - document.getElementById("load-upload")?.click(); - } - const handleButtonRender = ()=>{ - editorCurrent?.togglePlayback(); - } - const handleButtonPlay = ()=>{ + editorCurrent, +}: { + editorCurrent: Editor | null; +}) => { + const { characters, updateCharacters } = useContext(TrackContext); - } + const updateClip = useCallback( + (id: string, offset: number, length: number) => { + updateCharacters({ type: "animations", id, offset, length }); + }, + [], + ); - return( + return ( -
- - - - +
+ +
+ {characters.map((character) => ( + + ))} +
- ) -} \ No newline at end of file + ); +}; diff --git a/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx b/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx new file mode 100644 index 0000000000..384a85ebb8 --- /dev/null +++ b/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx @@ -0,0 +1,65 @@ +import { useMouseEvents } from "./utils/useMouseEvents"; +import { BaseClip } from "~/models/track"; +import { TrackContext } from "~/contexts/TrackContext"; +import { useContext } from "react"; + +interface Props { + min: number; + max: number; + clip: BaseClip; + updateClip: (id: string, offset: number, length: number) => void; + selected?: boolean; +} + +export const TrackClip = ({ clip, min, max, updateClip }: Props) => { + const { selectClip } = useContext(TrackContext); + const { + onPointerDown, + onPointerUp, + onMouseLeave, + onMouseMove, + offset, + length, + } = useMouseEvents(clip, max, min, updateClip); + + if (clip.selected) { + console.log("selected", clip); + } + return ( + <> +
+ {clip.name} +
+