Anki/ts/routes/image-occlusion/tools/more-tools.ts
Damien Elmes 9f55cf26fc
Switch to SvelteKit (#3077)
* Update to latest Node LTS

* Add sveltekit

* Split tslib into separate @generated and @tslib components

SvelteKit's path aliases don't support multiple locations, so our old
approach of using @tslib to refer to both ts/lib and out/ts/lib will no
longer work. Instead, all generated sources and their includes are
placed in a separate out/ts/generated folder, and imported via @generated
instead. This also allows us to generate .ts files, instead of needing
to output separate .d.ts and .js files.

* Switch package.json to module type

* Avoid usage of baseUrl

Incompatible with SvelteKit

* Move sass into ts; use relative links

SvelteKit's default sass support doesn't allow overriding loadPaths

* jest->vitest, graphs example working with yarn dev

* most pages working in dev mode

* Some fixes after rebasing

* Fix/silence some svelte-check errors

* Get image-occlusion working with Fabric types

* Post-rebase lock changes

* Editor is now checked

* SvelteKit build integrated into ninja

* Use the new SvelteKit entrypoint for pages like congrats/deck options/etc

* Run eslint once for ts/**; fix some tests

* Fix a bunch of issues introduced when rebasing over latest main

* Run eslint fix

* Fix remaining eslint+pylint issues; tests now all pass

* Fix some issues with a clean build

* Latest bufbuild no longer requires @__PURE__ hack

* Add a few missed dependencies

* Add yarn.bat to fix Windows build

* Fix pages failing to show when ANKI_API_PORT not defined

* Fix svelte-check and vitest on Windows

* Set node path in ./yarn

* Move svelte-kit output to ts/.svelte-kit

Sadly, I couldn't figure out a way to store it in out/ if out/ is
a symlink, as it breaks module resolution when SvelteKit is run.

* Allow HMR inside Anki

* Skip SvelteKit build when HMR is defined

* Fix some post-rebase issues

I should have done a normal merge instead.
2024-03-31 09:16:31 +01:00

157 lines
4 KiB
TypeScript

// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import * as tr from "@generated/ftl";
import {
mdiAlignHorizontalCenter,
mdiAlignHorizontalLeft,
mdiAlignHorizontalRight,
mdiAlignVerticalBottom,
mdiAlignVerticalCenter,
mdiAlignVerticalTop,
mdiCopy,
mdiDeleteOutline,
mdiGroup,
mdiSelectAll,
mdiUngroup,
mdiZoomIn,
mdiZoomOut,
mdiZoomReset,
} from "../icons";
import { deleteItem, duplicateItem, groupShapes, selectAllShapes, unGroupShapes } from "./lib";
import {
alignBottomKeyCombination,
alignHorizontalCenterKeyCombination,
alignLeftKeyCombination,
alignRightKeyCombination,
alignTopKeyCombination,
alignVerticalCenterKeyCombination,
deleteKeyCombination,
duplicateKeyCombination,
groupKeyCombination,
selectAllKeyCombination,
ungroupKeyCombination,
zoomInKeyCombination,
zoomOutKeyCombination,
zoomResetKeyCombination,
} from "./shortcuts";
import {
alignBottom,
alignHorizontalCenter,
alignLeft,
alignRight,
alignTop,
alignVerticalCenter,
} from "./tool-aligns";
import { zoomIn, zoomOut, zoomReset } from "./tool-zoom";
export const groupUngroupTools = [
{
name: "group",
icon: mdiGroup,
action: groupShapes,
tooltip: tr.editingImageOcclusionGroup,
shortcut: groupKeyCombination,
},
{
name: "ungroup",
icon: mdiUngroup,
action: unGroupShapes,
tooltip: tr.editingImageOcclusionUngroup,
shortcut: ungroupKeyCombination,
},
{
name: "select-all",
icon: mdiSelectAll,
action: selectAllShapes,
tooltip: tr.editingImageOcclusionSelectAll,
shortcut: selectAllKeyCombination,
},
];
export const deleteDuplicateTools = [
{
name: "delete",
icon: mdiDeleteOutline,
action: deleteItem,
tooltip: tr.editingImageOcclusionDelete,
shortcut: deleteKeyCombination,
},
{
name: "duplicate",
icon: mdiCopy,
action: duplicateItem,
tooltip: tr.editingImageOcclusionDuplicate,
shortcut: duplicateKeyCombination,
},
];
export const zoomTools = [
{
name: "zoomOut",
icon: mdiZoomOut,
action: zoomOut,
tooltip: tr.editingImageOcclusionZoomOut,
shortcut: zoomOutKeyCombination,
},
{
name: "zoomIn",
icon: mdiZoomIn,
action: zoomIn,
tooltip: tr.editingImageOcclusionZoomIn,
shortcut: zoomInKeyCombination,
},
{
name: "zoomReset",
icon: mdiZoomReset,
action: zoomReset,
tooltip: tr.editingImageOcclusionZoomReset,
shortcut: zoomResetKeyCombination,
},
];
export const alignTools = [
{
id: 1,
icon: mdiAlignHorizontalLeft,
action: alignLeft,
tooltip: tr.editingImageOcclusionAlignLeft,
shortcut: alignLeftKeyCombination,
},
{
id: 2,
icon: mdiAlignHorizontalCenter,
action: alignHorizontalCenter,
tooltip: tr.editingImageOcclusionAlignHCenter,
shortcut: alignHorizontalCenterKeyCombination,
},
{
id: 3,
icon: mdiAlignHorizontalRight,
action: alignRight,
tooltip: tr.editingImageOcclusionAlignRight,
shortcut: alignRightKeyCombination,
},
{
id: 4,
icon: mdiAlignVerticalTop,
action: alignTop,
tooltip: tr.editingImageOcclusionAlignTop,
shortcut: alignTopKeyCombination,
},
{
id: 5,
icon: mdiAlignVerticalCenter,
action: alignVerticalCenter,
tooltip: tr.editingImageOcclusionAlignVCenter,
shortcut: alignVerticalCenterKeyCombination,
},
{
id: 6,
icon: mdiAlignVerticalBottom,
action: alignBottom,
tooltip: tr.editingImageOcclusionAlignBottom,
shortcut: alignBottomKeyCombination,
},
];