diff --git a/src/App.js b/src/App.js index 1a7052f..9c9f2fe 100644 --- a/src/App.js +++ b/src/App.js @@ -2,6 +2,7 @@ import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import Editor from "./pages/editor"; import LandingPage from "./pages/landing_page"; import Survey from "./pages/survey"; +import Shortcuts from "./pages/shortcuts"; function App() { return ( @@ -11,6 +12,7 @@ function App() { } /> } /> } /> + }/> diff --git a/src/assets/logo_dark_46.png b/src/assets/logo_dark_46.png new file mode 100644 index 0000000..06e2b5c Binary files /dev/null and b/src/assets/logo_dark_46.png differ diff --git a/src/components/control_panel.jsx b/src/components/control_panel.jsx index 3471a20..7af207a 100644 --- a/src/components/control_panel.jsx +++ b/src/components/control_panel.jsx @@ -966,7 +966,8 @@ export default function ControlPanel(props) { }, Help: { Shortcuts: { - function: () => {}, + function: () => window.open("/shortcuts", "_blank"), + shortcut: "Ctrl+H", }, "Ask us on discord": { function: () => {}, @@ -1003,6 +1004,9 @@ export default function ControlPanel(props) { }); useHotkeys("ctrl+alt+c, meta+alt+c", copyAsImage, { preventDefault: true }); useHotkeys("ctrl+r, meta+r", resetView, { preventDefault: true }); + useHotkeys("ctrl+h, meta+h", () => window.open("/shortcuts", "_blank"), { + preventDefault: true, + }); useHotkeys("ctrl+alt+w, meta+alt+w", fitWindow, { preventDefault: true }); return ( @@ -1200,7 +1204,7 @@ export default function ControlPanel(props) { function toolbar() { return ( -
+
{layoutDropdown()} diff --git a/src/index.css b/src/index.css index dd5ae4c..e3fc53b 100644 --- a/src/index.css +++ b/src/index.css @@ -53,6 +53,11 @@ background-color: var(--semi-color-bg-3); } +.card-theme{ + color: var(--semi-color-text-1); + background-color: rgba(var(--semi-grey-1), 1); +} + .toolbar-theme { background-color: rgba(var(--semi-grey-1), 1); } diff --git a/src/pages/landing_page.jsx b/src/pages/landing_page.jsx index 7e8fd4a..cd9e130 100644 --- a/src/pages/landing_page.jsx +++ b/src/pages/landing_page.jsx @@ -21,8 +21,8 @@ export default function LandingPage() {
)}
-
-
+
+
logo diff --git a/src/pages/shortcuts.jsx b/src/pages/shortcuts.jsx new file mode 100644 index 0000000..1590693 --- /dev/null +++ b/src/pages/shortcuts.jsx @@ -0,0 +1,185 @@ +import React, { useEffect, useState } from "react"; +import logo_light from "../assets/logo_light_46.png"; +import logo_dark from "../assets/logo_dark_46.png"; +import { AutoComplete, Button } from "@douyinfe/semi-ui"; +import { IconSearch, IconSun, IconMoon } from "@douyinfe/semi-icons"; + +const shortcuts = [ + { shortcut: "CTRL+C", title: "Copy selected element", description: "" }, + { shortcut: "CTRL+V", title: "Paste selected element", description: "" }, + { shortcut: "CTRL+X", title: "Cut selected element", description: "" }, + { shortcut: "CTRL+D", title: "Duplicate selected element", description: "" }, + { shortcut: "DEL", title: "Delete selected element", description: "" }, + { shortcut: "CTRL+E", title: "Edit selected element", description: "" }, + { + shortcut: "CTRL+I", + title: "Import a diagram", + description: "Import a diagram by uploadng a valid json or dbb file.", + }, + { shortcut: "CTRL+Z", title: "Undo" }, + { shortcut: "CTRL+Y", title: "Redo" }, + { + shortcut: "CTRL+SHIFT+M", + title: "Enable/disable strict mode", + description: + "Disabling strict mode entails that the diagram will not undergo error or inconsistency checks.", + }, + { + shortcut: "CTRL+SHIFT+F", + title: "Enable/disable field summaries", + description: + "Disabling field summaries will prevent the display of details for each field in the table when hovered over.", + }, + { shortcut: "CTRL+SHIFT+G", title: "Show/hide grid" }, + { + shortcut: "CTRL+ALT+C", + title: "Copy as image", + description: "Save the canvas as an image to the clipboard.", + }, + { + shortcut: "CTRL+R", + title: "Reset view", + description: "Resetting view will set diagram pan to (0, 0).", + }, + { shortcut: "CTRL+UP / Wheel up", title: "Zoom in" }, + { shortcut: "CTRL+DOWN / Wheel down", title: "Zoom out" }, + { shortcut: "CTRL+H", title: "Open shortcuts" }, +]; + +export default function Shortcuts() { + const [theme, setTheme] = useState(""); + const [value, setValue] = useState(""); + const [filteredResult, setFilteredResult] = useState( + shortcuts.map((t) => { + return t.shortcut; + }) + ); + + const handleStringSearch = (value) => { + setFilteredResult( + shortcuts + .filter( + (i) => + i.shortcut.toLowerCase().includes(value.toLowerCase()) || + i.title.toLowerCase().includes(value.toLowerCase()) + ) + .map((i) => i.shortcut) + ); + }; + + useEffect(() => { + const t = localStorage.getItem("theme"); + setTheme(t); + if (t === "dark") { + const body = document.body; + if (body.hasAttribute("theme-mode")) { + body.setAttribute("theme-mode", "dark"); + } + } else { + const body = document.body; + if (body.hasAttribute("theme-mode")) { + body.setAttribute("theme-mode", "light"); + } + } + document.title = "Shortcuts - drawDB"; + document.body.setAttribute("class", "theme"); + }, [setTheme]); + + const changeTheme = () => { + const body = document.body; + const t = body.getAttribute("theme-mode"); + if (t === "dark") { + if (body.hasAttribute("theme-mode")) { + body.setAttribute("theme-mode", "light"); + setTheme("light"); + } + } else { + if (body.hasAttribute("theme-mode")) { + body.setAttribute("theme-mode", "dark"); + setTheme("dark"); + } + } + }; + + return ( + <> +
+
+ logo +
+ Keyboard shortcuts +
+
+
+ +
+ } + placeholder="Search..." + data={filteredResult} + value={value} + onSearch={(v) => handleStringSearch(v)} + emptyContent={ +
No shortcuts found
+ } + onChange={(v) => setValue(v)} + onSelect={(v) => {}} + >
+
+
+
+
+
+ } + placeholder="Search..." + className="w-[80%]" + data={filteredResult} + value={value} + onSearch={(v) => handleStringSearch(v)} + emptyContent={ +
No shortcuts found
+ } + onChange={(v) => setValue(v)} + onSelect={(v) => {}} + >
+
+
+ {shortcuts.map((s, i) => ( +
+
+
{s.shortcut}
+
{s.title}
+
+ {s.description && ( + <> +
+
{s.description}
+ + )} +
+ ))} +
+ + ); +} diff --git a/tailwind.config.js b/tailwind.config.js index c0958ec..cc7f1e1 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -4,7 +4,15 @@ module.exports = { "./src/**/*.{js,jsx,ts,tsx}", ], theme: { - extend: {}, + screens: { + '3xl': {'max': '2047px'}, + '2xl': {'max': '1535px'}, + 'xl': {'max': '1279px'}, + 'lg': {'max': '1023px'}, + 'md': {'max': '767px'}, + 'sm': {'max': '639px'} + }, + extend: {} }, plugins: [], }