diff --git a/apps/backend/src/api/routes/integrations.controller.ts b/apps/backend/src/api/routes/integrations.controller.ts index d47c8e76..cf9a6609 100644 --- a/apps/backend/src/api/routes/integrations.controller.ts +++ b/apps/backend/src/api/routes/integrations.controller.ts @@ -33,7 +33,10 @@ import { } from '@gitroom/nestjs-libraries/integrations/social.abstract'; import { timer } from '@gitroom/helpers/utils/timer'; import { TelegramProvider } from '@gitroom/nestjs-libraries/integrations/social/telegram.provider'; -import { AuthorizationActions, Sections } from '@gitroom/backend/services/auth/permissions/permission.exception.class'; +import { + AuthorizationActions, + Sections, +} from '@gitroom/backend/services/auth/permissions/permission.exception.class'; @ApiTags('Integrations') @Controller('/integrations') @@ -95,6 +98,7 @@ export class IntegrationsController { id: p.id, internalId: p.internalId, disabled: p.disabled, + editor: findIntegration.editor, picture: p.picture || '/no-picture.jpg', identifier: p.providerIdentifier, inBetweenSteps: p.inBetweenSteps, @@ -255,85 +259,62 @@ export class IntegrationsController { throw new Error('Invalid integration'); } - if (getIntegration.type === 'social') { - const integrationProvider = this._integrationManager.getSocialIntegration( - getIntegration.providerIdentifier - ); - if (!integrationProvider) { - throw new Error('Invalid provider'); - } - - if (integrationProvider[body.name]) { - try { - const load = await integrationProvider[body.name]( - getIntegration.token, - body.data, - getIntegration.internalId, - getIntegration - ); - - return load; - } catch (err) { - if (err instanceof RefreshToken) { - const { accessToken, refreshToken, expiresIn, additionalSettings } = - await integrationProvider.refreshToken( - getIntegration.refreshToken - ); - - if (accessToken) { - await this._integrationService.createOrUpdateIntegration( - additionalSettings, - !!integrationProvider.oneTimeToken, - getIntegration.organizationId, - getIntegration.name, - getIntegration.picture!, - 'social', - getIntegration.internalId, - getIntegration.providerIdentifier, - accessToken, - refreshToken, - expiresIn - ); - - getIntegration.token = accessToken; - - if (integrationProvider.refreshWait) { - await timer(10000); - } - return this.functionIntegration(org, body); - } else { - await this._integrationService.disconnectChannel( - org.id, - getIntegration - ); - return false; - } - } - - return false; - } - } - throw new Error('Function not found'); + const integrationProvider = this._integrationManager.getSocialIntegration( + getIntegration.providerIdentifier + ); + if (!integrationProvider) { + throw new Error('Invalid provider'); } - if (getIntegration.type === 'article') { - const integrationProvider = - this._integrationManager.getArticlesIntegration( - getIntegration.providerIdentifier - ); - if (!integrationProvider) { - throw new Error('Invalid provider'); - } - - if (integrationProvider[body.name]) { - return integrationProvider[body.name]( + if (integrationProvider[body.name]) { + try { + const load = await integrationProvider[body.name]( getIntegration.token, body.data, - getIntegration.internalId + getIntegration.internalId, + getIntegration ); + + return load; + } catch (err) { + if (err instanceof RefreshToken) { + const { accessToken, refreshToken, expiresIn, additionalSettings } = + await integrationProvider.refreshToken(getIntegration.refreshToken); + + if (accessToken) { + await this._integrationService.createOrUpdateIntegration( + additionalSettings, + !!integrationProvider.oneTimeToken, + getIntegration.organizationId, + getIntegration.name, + getIntegration.picture!, + 'social', + getIntegration.internalId, + getIntegration.providerIdentifier, + accessToken, + refreshToken, + expiresIn + ); + + getIntegration.token = accessToken; + + if (integrationProvider.refreshWait) { + await timer(10000); + } + return this.functionIntegration(org, body); + } else { + await this._integrationService.disconnectChannel( + org.id, + getIntegration + ); + return false; + } + } + + return false; } - throw new Error('Function not found'); } + throw new Error('Function not found'); } @Post('/social/:integration/connect') diff --git a/apps/frontend/src/app/global.scss b/apps/frontend/src/app/global.scss index 547773ae..2047d477 100644 --- a/apps/frontend/src/app/global.scss +++ b/apps/frontend/src/app/global.scss @@ -543,4 +543,13 @@ html[dir='rtl'] [dir='ltr'] { .ProseMirror .mention { font-weight: bold; color: #ae8afc; +} + +.ProseMirror ul, .preview ul { + list-style: disc; + padding-left: 20px; +} + +.preview ul, .preview li { + white-space: nowrap; } \ No newline at end of file diff --git a/apps/frontend/src/components/launches/calendar.context.tsx b/apps/frontend/src/components/launches/calendar.context.tsx index 785fdac5..368e6c7b 100644 --- a/apps/frontend/src/components/launches/calendar.context.tsx +++ b/apps/frontend/src/components/launches/calendar.context.tsx @@ -68,6 +68,7 @@ export interface Integrations { id: string; disabled?: boolean; inBetweenSteps: boolean; + editor: 'normal' | 'markdown' | 'html'; display: string; identifier: string; type: string; diff --git a/apps/frontend/src/components/launches/general.preview.component.tsx b/apps/frontend/src/components/launches/general.preview.component.tsx index 7eb53c06..15e716e4 100644 --- a/apps/frontend/src/components/launches/general.preview.component.tsx +++ b/apps/frontend/src/components/launches/general.preview.component.tsx @@ -40,7 +40,6 @@ export const GeneralPreviewComponent: FC<{ return { text: finalValue, images: p.image }; }); - console.log(renderContent); return (
{
+ const fetch = useFetch();
+
+ const load = useCallback(async (path: string) => {
+ return (await (await fetch(path)).json()).integrations;
+ }, []);
+
+ return useSWR('/integrations/list', load, {
+ fallbackData: [],
+ });
+};
\ No newline at end of file
diff --git a/apps/frontend/src/components/launches/launches.component.tsx b/apps/frontend/src/components/launches/launches.component.tsx
index bdcca075..9db322d8 100644
--- a/apps/frontend/src/components/launches/launches.component.tsx
+++ b/apps/frontend/src/components/launches/launches.component.tsx
@@ -24,6 +24,8 @@ import { GeneratorComponent } from './generator/generator';
import { useVariables } from '@gitroom/react/helpers/variable.context';
import { NewPost } from '@gitroom/frontend/components/launches/new.post';
import { useT } from '@gitroom/react/translation/get.transation.service.client';
+import { useIntegrationList } from '@gitroom/frontend/components/launches/helpers/use.integration.list';
+
interface MenuComponentInterface {
refreshChannel: (
integration: Integration & {
@@ -283,16 +285,13 @@ export const LaunchesComponent = () => {
const fireEvents = useFireEvents();
const t = useT();
const [reload, setReload] = useState(false);
- const load = useCallback(async (path: string) => {
- return (await (await fetch(path)).json()).integrations;
- }, []);
+
const {
isLoading,
data: integrations,
mutate,
- } = useSWR('/integrations/list', load, {
- fallbackData: [],
- });
+ } = useIntegrationList();
+
const totalNonDisabledChannels = useMemo(() => {
return (
integrations?.filter((integration: any) => !integration.disabled)
@@ -453,7 +452,9 @@ export const LaunchesComponent = () => {
user?.tier?.ai &&
billingEnabled && }
- {process.env.NEXT_PUBLIC_VERSION ? `${process.env.NEXT_PUBLIC_VERSION}` : ''}
+ {process.env.NEXT_PUBLIC_VERSION
+ ? `${process.env.NEXT_PUBLIC_VERSION}`
+ : ''}
diff --git a/apps/frontend/src/components/new-launch/add.edit.modal.tsx b/apps/frontend/src/components/new-launch/add.edit.modal.tsx
index d08e1358..7898c823 100644
--- a/apps/frontend/src/components/new-launch/add.edit.modal.tsx
+++ b/apps/frontend/src/components/new-launch/add.edit.modal.tsx
@@ -115,6 +115,7 @@ export const AddEditModalInnerInner: FC = (props) => {
setCurrent,
internal,
setTags,
+ setEditor,
} = useLaunchStore(
useShallow((state) => ({
reset: state.reset,
@@ -124,6 +125,7 @@ export const AddEditModalInnerInner: FC = (props) => {
global: state.global,
internal: state.internal,
setTags: state.setTags,
+ setEditor: state.setEditor,
}))
);
@@ -154,6 +156,9 @@ export const AddEditModalInnerInner: FC = (props) => {
);
setCurrent(existingData.integration);
}
+ else {
+ setEditor('normal');
+ }
if (props.focusedChannel) {
setCurrent(props.focusedChannel);
diff --git a/apps/frontend/src/components/new-launch/bullets.component.tsx b/apps/frontend/src/components/new-launch/bullets.component.tsx
new file mode 100644
index 00000000..48fbceab
--- /dev/null
+++ b/apps/frontend/src/components/new-launch/bullets.component.tsx
@@ -0,0 +1,20 @@
+'use client';
+
+import { FC, useCallback } from 'react';
+
+export const Bullets: FC<{
+ editor: any;
+ currentValue: string;
+}> = ({ editor }) => {
+ const bullet = () => {
+ editor.commands.toggleBulletList();
+ };
+ return (
+
+ A
+
+ );
+};
diff --git a/apps/frontend/src/components/new-launch/editor.tsx b/apps/frontend/src/components/new-launch/editor.tsx
index c2db7923..43991a3c 100644
--- a/apps/frontend/src/components/new-launch/editor.tsx
+++ b/apps/frontend/src/components/new-launch/editor.tsx
@@ -45,6 +45,8 @@ import Paragraph from '@tiptap/extension-paragraph';
import Underline from '@tiptap/extension-underline';
import { stripHtmlValidation } from '@gitroom/helpers/utils/strip.html.validation';
import { History } from '@tiptap/extension-history';
+import { BulletList, ListItem } from '@tiptap/extension-list';
+import { Bullets } from '@gitroom/frontend/components/new-launch/bullets.component';
const InterceptBoldShortcut = Extension.create({
name: 'preventBoldWithUnderline',
@@ -147,6 +149,9 @@ export const EditorWrapper: FC<{
totalChars,
postComment,
dummy,
+ editor,
+ loadedState,
+ setLoadedState,
} = useLaunchStore(
useShallow((state) => ({
internal: state.internal.find((p) => p.integration.id === state.current),
@@ -172,6 +177,9 @@ export const EditorWrapper: FC<{
appendInternalValueMedia: state.appendInternalValueMedia,
appendGlobalValueMedia: state.appendGlobalValueMedia,
postComment: state.postComment,
+ editor: state.editor,
+ loadedState: state.loaded,
+ setLoadedState: state.setLoaded
}))
);
@@ -179,12 +187,13 @@ export const EditorWrapper: FC<{
const [loaded, setLoaded] = useState(true);
useEffect(() => {
- if (loaded) {
+ if (loaded && loadedState) {
return;
}
+ setLoadedState(true);
setLoaded(true);
- }, [loaded]);
+ }, [loaded, loadedState]);
const canEdit = useMemo(() => {
return current === 'global' || !!internal;
@@ -341,7 +350,7 @@ export const EditorWrapper: FC<{
[current, global, internal]
);
- if (!loaded) {
+ if (!loaded || !loadedState) {
return null;
}
@@ -371,6 +380,7 @@ export const EditorWrapper: FC<{
= (props) => {
const {
+ editorType = 'normal',
allValues,
pictures,
setImages,
@@ -520,7 +532,24 @@ export const Editor: FC<{
[uppy]
);
- const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop });
+ const { getRootProps, isDragActive } = useDropzone({ onDrop });
+
+ const editorOptions = useMemo(() => {
+ if (editorType === 'normal') {
+ return [];
+ }
+
+ const list = [];
+
+ if (
+ editorType === ('markdown' as const) ||
+ editorType === ('html' as const)
+ ) {
+ list.push(BulletList, ListItem);
+ }
+
+ return list;
+ }, [editorType]);
const editor = useEditor({
extensions: [
@@ -536,6 +565,7 @@ export const Editor: FC<{
depth: 100, // default is 100
newGroupDelay: 100, // default is 500ms
}),
+ ...editorOptions,
],
content: props.value || '',
shouldRerenderOnTransaction: true,
@@ -590,6 +620,9 @@ export const Editor: FC<{
+ {(editorType === 'markdown' || editorType === 'html') && (
+
+ )}
setEmojiPickerOpen(!emojiPickerOpen)}
diff --git a/apps/frontend/src/components/new-launch/providers/high.order.provider.tsx b/apps/frontend/src/components/new-launch/providers/high.order.provider.tsx
index c3cf1018..61ac2b2d 100644
--- a/apps/frontend/src/components/new-launch/providers/high.order.provider.tsx
+++ b/apps/frontend/src/components/new-launch/providers/high.order.provider.tsx
@@ -74,7 +74,6 @@ export const withProvider = function (params: {
const fetch = useFetch();
const {
current,
- integrations,
selectedIntegration,
setCurrent,
internal,
@@ -87,6 +86,7 @@ export const withProvider = function (params: {
justCurrent,
allIntegrations,
setPostComment,
+ setEditor,
dummy,
} = useLaunchStore(
useShallow((state) => ({
@@ -104,6 +104,7 @@ export const withProvider = function (params: {
setCurrent: state.setCurrent,
setTotalChars: state.setTotalChars,
setPostComment: state.setPostComment,
+ setEditor: state.setEditor,
selectedIntegration: state.selectedIntegrations.find(
(p) => p.integration.id === props.id
),
@@ -118,9 +119,11 @@ export const withProvider = function (params: {
if (isGlobal) {
setPostComment(PostComment.ALL);
setTotalChars(0);
+ setEditor('normal');
}
if (current) {
+ setEditor(selectedIntegration?.integration.editor);
setPostComment(postComment);
setTotalChars(
typeof maximumCharacters === 'number'
@@ -246,25 +249,27 @@ export const withProvider = function (params: {
{t('preview', 'Preview')}
- {current && (!!SettingsComponent || !!data?.internalPlugs?.length) && (
-
-
-
- )}
+ {current &&
+ (!!SettingsComponent || !!data?.internalPlugs?.length) && (
+
+
+
+ )}
- {current && (tab === 0 ||
- (!SettingsComponent && !data?.internalPlugs?.length)) &&
+ {current &&
+ (tab === 0 ||
+ (!SettingsComponent && !data?.internalPlugs?.length)) &&
!value?.[0]?.content?.length && (
{t(
diff --git a/apps/frontend/src/components/new-launch/providers/show.all.providers.tsx b/apps/frontend/src/components/new-launch/providers/show.all.providers.tsx
index 292d01cd..8e83b804 100644
--- a/apps/frontend/src/components/new-launch/providers/show.all.providers.tsx
+++ b/apps/frontend/src/components/new-launch/providers/show.all.providers.tsx
@@ -24,11 +24,12 @@ import NostrProvider from '@gitroom/frontend/components/new-launch/providers/nos
import VkProvider from '@gitroom/frontend/components/new-launch/providers/vk/vk.provider';
import { useLaunchStore } from '@gitroom/frontend/components/new-launch/store';
import { useShallow } from 'zustand/react/shallow';
-import React, { createRef, FC, forwardRef, useImperativeHandle } from 'react';
+import React, { FC, forwardRef, useEffect, useImperativeHandle } from 'react';
import { GeneralPreviewComponent } from '@gitroom/frontend/components/launches/general.preview.component';
import { IntegrationContext } from '@gitroom/frontend/components/launches/helpers/use.integration';
import { Button } from '@gitroom/react/form/button';
import { useT } from '@gitroom/react/translation/get.transation.service.client';
+import { PostComment } from '@gitroom/frontend/components/new-launch/providers/high.order.provider';
export const Providers = [
{
@@ -154,8 +155,10 @@ export const ShowAllProviders = forwardRef((props, ref) => {
);
},
triggerAll: () => {
- return selectedIntegrations.map(async (p) => await p.ref?.current.trigger());
- }
+ return selectedIntegrations.map(
+ async (p) => await p.ref?.current.trigger()
+ );
+ },
}));
return (
@@ -176,15 +179,18 @@ export const ShowAllProviders = forwardRef((props, ref) => {
>
-
{global?.[0]?.content?.length === 0 ? (
- {t('start_writing_your_post', 'Start writing your post for a preview')}
+
+ {t(
+ 'start_writing_your_post',
+ 'Start writing your post for a preview'
+ )}
+
) : (
)}
diff --git a/apps/frontend/src/components/new-launch/store.ts b/apps/frontend/src/components/new-launch/store.ts
index c229f517..6f0ecac2 100644
--- a/apps/frontend/src/components/new-launch/store.ts
+++ b/apps/frontend/src/components/new-launch/store.ts
@@ -25,6 +25,8 @@ interface SelectedIntegrations {
}
interface StoreState {
+ editor: undefined | 'normal' | 'markdown' | 'html';
+ loaded: boolean;
date: dayjs.Dayjs;
postComment: PostComment;
dummy: boolean;
@@ -118,9 +120,13 @@ interface StoreState {
setPostComment: (postComment: PostComment) => void;
setActivateExitButton?: (activateExitButton: boolean) => void;
setDummy: (dummy: boolean) => void;
+ setEditor: (editor: 'normal' | 'markdown' | 'html') => void;
+ setLoaded?: (loaded: boolean) => void;
}
const initialState = {
+ editor: undefined as undefined,
+ loaded: true,
dummy: false,
activateExitButton: true,
date: dayjs(),
@@ -154,13 +160,22 @@ export const useLaunchStore = create()((set) => ({
);
if (existing) {
+ const selectedList = state.selectedIntegrations.filter(
+ (s, index) => s.integration.id !== existing.integration.id
+ );
+
return {
...(existing.integration.id === state.current
? { current: 'global' }
: {}),
- selectedIntegrations: state.selectedIntegrations.filter(
- (s, index) => s.integration.id !== existing.integration.id
- ),
+ loaded: false,
+ selectedIntegrations: selectedList,
+ ...(selectedList.length === 0
+ ? {
+ current: 'global',
+ editor: 'normal',
+ }
+ : {}),
};
}
@@ -512,4 +527,12 @@ export const useLaunchStore = create()((set) => ({
set((state) => ({
dummy,
})),
+ setEditor: (editor: 'normal' | 'markdown' | 'html') =>
+ set((state) => ({
+ editor,
+ })),
+ setLoaded: (loaded: boolean) =>
+ set((state) => ({
+ loaded,
+ })),
}));
diff --git a/libraries/helpers/src/utils/strip.html.validation.ts b/libraries/helpers/src/utils/strip.html.validation.ts
index f78eb2f3..fd2129ee 100644
--- a/libraries/helpers/src/utils/strip.html.validation.ts
+++ b/libraries/helpers/src/utils/strip.html.validation.ts
@@ -145,11 +145,11 @@ export const stripHtmlValidation = (
.replace(/<\/p>/gi, '');
if (replaceBold) {
- return striptags(convertLinkedinMention(convertToAscii(html)));
+ return striptags(convertLinkedinMention(convertToAscii(html)), ['ul', 'li']);
}
// Strip all other tags
- return striptags(html);
+ return striptags(html, ['ul', 'li']);
};
export const convertLinkedinMention = (value: string) => {
diff --git a/libraries/nestjs-libraries/src/integrations/article/article.integrations.interface.ts b/libraries/nestjs-libraries/src/integrations/article/article.integrations.interface.ts
deleted file mode 100644
index c1d8a040..00000000
--- a/libraries/nestjs-libraries/src/integrations/article/article.integrations.interface.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export interface ArticleIntegrationsInterface {
- authenticate(token: string): Promise<{
- id: string;
- name: string;
- token: string;
- picture: string;
- username: string;
- }>;
- post(
- token: string,
- content: string,
- settings: object
- ): Promise<{ postId: string; releaseURL: string }>;
-}
-
-export interface ArticleProvider extends ArticleIntegrationsInterface {
- identifier: string;
- name: string;
-}
diff --git a/libraries/nestjs-libraries/src/integrations/integration.manager.ts b/libraries/nestjs-libraries/src/integrations/integration.manager.ts
index fea9bd95..50fed756 100644
--- a/libraries/nestjs-libraries/src/integrations/integration.manager.ts
+++ b/libraries/nestjs-libraries/src/integrations/integration.manager.ts
@@ -1,16 +1,13 @@
import 'reflect-metadata';
-import {
- Injectable,
-} from '@nestjs/common';
+import { Injectable } from '@nestjs/common';
import { XProvider } from '@gitroom/nestjs-libraries/integrations/social/x.provider';
import { SocialProvider } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
import { LinkedinProvider } from '@gitroom/nestjs-libraries/integrations/social/linkedin.provider';
import { RedditProvider } from '@gitroom/nestjs-libraries/integrations/social/reddit.provider';
import { DevToProvider } from '@gitroom/nestjs-libraries/integrations/social/dev.to.provider';
import { HashnodeProvider } from '@gitroom/nestjs-libraries/integrations/social/hashnode.provider';
-import { MediumProvider } from '@gitroom/nestjs-libraries/integrations/article/medium.provider';
-import { ArticleProvider } from '@gitroom/nestjs-libraries/integrations/article/article.integrations.interface';
+import { MediumProvider } from '@gitroom/nestjs-libraries/integrations/social/medium.provider';
import { FacebookProvider } from '@gitroom/nestjs-libraries/integrations/social/facebook.provider';
import { InstagramProvider } from '@gitroom/nestjs-libraries/integrations/social/instagram.provider';
import { YoutubeProvider } from '@gitroom/nestjs-libraries/integrations/social/youtube.provider';
@@ -58,9 +55,6 @@ export const socialIntegrationList: SocialProvider[] = [
// new MastodonCustomProvider(),
];
-const articleIntegrationList: ArticleProvider[] = [
-];
-
@Injectable()
export class IntegrationManager {
async getAllIntegrations() {
@@ -70,15 +64,13 @@ export class IntegrationManager {
name: p.name,
identifier: p.identifier,
toolTip: p.toolTip,
+ editor: p.editor,
isExternal: !!p.externalUrl,
isWeb3: !!p.isWeb3,
...(p.customFields ? { customFields: await p.customFields() } : {}),
}))
),
- article: articleIntegrationList.map((p) => ({
- name: p.name,
- identifier: p.identifier,
- })),
+ article: [] as any[],
};
}
@@ -123,10 +115,4 @@ export class IntegrationManager {
getSocialIntegration(integration: string): SocialProvider {
return socialIntegrationList.find((i) => i.identifier === integration)!;
}
- getAllowedArticlesIntegrations() {
- return articleIntegrationList.map((p) => p.identifier);
- }
- getArticlesIntegration(integration: string): ArticleProvider {
- return articleIntegrationList.find((i) => i.identifier === integration)!;
- }
}
diff --git a/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts b/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts
index 7c3cd67c..38709136 100644
--- a/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts
@@ -131,6 +131,7 @@ export class BlueskyProvider extends SocialAbstract implements SocialProvider {
name = 'Bluesky';
isBetweenSteps = false;
scopes = ['write:statuses', 'profile', 'write:media'];
+ editor = 'normal' as const;
async customFields() {
return [
diff --git a/libraries/nestjs-libraries/src/integrations/social/dev.to.provider.ts b/libraries/nestjs-libraries/src/integrations/social/dev.to.provider.ts
index 71dbfa82..76f9c29c 100644
--- a/libraries/nestjs-libraries/src/integrations/social/dev.to.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/dev.to.provider.ts
@@ -13,6 +13,7 @@ export class DevToProvider extends SocialAbstract implements SocialProvider {
identifier = 'devto';
name = 'Dev.to';
isBetweenSteps = false;
+ editor = 'markdown' as const;
scopes = [] as string[];
async generateAuthUrl() {
diff --git a/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts b/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts
index fd7085fe..6d8cfe9f 100644
--- a/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts
@@ -11,6 +11,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
identifier = 'discord';
name = 'Discord';
isBetweenSteps = false;
+ editor = 'markdown' as const;
scopes = ['identify', 'guilds'];
async refreshToken(refreshToken: string): Promise {
const { access_token, expires_in, refresh_token } = await (
diff --git a/libraries/nestjs-libraries/src/integrations/social/dribbble.provider.ts b/libraries/nestjs-libraries/src/integrations/social/dribbble.provider.ts
index be917891..4dcab6b9 100644
--- a/libraries/nestjs-libraries/src/integrations/social/dribbble.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/dribbble.provider.ts
@@ -17,6 +17,7 @@ export class DribbbleProvider extends SocialAbstract implements SocialProvider {
name = 'Dribbble';
isBetweenSteps = false;
scopes = ['public', 'upload'];
+ editor = 'normal' as const;
async refreshToken(refreshToken: string): Promise {
const { access_token, expires_in } = await (
diff --git a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts
index 485f9b64..acbe33d6 100644
--- a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts
@@ -22,6 +22,7 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
'pages_read_engagement',
'read_insights',
];
+ editor = 'normal' as const;
override handleErrors(body: string):
| {
diff --git a/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts b/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts
index ec5a6ed2..18b89a86 100644
--- a/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts
@@ -25,6 +25,7 @@ export class FarcasterProvider
isBetweenSteps = false;
isWeb3 = true;
scopes = [] as string[];
+ editor = 'normal' as const;
async refreshToken(refresh_token: string): Promise {
return {
diff --git a/libraries/nestjs-libraries/src/integrations/social/hashnode.provider.ts b/libraries/nestjs-libraries/src/integrations/social/hashnode.provider.ts
index df2cac67..55e097f4 100644
--- a/libraries/nestjs-libraries/src/integrations/social/hashnode.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/hashnode.provider.ts
@@ -5,7 +5,7 @@ import {
SocialProvider,
} from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
import { SocialAbstract } from '@gitroom/nestjs-libraries/integrations/social.abstract';
-import { tags } from '@gitroom/nestjs-libraries/integrations/article/hashnode.tags';
+import { tags } from '@gitroom/nestjs-libraries/integrations/social/hashnode.tags';
import { jsonToGraphQLQuery } from 'json-to-graphql-query';
import { HashnodeSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/hashnode.settings.dto';
import dayjs from 'dayjs';
@@ -17,6 +17,7 @@ export class HashnodeProvider extends SocialAbstract implements SocialProvider {
name = 'Hashnode';
isBetweenSteps = false;
scopes = [] as string[];
+ editor = 'markdown' as const;
async generateAuthUrl() {
const state = makeId(6);
diff --git a/libraries/nestjs-libraries/src/integrations/article/hashnode.tags.ts b/libraries/nestjs-libraries/src/integrations/social/hashnode.tags.ts
similarity index 100%
rename from libraries/nestjs-libraries/src/integrations/article/hashnode.tags.ts
rename to libraries/nestjs-libraries/src/integrations/social/hashnode.tags.ts
diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts
index 85c6482f..2ca9b079 100644
--- a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts
@@ -11,7 +11,6 @@ import dayjs from 'dayjs';
import { SocialAbstract } from '@gitroom/nestjs-libraries/integrations/social.abstract';
import { InstagramDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/instagram.dto';
import { Integration } from '@prisma/client';
-import { number } from 'yup';
export class InstagramProvider
extends SocialAbstract
@@ -30,6 +29,7 @@ export class InstagramProvider
'instagram_manage_comments',
'instagram_manage_insights',
];
+ editor = 'normal' as const;
async refreshToken(refresh_token: string): Promise {
return {
diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts
index 578ee393..b5afc47a 100644
--- a/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts
@@ -27,6 +27,8 @@ export class InstagramStandaloneProvider
'instagram_business_manage_insights',
];
+ editor = 'normal' as const;
+
public override handleErrors(body: string): { type: "refresh-token" | "bad-body"; value: string } | undefined {
return instagramProvider.handleErrors(body);
}
diff --git a/libraries/nestjs-libraries/src/integrations/social/lemmy.provider.ts b/libraries/nestjs-libraries/src/integrations/social/lemmy.provider.ts
index 165ea086..56d46aee 100644
--- a/libraries/nestjs-libraries/src/integrations/social/lemmy.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/lemmy.provider.ts
@@ -17,6 +17,7 @@ export class LemmyProvider extends SocialAbstract implements SocialProvider {
name = 'Lemmy';
isBetweenSteps = false;
scopes = [] as string[];
+ editor = 'normal' as const;
async customFields() {
return [
diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
index 8d36cb06..96109f6a 100644
--- a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
@@ -30,6 +30,8 @@ export class LinkedinPageProvider
'r_organization_social',
];
+ editor = 'normal' as const;
+
override async refreshToken(
refresh_token: string
): Promise {
diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
index d99b902f..0f479501 100644
--- a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
@@ -31,6 +31,7 @@ export class LinkedinProvider extends SocialAbstract implements SocialProvider {
'r_organization_social',
];
refreshWait = true;
+ editor = 'normal' as const;
async refreshToken(refresh_token: string): Promise {
const {
diff --git a/libraries/nestjs-libraries/src/integrations/social/mastodon.custom.provider.ts b/libraries/nestjs-libraries/src/integrations/social/mastodon.custom.provider.ts
index bc4915e6..d38c1b2b 100644
--- a/libraries/nestjs-libraries/src/integrations/social/mastodon.custom.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/mastodon.custom.provider.ts
@@ -9,6 +9,8 @@ import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
export class MastodonCustomProvider extends MastodonProvider {
override identifier = 'mastodon-custom';
override name = 'M. Instance';
+ editor = 'normal' as const;
+
async externalUrl(url: string) {
const form = new FormData();
form.append('client_name', 'Postiz');
diff --git a/libraries/nestjs-libraries/src/integrations/social/mastodon.provider.ts b/libraries/nestjs-libraries/src/integrations/social/mastodon.provider.ts
index 977ed51e..b9f1da7e 100644
--- a/libraries/nestjs-libraries/src/integrations/social/mastodon.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/mastodon.provider.ts
@@ -13,6 +13,7 @@ export class MastodonProvider extends SocialAbstract implements SocialProvider {
name = 'Mastodon';
isBetweenSteps = false;
scopes = ['write:statuses', 'profile', 'write:media'];
+ editor = 'normal' as const;
async refreshToken(refreshToken: string): Promise {
return {
diff --git a/libraries/nestjs-libraries/src/integrations/article/medium.provider.ts b/libraries/nestjs-libraries/src/integrations/social/medium.provider.ts
similarity index 93%
rename from libraries/nestjs-libraries/src/integrations/article/medium.provider.ts
rename to libraries/nestjs-libraries/src/integrations/social/medium.provider.ts
index 1f1d1e32..cf7d05ee 100644
--- a/libraries/nestjs-libraries/src/integrations/article/medium.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/medium.provider.ts
@@ -1,5 +1,3 @@
-import { ArticleProvider } from '@gitroom/nestjs-libraries/integrations/article/article.integrations.interface';
-import { MediumSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/medium.settings.dto';
import {
AuthTokenDetails,
PostDetails,
@@ -16,6 +14,7 @@ export class MediumProvider extends SocialAbstract implements SocialProvider {
name = 'Medium';
isBetweenSteps = false;
scopes = [] as string[];
+ editor = 'markdown' as const;
async generateAuthUrl() {
const state = makeId(6);
diff --git a/libraries/nestjs-libraries/src/integrations/social/nostr.provider.ts b/libraries/nestjs-libraries/src/integrations/social/nostr.provider.ts
index d41214fd..e165a31f 100644
--- a/libraries/nestjs-libraries/src/integrations/social/nostr.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/nostr.provider.ts
@@ -27,7 +27,8 @@ export class NostrProvider extends SocialAbstract implements SocialProvider {
identifier = 'nostr';
name = 'Nostr';
isBetweenSteps = false;
- scopes = [];
+ scopes = [] as string[];
+ editor = 'normal' as const;
async customFields() {
return [
diff --git a/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts b/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts
index 588f7cd5..0ce6e1b4 100644
--- a/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts
@@ -28,6 +28,8 @@ export class PinterestProvider
'user_accounts:read',
];
+ editor = 'normal' as const;
+
async refreshToken(refreshToken: string): Promise {
const { access_token, expires_in } = await (
await this.fetch('https://api.pinterest.com/v5/oauth/token', {
diff --git a/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts b/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts
index e0ba88d2..1dfd9aaf 100644
--- a/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts
@@ -15,6 +15,7 @@ export class RedditProvider extends SocialAbstract implements SocialProvider {
name = 'Reddit';
isBetweenSteps = false;
scopes = ['read', 'identity', 'submit', 'flair'];
+ editor = 'normal' as const;
async refreshToken(refreshToken: string): Promise {
const {
diff --git a/libraries/nestjs-libraries/src/integrations/social/slack.provider.ts b/libraries/nestjs-libraries/src/integrations/social/slack.provider.ts
index 02e58d82..ad45c12a 100644
--- a/libraries/nestjs-libraries/src/integrations/social/slack.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/slack.provider.ts
@@ -13,6 +13,7 @@ export class SlackProvider extends SocialAbstract implements SocialProvider {
identifier = 'slack';
name = 'Slack';
isBetweenSteps = false;
+ editor = 'normal' as const;
scopes = [
'channels:read',
'chat:write',
diff --git a/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts b/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts
index 19f019a8..f666752b 100644
--- a/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts
@@ -114,6 +114,7 @@ export interface SocialProvider
refreshWait?: boolean;
convertToJPEG?: boolean;
isWeb3?: boolean;
+ editor: 'normal' | 'markdown' | 'html';
customFields?: () => Promise<
{
key: string;
diff --git a/libraries/nestjs-libraries/src/integrations/social/telegram.provider.ts b/libraries/nestjs-libraries/src/integrations/social/telegram.provider.ts
index 427b48db..3578c73e 100644
--- a/libraries/nestjs-libraries/src/integrations/social/telegram.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/telegram.provider.ts
@@ -23,6 +23,7 @@ export class TelegramProvider extends SocialAbstract implements SocialProvider {
isBetweenSteps = false;
isWeb3 = true;
scopes = [] as string[];
+ editor = 'normal' as const;
async refreshToken(refresh_token: string): Promise {
return {
diff --git a/libraries/nestjs-libraries/src/integrations/social/threads.provider.ts b/libraries/nestjs-libraries/src/integrations/social/threads.provider.ts
index dca5a974..b426cfe7 100644
--- a/libraries/nestjs-libraries/src/integrations/social/threads.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/threads.provider.ts
@@ -25,6 +25,8 @@ export class ThreadsProvider extends SocialAbstract implements SocialProvider {
'threads_manage_insights',
];
+ editor = 'normal' as const;
+
async refreshToken(refresh_token: string): Promise {
const { access_token } = await (
await this.fetch(
diff --git a/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts b/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts
index cc6ad3d3..0f26a51f 100644
--- a/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts
@@ -25,6 +25,8 @@ export class TiktokProvider extends SocialAbstract implements SocialProvider {
'user.info.profile',
];
+ editor = 'normal' as const;
+
override handleErrors(body: string):
| {
type: 'refresh-token' | 'bad-body';
diff --git a/libraries/nestjs-libraries/src/integrations/social/vk.provider.ts b/libraries/nestjs-libraries/src/integrations/social/vk.provider.ts
index 34a390b3..e5b45abb 100644
--- a/libraries/nestjs-libraries/src/integrations/social/vk.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/vk.provider.ts
@@ -26,6 +26,8 @@ export class VkProvider extends SocialAbstract implements SocialProvider {
'video',
];
+ editor = 'normal' as const;
+
async refreshToken(refresh: string): Promise {
const [oldRefreshToken, device_id] = refresh.split('&&&&');
const formData = new FormData();
diff --git a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
index d3039438..c6ac2445 100644
--- a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
@@ -26,6 +26,8 @@ export class XProvider extends SocialAbstract implements SocialProvider {
toolTip =
'You will be logged in into your current account, if you would like a different account, change it first on X';
+ editor = 'normal' as const;
+
@Plug({
identifier: 'x-autoRepostPost',
title: 'Auto Repost Posts',
diff --git a/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts b/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts
index 1dbc6003..ce0b2e27 100644
--- a/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts
@@ -63,6 +63,8 @@ export class YoutubeProvider extends SocialAbstract implements SocialProvider {
'https://www.googleapis.com/auth/yt-analytics.readonly',
];
+ editor = 'normal' as const;
+
async refreshToken(refresh_token: string): Promise {
const { client, oauth2 } = clientAndYoutube();
client.setCredentials({ refresh_token });
diff --git a/package.json b/package.json
index c6427c10..61696e69 100644
--- a/package.json
+++ b/package.json
@@ -82,6 +82,7 @@
"@tiptap/extension-bold": "^3.0.6",
"@tiptap/extension-document": "^3.0.6",
"@tiptap/extension-history": "^3.0.7",
+ "@tiptap/extension-list": "^3.0.7",
"@tiptap/extension-paragraph": "^3.0.6",
"@tiptap/extension-text": "^3.0.6",
"@tiptap/extension-underline": "^3.0.6",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c071f20b..f63b7bd6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -123,6 +123,9 @@ importers:
'@tiptap/extension-history':
specifier: ^3.0.7
version: 3.0.7(@tiptap/extensions@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
+ '@tiptap/extension-list':
+ specifier: ^3.0.7
+ version: 3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
'@tiptap/extension-paragraph':
specifier: ^3.0.6
version: 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
@@ -5524,11 +5527,11 @@ packages:
peerDependencies:
'@tiptap/extension-list': ^3.0.6
- '@tiptap/extension-list@3.0.6':
- resolution: {integrity: sha512-pg4R8cjUSMKuMjfOJexFt961U0UDUXfChXQh7PI7BCRCxLAtUvm2l0kGg4OMXiM1PM/ylTApdtUDal0gdOuSrQ==}
+ '@tiptap/extension-list@3.0.7':
+ resolution: {integrity: sha512-rwu5dXRO0YLyxndMHI17PoxK0x0ZaMZKRZflqOy8fSnXNwd3Tdy8/6a9tsmpgO38kOZEYuvMVaeB7J/+UeBVLg==}
peerDependencies:
- '@tiptap/core': ^3.0.6
- '@tiptap/pm': ^3.0.6
+ '@tiptap/core': ^3.0.7
+ '@tiptap/pm': ^3.0.7
'@tiptap/extension-ordered-list@3.0.6':
resolution: {integrity: sha512-9SbeGO6kGKoX8GwhaSgpFNCGxlzfGu5otK5DE+Unn5F8/gIYGBJkXTZE1tj8XzPmH6lWhmKJQPudANnW6yuKqg==}
@@ -21155,9 +21158,9 @@ snapshots:
'@tiptap/pm': 3.0.6
optional: true
- '@tiptap/extension-bullet-list@3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
+ '@tiptap/extension-bullet-list@3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
dependencies:
- '@tiptap/extension-list': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
+ '@tiptap/extension-list': 3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
'@tiptap/extension-code-block@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)':
dependencies:
@@ -21214,22 +21217,22 @@ snapshots:
'@tiptap/pm': 3.0.6
linkifyjs: 4.3.1
- '@tiptap/extension-list-item@3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
+ '@tiptap/extension-list-item@3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
dependencies:
- '@tiptap/extension-list': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
+ '@tiptap/extension-list': 3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
- '@tiptap/extension-list-keymap@3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
+ '@tiptap/extension-list-keymap@3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
dependencies:
- '@tiptap/extension-list': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
+ '@tiptap/extension-list': 3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
- '@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)':
+ '@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)':
dependencies:
'@tiptap/core': 3.0.6(@tiptap/pm@3.0.6)
'@tiptap/pm': 3.0.6
- '@tiptap/extension-ordered-list@3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
+ '@tiptap/extension-ordered-list@3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))':
dependencies:
- '@tiptap/extension-list': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
+ '@tiptap/extension-list': 3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
'@tiptap/extension-paragraph@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))':
dependencies:
@@ -21293,7 +21296,7 @@ snapshots:
'@tiptap/core': 3.0.6(@tiptap/pm@3.0.6)
'@tiptap/extension-blockquote': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
'@tiptap/extension-bold': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
- '@tiptap/extension-bullet-list': 3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
+ '@tiptap/extension-bullet-list': 3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
'@tiptap/extension-code': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
'@tiptap/extension-code-block': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
'@tiptap/extension-document': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
@@ -21304,10 +21307,10 @@ snapshots:
'@tiptap/extension-horizontal-rule': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
'@tiptap/extension-italic': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
'@tiptap/extension-link': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
- '@tiptap/extension-list': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
- '@tiptap/extension-list-item': 3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
- '@tiptap/extension-list-keymap': 3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
- '@tiptap/extension-ordered-list': 3.0.6(@tiptap/extension-list@3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
+ '@tiptap/extension-list': 3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6)
+ '@tiptap/extension-list-item': 3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
+ '@tiptap/extension-list-keymap': 3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
+ '@tiptap/extension-ordered-list': 3.0.6(@tiptap/extension-list@3.0.7(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))(@tiptap/pm@3.0.6))
'@tiptap/extension-paragraph': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
'@tiptap/extension-strike': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))
'@tiptap/extension-text': 3.0.6(@tiptap/core@3.0.6(@tiptap/pm@3.0.6))