diff --git a/mobile/package.json b/mobile/package.json index cfbb4f2..bd7a6b9 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -18,11 +18,13 @@ "@bytelyst/api-client": "^0.1.0", "@bytelyst/auth-client": "^0.1.0", "@bytelyst/blob-client": "^0.1.0", + "@bytelyst/broadcast-client": "^0.1.0", "@bytelyst/design-tokens": "^0.1.0", "@bytelyst/diagnostics-client": "^0.1.0", "@bytelyst/feature-flag-client": "^0.1.0", "@bytelyst/kill-switch-client": "^0.1.0", "@bytelyst/offline-queue": "^0.1.0", + "@bytelyst/survey-client": "^0.1.0", "@bytelyst/telemetry-client": "^0.1.0", "expo": "~55.0.4", "expo-router": "~6.0.4", diff --git a/mobile/src/app/_layout.tsx b/mobile/src/app/_layout.tsx index 81d5b4c..84c2703 100644 --- a/mobile/src/app/_layout.tsx +++ b/mobile/src/app/_layout.tsx @@ -1,15 +1,26 @@ import { useEffect, useState } from 'react'; import { Stack } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; -import { Text, View } from 'react-native'; +import { Modal, Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native'; import { useAuthStore, type AuthState } from '../store/auth-store'; import { useInboxStore, type InboxState } from '../store/inbox-store'; import { useNotesStore, type NotesState } from '../store/notes-store'; import { useWorkspaceStore, type WorkspaceState } from '../store/workspace-store'; import { checkKillSwitch, initPlatform } from '../lib/platform'; +import { getBroadcastClient } from '../lib/broadcast-client'; +import { getSurveyClient } from '../lib/survey-client'; +import type { InAppMessage } from '@bytelyst/broadcast-client'; +import type { ActiveSurvey, Question, QuestionAnswer } from '@bytelyst/survey-client'; import { colors } from '../theme'; export default function RootLayout() { + const [broadcastMessages, setBroadcastMessages] = useState([]); + const [activeSurvey, setActiveSurvey] = useState(null); + const [surveyStarted, setSurveyStarted] = useState(false); + const [surveyIndex, setSurveyIndex] = useState(0); + const [surveyAnswers, setSurveyAnswers] = useState>({}); + const [textAnswer, setTextAnswer] = useState(''); + const [killSwitchState, setKillSwitchState] = useState<{ checked: boolean; disabled: boolean; @@ -25,6 +36,38 @@ export default function RootLayout() { const hydrateNotes = useNotesStore((state: NotesState) => state.hydrate); const hydrateWorkspaces = useWorkspaceStore((state: WorkspaceState) => state.hydrate); + function toSurveyAnswer(question: Question, value: string): QuestionAnswer { + if (question.type === 'single_choice' || question.type === 'dropdown') { + return { type: 'single_choice', optionId: value }; + } + if (question.type === 'multiple_choice') { + return { type: 'multiple_choice', optionIds: [value] }; + } + if (question.type === 'ranking') { + return { type: 'ranking', rankedOptionIds: [value] }; + } + if (question.type === 'rating' || question.type === 'nps' || question.type === 'scale') { + return { type: 'rating', value: Number(value) }; + } + return { type: 'text', value }; + } + + async function loadBroadcasts(): Promise { + try { + const { messages } = await getBroadcastClient().listMessages(); + setBroadcastMessages(messages.filter((message) => message.status !== 'dismissed')); + } catch { + } + } + + async function loadSurvey(): Promise { + try { + const { survey } = await getSurveyClient().getActiveSurvey(); + setActiveSurvey((current) => current ?? survey); + } catch { + } + } + useEffect(() => { void checkKillSwitch() .then((state) => { @@ -43,6 +86,21 @@ export default function RootLayout() { void hydrateNotes(); void hydrateWorkspaces(); void hydrateInbox(); + void loadBroadcasts(); + void loadSurvey(); + + const broadcastTimer = setInterval(() => { + void loadBroadcasts(); + }, 5 * 60_000); + + const surveyTimer = setInterval(() => { + void loadSurvey(); + }, 10 * 60_000); + + return () => { + clearInterval(broadcastTimer); + clearInterval(surveyTimer); + }; }, [bootstrapAuth, hydrateInbox, hydrateNotes, hydrateWorkspaces]); if (killSwitchState.checked && killSwitchState.disabled) { @@ -68,15 +126,334 @@ export default function RootLayout() { ); } + const currentQuestion = activeSurvey?.questions[surveyIndex]; + + async function dismissBroadcast(messageId: string): Promise { + try { + await getBroadcastClient().markDismissed(messageId); + } catch { + } + setBroadcastMessages((current) => current.filter((message) => message.id !== messageId)); + } + + async function startSurvey(): Promise { + if (!activeSurvey) { + return; + } + try { + await getSurveyClient().startSurvey(activeSurvey.id); + } catch { + } + setSurveyStarted(true); + } + + async function dismissSurvey(): Promise { + if (activeSurvey) { + try { + await getSurveyClient().dismissSurvey(activeSurvey.id); + } catch { + } + } + setActiveSurvey(null); + setSurveyStarted(false); + setSurveyIndex(0); + setSurveyAnswers({}); + setTextAnswer(''); + } + + async function submitAnswer(value: string): Promise { + if (!activeSurvey || !currentQuestion) { + return; + } + + const answer = toSurveyAnswer(currentQuestion, value); + setSurveyAnswers((current) => ({ + ...current, + [currentQuestion.id]: answer, + })); + + try { + await getSurveyClient().submitAnswer(activeSurvey.id, currentQuestion.id, answer); + } catch { + return; + } + + const isLastQuestion = surveyIndex >= activeSurvey.questions.length - 1; + if (isLastQuestion) { + try { + await getSurveyClient().completeSurvey(activeSurvey.id); + } catch { + } + await dismissSurvey(); + return; + } + + setSurveyIndex((current) => current + 1); + setTextAnswer(''); + } + return ( - <> + - - + {broadcastMessages.length > 0 ? ( + + {broadcastMessages.map((message) => ( + + + {message.title} + {message.body ? {message.body} : null} + + {message.dismissible !== false ? ( + void dismissBroadcast(message.id)}> + × + + ) : null} + + ))} + + ) : null} + + {activeSurvey && !surveyStarted ? ( + + {activeSurvey.title} + + void startSurvey()}> + Start + + void dismissSurvey()}> + Dismiss + + + + ) : null} + + + + + + + + + {activeSurvey?.title} + {currentQuestion?.text} + + {surveyIndex + 1}/{activeSurvey?.questions.length ?? 1} + + + {currentQuestion?.options?.length ? ( + + {currentQuestion.options.map((option) => ( + void submitAnswer(option.id)} + > + {option.emoji ? `${option.emoji} ` : ''}{option.text} + + ))} + + ) : currentQuestion && (currentQuestion.type === 'rating' || currentQuestion.type === 'nps' || currentQuestion.type === 'scale') ? ( + + {Array.from( + { length: (currentQuestion.maxValue ?? 5) - (currentQuestion.minValue ?? 1) + 1 }, + (_, index) => (currentQuestion.minValue ?? 1) + index, + ).map((value) => ( + void submitAnswer(String(value))}> + {value} + + ))} + + ) : ( + <> + + void submitAnswer(textAnswer.trim())} + > + Next + + + )} + + void dismissSurvey()}> + Close + + + + + ); } + +const styles = StyleSheet.create({ + root: { + flex: 1, + backgroundColor: colors.bgCanvas, + }, + bannerSection: { + paddingHorizontal: 12, + paddingTop: 10, + gap: 8, + }, + bannerCard: { + borderRadius: 12, + borderWidth: 1, + borderColor: colors.borderDefault, + backgroundColor: colors.bgElevated, + padding: 10, + flexDirection: 'row', + alignItems: 'flex-start', + justifyContent: 'space-between', + }, + bannerContent: { + flex: 1, + gap: 4, + paddingRight: 10, + }, + bannerTitle: { + color: colors.textPrimary, + fontWeight: '700', + fontSize: 13, + }, + bannerBody: { + color: colors.textSecondary, + fontSize: 12, + }, + bannerDismiss: { + color: colors.textSecondary, + fontSize: 18, + lineHeight: 18, + }, + surveyPrompt: { + margin: 12, + borderRadius: 12, + borderWidth: 1, + borderColor: colors.borderDefault, + backgroundColor: colors.surfaceCard, + padding: 12, + gap: 10, + }, + surveyPromptText: { + color: colors.textPrimary, + fontWeight: '700', + }, + surveyActions: { + flexDirection: 'row', + gap: 8, + }, + primaryButton: { + borderRadius: 10, + backgroundColor: colors.accentPrimary, + paddingHorizontal: 14, + paddingVertical: 10, + alignItems: 'center', + justifyContent: 'center', + }, + primaryButtonText: { + color: colors.textPrimary, + fontWeight: '700', + }, + secondaryButton: { + borderRadius: 10, + borderWidth: 1, + borderColor: colors.borderDefault, + paddingHorizontal: 14, + paddingVertical: 10, + alignItems: 'center', + justifyContent: 'center', + }, + secondaryButtonText: { + color: colors.textSecondary, + fontWeight: '600', + }, + stackContainer: { + flex: 1, + }, + modalBackdrop: { + flex: 1, + backgroundColor: 'rgba(0,0,0,0.45)', + justifyContent: 'center', + paddingHorizontal: 16, + }, + modalCard: { + borderRadius: 16, + borderWidth: 1, + borderColor: colors.borderDefault, + backgroundColor: colors.bgCanvas, + padding: 16, + gap: 12, + maxHeight: '85%', + }, + modalTitle: { + color: colors.textPrimary, + fontWeight: '700', + fontSize: 18, + }, + modalQuestion: { + color: colors.textPrimary, + fontSize: 15, + lineHeight: 21, + }, + modalMeta: { + color: colors.textSecondary, + fontSize: 12, + }, + optionsList: { + gap: 8, + }, + optionButton: { + borderRadius: 10, + borderWidth: 1, + borderColor: colors.borderDefault, + paddingHorizontal: 12, + paddingVertical: 10, + }, + optionText: { + color: colors.textPrimary, + fontSize: 14, + }, + ratingRow: { + flexDirection: 'row', + flexWrap: 'wrap', + gap: 8, + }, + ratingButton: { + width: 38, + height: 38, + borderRadius: 19, + borderWidth: 1, + borderColor: colors.borderDefault, + alignItems: 'center', + justifyContent: 'center', + }, + ratingText: { + color: colors.textPrimary, + fontWeight: '600', + }, + answerInput: { + borderRadius: 10, + borderWidth: 1, + borderColor: colors.borderDefault, + backgroundColor: colors.bgElevated, + color: colors.textPrimary, + padding: 10, + minHeight: 42, + textAlignVertical: 'top' as const, + }, + disabledButton: { + opacity: 0.5, + }, +}); diff --git a/mobile/src/lib/broadcast-client.ts b/mobile/src/lib/broadcast-client.ts new file mode 100644 index 0000000..7d9a7bf --- /dev/null +++ b/mobile/src/lib/broadcast-client.ts @@ -0,0 +1,20 @@ +import { createBroadcastClient, type BroadcastClient } from '@bytelyst/broadcast-client'; +import { API_CONFIG, PRODUCT_ID } from '../api/config'; +import { getAuthClient } from '../api/auth'; + +let broadcastClient: BroadcastClient | null = null; + +export function getBroadcastClient(): BroadcastClient { + if (!broadcastClient) { + broadcastClient = createBroadcastClient({ + baseUrl: API_CONFIG.platformBaseUrl, + productId: PRODUCT_ID, + getAuthToken: () => getAuthClient().getAccessToken() ?? '', + platform: 'ios', + appVersion: '0.1.0', + osVersion: 'unknown', + }); + } + + return broadcastClient; +} diff --git a/mobile/src/lib/survey-client.ts b/mobile/src/lib/survey-client.ts new file mode 100644 index 0000000..c195401 --- /dev/null +++ b/mobile/src/lib/survey-client.ts @@ -0,0 +1,20 @@ +import { createSurveyClient, type SurveyClient } from '@bytelyst/survey-client'; +import { API_CONFIG, PRODUCT_ID } from '../api/config'; +import { getAuthClient } from '../api/auth'; + +let surveyClient: SurveyClient | null = null; + +export function getSurveyClient(): SurveyClient { + if (!surveyClient) { + surveyClient = createSurveyClient({ + baseUrl: API_CONFIG.platformBaseUrl, + productId: PRODUCT_ID, + getAuthToken: () => getAuthClient().getAccessToken() ?? '', + platform: 'ios', + appVersion: '0.1.0', + osVersion: 'unknown', + }); + } + + return surveyClient; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99e74b4..c3802af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,6 +96,9 @@ importers: '@bytelyst/blob-client': specifier: ^0.1.0 version: 0.1.0 + '@bytelyst/broadcast-client': + specifier: ^0.1.0 + version: 0.1.0 '@bytelyst/design-tokens': specifier: ^0.1.0 version: 0.1.0 @@ -111,6 +114,9 @@ importers: '@bytelyst/offline-queue': specifier: ^0.1.0 version: 0.1.0 + '@bytelyst/survey-client': + specifier: ^0.1.0 + version: 0.1.0 '@bytelyst/telemetry-client': specifier: ^0.1.0 version: 0.1.0 @@ -181,49 +187,79 @@ importers: '@bytelyst/blob-client': specifier: ^0.1.0 version: 0.1.0 + '@bytelyst/broadcast-client': + specifier: ^0.1.0 + version: 0.1.0 + '@bytelyst/dashboard-components': + specifier: ^0.1.0 + version: 0.1.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@bytelyst/design-tokens': specifier: ^0.1.0 version: 0.1.0 '@bytelyst/diagnostics-client': specifier: ^0.1.0 version: 0.1.0(zod@4.3.6) + '@bytelyst/extraction': + specifier: ^0.1.0 + version: 0.1.0(@bytelyst/api-client@0.1.0) '@bytelyst/feature-flag-client': specifier: ^0.1.0 version: 0.1.0 + '@bytelyst/feedback-client': + specifier: ^0.1.0 + version: 0.1.0(zod@4.3.6) '@bytelyst/kill-switch-client': specifier: ^0.1.0 version: 0.1.0 + '@bytelyst/offline-queue': + specifier: ^0.1.0 + version: 0.1.0 '@bytelyst/platform-client': specifier: ^0.1.0 version: 0.1.0 '@bytelyst/react-auth': specifier: ^0.1.0 version: 0.1.1(react@19.2.0) + '@bytelyst/survey-client': + specifier: ^0.1.0 + version: 0.1.0 '@bytelyst/telemetry-client': specifier: ^0.1.0 version: 0.1.0 '@bytelyst/ui': - specifier: file:../../learning_ai_common_plat/packages/ui - version: file:../learning_ai_common_plat/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^0.1.0 + version: 0.1.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tiptap/extension-placeholder': + specifier: ^2.11.0 + version: 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/pm': + specifier: ^2.11.0 + version: 2.27.2 + '@tiptap/react': + specifier: ^2.11.0 + version: 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tiptap/starter-kit': + specifier: ^2.11.0 + version: 2.27.2 lucide-react: specifier: ^0.575.0 version: 0.575.0(react@19.2.0) next: specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 16.1.6(@babel/core@7.29.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: specifier: 19.2.0 version: 19.2.0 react-dom: specifier: 19.2.0 version: 19.2.0(react@19.2.0) - zod: - specifier: ^4.3.6 - version: 4.3.6 - zustand: - specifier: ^5.0.11 - version: 5.0.12(@types/react@19.2.14)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + sonner: + specifier: ^2.0.0 + version: 2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: + '@playwright/test': + specifier: ^1.58.2 + version: 1.58.2 '@tailwindcss/postcss': specifier: ^4 version: 4.2.2 @@ -873,6 +909,9 @@ packages: '@bytelyst/blob-client@0.1.0': resolution: {integrity: sha512-RX0f1vYwaUWUFO9ZJHi9KmAsm1T/3JaExEYeTP0sesK4GtjcTGO/NNqtGcXKsN+atEsORvlrmSPQmBAcgcC5zA==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fblob-client/-/0.1.0/blob-client-0.1.0.tgz} + '@bytelyst/broadcast-client@0.1.0': + resolution: {integrity: sha512-NkEb57GgM5T5CDypHiQ7H5RwEioXucK2+oGNAr2T+UkaNW5UDkqpKDUieYcYAiOUUfU1r6AThfU0VnxqlFLo9w==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fbroadcast-client/-/0.1.0/broadcast-client-0.1.0.tgz} + '@bytelyst/config@0.1.0': resolution: {integrity: sha512-nr6pRZXj6EItZfq8CjcjTgIYjn0E440bhJ/dmeD8315qDPAz3GEaGXlVfrgvfoBA+96OVMtk8drZIorUbUp2aw==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fconfig/-/0.1.0/config-0.1.0.tgz} peerDependencies: @@ -890,6 +929,12 @@ packages: peerDependencies: '@azure/cosmos': '>=4.0.0' + '@bytelyst/dashboard-components@0.1.0': + resolution: {integrity: sha512-80sVXWTx061g9tpdPG6J6EkVs3jgIzyLzLm7KJgU48/YCK564JB1EmiijHc4Dda5QuyvT4x4Ps1xXFG9maa5OA==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fdashboard-components/-/0.1.0/dashboard-components-0.1.0.tgz} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + '@bytelyst/datastore@0.1.0': resolution: {integrity: sha512-rBrV2gxfMayJWiA6TeuqeOdfhArCMmoQWGWfl7Q5VRJF4NUqbK8TA/vZtbfzCHAkVGi9v3QqbEDMM5uksmCYMA==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fdatastore/-/0.1.0/datastore-0.1.0.tgz} peerDependencies: @@ -909,6 +954,11 @@ packages: '@bytelyst/errors@0.1.0': resolution: {integrity: sha512-hE4sHwmQUDGZYDdo3w7VuRdVfuaXgEcG2f0KD0ZLJF+EgfRmDV3IevD1ubPsJIIZxMu8brK8zZOvPohhsMsYdw==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Ferrors/-/0.1.0/errors-0.1.0.tgz} + '@bytelyst/extraction@0.1.0': + resolution: {integrity: sha512-Pzb7T30ig2iZ10hnVM6sjLkKEspVo1j3PgTCERrevBVMbGL7NpBtn/rTwiMVghzj6Q8wDTKwn/q1ZkurzAuF8A==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fextraction/-/0.1.0/extraction-0.1.0.tgz} + peerDependencies: + '@bytelyst/api-client': 0.1.0 + '@bytelyst/fastify-auth@0.1.0': resolution: {integrity: sha512-WqKbu+c0BG0P39b5C6KqHDVxGrfYDiVQFMhVw+BtFkTgOZAaFn8s83ukotbiaNtfl4/UvfuFx3mUrrveJIj06g==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Ffastify-auth/-/0.1.0/fastify-auth-0.1.0.tgz} peerDependencies: @@ -931,6 +981,11 @@ packages: '@bytelyst/feature-flag-client@0.1.0': resolution: {integrity: sha512-OHh6zDLl7HKjgQoKi7l9Rnxl7aDcF7WMgSKBrenGHYs3G3c636k+gPo+j25m3XhHpKA7+ZILDJ00E5gBG+lhPg==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Ffeature-flag-client/-/0.1.0/feature-flag-client-0.1.0.tgz} + '@bytelyst/feedback-client@0.1.0': + resolution: {integrity: sha512-h5zDD/pMk1ORx1cWJes05RwqqBaiVM15uegoi8/DBXTU3t7kwkZcz3q5m2QdmcZBUY4b07syxZgf2t8pQ75WXQ==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Ffeedback-client/-/0.1.0/feedback-client-0.1.0.tgz} + peerDependencies: + zod: ^3.22.0 + '@bytelyst/field-encrypt@0.1.0': resolution: {integrity: sha512-C++tZ2aP6TuMDjkPzMb6U591FjmwvdbvSL6NB4w0e7Gqi2n72/y1+6LecLsXrAC60pHG/ALHgAmRJAFI2UdFgw==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Ffield-encrypt/-/0.1.0/field-encrypt-0.1.0.tgz} peerDependencies: @@ -960,6 +1015,9 @@ packages: peerDependencies: react: '>=18.0.0' + '@bytelyst/survey-client@0.1.0': + resolution: {integrity: sha512-Y2e0ged9JpB141yy3C3/Mn1gtHCoY+gfCEaN21RBLqhp7MYMnuWTSn74yVY0o8LrvACcBFOUZjVtqdyrq8LPdw==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fsurvey-client/-/0.1.0/survey-client-0.1.0.tgz} + '@bytelyst/telemetry-client@0.1.0': resolution: {integrity: sha512-ZMqrOpQG+C7Ne/8Y7fbnFGy/Q2r+3MnOJZr60ozfCcp2cLI4slSZxQgE8oRa0F6uQ7WzjOFzPDkKMaWF/UPbgQ==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Ftelemetry-client/-/0.1.0/telemetry-client-0.1.0.tgz} @@ -972,8 +1030,8 @@ packages: fastify: optional: true - '@bytelyst/ui@file:../learning_ai_common_plat/packages/ui': - resolution: {directory: ../learning_ai_common_plat/packages/ui, type: directory} + '@bytelyst/ui@0.1.0': + resolution: {integrity: sha512-qQF7ubWNcqjn1aH3GisQCtid8Xsmvh6JjS3CZ7hXq8ea3HA+Ib2AQnGvfMiSpJSV/t0LmZKQFHTUddBMAjALeg==, tarball: http://localhost:3300/api/packages/bytelyst/npm/%40bytelyst%2Fui/-/0.1.0/ui-0.1.0.tgz} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -1707,6 +1765,14 @@ packages: '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@playwright/test@1.58.2': + resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} + engines: {node: '>=18'} + hasBin: true + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -2088,6 +2154,9 @@ packages: '@react-navigation/routers@7.5.3': resolution: {integrity: sha512-1tJHg4KKRJuQ1/EvJxatrMef3NZXEPzwUIUZ3n1yJ2t7Q97siwRtbynRpQG9/69ebbtiZ8W3ScOZF/OmhvM4Rg==} + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + '@rollup/rollup-android-arm-eabi@4.60.0': resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] @@ -2342,6 +2411,143 @@ packages: '@types/react-dom': optional: true + '@tiptap/core@2.27.2': + resolution: {integrity: sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==} + peerDependencies: + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-blockquote@2.27.2': + resolution: {integrity: sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bold@2.27.2': + resolution: {integrity: sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bubble-menu@2.27.2': + resolution: {integrity: sha512-VkwlCOcr0abTBGzjPXklJ92FCowG7InU8+Od9FyApdLNmn0utRYGRhw0Zno6VgE9EYr1JY4BRnuSa5f9wlR72w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-bullet-list@2.27.2': + resolution: {integrity: sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-code-block@2.27.2': + resolution: {integrity: sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-code@2.27.2': + resolution: {integrity: sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-document@2.27.2': + resolution: {integrity: sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-dropcursor@2.27.2': + resolution: {integrity: sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-floating-menu@2.27.2': + resolution: {integrity: sha512-GUN6gPIGXS7ngRJOwdSmtBRBDt9Kt9CM/9pSwKebhLJ+honFoNA+Y6IpVyDvvDMdVNgBchiJLs6qA5H97gAePQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-gapcursor@2.27.2': + resolution: {integrity: sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-hard-break@2.27.2': + resolution: {integrity: sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-heading@2.27.2': + resolution: {integrity: sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-history@2.27.2': + resolution: {integrity: sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-horizontal-rule@2.27.2': + resolution: {integrity: sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-italic@2.27.2': + resolution: {integrity: sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-list-item@2.27.2': + resolution: {integrity: sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-ordered-list@2.27.2': + resolution: {integrity: sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-paragraph@2.27.2': + resolution: {integrity: sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-placeholder@2.27.2': + resolution: {integrity: sha512-IjsgSVYJRjpAKmIoapU0E2R4E2FPY3kpvU7/1i7PUYisylqejSJxmtJPGYw0FOMQY9oxnEEvfZHMBA610tqKpg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-strike@2.27.2': + resolution: {integrity: sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text-style@2.27.2': + resolution: {integrity: sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text@2.27.2': + resolution: {integrity: sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/pm@2.27.2': + resolution: {integrity: sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==} + + '@tiptap/react@2.27.2': + resolution: {integrity: sha512-0EAs8Cpkfbvben1PZ34JN2Nd79Dhioynm2jML27DBbf1VWPk+FFWFGTMLUT0bu+Np5iVxio8fqV9t0mc4D6thA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tiptap/starter-kit@2.27.2': + resolution: {integrity: sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -2390,6 +2596,15 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/node@22.19.15': resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} @@ -2404,6 +2619,9 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -3081,6 +3299,9 @@ packages: core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3244,6 +3465,10 @@ packages: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -3698,6 +3923,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4270,6 +4500,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4328,6 +4561,10 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + hasBin: true + marky@1.3.0: resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} @@ -4338,6 +4575,9 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -4681,6 +4921,9 @@ packages: resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} engines: {node: '>=6'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4771,6 +5014,16 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + playwright-core@1.58.2: + resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.58.2: + resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} + engines: {node: '>=18'} + hasBin: true + plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} @@ -4834,6 +5087,68 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prosemirror-changeset@2.4.0: + resolution: {integrity: sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==} + + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} + + prosemirror-gapcursor@1.4.1: + resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-markdown@1.13.4: + resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} + + prosemirror-menu@1.3.0: + resolution: {integrity: sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + + prosemirror-tables@1.8.5: + resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} + + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + + prosemirror-transform@1.12.0: + resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==} + + prosemirror-view@1.41.7: + resolution: {integrity: sha512-jUwKNCEIGiqdvhlS91/2QAg21e4dfU5bH2iwmSDQeosXJgKF7smG0YSplOWK0cjSNgIqXe7VXqo7EIfUFJdt3w==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5078,6 +5393,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -5239,6 +5557,12 @@ packages: sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sonner@2.0.7: + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -5466,6 +5790,9 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} + tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + tldts-core@7.0.27: resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} @@ -5563,6 +5890,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -5769,6 +6099,9 @@ packages: vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -6735,6 +7068,8 @@ snapshots: '@bytelyst/blob-client@0.1.0': {} + '@bytelyst/broadcast-client@0.1.0': {} + '@bytelyst/config@0.1.0(zod@3.25.76)': dependencies: zod: 3.25.76 @@ -6743,6 +7078,11 @@ snapshots: dependencies: '@azure/cosmos': 4.9.2(@azure/core-client@1.10.1) + '@bytelyst/dashboard-components@0.1.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + '@bytelyst/datastore@0.1.0(@azure/cosmos@4.9.2(@azure/core-client@1.10.1))': optionalDependencies: '@azure/cosmos': 4.9.2(@azure/core-client@1.10.1) @@ -6756,6 +7096,10 @@ snapshots: '@bytelyst/errors@0.1.0': {} + '@bytelyst/extraction@0.1.0(@bytelyst/api-client@0.1.0)': + dependencies: + '@bytelyst/api-client': 0.1.0 + '@bytelyst/fastify-auth@0.1.0(fastify@5.7.4)(jose@6.2.2)': dependencies: '@bytelyst/errors': 0.1.0 @@ -6770,6 +7114,11 @@ snapshots: '@bytelyst/feature-flag-client@0.1.0': {} + '@bytelyst/feedback-client@0.1.0(zod@4.3.6)': + dependencies: + '@bytelyst/api-client': 0.1.0 + zod: 4.3.6 + '@bytelyst/field-encrypt@0.1.0(@azure/keyvault-keys@4.10.0(@azure/core-client@1.10.1))(zod@3.25.76)': dependencies: '@bytelyst/errors': 0.1.0 @@ -6790,6 +7139,8 @@ snapshots: '@bytelyst/api-client': 0.1.0 react: 19.2.0 + '@bytelyst/survey-client@0.1.0': {} + '@bytelyst/telemetry-client@0.1.0': {} '@bytelyst/testing@0.1.0(fastify@5.7.4)(vitest@3.2.4(@types/node@22.19.15)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': @@ -6798,7 +7149,7 @@ snapshots: optionalDependencies: fastify: 5.7.4 - '@bytelyst/ui@file:../learning_ai_common_plat/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@bytelyst/ui@0.1.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -7643,6 +7994,12 @@ snapshots: '@pinojs/redact@0.4.0': {} + '@playwright/test@1.58.2': + dependencies: + playwright: 1.58.2 + + '@popperjs/core@2.11.8': {} + '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': @@ -8125,6 +8482,8 @@ snapshots: dependencies: nanoid: 3.3.11 + '@remirror/core-constants@3.0.0': {} + '@rollup/rollup-android-arm-eabi@4.60.0': optional: true @@ -8317,6 +8676,165 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@tiptap/core@2.27.2(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-blockquote@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-bold@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-bubble-menu@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + tippy.js: 6.3.7 + + '@tiptap/extension-bullet-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-code-block@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-code@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-document@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-dropcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-floating-menu@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + tippy.js: 6.3.7 + + '@tiptap/extension-gapcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-hard-break@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-heading@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-history@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-horizontal-rule@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-italic@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-list-item@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-ordered-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-paragraph@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-placeholder@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-strike@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-text@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/pm@2.27.2': + dependencies: + prosemirror-changeset: 2.4.0 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.1 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-markdown: 1.13.4 + prosemirror-menu: 1.3.0 + prosemirror-model: 1.25.4 + prosemirror-schema-basic: 1.2.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7) + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.7 + + '@tiptap/react@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-bubble-menu': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-floating-menu': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + '@types/use-sync-external-store': 0.0.6 + fast-deep-equal: 3.1.3 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) + + '@tiptap/starter-kit@2.27.2': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-blockquote': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-bold': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-bullet-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-code': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-code-block': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-document': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-dropcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-gapcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-hard-break': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-heading': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-history': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-horizontal-rule': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-italic': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-list-item': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-ordered-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-paragraph': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-strike': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/pm': 2.27.2 + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -8374,6 +8892,15 @@ snapshots: '@types/json5@0.0.29': {} + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdurl@2.0.0': {} + '@types/node@22.19.15': dependencies: undici-types: 6.21.0 @@ -8388,6 +8915,8 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.35': @@ -9166,6 +9695,8 @@ snapshots: dependencies: browserslist: 4.28.1 + crelt@1.0.6: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -9304,6 +9835,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.2 + entities@4.5.0: {} + entities@6.0.1: {} error-stack-parser@2.1.4: @@ -10044,6 +10577,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -10643,6 +11179,10 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10693,12 +11233,23 @@ snapshots: dependencies: tmpl: 1.0.5 + markdown-it@14.1.1: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + marky@1.3.0: {} math-intrinsics@1.1.0: {} mdn-data@2.27.1: {} + mdurl@2.0.0: {} + memoize-one@5.2.1: {} merge-stream@2.0.0: {} @@ -11115,7 +11666,7 @@ snapshots: negotiator@1.0.0: {} - next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + next@16.1.6(@babel/core@7.29.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 @@ -11134,6 +11685,7 @@ snapshots: '@next/swc-linux-x64-musl': 16.1.6 '@next/swc-win32-arm64-msvc': 16.1.6 '@next/swc-win32-x64-msvc': 16.1.6 + '@playwright/test': 1.58.2 babel-plugin-react-compiler: 1.0.0 sharp: 0.34.5 transitivePeerDependencies: @@ -11265,6 +11817,8 @@ snapshots: strip-ansi: 5.2.0 wcwidth: 1.0.1 + orderedmap@2.1.1: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -11348,6 +11902,14 @@ snapshots: pirates@4.0.7: {} + playwright-core@1.58.2: {} + + playwright@1.58.2: + dependencies: + playwright-core: 1.58.2 + optionalDependencies: + fsevents: 2.3.2 + plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.11 @@ -11415,6 +11977,111 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + prosemirror-changeset@2.4.0: + dependencies: + prosemirror-transform: 1.12.0 + + prosemirror-collab@1.3.1: + dependencies: + prosemirror-state: 1.4.4 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.7 + + prosemirror-gapcursor@1.4.1: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.7 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.7 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.4: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.1 + prosemirror-model: 1.25.4 + + prosemirror-menu@1.3.0: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.7.1 + prosemirror-history: 1.5.0 + prosemirror-state: 1.4.4 + + prosemirror-model@1.25.4: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.7 + + prosemirror-tables@1.8.5: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.7 + + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7): + dependencies: + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.7 + + prosemirror-transform@1.12.0: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.7: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + punycode.js@2.3.1: {} + punycode@2.3.1: {} query-string@7.1.3: @@ -11726,6 +12393,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 + rope-sequence@1.3.4: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -11930,6 +12599,11 @@ snapshots: dependencies: atomic-sleep: 1.0.0 + sonner@2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -12149,6 +12823,10 @@ snapshots: tinyspy@4.0.4: {} + tippy.js@6.3.7: + dependencies: + '@popperjs/core': 2.11.8 + tldts-core@7.0.27: {} tldts@7.0.27: @@ -12253,6 +12931,8 @@ snapshots: typescript@5.9.3: {} + uc.micro@2.1.0: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -12461,6 +13141,8 @@ snapshots: vlq@1.0.1: {} + w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0