@commercetools-demo/puck-content-manager 0.5.0 → 0.5.2
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/dist/index.js +187 -161
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +133 -107
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/ContentManager.tsx","../src/ContentEditor.tsx","../src/ContentManagerRouter.tsx"],"sourcesContent":["export { ContentManagerList } from './ContentManager';\nexport type { ContentManagerListProps } from './ContentManager';\n\nexport { ContentEditor } from './ContentEditor';\nexport type { ContentEditorProps } from './ContentEditor';\n\nexport { ContentManager } from './ContentManagerRouter';\nexport type { ContentManagerProps } from './ContentManagerRouter';\n","import React, { useState } from 'react';\nimport { PuckApiProvider, usePuckContents } from '@commercetools-demo/puck-api';\nimport type {\n CreatePuckContentInput,\n PuckContentListItem,\n} from '@commercetools-demo/puck-types';\nimport DataTable from '@commercetools-uikit/data-table';\nimport PrimaryButton from '@commercetools-uikit/primary-button';\nimport SecondaryButton from '@commercetools-uikit/secondary-button';\nimport FlatButton from '@commercetools-uikit/flat-button';\nimport Card from '@commercetools-uikit/card';\nimport Spacings from '@commercetools-uikit/spacings';\nimport Text from '@commercetools-uikit/text';\nimport LoadingSpinner from '@commercetools-uikit/loading-spinner';\nimport TextInput from '@commercetools-uikit/text-input';\nimport Label from '@commercetools-uikit/label';\nimport { PlusThinIcon, SearchIcon } from '@commercetools-uikit/icons';\nimport Stamp from '@commercetools-uikit/stamp';\n\n// ---------------------------------------------------------------------------\n// Row type for DataTable\n// ---------------------------------------------------------------------------\n\ntype ContentRow = PuckContentListItem & { id: string };\n\nconst columns = [\n { key: 'name', label: 'Name' },\n { key: 'contentType', label: 'Content Type' },\n { key: 'status', label: 'Status' },\n { key: 'updatedAt', label: 'Updated' },\n { key: 'actions', label: 'Actions', shouldIgnoreRowClick: true },\n];\n\n// ---------------------------------------------------------------------------\n// Inner list component (uses context)\n// ---------------------------------------------------------------------------\n\ninterface ContentListProps {\n defaultContentType?: string;\n onEdit: (item: PuckContentListItem) => void;\n}\n\nconst ContentList: React.FC<ContentListProps> = ({ defaultContentType, onEdit }) => {\n const { contents, loading, error, fetchContents, createContent, deleteContent, refresh } =\n usePuckContents(defaultContentType);\n\n const [filterType, setFilterType] = useState(defaultContentType ?? '');\n const [showCreate, setShowCreate] = useState(false);\n const [createName, setCreateName] = useState('');\n const [createType, setCreateType] = useState(defaultContentType ?? '');\n const [createError, setCreateError] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n\n const handleFilter = () => void fetchContents(filterType || undefined);\n\n const handleCreate = async () => {\n setCreateError(null);\n if (!createName.trim()) { setCreateError('Name is required'); return; }\n if (!createType.trim()) { setCreateError('Content type is required'); return; }\n setCreating(true);\n try {\n const input: CreatePuckContentInput = {\n name: createName.trim(),\n contentType: createType.trim(),\n data: { content: [], root: { props: {} } },\n };\n await createContent(input);\n setShowCreate(false);\n setCreateName('');\n setCreateType(defaultContentType ?? '');\n } catch (err) {\n setCreateError((err as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (key: string) => {\n if (!confirm('Delete this content item and all its versions?')) return;\n setDeleting(key);\n try {\n await deleteContent(key);\n } finally {\n setDeleting(null);\n }\n };\n\n const rows: ContentRow[] = contents.map((c) => ({ ...c, id: c.key }));\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Spacings.Stack scale=\"l\">\n {/* Header */}\n <Spacings.Inline justifyContent=\"space-between\" alignItems=\"center\">\n <Text.Headline as=\"h1\">Content Items</Text.Headline>\n <PrimaryButton\n label=\"New Content\"\n iconLeft={<PlusThinIcon />}\n onClick={() => setShowCreate((v) => !v)}\n />\n </Spacings.Inline>\n\n {/* Create form */}\n {showCreate && (\n <Card insetScale=\"l\">\n <Spacings.Stack scale=\"m\">\n <Text.Subheadline as=\"h4\" isBold>Create Content Item</Text.Subheadline>\n {createError && <Text.Body tone=\"negative\">{createError}</Text.Body>}\n <Spacings.Inline scale=\"m\">\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-name\">Name</Label>\n <TextInput\n id=\"create-name\"\n value={createName}\n onChange={(e) => setCreateName(e.target.value)}\n placeholder=\"e.g. Homepage Hero\"\n />\n </Spacings.Stack>\n </div>\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-type\">Content Type</Label>\n <TextInput\n id=\"create-type\"\n value={createType}\n onChange={(e) => setCreateType(e.target.value)}\n placeholder=\"e.g. hero, banner\"\n />\n </Spacings.Stack>\n </div>\n </Spacings.Inline>\n <Spacings.Inline scale=\"s\">\n <PrimaryButton\n label={creating ? 'Creating…' : 'Create'}\n onClick={() => void handleCreate()}\n isDisabled={creating}\n />\n <SecondaryButton label=\"Cancel\" onClick={() => setShowCreate(false)} />\n </Spacings.Inline>\n </Spacings.Stack>\n </Card>\n )}\n\n {/* Filter row */}\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <div style={{ flex: 1, maxWidth: '280px' }}>\n <TextInput\n value={filterType}\n onChange={(e) => setFilterType(e.target.value)}\n placeholder=\"Filter by content type…\"\n />\n </div>\n <SecondaryButton\n label=\"Filter\"\n iconLeft={<SearchIcon />}\n onClick={handleFilter}\n />\n <FlatButton\n label=\"Clear\"\n onClick={() => { setFilterType(''); void fetchContents(undefined); }}\n />\n <FlatButton label=\"Refresh\" onClick={() => void refresh()} />\n </Spacings.Inline>\n\n {error && <Text.Body tone=\"negative\">{error}</Text.Body>}\n\n {/* Table */}\n {loading ? (\n <div style={{ display: 'flex', justifyContent: 'center', padding: '48px' }}>\n <LoadingSpinner />\n </div>\n ) : contents.length === 0 ? (\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <Text.Body tone=\"secondary\">No content items found.</Text.Body>\n </Spacings.Stack>\n ) : (\n <DataTable\n columns={columns}\n rows={rows}\n itemRenderer={(row: ContentRow, column) => {\n switch (column.key) {\n case 'name':\n return <Text.Body fontWeight=\"bold\">{row.value.name}</Text.Body>;\n case 'contentType':\n return (\n <code\n style={{\n background: 'var(--color-neutral-95)',\n padding: '2px 6px',\n borderRadius: 'var(--border-radius-4)',\n fontSize: 'var(--font-size-10)',\n fontFamily: 'monospace',\n }}\n >\n {row.value.contentType}\n </code>\n );\n case 'status': {\n const hasDraft = !!row.states.draft;\n const hasPublished = !!row.states.published;\n return (\n <span style={{ display: 'inline-flex', gap: '4px', flexWrap: 'wrap' }}>\n {hasDraft && <Stamp tone=\"warning\" label=\"Draft\" isCondensed />}\n {hasPublished && <Stamp tone=\"positive\" label=\"Published\" isCondensed />}\n {!hasDraft && !hasPublished && <Stamp tone=\"secondary\" label=\"No state\" isCondensed />}\n </span>\n );\n }\n case 'updatedAt':\n return (\n <Text.Body tone=\"secondary\">\n {new Date(row.value.updatedAt).toLocaleDateString()}\n </Text.Body>\n );\n case 'actions':\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <PrimaryButton label=\"Edit\" size=\"20\" onClick={() => onEdit(row)} />\n <FlatButton\n tone=\"critical\"\n label={deleting === row.key ? '…' : 'Delete'}\n isDisabled={deleting === row.key}\n onClick={() => void handleDelete(row.key)}\n />\n </div>\n );\n default:\n return null;\n }\n }}\n />\n )}\n </Spacings.Stack>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component — wraps its own PuckApiProvider\n// ---------------------------------------------------------------------------\n\nexport interface ContentManagerListProps {\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n defaultContentType?: string;\n onEdit: (item: PuckContentListItem) => void;\n}\n\nexport const ContentManagerList: React.FC<ContentManagerListProps> = ({\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n defaultContentType,\n onEdit,\n}) => (\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <ContentList defaultContentType={defaultContentType} onEdit={onEdit} />\n </PuckApiProvider>\n);\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { Puck, type Config, type Data } from '@measured/puck';\nimport '@measured/puck/puck.css';\nimport { PuckApiProvider, usePuckContent } from '@commercetools-demo/puck-api';\nimport type { PuckContentVersionEntry, PuckData } from '@commercetools-demo/puck-types';\nimport {\n ComponentSearchProvider,\n ComponentsPanel,\n ComponentItemFilter,\n EditorToolbar,\n} from '@commercetools-demo/puck-editor';\nimport {\n VersionHistoryProvider,\n VersionPreviewBanner,\n VersionAwareFieldsPanel,\n VersionHistoryButton,\n useVersionHistoryPanel,\n useVersionDiff,\n} from '@commercetools-demo/puck-version-history';\nimport LoadingSpinner from '@commercetools-uikit/loading-spinner';\nimport Text from '@commercetools-uikit/text';\nimport Spacings from '@commercetools-uikit/spacings';\n\n// ---------------------------------------------------------------------------\n// Inner editor component (uses context)\n// ---------------------------------------------------------------------------\n\ninterface ContentEditorInnerProps {\n contentKey: string;\n config: Config;\n onPublish?: (data: PuckData) => void;\n onSave?: (data: PuckData) => void;\n onError?: (error: Error) => void;\n}\n\nconst ContentEditorInner: React.FC<ContentEditorInnerProps> = ({\n contentKey,\n config,\n onPublish,\n onSave,\n onError,\n}) => {\n const {\n content,\n states,\n versions,\n saving,\n loading,\n error,\n saveDraft,\n publish,\n revertToPublished,\n loadVersions,\n } = usePuckContent(contentKey);\n\n const latestDataRef = useRef<Data | null>(null);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const [isApplyingVersion, setIsApplyingVersion] = useState(false);\n\n // Current live data (draft preferred, fallback to content value)\n const currentData: PuckData =\n states.draft?.data ??\n content?.data ?? {\n content: [],\n root: { props: {} },\n };\n\n // Version history panel state\n const versionHistory = useVersionHistoryPanel({\n versions: versions as PuckContentVersionEntry[],\n loadVersions,\n currentData,\n });\n\n // Diff between selected historical version and current draft\n const diff = useVersionDiff(\n versionHistory.previewData,\n currentData\n );\n\n // Ref so handleChange can read the latest preview state without stale closure\n const isPreviewingRef = useRef(false);\n isPreviewingRef.current = versionHistory.isPreviewingHistory;\n\n // -------------------------------------------------------------------------\n // Normal editor handlers\n // -------------------------------------------------------------------------\n\n const handleChange = useCallback((data: Data) => {\n if (isPreviewingRef.current) return;\n latestDataRef.current = data;\n setHasUnsavedChanges(true);\n }, []);\n\n const handleSave = useCallback(async () => {\n const data = latestDataRef.current;\n if (!data) return;\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n onSave?.(data as PuckData);\n } catch (err) {\n onError?.(err as Error);\n }\n }, [saveDraft, onSave, onError]);\n\n const handlePublish = useCallback(\n async (data: Data) => {\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n await publish(false);\n onPublish?.(data as PuckData);\n } catch (err) {\n onError?.(err as Error);\n }\n },\n [saveDraft, publish, onPublish, onError]\n );\n\n const handleRevert = useCallback(async () => {\n try {\n await revertToPublished();\n setHasUnsavedChanges(false);\n } catch (err) {\n onError?.(err as Error);\n }\n }, [revertToPublished, onError]);\n\n // -------------------------------------------------------------------------\n // Version history handlers\n // -------------------------------------------------------------------------\n\n const handleApplyVersion = useCallback(async () => {\n const versionData = versionHistory.previewData;\n if (!versionData) return;\n setIsApplyingVersion(true);\n try {\n await saveDraft(versionData);\n setHasUnsavedChanges(false);\n onSave?.(versionData);\n versionHistory.clearSelection();\n } catch (err) {\n onError?.(err as Error);\n } finally {\n setIsApplyingVersion(false);\n }\n }, [versionHistory, saveDraft, onSave, onError]);\n\n // -------------------------------------------------------------------------\n // Content-specific Puck config: inject title + slot root fields\n // -------------------------------------------------------------------------\n\n const contentConfig = useMemo((): Config => {\n const otherRootFields = Object.fromEntries(\n Object.entries(config.root?.fields ?? {}).filter(([k]) => k !== 'title')\n );\n return {\n ...config,\n root: {\n ...config.root,\n fields: {\n title: { type: 'text', label: 'Content Title' },\n slot: { type: 'text', label: 'Slot' },\n ...otherRootFields,\n },\n defaultProps: {\n title: 'New Content',\n slot: '',\n ...config.root?.defaultProps,\n },\n },\n };\n }, [config]);\n\n if (loading) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100vh' }}>\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <LoadingSpinner />\n <Text.Body tone=\"secondary\">Loading editor…</Text.Body>\n </Spacings.Stack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text.Body tone=\"negative\"><strong>Error loading content:</strong> {error}</Text.Body>\n </div>\n );\n }\n\n // Data shown in Puck canvas — historical preview takes precedence\n const activeData: PuckData = versionHistory.previewData ?? currentData;\n\n // Cast states for EditorToolbar (PuckContentStateInfo is compatible with PuckStateInfo)\n const toolbarStates = states as unknown as Parameters<typeof EditorToolbar>[0]['states'];\n\n return (\n <VersionHistoryProvider\n diff={diff}\n isPreviewingHistory={versionHistory.isPreviewingHistory}\n versions={versions as PuckContentVersionEntry[]}\n isLoadingVersions={versionHistory.isLoadingVersions}\n selectedVersionId={versionHistory.selectedVersionId}\n isApplying={isApplyingVersion}\n onVersionSelect={versionHistory.selectVersion}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n onLoadVersions={versionHistory.openPanel}\n >\n <ComponentSearchProvider>\n <Puck\n key={versionHistory.selectedVersionId ?? 'current'}\n config={contentConfig}\n data={activeData as Data}\n onChange={handleChange}\n onPublish={handlePublish}\n overrides={{\n headerActions: () =>\n versionHistory.isPreviewingHistory ? (\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <VersionPreviewBanner\n timestamp={versionHistory.selectedVersion!.timestamp}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n isApplying={isApplyingVersion}\n />\n <VersionHistoryButton disabled={isApplyingVersion} />\n </Spacings.Inline>\n ) : (\n <EditorToolbar\n saving={saving}\n isDirty={hasUnsavedChanges}\n states={toolbarStates}\n onSave={() => void handleSave()}\n onPublish={() => void handlePublish(activeData as Data)}\n onRevert={() => void handleRevert()}\n showPublishButton\n />\n ),\n components: ({ children }) => <ComponentsPanel>{children}</ComponentsPanel>,\n componentItem: ({ children, name }) => (\n <ComponentItemFilter name={name}>{children}</ComponentItemFilter>\n ),\n fields: ({ children, isLoading }) => (\n <VersionAwareFieldsPanel isLoading={isLoading}>\n {children}\n </VersionAwareFieldsPanel>\n ),\n }}\n />\n </ComponentSearchProvider>\n </VersionHistoryProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component — wraps its own PuckApiProvider\n// ---------------------------------------------------------------------------\n\nexport interface ContentEditorProps {\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n contentKey: string;\n /** Puck component config — must match what's used in the renderer */\n config: Config;\n onPublish?: (data: PuckData) => void;\n onSave?: (data: PuckData) => void;\n onError?: (error: Error) => void;\n}\n\nexport const ContentEditor: React.FC<ContentEditorProps> = ({\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n contentKey,\n config,\n onPublish,\n onSave,\n onError,\n}) => (\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <ContentEditorInner\n contentKey={contentKey}\n config={config}\n onPublish={onPublish}\n onSave={onSave}\n onError={onError}\n />\n </PuckApiProvider>\n);\n","import React, { useState, useCallback, useMemo, useRef, type ReactNode } from 'react';\nimport {\n BrowserRouter,\n Switch,\n Route,\n useHistory,\n useParams,\n useLocation,\n} from 'react-router-dom';\nimport { Puck, type Config, type Data } from '@measured/puck';\nimport '@measured/puck/puck.css';\nimport {\n ComponentSearchProvider,\n ComponentsPanel,\n ComponentItemFilter,\n defaultPuckConfig,\n EditorToolbar,\n} from '@commercetools-demo/puck-editor';\nimport {\n VersionHistoryProvider,\n VersionHistoryButton,\n VersionPreviewBanner,\n VersionAwareFieldsPanel,\n useVersionHistoryPanel,\n useVersionDiff,\n} from '@commercetools-demo/puck-version-history';\n\nconst DEFAULT_CONFIG: Config = {\n ...defaultPuckConfig,\n components: { ...defaultPuckConfig.components },\n};\nimport {\n PuckApiProvider,\n usePuckContents,\n usePuckContent,\n} from '@commercetools-demo/puck-api';\nimport type {\n CreatePuckContentInput,\n PuckContentListItem,\n PuckContentVersionEntry,\n PuckData,\n} from '@commercetools-demo/puck-types';\nimport DataTable from '@commercetools-uikit/data-table';\nimport PrimaryButton from '@commercetools-uikit/primary-button';\nimport SecondaryButton from '@commercetools-uikit/secondary-button';\nimport FlatButton from '@commercetools-uikit/flat-button';\nimport Card from '@commercetools-uikit/card';\nimport Spacings from '@commercetools-uikit/spacings';\nimport Text from '@commercetools-uikit/text';\nimport LoadingSpinner from '@commercetools-uikit/loading-spinner';\nimport TextInput from '@commercetools-uikit/text-input';\nimport Label from '@commercetools-uikit/label';\nimport Stamp from '@commercetools-uikit/stamp';\nimport { PlusThinIcon, SearchIcon, AngleLeftIcon } from '@commercetools-uikit/icons';\n\n// ---------------------------------------------------------------------------\n// Nav bar style\n// ---------------------------------------------------------------------------\n\nconst NAV_BAR_STYLE: React.CSSProperties = {\n position: 'sticky',\n top: 0,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '8px 16px',\n background: 'var(--color-surface, #fff)',\n borderBottom: '1px solid var(--color-neutral-90)',\n zIndex: 200,\n flexShrink: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Table columns\n// ---------------------------------------------------------------------------\n\ntype ContentRow = PuckContentListItem & { id: string };\n\nconst COLUMNS = [\n { key: 'name', label: 'Name' },\n { key: 'contentType', label: 'Content Type' },\n { key: 'status', label: 'Status' },\n { key: 'updatedAt', label: 'Updated' },\n { key: 'actions', label: 'Actions', shouldIgnoreRowClick: true },\n];\n\n// ---------------------------------------------------------------------------\n// ContentListRoute\n// ---------------------------------------------------------------------------\n\ninterface ContentListRouteProps {\n defaultContentType?: string;\n backButton?: ReactNode;\n}\n\nconst ContentListRoute: React.FC<ContentListRouteProps> = ({ defaultContentType, backButton }) => {\n const history = useHistory();\n const { contents, loading, error, fetchContents, createContent, deleteContent, refresh } =\n usePuckContents(defaultContentType);\n\n const [filterType, setFilterType] = useState(defaultContentType ?? '');\n const [showCreate, setShowCreate] = useState(false);\n const [createName, setCreateName] = useState('');\n const [createType, setCreateType] = useState(defaultContentType ?? '');\n const [createError, setCreateError] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n\n const handleFilter = () => void fetchContents(filterType || undefined);\n\n const handleCreate = async () => {\n setCreateError(null);\n if (!createName.trim()) { setCreateError('Name is required'); return; }\n if (!createType.trim()) { setCreateError('Content type is required'); return; }\n setCreating(true);\n try {\n const input: CreatePuckContentInput = {\n name: createName.trim(),\n contentType: createType.trim(),\n data: { content: [], root: { props: {} } },\n };\n const created = await createContent(input);\n setShowCreate(false);\n setCreateName('');\n setCreateType(defaultContentType ?? '');\n history.push(`/${created.key}`, { contentName: created.value.name });\n } catch (err) {\n setCreateError((err as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (key: string) => {\n if (!confirm('Delete this content item and all its versions?')) return;\n setDeleting(key);\n try {\n await deleteContent(key);\n } finally {\n setDeleting(null);\n }\n };\n\n const rows: ContentRow[] = contents.map((c) => ({ ...c, id: c.key }));\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Spacings.Stack scale=\"l\">\n <Spacings.Inline justifyContent=\"space-between\" alignItems=\"center\">\n <Spacings.Inline scale=\"m\" alignItems=\"center\">\n {backButton}\n <Text.Headline as=\"h1\">Content Items</Text.Headline>\n </Spacings.Inline>\n <PrimaryButton\n label=\"New Content\"\n iconLeft={<PlusThinIcon />}\n onClick={() => setShowCreate((v) => !v)}\n />\n </Spacings.Inline>\n\n {showCreate && (\n <Card insetScale=\"l\">\n <Spacings.Stack scale=\"m\">\n <Text.Subheadline as=\"h4\" isBold>Create Content Item</Text.Subheadline>\n {createError && <Text.Body tone=\"negative\">{createError}</Text.Body>}\n <Spacings.Inline scale=\"m\">\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-content-name\">Name</Label>\n <TextInput\n id=\"create-content-name\"\n value={createName}\n onChange={(e) => setCreateName(e.target.value)}\n placeholder=\"e.g. Homepage Hero\"\n />\n </Spacings.Stack>\n </div>\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-content-type\">Content Type</Label>\n <TextInput\n id=\"create-content-type\"\n value={createType}\n onChange={(e) => setCreateType(e.target.value)}\n placeholder=\"e.g. hero, banner\"\n />\n </Spacings.Stack>\n </div>\n </Spacings.Inline>\n <Spacings.Inline scale=\"s\">\n <PrimaryButton\n label={creating ? 'Creating…' : 'Create'}\n onClick={() => void handleCreate()}\n isDisabled={creating}\n />\n <SecondaryButton label=\"Cancel\" onClick={() => setShowCreate(false)} />\n </Spacings.Inline>\n </Spacings.Stack>\n </Card>\n )}\n\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <div style={{ flex: 1, maxWidth: '280px' }}>\n <TextInput\n value={filterType}\n onChange={(e) => setFilterType(e.target.value)}\n placeholder=\"Filter by content type…\"\n />\n </div>\n <SecondaryButton\n label=\"Filter\"\n iconLeft={<SearchIcon />}\n onClick={handleFilter}\n />\n <FlatButton\n label=\"Clear\"\n onClick={() => { setFilterType(''); void fetchContents(undefined); }}\n />\n <FlatButton label=\"Refresh\" onClick={() => void refresh()} />\n </Spacings.Inline>\n\n {error && <Text.Body tone=\"negative\">{error}</Text.Body>}\n\n {loading ? (\n <div style={{ display: 'flex', justifyContent: 'center', padding: '48px' }}>\n <LoadingSpinner />\n </div>\n ) : contents.length === 0 ? (\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <Text.Body tone=\"secondary\">No content items found.</Text.Body>\n </Spacings.Stack>\n ) : (\n <DataTable\n columns={COLUMNS}\n rows={rows}\n itemRenderer={(row: ContentRow, column) => {\n switch (column.key) {\n case 'name':\n return <Text.Body fontWeight=\"bold\">{row.value.name}</Text.Body>;\n case 'contentType':\n return (\n <code\n style={{\n background: 'var(--color-neutral-95)',\n padding: '2px 6px',\n borderRadius: 'var(--border-radius-4)',\n fontSize: 'var(--font-size-10)',\n fontFamily: 'monospace',\n }}\n >\n {row.value.contentType}\n </code>\n );\n case 'status': {\n const hasDraft = !!row.states.draft;\n const hasPublished = !!row.states.published;\n return (\n <span style={{ display: 'inline-flex', gap: '4px', flexWrap: 'wrap' }}>\n {hasDraft && <Stamp tone=\"warning\" label=\"Draft\" isCondensed />}\n {hasPublished && <Stamp tone=\"positive\" label=\"Published\" isCondensed />}\n {!hasDraft && !hasPublished && <Stamp tone=\"secondary\" label=\"No state\" isCondensed />}\n </span>\n );\n }\n case 'updatedAt':\n return (\n <Text.Body tone=\"secondary\">\n {new Date(row.value.updatedAt).toLocaleDateString()}\n </Text.Body>\n );\n case 'actions':\n return (\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <PrimaryButton\n label=\"Edit\"\n size=\"20\"\n onClick={() =>\n history.push(`/${row.key}`, { contentName: row.value.name })\n }\n />\n <FlatButton\n tone=\"critical\"\n label={deleting === row.key ? '…' : 'Delete'}\n isDisabled={deleting === row.key}\n onClick={() => void handleDelete(row.key)}\n />\n </Spacings.Inline>\n );\n default:\n return null;\n }\n }}\n />\n )}\n </Spacings.Stack>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// ContentEditorRoute\n// ---------------------------------------------------------------------------\n\ninterface ContentEditorRouteProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst ContentEditorRoute: React.FC<ContentEditorRouteProps> = ({ config, backButton }) => {\n const { contentKey } = useParams<{ contentKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const contentName =\n (location.state as { contentName?: string } | null)?.contentName ?? contentKey ?? 'Content';\n\n const {\n content,\n states,\n versions,\n saving,\n loading,\n error,\n saveDraft,\n publish,\n revertToPublished,\n loadVersions,\n } = usePuckContent(contentKey!);\n\n const latestDataRef = useRef<Data | null>(null);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const [isApplyingVersion, setIsApplyingVersion] = useState(false);\n\n const currentData: PuckData =\n states.draft?.data ??\n content?.data ?? { content: [], root: { props: {} } };\n\n const versionHistory = useVersionHistoryPanel({\n versions: versions as PuckContentVersionEntry[],\n loadVersions,\n currentData,\n });\n\n const diff = useVersionDiff(versionHistory.previewData, currentData);\n\n const isPreviewingRef = useRef(false);\n isPreviewingRef.current = versionHistory.isPreviewingHistory;\n\n const handleChange = useCallback((data: Data) => {\n if (isPreviewingRef.current) return;\n latestDataRef.current = data;\n setHasUnsavedChanges(true);\n }, []);\n\n const handleSave = useCallback(async () => {\n const data = latestDataRef.current;\n if (!data) return;\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n } catch (err) {\n console.error('[ContentManagerRouter] save error:', err);\n }\n }, [saveDraft]);\n\n const handlePublish = useCallback(\n async (data: Data) => {\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n await publish(false);\n } catch (err) {\n console.error('[ContentManagerRouter] publish error:', err);\n }\n },\n [saveDraft, publish]\n );\n\n const handleRevert = useCallback(async () => {\n try {\n await revertToPublished();\n setHasUnsavedChanges(false);\n } catch (err) {\n console.error('[ContentManagerRouter] revert error:', err);\n }\n }, [revertToPublished]);\n\n const handleApplyVersion = useCallback(async () => {\n const versionData = versionHistory.previewData;\n if (!versionData) return;\n setIsApplyingVersion(true);\n try {\n await saveDraft(versionData);\n setHasUnsavedChanges(false);\n versionHistory.clearSelection();\n } catch (err) {\n console.error('[ContentManagerRouter] apply version error:', err);\n } finally {\n setIsApplyingVersion(false);\n }\n }, [versionHistory, saveDraft]);\n\n const contentConfig = useMemo((): Config => {\n const otherRootFields = Object.fromEntries(\n Object.entries(config.root?.fields ?? {}).filter(([k]) => k !== 'title')\n );\n return {\n ...config,\n root: {\n ...config.root,\n fields: {\n title: { type: 'text', label: 'Content Title' },\n slot: { type: 'text', label: 'Slot' },\n ...otherRootFields,\n },\n defaultProps: {\n title: 'New Content',\n slot: '',\n ...config.root?.defaultProps,\n },\n },\n };\n }, [config]);\n\n if (loading) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100vh' }}>\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <LoadingSpinner />\n <Text.Body tone=\"secondary\">Loading editor…</Text.Body>\n </Spacings.Stack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text.Body tone=\"negative\"><strong>Error loading content:</strong> {error}</Text.Body>\n </div>\n );\n }\n\n const activeData: PuckData = versionHistory.previewData ?? currentData;\n const toolbarStates = states as unknown as Parameters<typeof EditorToolbar>[0]['states'];\n\n return (\n <VersionHistoryProvider\n diff={diff}\n isPreviewingHistory={versionHistory.isPreviewingHistory}\n versions={versions as PuckContentVersionEntry[]}\n isLoadingVersions={versionHistory.isLoadingVersions}\n selectedVersionId={versionHistory.selectedVersionId}\n isApplying={isApplyingVersion}\n onVersionSelect={versionHistory.selectVersion}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n onLoadVersions={versionHistory.openPanel}\n >\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text.Body tone=\"secondary\">/</Text.Body>}\n <FlatButton\n label=\"Content Items\"\n icon={<AngleLeftIcon />}\n iconPosition=\"left\"\n onClick={() => history.push('/')}\n />\n <Text.Body tone=\"secondary\">/</Text.Body>\n <Text.Body fontWeight=\"bold\">{contentName}</Text.Body>\n </div>\n <div style={{ flex: 1, overflow: 'hidden' }}>\n <ComponentSearchProvider>\n <Puck\n key={versionHistory.selectedVersionId ?? 'current'}\n config={contentConfig}\n data={activeData as Data}\n onChange={handleChange}\n onPublish={handlePublish}\n overrides={{\n headerActions: () =>\n versionHistory.isPreviewingHistory ? (\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <VersionPreviewBanner\n timestamp={versionHistory.selectedVersion!.timestamp}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n isApplying={isApplyingVersion}\n />\n <VersionHistoryButton disabled={isApplyingVersion} />\n </Spacings.Inline>\n ) : (\n <EditorToolbar\n saving={saving}\n isDirty={hasUnsavedChanges}\n states={toolbarStates}\n onSave={() => void handleSave()}\n onPublish={() => void handlePublish(activeData as Data)}\n onRevert={() => void handleRevert()}\n showPublishButton\n />\n ),\n components: ({ children }) => <ComponentsPanel>{children}</ComponentsPanel>,\n componentItem: ({ children, name }) => (\n <ComponentItemFilter name={name}>{children}</ComponentItemFilter>\n ),\n fields: ({ children, isLoading }) => (\n <VersionAwareFieldsPanel isLoading={isLoading}>\n {children}\n </VersionAwareFieldsPanel>\n ),\n }}\n />\n </ComponentSearchProvider>\n </div>\n </div>\n </VersionHistoryProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Inner router component\n// ---------------------------------------------------------------------------\n\ninterface ContentManagerRouterInnerProps {\n config: Config;\n defaultContentType?: string;\n backButton?: ReactNode;\n}\n\nconst ContentManagerRouterInner: React.FC<ContentManagerRouterInnerProps> = ({\n config,\n defaultContentType,\n backButton,\n}) => (\n <Switch>\n <Route\n exact\n path=\"/\"\n render={() => (\n <ContentListRoute defaultContentType={defaultContentType} backButton={backButton} />\n )}\n />\n <Route\n path=\"/:contentKey\"\n render={() => <ContentEditorRoute config={config} backButton={backButton} />}\n />\n </Switch>\n);\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface ContentManagerProps {\n /** URL path where this manager is mounted, e.g. \"/content\" — used as router basename */\n parentUrl: string;\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n /** Puck component config — must match what's used in the renderer. Defaults to defaultPuckConfig. */\n config?: Config;\n defaultContentType?: string;\n /** Optional element rendered before the breadcrumb in the editor header */\n backButton?: ReactNode;\n}\n\nexport const ContentManager: React.FC<ContentManagerProps> = ({\n parentUrl,\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n config = DEFAULT_CONFIG,\n defaultContentType,\n backButton,\n}) => (\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <BrowserRouter basename={parentUrl}>\n <ContentManagerRouterInner\n config={config}\n defaultContentType={defaultContentType}\n backButton={backButton}\n />\n </BrowserRouter>\n </PuckApiProvider>\n);\n"],"mappings":"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","names":["Spacings","Text","PrimaryButton","Card","Label","TextInput","SecondaryButton","FlatButton","LoadingSpinner","DataTable","Stamp","import_react","import_puck","import_puck_api","import_loading_spinner","import_text","import_spacings","import_jsx_runtime","Spacings","LoadingSpinner","Text","import_react","import_puck","import_puck_editor","import_puck_version_history","import_puck_api","import_data_table","import_primary_button","import_secondary_button","import_flat_button","import_card","import_spacings","import_text","import_loading_spinner","import_text_input","import_label","import_stamp","import_icons","import_jsx_runtime","Spacings","Text","PrimaryButton","Card","Label","TextInput","SecondaryButton","FlatButton","LoadingSpinner","DataTable","Stamp"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/ContentManager.tsx","../src/EnsureIntlProvider.tsx","../src/ContentEditor.tsx","../src/ContentManagerRouter.tsx"],"sourcesContent":["export { ContentManagerList } from './ContentManager';\nexport type { ContentManagerListProps } from './ContentManager';\n\nexport { ContentEditor } from './ContentEditor';\nexport type { ContentEditorProps } from './ContentEditor';\n\nexport { ContentManager } from './ContentManagerRouter';\nexport type { ContentManagerProps } from './ContentManagerRouter';\n","import React, { useState } from 'react';\nimport { PuckApiProvider, usePuckContents } from '@commercetools-demo/puck-api';\nimport type {\n CreatePuckContentInput,\n PuckContentListItem,\n} from '@commercetools-demo/puck-types';\nimport DataTable from '@commercetools-uikit/data-table';\nimport PrimaryButton from '@commercetools-uikit/primary-button';\nimport SecondaryButton from '@commercetools-uikit/secondary-button';\nimport FlatButton from '@commercetools-uikit/flat-button';\nimport Card from '@commercetools-uikit/card';\nimport Spacings from '@commercetools-uikit/spacings';\nimport Text from '@commercetools-uikit/text';\nimport LoadingSpinner from '@commercetools-uikit/loading-spinner';\nimport TextInput from '@commercetools-uikit/text-input';\nimport Label from '@commercetools-uikit/label';\nimport { PlusThinIcon, SearchIcon } from '@commercetools-uikit/icons';\nimport Stamp from '@commercetools-uikit/stamp';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\n\n// ---------------------------------------------------------------------------\n// Row type for DataTable\n// ---------------------------------------------------------------------------\n\ntype ContentRow = PuckContentListItem & { id: string };\n\nconst columns = [\n { key: 'name', label: 'Name' },\n { key: 'contentType', label: 'Content Type' },\n { key: 'status', label: 'Status' },\n { key: 'updatedAt', label: 'Updated' },\n { key: 'actions', label: 'Actions', shouldIgnoreRowClick: true },\n];\n\n// ---------------------------------------------------------------------------\n// Inner list component (uses context)\n// ---------------------------------------------------------------------------\n\ninterface ContentListProps {\n defaultContentType?: string;\n onEdit: (item: PuckContentListItem) => void;\n}\n\nconst ContentList: React.FC<ContentListProps> = ({ defaultContentType, onEdit }) => {\n const { contents, loading, error, fetchContents, createContent, deleteContent, refresh } =\n usePuckContents(defaultContentType);\n\n const [filterType, setFilterType] = useState(defaultContentType ?? '');\n const [showCreate, setShowCreate] = useState(false);\n const [createName, setCreateName] = useState('');\n const [createType, setCreateType] = useState(defaultContentType ?? '');\n const [createError, setCreateError] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n\n const handleFilter = () => void fetchContents(filterType || undefined);\n\n const handleCreate = async () => {\n setCreateError(null);\n if (!createName.trim()) { setCreateError('Name is required'); return; }\n if (!createType.trim()) { setCreateError('Content type is required'); return; }\n setCreating(true);\n try {\n const input: CreatePuckContentInput = {\n name: createName.trim(),\n contentType: createType.trim(),\n data: { content: [], root: { props: {} } },\n };\n await createContent(input);\n setShowCreate(false);\n setCreateName('');\n setCreateType(defaultContentType ?? '');\n } catch (err) {\n setCreateError((err as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (key: string) => {\n if (!confirm('Delete this content item and all its versions?')) return;\n setDeleting(key);\n try {\n await deleteContent(key);\n } finally {\n setDeleting(null);\n }\n };\n\n const rows: ContentRow[] = contents.map((c) => ({ ...c, id: c.key }));\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Spacings.Stack scale=\"l\">\n {/* Header */}\n <Spacings.Inline justifyContent=\"space-between\" alignItems=\"center\">\n <Text.Headline as=\"h1\">Content Items</Text.Headline>\n <PrimaryButton\n label=\"New Content\"\n iconLeft={<PlusThinIcon />}\n onClick={() => setShowCreate((v) => !v)}\n />\n </Spacings.Inline>\n\n {/* Create form */}\n {showCreate && (\n <Card insetScale=\"l\">\n <Spacings.Stack scale=\"m\">\n <Text.Subheadline as=\"h4\" isBold>Create Content Item</Text.Subheadline>\n {createError && <Text.Body tone=\"negative\">{createError}</Text.Body>}\n <Spacings.Inline scale=\"m\">\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-name\">Name</Label>\n <TextInput\n id=\"create-name\"\n value={createName}\n onChange={(e) => setCreateName(e.target.value)}\n placeholder=\"e.g. Homepage Hero\"\n />\n </Spacings.Stack>\n </div>\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-type\">Content Type</Label>\n <TextInput\n id=\"create-type\"\n value={createType}\n onChange={(e) => setCreateType(e.target.value)}\n placeholder=\"e.g. hero, banner\"\n />\n </Spacings.Stack>\n </div>\n </Spacings.Inline>\n <Spacings.Inline scale=\"s\">\n <PrimaryButton\n label={creating ? 'Creating…' : 'Create'}\n onClick={() => void handleCreate()}\n isDisabled={creating}\n />\n <SecondaryButton label=\"Cancel\" onClick={() => setShowCreate(false)} />\n </Spacings.Inline>\n </Spacings.Stack>\n </Card>\n )}\n\n {/* Filter row */}\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <div style={{ flex: 1, maxWidth: '280px' }}>\n <TextInput\n value={filterType}\n onChange={(e) => setFilterType(e.target.value)}\n placeholder=\"Filter by content type…\"\n />\n </div>\n <SecondaryButton\n label=\"Filter\"\n iconLeft={<SearchIcon />}\n onClick={handleFilter}\n />\n <FlatButton\n label=\"Clear\"\n onClick={() => { setFilterType(''); void fetchContents(undefined); }}\n />\n <FlatButton label=\"Refresh\" onClick={() => void refresh()} />\n </Spacings.Inline>\n\n {error && <Text.Body tone=\"negative\">{error}</Text.Body>}\n\n {/* Table */}\n {loading ? (\n <div style={{ display: 'flex', justifyContent: 'center', padding: '48px' }}>\n <LoadingSpinner />\n </div>\n ) : contents.length === 0 ? (\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <Text.Body tone=\"secondary\">No content items found.</Text.Body>\n </Spacings.Stack>\n ) : (\n <DataTable\n columns={columns}\n rows={rows}\n itemRenderer={(row: ContentRow, column) => {\n switch (column.key) {\n case 'name':\n return <Text.Body fontWeight=\"bold\">{row.value.name}</Text.Body>;\n case 'contentType':\n return (\n <code\n style={{\n background: 'var(--color-neutral-95)',\n padding: '2px 6px',\n borderRadius: 'var(--border-radius-4)',\n fontSize: 'var(--font-size-10)',\n fontFamily: 'monospace',\n }}\n >\n {row.value.contentType}\n </code>\n );\n case 'status': {\n const hasDraft = !!row.states.draft;\n const hasPublished = !!row.states.published;\n return (\n <span style={{ display: 'inline-flex', gap: '4px', flexWrap: 'wrap' }}>\n {hasDraft && <Stamp tone=\"warning\" label=\"Draft\" isCondensed />}\n {hasPublished && <Stamp tone=\"positive\" label=\"Published\" isCondensed />}\n {!hasDraft && !hasPublished && <Stamp tone=\"secondary\" label=\"No state\" isCondensed />}\n </span>\n );\n }\n case 'updatedAt':\n return (\n <Text.Body tone=\"secondary\">\n {new Date(row.value.updatedAt).toLocaleDateString()}\n </Text.Body>\n );\n case 'actions':\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <PrimaryButton label=\"Edit\" size=\"20\" onClick={() => onEdit(row)} />\n <FlatButton\n tone=\"critical\"\n label={deleting === row.key ? '…' : 'Delete'}\n isDisabled={deleting === row.key}\n onClick={() => void handleDelete(row.key)}\n />\n </div>\n );\n default:\n return null;\n }\n }}\n />\n )}\n </Spacings.Stack>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component — wraps its own PuckApiProvider\n// ---------------------------------------------------------------------------\n\nexport interface ContentManagerListProps {\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n defaultContentType?: string;\n onEdit: (item: PuckContentListItem) => void;\n}\n\nexport const ContentManagerList: React.FC<ContentManagerListProps> = ({\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n defaultContentType,\n onEdit,\n}) => (\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <ContentList defaultContentType={defaultContentType} onEdit={onEdit} />\n </PuckApiProvider>\n </EnsureIntlProvider>\n);\n","import React, { useContext, type PropsWithChildren } from 'react';\nimport { IntlContext, IntlProvider, ReactIntlErrorCode } from 'react-intl';\n\n/**\n * Ensures a react-intl context exists for the commercetools UIKit components\n * rendered by this package.\n *\n * UIKit components (DataTable, Text, buttons, …) call react-intl internally and\n * require an `<IntlProvider>` in the ancestry. If the host already provides one\n * (e.g. the Merchant Center ApplicationShell, or a storefront that set up\n * react-intl), it is reused as-is. Otherwise a minimal English provider is\n * mounted so the package also works standalone.\n *\n * Detection mirrors react-intl's own `useIntl`: `IntlContext` defaults to `null`\n * when no provider is present.\n */\nexport const EnsureIntlProvider: React.FC<PropsWithChildren> = ({ children }) => {\n const intl = useContext(IntlContext);\n\n if (intl) {\n return <>{children}</>;\n }\n\n return (\n <IntlProvider\n locale=\"en\"\n defaultLocale=\"en\"\n messages={{}}\n onError={(err) => {\n // UIKit ships `defaultMessage`s, so a missing-translation against an\n // empty catalog is expected and would otherwise flood the console.\n if (err.code === ReactIntlErrorCode.MISSING_TRANSLATION) return;\n // eslint-disable-next-line no-console\n console.error(err);\n }}\n >\n {children}\n </IntlProvider>\n );\n};\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { Puck, type Config, type Data } from '@measured/puck';\nimport '@measured/puck/puck.css';\nimport { PuckApiProvider, usePuckContent } from '@commercetools-demo/puck-api';\nimport type { PuckContentVersionEntry, PuckData } from '@commercetools-demo/puck-types';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\nimport {\n ComponentSearchProvider,\n ComponentsPanel,\n ComponentItemFilter,\n EditorToolbar,\n} from '@commercetools-demo/puck-editor';\nimport {\n VersionHistoryProvider,\n VersionPreviewBanner,\n VersionAwareFieldsPanel,\n VersionHistoryButton,\n useVersionHistoryPanel,\n useVersionDiff,\n} from '@commercetools-demo/puck-version-history';\nimport LoadingSpinner from '@commercetools-uikit/loading-spinner';\nimport Text from '@commercetools-uikit/text';\nimport Spacings from '@commercetools-uikit/spacings';\n\n// ---------------------------------------------------------------------------\n// Inner editor component (uses context)\n// ---------------------------------------------------------------------------\n\ninterface ContentEditorInnerProps {\n contentKey: string;\n config: Config;\n onPublish?: (data: PuckData) => void;\n onSave?: (data: PuckData) => void;\n onError?: (error: Error) => void;\n}\n\nconst ContentEditorInner: React.FC<ContentEditorInnerProps> = ({\n contentKey,\n config,\n onPublish,\n onSave,\n onError,\n}) => {\n const {\n content,\n states,\n versions,\n saving,\n loading,\n error,\n saveDraft,\n publish,\n revertToPublished,\n loadVersions,\n } = usePuckContent(contentKey);\n\n const latestDataRef = useRef<Data | null>(null);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const [isApplyingVersion, setIsApplyingVersion] = useState(false);\n\n // Current live data (draft preferred, fallback to content value)\n const currentData: PuckData =\n states.draft?.data ??\n content?.data ?? {\n content: [],\n root: { props: {} },\n };\n\n // Version history panel state\n const versionHistory = useVersionHistoryPanel({\n versions: versions as PuckContentVersionEntry[],\n loadVersions,\n currentData,\n });\n\n // Diff between selected historical version and current draft\n const diff = useVersionDiff(\n versionHistory.previewData,\n currentData\n );\n\n // Ref so handleChange can read the latest preview state without stale closure\n const isPreviewingRef = useRef(false);\n isPreviewingRef.current = versionHistory.isPreviewingHistory;\n\n // -------------------------------------------------------------------------\n // Normal editor handlers\n // -------------------------------------------------------------------------\n\n const handleChange = useCallback((data: Data) => {\n if (isPreviewingRef.current) return;\n latestDataRef.current = data;\n setHasUnsavedChanges(true);\n }, []);\n\n const handleSave = useCallback(async () => {\n const data = latestDataRef.current;\n if (!data) return;\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n onSave?.(data as PuckData);\n } catch (err) {\n onError?.(err as Error);\n }\n }, [saveDraft, onSave, onError]);\n\n const handlePublish = useCallback(\n async (data: Data) => {\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n await publish(false);\n onPublish?.(data as PuckData);\n } catch (err) {\n onError?.(err as Error);\n }\n },\n [saveDraft, publish, onPublish, onError]\n );\n\n const handleRevert = useCallback(async () => {\n try {\n await revertToPublished();\n setHasUnsavedChanges(false);\n } catch (err) {\n onError?.(err as Error);\n }\n }, [revertToPublished, onError]);\n\n // -------------------------------------------------------------------------\n // Version history handlers\n // -------------------------------------------------------------------------\n\n const handleApplyVersion = useCallback(async () => {\n const versionData = versionHistory.previewData;\n if (!versionData) return;\n setIsApplyingVersion(true);\n try {\n await saveDraft(versionData);\n setHasUnsavedChanges(false);\n onSave?.(versionData);\n versionHistory.clearSelection();\n } catch (err) {\n onError?.(err as Error);\n } finally {\n setIsApplyingVersion(false);\n }\n }, [versionHistory, saveDraft, onSave, onError]);\n\n // -------------------------------------------------------------------------\n // Content-specific Puck config: inject title + slot root fields\n // -------------------------------------------------------------------------\n\n const contentConfig = useMemo((): Config => {\n const otherRootFields = Object.fromEntries(\n Object.entries(config.root?.fields ?? {}).filter(([k]) => k !== 'title')\n );\n return {\n ...config,\n root: {\n ...config.root,\n fields: {\n title: { type: 'text', label: 'Content Title' },\n slot: { type: 'text', label: 'Slot' },\n ...otherRootFields,\n },\n defaultProps: {\n title: 'New Content',\n slot: '',\n ...config.root?.defaultProps,\n },\n },\n };\n }, [config]);\n\n if (loading) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100vh' }}>\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <LoadingSpinner />\n <Text.Body tone=\"secondary\">Loading editor…</Text.Body>\n </Spacings.Stack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text.Body tone=\"negative\"><strong>Error loading content:</strong> {error}</Text.Body>\n </div>\n );\n }\n\n // Data shown in Puck canvas — historical preview takes precedence\n const activeData: PuckData = versionHistory.previewData ?? currentData;\n\n // Cast states for EditorToolbar (PuckContentStateInfo is compatible with PuckStateInfo)\n const toolbarStates = states as unknown as Parameters<typeof EditorToolbar>[0]['states'];\n\n return (\n <VersionHistoryProvider\n diff={diff}\n isPreviewingHistory={versionHistory.isPreviewingHistory}\n versions={versions as PuckContentVersionEntry[]}\n isLoadingVersions={versionHistory.isLoadingVersions}\n selectedVersionId={versionHistory.selectedVersionId}\n isApplying={isApplyingVersion}\n onVersionSelect={versionHistory.selectVersion}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n onLoadVersions={versionHistory.openPanel}\n >\n <ComponentSearchProvider>\n <Puck\n key={versionHistory.selectedVersionId ?? 'current'}\n config={contentConfig}\n data={activeData as Data}\n onChange={handleChange}\n onPublish={handlePublish}\n overrides={{\n headerActions: () =>\n versionHistory.isPreviewingHistory ? (\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <VersionPreviewBanner\n timestamp={versionHistory.selectedVersion!.timestamp}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n isApplying={isApplyingVersion}\n />\n <VersionHistoryButton disabled={isApplyingVersion} />\n </Spacings.Inline>\n ) : (\n <EditorToolbar\n saving={saving}\n isDirty={hasUnsavedChanges}\n states={toolbarStates}\n onSave={() => void handleSave()}\n onPublish={() => void handlePublish(activeData as Data)}\n onRevert={() => void handleRevert()}\n showPublishButton\n />\n ),\n components: ({ children }) => <ComponentsPanel>{children}</ComponentsPanel>,\n componentItem: ({ children, name }) => (\n <ComponentItemFilter name={name}>{children}</ComponentItemFilter>\n ),\n fields: ({ children, isLoading }) => (\n <VersionAwareFieldsPanel isLoading={isLoading}>\n {children}\n </VersionAwareFieldsPanel>\n ),\n }}\n />\n </ComponentSearchProvider>\n </VersionHistoryProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component — wraps its own PuckApiProvider\n// ---------------------------------------------------------------------------\n\nexport interface ContentEditorProps {\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n contentKey: string;\n /** Puck component config — must match what's used in the renderer */\n config: Config;\n onPublish?: (data: PuckData) => void;\n onSave?: (data: PuckData) => void;\n onError?: (error: Error) => void;\n}\n\nexport const ContentEditor: React.FC<ContentEditorProps> = ({\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n contentKey,\n config,\n onPublish,\n onSave,\n onError,\n}) => (\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <ContentEditorInner\n contentKey={contentKey}\n config={config}\n onPublish={onPublish}\n onSave={onSave}\n onError={onError}\n />\n </PuckApiProvider>\n </EnsureIntlProvider>\n);\n","import React, { useState, useCallback, useMemo, useRef, type ReactNode } from 'react';\nimport {\n BrowserRouter,\n Switch,\n Route,\n useHistory,\n useParams,\n useLocation,\n} from 'react-router-dom';\nimport { Puck, type Config, type Data } from '@measured/puck';\nimport '@measured/puck/puck.css';\nimport {\n ComponentSearchProvider,\n ComponentsPanel,\n ComponentItemFilter,\n defaultPuckConfig,\n EditorToolbar,\n} from '@commercetools-demo/puck-editor';\nimport {\n VersionHistoryProvider,\n VersionHistoryButton,\n VersionPreviewBanner,\n VersionAwareFieldsPanel,\n useVersionHistoryPanel,\n useVersionDiff,\n} from '@commercetools-demo/puck-version-history';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\n\nconst DEFAULT_CONFIG: Config = {\n ...defaultPuckConfig,\n components: { ...defaultPuckConfig.components },\n};\nimport {\n PuckApiProvider,\n usePuckContents,\n usePuckContent,\n} from '@commercetools-demo/puck-api';\nimport type {\n CreatePuckContentInput,\n PuckContentListItem,\n PuckContentVersionEntry,\n PuckData,\n} from '@commercetools-demo/puck-types';\nimport DataTable from '@commercetools-uikit/data-table';\nimport PrimaryButton from '@commercetools-uikit/primary-button';\nimport SecondaryButton from '@commercetools-uikit/secondary-button';\nimport FlatButton from '@commercetools-uikit/flat-button';\nimport Card from '@commercetools-uikit/card';\nimport Spacings from '@commercetools-uikit/spacings';\nimport Text from '@commercetools-uikit/text';\nimport LoadingSpinner from '@commercetools-uikit/loading-spinner';\nimport TextInput from '@commercetools-uikit/text-input';\nimport Label from '@commercetools-uikit/label';\nimport Stamp from '@commercetools-uikit/stamp';\nimport { PlusThinIcon, SearchIcon, AngleLeftIcon } from '@commercetools-uikit/icons';\n\n// ---------------------------------------------------------------------------\n// Nav bar style\n// ---------------------------------------------------------------------------\n\nconst NAV_BAR_STYLE: React.CSSProperties = {\n position: 'sticky',\n top: 0,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '8px 16px',\n background: 'var(--color-surface, #fff)',\n borderBottom: '1px solid var(--color-neutral-90)',\n zIndex: 200,\n flexShrink: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Table columns\n// ---------------------------------------------------------------------------\n\ntype ContentRow = PuckContentListItem & { id: string };\n\nconst COLUMNS = [\n { key: 'name', label: 'Name' },\n { key: 'contentType', label: 'Content Type' },\n { key: 'status', label: 'Status' },\n { key: 'updatedAt', label: 'Updated' },\n { key: 'actions', label: 'Actions', shouldIgnoreRowClick: true },\n];\n\n// ---------------------------------------------------------------------------\n// ContentListRoute\n// ---------------------------------------------------------------------------\n\ninterface ContentListRouteProps {\n defaultContentType?: string;\n backButton?: ReactNode;\n}\n\nconst ContentListRoute: React.FC<ContentListRouteProps> = ({ defaultContentType, backButton }) => {\n const history = useHistory();\n const { contents, loading, error, fetchContents, createContent, deleteContent, refresh } =\n usePuckContents(defaultContentType);\n\n const [filterType, setFilterType] = useState(defaultContentType ?? '');\n const [showCreate, setShowCreate] = useState(false);\n const [createName, setCreateName] = useState('');\n const [createType, setCreateType] = useState(defaultContentType ?? '');\n const [createError, setCreateError] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n\n const handleFilter = () => void fetchContents(filterType || undefined);\n\n const handleCreate = async () => {\n setCreateError(null);\n if (!createName.trim()) { setCreateError('Name is required'); return; }\n if (!createType.trim()) { setCreateError('Content type is required'); return; }\n setCreating(true);\n try {\n const input: CreatePuckContentInput = {\n name: createName.trim(),\n contentType: createType.trim(),\n data: { content: [], root: { props: {} } },\n };\n const created = await createContent(input);\n setShowCreate(false);\n setCreateName('');\n setCreateType(defaultContentType ?? '');\n history.push(`/${created.key}`, { contentName: created.value.name });\n } catch (err) {\n setCreateError((err as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (key: string) => {\n if (!confirm('Delete this content item and all its versions?')) return;\n setDeleting(key);\n try {\n await deleteContent(key);\n } finally {\n setDeleting(null);\n }\n };\n\n const rows: ContentRow[] = contents.map((c) => ({ ...c, id: c.key }));\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Spacings.Stack scale=\"l\">\n <Spacings.Inline justifyContent=\"space-between\" alignItems=\"center\">\n <Spacings.Inline scale=\"m\" alignItems=\"center\">\n {backButton}\n <Text.Headline as=\"h1\">Content Items</Text.Headline>\n </Spacings.Inline>\n <PrimaryButton\n label=\"New Content\"\n iconLeft={<PlusThinIcon />}\n onClick={() => setShowCreate((v) => !v)}\n />\n </Spacings.Inline>\n\n {showCreate && (\n <Card insetScale=\"l\">\n <Spacings.Stack scale=\"m\">\n <Text.Subheadline as=\"h4\" isBold>Create Content Item</Text.Subheadline>\n {createError && <Text.Body tone=\"negative\">{createError}</Text.Body>}\n <Spacings.Inline scale=\"m\">\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-content-name\">Name</Label>\n <TextInput\n id=\"create-content-name\"\n value={createName}\n onChange={(e) => setCreateName(e.target.value)}\n placeholder=\"e.g. Homepage Hero\"\n />\n </Spacings.Stack>\n </div>\n <div style={{ flex: 1 }}>\n <Spacings.Stack scale=\"xs\">\n <Label htmlFor=\"create-content-type\">Content Type</Label>\n <TextInput\n id=\"create-content-type\"\n value={createType}\n onChange={(e) => setCreateType(e.target.value)}\n placeholder=\"e.g. hero, banner\"\n />\n </Spacings.Stack>\n </div>\n </Spacings.Inline>\n <Spacings.Inline scale=\"s\">\n <PrimaryButton\n label={creating ? 'Creating…' : 'Create'}\n onClick={() => void handleCreate()}\n isDisabled={creating}\n />\n <SecondaryButton label=\"Cancel\" onClick={() => setShowCreate(false)} />\n </Spacings.Inline>\n </Spacings.Stack>\n </Card>\n )}\n\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <div style={{ flex: 1, maxWidth: '280px' }}>\n <TextInput\n value={filterType}\n onChange={(e) => setFilterType(e.target.value)}\n placeholder=\"Filter by content type…\"\n />\n </div>\n <SecondaryButton\n label=\"Filter\"\n iconLeft={<SearchIcon />}\n onClick={handleFilter}\n />\n <FlatButton\n label=\"Clear\"\n onClick={() => { setFilterType(''); void fetchContents(undefined); }}\n />\n <FlatButton label=\"Refresh\" onClick={() => void refresh()} />\n </Spacings.Inline>\n\n {error && <Text.Body tone=\"negative\">{error}</Text.Body>}\n\n {loading ? (\n <div style={{ display: 'flex', justifyContent: 'center', padding: '48px' }}>\n <LoadingSpinner />\n </div>\n ) : contents.length === 0 ? (\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <Text.Body tone=\"secondary\">No content items found.</Text.Body>\n </Spacings.Stack>\n ) : (\n <DataTable\n columns={COLUMNS}\n rows={rows}\n itemRenderer={(row: ContentRow, column) => {\n switch (column.key) {\n case 'name':\n return <Text.Body fontWeight=\"bold\">{row.value.name}</Text.Body>;\n case 'contentType':\n return (\n <code\n style={{\n background: 'var(--color-neutral-95)',\n padding: '2px 6px',\n borderRadius: 'var(--border-radius-4)',\n fontSize: 'var(--font-size-10)',\n fontFamily: 'monospace',\n }}\n >\n {row.value.contentType}\n </code>\n );\n case 'status': {\n const hasDraft = !!row.states.draft;\n const hasPublished = !!row.states.published;\n return (\n <span style={{ display: 'inline-flex', gap: '4px', flexWrap: 'wrap' }}>\n {hasDraft && <Stamp tone=\"warning\" label=\"Draft\" isCondensed />}\n {hasPublished && <Stamp tone=\"positive\" label=\"Published\" isCondensed />}\n {!hasDraft && !hasPublished && <Stamp tone=\"secondary\" label=\"No state\" isCondensed />}\n </span>\n );\n }\n case 'updatedAt':\n return (\n <Text.Body tone=\"secondary\">\n {new Date(row.value.updatedAt).toLocaleDateString()}\n </Text.Body>\n );\n case 'actions':\n return (\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <PrimaryButton\n label=\"Edit\"\n size=\"20\"\n onClick={() =>\n history.push(`/${row.key}`, { contentName: row.value.name })\n }\n />\n <FlatButton\n tone=\"critical\"\n label={deleting === row.key ? '…' : 'Delete'}\n isDisabled={deleting === row.key}\n onClick={() => void handleDelete(row.key)}\n />\n </Spacings.Inline>\n );\n default:\n return null;\n }\n }}\n />\n )}\n </Spacings.Stack>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// ContentEditorRoute\n// ---------------------------------------------------------------------------\n\ninterface ContentEditorRouteProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst ContentEditorRoute: React.FC<ContentEditorRouteProps> = ({ config, backButton }) => {\n const { contentKey } = useParams<{ contentKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const contentName =\n (location.state as { contentName?: string } | null)?.contentName ?? contentKey ?? 'Content';\n\n const {\n content,\n states,\n versions,\n saving,\n loading,\n error,\n saveDraft,\n publish,\n revertToPublished,\n loadVersions,\n } = usePuckContent(contentKey!);\n\n const latestDataRef = useRef<Data | null>(null);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n const [isApplyingVersion, setIsApplyingVersion] = useState(false);\n\n const currentData: PuckData =\n states.draft?.data ??\n content?.data ?? { content: [], root: { props: {} } };\n\n const versionHistory = useVersionHistoryPanel({\n versions: versions as PuckContentVersionEntry[],\n loadVersions,\n currentData,\n });\n\n const diff = useVersionDiff(versionHistory.previewData, currentData);\n\n const isPreviewingRef = useRef(false);\n isPreviewingRef.current = versionHistory.isPreviewingHistory;\n\n const handleChange = useCallback((data: Data) => {\n if (isPreviewingRef.current) return;\n latestDataRef.current = data;\n setHasUnsavedChanges(true);\n }, []);\n\n const handleSave = useCallback(async () => {\n const data = latestDataRef.current;\n if (!data) return;\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n } catch (err) {\n console.error('[ContentManagerRouter] save error:', err);\n }\n }, [saveDraft]);\n\n const handlePublish = useCallback(\n async (data: Data) => {\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n await publish(false);\n } catch (err) {\n console.error('[ContentManagerRouter] publish error:', err);\n }\n },\n [saveDraft, publish]\n );\n\n const handleRevert = useCallback(async () => {\n try {\n await revertToPublished();\n setHasUnsavedChanges(false);\n } catch (err) {\n console.error('[ContentManagerRouter] revert error:', err);\n }\n }, [revertToPublished]);\n\n const handleApplyVersion = useCallback(async () => {\n const versionData = versionHistory.previewData;\n if (!versionData) return;\n setIsApplyingVersion(true);\n try {\n await saveDraft(versionData);\n setHasUnsavedChanges(false);\n versionHistory.clearSelection();\n } catch (err) {\n console.error('[ContentManagerRouter] apply version error:', err);\n } finally {\n setIsApplyingVersion(false);\n }\n }, [versionHistory, saveDraft]);\n\n const contentConfig = useMemo((): Config => {\n const otherRootFields = Object.fromEntries(\n Object.entries(config.root?.fields ?? {}).filter(([k]) => k !== 'title')\n );\n return {\n ...config,\n root: {\n ...config.root,\n fields: {\n title: { type: 'text', label: 'Content Title' },\n slot: { type: 'text', label: 'Slot' },\n ...otherRootFields,\n },\n defaultProps: {\n title: 'New Content',\n slot: '',\n ...config.root?.defaultProps,\n },\n },\n };\n }, [config]);\n\n if (loading) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100vh' }}>\n <Spacings.Stack scale=\"m\" alignItems=\"center\">\n <LoadingSpinner />\n <Text.Body tone=\"secondary\">Loading editor…</Text.Body>\n </Spacings.Stack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text.Body tone=\"negative\"><strong>Error loading content:</strong> {error}</Text.Body>\n </div>\n );\n }\n\n const activeData: PuckData = versionHistory.previewData ?? currentData;\n const toolbarStates = states as unknown as Parameters<typeof EditorToolbar>[0]['states'];\n\n return (\n <VersionHistoryProvider\n diff={diff}\n isPreviewingHistory={versionHistory.isPreviewingHistory}\n versions={versions as PuckContentVersionEntry[]}\n isLoadingVersions={versionHistory.isLoadingVersions}\n selectedVersionId={versionHistory.selectedVersionId}\n isApplying={isApplyingVersion}\n onVersionSelect={versionHistory.selectVersion}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n onLoadVersions={versionHistory.openPanel}\n >\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text.Body tone=\"secondary\">/</Text.Body>}\n <FlatButton\n label=\"Content Items\"\n icon={<AngleLeftIcon />}\n iconPosition=\"left\"\n onClick={() => history.push('/')}\n />\n <Text.Body tone=\"secondary\">/</Text.Body>\n <Text.Body fontWeight=\"bold\">{contentName}</Text.Body>\n </div>\n <div style={{ flex: 1, overflow: 'hidden' }}>\n <ComponentSearchProvider>\n <Puck\n key={versionHistory.selectedVersionId ?? 'current'}\n config={contentConfig}\n data={activeData as Data}\n onChange={handleChange}\n onPublish={handlePublish}\n overrides={{\n headerActions: () =>\n versionHistory.isPreviewingHistory ? (\n <Spacings.Inline scale=\"s\" alignItems=\"center\">\n <VersionPreviewBanner\n timestamp={versionHistory.selectedVersion!.timestamp}\n onApply={() => void handleApplyVersion()}\n onDiscard={versionHistory.clearSelection}\n isApplying={isApplyingVersion}\n />\n <VersionHistoryButton disabled={isApplyingVersion} />\n </Spacings.Inline>\n ) : (\n <EditorToolbar\n saving={saving}\n isDirty={hasUnsavedChanges}\n states={toolbarStates}\n onSave={() => void handleSave()}\n onPublish={() => void handlePublish(activeData as Data)}\n onRevert={() => void handleRevert()}\n showPublishButton\n />\n ),\n components: ({ children }) => <ComponentsPanel>{children}</ComponentsPanel>,\n componentItem: ({ children, name }) => (\n <ComponentItemFilter name={name}>{children}</ComponentItemFilter>\n ),\n fields: ({ children, isLoading }) => (\n <VersionAwareFieldsPanel isLoading={isLoading}>\n {children}\n </VersionAwareFieldsPanel>\n ),\n }}\n />\n </ComponentSearchProvider>\n </div>\n </div>\n </VersionHistoryProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Inner router component\n// ---------------------------------------------------------------------------\n\ninterface ContentManagerRouterInnerProps {\n config: Config;\n defaultContentType?: string;\n backButton?: ReactNode;\n}\n\nconst ContentManagerRouterInner: React.FC<ContentManagerRouterInnerProps> = ({\n config,\n defaultContentType,\n backButton,\n}) => (\n <Switch>\n <Route\n exact\n path=\"/\"\n render={() => (\n <ContentListRoute defaultContentType={defaultContentType} backButton={backButton} />\n )}\n />\n <Route\n path=\"/:contentKey\"\n render={() => <ContentEditorRoute config={config} backButton={backButton} />}\n />\n </Switch>\n);\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface ContentManagerProps {\n /** URL path where this manager is mounted, e.g. \"/content\" — used as router basename */\n parentUrl: string;\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n /** Puck component config — must match what's used in the renderer. Defaults to defaultPuckConfig. */\n config?: Config;\n defaultContentType?: string;\n /** Optional element rendered before the breadcrumb in the editor header */\n backButton?: ReactNode;\n}\n\nexport const ContentManager: React.FC<ContentManagerProps> = ({\n parentUrl,\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n config = DEFAULT_CONFIG,\n defaultContentType,\n backButton,\n}) => (\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <BrowserRouter basename={parentUrl}>\n <ContentManagerRouterInner\n config={config}\n defaultContentType={defaultContentType}\n backButton={backButton}\n />\n </BrowserRouter>\n </PuckApiProvider>\n </EnsureIntlProvider>\n);\n"],"mappings":"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","names":["import_react","import_jsx_runtime","Spacings","Text","PrimaryButton","Card","Label","TextInput","SecondaryButton","FlatButton","LoadingSpinner","DataTable","Stamp","import_react","import_puck","import_puck_api","import_loading_spinner","import_text","import_spacings","import_jsx_runtime","Spacings","LoadingSpinner","Text","import_react","import_puck","import_puck_editor","import_puck_version_history","import_puck_api","import_data_table","import_primary_button","import_secondary_button","import_flat_button","import_card","import_spacings","import_text","import_loading_spinner","import_text_input","import_label","import_stamp","import_icons","import_jsx_runtime","Spacings","Text","PrimaryButton","Card","Label","TextInput","SecondaryButton","FlatButton","LoadingSpinner","DataTable","Stamp"]}
|