From 6a3a7721be91ef9b1e74a4097e7a8b9f8a6ed3d4 Mon Sep 17 00:00:00 2001 From: Philip Okugbe Date: Tue, 17 Sep 2024 15:40:49 +0100 Subject: [PATCH] features and bug fixes (#322) * fix page import title bug * fix youtube embed in markdown export * add link to rendered file html * fix: markdown callout import * update local generateJSON * feat: switch spaces from sidebar * remove unused package * feat: editor date menu command * fix date description * update default locale code * feat: add more code highlight languages --- apps/client/package.json | 1 - .../components/code-block/code-block-view.tsx | 2 +- .../components/slash-menu/menu-items.ts | 23 ++- .../features/editor/extensions/extensions.ts | 17 ++ .../components/sidebar/space-name.module.css | 6 - .../space/components/sidebar/space-name.tsx | 19 --- .../space/components/sidebar/space-select.tsx | 70 ++++++++ .../components/sidebar/space-sidebar.tsx | 55 +++--- .../sidebar/switch-space.module.css | 5 + .../space/components/sidebar/switch-space.tsx | 62 +++++++ .../src/features/space/queries/space-query.ts | 14 +- .../features/space/services/space-service.ts | 10 +- .../helpers/prosemirror/html/generateJSON.ts | 12 +- .../src/database/repos/user/user.repo.ts | 2 +- .../src/integrations/export/turndown-utils.ts | 13 ++ .../src/integrations/import/import.service.ts | 4 +- .../import/utils/callout.marked.ts | 41 +++++ .../integrations/import/utils/marked.utils.ts | 3 + .../src/lib/attachment/attachment.ts | 12 +- pnpm-lock.yaml | 159 ------------------ 20 files changed, 296 insertions(+), 234 deletions(-) delete mode 100644 apps/client/src/features/space/components/sidebar/space-name.module.css delete mode 100644 apps/client/src/features/space/components/sidebar/space-name.tsx create mode 100644 apps/client/src/features/space/components/sidebar/space-select.tsx create mode 100644 apps/client/src/features/space/components/sidebar/switch-space.module.css create mode 100644 apps/client/src/features/space/components/sidebar/switch-space.tsx create mode 100644 apps/server/src/integrations/import/utils/callout.marked.ts diff --git a/apps/client/package.json b/apps/client/package.json index abfa553..fea40cb 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -41,7 +41,6 @@ "react-drawio": "^0.2.0", "react-error-boundary": "^4.0.13", "react-helmet-async": "^2.0.5", - "react-moveable": "^0.56.0", "react-router-dom": "^6.26.1", "socket.io-client": "^4.7.5", "tippy.js": "^6.3.7", diff --git a/apps/client/src/features/editor/components/code-block/code-block-view.tsx b/apps/client/src/features/editor/components/code-block/code-block-view.tsx index f01e8cc..8ee2493 100644 --- a/apps/client/src/features/editor/components/code-block/code-block-view.tsx +++ b/apps/client/src/features/editor/components/code-block/code-block-view.tsx @@ -49,7 +49,7 @@ export default function CodeBlockView(props: NodeViewProps) { + ); +} diff --git a/apps/client/src/features/space/components/sidebar/space-sidebar.tsx b/apps/client/src/features/space/components/sidebar/space-sidebar.tsx index c56c93a..ffaf0a9 100644 --- a/apps/client/src/features/space/components/sidebar/space-sidebar.tsx +++ b/apps/client/src/features/space/components/sidebar/space-sidebar.tsx @@ -5,8 +5,8 @@ import { Text, Tooltip, UnstyledButton, -} from "@mantine/core"; -import { spotlight } from "@mantine/spotlight"; +} from '@mantine/core'; +import { spotlight } from '@mantine/spotlight'; import { IconArrowDown, IconDots, @@ -14,27 +14,27 @@ import { IconPlus, IconSearch, IconSettings, -} from "@tabler/icons-react"; +} from '@tabler/icons-react'; -import classes from "./space-sidebar.module.css"; -import React, { useMemo } from "react"; -import { useAtom } from "jotai"; -import { SearchSpotlight } from "@/features/search/search-spotlight.tsx"; -import { treeApiAtom } from "@/features/page/tree/atoms/tree-api-atom.ts"; -import { Link, useLocation, useParams } from "react-router-dom"; -import clsx from "clsx"; -import { useDisclosure } from "@mantine/hooks"; -import SpaceSettingsModal from "@/features/space/components/settings-modal.tsx"; -import { useGetSpaceBySlugQuery } from "@/features/space/queries/space-query.ts"; -import { SpaceName } from "@/features/space/components/sidebar/space-name.tsx"; -import { getSpaceUrl } from "@/lib/config.ts"; -import SpaceTree from "@/features/page/tree/components/space-tree.tsx"; -import { useSpaceAbility } from "@/features/space/permissions/use-space-ability.ts"; +import classes from './space-sidebar.module.css'; +import React, { useMemo } from 'react'; +import { useAtom } from 'jotai'; +import { SearchSpotlight } from '@/features/search/search-spotlight.tsx'; +import { treeApiAtom } from '@/features/page/tree/atoms/tree-api-atom.ts'; +import { Link, useLocation, useParams } from 'react-router-dom'; +import clsx from 'clsx'; +import { useDisclosure } from '@mantine/hooks'; +import SpaceSettingsModal from '@/features/space/components/settings-modal.tsx'; +import { useGetSpaceBySlugQuery } from '@/features/space/queries/space-query.ts'; +import { getSpaceUrl } from '@/lib/config.ts'; +import SpaceTree from '@/features/page/tree/components/space-tree.tsx'; +import { useSpaceAbility } from '@/features/space/permissions/use-space-ability.ts'; import { SpaceCaslAction, SpaceCaslSubject, -} from "@/features/space/permissions/permissions.type.ts"; -import PageImportModal from "@/features/page/components/page-import-modal.tsx"; +} from '@/features/space/permissions/permissions.type.ts'; +import PageImportModal from '@/features/page/components/page-import-modal.tsx'; +import { SwitchSpace } from './switch-space'; export function SpaceSidebar() { const [tree] = useAtom(treeApiAtom); @@ -52,7 +52,7 @@ export function SpaceSidebar() { } function handleCreatePage() { - tree?.create({ parentId: null, type: "internal", index: 0 }); + tree?.create({ parentId: null, type: 'internal', index: 0 }); } return ( @@ -61,11 +61,12 @@ export function SpaceSidebar() {
- +
@@ -77,7 +78,7 @@ export function SpaceSidebar() { classes.menu, location.pathname.toLowerCase() === getSpaceUrl(spaceSlug) ? classes.activeButton - : "", + : '' )} >
@@ -114,7 +115,7 @@ export function SpaceSidebar() { {spaceAbility.can( SpaceCaslAction.Manage, - SpaceCaslSubject.Page, + SpaceCaslSubject.Page ) && ( @@ -165,7 +166,7 @@ export function SpaceSidebar() { spaceId={space.id} readOnly={spaceAbility.cannot( SpaceCaslAction.Manage, - SpaceCaslSubject.Page, + SpaceCaslSubject.Page )} />
diff --git a/apps/client/src/features/space/components/sidebar/switch-space.module.css b/apps/client/src/features/space/components/sidebar/switch-space.module.css new file mode 100644 index 0000000..451aa9c --- /dev/null +++ b/apps/client/src/features/space/components/sidebar/switch-space.module.css @@ -0,0 +1,5 @@ +.spaceName { + width: 100%; + padding: var(--mantine-spacing-sm); + color: light-dark(var(--mantine-color-dark-4), var(--mantine-color-dark-0)); +} diff --git a/apps/client/src/features/space/components/sidebar/switch-space.tsx b/apps/client/src/features/space/components/sidebar/switch-space.tsx new file mode 100644 index 0000000..d428dfe --- /dev/null +++ b/apps/client/src/features/space/components/sidebar/switch-space.tsx @@ -0,0 +1,62 @@ +import classes from './switch-space.module.css'; +import { useNavigate } from 'react-router-dom'; +import { SpaceSelect } from './space-select'; +import { getSpaceUrl } from '@/lib/config'; +import { Avatar, Button, Popover, Text } from '@mantine/core'; +import { IconChevronDown } from '@tabler/icons-react'; +import { useDisclosure } from '@mantine/hooks'; + +interface SwitchSpaceProps { + spaceName: string; + spaceSlug: string; +} + +export function SwitchSpace({ spaceName, spaceSlug }: SwitchSpaceProps) { + const [opened, { close, open, toggle }] = useDisclosure(false); + const navigate = useNavigate(); + + const handleSelect = (value: string) => { + if (value) { + navigate(getSpaceUrl(value)); + close(); + } + }; + + return ( + + + + + + + + + ); +} diff --git a/apps/client/src/features/space/queries/space-query.ts b/apps/client/src/features/space/queries/space-query.ts index 8bf60ae..306ca30 100644 --- a/apps/client/src/features/space/queries/space-query.ts +++ b/apps/client/src/features/space/queries/space-query.ts @@ -20,18 +20,16 @@ import { removeSpaceMember, createSpace, updateSpace, - deleteSpace, } from '@/features/space/services/space-service.ts'; import { notifications } from '@mantine/notifications'; -import { IPagination } from '@/lib/types.ts'; +import { IPagination, QueryParams } from '@/lib/types.ts'; -export function useGetSpacesQuery(): UseQueryResult< - IPagination, - Error -> { +export function useGetSpacesQuery( + params?: QueryParams +): UseQueryResult, Error> { return useQuery({ - queryKey: ['spaces'], - queryFn: () => getSpaces(), + queryKey: ['spaces', params], + queryFn: () => getSpaces(params), }); } diff --git a/apps/client/src/features/space/services/space-service.ts b/apps/client/src/features/space/services/space-service.ts index a698c77..efdd332 100644 --- a/apps/client/src/features/space/services/space-service.ts +++ b/apps/client/src/features/space/services/space-service.ts @@ -4,12 +4,12 @@ import { IChangeSpaceMemberRole, IRemoveSpaceMember, ISpace, -} from '@/features/space/types/space.types'; -import { IPagination } from '@/lib/types.ts'; -import { IUser } from '@/features/user/types/user.types.ts'; +} from "@/features/space/types/space.types"; +import { IPagination, QueryParams } from "@/lib/types.ts"; +import { IUser } from "@/features/user/types/user.types.ts"; -export async function getSpaces(): Promise> { - const req = await api.post('/spaces'); +export async function getSpaces(params?: QueryParams): Promise> { + const req = await api.post("/spaces", params); return req.data; } diff --git a/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts b/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts index 2f3610d..23d6611 100644 --- a/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts +++ b/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts @@ -1,7 +1,9 @@ import { Extensions, getSchema } from '@tiptap/core'; import { DOMParser, ParseOptions } from '@tiptap/pm/model'; -import { Window, DOMParser as HappyDomParser } from 'happy-dom'; +import { Window } from 'happy-dom'; +// this function does not work as intended +// it has issues with closing tags export function generateJSON( html: string, extensions: Extensions, @@ -10,8 +12,10 @@ export function generateJSON( const schema = getSchema(extensions); const window = new Window(); - const dom = new HappyDomParser().parseFromString(html, 'text/html').body; + const document = window.document; + document.body.innerHTML = html; - // @ts-ignore - return DOMParser.fromSchema(schema).parse(dom, options).toJSON(); + return DOMParser.fromSchema(schema) + .parse(document as never, options) + .toJSON(); } diff --git a/apps/server/src/database/repos/user/user.repo.ts b/apps/server/src/database/repos/user/user.repo.ts index c73f26f..8342e0a 100644 --- a/apps/server/src/database/repos/user/user.repo.ts +++ b/apps/server/src/database/repos/user/user.repo.ts @@ -102,7 +102,7 @@ export class UserRepo { name: insertableUser.name || insertableUser.email.toLowerCase(), email: insertableUser.email.toLowerCase(), password: await hashPassword(insertableUser.password), - locale: 'en', + locale: 'en-US', role: insertableUser?.role, lastLoginAt: new Date(), }; diff --git a/apps/server/src/integrations/export/turndown-utils.ts b/apps/server/src/integrations/export/turndown-utils.ts index 926d127..8d46e66 100644 --- a/apps/server/src/integrations/export/turndown-utils.ts +++ b/apps/server/src/integrations/export/turndown-utils.ts @@ -22,6 +22,7 @@ export function turndown(html: string): string { listParagraph, mathInline, mathBlock, + iframeEmbed, ]); return turndownService.turndown(html).replaceAll('
', ' '); } @@ -120,3 +121,15 @@ function mathBlock(turndownService: TurndownService) { }, }); } + +function iframeEmbed(turndownService: TurndownService) { + turndownService.addRule('iframeEmbed', { + filter: function (node: HTMLInputElement) { + return node.nodeName === 'IFRAME'; + }, + replacement: function (content: any, node: HTMLInputElement) { + const src = node.getAttribute('src'); + return '[' + src + '](' + src + ')'; + }, + }); +} diff --git a/apps/server/src/integrations/import/import.service.ts b/apps/server/src/integrations/import/import.service.ts index 77f183d..cdc8c75 100644 --- a/apps/server/src/integrations/import/import.service.ts +++ b/apps/server/src/integrations/import/import.service.ts @@ -32,8 +32,10 @@ export class ImportService { ): Promise { const file = await filePromise; const fileBuffer = await file.toBuffer(); - const fileName = sanitize(file.filename).slice(0, 255).split('.')[0]; const fileExtension = path.extname(file.filename).toLowerCase(); + const fileName = sanitize( + path.basename(file.filename, fileExtension).slice(0, 255), + ); const fileContent = fileBuffer.toString(); let prosemirrorState = null; diff --git a/apps/server/src/integrations/import/utils/callout.marked.ts b/apps/server/src/integrations/import/utils/callout.marked.ts new file mode 100644 index 0000000..35ce0d6 --- /dev/null +++ b/apps/server/src/integrations/import/utils/callout.marked.ts @@ -0,0 +1,41 @@ +import { Token, marked } from 'marked'; + +interface CalloutToken { + type: 'callout'; + calloutType: string; + text: string; + raw: string; +} + +export const calloutExtension = { + name: 'callout', + level: 'block', + start(src: string) { + return src.match(/:::/)?.index ?? -1; + }, + tokenizer(src: string): CalloutToken | undefined { + const rule = /^:::([a-zA-Z0-9]+)\s+([\s\S]+?):::/; + const match = rule.exec(src); + + const validCalloutTypes = ['info', 'success', 'warning', 'danger']; + + if (match) { + let type = match[1]; + if (!validCalloutTypes.includes(type)) { + type = 'info'; + } + return { + type: 'callout', + calloutType: type, + raw: match[0], + text: match[2].trim(), + }; + } + }, + renderer(token: Token) { + const calloutToken = token as CalloutToken; + const body = marked.parse(calloutToken.text); + + return `
${body}
`; + }, +}; diff --git a/apps/server/src/integrations/import/utils/marked.utils.ts b/apps/server/src/integrations/import/utils/marked.utils.ts index c0283a0..a34cb46 100644 --- a/apps/server/src/integrations/import/utils/marked.utils.ts +++ b/apps/server/src/integrations/import/utils/marked.utils.ts @@ -1,4 +1,5 @@ import { marked } from 'marked'; +import { calloutExtension } from './callout.marked'; marked.use({ renderer: { @@ -25,6 +26,8 @@ marked.use({ }, }); +marked.use({ extensions: [calloutExtension] }); + export async function markdownToHtml(markdownInput: string): Promise { const YAML_FONT_MATTER_REGEX = /^\s*---[\s\S]*?---\s*/; diff --git a/packages/editor-ext/src/lib/attachment/attachment.ts b/packages/editor-ext/src/lib/attachment/attachment.ts index 04fbc9f..5231c89 100644 --- a/packages/editor-ext/src/lib/attachment/attachment.ts +++ b/packages/editor-ext/src/lib/attachment/attachment.ts @@ -6,10 +6,11 @@ export interface AttachmentOptions { HTMLAttributes: Record; view: any; } + export interface AttachmentAttributes { url?: string; name?: string; - mime?: string; // mime type e.g. application/zip + mime?: string; // e.g. application/zip size?: number; attachmentId?: string; } @@ -93,6 +94,15 @@ export const Attachment = Node.create({ this.options.HTMLAttributes, HTMLAttributes, ), + [ + "a", + { + href: HTMLAttributes["data-attachment-url"], + class: "attachment", + target: "blank", + }, + `${HTMLAttributes["data-attachment-name"]}`, + ], ]; }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09381d6..03645aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -270,9 +270,6 @@ importers: react-helmet-async: specifier: ^2.0.5 version: 2.0.5(react@18.3.1) - react-moveable: - specifier: ^0.56.0 - version: 0.56.0 react-router-dom: specifier: ^6.26.1 version: 6.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1555,9 +1552,6 @@ packages: '@casl/ability': ^3.0.0 || ^4.0.0 || ^5.1.0 || ^6.0.0 react: ^16.0.0 || ^17.0.0 || ^18.0.0 - '@cfcs/core@0.0.6': - resolution: {integrity: sha512-FxfJMwoLB8MEMConeXUCqtMGqxdtePQxRBOiGip9ULcYYam3WfCgoY6xdnMaSkYvRvmosp5iuG+TiPofm65+Pw==} - '@chevrotain/cst-dts-gen@11.0.3': resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} @@ -1586,21 +1580,6 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@daybrush/utils@1.13.0': - resolution: {integrity: sha512-ALK12C6SQNNHw1enXK+UO8bdyQ+jaWNQ1Af7Z3FNxeAwjYhQT7do+TRE4RASAJ3ObaS2+TJ7TXR3oz2Gzbw0PQ==} - - '@egjs/agent@2.4.3': - resolution: {integrity: sha512-XvksSENe8wPeFlEVouvrOhKdx8HMniJ3by7sro2uPF3M6QqWwjzVcmvwoPtdjiX8O1lfRoLhQMp1a7NGlVTdIA==} - - '@egjs/children-differ@1.0.1': - resolution: {integrity: sha512-DRvyqMf+CPCOzAopQKHtW+X8iN6Hy6SFol+/7zCUiE5y4P/OB8JP8FtU4NxtZwtafvSL4faD5KoQYPj3JHzPFQ==} - - '@egjs/component@3.0.5': - resolution: {integrity: sha512-cLcGizTrrUNA2EYE3MBmEDt2tQv1joVP1Q3oDisZ5nw0MZDx2kcgEXM+/kZpfa/PAkFvYVhRUZwytIQWoN3V/w==} - - '@egjs/list-differ@1.0.1': - resolution: {integrity: sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==} - '@emnapi/core@1.2.0': resolution: {integrity: sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==} @@ -3009,15 +2988,6 @@ packages: cpu: [x64] os: [win32] - '@scena/dragscroll@1.4.0': - resolution: {integrity: sha512-3O8daaZD9VXA9CP3dra6xcgt/qrm0mg0xJCwiX6druCteQ9FFsXffkF8PrqxY4Z4VJ58fFKEa0RlKqbsi/XnRA==} - - '@scena/event-emitter@1.0.5': - resolution: {integrity: sha512-AzY4OTb0+7ynefmWFQ6hxDdk0CySAq/D4efljfhtRHCOP7MBF9zUfhKG3TJiroVjASqVgkRJFdenS8ArZo6Olg==} - - '@scena/matrix@1.1.1': - resolution: {integrity: sha512-JVKBhN0tm2Srl+Yt+Ywqu0oLgLcdemDQlD1OxmN9jaCTwaFPZ7tY8n6dhVgMEaR9qcR7r+kAlMXnSfNyYdE+Vg==} - '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} @@ -4521,12 +4491,6 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - css-styled@1.0.8: - resolution: {integrity: sha512-tCpP7kLRI8dI95rCh3Syl7I+v7PP+2JYOzWkl0bUEoSbJM+u8ITbutjlQVf0NC2/g4ULROJPi16sfwDIO8/84g==} - - css-to-mat@1.1.1: - resolution: {integrity: sha512-kvpxFYZb27jRd2vium35G7q5XZ2WJ9rWjDUMNT36M3Hc41qCrLXFM5iEKMGXcrPsKfXEN+8l/riB4QzwwwiEyQ==} - css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -5229,9 +5193,6 @@ packages: fractional-indexing-jittered@0.9.1: resolution: {integrity: sha512-qyzDZ7JXWf/yZT2rQDpQwFBbIaZS2o+zb0s740vqreXQ6bFQPd8tAy4D1gGN0CUeIcnNHjuvb0EaLnqHhGV/PA==} - framework-utils@1.1.0: - resolution: {integrity: sha512-KAfqli5PwpFJ8o3psRNs8svpMGyCSAe8nmGcjQ0zZBWN2H6dZDnq+ABp3N3hdUmFeMrLtjOCTXD4yplUJIWceg==} - front-matter@4.0.2: resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} @@ -5276,9 +5237,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - gesto@1.19.4: - resolution: {integrity: sha512-hfr/0dWwh0Bnbb88s3QVJd1ZRJeOWcgHPPwmiH6NnafDYvhTsxg+SLYu+q/oPNh9JS3V+nlr6fNs8kvPAtcRDQ==} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5876,12 +5834,6 @@ packages: resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true - keycode@2.2.1: - resolution: {integrity: sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==} - - keycon@1.4.0: - resolution: {integrity: sha512-p1NAIxiRMH3jYfTeXRs2uWbVJ1WpEjpi8ktzUyBJsX7/wn2qu2VRXktneBLNtKNxJmlUYxRi9gOJt1DuthXR7A==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -6439,9 +6391,6 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - overlap-area@1.1.0: - resolution: {integrity: sha512-3dlJgJCaVeXH0/eZjYVJvQiLVVrPO4U1ZGqlATtx6QGO3b5eNM6+JgUKa7oStBTdYuGTk7gVoABCW6Tp+dhRdw==} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -6867,9 +6816,6 @@ packages: '@types/react': optional: true - react-css-styled@1.1.9: - resolution: {integrity: sha512-M7fJZ3IWFaIHcZEkoFOnkjdiUFmwd8d+gTh2bpqMOcnxy/0Gsykw4dsL4QBiKsxcGow6tETUa4NAUcmJF+/nfw==} - react-dnd-html5-backend@14.1.0: resolution: {integrity: sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==} @@ -6922,9 +6868,6 @@ packages: react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - react-moveable@0.56.0: - resolution: {integrity: sha512-FmJNmIOsOA36mdxbrc/huiE4wuXSRlmon/o+/OrfNhSiYYYL0AV5oObtPluEhb2Yr/7EfYWBHTxF5aWAvjg1SA==} - react-number-format@5.3.1: resolution: {integrity: sha512-qpYcQLauIeEhCZUZY9jXZnnroOtdy3jYaS1zQ3M1Sr6r/KMOBEIGNIb7eKT19g2N1wbYgFgvDzs19hw5TrB8XQ==} peerDependencies: @@ -6971,9 +6914,6 @@ packages: peerDependencies: react: '>=16.8' - react-selecto@1.26.3: - resolution: {integrity: sha512-Ubik7kWSnZyQEBNro+1k38hZaI1tJarE+5aD/qsqCOA1uUBSjgKVBy3EWRzGIbdmVex7DcxznFZLec/6KZNvwQ==} - react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -7203,9 +7143,6 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} - selecto@1.26.3: - resolution: {integrity: sha512-gZHgqMy5uyB6/2YDjv3Qqaf7bd2hTDOpPdxXlrez4R3/L0GiEWDCFaUfrflomgqdb3SxHF2IXY0Jw0EamZi7cw==} - semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -9667,10 +9604,6 @@ snapshots: '@casl/ability': 6.7.1 react: 18.3.1 - '@cfcs/core@0.0.6': - dependencies: - '@egjs/component': 3.0.5 - '@chevrotain/cst-dts-gen@11.0.3': dependencies: '@chevrotain/gast': 11.0.3 @@ -9699,18 +9632,6 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@daybrush/utils@1.13.0': {} - - '@egjs/agent@2.4.3': {} - - '@egjs/children-differ@1.0.1': - dependencies: - '@egjs/list-differ': 1.0.1 - - '@egjs/component@3.0.5': {} - - '@egjs/list-differ@1.0.1': {} - '@emnapi/core@1.2.0': dependencies: '@emnapi/wasi-threads': 1.0.1 @@ -11034,19 +10955,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.21.2': optional: true - '@scena/dragscroll@1.4.0': - dependencies: - '@daybrush/utils': 1.13.0 - '@scena/event-emitter': 1.0.5 - - '@scena/event-emitter@1.0.5': - dependencies: - '@daybrush/utils': 1.13.0 - - '@scena/matrix@1.1.1': - dependencies: - '@daybrush/utils': 1.13.0 - '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 @@ -12836,15 +12744,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-styled@1.0.8: - dependencies: - '@daybrush/utils': 1.13.0 - - css-to-mat@1.1.1: - dependencies: - '@daybrush/utils': 1.13.0 - '@scena/matrix': 1.1.1 - css-what@6.1.0: {} cssesc@3.0.0: {} @@ -13663,8 +13562,6 @@ snapshots: fractional-indexing-jittered@0.9.1: {} - framework-utils@1.1.0: {} - front-matter@4.0.2: dependencies: js-yaml: 3.14.1 @@ -13712,11 +13609,6 @@ snapshots: gensync@1.0.0-beta.2: {} - gesto@1.19.4: - dependencies: - '@daybrush/utils': 1.13.0 - '@scena/event-emitter': 1.0.5 - get-caller-file@2.0.5: {} get-intrinsic@1.2.4: @@ -14559,15 +14451,6 @@ snapshots: dependencies: commander: 8.3.0 - keycode@2.2.1: {} - - keycon@1.4.0: - dependencies: - '@cfcs/core': 0.0.6 - '@daybrush/utils': 1.13.0 - '@scena/event-emitter': 1.0.5 - keycode: 2.2.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -15118,10 +15001,6 @@ snapshots: os-tmpdir@1.0.2: {} - overlap-area@1.1.0: - dependencies: - '@daybrush/utils': 1.13.0 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -15569,11 +15448,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.5 - react-css-styled@1.1.9: - dependencies: - css-styled: 1.0.8 - framework-utils: 1.1.0 - react-dnd-html5-backend@14.1.0: dependencies: dnd-core: 14.0.1 @@ -15645,22 +15519,6 @@ snapshots: react-is@18.2.0: {} - react-moveable@0.56.0: - dependencies: - '@daybrush/utils': 1.13.0 - '@egjs/agent': 2.4.3 - '@egjs/children-differ': 1.0.1 - '@egjs/list-differ': 1.0.1 - '@scena/dragscroll': 1.4.0 - '@scena/event-emitter': 1.0.5 - '@scena/matrix': 1.1.1 - css-to-mat: 1.1.1 - framework-utils: 1.1.0 - gesto: 1.19.4 - overlap-area: 1.1.0 - react-css-styled: 1.1.9 - react-selecto: 1.26.3 - react-number-format@5.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: prop-types: 15.8.1 @@ -15704,10 +15562,6 @@ snapshots: '@remix-run/router': 1.19.1 react: 18.3.1 - react-selecto@1.26.3: - dependencies: - selecto: 1.26.3 - react-style-singleton@2.2.1(@types/react@18.3.5)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -15951,19 +15805,6 @@ snapshots: dependencies: parseley: 0.12.1 - selecto@1.26.3: - dependencies: - '@daybrush/utils': 1.13.0 - '@egjs/children-differ': 1.0.1 - '@scena/dragscroll': 1.4.0 - '@scena/event-emitter': 1.0.5 - css-styled: 1.0.8 - css-to-mat: 1.1.1 - framework-utils: 1.1.0 - gesto: 1.19.4 - keycon: 1.4.0 - overlap-area: 1.1.0 - semver@5.7.2: optional: true