@delmaredigital/payload-puck 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +73 -0
- package/README.md +1580 -0
- package/dist/AccordionClient.d.mts +24 -0
- package/dist/AccordionClient.d.ts +24 -0
- package/dist/AccordionClient.js +786 -0
- package/dist/AccordionClient.js.map +1 -0
- package/dist/AccordionClient.mjs +784 -0
- package/dist/AccordionClient.mjs.map +1 -0
- package/dist/AnimatedWrapper.d.mts +30 -0
- package/dist/AnimatedWrapper.d.ts +30 -0
- package/dist/AnimatedWrapper.js +379 -0
- package/dist/AnimatedWrapper.js.map +1 -0
- package/dist/AnimatedWrapper.mjs +377 -0
- package/dist/AnimatedWrapper.mjs.map +1 -0
- package/dist/admin/client.d.mts +108 -0
- package/dist/admin/client.d.ts +108 -0
- package/dist/admin/client.js +177 -0
- package/dist/admin/client.js.map +1 -0
- package/dist/admin/client.mjs +173 -0
- package/dist/admin/client.mjs.map +1 -0
- package/dist/admin/index.d.mts +157 -0
- package/dist/admin/index.d.ts +157 -0
- package/dist/admin/index.js +31 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +29 -0
- package/dist/admin/index.mjs.map +1 -0
- package/dist/api/index.d.mts +460 -0
- package/dist/api/index.d.ts +460 -0
- package/dist/api/index.js +588 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/index.mjs +578 -0
- package/dist/api/index.mjs.map +1 -0
- package/dist/components/index.css +339 -0
- package/dist/components/index.css.map +1 -0
- package/dist/components/index.d.mts +222 -0
- package/dist/components/index.d.ts +222 -0
- package/dist/components/index.js +9177 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +9130 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/config/config.editor.css +339 -0
- package/dist/config/config.editor.css.map +1 -0
- package/dist/config/config.editor.d.mts +153 -0
- package/dist/config/config.editor.d.ts +153 -0
- package/dist/config/config.editor.js +9400 -0
- package/dist/config/config.editor.js.map +1 -0
- package/dist/config/config.editor.mjs +9368 -0
- package/dist/config/config.editor.mjs.map +1 -0
- package/dist/config/index.d.mts +68 -0
- package/dist/config/index.d.ts +68 -0
- package/dist/config/index.js +2017 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +1991 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/editor/index.d.mts +784 -0
- package/dist/editor/index.d.ts +784 -0
- package/dist/editor/index.js +4517 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/index.mjs +4483 -0
- package/dist/editor/index.mjs.map +1 -0
- package/dist/fields/index.css +339 -0
- package/dist/fields/index.css.map +1 -0
- package/dist/fields/index.d.mts +600 -0
- package/dist/fields/index.d.ts +600 -0
- package/dist/fields/index.js +7739 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/fields/index.mjs +7590 -0
- package/dist/fields/index.mjs.map +1 -0
- package/dist/index-CQu6SzDg.d.mts +327 -0
- package/dist/index-CoUQnyC3.d.ts +327 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +569 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +555 -0
- package/dist/index.mjs.map +1 -0
- package/dist/layouts/index.d.mts +96 -0
- package/dist/layouts/index.d.ts +96 -0
- package/dist/layouts/index.js +394 -0
- package/dist/layouts/index.js.map +1 -0
- package/dist/layouts/index.mjs +378 -0
- package/dist/layouts/index.mjs.map +1 -0
- package/dist/plugin/index.d.mts +289 -0
- package/dist/plugin/index.d.ts +289 -0
- package/dist/plugin/index.js +569 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/index.mjs +555 -0
- package/dist/plugin/index.mjs.map +1 -0
- package/dist/render/index.d.mts +109 -0
- package/dist/render/index.d.ts +109 -0
- package/dist/render/index.js +2146 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/index.mjs +2123 -0
- package/dist/render/index.mjs.map +1 -0
- package/dist/shared-DMAF1AcH.d.mts +545 -0
- package/dist/shared-DMAF1AcH.d.ts +545 -0
- package/dist/theme/index.d.mts +155 -0
- package/dist/theme/index.d.ts +155 -0
- package/dist/theme/index.js +201 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/index.mjs +186 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/types-D7D3rZ1J.d.mts +116 -0
- package/dist/types-D7D3rZ1J.d.ts +116 -0
- package/dist/types-_6MvjyKv.d.mts +104 -0
- package/dist/types-_6MvjyKv.d.ts +104 -0
- package/dist/utils/index.d.mts +267 -0
- package/dist/utils/index.d.ts +267 -0
- package/dist/utils/index.js +426 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +412 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils-DaRs9t0J.d.mts +85 -0
- package/dist/utils-gAvt0Vhw.d.ts +85 -0
- package/examples/README.md +240 -0
- package/examples/api/puck/pages/[id]/route.ts +64 -0
- package/examples/api/puck/pages/[id]/versions/route.ts +47 -0
- package/examples/api/puck/pages/route.ts +45 -0
- package/examples/app/(frontend)/page.tsx +94 -0
- package/examples/app/[...slug]/page.tsx +101 -0
- package/examples/app/pages/[id]/edit/page.tsx +148 -0
- package/examples/components/CustomBanner.tsx +368 -0
- package/examples/config/custom-config.ts +223 -0
- package/examples/config/payload.config.example.ts +64 -0
- package/examples/lib/puck-layouts.ts +258 -0
- package/examples/lib/puck-theme.ts +94 -0
- package/examples/styles/puck-theme.css +171 -0
- package/package.json +157 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/createPuckApiRoutes.ts","../../src/api/utils/mapRootProps.ts","../../src/api/createPuckApiRoutesWithId.ts","../../src/api/createPuckApiRoutesVersions.ts"],"names":["NextResponse","getPayload"],"mappings":"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","file":"index.mjs","sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type { Where } from 'payload'\nimport type { Data as PuckData } from '@measured/puck'\nimport type {\n PuckApiRoutesConfig,\n PuckApiRouteHandlers,\n CreatePageBody,\n RouteHandlerContext,\n} from './types'\n\n/**\n * Default Puck data for new pages\n */\nconst DEFAULT_PUCK_DATA: PuckData = {\n root: {\n props: {\n title: '',\n } as Record<string, unknown>,\n },\n content: [],\n zones: {},\n}\n\n/**\n * Create API route handlers for /api/puck/pages\n *\n * Provides GET (list pages) and POST (create page) handlers\n * with configurable authentication and authorization.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/route.ts\n * import { createPuckApiRoutes } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, POST } = createPuckApiRoutes({\n * collection: 'pages',\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await getSession(request)\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canCreate: async (user) => {\n * return { allowed: user.role === 'admin' || user.role === 'editor' }\n * },\n * },\n * })\n * ```\n */\nexport function createPuckApiRoutes(\n routeConfig: PuckApiRoutesConfig\n): PuckApiRouteHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n defaultPuckData = DEFAULT_PUCK_DATA,\n enableDrafts = true,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages\n * List all pages with optional filtering\n *\n * Query Parameters:\n * - page: Page number (default: 1)\n * - limit: Items per page (default: 10)\n * - search: Search in title field\n * - status: Filter by _status ('draft', 'published', 'all')\n * - editorVersion: Filter by editorVersion field\n * - sort: Sort field (default: '-updatedAt')\n */\n async function GET(request: NextRequest, _context: RouteHandlerContext): Promise<Response> {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check list permission\n if (auth.canList) {\n const permission = await auth.canList(authResult.user)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse query parameters\n const { searchParams } = new URL(request.url)\n const page = parseInt(searchParams.get('page') || '1', 10)\n const limit = Math.min(parseInt(searchParams.get('limit') || '10', 10), 100)\n const search = searchParams.get('search') || ''\n const status = searchParams.get('status')\n const editorVersion = searchParams.get('editorVersion')\n const sort = searchParams.get('sort') || '-updatedAt'\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Build where clause\n const conditions: Where[] = []\n\n if (search) {\n conditions.push({ title: { contains: search } })\n }\n\n if (status && status !== 'all') {\n conditions.push({ _status: { equals: status } })\n }\n\n if (editorVersion && editorVersion !== 'all') {\n conditions.push({ editorVersion: { equals: editorVersion } })\n }\n\n const where: Where | undefined =\n conditions.length > 0\n ? conditions.length === 1\n ? conditions[0]\n : { and: conditions }\n : undefined\n\n const result = await payload.find({\n collection,\n page,\n limit,\n sort,\n where,\n })\n\n return NextResponse.json(result)\n } catch (error) {\n if (onError) {\n onError(error, { operation: 'list', request })\n }\n console.error('Error listing pages:', error)\n return NextResponse.json(\n { error: 'Failed to list pages' },\n { status: 500 }\n )\n }\n }\n\n /**\n * POST /api/puck/pages\n * Create a new page with Puck data\n *\n * Request Body:\n * - title: string (required)\n * - slug: string (required)\n * - puckData?: PuckData (optional, uses default if not provided)\n * - status?: 'draft' | 'published' (default: 'draft')\n */\n async function POST(request: NextRequest, _context: RouteHandlerContext): Promise<Response> {\n try {\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check create permission\n if (auth.canCreate) {\n const permission = await auth.canCreate(authResult.user)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse request body\n const body = (await request.json()) as CreatePageBody\n const { title, slug, puckData, status = 'draft' } = body\n\n // Validate required fields\n if (!title || !slug) {\n return NextResponse.json(\n { error: 'Title and slug are required' },\n { status: 400 }\n )\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Check if slug already exists\n const existing = await payload.find({\n collection,\n where: { slug: { equals: slug } },\n limit: 1,\n })\n\n if (existing.docs.length > 0) {\n return NextResponse.json(\n { error: 'A page with this slug already exists' },\n { status: 409 }\n )\n }\n\n // Prepare initial Puck data with title in root.props\n const initialPuckData = puckData || {\n ...defaultPuckData,\n root: {\n ...defaultPuckData.root,\n props: {\n ...(defaultPuckData.root as { props?: Record<string, unknown> })?.props,\n title,\n },\n },\n }\n\n // Create the page\n const newPage = await payload.create({\n collection,\n draft: enableDrafts,\n data: {\n title,\n slug,\n editorVersion: 'puck',\n puckData: initialPuckData,\n _status: status,\n },\n })\n\n return NextResponse.json({ doc: newPage }, { status: 201 })\n } catch (error) {\n if (onError) {\n onError(error, { operation: 'create', request })\n }\n console.error('Error creating page:', error)\n return NextResponse.json(\n { error: 'Failed to create page' },\n { status: 500 }\n )\n }\n }\n\n return { GET, POST }\n}\n","import type { RootPropsMapping } from '../types'\n\n/**\n * Default mappings from Puck root.props to Payload fields\n *\n * These mappings sync common page properties from Puck's visual editor\n * to the corresponding Payload collection fields.\n *\n * SEO fields use the official @payloadcms/plugin-seo convention: meta.title, meta.description\n */\nexport const DEFAULT_ROOT_PROPS_MAPPINGS: RootPropsMapping[] = [\n // Core page fields\n { from: 'title', to: 'title' },\n { from: 'slug', to: 'slug' },\n { from: 'pageLayout', to: 'pageLayout' },\n { from: 'pageType', to: 'pageType' },\n { from: 'isHomepage', to: 'isHomepage' },\n\n // SEO/Meta fields (uses official @payloadcms/plugin-seo convention)\n { from: 'metaTitle', to: 'meta.title' },\n { from: 'metaDescription', to: 'meta.description' },\n { from: 'noindex', to: 'meta.noindex' },\n { from: 'nofollow', to: 'meta.nofollow' },\n { from: 'excludeFromSitemap', to: 'meta.excludeFromSitemap' },\n\n // Conversion tracking fields\n { from: 'isConversionPage', to: 'conversionTracking.isConversionPage' },\n { from: 'conversionType', to: 'conversionTracking.conversionType' },\n { from: 'conversionValue', to: 'conversionTracking.conversionValue' },\n]\n\n/**\n * Set a nested value in an object using dot notation path\n *\n * @example\n * ```typescript\n * const obj = {}\n * setNestedValue(obj, 'meta.title', 'My Title')\n * // Result: { meta: { title: 'My Title' } }\n * ```\n */\nexport function setNestedValue(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): void {\n const keys = path.split('.')\n let current = obj\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {}\n }\n current = current[key] as Record<string, unknown>\n }\n\n const finalKey = keys[keys.length - 1]\n current[finalKey] = value\n}\n\n/**\n * Get a nested value from an object using dot notation path\n *\n * @example\n * ```typescript\n * const obj = { meta: { title: 'My Title' } }\n * getNestedValue(obj, 'meta.title') // 'My Title'\n * ```\n */\nexport function getNestedValue(\n obj: Record<string, unknown>,\n path: string\n): unknown {\n const keys = path.split('.')\n let current: unknown = obj\n\n for (const key of keys) {\n if (current === null || current === undefined) {\n return undefined\n }\n if (typeof current !== 'object') {\n return undefined\n }\n current = (current as Record<string, unknown>)[key]\n }\n\n return current\n}\n\n/**\n * Merge mappings, with custom mappings taking precedence over defaults\n *\n * @param customMappings - Custom mappings to merge with defaults\n * @returns Merged array of mappings with duplicates resolved (custom wins)\n */\nexport function mergeMappings(\n customMappings?: RootPropsMapping[]\n): RootPropsMapping[] {\n if (!customMappings || customMappings.length === 0) {\n return DEFAULT_ROOT_PROPS_MAPPINGS\n }\n\n // Create a map to track unique mappings by 'from' field\n const mappingMap = new Map<string, RootPropsMapping>()\n\n // Add defaults first\n for (const mapping of DEFAULT_ROOT_PROPS_MAPPINGS) {\n mappingMap.set(mapping.from, mapping)\n }\n\n // Custom mappings override defaults\n for (const mapping of customMappings) {\n mappingMap.set(mapping.from, mapping)\n }\n\n return Array.from(mappingMap.values())\n}\n\n/**\n * Map Puck root.props to Payload field update data\n *\n * Takes the root.props from Puck data and maps them to the appropriate\n * Payload fields based on the provided mappings.\n *\n * @param rootProps - The root.props object from Puck data\n * @param customMappings - Optional custom mappings to merge with defaults\n * @returns Object ready to be spread into Payload update data\n *\n * @example\n * ```typescript\n * const rootProps = {\n * title: 'My Page',\n * metaTitle: 'My Page | Site Name',\n * metaDescription: 'Description here',\n * }\n *\n * const updateData = mapRootPropsToPayloadFields(rootProps)\n * // Result: {\n * // title: 'My Page',\n * // meta: {\n * // title: 'My Page | Site Name',\n * // description: 'Description here',\n * // },\n * // }\n * ```\n */\nexport function mapRootPropsToPayloadFields(\n rootProps: Record<string, unknown>,\n customMappings?: RootPropsMapping[]\n): Record<string, unknown> {\n const mappings = mergeMappings(customMappings)\n const result: Record<string, unknown> = {}\n\n for (const mapping of mappings) {\n const value = rootProps[mapping.from]\n\n // Skip undefined values to avoid overwriting existing data\n if (value === undefined) {\n continue\n }\n\n // Apply transformation if provided\n const transformedValue = mapping.transform ? mapping.transform(value) : value\n\n // Set the value at the target path\n setNestedValue(result, mapping.to, transformedValue)\n }\n\n return result\n}\n\n/**\n * Deep merge objects, with source values overwriting target values\n *\n * @param target - The target object to merge into\n * @param source - The source object to merge from\n * @returns The merged object (target is modified in place)\n */\nexport function deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n): Record<string, unknown> {\n for (const key of Object.keys(source)) {\n const sourceValue = source[key]\n const targetValue = target[key]\n\n if (\n sourceValue !== null &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue !== null &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge nested objects\n target[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n )\n } else {\n // Direct assignment for non-object values or arrays\n target[key] = sourceValue\n }\n }\n\n return target\n}\n","import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type {\n PuckApiRoutesConfig,\n PuckApiRouteWithIdHandlers,\n UpdatePageBody,\n RouteHandlerWithIdContext,\n} from './types'\nimport { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps'\n\n/**\n * Create API route handlers for /api/puck/pages/[id]\n *\n * Provides GET (fetch page), PATCH (update page), and DELETE (delete page)\n * handlers with configurable authentication and authorization.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/route.ts\n * import { createPuckApiRoutesWithId } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, PATCH, DELETE } = createPuckApiRoutesWithId({\n * collection: 'pages',\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await getSession(request)\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canPublish: async (user) => {\n * return { allowed: user.role === 'admin' }\n * },\n * },\n * rootPropsMapping: [\n * { from: 'customField', to: 'customPayloadField' },\n * ],\n * })\n * ```\n */\nexport function createPuckApiRoutesWithId(\n routeConfig: PuckApiRoutesConfig\n): PuckApiRouteWithIdHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n rootPropsMapping,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages/[id]\n * Fetch a single page by ID\n */\n async function GET(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check view permission\n if (auth.canView) {\n const permission = await auth.canView(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Check if caller wants draft or published version\n // Default to draft=true for editor use (load latest draft)\n const url = new URL(request.url)\n const wantsDraft = url.searchParams.get('draft') !== 'false'\n\n const page = await payload.findByID({\n collection,\n id,\n draft: wantsDraft, // Load draft version by default for editing\n })\n\n if (!page) {\n return NextResponse.json({ error: 'Page not found' }, { status: 404 })\n }\n\n return NextResponse.json({ doc: page })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'read', request, pageId: params.id })\n }\n console.error('Error fetching page:', error)\n return NextResponse.json(\n { error: 'Failed to fetch page' },\n { status: 500 }\n )\n }\n }\n\n /**\n * PATCH /api/puck/pages/[id]\n * Update a page with Puck data\n *\n * Request Body:\n * - puckData?: PuckData - Full Puck editor data\n * - title?: string - Override title (also synced from root.props)\n * - slug?: string - Override slug (also synced from root.props)\n * - status?: 'draft' | 'published' - Publishing status\n *\n * Root props from puckData are automatically synced to Payload fields\n * based on the configured mappings.\n */\n async function PATCH(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check edit permission\n if (auth.canEdit) {\n const permission = await auth.canEdit(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse request body\n const body = (await request.json()) as UpdatePageBody\n const { puckData, title, slug, status, draft } = body\n\n // Check publish permission only if explicitly publishing\n if (status === 'published') {\n const canPublish = auth.canPublish || auth.canEdit\n if (canPublish) {\n const permission = await canPublish(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Not authorized to publish pages' },\n { status: 403 }\n )\n }\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Extract root props from puckData for syncing to Payload fields\n const rootProps =\n (puckData?.root as { props?: Record<string, unknown> })?.props || {}\n\n // Build update data starting with editorVersion\n const updateData: Record<string, unknown> = {\n editorVersion: 'puck',\n }\n\n // Add puckData if provided\n if (puckData) {\n updateData.puckData = puckData\n }\n\n // Map root.props to Payload fields\n const mappedFields = mapRootPropsToPayloadFields(rootProps, rootPropsMapping)\n\n // Merge mapped fields into update data (deep merge for nested objects)\n deepMerge(updateData, mappedFields)\n\n // Explicit title/slug override the mapped values\n if (title !== undefined) {\n updateData.title = title\n }\n if (slug !== undefined) {\n updateData.slug = slug\n }\n\n // Set status if provided (for explicit publish)\n if (status) {\n updateData._status = status\n }\n\n // Call payload.update with draft parameter for Payload's versions.drafts system\n // When draft=true, saves without publishing\n // When draft=false or status='published', publishes the document\n const updatedPage = await payload.update({\n collection,\n id,\n data: updateData,\n draft: draft === true,\n })\n\n return NextResponse.json({ doc: updatedPage })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'update', request, pageId: params.id })\n }\n console.error('Error updating page:', error)\n\n // Handle Payload validation errors gracefully\n if (error instanceof Error && error.name === 'ValidationError') {\n const validationError = error as Error & {\n data?: { errors?: Array<{ field: string; message: string }> }\n }\n const fieldErrors = validationError.data?.errors || []\n\n // Check for common validation issues and provide friendly messages\n const slugError = fieldErrors.find((e) => e.field === 'slug')\n if (slugError) {\n return NextResponse.json(\n {\n error: 'A page with this slug already exists. Please choose a different slug.',\n field: 'slug',\n details: fieldErrors,\n },\n { status: 400 }\n )\n }\n\n // Generic validation error\n return NextResponse.json(\n {\n error: `Validation failed: ${fieldErrors.map((e) => e.message || e.field).join(', ')}`,\n details: fieldErrors,\n },\n { status: 400 }\n )\n }\n\n return NextResponse.json(\n { error: 'Failed to update page' },\n { status: 500 }\n )\n }\n }\n\n /**\n * DELETE /api/puck/pages/[id]\n * Delete a page by ID\n */\n async function DELETE(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check delete permission\n if (auth.canDelete) {\n const permission = await auth.canDelete(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n await payload.delete({\n collection,\n id,\n })\n\n return NextResponse.json({ success: true })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'delete', request, pageId: params.id })\n }\n console.error('Error deleting page:', error)\n return NextResponse.json(\n { error: 'Failed to delete page' },\n { status: 500 }\n )\n }\n }\n\n return { GET, PATCH, DELETE }\n}\n","import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type {\n PuckApiRoutesConfig,\n PuckApiVersionsRouteHandlers,\n RouteHandlerWithIdContext,\n} from './types'\n\n/**\n * Create API route handlers for /api/puck/pages/[id]/versions\n *\n * Provides GET (list versions) and POST (restore version) handlers\n * for managing page version history.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/versions/route.ts\n * import { createPuckApiRoutesVersions } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, POST } = createPuckApiRoutesVersions({\n * collection: 'pages',\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await getSession(request)\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * },\n * })\n * ```\n */\nexport function createPuckApiRoutesVersions(\n routeConfig: PuckApiRoutesConfig\n): PuckApiVersionsRouteHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages/[id]/versions\n * Fetch version history for a page\n */\n async function GET(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check view permission\n if (auth.canView) {\n const permission = await auth.canView(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Parse query params for pagination\n const url = new URL(request.url)\n const limit = parseInt(url.searchParams.get('limit') || '20', 10)\n const page = parseInt(url.searchParams.get('page') || '1', 10)\n\n // Fetch versions for this page\n const versions = await payload.findVersions({\n collection,\n where: {\n parent: { equals: id },\n },\n sort: '-updatedAt',\n limit,\n page,\n })\n\n return NextResponse.json({\n docs: versions.docs,\n totalDocs: versions.totalDocs,\n totalPages: versions.totalPages,\n page: versions.page,\n limit: versions.limit,\n hasPrevPage: versions.hasPrevPage,\n hasNextPage: versions.hasNextPage,\n })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'listVersions', request, pageId: params.id })\n }\n console.error('Error fetching versions:', error)\n return NextResponse.json(\n { error: 'Failed to fetch versions' },\n { status: 500 }\n )\n }\n }\n\n /**\n * POST /api/puck/pages/[id]/versions\n * Restore a specific version\n *\n * Request Body:\n * - versionId: string - The version ID to restore\n */\n async function POST(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check edit permission\n if (auth.canEdit) {\n const permission = await auth.canEdit(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse request body\n const body = await request.json()\n const { versionId } = body as { versionId: string }\n\n if (!versionId) {\n return NextResponse.json(\n { error: 'Version ID is required' },\n { status: 400 }\n )\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Restore the version\n const restoredDoc = await payload.restoreVersion({\n collection,\n id: versionId,\n })\n\n return NextResponse.json({ doc: restoredDoc })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'restoreVersion', request, pageId: params.id })\n }\n console.error('Error restoring version:', error)\n return NextResponse.json(\n { error: 'Failed to restore version' },\n { status: 500 }\n )\n }\n }\n\n return { GET, POST }\n}\n"]}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/* src/fields/tiptap-styles.css */
|
|
2
|
+
.tiptap-editor {
|
|
3
|
+
min-height: 200px;
|
|
4
|
+
outline: none;
|
|
5
|
+
}
|
|
6
|
+
.tiptap-editor:focus {
|
|
7
|
+
outline: none;
|
|
8
|
+
}
|
|
9
|
+
.tiptap-editor p {
|
|
10
|
+
margin: 0 0 1em 0;
|
|
11
|
+
}
|
|
12
|
+
.tiptap-editor p:last-child {
|
|
13
|
+
margin-bottom: 0;
|
|
14
|
+
}
|
|
15
|
+
.tiptap-editor h1 {
|
|
16
|
+
font-size: 2em !important;
|
|
17
|
+
font-weight: 700 !important;
|
|
18
|
+
margin: 1em 0 0.5em 0;
|
|
19
|
+
}
|
|
20
|
+
.tiptap-editor h1:first-child {
|
|
21
|
+
margin-top: 0;
|
|
22
|
+
}
|
|
23
|
+
.tiptap-editor h2 {
|
|
24
|
+
font-size: 1.5em !important;
|
|
25
|
+
font-weight: 700 !important;
|
|
26
|
+
margin: 1em 0 0.5em 0;
|
|
27
|
+
}
|
|
28
|
+
.tiptap-editor h2:first-child {
|
|
29
|
+
margin-top: 0;
|
|
30
|
+
}
|
|
31
|
+
.tiptap-editor h3 {
|
|
32
|
+
font-size: 1.25em !important;
|
|
33
|
+
font-weight: 600 !important;
|
|
34
|
+
margin: 1em 0 0.5em 0;
|
|
35
|
+
}
|
|
36
|
+
.tiptap-editor h3:first-child {
|
|
37
|
+
margin-top: 0;
|
|
38
|
+
}
|
|
39
|
+
.tiptap-editor h4 {
|
|
40
|
+
font-size: 1.1em !important;
|
|
41
|
+
font-weight: 600 !important;
|
|
42
|
+
margin: 1em 0 0.5em 0;
|
|
43
|
+
}
|
|
44
|
+
.tiptap-editor h4:first-child {
|
|
45
|
+
margin-top: 0;
|
|
46
|
+
}
|
|
47
|
+
.tiptap-editor h5 {
|
|
48
|
+
font-size: 1em !important;
|
|
49
|
+
font-weight: 600 !important;
|
|
50
|
+
margin: 1em 0 0.5em 0;
|
|
51
|
+
}
|
|
52
|
+
.tiptap-editor h5:first-child {
|
|
53
|
+
margin-top: 0;
|
|
54
|
+
}
|
|
55
|
+
.tiptap-editor h6 {
|
|
56
|
+
font-size: 0.9em !important;
|
|
57
|
+
font-weight: 600 !important;
|
|
58
|
+
margin: 1em 0 0.5em 0;
|
|
59
|
+
color: hsl(var(--muted-foreground, 220 9% 46%));
|
|
60
|
+
}
|
|
61
|
+
.tiptap-editor h6:first-child {
|
|
62
|
+
margin-top: 0;
|
|
63
|
+
}
|
|
64
|
+
.tiptap-editor ul,
|
|
65
|
+
.tiptap-editor ol {
|
|
66
|
+
padding-left: 1.5em !important;
|
|
67
|
+
margin: 0 0 1em 0;
|
|
68
|
+
}
|
|
69
|
+
.tiptap-editor ul:last-child,
|
|
70
|
+
.tiptap-editor ol:last-child {
|
|
71
|
+
margin-bottom: 0;
|
|
72
|
+
}
|
|
73
|
+
.tiptap-editor ul {
|
|
74
|
+
list-style-type: disc !important;
|
|
75
|
+
}
|
|
76
|
+
.tiptap-editor ol {
|
|
77
|
+
list-style-type: decimal !important;
|
|
78
|
+
}
|
|
79
|
+
.tiptap-editor li {
|
|
80
|
+
margin: 0.25em 0;
|
|
81
|
+
}
|
|
82
|
+
.tiptap-editor li p {
|
|
83
|
+
margin: 0;
|
|
84
|
+
}
|
|
85
|
+
.tiptap-editor blockquote {
|
|
86
|
+
border-left: 4px solid hsl(var(--border, 220 13% 91%)) !important;
|
|
87
|
+
padding-left: 1em !important;
|
|
88
|
+
margin: 1em 0 !important;
|
|
89
|
+
font-style: italic !important;
|
|
90
|
+
color: hsl(var(--muted-foreground, 220 9% 46%));
|
|
91
|
+
}
|
|
92
|
+
.tiptap-editor a {
|
|
93
|
+
color: hsl(var(--primary, 221 83% 53%));
|
|
94
|
+
text-decoration: underline;
|
|
95
|
+
cursor: pointer;
|
|
96
|
+
}
|
|
97
|
+
.tiptap-editor a:hover {
|
|
98
|
+
color: hsl(var(--primary, 221 83% 53%) / 0.8);
|
|
99
|
+
}
|
|
100
|
+
.tiptap-editor code {
|
|
101
|
+
background-color: hsl(var(--muted, 220 14% 96%));
|
|
102
|
+
padding: 0.125em 0.25em;
|
|
103
|
+
border-radius: 0.25em;
|
|
104
|
+
font-family: monospace;
|
|
105
|
+
font-size: 0.9em;
|
|
106
|
+
}
|
|
107
|
+
.tiptap-editor p.is-editor-empty:first-child::before {
|
|
108
|
+
content: attr(data-placeholder);
|
|
109
|
+
float: left;
|
|
110
|
+
color: hsl(var(--muted-foreground, 220 9% 46%));
|
|
111
|
+
pointer-events: none;
|
|
112
|
+
height: 0;
|
|
113
|
+
}
|
|
114
|
+
.ProseMirror:focus {
|
|
115
|
+
outline: none;
|
|
116
|
+
}
|
|
117
|
+
.tiptap-editor ::selection {
|
|
118
|
+
background-color: #b4d5fe;
|
|
119
|
+
}
|
|
120
|
+
.tiptap-editor [style*="text-align: center"] {
|
|
121
|
+
text-align: center;
|
|
122
|
+
}
|
|
123
|
+
.tiptap-editor [style*="text-align: right"] {
|
|
124
|
+
text-align: right;
|
|
125
|
+
}
|
|
126
|
+
.tiptap-editor [style*="text-align: left"] {
|
|
127
|
+
text-align: left;
|
|
128
|
+
}
|
|
129
|
+
.tiptap-editor u {
|
|
130
|
+
text-decoration: underline;
|
|
131
|
+
}
|
|
132
|
+
.tiptap-editor s {
|
|
133
|
+
text-decoration: line-through;
|
|
134
|
+
}
|
|
135
|
+
.tiptap-editor mark {
|
|
136
|
+
background-color: #fef08a;
|
|
137
|
+
padding: 0.125rem 0.25rem;
|
|
138
|
+
border-radius: 0.125rem;
|
|
139
|
+
}
|
|
140
|
+
.tiptap-editor sup {
|
|
141
|
+
vertical-align: super;
|
|
142
|
+
font-size: 0.75em;
|
|
143
|
+
}
|
|
144
|
+
.tiptap-editor sub {
|
|
145
|
+
vertical-align: sub;
|
|
146
|
+
font-size: 0.75em;
|
|
147
|
+
}
|
|
148
|
+
.tiptap-editor hr {
|
|
149
|
+
border: none;
|
|
150
|
+
border-top: 2px solid hsl(var(--border, 220 13% 91%));
|
|
151
|
+
margin: 1.5em 0;
|
|
152
|
+
}
|
|
153
|
+
.tiptap-editor [style*="text-align: justify"] {
|
|
154
|
+
text-align: justify;
|
|
155
|
+
}
|
|
156
|
+
.richtext-inline-editor {
|
|
157
|
+
position: relative;
|
|
158
|
+
}
|
|
159
|
+
.richtext-inline-editor .tiptap-editor {
|
|
160
|
+
cursor: text;
|
|
161
|
+
}
|
|
162
|
+
.richtext-inline-editor:focus-within {
|
|
163
|
+
outline: none;
|
|
164
|
+
}
|
|
165
|
+
.richtext-inline-editor .ProseMirror {
|
|
166
|
+
min-height: 40px;
|
|
167
|
+
outline: none;
|
|
168
|
+
}
|
|
169
|
+
.richtext-inline-editor .ProseMirror p.is-editor-empty:first-child::before {
|
|
170
|
+
content: "Click to start editing...";
|
|
171
|
+
color: hsl(var(--muted-foreground, 220 9% 46%));
|
|
172
|
+
pointer-events: none;
|
|
173
|
+
float: left;
|
|
174
|
+
height: 0;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* src/fields/richtext-output.css */
|
|
178
|
+
.richtext-output {
|
|
179
|
+
font-size: 1.125rem;
|
|
180
|
+
line-height: 1.75;
|
|
181
|
+
color: inherit;
|
|
182
|
+
}
|
|
183
|
+
.richtext-output h1 {
|
|
184
|
+
margin-top: 2rem;
|
|
185
|
+
margin-bottom: 1rem;
|
|
186
|
+
font-weight: 700;
|
|
187
|
+
font-size: 2.25rem;
|
|
188
|
+
line-height: 1.2;
|
|
189
|
+
}
|
|
190
|
+
.richtext-output h1:first-child {
|
|
191
|
+
margin-top: 0;
|
|
192
|
+
}
|
|
193
|
+
.richtext-output h2 {
|
|
194
|
+
margin-top: 2rem;
|
|
195
|
+
margin-bottom: 1rem;
|
|
196
|
+
font-weight: 700;
|
|
197
|
+
font-size: 1.875rem;
|
|
198
|
+
line-height: 1.25;
|
|
199
|
+
}
|
|
200
|
+
.richtext-output h2:first-child {
|
|
201
|
+
margin-top: 0;
|
|
202
|
+
}
|
|
203
|
+
.richtext-output h3 {
|
|
204
|
+
margin-top: 2rem;
|
|
205
|
+
margin-bottom: 1rem;
|
|
206
|
+
font-weight: 700;
|
|
207
|
+
font-size: 1.5rem;
|
|
208
|
+
line-height: 1.3;
|
|
209
|
+
}
|
|
210
|
+
.richtext-output h3:first-child {
|
|
211
|
+
margin-top: 0;
|
|
212
|
+
}
|
|
213
|
+
.richtext-output h4 {
|
|
214
|
+
margin-top: 2rem;
|
|
215
|
+
margin-bottom: 1rem;
|
|
216
|
+
font-weight: 700;
|
|
217
|
+
font-size: 1.25rem;
|
|
218
|
+
line-height: 1.35;
|
|
219
|
+
}
|
|
220
|
+
.richtext-output h4:first-child {
|
|
221
|
+
margin-top: 0;
|
|
222
|
+
}
|
|
223
|
+
.richtext-output h5,
|
|
224
|
+
.richtext-output h6 {
|
|
225
|
+
margin-top: 2rem;
|
|
226
|
+
margin-bottom: 1rem;
|
|
227
|
+
font-weight: 700;
|
|
228
|
+
}
|
|
229
|
+
.richtext-output h5:first-child,
|
|
230
|
+
.richtext-output h6:first-child {
|
|
231
|
+
margin-top: 0;
|
|
232
|
+
}
|
|
233
|
+
.richtext-output p {
|
|
234
|
+
margin-bottom: 1.25rem;
|
|
235
|
+
}
|
|
236
|
+
.richtext-output p:last-child {
|
|
237
|
+
margin-bottom: 0;
|
|
238
|
+
}
|
|
239
|
+
.richtext-output ul {
|
|
240
|
+
margin-bottom: 1.25rem;
|
|
241
|
+
padding-left: 2rem;
|
|
242
|
+
list-style-type: disc !important;
|
|
243
|
+
}
|
|
244
|
+
.richtext-output ol {
|
|
245
|
+
margin-bottom: 1.25rem;
|
|
246
|
+
padding-left: 2rem;
|
|
247
|
+
list-style-type: decimal !important;
|
|
248
|
+
}
|
|
249
|
+
.richtext-output li {
|
|
250
|
+
margin-bottom: 0.5rem;
|
|
251
|
+
}
|
|
252
|
+
.richtext-output li::marker {
|
|
253
|
+
color: currentColor;
|
|
254
|
+
}
|
|
255
|
+
.richtext-output ul ul,
|
|
256
|
+
.richtext-output ol ul {
|
|
257
|
+
list-style-type: circle !important;
|
|
258
|
+
margin-top: 0.5rem;
|
|
259
|
+
margin-bottom: 0;
|
|
260
|
+
}
|
|
261
|
+
.richtext-output ul ul ul,
|
|
262
|
+
.richtext-output ol ul ul {
|
|
263
|
+
list-style-type: square !important;
|
|
264
|
+
}
|
|
265
|
+
.richtext-output ol ol,
|
|
266
|
+
.richtext-output ul ol {
|
|
267
|
+
list-style-type: lower-alpha !important;
|
|
268
|
+
margin-top: 0.5rem;
|
|
269
|
+
margin-bottom: 0;
|
|
270
|
+
}
|
|
271
|
+
.richtext-output blockquote {
|
|
272
|
+
margin: 1.5rem 0;
|
|
273
|
+
padding-left: 1.5rem;
|
|
274
|
+
border-left: 4px solid hsl(var(--border, 220 13% 91%));
|
|
275
|
+
font-style: italic;
|
|
276
|
+
}
|
|
277
|
+
.richtext-output a {
|
|
278
|
+
color: hsl(var(--primary, 221 83% 53%));
|
|
279
|
+
text-decoration: underline;
|
|
280
|
+
}
|
|
281
|
+
.richtext-output a:hover {
|
|
282
|
+
opacity: 0.8;
|
|
283
|
+
}
|
|
284
|
+
.richtext-output code {
|
|
285
|
+
background-color: hsl(var(--muted, 220 14% 96%));
|
|
286
|
+
padding: 0.125rem 0.25rem;
|
|
287
|
+
border-radius: 0.25rem;
|
|
288
|
+
font-size: 0.875rem;
|
|
289
|
+
}
|
|
290
|
+
.richtext-output mark {
|
|
291
|
+
background-color: #fef08a;
|
|
292
|
+
padding: 0.125rem 0.25rem;
|
|
293
|
+
border-radius: 0.125rem;
|
|
294
|
+
}
|
|
295
|
+
.richtext-output s,
|
|
296
|
+
.richtext-output strike {
|
|
297
|
+
text-decoration: line-through;
|
|
298
|
+
}
|
|
299
|
+
.richtext-output .text-left {
|
|
300
|
+
text-align: left;
|
|
301
|
+
}
|
|
302
|
+
.richtext-output .text-center {
|
|
303
|
+
text-align: center;
|
|
304
|
+
}
|
|
305
|
+
.richtext-output .text-right {
|
|
306
|
+
text-align: right;
|
|
307
|
+
}
|
|
308
|
+
.richtext-output .text-justify,
|
|
309
|
+
.richtext-output [style*="text-align: justify"] {
|
|
310
|
+
text-align: justify;
|
|
311
|
+
}
|
|
312
|
+
.richtext-output sup {
|
|
313
|
+
vertical-align: super;
|
|
314
|
+
font-size: 0.75em;
|
|
315
|
+
}
|
|
316
|
+
.richtext-output sub {
|
|
317
|
+
vertical-align: sub;
|
|
318
|
+
font-size: 0.75em;
|
|
319
|
+
}
|
|
320
|
+
.richtext-output hr {
|
|
321
|
+
border: none;
|
|
322
|
+
border-top: 2px solid hsl(var(--border, 220 13% 91%));
|
|
323
|
+
margin: 2rem 0;
|
|
324
|
+
}
|
|
325
|
+
@media (max-width: 768px) {
|
|
326
|
+
.richtext-output {
|
|
327
|
+
font-size: 1rem;
|
|
328
|
+
}
|
|
329
|
+
.richtext-output h1 {
|
|
330
|
+
font-size: 1.875rem;
|
|
331
|
+
}
|
|
332
|
+
.richtext-output h2 {
|
|
333
|
+
font-size: 1.5rem;
|
|
334
|
+
}
|
|
335
|
+
.richtext-output h3 {
|
|
336
|
+
font-size: 1.25rem;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/fields/tiptap-styles.css","../../src/fields/richtext-output.css"],"sourcesContent":["/* TipTap Editor Styles for Puck\n * Applied to the TipTap editor instance in the Puck sidebar.\n */\n\n/* Basic editor styles */\n.tiptap-editor {\n min-height: 200px;\n outline: none;\n}\n\n.tiptap-editor:focus {\n outline: none;\n}\n\n/* Paragraph styles */\n.tiptap-editor p {\n margin: 0 0 1em 0;\n}\n\n.tiptap-editor p:last-child {\n margin-bottom: 0;\n}\n\n/* Heading styles - use !important to override Tailwind preflight */\n.tiptap-editor h1 {\n font-size: 2em !important;\n font-weight: 700 !important;\n margin: 1em 0 0.5em 0;\n}\n\n.tiptap-editor h1:first-child {\n margin-top: 0;\n}\n\n.tiptap-editor h2 {\n font-size: 1.5em !important;\n font-weight: 700 !important;\n margin: 1em 0 0.5em 0;\n}\n\n.tiptap-editor h2:first-child {\n margin-top: 0;\n}\n\n.tiptap-editor h3 {\n font-size: 1.25em !important;\n font-weight: 600 !important;\n margin: 1em 0 0.5em 0;\n}\n\n.tiptap-editor h3:first-child {\n margin-top: 0;\n}\n\n.tiptap-editor h4 {\n font-size: 1.1em !important;\n font-weight: 600 !important;\n margin: 1em 0 0.5em 0;\n}\n\n.tiptap-editor h4:first-child {\n margin-top: 0;\n}\n\n.tiptap-editor h5 {\n font-size: 1em !important;\n font-weight: 600 !important;\n margin: 1em 0 0.5em 0;\n}\n\n.tiptap-editor h5:first-child {\n margin-top: 0;\n}\n\n.tiptap-editor h6 {\n font-size: 0.9em !important;\n font-weight: 600 !important;\n margin: 1em 0 0.5em 0;\n color: hsl(var(--muted-foreground, 220 9% 46%));\n}\n\n.tiptap-editor h6:first-child {\n margin-top: 0;\n}\n\n/* List styles - use !important to override Tailwind preflight */\n.tiptap-editor ul,\n.tiptap-editor ol {\n padding-left: 1.5em !important;\n margin: 0 0 1em 0;\n}\n\n.tiptap-editor ul:last-child,\n.tiptap-editor ol:last-child {\n margin-bottom: 0;\n}\n\n.tiptap-editor ul {\n list-style-type: disc !important;\n}\n\n.tiptap-editor ol {\n list-style-type: decimal !important;\n}\n\n.tiptap-editor li {\n margin: 0.25em 0;\n}\n\n.tiptap-editor li p {\n margin: 0;\n}\n\n/* Blockquote styles - use !important to override Tailwind preflight */\n.tiptap-editor blockquote {\n border-left: 4px solid hsl(var(--border, 220 13% 91%)) !important;\n padding-left: 1em !important;\n margin: 1em 0 !important;\n font-style: italic !important;\n color: hsl(var(--muted-foreground, 220 9% 46%));\n}\n\n/* Link styles - using primary color with fallback */\n.tiptap-editor a {\n color: hsl(var(--primary, 221 83% 53%));\n text-decoration: underline;\n cursor: pointer;\n}\n\n.tiptap-editor a:hover {\n color: hsl(var(--primary, 221 83% 53%) / 0.8);\n}\n\n/* Code styles - using muted background with fallback */\n.tiptap-editor code {\n background-color: hsl(var(--muted, 220 14% 96%));\n padding: 0.125em 0.25em;\n border-radius: 0.25em;\n font-family: monospace;\n font-size: 0.9em;\n}\n\n/* Placeholder */\n.tiptap-editor p.is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n float: left;\n color: hsl(var(--muted-foreground, 220 9% 46%));\n pointer-events: none;\n height: 0;\n}\n\n/* Focus styles */\n.ProseMirror:focus {\n outline: none;\n}\n\n/* Selection styles */\n.tiptap-editor ::selection {\n background-color: #b4d5fe;\n}\n\n/* Text alignment */\n.tiptap-editor [style*=\"text-align: center\"] {\n text-align: center;\n}\n\n.tiptap-editor [style*=\"text-align: right\"] {\n text-align: right;\n}\n\n.tiptap-editor [style*=\"text-align: left\"] {\n text-align: left;\n}\n\n/* Underline */\n.tiptap-editor u {\n text-decoration: underline;\n}\n\n/* Strike */\n.tiptap-editor s {\n text-decoration: line-through;\n}\n\n/* Highlight mark - uses inline style for color, this is fallback */\n.tiptap-editor mark {\n background-color: #fef08a;\n padding: 0.125rem 0.25rem;\n border-radius: 0.125rem;\n}\n\n/* Superscript */\n.tiptap-editor sup {\n vertical-align: super;\n font-size: 0.75em;\n}\n\n/* Subscript */\n.tiptap-editor sub {\n vertical-align: sub;\n font-size: 0.75em;\n}\n\n/* Horizontal Rule */\n.tiptap-editor hr {\n border: none;\n border-top: 2px solid hsl(var(--border, 220 13% 91%));\n margin: 1.5em 0;\n}\n\n/* Justify alignment */\n.tiptap-editor [style*=\"text-align: justify\"] {\n text-align: justify;\n}\n\n/* =============================================================================\n Inline Editor Styles (for RichTextInlineEditor)\n ============================================================================= */\n\n/* Inline editor wrapper */\n.richtext-inline-editor {\n position: relative;\n}\n\n/* Make the editor content area clickable and editable */\n.richtext-inline-editor .tiptap-editor {\n cursor: text;\n}\n\n/* Subtle focus indicator for the entire editor area */\n.richtext-inline-editor:focus-within {\n outline: none;\n}\n\n/* Ensure editor content has appropriate sizing within inline context */\n.richtext-inline-editor .ProseMirror {\n min-height: 40px;\n outline: none;\n}\n\n/* Placeholder for empty inline editor */\n.richtext-inline-editor .ProseMirror p.is-editor-empty:first-child::before {\n content: 'Click to start editing...';\n color: hsl(var(--muted-foreground, 220 9% 46%));\n pointer-events: none;\n float: left;\n height: 0;\n}\n","/* Rich Text Output Styles\n * Applied to rendered rich text content in both Puck preview and frontend.\n * These styles ensure headings, lists, and other HTML elements display correctly.\n *\n * Theme-aware: Uses `color: inherit` by default so text adapts to dark/light mode.\n * Specific colors can be overridden via inline styles from Tiptap.\n */\n\n.richtext-output {\n font-size: 1.125rem;\n line-height: 1.75;\n color: inherit; /* Theme-aware: inherits from parent container */\n}\n\n/* Headings */\n.richtext-output h1 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 2.25rem;\n line-height: 1.2;\n}\n\n.richtext-output h1:first-child {\n margin-top: 0;\n}\n\n.richtext-output h2 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 1.875rem;\n line-height: 1.25;\n}\n\n.richtext-output h2:first-child {\n margin-top: 0;\n}\n\n.richtext-output h3 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 1.5rem;\n line-height: 1.3;\n}\n\n.richtext-output h3:first-child {\n margin-top: 0;\n}\n\n.richtext-output h4 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 1.25rem;\n line-height: 1.35;\n}\n\n.richtext-output h4:first-child {\n margin-top: 0;\n}\n\n.richtext-output h5,\n.richtext-output h6 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n}\n\n.richtext-output h5:first-child,\n.richtext-output h6:first-child {\n margin-top: 0;\n}\n\n/* Paragraphs */\n.richtext-output p {\n margin-bottom: 1.25rem;\n}\n\n.richtext-output p:last-child {\n margin-bottom: 0;\n}\n\n/* Lists - explicitly set list-style to override Tailwind preflight */\n.richtext-output ul {\n margin-bottom: 1.25rem;\n padding-left: 2rem;\n list-style-type: disc !important;\n}\n\n.richtext-output ol {\n margin-bottom: 1.25rem;\n padding-left: 2rem;\n list-style-type: decimal !important;\n}\n\n.richtext-output li {\n margin-bottom: 0.5rem;\n}\n\n.richtext-output li::marker {\n color: currentColor;\n}\n\n/* Nested lists */\n.richtext-output ul ul,\n.richtext-output ol ul {\n list-style-type: circle !important;\n margin-top: 0.5rem;\n margin-bottom: 0;\n}\n\n.richtext-output ul ul ul,\n.richtext-output ol ul ul {\n list-style-type: square !important;\n}\n\n.richtext-output ol ol,\n.richtext-output ul ol {\n list-style-type: lower-alpha !important;\n margin-top: 0.5rem;\n margin-bottom: 0;\n}\n\n/* Blockquote */\n.richtext-output blockquote {\n margin: 1.5rem 0;\n padding-left: 1.5rem;\n border-left: 4px solid hsl(var(--border, 220 13% 91%));\n font-style: italic;\n}\n\n/* Links - using primary color with fallback to blue */\n.richtext-output a {\n color: hsl(var(--primary, 221 83% 53%));\n text-decoration: underline;\n}\n\n.richtext-output a:hover {\n opacity: 0.8;\n}\n\n/* Code - using muted background with fallback */\n.richtext-output code {\n background-color: hsl(var(--muted, 220 14% 96%));\n padding: 0.125rem 0.25rem;\n border-radius: 0.25rem;\n font-size: 0.875rem;\n}\n\n/* Highlight mark - uses inline style for color, this is fallback */\n.richtext-output mark {\n background-color: #fef08a;\n padding: 0.125rem 0.25rem;\n border-radius: 0.125rem;\n}\n\n/* Strikethrough */\n.richtext-output s,\n.richtext-output strike {\n text-decoration: line-through;\n}\n\n/* Text alignment (Tiptap uses inline styles, but backup classes) */\n.richtext-output .text-left {\n text-align: left;\n}\n\n.richtext-output .text-center {\n text-align: center;\n}\n\n.richtext-output .text-right {\n text-align: right;\n}\n\n.richtext-output .text-justify,\n.richtext-output [style*=\"text-align: justify\"] {\n text-align: justify;\n}\n\n/* Superscript */\n.richtext-output sup {\n vertical-align: super;\n font-size: 0.75em;\n}\n\n/* Subscript */\n.richtext-output sub {\n vertical-align: sub;\n font-size: 0.75em;\n}\n\n/* Horizontal Rule */\n.richtext-output hr {\n border: none;\n border-top: 2px solid hsl(var(--border, 220 13% 91%));\n margin: 2rem 0;\n}\n\n/* Responsive font size */\n@media (max-width: 768px) {\n .richtext-output {\n font-size: 1rem;\n }\n\n .richtext-output h1 {\n font-size: 1.875rem;\n }\n\n .richtext-output h2 {\n font-size: 1.5rem;\n }\n\n .richtext-output h3 {\n font-size: 1.25rem;\n }\n}\n"],"mappings":"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","names":[]}
|