From 35f4c6680c4c6e1ce818ee68a5c1ba40cf3e4c79 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:04:54 +0100 Subject: [PATCH 01/15] Trial windows --- .../components/LockedAddonMenuItem/index.tsx | 52 ++++ .../components/TrialCallToAction/index.tsx | 71 ++++++ .../admin/components/TrialModal/index.tsx | 238 ++++++++++++++++++ packages/core/admin/constants/pro-addons.ts | 55 ++++ packages/core/admin/containers/App/index.tsx | 26 +- .../Overview/components/AddonsList/index.tsx | 60 +++++ .../Overview/components/HeroSection/index.tsx | 75 ++++++ .../components/ProAddonCard/index.tsx | 121 +++++++++ .../core/admin/screens/Overview/index.tsx | 150 +++++++++-- packages/core/admin/translations/en.json | 39 ++- packages/core/admin/translations/nl.json | 39 ++- packages/core/admin/types/pro-addons.ts | 26 ++ 12 files changed, 923 insertions(+), 29 deletions(-) create mode 100644 packages/core/admin/components/LockedAddonMenuItem/index.tsx create mode 100644 packages/core/admin/components/TrialCallToAction/index.tsx create mode 100644 packages/core/admin/components/TrialModal/index.tsx create mode 100644 packages/core/admin/constants/pro-addons.ts create mode 100644 packages/core/admin/screens/Overview/components/AddonsList/index.tsx create mode 100644 packages/core/admin/screens/Overview/components/HeroSection/index.tsx create mode 100644 packages/core/admin/screens/Overview/components/ProAddonCard/index.tsx create mode 100644 packages/core/admin/types/pro-addons.ts diff --git a/packages/core/admin/components/LockedAddonMenuItem/index.tsx b/packages/core/admin/components/LockedAddonMenuItem/index.tsx new file mode 100644 index 00000000..ecb1cbf9 --- /dev/null +++ b/packages/core/admin/components/LockedAddonMenuItem/index.tsx @@ -0,0 +1,52 @@ +import React, { useState } from 'react'; +import { useIntl } from 'react-intl'; +import { + SubNavLink, + Tooltip, +} from '@strapi/design-system'; +import { Lock } from '@strapi/icons'; +import { LockedAddonMenuItemProps } from '../../types/pro-addons'; +import TrialModal from '../TrialModal'; + +const LockedAddonMenuItem: React.FC = ({ addon }) => { + const { formatMessage } = useIntl(); + const [isModalOpen, setIsModalOpen] = useState(false); + + const handleClick = (e: React.MouseEvent) => { + e.preventDefault(); + setIsModalOpen(true); + }; + + return ( + <> + + + + + {addon.name} + + + + + setIsModalOpen(false)} + /> + + ); +}; + +export default LockedAddonMenuItem; diff --git a/packages/core/admin/components/TrialCallToAction/index.tsx b/packages/core/admin/components/TrialCallToAction/index.tsx new file mode 100644 index 00000000..37199e49 --- /dev/null +++ b/packages/core/admin/components/TrialCallToAction/index.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { useIntl } from 'react-intl'; +import { + Box, + Flex, + Typography, + Button, +} from '@strapi/design-system'; +import { TRIAL_URL } from '../../constants/pro-addons'; + +interface TrialCallToActionProps { + variant?: 'banner' | 'card' | 'inline'; +} + +const TrialCallToAction: React.FC = ({ variant = 'card' }) => { + const { formatMessage } = useIntl(); + + const content = ( + + + {formatMessage({ + id: 'webtools.overview.trial_cta.title_short', + defaultMessage: 'Ready to unlock Pro features?', + })} + + + + {formatMessage({ + id: 'webtools.overview.trial_cta.subtitle', + defaultMessage: 'Start your free 7-day trial - includes Redirects & Links addons', + })} + + + + + + + ); + + if (variant === 'inline') { + return content; + } + + return ( + + {content} + + ); +}; + +export default TrialCallToAction; diff --git a/packages/core/admin/components/TrialModal/index.tsx b/packages/core/admin/components/TrialModal/index.tsx new file mode 100644 index 00000000..cacd8948 --- /dev/null +++ b/packages/core/admin/components/TrialModal/index.tsx @@ -0,0 +1,238 @@ +import React from 'react'; +import { useIntl } from 'react-intl'; +import { + Modal, + Flex, + Typography, + Button, + Box, + Badge, + Grid, +} from '@strapi/design-system'; +import { + ArrowRight, + Link as LinkIcon, + ExternalLink, +} from '@strapi/icons'; +import { TrialModalProps } from '../../types/pro-addons'; +import { TRIAL_URL } from '../../constants/pro-addons'; + +const iconMap = { + ArrowRight, + Link: LinkIcon, + ArrowsLeftRight: ArrowRight, +}; + +const TrialModal: React.FC = ({ addon, isOpen, onClose }) => { + const { formatMessage } = useIntl(); + const IconComponent = iconMap[addon.icon as keyof typeof iconMap] || ArrowRight; + + if (!isOpen) return null; + + return ( + + + + + + + + + + + {formatMessage({ + id: 'webtools.trial_modal.title', + defaultMessage: 'Unlock {name}', + }, { name: addon.name })} + + + {formatMessage({ + id: 'webtools.overview.addon.pro', + defaultMessage: 'PRO', + })} + + + + {addon.tagline} + + + + + + + + {/* Two column layout: Key Benefits | Trial Details */} + + {/* Left column: Key Benefits */} + + + + {formatMessage({ + id: 'webtools.trial_modal.benefits_title', + defaultMessage: 'Key Benefits', + })} + + + {addon.benefits.map((benefit, index) => ( + + + + • + + + + {benefit} + + + ))} + + + + + {/* Right column: Trial Details */} + + + + {formatMessage({ + id: 'webtools.trial_modal.trial_details_title', + defaultMessage: 'Trial Details', + })} + + + + + + ✓ + + + + {formatMessage({ + id: 'webtools.trial_modal.trial_detail_1', + defaultMessage: '7-day free trial', + })} + + + + + + ✓ + + + + {formatMessage({ + id: 'webtools.trial_modal.trial_detail_2', + defaultMessage: 'Includes Redirects + Links addons', + })} + + + + + + ✓ + + + + {formatMessage({ + id: 'webtools.trial_modal.trial_detail_3', + defaultMessage: 'No credit card required', + })} + + + + + + ✓ + + + + {formatMessage({ + id: 'webtools.trial_modal.trial_detail_4', + defaultMessage: 'Cancel anytime', + })} + + + + + + + + {/* Testimonial */} + + + {formatMessage({ + id: 'webtools.trial_modal.testimonial', + defaultMessage: '"Saved us 20+ hours per project. Essential for our agency workflow."', + })} + + + {formatMessage({ + id: 'webtools.trial_modal.testimonial_author', + defaultMessage: '— Marcus, Digital Agency Owner', + })} + + + + + + + + + + + + + + ); +}; + +export default TrialModal; diff --git a/packages/core/admin/constants/pro-addons.ts b/packages/core/admin/constants/pro-addons.ts new file mode 100644 index 00000000..bcc7e4e2 --- /dev/null +++ b/packages/core/admin/constants/pro-addons.ts @@ -0,0 +1,55 @@ +import { ProAddon } from '../types/pro-addons'; + +export const PRO_ADDONS: ProAddon[] = [ + { + id: 'redirects', + name: 'Redirects', + packageName: '@pluginpal/webtools-addon-redirects', + tagline: 'Never lose SEO value when URLs change', + description: 'Automatically manage redirects when URL aliases change. Prevent broken links and maintain SEO rankings.', + benefits: [ + 'Save 30+ hours/month on manual redirect management', + 'Chain & loop detection prevents redirect errors', + 'Preserve search rankings with automatic 301s', + 'REST API for frontend integration', + ], + icon: 'ArrowRight', + docsUrl: 'https://docs.pluginpal.io/webtools/addons/redirects', + value: 'Maintains SEO rankings during site reorganizations', + }, + { + id: 'links', + name: 'Links', + packageName: '@pluginpal/webtools-addon-links', + tagline: 'Smart internal linking for your content', + description: 'Custom field type for creating internal links that persist across URL changes. Links survive URL updates automatically.', + benefits: [ + 'Content teams manage links without developer help', + 'Links survive URL changes (document ID based)', + 'CKEditor & Magic Editor integration', + 'Smart search finds content instantly', + ], + icon: 'Link', + docsUrl: 'https://docs.pluginpal.io/webtools/addons/links', + value: 'Empowers content teams, reduces broken internal links', + }, + { + id: 'breadcrumbs', + name: 'Breadcrumbs', + packageName: '@pluginpal/webtools-addon-breadcrumbs', + tagline: 'Automated breadcrumb navigation', + description: 'Generate breadcrumb trails automatically based on URL structure. Zero manual maintenance required.', + benefits: [ + 'Automatic generation from URL structure', + 'Multilingual breadcrumbs out-of-the-box', + 'Works as API relation (populate in queries)', + 'Customizable per content type', + ], + icon: 'ArrowsLeftRight', + docsUrl: 'https://docs.pluginpal.io/webtools/addons/breadcrumbs', + value: 'Improves UX and SEO without developer maintenance', + }, +]; + +export const TRIAL_URL = 'https://polar.sh/checkout/polar_c_PqjxXfFD6q7QAyQ9Q7NVt75XfOSMTcdPSB0bZ2Oe3Tp'; +export const DOCS_URL = 'https://docs.pluginpal.io/webtools/'; diff --git a/packages/core/admin/containers/App/index.tsx b/packages/core/admin/containers/App/index.tsx index ed6262d8..ce5e1fe5 100644 --- a/packages/core/admin/containers/App/index.tsx +++ b/packages/core/admin/containers/App/index.tsx @@ -29,6 +29,8 @@ import PatternsEditPage from '../../screens/Patterns/EditPage'; import PatternsCreatePage from '../../screens/Patterns/CreatePage'; import PageNotFound from '../../screens/404'; import { InjectedRoute } from '../../types/injection-zones'; +import { PRO_ADDONS } from '../../constants/pro-addons'; +import LockedAddonMenuItem from '../../components/LockedAddonMenuItem'; const App = () => { const getPlugin = useStrapiApp('MyComponent', (state) => state.getPlugin); @@ -44,6 +46,22 @@ const App = () => { const location = useLocation(); const currentPath = location.pathname; + // Determine which Pro addons are installed + const installedAddonPackageNames = routerComponents + .map((route) => { + // Extract package name from the route path or component + // The path usually contains the addon name + const pathParts = route.path?.split('/') || []; + return pathParts[pathParts.length - 1]; + }) + .filter(Boolean); + + // Find locked addons (Pro addons that are NOT installed) + const lockedAddons = PRO_ADDONS.filter((addon) => { + // Check if this addon's package is not in the installed list + return !installedAddonPackageNames.includes(addon.id); + }); + return ( { )} - {routerComponents.length > 0 && ( + {(routerComponents.length > 0 || lockedAddons.length > 0) && ( + {/* Installed addons - existing functionality */} {routerComponents.map(({ path, label }) => label && ( {label} ))} + + {/* Locked Pro addons - new functionality */} + {lockedAddons.map((addon) => ( + + ))} )} diff --git a/packages/core/admin/screens/Overview/components/AddonsList/index.tsx b/packages/core/admin/screens/Overview/components/AddonsList/index.tsx new file mode 100644 index 00000000..8f9a6174 --- /dev/null +++ b/packages/core/admin/screens/Overview/components/AddonsList/index.tsx @@ -0,0 +1,60 @@ +import React from 'react'; +import { useIntl } from 'react-intl'; +import { + Card, + CardBody, + CardContent, + CardTitle, + Box, + Flex, + Badge, + Grid, + Typography, +} from '@strapi/design-system'; +import { PuzzlePiece, Check } from '@strapi/icons'; +import { WebtoolsAddonInfo } from '../../../../types/addons'; + +interface AddonsListProps { + addons: WebtoolsAddonInfo[]; +} + +const AddonsList: React.FC = ({ addons }) => { + const { formatMessage } = useIntl(); + + return ( + + {addons.map((addon) => ( + + + + + + + + + + + {formatMessage({ + id: 'webtools.overview.addon.active', + defaultMessage: 'Active', + })} + + + + + + {addon.info.addonName} + + {addon.info.description} + + + + + + + ))} + + ); +}; + +export default AddonsList; diff --git a/packages/core/admin/screens/Overview/components/HeroSection/index.tsx b/packages/core/admin/screens/Overview/components/HeroSection/index.tsx new file mode 100644 index 00000000..266ac5c8 --- /dev/null +++ b/packages/core/admin/screens/Overview/components/HeroSection/index.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import { useIntl } from 'react-intl'; +import { + Box, + Flex, + Typography, + Button, +} from '@strapi/design-system'; +import { ExternalLink } from '@strapi/icons'; +import { TRIAL_URL, DOCS_URL } from '../../../../constants/pro-addons'; +import packageJson from '../../../../../package.json'; + +const HeroSection = () => { + const { formatMessage } = useIntl(); + + return ( + + + + {formatMessage({ + id: 'webtools.overview.hero.title', + defaultMessage: 'Welcome to Webtools {version}', + }, { version: `v${packageJson.version}` })} + + + + {formatMessage({ + id: 'webtools.overview.hero.subtitle', + defaultMessage: 'Everything you need to build professional websites with Strapi CMS', + })} + + + + + + + + + ); +}; + +export default HeroSection; diff --git a/packages/core/admin/screens/Overview/components/ProAddonCard/index.tsx b/packages/core/admin/screens/Overview/components/ProAddonCard/index.tsx new file mode 100644 index 00000000..c5a526ac --- /dev/null +++ b/packages/core/admin/screens/Overview/components/ProAddonCard/index.tsx @@ -0,0 +1,121 @@ +import React from 'react'; +import { useIntl } from 'react-intl'; +import { + Card, + CardBody, + CardContent, + CardTitle, + Box, + Flex, + Typography, + Button, + Badge, +} from '@strapi/design-system'; +import { + ArrowRight, + Link as LinkIcon, + Check, +} from '@strapi/icons'; +import { ProAddonCardProps } from '../../../../types/pro-addons'; +import { TRIAL_URL } from '../../../../constants/pro-addons'; + +const iconMap = { + ArrowRight, + Link: LinkIcon, + ArrowsLeftRight: ArrowRight, +}; + +const ProAddonCard: React.FC = ({ addon, isInstalled }) => { + const { formatMessage } = useIntl(); + const IconComponent = iconMap[addon.icon as keyof typeof iconMap] || ArrowRight; + + const handleCardClick = () => { + if (!isInstalled) { + window.open(TRIAL_URL, '_blank', 'noopener,noreferrer'); + } + }; + + return ( + ) => { + if (!isInstalled) { + e.currentTarget.style.transform = 'translateY(-2px)'; + e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.1)'; + } + }} + onMouseLeave={(e: React.MouseEvent) => { + e.currentTarget.style.transform = 'translateY(0)'; + e.currentTarget.style.boxShadow = ''; + }} + onClick={handleCardClick} + > + + + + + + {isInstalled ? ( + + + + {formatMessage({ + id: 'webtools.overview.addon.active', + defaultMessage: 'Active', + })} + + + ) : ( + + {formatMessage({ + id: 'webtools.overview.addon.pro', + defaultMessage: 'PRO', + })} + + )} + + + + + {addon.name} + + + {addon.tagline} + + + + + {addon.value} + + + + {!isInstalled && ( + + + + )} + + + + + ); +}; + +export default ProAddonCard; diff --git a/packages/core/admin/screens/Overview/index.tsx b/packages/core/admin/screens/Overview/index.tsx index 70da55bb..c72389e9 100644 --- a/packages/core/admin/screens/Overview/index.tsx +++ b/packages/core/admin/screens/Overview/index.tsx @@ -1,17 +1,22 @@ -import React from 'react'; +import React, { useState } from 'react'; import { useIntl } from 'react-intl'; import isEmpty from 'lodash/isEmpty'; import { - Typography, Grid, Flex, Link, + Typography, + Grid, + Flex, + Link, Card, CardBody, CardTitle, CardSubtitle, CardContent, Box, + Badge, + Button, } from '@strapi/design-system'; -import { ExternalLink, PuzzlePiece } from '@strapi/icons'; +import { ExternalLink, PuzzlePiece, Lock, Check } from '@strapi/icons'; import { Page, getFetchClient, Layouts } from '@strapi/strapi/admin'; import { useQuery } from 'react-query'; @@ -20,12 +25,15 @@ import { WebtoolsAddonInfo } from '../../types/addons'; import packageJson from '../../../package.json'; import { EnabledContentTypes } from '../../types/enabled-contenttypes'; import ContentTypesList from './components/ContentTypesList'; +import { PRO_ADDONS, TRIAL_URL } from '../../constants/pro-addons'; +import TrialModal from '../../components/TrialModal'; const List = () => { const { get } = getFetchClient(); const addons = useQuery('addons', async () => get('/webtools/info/addons')); const contentTypes = useQuery('content-types', async () => get('/webtools/info/getContentTypes')); const { formatMessage } = useIntl(); + const [selectedAddon, setSelectedAddon] = useState(null); if (addons.isLoading || contentTypes.isLoading) { return ( @@ -39,6 +47,30 @@ const List = () => { ); } + const installedAddons = Object.values(addons.data.data || {}); + const installedAddonPackageNames = installedAddons.map((addon) => addon.info.name); + + const isAddonInstalled = (packageName: string): boolean => { + return installedAddonPackageNames.includes(packageName); + }; + + // Combine installed and locked pro addons + const allAddonsToShow = [ + ...installedAddons.map(addon => ({ + type: 'installed' as const, + info: addon.info, + })), + ...PRO_ADDONS.filter(proAddon => !isAddonInstalled(proAddon.packageName)).map(proAddon => ({ + type: 'locked' as const, + info: { + name: proAddon.packageName, + addonName: proAddon.name, + description: proAddon.description, + }, + proAddon, + })), + ]; + return ( { defaultMessage: 'Webtools version', })} - + v{packageJson.version} + @@ -122,7 +167,7 @@ const List = () => { - {!isEmpty(addons.data.data) && ( + {!isEmpty(allAddonsToShow) && ( { }, )} - - {Object.values(addons.data.data).map((addon) => ( - - - - - - - {addon.info.addonName} - {addon.info.description} - - - - ))} - + + {allAddonsToShow.map((addon) => { + const isLocked = addon.type === 'locked'; + + return ( + setSelectedAddon(addon.proAddon!) : undefined} + > + + {/* Badge positioned absolutely in top-right */} + + {isLocked ? ( + + {formatMessage({ + id: 'webtools.overview.addon.pro', + defaultMessage: 'PRO', + })} + + ) : ( + + + + {formatMessage({ + id: 'webtools.overview.addon.active', + defaultMessage: 'Active', + })} + + + )} + + + {/* Icon */} + + {isLocked ? : } + + + {/* Content with padding-right to prevent badge overlap */} + + + {addon.info.addonName} + + + {addon.info.description} + + + + + ); + })} + )} + + {selectedAddon && ( + setSelectedAddon(null)} + /> + )} ); }; diff --git a/packages/core/admin/translations/en.json b/packages/core/admin/translations/en.json index 781e05ac..630c3f05 100644 --- a/packages/core/admin/translations/en.json +++ b/packages/core/admin/translations/en.json @@ -68,5 +68,42 @@ "settings.page.patterns.create.subtitle": "Pattern details", "settings.page.patterns.create.description": "Add a pattern for automatic URL alias generation.", - "notification.success.permalink_copied": "Permalink copied to the clipboard" + "notification.success.permalink_copied": "Permalink copied to the clipboard", + + "overview.hero.title": "Welcome to Webtools {version}", + "overview.hero.subtitle": "Everything you need to build professional websites with Strapi CMS", + "overview.hero.trial_button_short": "Start Free Trial", + "overview.hero.docs_button": "View Documentation", + + "overview.installed_addons.title": "Your Addons", + "overview.installed_addons.description": "Manage your installed addons", + "overview.installed_addons.empty": "No addons installed yet. Start with a free trial!", + + "overview.pro_addons.title": "Unlock More with Pro Addons", + "overview.pro_addons.description": "Extend Webtools with powerful premium features", + + "overview.addon.active": "Active", + "overview.addon.pro": "PRO", + "overview.addon.learn_more": "Learn More", + "overview.addon.start_trial": "Start Free Trial", + + "overview.try_premium": "Try Premium Free", + + "overview.trial_cta.title_short": "Ready to unlock Pro features?", + "overview.trial_cta.subtitle": "Start your free 7-day trial - includes Redirects & Links addons", + "overview.trial_cta.button_short": "Start Free Trial", + + "trial_modal.title": "Unlock {name}", + "trial_modal.benefits_title": "KEY BENEFITS", + "trial_modal.testimonial": "\"Saved us 20+ hours per project. Essential for our agency workflow.\"", + "trial_modal.testimonial_author": "— Marcus, Digital Agency Owner", + "trial_modal.trial_details_title": "TRIAL DETAILS", + "trial_modal.trial_detail_1": "✅ 7-day free trial", + "trial_modal.trial_detail_2": "✅ Includes Redirects + Links addons", + "trial_modal.trial_detail_3": "✅ No credit card required", + "trial_modal.trial_detail_4": "✅ Cancel anytime", + "trial_modal.learn_more": "Learn More", + "trial_modal.start_trial": "Start Free Trial", + + "sidebar.locked_addon.tooltip": "Start free trial to unlock" } diff --git a/packages/core/admin/translations/nl.json b/packages/core/admin/translations/nl.json index 5da8ace9..999bf5ca 100644 --- a/packages/core/admin/translations/nl.json +++ b/packages/core/admin/translations/nl.json @@ -66,5 +66,42 @@ "settings.page.patterns.create.subtitle": "Patroondetails", "settings.page.patterns.create.description": "Voeg een patroon toe voor het automatisch genereren van URL-aliassen.", - "notification.success.permalink_copied": "Permalink gekopieerd naar het klembord" + "notification.success.permalink_copied": "Permalink gekopieerd naar het klembord", + + "overview.hero.title": "Welkom bij Webtools {version}", + "overview.hero.subtitle": "Alles wat je nodig hebt om professionele websites te bouwen met Strapi CMS", + "overview.hero.trial_button_short": "Start Gratis Proefperiode", + "overview.hero.docs_button": "Bekijk Documentatie", + + "overview.installed_addons.title": "Jouw Addons", + "overview.installed_addons.description": "Beheer je geïnstalleerde addons", + "overview.installed_addons.empty": "Nog geen addons geïnstalleerd. Start met een gratis proefperiode!", + + "overview.pro_addons.title": "Ontgrendel Meer met Pro Addons", + "overview.pro_addons.description": "Breid Webtools uit met krachtige premium functies", + + "overview.addon.active": "Actief", + "overview.addon.pro": "PRO", + "overview.addon.learn_more": "Meer Informatie", + "overview.addon.start_trial": "Start Gratis Proefperiode", + + "overview.try_premium": "Probeer Premium Gratis", + + "overview.trial_cta.title_short": "Klaar om Pro functies te ontgrendelen?", + "overview.trial_cta.subtitle": "Start je gratis 7-daagse proefperiode - inclusief Redirects & Links addons", + "overview.trial_cta.button_short": "Start Gratis Proefperiode", + + "trial_modal.title": "Ontgrendel {name}", + "trial_modal.benefits_title": "BELANGRIJKSTE VOORDELEN", + "trial_modal.testimonial": "\"Bespaarde ons 20+ uur per project. Essentieel voor onze agency workflow.\"", + "trial_modal.testimonial_author": "— Marcus, Eigenaar Digitaal Bureau", + "trial_modal.trial_details_title": "PROEFPERIODE DETAILS", + "trial_modal.trial_detail_1": "✅ 7-daagse gratis proefperiode", + "trial_modal.trial_detail_2": "✅ Inclusief Redirects + Links addons", + "trial_modal.trial_detail_3": "✅ Geen creditcard vereist", + "trial_modal.trial_detail_4": "✅ Altijd opzegbaar", + "trial_modal.learn_more": "Meer Informatie", + "trial_modal.start_trial": "Start Gratis Proefperiode", + + "sidebar.locked_addon.tooltip": "Start gratis proefperiode om te ontgrendelen" } diff --git a/packages/core/admin/types/pro-addons.ts b/packages/core/admin/types/pro-addons.ts new file mode 100644 index 00000000..a3d09717 --- /dev/null +++ b/packages/core/admin/types/pro-addons.ts @@ -0,0 +1,26 @@ +export interface ProAddon { + id: string; + name: string; + packageName: string; + tagline: string; + description: string; + benefits: string[]; + icon: string; + docsUrl: string; + value: string; +} + +export interface ProAddonCardProps { + addon: ProAddon; + isInstalled: boolean; +} + +export interface LockedAddonMenuItemProps { + addon: ProAddon; +} + +export interface TrialModalProps { + addon: ProAddon; + isOpen: boolean; + onClose: () => void; +} From e587f60630d6ca2be155025e0096c2519bd22cf5 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:34:50 +0100 Subject: [PATCH 02/15] Add Links screen and improve Pro addon detection Introduce a LinksOverview admin screen and register it in the playground admin app. Update addon detection logic in App and Overview to use addon labels/names (case-insensitive) to determine installed vs locked Pro addons, add lockedProAddons and hasProLicense helpers, and only show the "Try Premium" CTA when no Pro addon is installed. Add playground changes for local testing: include webtools addon deps and activation metadata in package.json, add a WEBTOOLS license entry to .env, add a scoped .yarnrc.yml for the pluginpal registry, and update generated types to include breadcrumbs and redirects content types. (yarn.lock updated to reflect dependency additions.) --- packages/core/admin/containers/App/index.tsx | 15 +- .../admin/screens/LinksOverview/index.tsx | 63 + .../core/admin/screens/Overview/index.tsx | 44 +- playground/.env | 2 + playground/.yarnrc.yml | 7 + playground/package.json | 8 +- playground/src/admin/app.tsx | 15 + playground/types/generated/contentTypes.d.ts | 97 ++ playground/yarn.lock | 1543 ++++++++++++++++- 9 files changed, 1748 insertions(+), 46 deletions(-) create mode 100644 packages/core/admin/screens/LinksOverview/index.tsx create mode 100644 playground/.yarnrc.yml create mode 100644 playground/src/admin/app.tsx diff --git a/packages/core/admin/containers/App/index.tsx b/packages/core/admin/containers/App/index.tsx index ce5e1fe5..35d30378 100644 --- a/packages/core/admin/containers/App/index.tsx +++ b/packages/core/admin/containers/App/index.tsx @@ -46,20 +46,15 @@ const App = () => { const location = useLocation(); const currentPath = location.pathname; - // Determine which Pro addons are installed - const installedAddonPackageNames = routerComponents - .map((route) => { - // Extract package name from the route path or component - // The path usually contains the addon name - const pathParts = route.path?.split('/') || []; - return pathParts[pathParts.length - 1]; - }) + // Get list of installed addon labels (e.g., "Redirects", "Links", "Breadcrumbs") + const installedAddonLabels = routerComponents + .map((route) => route.label?.toLowerCase()) .filter(Boolean); // Find locked addons (Pro addons that are NOT installed) const lockedAddons = PRO_ADDONS.filter((addon) => { - // Check if this addon's package is not in the installed list - return !installedAddonPackageNames.includes(addon.id); + // Check if this addon's name is not in the installed list + return !installedAddonLabels.includes(addon.name.toLowerCase()); }); return ( diff --git a/packages/core/admin/screens/LinksOverview/index.tsx b/packages/core/admin/screens/LinksOverview/index.tsx new file mode 100644 index 00000000..5f889e3f --- /dev/null +++ b/packages/core/admin/screens/LinksOverview/index.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { Page, Layouts } from '@strapi/strapi/admin'; +import { Typography, Box, Button, Flex } from '@strapi/design-system'; +import { ExternalLink, Link as LinkIcon } from '@strapi/icons'; + +const LinksOverview = () => { + return ( + + + + + + + + + + Links Custom Field + + + The Links addon provides a custom field type for creating internal links that persist across URL changes. Links survive URL updates automatically. + + + + + + + + + ); +}; + +export default LinksOverview; diff --git a/packages/core/admin/screens/Overview/index.tsx b/packages/core/admin/screens/Overview/index.tsx index c72389e9..dfbf660d 100644 --- a/packages/core/admin/screens/Overview/index.tsx +++ b/packages/core/admin/screens/Overview/index.tsx @@ -48,19 +48,27 @@ const List = () => { } const installedAddons = Object.values(addons.data.data || {}); - const installedAddonPackageNames = installedAddons.map((addon) => addon.info.name); - const isAddonInstalled = (packageName: string): boolean => { - return installedAddonPackageNames.includes(packageName); + // Get list of installed addon names (e.g., "Redirects", "Links", "Breadcrumbs") + const installedAddonNames = installedAddons.map((addon) => addon.info.addonName.toLowerCase()); + + const isAddonInstalled = (addonName: string): boolean => { + return installedAddonNames.includes(addonName.toLowerCase()); }; + // Only show locked Pro addons that are NOT installed + const lockedProAddons = PRO_ADDONS.filter(proAddon => !isAddonInstalled(proAddon.name)); + + // Check if user has Pro license (at least one Pro addon installed) + const hasProLicense = PRO_ADDONS.some(proAddon => isAddonInstalled(proAddon.name)); + // Combine installed and locked pro addons const allAddonsToShow = [ ...installedAddons.map(addon => ({ type: 'installed' as const, info: addon.info, })), - ...PRO_ADDONS.filter(proAddon => !isAddonInstalled(proAddon.packageName)).map(proAddon => ({ + ...lockedProAddons.map(proAddon => ({ type: 'locked' as const, info: { name: proAddon.packageName, @@ -108,19 +116,21 @@ const List = () => { v{packageJson.version} - + {!hasProLicense && ( + + )} diff --git a/playground/.env b/playground/.env index 4a82be43..3cdfe936 100644 --- a/playground/.env +++ b/playground/.env @@ -6,3 +6,5 @@ API_TOKEN_SALT=tobemodified TRANSFER_TOKEN_SALT=tobemodified ADMIN_JWT_SECRET=tobemodified JWT_SECRET=tobemodified + +WEBTOOLS_LICENSE_KEY=WEBTOOLS-4F4D6E86-270C-461A-B1FB-F58B5A707793 diff --git a/playground/.yarnrc.yml b/playground/.yarnrc.yml new file mode 100644 index 00000000..f660db27 --- /dev/null +++ b/playground/.yarnrc.yml @@ -0,0 +1,7 @@ +npmScopes: + pluginpal: + npmPublishRegistry: https://npm.pluginpal.io + npmRegistryServer: https://npm.pluginpal.io + npmAlwaysAuth: true + npmAuthIdent: "token" + npmAuthToken: "WEBTOOLS-4F4D6E86-270C-461A-B1FB-F58B5A707793" diff --git a/playground/package.json b/playground/package.json index 81745821..30356f8f 100644 --- a/playground/package.json +++ b/playground/package.json @@ -12,6 +12,9 @@ "sitemap": "strapi-sitemap" }, "dependencies": { + "@pluginpal/webtools-addon-breadcrumbs": "^1.0.3", + "@pluginpal/webtools-addon-links": "^1.5.1", + "@pluginpal/webtools-addon-redirects": "^1.0.1", "@strapi/plugin-cloud": "^5.31.2", "@strapi/plugin-users-permissions": "^5.31.2", "@strapi/strapi": "^5.31.2", @@ -36,6 +39,9 @@ "npm": ">=6.0.0" }, "strapi": { - "uuid": "90b22b41-262b-40ae-9b68-3a3e507df1b9" + "uuid": "90b22b41-262b-40ae-9b68-3a3e507df1b9", + "webtools": { + "activation_id": "044cbffa-b3f1-4aab-86f6-8130089abf8e" + } } } diff --git a/playground/src/admin/app.tsx b/playground/src/admin/app.tsx new file mode 100644 index 00000000..39a8e832 --- /dev/null +++ b/playground/src/admin/app.tsx @@ -0,0 +1,15 @@ +import LinksOverview from '../../../packages/core/admin/screens/LinksOverview'; + +export default { + register(app: any) { + // Register Links addon overview screen + const webtoolsPlugin = app.getPlugin('webtools'); + if (webtoolsPlugin) { + webtoolsPlugin.injectComponent('webtoolsRouter', 'route', { + path: '/links', + Component: LinksOverview, + label: 'Links', + }); + } + }, +}; diff --git a/playground/types/generated/contentTypes.d.ts b/playground/types/generated/contentTypes.d.ts index e648b598..d822f083 100644 --- a/playground/types/generated/contentTypes.d.ts +++ b/playground/types/generated/contentTypes.d.ts @@ -447,6 +447,10 @@ export interface ApiCategoryCategory extends Struct.CollectionTypeSchema { }; }; attributes: { + breadcrumbs: Schema.Attribute.Relation< + 'oneToOne', + 'plugin::webtools-addon-breadcrumbs.breadcrumb' + >; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; @@ -490,6 +494,10 @@ export interface ApiHomeHome extends Struct.SingleTypeSchema { }; }; attributes: { + breadcrumbs: Schema.Attribute.Relation< + 'oneToOne', + 'plugin::webtools-addon-breadcrumbs.breadcrumb' + >; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; @@ -530,6 +538,10 @@ export interface ApiPrivateCategoryPrivateCategory }; }; attributes: { + breadcrumbs: Schema.Attribute.Relation< + 'oneToOne', + 'plugin::webtools-addon-breadcrumbs.breadcrumb' + >; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; @@ -577,6 +589,10 @@ export interface ApiTestTest extends Struct.CollectionTypeSchema { }; }; attributes: { + breadcrumbs: Schema.Attribute.Relation< + 'oneToOne', + 'plugin::webtools-addon-breadcrumbs.breadcrumb' + >; category: Schema.Attribute.Relation<'oneToOne', 'api::category.category'>; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'>; @@ -1111,6 +1127,85 @@ export interface PluginUsersPermissionsUser }; } +export interface PluginWebtoolsAddonBreadcrumbsBreadcrumb + extends Struct.CollectionTypeSchema { + collectionName: 'wt_breadcrumb'; + info: { + displayName: 'Breadcrumb'; + pluralName: 'breadcrumbs'; + singularName: 'breadcrumb'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + items: Schema.Attribute.JSON & Schema.Attribute.Required; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::webtools-addon-breadcrumbs.breadcrumb' + > & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + }; +} + +export interface PluginWebtoolsAddonRedirectsRedirect + extends Struct.CollectionTypeSchema { + collectionName: 'wt_redirect'; + info: { + displayName: 'Redirect'; + pluralName: 'redirects'; + singularName: 'redirect'; + }; + options: { + comment: ''; + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + from: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::webtools-addon-redirects.redirect' + > & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + status_code: Schema.Attribute.Integer & Schema.Attribute.Required; + to: Schema.Attribute.String & Schema.Attribute.Required; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + }; +} + export interface PluginWebtoolsAddonSitemapSitemap extends Struct.CollectionTypeSchema { collectionName: 'wt_sitemap'; @@ -1272,6 +1367,8 @@ declare module '@strapi/strapi' { 'plugin::users-permissions.permission': PluginUsersPermissionsPermission; 'plugin::users-permissions.role': PluginUsersPermissionsRole; 'plugin::users-permissions.user': PluginUsersPermissionsUser; + 'plugin::webtools-addon-breadcrumbs.breadcrumb': PluginWebtoolsAddonBreadcrumbsBreadcrumb; + 'plugin::webtools-addon-redirects.redirect': PluginWebtoolsAddonRedirectsRedirect; 'plugin::webtools-addon-sitemap.sitemap': PluginWebtoolsAddonSitemapSitemap; 'plugin::webtools.url-alias': PluginWebtoolsUrlAlias; 'plugin::webtools.url-pattern': PluginWebtoolsUrlPattern; diff --git a/playground/yarn.lock b/playground/yarn.lock index d0aa9e29..6859ba19 100644 --- a/playground/yarn.lock +++ b/playground/yarn.lock @@ -5,6 +5,27 @@ __metadata: version: 8 cacheKey: 10c0 +"@_sh/strapi-plugin-ckeditor@npm:^6.0.2": + version: 6.0.3 + resolution: "@_sh/strapi-plugin-ckeditor@npm:6.0.3" + dependencies: + "@ckeditor/ckeditor5-react": "npm:~9.5.0" + "@strapi/design-system": "npm:2.0.0-rc.18" + "@strapi/icons": "npm:2.0.0-rc.18" + ckeditor5: "npm:~45.2.0" + lodash: "npm:4.17.21" + sanitize-html: "npm:2.13.0" + yup: "npm:0.32.9" + peerDependencies: + "@strapi/strapi": ^5.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + react-router-dom: ^6.0.0 + styled-components: ^6.0.0 + checksum: 10c0/b8ad07f9d16f4effb42353c2b5f8dda7d5e3dc1817e75e09c977d1e250e71c576c9ae4f199968f0bc2968cb3258cc27bea16d286e418d39b829016586ce9e092 + languageName: node + linkType: hard + "@ai-sdk/gateway@npm:1.0.15": version: 1.0.15 resolution: "@ai-sdk/gateway@npm:1.0.15" @@ -501,6 +522,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.15.4": + version: 7.28.6 + resolution: "@babel/runtime@npm:7.28.6" + checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d + languageName: node + linkType: hard + "@babel/template@npm:^7.27.0": version: 7.27.0 resolution: "@babel/template@npm:7.27.0" @@ -589,6 +617,884 @@ __metadata: languageName: node linkType: hard +"@ckeditor/ckeditor5-adapter-ckfinder@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-adapter-ckfinder@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-upload": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/6a207c283e32f3a3a0e1b5c6450dc114770521ed4ce564a16beb12c5aea7b481ea496417545745e70f86d47d7ff3ae4b25b4ed882462e0524859038aafe3cb98 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-alignment@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-alignment@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/e9c13a1364357e5b988ef262c8fcd1306ff25ff30c3bacb1f89959e900bb99e8d6217fef29f61d4e69a94057abbee01a449c963eb0528b2918bbef577ba461ae + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-autoformat@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-autoformat@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-heading": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/53284a2ea7cb6dd1cfbddfec3dce9a481c72e78c8a539f6a473cdab8b38b2de4f4d47be501dbb74ec034c382f5af0dd66a474569d61e57998ee76d89d91224ea + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-autosave@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-autosave@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/ddfad69e654f44d46d7a354f5ed62104e818640bb489312a7c59dc13fb05c82b867090aeb424b63b2e15f092146bceabf45968329ab35415661fed5652321b78 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-basic-styles@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-basic-styles@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/3db0037dd0be8174998dc34852b1998993a92926e40205a7e02d1608926df02eed1e87bdc99986a6f317699324dc1559899e6132de34213962259cf4b4de40bd + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-block-quote@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-block-quote@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/e5750b152c3b7d3385ad276cf38273506624f7c08ab04b4e4f7028d73e976139da4bb749ae6cdfaeb731543cf97528816eae93e7a1e531daad409a91c5373c28 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-bookmark@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-bookmark@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-link": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/f99c98e678c3cb8d5b790038dfac41446981529175288a2e8d4384d50c21716ae9cc925d7b81ccc09455a7c145a7d5e53587ab11b2fb5a494a82c472895d5fd7 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-ckbox@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-ckbox@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-cloud-services": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-image": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-upload": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + blurhash: "npm:2.0.5" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/9750d1c5fac9128ea7627c2f27ad538dba531f0ec0fdfbb2f2acbf6c7cf577457d14f086322974cfafaa1d5f67d031c47ce8a410692de65008a2d4cfdf6ad2de + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-ckfinder@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-ckfinder@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-image": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/c1b2b10e9aac0548ca33591feb00d1ffbd04db3ee85b8eb972abdeca6b7611def98130b8443c05d3584c4f95ebdb6b23152c95405cfb04b2010b37e32acaa41e + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-clipboard@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-clipboard@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/f33d11ae968386748615d80380fe475efa83076b5aa015d308ddd91bf63970701d12dbafa7e475889e6da067c732d1de6f58f720e5873d658f65e6dce1f48223 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-cloud-services@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-cloud-services@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/d5b14555a28cbfe482c363e7eeec1a5cf7584258edb213cea888b7da4623e5daae4232e664750ef05e09e8320282b13fbbf80fd223e7dc479e617fd17d94f7c2 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-code-block@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-code-block@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/cf4fe8359bfd0409d218afcde15710af8bc251d3713a97cc01710c611f299fdb97748a878dfb4b136a404ffcca08a79cf044d8d32f35caf7afef4d8b9f12643f + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-core@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-core@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-watchdog": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/8db7f5eadb0a575b81c429d0a41de79aeb8b745f9bed6c49ad80a4a4b94051487bafb11d805b3f935dc028e7af76f1f43212c230b5036923acfbcc1da390fc88 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-easy-image@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-easy-image@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-cloud-services": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-upload": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/b28084d21328605349fa8a17bc63576dc695c550b062a5fbb36ad5591e366e58e37f9511cc2a3062561116e32cbf465cc4237adccb2393662609f78a1810eed1 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-editor-balloon@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-editor-balloon@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/7fab0010b70715235a213fa7922a23a55e632d2edd4820304b373f50f7bb1f1ca985c93ca9f2774da14e25cdd0c3258207fa7fc0750a7ef2712b5900bf3adbad + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-editor-classic@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-editor-classic@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/47fc88a698158626926e9c08d04a6cfae6083de9c6f2032e5c4a5d3c392a85266faf29ac0d2ddb9c2d8d70585d076d495492244bda2abb8add4f0635293da3ed + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-editor-decoupled@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-editor-decoupled@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/b73dd9f3ba242914a3a15d3650183517999749a2ef1bb81d0b3602e254be1dcdfb79196a1dfddb23184222f3381d3ccb4ac8d7eb2d974c32d845aa90cac3f167 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-editor-inline@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-editor-inline@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/581d45631e544a468f3347082302070e619ac0c89f34532ead999e44f6916f658933205ca558fbdae778f4b955c363923dfa2c36450590fcb7253b6e1b4aebf5 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-editor-multi-root@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-editor-multi-root@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/47cf9aa471baf410d2cde7fa27b2339c72e2275a727807926dbac4081b10606d1be33f12ad79347492b8df880aaca216d3a7b49d83b74de8b0f18d51148a82de + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-emoji@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-emoji@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-mention": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + fuzzysort: "npm:3.1.0" + checksum: 10c0/147d27cdc3b3ff76e9b70f1c75411fa4723128dd4d319b7337071eb37bee6835c243780afe3724321773c79e7838f74eae35e85c935fc216f72accdd078942fc + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-engine@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-engine@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/e296c0f15be866718ff28e83d4e84f2481f3f84342d3d1500dcc81503a4c54b54e319ad99b5ab4fbb1d02c84537f7b8786a25ec592b06490ca45a9a72cc2a487 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-enter@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-enter@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + checksum: 10c0/e7bda00ec491fc5b482429b8f1d29d3d613634c33b9db04f9afe4a21e331cc0bff7777499715a6e3f82ddc54b9485240a6efa78a328c86b808cb6c3e899df0d2 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-essentials@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-essentials@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-select-all": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-undo": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/56a05b8d5da1dbb51ac7f44f48d8f8c3bb4cc5e7e8f05182bf9148f2b81fafd7b86ffd8808bd22a2f8e6893ea13e758e8c0b39b5570663d3160d6b52f1515c02 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-find-and-replace@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-find-and-replace@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/96aeef2666e700ce4976cc20c2ba630da6e79fbd457a5a2fb692cbd7f6440efb8a8a7d8feb74ebb9d23e395f540c05168614893ae6a04febc0016de66c895912 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-font@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-font@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/8bad9c719908109ec81e99cbdfbf1f75d11aa7471bb367ae536e51f1ec5a25d5319afe0809800575e2abe86be1ade542652d698454dbcebddf32caa5fdc741f2 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-fullscreen@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-fullscreen@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-classic": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-decoupled": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/72d54fbe9d581f698a0ef1d8b6f17f8b8b84af3aeb1d2486dc767c2ff01578d5159890688a4ddc667a2d5a99d5677464761b5f3fd01d6623b6695076778a06e0 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-heading@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-heading@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-paragraph": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/be6d37a7a14565cccb30e7df34569eed10a6984757815771a317b82881856caf7b247788490307d09a9a8a5077925852e173c3a8ec1fb7f3ed37324b496fac1a + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-highlight@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-highlight@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/8a73f4fd7872a25e23612562e8ac9bc69c75d5c3963e74fa0cf7615fd03d7f56e607d191ca8c4f57dc3f35c91cc5f9ef483ec4b4fdafb5a849709cf641a788d2 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-horizontal-line@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-horizontal-line@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/c16ca74c66293512e19375cb69dd57f458dab0c4286a4fb340054030734fca8150001ba3e815f7607eda56d9decde1483a4bef128b9978ca3d5d536d48d62fbb + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-html-embed@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-html-embed@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/e6aa7b1890e9ec4270e3038a3268022375c24cb47d11f5e0127f6d7ea11aeed5365cf819bd3e434b8e86923af20093d5af1f7e2d468436bf88d914ec6aa6669e + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-html-support@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-html-support@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-heading": "npm:45.2.2" + "@ckeditor/ckeditor5-image": "npm:45.2.2" + "@ckeditor/ckeditor5-list": "npm:45.2.2" + "@ckeditor/ckeditor5-table": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/69ffa7244ec60452f60883e2c315fbf23c55650c7df436a890e613989ade9d3cae06e2f3e3d7d9597b574809e9504a58bb6152fdd25c884623807e044daf3913 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-icons@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-icons@npm:45.2.2" + checksum: 10c0/e0f4e51d8d5e6e0d073a20a0b2268e291e3680681860e7947db390c6f6d6a886c5108d0dbc075f6c8937cfcb75e5518f5dd384db3c3725d379440d2ff64b9a55 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-image@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-image@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-undo": "npm:45.2.2" + "@ckeditor/ckeditor5-upload": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/1cfc7f55869c09015e0aedb3a1795bbd83308a6228acf313829ddb28ee4ad316968fb89c528589697efe7536daf23c6068a5de6d79b353cd95424cfe4e367940 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-indent@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-indent@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-heading": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-list": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/7683ec1f1728a08c0ae645c9410992310774afa129fe86883fc936b16814adac5e7decd734cd1d794963d1eb8b7f6bc3809d38eae3670133ff2a535be7b61936 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-integrations-common@npm:^2.2.2": + version: 2.2.3 + resolution: "@ckeditor/ckeditor5-integrations-common@npm:2.2.3" + peerDependencies: + ckeditor5: ">=42.0.0 || ^0.0.0-nightly" + checksum: 10c0/de3f3c513d6d65a972a505568639224ebfa7b18e7887b5344c457e36475ec233d5425495ab88478d977ae3623eca1457e9d720895fe5ea60d4837580ffae07af + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-language@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-language@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/79185376beea4dcd66d1e5dc79b3c4a55e15275a52887d19a4e3d97a98ba4ee829f740de88f164082dddb7e0b4bd31e850269661c9c345ae5b00bfdba3be8832 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-link@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-link@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-image": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/7d529eb74bbc882a3de3f22691609fce2c3b8d383b8f86d78181e4a452071f44258ab0e41444f0812f7d2676f0f1f556033b4d92b901ad7479de5ff9a7a3780a + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-list@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-list@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/4be75ebb1d8730469f09220b58eddc21822610a0c20b7b6cd205f2295024a00f41c2a95182d623b82248772b2e66759b7df121fb8b5837ff7b67adfe976f58e4 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-markdown-gfm@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-markdown-gfm@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@types/marked": "npm:4.3.2" + "@types/turndown": "npm:5.0.5" + ckeditor5: "npm:45.2.2" + marked: "npm:4.0.12" + turndown: "npm:7.2.0" + turndown-plugin-gfm: "npm:1.0.2" + checksum: 10c0/1569a61e8c67a5eecfae3f05ade73a895a1959a71dcacc0714cee7532f9b9e2a45db27dbd2051df26b1635cd0fdde15a910a941290bc685134f54b4fe32be2e0 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-media-embed@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-media-embed@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-undo": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/4f9bc02e0e52dd3983f4d66f9e1e70c9095d5354d945ade1df7d227cf473f2df2a30f7705ce6de1529c8ecc0267b60350c59bad3626e46457691607f2ccdac85 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-mention@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-mention@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/833653c218f825c2845efe1995e4b882c409666d76fc0a3da78abeb1932e523ced7e810cd72e4496139afee369637f491517467f65cb31e6f79ba103a188a56f + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-minimap@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-minimap@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/cd089292f89541a9a46e5f3779a17b0df36f5c2effe6aacb5764461a507f1e09de7be53093a7736a22498eb594eca58b5058add21fefb7c9e36843688a6599ce + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-page-break@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-page-break@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/af60aa157fb8cbe89a3d88b01ae423348a2724b2be89f43cfb4ff13e59bb180b8e96036c4930052756b9023a66f8e0f415cb6a615aad92edb9608accc4ef05b4 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-paragraph@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-paragraph@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + checksum: 10c0/d8cc0772a4df380ad2fe12ba51a9f1856da130f5185bb84a3455f71a9ede336537d1e7cb28d3f39816b65f6247d5c55d501abca36ce6c347f8f361d9cd439aa7 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-paste-from-office@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-paste-from-office@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/f7d60e913da28e821c4aaac910ce95fa9cd4ac81dd5270d171ccb936fd81454a9f65ebfa0d8f8c3545ad4c3a8bc0f9ecb680e70aa808b8e00fd206980dbd6f51 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-react@npm:~9.5.0": + version: 9.5.0 + resolution: "@ckeditor/ckeditor5-react@npm:9.5.0" + dependencies: + "@ckeditor/ckeditor5-integrations-common": "npm:^2.2.2" + peerDependencies: + ckeditor5: ">=42.0.0 || ^0.0.0-nightly" + react: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/79cf0429b752efd90a9a3653803fd5658da3ffe7968eafaab96486eb6dc701524041d677f619792c31628d30b214aab41ac21c2cc17c43bb01305c4f90ff6900 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-remove-format@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-remove-format@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/912bab12a4b17d8f40758de649b7b208a4d5e0d1190c0e86ffef4b9c2675101b6ff89d5dc1f3fcf5c840e17a09f04abb3cb1c5caff9cd83753b0546239cb03eb + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-restricted-editing@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-restricted-editing@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/a95d4835f7630a90eb2795df53c386dd27ac67e7d7f0153107a948f0ad35e4e42ba9fd28cedd3f3fb3b248bc115c60955e084661bbb234de56320bb0c3a50a8a + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-select-all@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-select-all@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + checksum: 10c0/ed83d42653626bf0e3aed1d352e69f11b3b8c2446db51b1b5595ebe98716f2f5f5999b916cc40ef1f1588f66ef99e76cff5fc354527fae0ad68f010a569ec15c + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-show-blocks@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-show-blocks@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/4900ff7f4ff669fcbad9f0997196aa88441c744f13316dd151358b8dc3b0c33db4a74f6ec74b8d33fcc1b01a06399dcdf203b93f6a80e185cd11d96ca6015d49 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-source-editing@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-source-editing@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-theme-lark": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/3b042432110b85bfa23b331a1749f798422e1e0fe3952f5e82baf8fdf474554c65b1e0bbf1a237e1fe1a88b3e710e107f0de80658dbb1f79a6a74105f0a9d5be + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-special-characters@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-special-characters@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + checksum: 10c0/4e6c8eb07c39b39c15c6b31203c78cc3f82db1e76b6b2388e2d73f5798f14deff95143fb60173c1964dd017e4bc0d34148e3223f16a70d80aa8a8f6b3d3d2140 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-style@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-style@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-html-support": "npm:45.2.2" + "@ckeditor/ckeditor5-list": "npm:45.2.2" + "@ckeditor/ckeditor5-table": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/c3eedb3c9024891cfd1fc5abe22ca5b4bc9ce95885602fd807bb0539aea9887088c48b3f0873b4647c7d085b183d0e42ed07f30438c001a9708d8d90a05a8721 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-table@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-table@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/93f89ed4ed8ebd26c9f8dd53ea05085438b4c34bba1b84728754090aedef3d0b3e0f6a9f1c306531d6a51fe626b1ea8c9527e9404b34bcda884bf02ef95e078b + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-theme-lark@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-theme-lark@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + checksum: 10c0/6307c743913a0e643711be8d7a77eb1039842ec62716827ea78cc4843c212b163111ece03fb9dd22d0cd420bf98a02b79f8367938f4113fce1bf27dfb71b21ff + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-typing@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-typing@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/b887806e37f6961a91e89b0aae3a8edd63e385bedb4294b6f79998e13e3e324f882be640ef4cdb3c696a6cce1859062355d9a981044d8719ca70adcf64b63803 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-ui@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-ui@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-multi-root": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@types/color-convert": "npm:2.0.4" + color-convert: "npm:2.0.1" + color-parse: "npm:1.4.2" + es-toolkit: "npm:1.32.0" + vanilla-colorful: "npm:0.7.2" + checksum: 10c0/e6ae43717dc481d879b54ef2dc05bd4a25f3f0146c63b1082b7f48aef6b6428b4f057244f1ffb15bde71a6dcd23d6b7bd63dd9d155303532032118aa42f84f2c + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-undo@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-undo@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + checksum: 10c0/a03bbce73021c98bdf27ab1c7e898d8c093dab59c591b8beaff4cc960b09fdb80afbe4300e9f1efedf8640d242facf09727060b2e260097fec7ccbdab3d324eb + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-upload@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-upload@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + checksum: 10c0/327256ec2b7f399f303e4e3c5c84068c754bc5e0c20e7028f1045fee29fe7f4f346408d03b46adee1f067bbfc28dbcbfc5c529075f1ca3e4a4058558365b5e2e + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-utils@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-utils@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/ac53fb5fa3869b551ed310153a9b63093f9819efbf8c6d5709f094607cb80439a9716e48d5bd01484f3e45a2f30175f17a0d2dcd9aab7b6514853c6d5c274b63 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-watchdog@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-watchdog@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-multi-root": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/f427ee350285e34c3282e15463a95bc3a9310f26b762601c1aa6fba922781c75be2a12ad8e09876c6c9d6f4c3cea1ba4379493fef52dbd67a75903cb4a397192 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-widget@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-widget@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/b1dad4966145a599fcd1957196b6b0326f87c2a9cab1900e84593a5d03a6a4596129607c439d7395e9c6d6eb97cc6a7bb1d4748f8a7c4edf245d2dc140c2c278 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-word-count@npm:45.2.2": + version: 45.2.2 + resolution: "@ckeditor/ckeditor5-word-count@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + ckeditor5: "npm:45.2.2" + es-toolkit: "npm:1.32.0" + checksum: 10c0/d9e61cfeffe6459650151272cd60103abcfdfae336f56e7271b006e6f4f9cfdfcc1672343fd07d47985d13e50d4066291c632ec832caabecb9bb67bcfa197a51 + languageName: node + linkType: hard + "@codemirror/autocomplete@npm:^6.0.0": version: 6.18.6 resolution: "@codemirror/autocomplete@npm:6.18.6" @@ -1330,6 +2236,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/ecma402-abstract@npm:2.2.4": + version: 2.2.4 + resolution: "@formatjs/ecma402-abstract@npm:2.2.4" + dependencies: + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.8" + tslib: "npm:2" + checksum: 10c0/3f262533fa704ea7a1a7a8107deee2609774a242c621f8cb5dd4bf4c97abf2fc12f5aeda3f4ce85be18147c484a0ca87303dca6abef53290717e685c55eabd2d + languageName: node + linkType: hard + "@formatjs/fast-memoize@npm:2.2.0": version: 2.2.0 resolution: "@formatjs/fast-memoize@npm:2.2.0" @@ -1339,6 +2256,15 @@ __metadata: languageName: node linkType: hard +"@formatjs/fast-memoize@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/fast-memoize@npm:2.2.3" + dependencies: + tslib: "npm:2" + checksum: 10c0/f1004c3b280de7e362bd37c5f48ff34c2ba1d6271d4a7b695fed561d1201a3379397824d8bffbf15fecee344d1e70398393bbb04297f242692310a305f12e75b + languageName: node + linkType: hard + "@formatjs/icu-messageformat-parser@npm:2.7.6": version: 2.7.6 resolution: "@formatjs/icu-messageformat-parser@npm:2.7.6" @@ -1350,6 +2276,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/icu-messageformat-parser@npm:2.9.4": + version: 2.9.4 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.4" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + "@formatjs/icu-skeleton-parser": "npm:1.8.8" + tslib: "npm:2" + checksum: 10c0/f1ed14ece7ef0abc9fb62e323b78c994fc772d346801ad5aaa9555e1a7d5c0fda791345f4f2e53a3223f0b82c1a4eaf9a83544c1c20cb39349d1a39bedcf1648 + languageName: node + linkType: hard + "@formatjs/icu-skeleton-parser@npm:1.8.0": version: 1.8.0 resolution: "@formatjs/icu-skeleton-parser@npm:1.8.0" @@ -1360,6 +2297,16 @@ __metadata: languageName: node linkType: hard +"@formatjs/icu-skeleton-parser@npm:1.8.8": + version: 1.8.8 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.8" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + tslib: "npm:2" + checksum: 10c0/5ad78a5682e83b973e6fed4fca68660b944c41d1e941f0c84d69ff3d10ae835330062dc0a2cf0d237d2675ad3463405061a3963c14c2b9d8d1c1911f892b1a8d + languageName: node + linkType: hard + "@formatjs/intl-displaynames@npm:6.6.6": version: 6.6.6 resolution: "@formatjs/intl-displaynames@npm:6.6.6" @@ -1371,6 +2318,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-displaynames@npm:6.8.5": + version: 6.8.5 + resolution: "@formatjs/intl-displaynames@npm:6.8.5" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + "@formatjs/intl-localematcher": "npm:0.5.8" + tslib: "npm:2" + checksum: 10c0/1092d6bac9ba7ee22470b85c9af16802244aa8a54f07e6cd560d15b96e8a08fc359f20dee88a064fe4c9ca8860f439abb109cbb7977b9ccceb846e28aacdf29c + languageName: node + linkType: hard + "@formatjs/intl-listformat@npm:7.5.5": version: 7.5.5 resolution: "@formatjs/intl-listformat@npm:7.5.5" @@ -1382,6 +2340,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-listformat@npm:7.7.5": + version: 7.7.5 + resolution: "@formatjs/intl-listformat@npm:7.7.5" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + "@formatjs/intl-localematcher": "npm:0.5.8" + tslib: "npm:2" + checksum: 10c0/f514397f6b05ac29171fffbbd15636fbec086080058c79c159f24edd2038747c22579d46ebf339cbb672f8505ea408e5d960d6751064c16e02d18445cf4e7e61 + languageName: node + linkType: hard + "@formatjs/intl-localematcher@npm:0.5.4": version: 0.5.4 resolution: "@formatjs/intl-localematcher@npm:0.5.4" @@ -1391,6 +2360,15 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-localematcher@npm:0.5.8": + version: 0.5.8 + resolution: "@formatjs/intl-localematcher@npm:0.5.8" + dependencies: + tslib: "npm:2" + checksum: 10c0/7a660263986326b662d4cb537e8386331c34fda61fb830b105e6c62d49be58ace40728dae614883b27a41cec7b1df8b44f72f79e16e6028bfca65d398dc04f3b + languageName: node + linkType: hard + "@formatjs/intl@npm:2.10.0": version: 2.10.0 resolution: "@formatjs/intl@npm:2.10.0" @@ -1411,6 +2389,26 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl@npm:2.10.15": + version: 2.10.15 + resolution: "@formatjs/intl@npm:2.10.15" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.4" + "@formatjs/intl-displaynames": "npm:6.8.5" + "@formatjs/intl-listformat": "npm:7.7.5" + intl-messageformat: "npm:10.7.7" + tslib: "npm:2" + peerDependencies: + typescript: ^4.7 || 5 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/5d51fd0785d5547f375991d7df2d6303479b0083eeb35c42c30c9633aab77101895498f1eace419fd34fdb5c84aea19037c5280c3a9d85f9c3ffe6eef76b6f39 + languageName: node + linkType: hard + "@hapi/bourne@npm:^3.0.0": version: 3.0.0 resolution: "@hapi/bourne@npm:3.0.0" @@ -1802,6 +2800,13 @@ __metadata: languageName: node linkType: hard +"@mixmark-io/domino@npm:^2.2.0": + version: 2.2.0 + resolution: "@mixmark-io/domino@npm:2.2.0" + checksum: 10c0/aa468a15f9217d425220fe6a4b3f9416cbe8e566ee14efc191c6d5cc04fe39338b16a90bbac190f28d44e69465db5f2cf95f479c621ce38060ca6b2a3d346e9d + languageName: node + linkType: hard + "@mux/mux-player-react@npm:3.1.0": version: 3.1.0 resolution: "@mux/mux-player-react@npm:3.1.0" @@ -1935,6 +2940,87 @@ __metadata: languageName: node linkType: hard +"@pluginpal/webtools-addon-breadcrumbs@npm:^1.0.3": + version: 1.0.3 + resolution: "@pluginpal/webtools-addon-breadcrumbs@npm:1.0.3" + dependencies: + "@_sh/strapi-plugin-ckeditor": "npm:^6.0.2" + "@polar-sh/sdk": "npm:^0.34.3" + formik: "npm:^2.4.0" + lodash: "npm:^4.17.21" + react-copy-to-clipboard: "npm:^5.1.0" + react-intl: "npm:^6.4.1" + react-query: "npm:^3.39.3" + yup: "npm:^0.32.9" + peerDependencies: + "@strapi/admin": ^5.0.0 + "@strapi/design-system": ^2.0.0-rc.14 + "@strapi/icons": ^2.0.0-rc.14 + "@strapi/strapi": ^5.0.0 + "@strapi/utils": ^5.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.0.0 + strapi-plugin-webtools: ^1.6.1 + styled-components: ^6.0.0 + checksum: 10c0/e3d8ed28154b7d46335df124cd2eda0891c20bf9b6e5985fc4e540fe107e0809845b05179b07738fb9003afe5d3c94e1088efa6d7cd967e655b5b865e22b233a + languageName: node + linkType: hard + +"@pluginpal/webtools-addon-links@npm:^1.5.1": + version: 1.5.1 + resolution: "@pluginpal/webtools-addon-links@npm:1.5.1" + dependencies: + "@_sh/strapi-plugin-ckeditor": "npm:^6.0.2" + "@polar-sh/sdk": "npm:^0.34.3" + formik: "npm:^2.4.0" + lodash: "npm:^4.17.21" + qs: "npm:^6.11.1" + react-copy-to-clipboard: "npm:^5.1.0" + react-intl: "npm:^6.4.1" + react-query: "npm:^3.39.3" + yup: "npm:^0.32.9" + peerDependencies: + "@strapi/admin": ^5.0.0 + "@strapi/design-system": ^2.0.0-rc.14 + "@strapi/icons": ^2.0.0-rc.14 + "@strapi/strapi": ^5.0.0 + "@strapi/utils": ^5.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.0.0 + strapi-plugin-webtools: ^1.6.1 + styled-components: ^6.0.0 + checksum: 10c0/d86b563cfd78748d33fb4cdaf26b5944e0f3bd043c6e61bd25f0ac1575773f41c413165602e5501053ca185a4f317d3ce729def2d9694af6fb53aacbba69dcfa + languageName: node + linkType: hard + +"@pluginpal/webtools-addon-redirects@npm:^1.0.1": + version: 1.0.1 + resolution: "@pluginpal/webtools-addon-redirects@npm:1.0.1" + dependencies: + "@polar-sh/sdk": "npm:^0.34.3" + formik: "npm:^2.4.0" + lodash: "npm:^4.17.21" + react-copy-to-clipboard: "npm:^5.1.0" + react-intl: "npm:^6.4.1" + react-query: "npm:^3.39.3" + yup: "npm:^0.32.9" + peerDependencies: + "@strapi/admin": ^5.0.0 + "@strapi/design-system": ^2.0.0-rc.14 + "@strapi/icons": ^2.0.0-rc.14 + "@strapi/strapi": ^5.0.0 + "@strapi/utils": ^5.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.0.0 + strapi-plugin-webtools: ^1.4 + styled-components: ^6.0.0 + checksum: 10c0/fc21105e27737e27342e35cdc55b67d5220d9f15df7d83c64bd4f51f2a86ec312321503fd3e0b2bf720863710ea7dc93512b4bac280770cbeac6ae54dfa31c7b + languageName: node + linkType: hard + "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.15": version: 0.5.15 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.15" @@ -1999,6 +3085,23 @@ __metadata: languageName: node linkType: hard +"@polar-sh/sdk@npm:^0.34.3": + version: 0.34.17 + resolution: "@polar-sh/sdk@npm:0.34.17" + dependencies: + standardwebhooks: "npm:^1.0.0" + zod: "npm:^3.25.76" + peerDependencies: + "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0" + peerDependenciesMeta: + "@modelcontextprotocol/sdk": + optional: true + bin: + mcp: bin/mcp-server.js + checksum: 10c0/6242e65d48607d612eff2b6778c54035377bc73b898941ff9473e0f31d8599fc55dbfcd3a280b8fcdc2a85f2005898e141934501dde7b1388de8a8778d3fde13 + languageName: node + linkType: hard + "@polka/url@npm:^1.0.0-next.24": version: 1.0.0-next.29 resolution: "@polka/url@npm:1.0.0-next.29" @@ -3247,6 +4350,13 @@ __metadata: languageName: node linkType: hard +"@stablelib/base64@npm:^1.0.0": + version: 1.0.1 + resolution: "@stablelib/base64@npm:1.0.1" + checksum: 10c0/6330720f021819d19cecfe274111b79a256caa81df478d6b0ae7effc8842b96915b6aeed85926ff05b4d48ec1fc78ad043d928b730ee4e6cc6e8cba6aa097bed + languageName: node + linkType: hard + "@standard-schema/spec@npm:^1.0.0": version: 1.0.0 resolution: "@standard-schema/spec@npm:1.0.0" @@ -3592,6 +4702,44 @@ __metadata: languageName: node linkType: hard +"@strapi/design-system@npm:2.0.0-rc.18": + version: 2.0.0-rc.18 + resolution: "@strapi/design-system@npm:2.0.0-rc.18" + dependencies: + "@codemirror/lang-json": "npm:6.0.1" + "@floating-ui/react-dom": "npm:2.1.0" + "@internationalized/date": "npm:3.5.4" + "@internationalized/number": "npm:3.5.3" + "@radix-ui/react-accordion": "npm:1.1.2" + "@radix-ui/react-alert-dialog": "npm:1.0.5" + "@radix-ui/react-avatar": "npm:1.0.4" + "@radix-ui/react-checkbox": "npm:1.0.4" + "@radix-ui/react-dialog": "npm:1.0.5" + "@radix-ui/react-dismissable-layer": "npm:1.0.5" + "@radix-ui/react-dropdown-menu": "npm:2.0.6" + "@radix-ui/react-focus-guards": "npm:1.0.1" + "@radix-ui/react-focus-scope": "npm:1.0.4" + "@radix-ui/react-popover": "npm:1.0.7" + "@radix-ui/react-progress": "npm:1.0.3" + "@radix-ui/react-radio-group": "npm:1.1.3" + "@radix-ui/react-scroll-area": "npm:1.0.5" + "@radix-ui/react-switch": "npm:1.0.3" + "@radix-ui/react-tabs": "npm:1.0.4" + "@radix-ui/react-tooltip": "npm:1.0.7" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@strapi/ui-primitives": "npm:2.0.0-rc.18" + "@uiw/react-codemirror": "npm:4.22.2" + lodash: "npm:4.17.21" + react-remove-scroll: "npm:2.5.10" + peerDependencies: + "@strapi/icons": ^2.0.0 || ^2.0.0-beta || ^2.0.0-alpha + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + styled-components: ^6.0.0 + checksum: 10c0/8e0dfbad48c0cdea11ce7d02a4e51c94200c7fd2fdb006254e17fce3b4b6613ae02ba25442d58f6137c7b62adde144aed612b915835d241c423e46c7c5ac012b + languageName: node + linkType: hard + "@strapi/design-system@npm:2.0.0-rc.30": version: 2.0.0-rc.30 resolution: "@strapi/design-system@npm:2.0.0-rc.30" @@ -3699,6 +4847,17 @@ __metadata: languageName: node linkType: hard +"@strapi/icons@npm:2.0.0-rc.18": + version: 2.0.0-rc.18 + resolution: "@strapi/icons@npm:2.0.0-rc.18" + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + styled-components: ^6.0.0 + checksum: 10c0/e8268aa5af412dd06e80de09765246bd97383fdc5f3a3db00fda3504f4d2ecc0b2733e046612a729924de2b0e1929916d9b0796030d9511c23130fa9630f7b9d + languageName: node + linkType: hard + "@strapi/icons@npm:2.0.0-rc.30": version: 2.0.0-rc.30 resolution: "@strapi/icons@npm:2.0.0-rc.30" @@ -3959,6 +5118,37 @@ __metadata: languageName: node linkType: hard +"@strapi/ui-primitives@npm:2.0.0-rc.18": + version: 2.0.0-rc.18 + resolution: "@strapi/ui-primitives@npm:2.0.0-rc.18" + dependencies: + "@radix-ui/number": "npm:1.0.1" + "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-collection": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" + "@radix-ui/react-direction": "npm:1.0.1" + "@radix-ui/react-dismissable-layer": "npm:1.0.5" + "@radix-ui/react-focus-guards": "npm:1.0.1" + "@radix-ui/react-focus-scope": "npm:1.0.4" + "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-popper": "npm:1.1.3" + "@radix-ui/react-portal": "npm:1.0.4" + "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-slot": "npm:1.0.2" + "@radix-ui/react-use-controllable-state": "npm:1.0.1" + "@radix-ui/react-use-layout-effect": "npm:1.0.1" + "@radix-ui/react-use-previous": "npm:1.0.1" + "@radix-ui/react-visually-hidden": "npm:1.0.3" + aria-hidden: "npm:1.2.4" + react-remove-scroll: "npm:2.5.10" + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: 10c0/1421d68e2293874c1d3c54d197603686f99236b4335d92a83ef7b4b2a85ed993f685c8dbd34cc85d2cc55c7e3579d7952e2b896ee34283e21b4602286eb1f4c3 + languageName: node + linkType: hard + "@strapi/ui-primitives@npm:2.0.0-rc.30": version: 2.0.0-rc.30 resolution: "@strapi/ui-primitives@npm:2.0.0-rc.30" @@ -4331,6 +5521,22 @@ __metadata: languageName: node linkType: hard +"@types/color-convert@npm:2.0.4": + version: 2.0.4 + resolution: "@types/color-convert@npm:2.0.4" + dependencies: + "@types/color-name": "npm:^1.1.0" + checksum: 10c0/fdd2cea0ccf593055c8d952760286a4c114ed72a9940798d13f159823bf71d40a6b124009865e2e066f062d6d5611b677ddb61fd0ed05f6494170454cc6457c2 + languageName: node + linkType: hard + +"@types/color-name@npm:^1.1.0": + version: 1.1.5 + resolution: "@types/color-name@npm:1.1.5" + checksum: 10c0/ce566d98ab1c2622a2e9d9d1d5cbde403e731a4fc084e8b0f56e89901cd3c46981feafb797d4505918d5eb5a7fd897fce2332d489f450ddf1c58bc4986bd9d76 + languageName: node + linkType: hard + "@types/connect@npm:*": version: 3.4.38 resolution: "@types/connect@npm:3.4.38" @@ -4492,6 +5698,17 @@ __metadata: languageName: node linkType: hard +"@types/hoist-non-react-statics@npm:3": + version: 3.3.7 + resolution: "@types/hoist-non-react-statics@npm:3.3.7" + dependencies: + hoist-non-react-statics: "npm:^3.3.0" + peerDependencies: + "@types/react": "*" + checksum: 10c0/ed8f4e88338f7d021d0f956adf6089d2a12b2e254a03c05292324f2e986d2376eb9efdb8a4f04596823e8fca88c9d06361d20dab4a2a00dc935fb36ac911de55 + languageName: node + linkType: hard + "@types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.6 resolution: "@types/hoist-non-react-statics@npm:3.3.6" @@ -4622,6 +5839,20 @@ __metadata: languageName: node linkType: hard +"@types/lodash@npm:^4.14.175": + version: 4.17.24 + resolution: "@types/lodash@npm:4.17.24" + checksum: 10c0/b72f60d4daacdad1fa643edb3faba204c02a01eb1ac00a83ff73496a6d236fc55e459c06106e8ced42277dba932d087d8fc090f8de4ef590d3f91e6d6f7ce85a + languageName: node + linkType: hard + +"@types/marked@npm:4.3.2": + version: 4.3.2 + resolution: "@types/marked@npm:4.3.2" + checksum: 10c0/6f44d28da5c940a719d6c6aca41e33f49c5fe957f7972939cc1cbb47d045951f4d969f382d655345d0463e47db1994635d2862018716fcef2fa85ceeceb116e7 + languageName: node + linkType: hard + "@types/mdast@npm:^4.0.0": version: 4.0.4 resolution: "@types/mdast@npm:4.0.4" @@ -4817,6 +6048,13 @@ __metadata: languageName: node linkType: hard +"@types/turndown@npm:5.0.5": + version: 5.0.5 + resolution: "@types/turndown@npm:5.0.5" + checksum: 10c0/d6b4f8451caf72399f36f810461baf5f3b5e958ff216388bb3324a9949079daad31d970a28a140b3571db8793908396e757329334f5dc8bcff414698b8c31113 + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.3 resolution: "@types/unist@npm:3.0.3" @@ -5596,6 +6834,13 @@ __metadata: languageName: node linkType: hard +"blurhash@npm:2.0.5": + version: 2.0.5 + resolution: "blurhash@npm:2.0.5" + checksum: 10c0/75d5f042b5bb8ead977524a985048378a033af866534abbaee73c80030cc9fc34e6c5b7d483c68bbdb600e0ae438f2ea6140b1f46d75fcfa57a902208ae8b85e + languageName: node + linkType: hard + "bn.js@npm:^4.0.0, bn.js@npm:^4.11.9": version: 4.12.1 resolution: "bn.js@npm:4.12.1" @@ -6038,6 +7283,75 @@ __metadata: languageName: node linkType: hard +"ckeditor5@npm:45.2.2, ckeditor5@npm:~45.2.0": + version: 45.2.2 + resolution: "ckeditor5@npm:45.2.2" + dependencies: + "@ckeditor/ckeditor5-adapter-ckfinder": "npm:45.2.2" + "@ckeditor/ckeditor5-alignment": "npm:45.2.2" + "@ckeditor/ckeditor5-autoformat": "npm:45.2.2" + "@ckeditor/ckeditor5-autosave": "npm:45.2.2" + "@ckeditor/ckeditor5-basic-styles": "npm:45.2.2" + "@ckeditor/ckeditor5-block-quote": "npm:45.2.2" + "@ckeditor/ckeditor5-bookmark": "npm:45.2.2" + "@ckeditor/ckeditor5-ckbox": "npm:45.2.2" + "@ckeditor/ckeditor5-ckfinder": "npm:45.2.2" + "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" + "@ckeditor/ckeditor5-cloud-services": "npm:45.2.2" + "@ckeditor/ckeditor5-code-block": "npm:45.2.2" + "@ckeditor/ckeditor5-core": "npm:45.2.2" + "@ckeditor/ckeditor5-easy-image": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-balloon": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-classic": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-decoupled": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-inline": "npm:45.2.2" + "@ckeditor/ckeditor5-editor-multi-root": "npm:45.2.2" + "@ckeditor/ckeditor5-emoji": "npm:45.2.2" + "@ckeditor/ckeditor5-engine": "npm:45.2.2" + "@ckeditor/ckeditor5-enter": "npm:45.2.2" + "@ckeditor/ckeditor5-essentials": "npm:45.2.2" + "@ckeditor/ckeditor5-find-and-replace": "npm:45.2.2" + "@ckeditor/ckeditor5-font": "npm:45.2.2" + "@ckeditor/ckeditor5-fullscreen": "npm:45.2.2" + "@ckeditor/ckeditor5-heading": "npm:45.2.2" + "@ckeditor/ckeditor5-highlight": "npm:45.2.2" + "@ckeditor/ckeditor5-horizontal-line": "npm:45.2.2" + "@ckeditor/ckeditor5-html-embed": "npm:45.2.2" + "@ckeditor/ckeditor5-html-support": "npm:45.2.2" + "@ckeditor/ckeditor5-icons": "npm:45.2.2" + "@ckeditor/ckeditor5-image": "npm:45.2.2" + "@ckeditor/ckeditor5-indent": "npm:45.2.2" + "@ckeditor/ckeditor5-language": "npm:45.2.2" + "@ckeditor/ckeditor5-link": "npm:45.2.2" + "@ckeditor/ckeditor5-list": "npm:45.2.2" + "@ckeditor/ckeditor5-markdown-gfm": "npm:45.2.2" + "@ckeditor/ckeditor5-media-embed": "npm:45.2.2" + "@ckeditor/ckeditor5-mention": "npm:45.2.2" + "@ckeditor/ckeditor5-minimap": "npm:45.2.2" + "@ckeditor/ckeditor5-page-break": "npm:45.2.2" + "@ckeditor/ckeditor5-paragraph": "npm:45.2.2" + "@ckeditor/ckeditor5-paste-from-office": "npm:45.2.2" + "@ckeditor/ckeditor5-remove-format": "npm:45.2.2" + "@ckeditor/ckeditor5-restricted-editing": "npm:45.2.2" + "@ckeditor/ckeditor5-select-all": "npm:45.2.2" + "@ckeditor/ckeditor5-show-blocks": "npm:45.2.2" + "@ckeditor/ckeditor5-source-editing": "npm:45.2.2" + "@ckeditor/ckeditor5-special-characters": "npm:45.2.2" + "@ckeditor/ckeditor5-style": "npm:45.2.2" + "@ckeditor/ckeditor5-table": "npm:45.2.2" + "@ckeditor/ckeditor5-theme-lark": "npm:45.2.2" + "@ckeditor/ckeditor5-typing": "npm:45.2.2" + "@ckeditor/ckeditor5-ui": "npm:45.2.2" + "@ckeditor/ckeditor5-undo": "npm:45.2.2" + "@ckeditor/ckeditor5-upload": "npm:45.2.2" + "@ckeditor/ckeditor5-utils": "npm:45.2.2" + "@ckeditor/ckeditor5-watchdog": "npm:45.2.2" + "@ckeditor/ckeditor5-widget": "npm:45.2.2" + "@ckeditor/ckeditor5-word-count": "npm:45.2.2" + checksum: 10c0/fb4d767afd1b7e6c5ecd8c38101de9e391c717c9d9647b8c537f91a5b56dd3c74d645f336187eed5d54c8b764704afb12e64c9ec24635f26602e65420db1f79c + languageName: node + linkType: hard + "clean-css@npm:^5.2.2": version: 5.3.3 resolution: "clean-css@npm:5.3.3" @@ -6235,6 +7549,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:2.0.1, color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + "color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -6244,15 +7567,6 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - "color-name@npm:1.1.3": version: 1.1.3 resolution: "color-name@npm:1.1.3" @@ -6267,6 +7581,15 @@ __metadata: languageName: node linkType: hard +"color-parse@npm:1.4.2": + version: 1.4.2 + resolution: "color-parse@npm:1.4.2" + dependencies: + color-name: "npm:^1.0.0" + checksum: 10c0/911e47271d6362f6535779c3b5cfddbdc1ca2160e253de83e36784bb223c0c41cf11c382fa4b1cb766fcb313bd891f51c24d0ff0a7afee3a92aa0daf792ac4ff + languageName: node + linkType: hard + "color-string@npm:^1.6.0, color-string@npm:^1.9.0": version: 1.9.1 resolution: "color-string@npm:1.9.1" @@ -6504,6 +7827,15 @@ __metadata: languageName: node linkType: hard +"copy-to-clipboard@npm:^3.3.1": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: "npm:^1.0.6" + checksum: 10c0/3ebf5e8ee00601f8c440b83ec08d838e8eabb068c1fae94a9cda6b42f288f7e1b552f3463635f419af44bf7675afc8d0390d30876cf5c2d5d35f86d9c56a3e5f + languageName: node + linkType: hard + "copyfiles@npm:2.4.1": version: 2.4.1 resolution: "copyfiles@npm:2.4.1" @@ -7379,6 +8711,18 @@ __metadata: languageName: node linkType: hard +"es-toolkit@npm:1.32.0": + version: 1.32.0 + resolution: "es-toolkit@npm:1.32.0" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + checksum: 10c0/56ba965570768560c071aa6a43e67f1b56b5f884a3046bb816150e8e43bc56c230408ee464534de400662dd151566f1190b812987cc433ba3239002ccbd4c6ef + languageName: node + linkType: hard + "es6-error@npm:^4.1.1": version: 4.1.1 resolution: "es6-error@npm:4.1.1" @@ -7789,6 +9133,13 @@ __metadata: languageName: node linkType: hard +"fast-sha256@npm:^1.3.0": + version: 1.3.0 + resolution: "fast-sha256@npm:1.3.0" + checksum: 10c0/87f9e4baa7639576cf60a2b6235c9f436e1a1c52323abbd8a705b5bea8355500acf176f2aed0c14f2ecd6d6007e26151461bab2f27b8953bcca8d9d6b76a86e4 + languageName: node + linkType: hard + "fast-uri@npm:^3.0.1": version: 3.0.6 resolution: "fast-uri@npm:3.0.6" @@ -8082,6 +9433,24 @@ __metadata: languageName: node linkType: hard +"formik@npm:^2.4.0": + version: 2.4.9 + resolution: "formik@npm:2.4.9" + dependencies: + "@types/hoist-non-react-statics": "npm:^3.3.1" + deepmerge: "npm:^2.1.1" + hoist-non-react-statics: "npm:^3.3.0" + lodash: "npm:^4.17.21" + lodash-es: "npm:^4.17.21" + react-fast-compare: "npm:^2.0.1" + tiny-warning: "npm:^1.0.2" + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/2b76154b624f4464871f56204a7a87fec9f0cc24d742ad4e20628bd680a81ef2ae9966f54b616003f623dc1f7c7b25a25aafa8a59bcc1d940b7526fb665dbd0b + languageName: node + linkType: hard + "fractional-indexing@npm:3.2.0": version: 3.2.0 resolution: "fractional-indexing@npm:3.2.0" @@ -8227,6 +9596,13 @@ __metadata: languageName: node linkType: hard +"fuzzysort@npm:3.1.0": + version: 3.1.0 + resolution: "fuzzysort@npm:3.1.0" + checksum: 10c0/da9bb32de16f2a5c2c000b99031d9f4f8a01380c12d5d3b67296443a1152c55987ce3c4ddbfe97481b0e9b6f2fb77d61dceba29a93ad36ee23ef5bab6a31afb8 + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -8754,7 +10130,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:3, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -9198,6 +10574,18 @@ __metadata: languageName: node linkType: hard +"intl-messageformat@npm:10.7.7": + version: 10.7.7 + resolution: "intl-messageformat@npm:10.7.7" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.4" + tslib: "npm:2" + checksum: 10c0/691895fb6a73a2feb2569658706e0d452861441de184dd1c9201e458a39fb80fc80080dd40d3d370400a52663f87de7a6d5a263c94245492f7265dd760441a95 + languageName: node + linkType: hard + "invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -10604,6 +11992,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:4.0.12": + version: 4.0.12 + resolution: "marked@npm:4.0.12" + bin: + marked: bin/marked.js + checksum: 10c0/45745e97c9e6538ae777e797dfe3d5b34b08584ee2d5a06f03775a00b5c8986616b1a17eacf4ece6a2103d100febf876b6b9234d5b37ebb2bb474894496914f4 + languageName: node + linkType: hard + "marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" @@ -12430,6 +13827,9 @@ __metadata: version: 0.0.0-use.local resolution: "playground-5@workspace:." dependencies: + "@pluginpal/webtools-addon-breadcrumbs": "npm:^1.0.3" + "@pluginpal/webtools-addon-links": "npm:^1.5.1" + "@pluginpal/webtools-addon-redirects": "npm:^1.0.1" "@strapi/plugin-cloud": "npm:^5.31.2" "@strapi/plugin-users-permissions": "npm:^5.31.2" "@strapi/strapi": "npm:^5.31.2" @@ -12837,6 +14237,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.11.1": + version: 6.15.0 + resolution: "qs@npm:6.15.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -12893,6 +14302,18 @@ __metadata: languageName: node linkType: hard +"react-copy-to-clipboard@npm:^5.1.0": + version: 5.1.0 + resolution: "react-copy-to-clipboard@npm:5.1.0" + dependencies: + copy-to-clipboard: "npm:^3.3.1" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + checksum: 10c0/de70d9f9c2d17cee207888ed791d4a042c300e5ca732503434d49e6745cff56c0d5ebcc82ab86237e9c2248e636d1d031b9f9cf9913ecec61d82a0e5ebc93881 + languageName: node + linkType: hard + "react-dnd-html5-backend@npm:16.0.1": version: 16.0.1 resolution: "react-dnd-html5-backend@npm:16.0.1" @@ -13004,6 +14425,30 @@ __metadata: languageName: node linkType: hard +"react-intl@npm:^6.4.1": + version: 6.8.9 + resolution: "react-intl@npm:6.8.9" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.4" + "@formatjs/icu-messageformat-parser": "npm:2.9.4" + "@formatjs/intl": "npm:2.10.15" + "@formatjs/intl-displaynames": "npm:6.8.5" + "@formatjs/intl-listformat": "npm:7.7.5" + "@types/hoist-non-react-statics": "npm:3" + "@types/react": "npm:16 || 17 || 18" + hoist-non-react-statics: "npm:3" + intl-messageformat: "npm:10.7.7" + tslib: "npm:2" + peerDependencies: + react: ^16.6.0 || 17 || 18 + typescript: ^4.7 || 5 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d42a6252beac5448b4a248d84923b0f75dfbbee6208cd5c49ac2f525714ab94efe2a4933d464c64cb161ddccaa37b83dffb2dd0529428219b8a60ce548da3e57 + languageName: node + linkType: hard + "react-is@npm:^16.13.1, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -13047,7 +14492,7 @@ __metadata: languageName: node linkType: hard -"react-query@npm:3.39.3": +"react-query@npm:3.39.3, react-query@npm:^3.39.3": version: 3.39.3 resolution: "react-query@npm:3.39.3" dependencies: @@ -14478,6 +15923,16 @@ __metadata: languageName: node linkType: hard +"standardwebhooks@npm:^1.0.0": + version: 1.0.0 + resolution: "standardwebhooks@npm:1.0.0" + dependencies: + "@stablelib/base64": "npm:^1.0.0" + fast-sha256: "npm:^1.3.0" + checksum: 10c0/aee097d0f3c05172c19b80df1ed9596a2ce92f8956957650d0bbe47c2ca6d36515796b51d523333cb4a48c889b2ab130d789e7879e14975c4381bc7a61274327 + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -14989,6 +16444,13 @@ __metadata: languageName: node linkType: hard +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: 10c0/f2cf1f2c70f374fd87b0cdc8007453ba9e981c4305a8bf4eac10a30e62ecdfd28bca7d18f8f15b15a506bf8a7bfb20dbe3539f0fcf2a2c8396c1a78d53e1f179 + languageName: node + linkType: hard + "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -15060,6 +16522,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.7.0, tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + "tslib@npm:2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -15067,13 +16536,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.7.0, tslib@npm:^2.8.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - "tsscmp@npm:1.0.6": version: 1.0.6 resolution: "tsscmp@npm:1.0.6" @@ -15090,6 +16552,22 @@ __metadata: languageName: node linkType: hard +"turndown-plugin-gfm@npm:1.0.2": + version: 1.0.2 + resolution: "turndown-plugin-gfm@npm:1.0.2" + checksum: 10c0/eb9bc20dbb08d5335231f9617d7440f14b35781f14a3a393d8f13fc8205afeb11a0a632d52da4548ab0fa353f315ca265462b24d368faf23258dccbe439182b9 + languageName: node + linkType: hard + +"turndown@npm:7.2.0": + version: 7.2.0 + resolution: "turndown@npm:7.2.0" + dependencies: + "@mixmark-io/domino": "npm:^2.2.0" + checksum: 10c0/6abcdcdf9d35cd79d7a8100a7de1d2226b921d5bd99e73ac14a7ead39c059978f519378913375efb04c68bcfc40f7ffe2dee0ce9ae4d54dc1235b12856a78d4e + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -15600,6 +17078,13 @@ __metadata: languageName: node linkType: hard +"vanilla-colorful@npm:0.7.2": + version: 0.7.2 + resolution: "vanilla-colorful@npm:0.7.2" + checksum: 10c0/53e759ffaf2608e41d85f0f2a06b5e7745773365702363fc83f743c43a6eec11feb78c9a6e680d59983d66e278eb81a43b3230b81a288f5d73512c62597251be + languageName: node + linkType: hard + "vary@npm:^1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -16174,6 +17659,21 @@ __metadata: languageName: node linkType: hard +"yup@npm:^0.32.9": + version: 0.32.11 + resolution: "yup@npm:0.32.11" + dependencies: + "@babel/runtime": "npm:^7.15.4" + "@types/lodash": "npm:^4.14.175" + lodash: "npm:^4.17.21" + lodash-es: "npm:^4.17.21" + nanoclone: "npm:^0.2.1" + property-expr: "npm:^2.0.4" + toposort: "npm:^2.0.2" + checksum: 10c0/f0802798dc64b49f313886b983a9bea5f283e2094ee2aa1197587b84f50ac5b5d03af99857c313139e63dc02558fac3aaa343503bdbffa96f70006b39d1f59c9 + languageName: node + linkType: hard + "zod@npm:3.25.67": version: 3.25.67 resolution: "zod@npm:3.25.67" @@ -16188,6 +17688,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.25.76": + version: 3.25.76 + resolution: "zod@npm:3.25.76" + checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c + languageName: node + linkType: hard + "zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4" From fbf8b1a89a31d625a615f45ca8fcc9f07b324705 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:39:01 +0100 Subject: [PATCH 03/15] Add changeset for strapi-plugin-webtools patch --- .changeset/good-pants-invite.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/good-pants-invite.md diff --git a/.changeset/good-pants-invite.md b/.changeset/good-pants-invite.md new file mode 100644 index 00000000..e7ebeae2 --- /dev/null +++ b/.changeset/good-pants-invite.md @@ -0,0 +1,5 @@ +--- +"strapi-plugin-webtools": patch +--- + +Feature/try webtools inscentives From f9965f5dbdd247ade7b74dd4958edc68b67914d9 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:47:09 +0100 Subject: [PATCH 04/15] Fix eslint errors --- .../admin/components/TrialModal/index.tsx | 4 +- .../admin/screens/LinksOverview/index.tsx | 11 +++- .../core/admin/screens/Overview/index.tsx | 60 +++++++++++++++---- 3 files changed, 59 insertions(+), 16 deletions(-) diff --git a/packages/core/admin/components/TrialModal/index.tsx b/packages/core/admin/components/TrialModal/index.tsx index cacd8948..74cc5b63 100644 --- a/packages/core/admin/components/TrialModal/index.tsx +++ b/packages/core/admin/components/TrialModal/index.tsx @@ -73,8 +73,8 @@ const TrialModal: React.FC = ({ addon, isOpen, onClose }) => { })} - {addon.benefits.map((benefit, index) => ( - + {addon.benefits.map((benefit) => ( + • diff --git a/packages/core/admin/screens/LinksOverview/index.tsx b/packages/core/admin/screens/LinksOverview/index.tsx index 5f889e3f..742acb95 100644 --- a/packages/core/admin/screens/LinksOverview/index.tsx +++ b/packages/core/admin/screens/LinksOverview/index.tsx @@ -1,7 +1,11 @@ import React from 'react'; import { Page, Layouts } from '@strapi/strapi/admin'; -import { Typography, Box, Button, Flex } from '@strapi/design-system'; -import { ExternalLink, Link as LinkIcon } from '@strapi/icons'; +import { + Typography, Box, Button, Flex, +} from '@strapi/design-system'; +import { + ExternalLink, Link as LinkIcon, +} from '@strapi/icons'; const LinksOverview = () => { return ( @@ -39,7 +43,8 @@ const LinksOverview = () => { textAlign="center" style={{ maxWidth: '600px' }} > - The Links addon provides a custom field type for creating internal links that persist across URL changes. Links survive URL updates automatically. + The Links addon provides a custom field type for creating internal links + that persist across URL changes. Links survive URL updates automatically. - - - - - - ); -}; - -export default LinksOverview; diff --git a/packages/core/admin/screens/Overview/index.tsx b/packages/core/admin/screens/Overview/index.tsx index e80e8e85..e6121df3 100644 --- a/packages/core/admin/screens/Overview/index.tsx +++ b/packages/core/admin/screens/Overview/index.tsx @@ -51,18 +51,21 @@ const List = () => { const installedAddons = Object.values(addons.data.data || {}); - // Get list of installed addon names (e.g., "Redirects", "Links", "Breadcrumbs") - const installedAddonNames = installedAddons.map((addon) => addon.info.addonName.toLowerCase()); + // Strip npm scope for comparison: "@pluginpal/webtools-addon-redirects" → "webtools-addon-redirects" + const getPluginName = (packageName: string) => + packageName.includes('/') ? packageName.split('/')[1] : packageName; - const isAddonInstalled = (addonName: string): boolean => { - return installedAddonNames.includes(addonName.toLowerCase()); + const installedPluginNames = installedAddons.map((addon) => addon.info.name); + + const isAddonInstalled = (packageName: string): boolean => { + return installedPluginNames.includes(getPluginName(packageName)); }; // Only show locked Pro addons that are NOT installed - const lockedProAddons = PRO_ADDONS.filter((proAddon) => !isAddonInstalled(proAddon.name)); + const lockedProAddons = PRO_ADDONS.filter((proAddon) => !isAddonInstalled(proAddon.packageName)); // Check if user has Pro license (at least one Pro addon installed) - const hasProLicense = PRO_ADDONS.some((proAddon) => isAddonInstalled(proAddon.name)); + const hasProLicense = PRO_ADDONS.some((proAddon) => isAddonInstalled(proAddon.packageName)); // Combine installed and locked pro addons const allAddonsToShow = [ diff --git a/playground/.env.example b/playground/.env.example index ebfc96a3..3aa37660 100644 --- a/playground/.env.example +++ b/playground/.env.example @@ -5,3 +5,6 @@ API_TOKEN_SALT=tobemodified ADMIN_JWT_SECRET=tobemodified TRANSFER_TOKEN_SALT=tobemodified JWT_SECRET=tobemodified + +# PluginPal Webtools license key (required for pro features) +WEBTOOLS_LICENSE_KEY= diff --git a/playground/src/admin/app.tsx b/playground/src/admin/app.tsx index 39a8e832..ff8b4c56 100644 --- a/playground/src/admin/app.tsx +++ b/playground/src/admin/app.tsx @@ -1,15 +1 @@ -import LinksOverview from '../../../packages/core/admin/screens/LinksOverview'; - -export default { - register(app: any) { - // Register Links addon overview screen - const webtoolsPlugin = app.getPlugin('webtools'); - if (webtoolsPlugin) { - webtoolsPlugin.injectComponent('webtoolsRouter', 'route', { - path: '/links', - Component: LinksOverview, - label: 'Links', - }); - } - }, -}; +export default {}; From fa7203931e7b9fdf4c5baf210dc5d46ab1bf798c Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sat, 14 Mar 2026 12:17:29 +0100 Subject: [PATCH 10/15] fix: remove playground .yarnrc.yml and regenerate lockfile The .yarnrc.yml contained a hardcoded npmAuthToken (license key). Since all @pluginpal/* packages have been removed from the playground dependencies, the private registry config is no longer needed. Regenerated yarn.lock after dependency cleanup in previous commit. Co-Authored-By: Claude Sonnet 4.6 --- playground/.yarnrc.yml | 7 - playground/yarn.lock | 1567 +--------------------------------------- 2 files changed, 30 insertions(+), 1544 deletions(-) delete mode 100644 playground/.yarnrc.yml diff --git a/playground/.yarnrc.yml b/playground/.yarnrc.yml deleted file mode 100644 index f660db27..00000000 --- a/playground/.yarnrc.yml +++ /dev/null @@ -1,7 +0,0 @@ -npmScopes: - pluginpal: - npmPublishRegistry: https://npm.pluginpal.io - npmRegistryServer: https://npm.pluginpal.io - npmAlwaysAuth: true - npmAuthIdent: "token" - npmAuthToken: "WEBTOOLS-4F4D6E86-270C-461A-B1FB-F58B5A707793" diff --git a/playground/yarn.lock b/playground/yarn.lock index 6859ba19..d0aa9e29 100644 --- a/playground/yarn.lock +++ b/playground/yarn.lock @@ -5,27 +5,6 @@ __metadata: version: 8 cacheKey: 10c0 -"@_sh/strapi-plugin-ckeditor@npm:^6.0.2": - version: 6.0.3 - resolution: "@_sh/strapi-plugin-ckeditor@npm:6.0.3" - dependencies: - "@ckeditor/ckeditor5-react": "npm:~9.5.0" - "@strapi/design-system": "npm:2.0.0-rc.18" - "@strapi/icons": "npm:2.0.0-rc.18" - ckeditor5: "npm:~45.2.0" - lodash: "npm:4.17.21" - sanitize-html: "npm:2.13.0" - yup: "npm:0.32.9" - peerDependencies: - "@strapi/strapi": ^5.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 - react-router-dom: ^6.0.0 - styled-components: ^6.0.0 - checksum: 10c0/b8ad07f9d16f4effb42353c2b5f8dda7d5e3dc1817e75e09c977d1e250e71c576c9ae4f199968f0bc2968cb3258cc27bea16d286e418d39b829016586ce9e092 - languageName: node - linkType: hard - "@ai-sdk/gateway@npm:1.0.15": version: 1.0.15 resolution: "@ai-sdk/gateway@npm:1.0.15" @@ -522,13 +501,6 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.15.4": - version: 7.28.6 - resolution: "@babel/runtime@npm:7.28.6" - checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d - languageName: node - linkType: hard - "@babel/template@npm:^7.27.0": version: 7.27.0 resolution: "@babel/template@npm:7.27.0" @@ -617,884 +589,6 @@ __metadata: languageName: node linkType: hard -"@ckeditor/ckeditor5-adapter-ckfinder@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-adapter-ckfinder@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-upload": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/6a207c283e32f3a3a0e1b5c6450dc114770521ed4ce564a16beb12c5aea7b481ea496417545745e70f86d47d7ff3ae4b25b4ed882462e0524859038aafe3cb98 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-alignment@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-alignment@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/e9c13a1364357e5b988ef262c8fcd1306ff25ff30c3bacb1f89959e900bb99e8d6217fef29f61d4e69a94057abbee01a449c963eb0528b2918bbef577ba461ae - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-autoformat@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-autoformat@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-heading": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/53284a2ea7cb6dd1cfbddfec3dce9a481c72e78c8a539f6a473cdab8b38b2de4f4d47be501dbb74ec034c382f5af0dd66a474569d61e57998ee76d89d91224ea - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-autosave@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-autosave@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/ddfad69e654f44d46d7a354f5ed62104e818640bb489312a7c59dc13fb05c82b867090aeb424b63b2e15f092146bceabf45968329ab35415661fed5652321b78 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-basic-styles@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-basic-styles@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/3db0037dd0be8174998dc34852b1998993a92926e40205a7e02d1608926df02eed1e87bdc99986a6f317699324dc1559899e6132de34213962259cf4b4de40bd - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-block-quote@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-block-quote@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/e5750b152c3b7d3385ad276cf38273506624f7c08ab04b4e4f7028d73e976139da4bb749ae6cdfaeb731543cf97528816eae93e7a1e531daad409a91c5373c28 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-bookmark@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-bookmark@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-link": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/f99c98e678c3cb8d5b790038dfac41446981529175288a2e8d4384d50c21716ae9cc925d7b81ccc09455a7c145a7d5e53587ab11b2fb5a494a82c472895d5fd7 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-ckbox@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-ckbox@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-cloud-services": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-image": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-upload": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - blurhash: "npm:2.0.5" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/9750d1c5fac9128ea7627c2f27ad538dba531f0ec0fdfbb2f2acbf6c7cf577457d14f086322974cfafaa1d5f67d031c47ce8a410692de65008a2d4cfdf6ad2de - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-ckfinder@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-ckfinder@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-image": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/c1b2b10e9aac0548ca33591feb00d1ffbd04db3ee85b8eb972abdeca6b7611def98130b8443c05d3584c4f95ebdb6b23152c95405cfb04b2010b37e32acaa41e - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-clipboard@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-clipboard@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/f33d11ae968386748615d80380fe475efa83076b5aa015d308ddd91bf63970701d12dbafa7e475889e6da067c732d1de6f58f720e5873d658f65e6dce1f48223 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-cloud-services@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-cloud-services@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/d5b14555a28cbfe482c363e7eeec1a5cf7584258edb213cea888b7da4623e5daae4232e664750ef05e09e8320282b13fbbf80fd223e7dc479e617fd17d94f7c2 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-code-block@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-code-block@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/cf4fe8359bfd0409d218afcde15710af8bc251d3713a97cc01710c611f299fdb97748a878dfb4b136a404ffcca08a79cf044d8d32f35caf7afef4d8b9f12643f - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-core@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-core@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-watchdog": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/8db7f5eadb0a575b81c429d0a41de79aeb8b745f9bed6c49ad80a4a4b94051487bafb11d805b3f935dc028e7af76f1f43212c230b5036923acfbcc1da390fc88 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-easy-image@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-easy-image@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-cloud-services": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-upload": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/b28084d21328605349fa8a17bc63576dc695c550b062a5fbb36ad5591e366e58e37f9511cc2a3062561116e32cbf465cc4237adccb2393662609f78a1810eed1 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-editor-balloon@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-editor-balloon@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/7fab0010b70715235a213fa7922a23a55e632d2edd4820304b373f50f7bb1f1ca985c93ca9f2774da14e25cdd0c3258207fa7fc0750a7ef2712b5900bf3adbad - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-editor-classic@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-editor-classic@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/47fc88a698158626926e9c08d04a6cfae6083de9c6f2032e5c4a5d3c392a85266faf29ac0d2ddb9c2d8d70585d076d495492244bda2abb8add4f0635293da3ed - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-editor-decoupled@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-editor-decoupled@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/b73dd9f3ba242914a3a15d3650183517999749a2ef1bb81d0b3602e254be1dcdfb79196a1dfddb23184222f3381d3ccb4ac8d7eb2d974c32d845aa90cac3f167 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-editor-inline@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-editor-inline@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/581d45631e544a468f3347082302070e619ac0c89f34532ead999e44f6916f658933205ca558fbdae778f4b955c363923dfa2c36450590fcb7253b6e1b4aebf5 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-editor-multi-root@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-editor-multi-root@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/47cf9aa471baf410d2cde7fa27b2339c72e2275a727807926dbac4081b10606d1be33f12ad79347492b8df880aaca216d3a7b49d83b74de8b0f18d51148a82de - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-emoji@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-emoji@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-mention": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - fuzzysort: "npm:3.1.0" - checksum: 10c0/147d27cdc3b3ff76e9b70f1c75411fa4723128dd4d319b7337071eb37bee6835c243780afe3724321773c79e7838f74eae35e85c935fc216f72accdd078942fc - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-engine@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-engine@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/e296c0f15be866718ff28e83d4e84f2481f3f84342d3d1500dcc81503a4c54b54e319ad99b5ab4fbb1d02c84537f7b8786a25ec592b06490ca45a9a72cc2a487 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-enter@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-enter@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - checksum: 10c0/e7bda00ec491fc5b482429b8f1d29d3d613634c33b9db04f9afe4a21e331cc0bff7777499715a6e3f82ddc54b9485240a6efa78a328c86b808cb6c3e899df0d2 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-essentials@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-essentials@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-select-all": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-undo": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/56a05b8d5da1dbb51ac7f44f48d8f8c3bb4cc5e7e8f05182bf9148f2b81fafd7b86ffd8808bd22a2f8e6893ea13e758e8c0b39b5570663d3160d6b52f1515c02 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-find-and-replace@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-find-and-replace@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/96aeef2666e700ce4976cc20c2ba630da6e79fbd457a5a2fb692cbd7f6440efb8a8a7d8feb74ebb9d23e395f540c05168614893ae6a04febc0016de66c895912 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-font@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-font@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/8bad9c719908109ec81e99cbdfbf1f75d11aa7471bb367ae536e51f1ec5a25d5319afe0809800575e2abe86be1ade542652d698454dbcebddf32caa5fdc741f2 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-fullscreen@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-fullscreen@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-classic": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-decoupled": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/72d54fbe9d581f698a0ef1d8b6f17f8b8b84af3aeb1d2486dc767c2ff01578d5159890688a4ddc667a2d5a99d5677464761b5f3fd01d6623b6695076778a06e0 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-heading@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-heading@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-paragraph": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/be6d37a7a14565cccb30e7df34569eed10a6984757815771a317b82881856caf7b247788490307d09a9a8a5077925852e173c3a8ec1fb7f3ed37324b496fac1a - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-highlight@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-highlight@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/8a73f4fd7872a25e23612562e8ac9bc69c75d5c3963e74fa0cf7615fd03d7f56e607d191ca8c4f57dc3f35c91cc5f9ef483ec4b4fdafb5a849709cf641a788d2 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-horizontal-line@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-horizontal-line@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/c16ca74c66293512e19375cb69dd57f458dab0c4286a4fb340054030734fca8150001ba3e815f7607eda56d9decde1483a4bef128b9978ca3d5d536d48d62fbb - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-html-embed@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-html-embed@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/e6aa7b1890e9ec4270e3038a3268022375c24cb47d11f5e0127f6d7ea11aeed5365cf819bd3e434b8e86923af20093d5af1f7e2d468436bf88d914ec6aa6669e - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-html-support@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-html-support@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-heading": "npm:45.2.2" - "@ckeditor/ckeditor5-image": "npm:45.2.2" - "@ckeditor/ckeditor5-list": "npm:45.2.2" - "@ckeditor/ckeditor5-table": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/69ffa7244ec60452f60883e2c315fbf23c55650c7df436a890e613989ade9d3cae06e2f3e3d7d9597b574809e9504a58bb6152fdd25c884623807e044daf3913 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-icons@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-icons@npm:45.2.2" - checksum: 10c0/e0f4e51d8d5e6e0d073a20a0b2268e291e3680681860e7947db390c6f6d6a886c5108d0dbc075f6c8937cfcb75e5518f5dd384db3c3725d379440d2ff64b9a55 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-image@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-image@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-undo": "npm:45.2.2" - "@ckeditor/ckeditor5-upload": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/1cfc7f55869c09015e0aedb3a1795bbd83308a6228acf313829ddb28ee4ad316968fb89c528589697efe7536daf23c6068a5de6d79b353cd95424cfe4e367940 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-indent@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-indent@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-heading": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-list": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/7683ec1f1728a08c0ae645c9410992310774afa129fe86883fc936b16814adac5e7decd734cd1d794963d1eb8b7f6bc3809d38eae3670133ff2a535be7b61936 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-integrations-common@npm:^2.2.2": - version: 2.2.3 - resolution: "@ckeditor/ckeditor5-integrations-common@npm:2.2.3" - peerDependencies: - ckeditor5: ">=42.0.0 || ^0.0.0-nightly" - checksum: 10c0/de3f3c513d6d65a972a505568639224ebfa7b18e7887b5344c457e36475ec233d5425495ab88478d977ae3623eca1457e9d720895fe5ea60d4837580ffae07af - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-language@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-language@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/79185376beea4dcd66d1e5dc79b3c4a55e15275a52887d19a4e3d97a98ba4ee829f740de88f164082dddb7e0b4bd31e850269661c9c345ae5b00bfdba3be8832 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-link@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-link@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-image": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/7d529eb74bbc882a3de3f22691609fce2c3b8d383b8f86d78181e4a452071f44258ab0e41444f0812f7d2676f0f1f556033b4d92b901ad7479de5ff9a7a3780a - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-list@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-list@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/4be75ebb1d8730469f09220b58eddc21822610a0c20b7b6cd205f2295024a00f41c2a95182d623b82248772b2e66759b7df121fb8b5837ff7b67adfe976f58e4 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-markdown-gfm@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-markdown-gfm@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@types/marked": "npm:4.3.2" - "@types/turndown": "npm:5.0.5" - ckeditor5: "npm:45.2.2" - marked: "npm:4.0.12" - turndown: "npm:7.2.0" - turndown-plugin-gfm: "npm:1.0.2" - checksum: 10c0/1569a61e8c67a5eecfae3f05ade73a895a1959a71dcacc0714cee7532f9b9e2a45db27dbd2051df26b1635cd0fdde15a910a941290bc685134f54b4fe32be2e0 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-media-embed@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-media-embed@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-undo": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/4f9bc02e0e52dd3983f4d66f9e1e70c9095d5354d945ade1df7d227cf473f2df2a30f7705ce6de1529c8ecc0267b60350c59bad3626e46457691607f2ccdac85 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-mention@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-mention@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/833653c218f825c2845efe1995e4b882c409666d76fc0a3da78abeb1932e523ced7e810cd72e4496139afee369637f491517467f65cb31e6f79ba103a188a56f - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-minimap@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-minimap@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/cd089292f89541a9a46e5f3779a17b0df36f5c2effe6aacb5764461a507f1e09de7be53093a7736a22498eb594eca58b5058add21fefb7c9e36843688a6599ce - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-page-break@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-page-break@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/af60aa157fb8cbe89a3d88b01ae423348a2724b2be89f43cfb4ff13e59bb180b8e96036c4930052756b9023a66f8e0f415cb6a615aad92edb9608accc4ef05b4 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-paragraph@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-paragraph@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - checksum: 10c0/d8cc0772a4df380ad2fe12ba51a9f1856da130f5185bb84a3455f71a9ede336537d1e7cb28d3f39816b65f6247d5c55d501abca36ce6c347f8f361d9cd439aa7 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-paste-from-office@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-paste-from-office@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/f7d60e913da28e821c4aaac910ce95fa9cd4ac81dd5270d171ccb936fd81454a9f65ebfa0d8f8c3545ad4c3a8bc0f9ecb680e70aa808b8e00fd206980dbd6f51 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-react@npm:~9.5.0": - version: 9.5.0 - resolution: "@ckeditor/ckeditor5-react@npm:9.5.0" - dependencies: - "@ckeditor/ckeditor5-integrations-common": "npm:^2.2.2" - peerDependencies: - ckeditor5: ">=42.0.0 || ^0.0.0-nightly" - react: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10c0/79cf0429b752efd90a9a3653803fd5658da3ffe7968eafaab96486eb6dc701524041d677f619792c31628d30b214aab41ac21c2cc17c43bb01305c4f90ff6900 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-remove-format@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-remove-format@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/912bab12a4b17d8f40758de649b7b208a4d5e0d1190c0e86ffef4b9c2675101b6ff89d5dc1f3fcf5c840e17a09f04abb3cb1c5caff9cd83753b0546239cb03eb - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-restricted-editing@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-restricted-editing@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/a95d4835f7630a90eb2795df53c386dd27ac67e7d7f0153107a948f0ad35e4e42ba9fd28cedd3f3fb3b248bc115c60955e084661bbb234de56320bb0c3a50a8a - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-select-all@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-select-all@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - checksum: 10c0/ed83d42653626bf0e3aed1d352e69f11b3b8c2446db51b1b5595ebe98716f2f5f5999b916cc40ef1f1588f66ef99e76cff5fc354527fae0ad68f010a569ec15c - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-show-blocks@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-show-blocks@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/4900ff7f4ff669fcbad9f0997196aa88441c744f13316dd151358b8dc3b0c33db4a74f6ec74b8d33fcc1b01a06399dcdf203b93f6a80e185cd11d96ca6015d49 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-source-editing@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-source-editing@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-theme-lark": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/3b042432110b85bfa23b331a1749f798422e1e0fe3952f5e82baf8fdf474554c65b1e0bbf1a237e1fe1a88b3e710e107f0de80658dbb1f79a6a74105f0a9d5be - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-special-characters@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-special-characters@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - checksum: 10c0/4e6c8eb07c39b39c15c6b31203c78cc3f82db1e76b6b2388e2d73f5798f14deff95143fb60173c1964dd017e4bc0d34148e3223f16a70d80aa8a8f6b3d3d2140 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-style@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-style@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-html-support": "npm:45.2.2" - "@ckeditor/ckeditor5-list": "npm:45.2.2" - "@ckeditor/ckeditor5-table": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/c3eedb3c9024891cfd1fc5abe22ca5b4bc9ce95885602fd807bb0539aea9887088c48b3f0873b4647c7d085b183d0e42ed07f30438c001a9708d8d90a05a8721 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-table@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-table@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/93f89ed4ed8ebd26c9f8dd53ea05085438b4c34bba1b84728754090aedef3d0b3e0f6a9f1c306531d6a51fe626b1ea8c9527e9404b34bcda884bf02ef95e078b - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-theme-lark@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-theme-lark@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - checksum: 10c0/6307c743913a0e643711be8d7a77eb1039842ec62716827ea78cc4843c212b163111ece03fb9dd22d0cd420bf98a02b79f8367938f4113fce1bf27dfb71b21ff - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-typing@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-typing@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/b887806e37f6961a91e89b0aae3a8edd63e385bedb4294b6f79998e13e3e324f882be640ef4cdb3c696a6cce1859062355d9a981044d8719ca70adcf64b63803 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-ui@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-ui@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-multi-root": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@types/color-convert": "npm:2.0.4" - color-convert: "npm:2.0.1" - color-parse: "npm:1.4.2" - es-toolkit: "npm:1.32.0" - vanilla-colorful: "npm:0.7.2" - checksum: 10c0/e6ae43717dc481d879b54ef2dc05bd4a25f3f0146c63b1082b7f48aef6b6428b4f057244f1ffb15bde71a6dcd23d6b7bd63dd9d155303532032118aa42f84f2c - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-undo@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-undo@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - checksum: 10c0/a03bbce73021c98bdf27ab1c7e898d8c093dab59c591b8beaff4cc960b09fdb80afbe4300e9f1efedf8640d242facf09727060b2e260097fec7ccbdab3d324eb - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-upload@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-upload@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - checksum: 10c0/327256ec2b7f399f303e4e3c5c84068c754bc5e0c20e7028f1045fee29fe7f4f346408d03b46adee1f067bbfc28dbcbfc5c529075f1ca3e4a4058558365b5e2e - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-utils@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-utils@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/ac53fb5fa3869b551ed310153a9b63093f9819efbf8c6d5709f094607cb80439a9716e48d5bd01484f3e45a2f30175f17a0d2dcd9aab7b6514853c6d5c274b63 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-watchdog@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-watchdog@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-multi-root": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/f427ee350285e34c3282e15463a95bc3a9310f26b762601c1aa6fba922781c75be2a12ad8e09876c6c9d6f4c3cea1ba4379493fef52dbd67a75903cb4a397192 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-widget@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-widget@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/b1dad4966145a599fcd1957196b6b0326f87c2a9cab1900e84593a5d03a6a4596129607c439d7395e9c6d6eb97cc6a7bb1d4748f8a7c4edf245d2dc140c2c278 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-word-count@npm:45.2.2": - version: 45.2.2 - resolution: "@ckeditor/ckeditor5-word-count@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - ckeditor5: "npm:45.2.2" - es-toolkit: "npm:1.32.0" - checksum: 10c0/d9e61cfeffe6459650151272cd60103abcfdfae336f56e7271b006e6f4f9cfdfcc1672343fd07d47985d13e50d4066291c632ec832caabecb9bb67bcfa197a51 - languageName: node - linkType: hard - "@codemirror/autocomplete@npm:^6.0.0": version: 6.18.6 resolution: "@codemirror/autocomplete@npm:6.18.6" @@ -2236,17 +1330,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.2.4": - version: 2.2.4 - resolution: "@formatjs/ecma402-abstract@npm:2.2.4" - dependencies: - "@formatjs/fast-memoize": "npm:2.2.3" - "@formatjs/intl-localematcher": "npm:0.5.8" - tslib: "npm:2" - checksum: 10c0/3f262533fa704ea7a1a7a8107deee2609774a242c621f8cb5dd4bf4c97abf2fc12f5aeda3f4ce85be18147c484a0ca87303dca6abef53290717e685c55eabd2d - languageName: node - linkType: hard - "@formatjs/fast-memoize@npm:2.2.0": version: 2.2.0 resolution: "@formatjs/fast-memoize@npm:2.2.0" @@ -2256,15 +1339,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.3": - version: 2.2.3 - resolution: "@formatjs/fast-memoize@npm:2.2.3" - dependencies: - tslib: "npm:2" - checksum: 10c0/f1004c3b280de7e362bd37c5f48ff34c2ba1d6271d4a7b695fed561d1201a3379397824d8bffbf15fecee344d1e70398393bbb04297f242692310a305f12e75b - languageName: node - linkType: hard - "@formatjs/icu-messageformat-parser@npm:2.7.6": version: 2.7.6 resolution: "@formatjs/icu-messageformat-parser@npm:2.7.6" @@ -2276,17 +1350,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.9.4": - version: 2.9.4 - resolution: "@formatjs/icu-messageformat-parser@npm:2.9.4" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - "@formatjs/icu-skeleton-parser": "npm:1.8.8" - tslib: "npm:2" - checksum: 10c0/f1ed14ece7ef0abc9fb62e323b78c994fc772d346801ad5aaa9555e1a7d5c0fda791345f4f2e53a3223f0b82c1a4eaf9a83544c1c20cb39349d1a39bedcf1648 - languageName: node - linkType: hard - "@formatjs/icu-skeleton-parser@npm:1.8.0": version: 1.8.0 resolution: "@formatjs/icu-skeleton-parser@npm:1.8.0" @@ -2297,16 +1360,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.8": - version: 1.8.8 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.8" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - tslib: "npm:2" - checksum: 10c0/5ad78a5682e83b973e6fed4fca68660b944c41d1e941f0c84d69ff3d10ae835330062dc0a2cf0d237d2675ad3463405061a3963c14c2b9d8d1c1911f892b1a8d - languageName: node - linkType: hard - "@formatjs/intl-displaynames@npm:6.6.6": version: 6.6.6 resolution: "@formatjs/intl-displaynames@npm:6.6.6" @@ -2318,17 +1371,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.8.5": - version: 6.8.5 - resolution: "@formatjs/intl-displaynames@npm:6.8.5" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - "@formatjs/intl-localematcher": "npm:0.5.8" - tslib: "npm:2" - checksum: 10c0/1092d6bac9ba7ee22470b85c9af16802244aa8a54f07e6cd560d15b96e8a08fc359f20dee88a064fe4c9ca8860f439abb109cbb7977b9ccceb846e28aacdf29c - languageName: node - linkType: hard - "@formatjs/intl-listformat@npm:7.5.5": version: 7.5.5 resolution: "@formatjs/intl-listformat@npm:7.5.5" @@ -2340,17 +1382,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.7.5": - version: 7.7.5 - resolution: "@formatjs/intl-listformat@npm:7.7.5" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - "@formatjs/intl-localematcher": "npm:0.5.8" - tslib: "npm:2" - checksum: 10c0/f514397f6b05ac29171fffbbd15636fbec086080058c79c159f24edd2038747c22579d46ebf339cbb672f8505ea408e5d960d6751064c16e02d18445cf4e7e61 - languageName: node - linkType: hard - "@formatjs/intl-localematcher@npm:0.5.4": version: 0.5.4 resolution: "@formatjs/intl-localematcher@npm:0.5.4" @@ -2360,15 +1391,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.8": - version: 0.5.8 - resolution: "@formatjs/intl-localematcher@npm:0.5.8" - dependencies: - tslib: "npm:2" - checksum: 10c0/7a660263986326b662d4cb537e8386331c34fda61fb830b105e6c62d49be58ace40728dae614883b27a41cec7b1df8b44f72f79e16e6028bfca65d398dc04f3b - languageName: node - linkType: hard - "@formatjs/intl@npm:2.10.0": version: 2.10.0 resolution: "@formatjs/intl@npm:2.10.0" @@ -2389,26 +1411,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl@npm:2.10.15": - version: 2.10.15 - resolution: "@formatjs/intl@npm:2.10.15" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - "@formatjs/fast-memoize": "npm:2.2.3" - "@formatjs/icu-messageformat-parser": "npm:2.9.4" - "@formatjs/intl-displaynames": "npm:6.8.5" - "@formatjs/intl-listformat": "npm:7.7.5" - intl-messageformat: "npm:10.7.7" - tslib: "npm:2" - peerDependencies: - typescript: ^4.7 || 5 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/5d51fd0785d5547f375991d7df2d6303479b0083eeb35c42c30c9633aab77101895498f1eace419fd34fdb5c84aea19037c5280c3a9d85f9c3ffe6eef76b6f39 - languageName: node - linkType: hard - "@hapi/bourne@npm:^3.0.0": version: 3.0.0 resolution: "@hapi/bourne@npm:3.0.0" @@ -2800,13 +1802,6 @@ __metadata: languageName: node linkType: hard -"@mixmark-io/domino@npm:^2.2.0": - version: 2.2.0 - resolution: "@mixmark-io/domino@npm:2.2.0" - checksum: 10c0/aa468a15f9217d425220fe6a4b3f9416cbe8e566ee14efc191c6d5cc04fe39338b16a90bbac190f28d44e69465db5f2cf95f479c621ce38060ca6b2a3d346e9d - languageName: node - linkType: hard - "@mux/mux-player-react@npm:3.1.0": version: 3.1.0 resolution: "@mux/mux-player-react@npm:3.1.0" @@ -2925,99 +1920,18 @@ __metadata: linkType: hard "@paralleldrive/cuid2@npm:2.2.2, @paralleldrive/cuid2@npm:^2.2.2": - version: 2.2.2 - resolution: "@paralleldrive/cuid2@npm:2.2.2" - dependencies: - "@noble/hashes": "npm:^1.1.5" - checksum: 10c0/af5826df93de437121308f4f4ce0b2eeb89b60bb57a1a6592fb89c0d40d311ad1d9f3f6a4db2cce6f2bcf572de1aa3f85704254e89b18ce61c41ebb06564c4ee - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@pluginpal/webtools-addon-breadcrumbs@npm:^1.0.3": - version: 1.0.3 - resolution: "@pluginpal/webtools-addon-breadcrumbs@npm:1.0.3" - dependencies: - "@_sh/strapi-plugin-ckeditor": "npm:^6.0.2" - "@polar-sh/sdk": "npm:^0.34.3" - formik: "npm:^2.4.0" - lodash: "npm:^4.17.21" - react-copy-to-clipboard: "npm:^5.1.0" - react-intl: "npm:^6.4.1" - react-query: "npm:^3.39.3" - yup: "npm:^0.32.9" - peerDependencies: - "@strapi/admin": ^5.0.0 - "@strapi/design-system": ^2.0.0-rc.14 - "@strapi/icons": ^2.0.0-rc.14 - "@strapi/strapi": ^5.0.0 - "@strapi/utils": ^5.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.0.0 - strapi-plugin-webtools: ^1.6.1 - styled-components: ^6.0.0 - checksum: 10c0/e3d8ed28154b7d46335df124cd2eda0891c20bf9b6e5985fc4e540fe107e0809845b05179b07738fb9003afe5d3c94e1088efa6d7cd967e655b5b865e22b233a - languageName: node - linkType: hard - -"@pluginpal/webtools-addon-links@npm:^1.5.1": - version: 1.5.1 - resolution: "@pluginpal/webtools-addon-links@npm:1.5.1" - dependencies: - "@_sh/strapi-plugin-ckeditor": "npm:^6.0.2" - "@polar-sh/sdk": "npm:^0.34.3" - formik: "npm:^2.4.0" - lodash: "npm:^4.17.21" - qs: "npm:^6.11.1" - react-copy-to-clipboard: "npm:^5.1.0" - react-intl: "npm:^6.4.1" - react-query: "npm:^3.39.3" - yup: "npm:^0.32.9" - peerDependencies: - "@strapi/admin": ^5.0.0 - "@strapi/design-system": ^2.0.0-rc.14 - "@strapi/icons": ^2.0.0-rc.14 - "@strapi/strapi": ^5.0.0 - "@strapi/utils": ^5.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.0.0 - strapi-plugin-webtools: ^1.6.1 - styled-components: ^6.0.0 - checksum: 10c0/d86b563cfd78748d33fb4cdaf26b5944e0f3bd043c6e61bd25f0ac1575773f41c413165602e5501053ca185a4f317d3ce729def2d9694af6fb53aacbba69dcfa - languageName: node - linkType: hard - -"@pluginpal/webtools-addon-redirects@npm:^1.0.1": - version: 1.0.1 - resolution: "@pluginpal/webtools-addon-redirects@npm:1.0.1" - dependencies: - "@polar-sh/sdk": "npm:^0.34.3" - formik: "npm:^2.4.0" - lodash: "npm:^4.17.21" - react-copy-to-clipboard: "npm:^5.1.0" - react-intl: "npm:^6.4.1" - react-query: "npm:^3.39.3" - yup: "npm:^0.32.9" - peerDependencies: - "@strapi/admin": ^5.0.0 - "@strapi/design-system": ^2.0.0-rc.14 - "@strapi/icons": ^2.0.0-rc.14 - "@strapi/strapi": ^5.0.0 - "@strapi/utils": ^5.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.0.0 - strapi-plugin-webtools: ^1.4 - styled-components: ^6.0.0 - checksum: 10c0/fc21105e27737e27342e35cdc55b67d5220d9f15df7d83c64bd4f51f2a86ec312321503fd3e0b2bf720863710ea7dc93512b4bac280770cbeac6ae54dfa31c7b + version: 2.2.2 + resolution: "@paralleldrive/cuid2@npm:2.2.2" + dependencies: + "@noble/hashes": "npm:^1.1.5" + checksum: 10c0/af5826df93de437121308f4f4ce0b2eeb89b60bb57a1a6592fb89c0d40d311ad1d9f3f6a4db2cce6f2bcf572de1aa3f85704254e89b18ce61c41ebb06564c4ee + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd languageName: node linkType: hard @@ -3085,23 +1999,6 @@ __metadata: languageName: node linkType: hard -"@polar-sh/sdk@npm:^0.34.3": - version: 0.34.17 - resolution: "@polar-sh/sdk@npm:0.34.17" - dependencies: - standardwebhooks: "npm:^1.0.0" - zod: "npm:^3.25.76" - peerDependencies: - "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0" - peerDependenciesMeta: - "@modelcontextprotocol/sdk": - optional: true - bin: - mcp: bin/mcp-server.js - checksum: 10c0/6242e65d48607d612eff2b6778c54035377bc73b898941ff9473e0f31d8599fc55dbfcd3a280b8fcdc2a85f2005898e141934501dde7b1388de8a8778d3fde13 - languageName: node - linkType: hard - "@polka/url@npm:^1.0.0-next.24": version: 1.0.0-next.29 resolution: "@polka/url@npm:1.0.0-next.29" @@ -4350,13 +3247,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/base64@npm:^1.0.0": - version: 1.0.1 - resolution: "@stablelib/base64@npm:1.0.1" - checksum: 10c0/6330720f021819d19cecfe274111b79a256caa81df478d6b0ae7effc8842b96915b6aeed85926ff05b4d48ec1fc78ad043d928b730ee4e6cc6e8cba6aa097bed - languageName: node - linkType: hard - "@standard-schema/spec@npm:^1.0.0": version: 1.0.0 resolution: "@standard-schema/spec@npm:1.0.0" @@ -4702,44 +3592,6 @@ __metadata: languageName: node linkType: hard -"@strapi/design-system@npm:2.0.0-rc.18": - version: 2.0.0-rc.18 - resolution: "@strapi/design-system@npm:2.0.0-rc.18" - dependencies: - "@codemirror/lang-json": "npm:6.0.1" - "@floating-ui/react-dom": "npm:2.1.0" - "@internationalized/date": "npm:3.5.4" - "@internationalized/number": "npm:3.5.3" - "@radix-ui/react-accordion": "npm:1.1.2" - "@radix-ui/react-alert-dialog": "npm:1.0.5" - "@radix-ui/react-avatar": "npm:1.0.4" - "@radix-ui/react-checkbox": "npm:1.0.4" - "@radix-ui/react-dialog": "npm:1.0.5" - "@radix-ui/react-dismissable-layer": "npm:1.0.5" - "@radix-ui/react-dropdown-menu": "npm:2.0.6" - "@radix-ui/react-focus-guards": "npm:1.0.1" - "@radix-ui/react-focus-scope": "npm:1.0.4" - "@radix-ui/react-popover": "npm:1.0.7" - "@radix-ui/react-progress": "npm:1.0.3" - "@radix-ui/react-radio-group": "npm:1.1.3" - "@radix-ui/react-scroll-area": "npm:1.0.5" - "@radix-ui/react-switch": "npm:1.0.3" - "@radix-ui/react-tabs": "npm:1.0.4" - "@radix-ui/react-tooltip": "npm:1.0.7" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - "@strapi/ui-primitives": "npm:2.0.0-rc.18" - "@uiw/react-codemirror": "npm:4.22.2" - lodash: "npm:4.17.21" - react-remove-scroll: "npm:2.5.10" - peerDependencies: - "@strapi/icons": ^2.0.0 || ^2.0.0-beta || ^2.0.0-alpha - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - styled-components: ^6.0.0 - checksum: 10c0/8e0dfbad48c0cdea11ce7d02a4e51c94200c7fd2fdb006254e17fce3b4b6613ae02ba25442d58f6137c7b62adde144aed612b915835d241c423e46c7c5ac012b - languageName: node - linkType: hard - "@strapi/design-system@npm:2.0.0-rc.30": version: 2.0.0-rc.30 resolution: "@strapi/design-system@npm:2.0.0-rc.30" @@ -4847,17 +3699,6 @@ __metadata: languageName: node linkType: hard -"@strapi/icons@npm:2.0.0-rc.18": - version: 2.0.0-rc.18 - resolution: "@strapi/icons@npm:2.0.0-rc.18" - peerDependencies: - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - styled-components: ^6.0.0 - checksum: 10c0/e8268aa5af412dd06e80de09765246bd97383fdc5f3a3db00fda3504f4d2ecc0b2733e046612a729924de2b0e1929916d9b0796030d9511c23130fa9630f7b9d - languageName: node - linkType: hard - "@strapi/icons@npm:2.0.0-rc.30": version: 2.0.0-rc.30 resolution: "@strapi/icons@npm:2.0.0-rc.30" @@ -5118,37 +3959,6 @@ __metadata: languageName: node linkType: hard -"@strapi/ui-primitives@npm:2.0.0-rc.18": - version: 2.0.0-rc.18 - resolution: "@strapi/ui-primitives@npm:2.0.0-rc.18" - dependencies: - "@radix-ui/number": "npm:1.0.1" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-collection": "npm:1.0.3" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" - "@radix-ui/react-dismissable-layer": "npm:1.0.5" - "@radix-ui/react-focus-guards": "npm:1.0.1" - "@radix-ui/react-focus-scope": "npm:1.0.4" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-popper": "npm:1.1.3" - "@radix-ui/react-portal": "npm:1.0.4" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-slot": "npm:1.0.2" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" - "@radix-ui/react-use-previous": "npm:1.0.1" - "@radix-ui/react-visually-hidden": "npm:1.0.3" - aria-hidden: "npm:1.2.4" - react-remove-scroll: "npm:2.5.10" - peerDependencies: - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - checksum: 10c0/1421d68e2293874c1d3c54d197603686f99236b4335d92a83ef7b4b2a85ed993f685c8dbd34cc85d2cc55c7e3579d7952e2b896ee34283e21b4602286eb1f4c3 - languageName: node - linkType: hard - "@strapi/ui-primitives@npm:2.0.0-rc.30": version: 2.0.0-rc.30 resolution: "@strapi/ui-primitives@npm:2.0.0-rc.30" @@ -5521,22 +4331,6 @@ __metadata: languageName: node linkType: hard -"@types/color-convert@npm:2.0.4": - version: 2.0.4 - resolution: "@types/color-convert@npm:2.0.4" - dependencies: - "@types/color-name": "npm:^1.1.0" - checksum: 10c0/fdd2cea0ccf593055c8d952760286a4c114ed72a9940798d13f159823bf71d40a6b124009865e2e066f062d6d5611b677ddb61fd0ed05f6494170454cc6457c2 - languageName: node - linkType: hard - -"@types/color-name@npm:^1.1.0": - version: 1.1.5 - resolution: "@types/color-name@npm:1.1.5" - checksum: 10c0/ce566d98ab1c2622a2e9d9d1d5cbde403e731a4fc084e8b0f56e89901cd3c46981feafb797d4505918d5eb5a7fd897fce2332d489f450ddf1c58bc4986bd9d76 - languageName: node - linkType: hard - "@types/connect@npm:*": version: 3.4.38 resolution: "@types/connect@npm:3.4.38" @@ -5698,17 +4492,6 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:3": - version: 3.3.7 - resolution: "@types/hoist-non-react-statics@npm:3.3.7" - dependencies: - hoist-non-react-statics: "npm:^3.3.0" - peerDependencies: - "@types/react": "*" - checksum: 10c0/ed8f4e88338f7d021d0f956adf6089d2a12b2e254a03c05292324f2e986d2376eb9efdb8a4f04596823e8fca88c9d06361d20dab4a2a00dc935fb36ac911de55 - languageName: node - linkType: hard - "@types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.6 resolution: "@types/hoist-non-react-statics@npm:3.3.6" @@ -5839,20 +4622,6 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:^4.14.175": - version: 4.17.24 - resolution: "@types/lodash@npm:4.17.24" - checksum: 10c0/b72f60d4daacdad1fa643edb3faba204c02a01eb1ac00a83ff73496a6d236fc55e459c06106e8ced42277dba932d087d8fc090f8de4ef590d3f91e6d6f7ce85a - languageName: node - linkType: hard - -"@types/marked@npm:4.3.2": - version: 4.3.2 - resolution: "@types/marked@npm:4.3.2" - checksum: 10c0/6f44d28da5c940a719d6c6aca41e33f49c5fe957f7972939cc1cbb47d045951f4d969f382d655345d0463e47db1994635d2862018716fcef2fa85ceeceb116e7 - languageName: node - linkType: hard - "@types/mdast@npm:^4.0.0": version: 4.0.4 resolution: "@types/mdast@npm:4.0.4" @@ -6048,13 +4817,6 @@ __metadata: languageName: node linkType: hard -"@types/turndown@npm:5.0.5": - version: 5.0.5 - resolution: "@types/turndown@npm:5.0.5" - checksum: 10c0/d6b4f8451caf72399f36f810461baf5f3b5e958ff216388bb3324a9949079daad31d970a28a140b3571db8793908396e757329334f5dc8bcff414698b8c31113 - languageName: node - linkType: hard - "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.3 resolution: "@types/unist@npm:3.0.3" @@ -6834,13 +5596,6 @@ __metadata: languageName: node linkType: hard -"blurhash@npm:2.0.5": - version: 2.0.5 - resolution: "blurhash@npm:2.0.5" - checksum: 10c0/75d5f042b5bb8ead977524a985048378a033af866534abbaee73c80030cc9fc34e6c5b7d483c68bbdb600e0ae438f2ea6140b1f46d75fcfa57a902208ae8b85e - languageName: node - linkType: hard - "bn.js@npm:^4.0.0, bn.js@npm:^4.11.9": version: 4.12.1 resolution: "bn.js@npm:4.12.1" @@ -7283,75 +6038,6 @@ __metadata: languageName: node linkType: hard -"ckeditor5@npm:45.2.2, ckeditor5@npm:~45.2.0": - version: 45.2.2 - resolution: "ckeditor5@npm:45.2.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:45.2.2" - "@ckeditor/ckeditor5-alignment": "npm:45.2.2" - "@ckeditor/ckeditor5-autoformat": "npm:45.2.2" - "@ckeditor/ckeditor5-autosave": "npm:45.2.2" - "@ckeditor/ckeditor5-basic-styles": "npm:45.2.2" - "@ckeditor/ckeditor5-block-quote": "npm:45.2.2" - "@ckeditor/ckeditor5-bookmark": "npm:45.2.2" - "@ckeditor/ckeditor5-ckbox": "npm:45.2.2" - "@ckeditor/ckeditor5-ckfinder": "npm:45.2.2" - "@ckeditor/ckeditor5-clipboard": "npm:45.2.2" - "@ckeditor/ckeditor5-cloud-services": "npm:45.2.2" - "@ckeditor/ckeditor5-code-block": "npm:45.2.2" - "@ckeditor/ckeditor5-core": "npm:45.2.2" - "@ckeditor/ckeditor5-easy-image": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-balloon": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-classic": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-decoupled": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-inline": "npm:45.2.2" - "@ckeditor/ckeditor5-editor-multi-root": "npm:45.2.2" - "@ckeditor/ckeditor5-emoji": "npm:45.2.2" - "@ckeditor/ckeditor5-engine": "npm:45.2.2" - "@ckeditor/ckeditor5-enter": "npm:45.2.2" - "@ckeditor/ckeditor5-essentials": "npm:45.2.2" - "@ckeditor/ckeditor5-find-and-replace": "npm:45.2.2" - "@ckeditor/ckeditor5-font": "npm:45.2.2" - "@ckeditor/ckeditor5-fullscreen": "npm:45.2.2" - "@ckeditor/ckeditor5-heading": "npm:45.2.2" - "@ckeditor/ckeditor5-highlight": "npm:45.2.2" - "@ckeditor/ckeditor5-horizontal-line": "npm:45.2.2" - "@ckeditor/ckeditor5-html-embed": "npm:45.2.2" - "@ckeditor/ckeditor5-html-support": "npm:45.2.2" - "@ckeditor/ckeditor5-icons": "npm:45.2.2" - "@ckeditor/ckeditor5-image": "npm:45.2.2" - "@ckeditor/ckeditor5-indent": "npm:45.2.2" - "@ckeditor/ckeditor5-language": "npm:45.2.2" - "@ckeditor/ckeditor5-link": "npm:45.2.2" - "@ckeditor/ckeditor5-list": "npm:45.2.2" - "@ckeditor/ckeditor5-markdown-gfm": "npm:45.2.2" - "@ckeditor/ckeditor5-media-embed": "npm:45.2.2" - "@ckeditor/ckeditor5-mention": "npm:45.2.2" - "@ckeditor/ckeditor5-minimap": "npm:45.2.2" - "@ckeditor/ckeditor5-page-break": "npm:45.2.2" - "@ckeditor/ckeditor5-paragraph": "npm:45.2.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:45.2.2" - "@ckeditor/ckeditor5-remove-format": "npm:45.2.2" - "@ckeditor/ckeditor5-restricted-editing": "npm:45.2.2" - "@ckeditor/ckeditor5-select-all": "npm:45.2.2" - "@ckeditor/ckeditor5-show-blocks": "npm:45.2.2" - "@ckeditor/ckeditor5-source-editing": "npm:45.2.2" - "@ckeditor/ckeditor5-special-characters": "npm:45.2.2" - "@ckeditor/ckeditor5-style": "npm:45.2.2" - "@ckeditor/ckeditor5-table": "npm:45.2.2" - "@ckeditor/ckeditor5-theme-lark": "npm:45.2.2" - "@ckeditor/ckeditor5-typing": "npm:45.2.2" - "@ckeditor/ckeditor5-ui": "npm:45.2.2" - "@ckeditor/ckeditor5-undo": "npm:45.2.2" - "@ckeditor/ckeditor5-upload": "npm:45.2.2" - "@ckeditor/ckeditor5-utils": "npm:45.2.2" - "@ckeditor/ckeditor5-watchdog": "npm:45.2.2" - "@ckeditor/ckeditor5-widget": "npm:45.2.2" - "@ckeditor/ckeditor5-word-count": "npm:45.2.2" - checksum: 10c0/fb4d767afd1b7e6c5ecd8c38101de9e391c717c9d9647b8c537f91a5b56dd3c74d645f336187eed5d54c8b764704afb12e64c9ec24635f26602e65420db1f79c - languageName: node - linkType: hard - "clean-css@npm:^5.2.2": version: 5.3.3 resolution: "clean-css@npm:5.3.3" @@ -7549,15 +6235,6 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:2.0.1, color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - "color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -7567,6 +6244,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + "color-name@npm:1.1.3": version: 1.1.3 resolution: "color-name@npm:1.1.3" @@ -7581,15 +6267,6 @@ __metadata: languageName: node linkType: hard -"color-parse@npm:1.4.2": - version: 1.4.2 - resolution: "color-parse@npm:1.4.2" - dependencies: - color-name: "npm:^1.0.0" - checksum: 10c0/911e47271d6362f6535779c3b5cfddbdc1ca2160e253de83e36784bb223c0c41cf11c382fa4b1cb766fcb313bd891f51c24d0ff0a7afee3a92aa0daf792ac4ff - languageName: node - linkType: hard - "color-string@npm:^1.6.0, color-string@npm:^1.9.0": version: 1.9.1 resolution: "color-string@npm:1.9.1" @@ -7827,15 +6504,6 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.3.1": - version: 3.3.3 - resolution: "copy-to-clipboard@npm:3.3.3" - dependencies: - toggle-selection: "npm:^1.0.6" - checksum: 10c0/3ebf5e8ee00601f8c440b83ec08d838e8eabb068c1fae94a9cda6b42f288f7e1b552f3463635f419af44bf7675afc8d0390d30876cf5c2d5d35f86d9c56a3e5f - languageName: node - linkType: hard - "copyfiles@npm:2.4.1": version: 2.4.1 resolution: "copyfiles@npm:2.4.1" @@ -8711,18 +7379,6 @@ __metadata: languageName: node linkType: hard -"es-toolkit@npm:1.32.0": - version: 1.32.0 - resolution: "es-toolkit@npm:1.32.0" - dependenciesMeta: - "@trivago/prettier-plugin-sort-imports@4.3.0": - unplugged: true - prettier-plugin-sort-re-exports@0.0.1: - unplugged: true - checksum: 10c0/56ba965570768560c071aa6a43e67f1b56b5f884a3046bb816150e8e43bc56c230408ee464534de400662dd151566f1190b812987cc433ba3239002ccbd4c6ef - languageName: node - linkType: hard - "es6-error@npm:^4.1.1": version: 4.1.1 resolution: "es6-error@npm:4.1.1" @@ -9133,13 +7789,6 @@ __metadata: languageName: node linkType: hard -"fast-sha256@npm:^1.3.0": - version: 1.3.0 - resolution: "fast-sha256@npm:1.3.0" - checksum: 10c0/87f9e4baa7639576cf60a2b6235c9f436e1a1c52323abbd8a705b5bea8355500acf176f2aed0c14f2ecd6d6007e26151461bab2f27b8953bcca8d9d6b76a86e4 - languageName: node - linkType: hard - "fast-uri@npm:^3.0.1": version: 3.0.6 resolution: "fast-uri@npm:3.0.6" @@ -9433,24 +8082,6 @@ __metadata: languageName: node linkType: hard -"formik@npm:^2.4.0": - version: 2.4.9 - resolution: "formik@npm:2.4.9" - dependencies: - "@types/hoist-non-react-statics": "npm:^3.3.1" - deepmerge: "npm:^2.1.1" - hoist-non-react-statics: "npm:^3.3.0" - lodash: "npm:^4.17.21" - lodash-es: "npm:^4.17.21" - react-fast-compare: "npm:^2.0.1" - tiny-warning: "npm:^1.0.2" - tslib: "npm:^2.0.0" - peerDependencies: - react: ">=16.8.0" - checksum: 10c0/2b76154b624f4464871f56204a7a87fec9f0cc24d742ad4e20628bd680a81ef2ae9966f54b616003f623dc1f7c7b25a25aafa8a59bcc1d940b7526fb665dbd0b - languageName: node - linkType: hard - "fractional-indexing@npm:3.2.0": version: 3.2.0 resolution: "fractional-indexing@npm:3.2.0" @@ -9596,13 +8227,6 @@ __metadata: languageName: node linkType: hard -"fuzzysort@npm:3.1.0": - version: 3.1.0 - resolution: "fuzzysort@npm:3.1.0" - checksum: 10c0/da9bb32de16f2a5c2c000b99031d9f4f8a01380c12d5d3b67296443a1152c55987ce3c4ddbfe97481b0e9b6f2fb77d61dceba29a93ad36ee23ef5bab6a31afb8 - languageName: node - linkType: hard - "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -10130,7 +8754,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:3, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -10574,18 +9198,6 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.7": - version: 10.7.7 - resolution: "intl-messageformat@npm:10.7.7" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - "@formatjs/fast-memoize": "npm:2.2.3" - "@formatjs/icu-messageformat-parser": "npm:2.9.4" - tslib: "npm:2" - checksum: 10c0/691895fb6a73a2feb2569658706e0d452861441de184dd1c9201e458a39fb80fc80080dd40d3d370400a52663f87de7a6d5a263c94245492f7265dd760441a95 - languageName: node - linkType: hard - "invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -11992,15 +10604,6 @@ __metadata: languageName: node linkType: hard -"marked@npm:4.0.12": - version: 4.0.12 - resolution: "marked@npm:4.0.12" - bin: - marked: bin/marked.js - checksum: 10c0/45745e97c9e6538ae777e797dfe3d5b34b08584ee2d5a06f03775a00b5c8986616b1a17eacf4ece6a2103d100febf876b6b9234d5b37ebb2bb474894496914f4 - languageName: node - linkType: hard - "marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" @@ -13827,9 +12430,6 @@ __metadata: version: 0.0.0-use.local resolution: "playground-5@workspace:." dependencies: - "@pluginpal/webtools-addon-breadcrumbs": "npm:^1.0.3" - "@pluginpal/webtools-addon-links": "npm:^1.5.1" - "@pluginpal/webtools-addon-redirects": "npm:^1.0.1" "@strapi/plugin-cloud": "npm:^5.31.2" "@strapi/plugin-users-permissions": "npm:^5.31.2" "@strapi/strapi": "npm:^5.31.2" @@ -14237,15 +12837,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.11.1": - version: 6.15.0 - resolution: "qs@npm:6.15.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -14302,18 +12893,6 @@ __metadata: languageName: node linkType: hard -"react-copy-to-clipboard@npm:^5.1.0": - version: 5.1.0 - resolution: "react-copy-to-clipboard@npm:5.1.0" - dependencies: - copy-to-clipboard: "npm:^3.3.1" - prop-types: "npm:^15.8.1" - peerDependencies: - react: ^15.3.0 || 16 || 17 || 18 - checksum: 10c0/de70d9f9c2d17cee207888ed791d4a042c300e5ca732503434d49e6745cff56c0d5ebcc82ab86237e9c2248e636d1d031b9f9cf9913ecec61d82a0e5ebc93881 - languageName: node - linkType: hard - "react-dnd-html5-backend@npm:16.0.1": version: 16.0.1 resolution: "react-dnd-html5-backend@npm:16.0.1" @@ -14425,30 +13004,6 @@ __metadata: languageName: node linkType: hard -"react-intl@npm:^6.4.1": - version: 6.8.9 - resolution: "react-intl@npm:6.8.9" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.4" - "@formatjs/icu-messageformat-parser": "npm:2.9.4" - "@formatjs/intl": "npm:2.10.15" - "@formatjs/intl-displaynames": "npm:6.8.5" - "@formatjs/intl-listformat": "npm:7.7.5" - "@types/hoist-non-react-statics": "npm:3" - "@types/react": "npm:16 || 17 || 18" - hoist-non-react-statics: "npm:3" - intl-messageformat: "npm:10.7.7" - tslib: "npm:2" - peerDependencies: - react: ^16.6.0 || 17 || 18 - typescript: ^4.7 || 5 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/d42a6252beac5448b4a248d84923b0f75dfbbee6208cd5c49ac2f525714ab94efe2a4933d464c64cb161ddccaa37b83dffb2dd0529428219b8a60ce548da3e57 - languageName: node - linkType: hard - "react-is@npm:^16.13.1, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -14492,7 +13047,7 @@ __metadata: languageName: node linkType: hard -"react-query@npm:3.39.3, react-query@npm:^3.39.3": +"react-query@npm:3.39.3": version: 3.39.3 resolution: "react-query@npm:3.39.3" dependencies: @@ -15923,16 +14478,6 @@ __metadata: languageName: node linkType: hard -"standardwebhooks@npm:^1.0.0": - version: 1.0.0 - resolution: "standardwebhooks@npm:1.0.0" - dependencies: - "@stablelib/base64": "npm:^1.0.0" - fast-sha256: "npm:^1.3.0" - checksum: 10c0/aee097d0f3c05172c19b80df1ed9596a2ce92f8956957650d0bbe47c2ca6d36515796b51d523333cb4a48c889b2ab130d789e7879e14975c4381bc7a61274327 - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -16444,13 +14989,6 @@ __metadata: languageName: node linkType: hard -"toggle-selection@npm:^1.0.6": - version: 1.0.6 - resolution: "toggle-selection@npm:1.0.6" - checksum: 10c0/f2cf1f2c70f374fd87b0cdc8007453ba9e981c4305a8bf4eac10a30e62ecdfd28bca7d18f8f15b15a506bf8a7bfb20dbe3539f0fcf2a2c8396c1a78d53e1f179 - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -16522,13 +15060,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.7.0, tslib@npm:^2.8.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - "tslib@npm:2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -16536,6 +15067,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.7.0, tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + "tsscmp@npm:1.0.6": version: 1.0.6 resolution: "tsscmp@npm:1.0.6" @@ -16552,22 +15090,6 @@ __metadata: languageName: node linkType: hard -"turndown-plugin-gfm@npm:1.0.2": - version: 1.0.2 - resolution: "turndown-plugin-gfm@npm:1.0.2" - checksum: 10c0/eb9bc20dbb08d5335231f9617d7440f14b35781f14a3a393d8f13fc8205afeb11a0a632d52da4548ab0fa353f315ca265462b24d368faf23258dccbe439182b9 - languageName: node - linkType: hard - -"turndown@npm:7.2.0": - version: 7.2.0 - resolution: "turndown@npm:7.2.0" - dependencies: - "@mixmark-io/domino": "npm:^2.2.0" - checksum: 10c0/6abcdcdf9d35cd79d7a8100a7de1d2226b921d5bd99e73ac14a7ead39c059978f519378913375efb04c68bcfc40f7ffe2dee0ce9ae4d54dc1235b12856a78d4e - languageName: node - linkType: hard - "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -17078,13 +15600,6 @@ __metadata: languageName: node linkType: hard -"vanilla-colorful@npm:0.7.2": - version: 0.7.2 - resolution: "vanilla-colorful@npm:0.7.2" - checksum: 10c0/53e759ffaf2608e41d85f0f2a06b5e7745773365702363fc83f743c43a6eec11feb78c9a6e680d59983d66e278eb81a43b3230b81a288f5d73512c62597251be - languageName: node - linkType: hard - "vary@npm:^1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -17659,21 +16174,6 @@ __metadata: languageName: node linkType: hard -"yup@npm:^0.32.9": - version: 0.32.11 - resolution: "yup@npm:0.32.11" - dependencies: - "@babel/runtime": "npm:^7.15.4" - "@types/lodash": "npm:^4.14.175" - lodash: "npm:^4.17.21" - lodash-es: "npm:^4.17.21" - nanoclone: "npm:^0.2.1" - property-expr: "npm:^2.0.4" - toposort: "npm:^2.0.2" - checksum: 10c0/f0802798dc64b49f313886b983a9bea5f283e2094ee2aa1197587b84f50ac5b5d03af99857c313139e63dc02558fac3aaa343503bdbffa96f70006b39d1f59c9 - languageName: node - linkType: hard - "zod@npm:3.25.67": version: 3.25.67 resolution: "zod@npm:3.25.67" @@ -17688,13 +16188,6 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.25.76": - version: 3.25.76 - resolution: "zod@npm:3.25.76" - checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c - languageName: node - linkType: hard - "zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4" From b8e1798b56df46569503ba4b5231a8e145513606 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sat, 14 Mar 2026 12:34:10 +0100 Subject: [PATCH 11/15] fix: update polar.sh checkout URL --- packages/core/admin/constants/pro-addons.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/admin/constants/pro-addons.ts b/packages/core/admin/constants/pro-addons.ts index bcc7e4e2..6857baf5 100644 --- a/packages/core/admin/constants/pro-addons.ts +++ b/packages/core/admin/constants/pro-addons.ts @@ -51,5 +51,5 @@ export const PRO_ADDONS: ProAddon[] = [ }, ]; -export const TRIAL_URL = 'https://polar.sh/checkout/polar_c_PqjxXfFD6q7QAyQ9Q7NVt75XfOSMTcdPSB0bZ2Oe3Tp'; +export const TRIAL_URL = 'https://polar.sh/checkout/polar_c_2scL6ja7SEWFHarsc21Pc8fHhRy14ib6XGUol2V5f7r'; export const DOCS_URL = 'https://docs.pluginpal.io/webtools/'; From 59fcf9c4c45a5cf6d68d038296853f766d2e014b Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sat, 14 Mar 2026 12:42:32 +0100 Subject: [PATCH 12/15] fix: resolve eslint errors in addon detection helpers - Remove no-confusing-arrow violation in getPluginName (use block body) - Fix max-len violations by shortening inline comments - Remove no-unnecessary-type-assertion in App/index.tsx Co-Authored-By: Claude Sonnet 4.6 --- packages/core/admin/containers/App/index.tsx | 10 ++++++---- packages/core/admin/screens/Overview/index.tsx | 8 +++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/core/admin/containers/App/index.tsx b/packages/core/admin/containers/App/index.tsx index 8f588f9a..e4d20f67 100644 --- a/packages/core/admin/containers/App/index.tsx +++ b/packages/core/admin/containers/App/index.tsx @@ -53,11 +53,13 @@ const App = () => { const addonsQuery = useQuery('addons', async () => get('/webtools/info/addons')); const installedPluginNames = Object.values(addonsQuery.data?.data || {}) - .map((addon) => (addon as WebtoolsAddonInfo).info.name); + .map((addon) => addon.info.name); - // Strip npm scope for comparison: "@pluginpal/webtools-addon-redirects" → "webtools-addon-redirects" - const getPluginName = (packageName: string) => - packageName.includes('/') ? packageName.split('/')[1] : packageName; + // Strip npm scope: "@pluginpal/webtools-addon-redirects" → "webtools-addon-redirects" + const getPluginName = (packageName: string) => { + if (packageName.includes('/')) return packageName.split('/')[1]; + return packageName; + }; // Find locked addons (Pro addons that are NOT installed) const lockedAddons = PRO_ADDONS.filter( diff --git a/packages/core/admin/screens/Overview/index.tsx b/packages/core/admin/screens/Overview/index.tsx index e6121df3..1fe88c6b 100644 --- a/packages/core/admin/screens/Overview/index.tsx +++ b/packages/core/admin/screens/Overview/index.tsx @@ -51,9 +51,11 @@ const List = () => { const installedAddons = Object.values(addons.data.data || {}); - // Strip npm scope for comparison: "@pluginpal/webtools-addon-redirects" → "webtools-addon-redirects" - const getPluginName = (packageName: string) => - packageName.includes('/') ? packageName.split('/')[1] : packageName; + // Strip npm scope: "@pluginpal/webtools-addon-redirects" → "webtools-addon-redirects" + const getPluginName = (packageName: string) => { + if (packageName.includes('/')) return packageName.split('/')[1]; + return packageName; + }; const installedPluginNames = installedAddons.map((addon) => addon.info.name); From 4589be4732260e6dd51571009f5037aa12297d93 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sat, 14 Mar 2026 12:58:57 +0100 Subject: [PATCH 13/15] fix: restore playground .env with safe dummy values for CI tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The .env was accidentally deleted from git tracking in b980e9f. Tests require it to boot the Strapi instance (ADMIN_JWT_SECRET etc.). Restored with placeholder values only — no real secrets. Co-Authored-By: Claude Sonnet 4.6 --- playground/.env | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 playground/.env diff --git a/playground/.env b/playground/.env new file mode 100644 index 00000000..f82995af --- /dev/null +++ b/playground/.env @@ -0,0 +1,7 @@ +HOST=0.0.0.0 +PORT=1337 +APP_KEYS="toBeModified1,toBeModified2" +API_TOKEN_SALT=tobemodified +TRANSFER_TOKEN_SALT=tobemodified +ADMIN_JWT_SECRET=tobemodified +JWT_SECRET=tobemodified From f267b1841351a2fc89fe26978836b8f2c097eecb Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sat, 14 Mar 2026 13:16:25 +0100 Subject: [PATCH 14/15] Add CLAUDE.md: guidance for Claude Code Introduce CLAUDE.md to guide Claude Code agents working with this repository. The file documents project structure (packages, playground), development setup and workflows (yarn, playground, watch builds), testing (unit/integration/e2e), linting and TypeScript checks, plugin architecture (server/admin entry points, URL patterns/aliases, middlewares, services), addon system and admin UI integration, configuration examples, common development patterns, release process, and troubleshooting tips. --- CLAUDE.md | 368 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 368 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..e1b5b759 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,368 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +Strapi Webtools is a plugin for Strapi CMS v5 that provides URL management, routing, and an extensible addon system. It's a monorepo managed with Yarn workspaces and Turborepo, containing: + +- **packages/core**: Main plugin (`strapi-plugin-webtools`) +- **packages/cli**: Installation CLI tool (`webtools-cli`) +- **packages/addons/sitemap**: Sitemap addon example +- **packages/docs**: Documentation site +- **playground**: Development Strapi instance for testing + +## Development Setup + +### Initial Setup + +```bash +# Install root dependencies +yarn install + +# Install playground dependencies (runs automatically via postinstall) +yarn playground:install +``` + +### Development Workflow + +Development requires running **two terminal sessions**: + +**Terminal 1 - Build the plugin in watch mode:** +```bash +yarn develop +``` +This runs TypeScript compilation in watch mode across all packages and uses `yalc` to link them. + +**Terminal 2 - Run the playground Strapi instance:** +```bash +yarn playground:develop +``` +This starts Strapi at http://localhost:1337 with the plugin pre-installed. + +Changes to the plugin code will rebuild automatically (Terminal 1) and hot-reload in the playground (Terminal 2). + +### Building for Production + +```bash +yarn build +``` +Builds all packages using Turborepo's caching and dependency graph. + +## Testing + +### Node version + +Always activate Node 20 before running yarn commands: + +```bash +nvm use # reads .nvmrc (Node 20) +``` + +The repo uses **Yarn 4.11.0** via `yarnPath` in `.yarnrc.yml`. Running `yarn` anywhere inside the repo automatically uses this version — even in subdirectories like `playground/`. + +### Unit Tests + +```bash +# Run all unit tests +yarn test:unit + +# Run unit tests in watch mode (add to jest command in package.json) +ENV_PATH=./playground/.env jest --watch +``` + +Unit tests are located in `__tests__` directories: +- `packages/core/server/middlewares/__tests__/` +- `packages/core/server/hooks/__tests__/` +- `packages/core/server/controllers/__tests__/` +- `packages/addons/sitemap/server/utils/__tests__/` + +Uses Jest with ts-jest preset. Test files: `*.test.ts` or `*.test.js` + +`playground/.env` is **force-committed** to git with placeholder values (`tobemodified`) so CI can boot Strapi. Do not add real secrets to it — use your local `.env` override for `WEBTOOLS_LICENSE_KEY` and similar. + +### Integration Tests + +```bash +yarn test:integration +``` +Runs healthcheck integration test against the playground instance. + +### E2E Tests + +```bash +yarn test:e2e +``` +Opens Cypress test runner. E2E tests have `.cy.ts` or `.cy.tsx` extensions. + +## Code Quality + +### Linting + +```bash +# Check all packages +yarn eslint + +# Auto-fix issues +yarn eslint:fix + +# Type checking (no emit) +yarn tscheck +``` + +Uses `@uncinc/eslint-config` with special overrides for Cypress and Jest files. + +## Architecture Overview + +### Core Plugin Structure + +The plugin follows Strapi 5's plugin architecture with two entry points: + +**Server-side** (`packages/core/server/index.ts`): +- `register()`: Registers services, controllers, routes, content types +- `bootstrap()`: Registers document middlewares and hooks +- `contentTypes`: Defines `url-alias` and `url-pattern` internal content types +- `routes`: Admin API and public Content API endpoints +- `services`: Business logic (url-alias, url-pattern, info) +- `middlewares`: Document lifecycle hooks for automatic URL generation +- `controllers`: Request handlers for API endpoints + +**Admin-side** (`packages/core/admin/index.ts`): +- `register()`: Registers the plugin with Strapi Admin +- `bootstrap()`: Injects UI into Content Manager and Content-Type Builder +- `permissions`: RBAC permission definitions + +### Key Architectural Concepts + +#### 1. URL Aliases and Patterns + +**URL Pattern** (`plugin::webtools.url-pattern`): +- Template that defines how URLs are generated for a content type +- Uses bracket syntax: `[fieldName]`, `[relation.field]`, `[pluralName]`, `[documentId]` +- Example: `/blog/[category.slug]/[title]` → `/blog/news/hello-world` +- Stored in database, managed via Admin UI + +**URL Alias** (`plugin::webtools.url-alias`): +- The actual generated URL path for an entry +- Localized (supports i18n) +- Tracks whether it was generated or manually set (`generated` field) +- Automatically created/updated by middlewares + +#### 2. Document Middleware Chain + +Three middlewares hook into the Strapi 5 document lifecycle: + +1. **generate-url-alias.ts**: Runs on create/update/clone + - Fetches URL patterns for the content type + - Resolves pattern templates using entry data + - Creates/updates URL alias records + - Respects manual URLs (`generated: false`) + +2. **prevent-duplicate-urls.ts**: Ensures URL uniqueness + - Appends numeric suffixes when conflicts exist (-1, -2, etc.) + +3. **delete-url-alias.ts**: Cleans up on entry deletion + +These run BEFORE/AFTER document operations using Strapi's document middleware API (not legacy entity service). + +#### 3. Content Type Enablement + +Content types opt into Webtools via `pluginOptions`: + +```javascript +{ + "pluginOptions": { + "webtools": { "enabled": true } + } +} +``` + +When enabled: +- A `url_alias` relation field is injected at bootstrap +- Middlewares activate for that content type +- Admin UI shows the Webtools side panel in the content editor + +#### 4. Addon System + +Addons are Strapi plugins with a special flag in their `package.json`: + +```json +{ + "strapi": { + "webtoolsAddon": true + } +} +``` + +**Discovery**: Core scans `enabledPlugins` at runtime for this flag + +**Addon detection in admin UI**: Always match on `addon.info.name` (the Strapi plugin name, e.g. `webtools-addon-redirects`), **not** on UI labels which are translatable. Strip the npm scope before comparing: `@pluginpal/webtools-addon-redirects` → `webtools-addon-redirects`. + +**Pro addons** (not open-source) are defined in `admin/constants/pro-addons.ts`. When not installed, they appear in the sidebar as locked items (`LockedAddonMenuItem`) that open a `TrialModal`. The `packageName` field in `ProAddon` is the full scoped npm name. + +**Integration**: Addons inject components via named zones: +- `webtoolsRouter`: Adds routes to main navigation +- `webtoolsSidePanel`: Adds components to content editor sidebar + +**Implementation**: Addons call: +```typescript +app.getPlugin('webtools').injectComponent(zone, type, { Component, ... }) +``` + +Example: The Sitemap addon extends enabled content types with a `sitemap_exclude` field and adds UI to manage sitemaps. + +#### 5. Services + +Key services accessible via `getPluginService()`: + +**url-alias**: +- `findByPath(path, locale?)`: Find entries by URL path +- `findRelatedEntity(path, locale?)`: Resolve URL to entity +- `makeUniquePath(uid, path, locale?, excludeId?)`: Ensure uniqueness + +**url-pattern**: +- `resolvePattern(uid, entity, locale?)`: Convert pattern to path +- `validatePattern(uid, pattern)`: Check pattern syntax +- `getAllowedFields(uid)`: List fields available in patterns +- `getFieldsFromPattern(pattern)`: Extract field references +- `getRelationsFromPattern(uid, pattern)`: Get relations to populate + +#### 6. Frontend Router + +The `/api/webtools/router` endpoint enables frontend routing: + +``` +GET /api/webtools/router?path=/blog/hello-world +``` + +Returns: +- The content entity +- Content type UID +- Applies full permission checks +- Optionally executes Strapi controllers (if `router_use_controllers: true`) + +### Admin UI Structure + +**Main Routes**: +- `/` - Overview page +- `/urls` - List/edit all URL aliases +- `/patterns` - Manage URL patterns + +**Injection Zones**: +- Addons can add navigation items (webtoolsRouter) +- Addons can add sidebar components (webtoolsSidePanel) + +**Content Manager Integration**: +- `WebtoolsPanel` appears in Content Manager's edit view for enabled types +- Shows current URL alias, edit form, and injected addon components + +## Configuration + +Plugin options in `config/plugins.js`: + +```javascript +module.exports = { + webtools: { + config: { + default_pattern: '/[pluralName]/[documentId]', + unique_per_locale: true, + router_use_controllers: false, + slugify: (text) => text.toLowerCase().replace(/\s+/g, '-'), + website_url: 'https://example.com', + }, + }, +}; +``` + +## Common Patterns + +### Adding a New Service Method + +1. Add method to service interface in `server/services/[service-name].ts` +2. Export service in `server/services/index.ts` +3. Access via `getPluginService('[service-name]')` with full type safety + +### Creating a New Middleware + +1. Add file to `server/middlewares/` +2. Export from `server/middlewares/index.ts` +3. Register in `bootstrap()` using `strapi.documents.use(middleware)` + +### Adding Admin UI Screens + +1. Create screen component in `admin/screens/[ScreenName]/` +2. Add route to `containers/App/index.tsx` +3. Add permission check if needed +4. Add navigation link in sidebar configuration + +### Creating an Addon + +See `packages/addons/sitemap` as reference: + +1. Create Strapi plugin with `strapi.webtoolsAddon: true` in package.json +2. Add `strapi-plugin-webtools` as peerDependency +3. In `admin/index.js` bootstrap, call injection APIs: + ```typescript + const webtoolsPlugin = app.getPlugin('webtools'); + webtoolsPlugin.injectComponent('webtoolsRouter', 'route', { + path: '/sitemap', + label: 'Sitemap', + Component: SitemapPage, + }); + ``` +4. Optionally extend content types in server `bootstrap()` + +## ESLint rules to watch + +- **`max-len`**: 100 character limit. Long inline comments will fail. +- **`no-confusing-arrow` + `implicit-arrow-linebreak`**: Arrow functions with ternaries must use a block body: + ```typescript + // ✗ fails linting + const fn = (x: string) => + x.includes('/') ? x.split('/')[1] : x; + + // ✓ correct + const fn = (x: string) => { + if (x.includes('/')) return x.split('/')[1]; + return x; + }; + ``` +- **`@typescript-eslint/no-unnecessary-type-assertion`**: Remove casts that TypeScript already infers. + +## Release Process + +This project uses Changesets for version management: + +```bash +# After making changes, create a changeset +npx changeset + +# Prepare release (bump versions, update CHANGELOGs) +yarn release:prepare + +# Publish to npm +yarn release:publish +``` + +## Troubleshooting + +### Playground not seeing plugin changes + +1. Ensure `yarn develop` is running (builds plugin in watch mode) +2. Check that yalc linked correctly: `cd playground && yalc check` +3. Rebuild admin: `cd playground && yarn build` +4. Clear Strapi cache: `rm -rf playground/node_modules/.strapi/` + +### TypeScript errors in IDE but builds succeed + +Run `yarn tscheck` to see actual type errors. The playground has a separate tsconfig that may cause confusion. + +### Tests fail with "Cannot find module" + +Ensure `ENV_PATH=./playground/.env` is set when running tests. The tests need access to the playground's Strapi configuration. + +## Documentation + +- Main docs: https://docs.pluginpal.io/webtools +- Contributing guide: CONTRIBUTING.md +- Strapi plugin development: https://strapi.io/documentation/developer-docs/latest/plugin-development/ From 7f082d1e536d7490064f35b2766b16d6b7e924e5 Mon Sep 17 00:00:00 2001 From: Mathijs Schouten <35879908+MSACC@users.noreply.github.com> Date: Sat, 14 Mar 2026 13:19:09 +0100 Subject: [PATCH 15/15] chore: regenerate playground types after breadcrumbs addon removal --- playground/types/generated/contentTypes.d.ts | 97 -------------------- 1 file changed, 97 deletions(-) diff --git a/playground/types/generated/contentTypes.d.ts b/playground/types/generated/contentTypes.d.ts index d822f083..e648b598 100644 --- a/playground/types/generated/contentTypes.d.ts +++ b/playground/types/generated/contentTypes.d.ts @@ -447,10 +447,6 @@ export interface ApiCategoryCategory extends Struct.CollectionTypeSchema { }; }; attributes: { - breadcrumbs: Schema.Attribute.Relation< - 'oneToOne', - 'plugin::webtools-addon-breadcrumbs.breadcrumb' - >; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; @@ -494,10 +490,6 @@ export interface ApiHomeHome extends Struct.SingleTypeSchema { }; }; attributes: { - breadcrumbs: Schema.Attribute.Relation< - 'oneToOne', - 'plugin::webtools-addon-breadcrumbs.breadcrumb' - >; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; @@ -538,10 +530,6 @@ export interface ApiPrivateCategoryPrivateCategory }; }; attributes: { - breadcrumbs: Schema.Attribute.Relation< - 'oneToOne', - 'plugin::webtools-addon-breadcrumbs.breadcrumb' - >; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; @@ -589,10 +577,6 @@ export interface ApiTestTest extends Struct.CollectionTypeSchema { }; }; attributes: { - breadcrumbs: Schema.Attribute.Relation< - 'oneToOne', - 'plugin::webtools-addon-breadcrumbs.breadcrumb' - >; category: Schema.Attribute.Relation<'oneToOne', 'api::category.category'>; createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'>; @@ -1127,85 +1111,6 @@ export interface PluginUsersPermissionsUser }; } -export interface PluginWebtoolsAddonBreadcrumbsBreadcrumb - extends Struct.CollectionTypeSchema { - collectionName: 'wt_breadcrumb'; - info: { - displayName: 'Breadcrumb'; - pluralName: 'breadcrumbs'; - singularName: 'breadcrumb'; - }; - options: { - draftAndPublish: false; - }; - pluginOptions: { - 'content-manager': { - visible: false; - }; - 'content-type-builder': { - visible: false; - }; - }; - attributes: { - createdAt: Schema.Attribute.DateTime; - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - items: Schema.Attribute.JSON & Schema.Attribute.Required; - locale: Schema.Attribute.String & Schema.Attribute.Private; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::webtools-addon-breadcrumbs.breadcrumb' - > & - Schema.Attribute.Private; - publishedAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - }; -} - -export interface PluginWebtoolsAddonRedirectsRedirect - extends Struct.CollectionTypeSchema { - collectionName: 'wt_redirect'; - info: { - displayName: 'Redirect'; - pluralName: 'redirects'; - singularName: 'redirect'; - }; - options: { - comment: ''; - draftAndPublish: false; - }; - pluginOptions: { - 'content-manager': { - visible: false; - }; - 'content-type-builder': { - visible: false; - }; - }; - attributes: { - createdAt: Schema.Attribute.DateTime; - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - from: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.Unique; - locale: Schema.Attribute.String & Schema.Attribute.Private; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::webtools-addon-redirects.redirect' - > & - Schema.Attribute.Private; - publishedAt: Schema.Attribute.DateTime; - status_code: Schema.Attribute.Integer & Schema.Attribute.Required; - to: Schema.Attribute.String & Schema.Attribute.Required; - updatedAt: Schema.Attribute.DateTime; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - }; -} - export interface PluginWebtoolsAddonSitemapSitemap extends Struct.CollectionTypeSchema { collectionName: 'wt_sitemap'; @@ -1367,8 +1272,6 @@ declare module '@strapi/strapi' { 'plugin::users-permissions.permission': PluginUsersPermissionsPermission; 'plugin::users-permissions.role': PluginUsersPermissionsRole; 'plugin::users-permissions.user': PluginUsersPermissionsUser; - 'plugin::webtools-addon-breadcrumbs.breadcrumb': PluginWebtoolsAddonBreadcrumbsBreadcrumb; - 'plugin::webtools-addon-redirects.redirect': PluginWebtoolsAddonRedirectsRedirect; 'plugin::webtools-addon-sitemap.sitemap': PluginWebtoolsAddonSitemapSitemap; 'plugin::webtools.url-alias': PluginWebtoolsUrlAlias; 'plugin::webtools.url-pattern': PluginWebtoolsUrlPattern;