@commercetools-demo/puck-page-manager 0.6.0 → 0.6.1

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 CHANGED
@@ -56,12 +56,24 @@ var EnsureIntlProvider = ({ children }) => {
56
56
  };
57
57
 
58
58
  // src/EnsureNimbusProvider.tsx
59
+ var import_styled_system = require("@chakra-ui/react/styled-system");
59
60
  var import_nimbus = require("@commercetools/nimbus");
60
61
  var import_jsx_runtime2 = require("react/jsx-runtime");
62
+ var SCOPED_SYSTEM_KEY = /* @__PURE__ */ Symbol.for(
63
+ "@commercetools-demo/puck:nimbus-scoped-system"
64
+ );
65
+ var globalScope = globalThis;
66
+ var scopedSystem = globalScope[SCOPED_SYSTEM_KEY] ?? (globalScope[SCOPED_SYSTEM_KEY] = (0, import_styled_system.createSystem)({
67
+ // `_config` is the fully-merged Nimbus + Chakra config used to build the
68
+ // stock system; reusing it keeps all Nimbus theming intact.
69
+ ...import_nimbus.system._config,
70
+ preflight: false,
71
+ globalCss: {}
72
+ }));
61
73
  var EnsureNimbusProvider = ({
62
74
  locale = "en",
63
75
  children
64
- }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_nimbus.NimbusProvider, { locale, children });
76
+ }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_styled_system.ChakraProvider, { value: scopedSystem, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_nimbus.NimbusI18nProvider, { locale, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_nimbus._RegionProvider, { children }) }) });
65
77
 
66
78
  // src/PageManager.tsx
67
79
  var import_nimbus2 = require("@commercetools/nimbus");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/PageManager.tsx","../src/EnsureIntlProvider.tsx","../src/EnsureNimbusProvider.tsx"],"sourcesContent":["export { PageManager } from './PageManager';\nexport type { PageManagerProps } from './PageManager';\n","import React, { useCallback, useState, type ReactNode } from 'react';\nimport {\n BrowserRouter,\n Switch,\n Route,\n useHistory,\n useParams,\n useLocation,\n} from 'react-router-dom';\nimport {\n PuckApiProvider,\n usePuckPages,\n usePuckTemplates,\n usePuckApiContext,\n} from '@commercetools-demo/puck-api';\nimport {\n PropertiesResizer,\n PuckEditor,\n UnsavedChangesDialog,\n defaultPuckConfig,\n} from '@commercetools-demo/puck-editor';\nimport { PuckRenderer } from '@commercetools-demo/puck-renderer';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\nimport { EnsureNimbusProvider } from './EnsureNimbusProvider';\n\nconst DEFAULT_CONFIG: Config = {\n ...defaultPuckConfig,\n components: { ...defaultPuckConfig.components },\n};\nimport type { Config } from '@measured/puck';\nimport type { CreatePuckPageInput, PuckPageListItem } from '@commercetools-demo/puck-types';\nimport {\n Badge,\n Button,\n Card,\n DataTable,\n Dialog,\n FormField,\n Icon,\n IconButton,\n LoadingSpinner,\n Select,\n Stack,\n Text,\n TextInput,\n type DataTableColumnItem,\n} from '@commercetools/nimbus';\nimport {\n Add,\n ChevronLeft,\n Close,\n Delete,\n Edit,\n Visibility,\n} from '@commercetools/nimbus-icons';\n\n// ---------------------------------------------------------------------------\n// Status badge\n// ---------------------------------------------------------------------------\n\nconst STATUS_BADGE: Record<\n 'draft' | 'published' | 'none',\n { colorPalette: 'warning' | 'positive' | 'neutral'; label: string }\n> = {\n draft: { colorPalette: 'warning', label: 'Draft' },\n published: { colorPalette: 'positive', label: 'Published' },\n none: { colorPalette: 'neutral', label: 'No state' },\n};\n\nconst StatusBadge: React.FC<{ variant: 'draft' | 'published' | 'none' }> = ({ variant }) => {\n const meta = STATUS_BADGE[variant];\n return <Badge colorPalette={meta.colorPalette} size=\"xs\">{meta.label}</Badge>;\n};\n\n// ---------------------------------------------------------------------------\n// Shared 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, #e0e0e0)',\n zIndex: 200,\n flexShrink: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Table row type\n// ---------------------------------------------------------------------------\n\ntype PageRow = PuckPageListItem & { id: string; [key: string]: unknown };\n\n// ---------------------------------------------------------------------------\n// PageList route\n// ---------------------------------------------------------------------------\n\ninterface PageListProps {\n backButton?: ReactNode;\n}\n\nconst PageList: React.FC<PageListProps> = ({ backButton }) => {\n const history = useHistory();\n const { pages, loading, error, createPage, deletePage, refresh } = usePuckPages();\n const { templates } = usePuckTemplates('page');\n\n const [creating, setCreating] = useState(false);\n const [newName, setNewName] = useState('');\n const [newSlug, setNewSlug] = useState('');\n // Selected template for the new page ('' = Empty, today's behaviour).\n const [templateKey, setTemplateKey] = useState('');\n const [formError, setFormError] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n // Page targeted by the (Nimbus) delete-confirmation dialog.\n const [pendingDelete, setPendingDelete] = useState<PuckPageListItem | null>(null);\n // Free-text filter over page name / slug.\n const [search, setSearch] = useState('');\n\n const handleCreate = async () => {\n if (!newName.trim()) { setFormError('Name is required'); return; }\n if (!newSlug.trim()) { setFormError('Slug is required'); return; }\n setFormError('');\n setSubmitting(true);\n try {\n const input: CreatePuckPageInput = {\n name: newName.trim(),\n slug: newSlug.trim().startsWith('/') ? newSlug.trim() : `/${newSlug.trim()}`,\n };\n // Seed from the selected template (Empty leaves puckData unset).\n if (templateKey) {\n const template = templates.find((t) => t.key === templateKey);\n if (template) input.puckData = template.value.puckData;\n }\n const created = await createPage(input);\n setCreating(false);\n setNewName('');\n setNewSlug('');\n setTemplateKey('');\n history.push(`/${created.key}/edit`, { pageName: created.value.name });\n } catch (err) {\n setFormError((err as Error).message);\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleDelete = async (page: PuckPageListItem) => {\n setDeleting(page.key);\n try {\n await deletePage(page.key);\n await refresh();\n setPendingDelete(null);\n } finally {\n setDeleting(null);\n }\n };\n\n if (loading) {\n return (\n <div style={{ padding: '64px', display: 'flex', justifyContent: 'center' }}>\n <LoadingSpinner />\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text color=\"critical.11\">Error: {error}</Text>\n </div>\n );\n }\n\n const term = search.trim().toLowerCase();\n const filteredPages = term\n ? pages.filter(\n (p: PuckPageListItem) =>\n p.value.name.toLowerCase().includes(term) ||\n p.value.slug.toLowerCase().includes(term)\n )\n : pages;\n\n const rows: PageRow[] = filteredPages.map((p: PuckPageListItem) => ({ ...p, id: p.key }));\n\n const columns: DataTableColumnItem<PageRow>[] = [\n {\n id: 'name',\n header: 'Name',\n accessor: (row) => row.value.name,\n render: ({ row }) => <Text fontWeight=\"bold\">{row.value.name}</Text>,\n },\n {\n id: 'slug',\n header: 'Slug',\n accessor: (row) => row.value.slug,\n render: ({ row }) => (\n <code\n style={{\n background: '#f4f4f4',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'monospace',\n }}\n >\n {row.value.slug}\n </code>\n ),\n },\n {\n id: 'status',\n header: 'Status',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" wrap=\"wrap\">\n {row.states.draft && <StatusBadge variant=\"draft\" />}\n {row.states.published && <StatusBadge variant=\"published\" />}\n {!row.states.draft && !row.states.published && <StatusBadge variant=\"none\" />}\n </Stack>\n ),\n },\n {\n id: 'updatedAt',\n header: 'Updated',\n accessor: (row) => row.value.updatedAt,\n render: ({ row }) => (\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {new Date(row.value.updatedAt).toLocaleString()}\n </Text>\n ),\n },\n {\n id: 'actions',\n header: 'Actions',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" alignItems=\"center\">\n <IconButton\n aria-label={`Edit ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/edit`, { pageName: row.value.name })}\n >\n <Edit />\n </IconButton>\n <IconButton\n aria-label={`Preview ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/preview`, { pageName: row.value.name })}\n >\n <Visibility />\n </IconButton>\n <IconButton\n aria-label={`Delete ${row.value.name}`}\n variant=\"ghost\"\n colorPalette=\"critical\"\n size=\"xs\"\n isDisabled={deleting === row.key}\n onPress={() => setPendingDelete(row)}\n >\n <Delete />\n </IconButton>\n </Stack>\n ),\n },\n ];\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Stack direction=\"column\" gap=\"600\">\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n {backButton}\n <Text as=\"h1\" fontSize=\"2xl\" fontWeight=\"700\">Pages</Text>\n </Stack>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> New Page\n </Button>\n </Stack>\n\n {creating && (\n <Card.Root variant=\"outlined\">\n <Card.Body>\n <Stack direction=\"column\" gap=\"400\">\n <Text as=\"h4\" fontSize=\"xl\" fontWeight=\"700\">Create New Page</Text>\n <Stack direction=\"row\" gap=\"400\">\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Name</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newName}\n onChange={(v) => setNewName(v)}\n placeholder=\"Home Page\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Slug</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newSlug}\n onChange={(v) => setNewSlug(v)}\n placeholder=\"/home\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n </Stack>\n <FormField.Root>\n <FormField.Label>Template</FormField.Label>\n <FormField.Input>\n <Select.Root\n aria-label=\"Template\"\n selectedKey={templateKey || 'empty'}\n onSelectionChange={(key) =>\n setTemplateKey(key == null || key === 'empty' ? '' : String(key))\n }\n >\n <Select.Options>\n <Select.Option id=\"empty\">Empty</Select.Option>\n {templates.map((t) => (\n <Select.Option key={t.key} id={t.key}>\n {t.value.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n </FormField.Input>\n </FormField.Root>\n {formError && <Text color=\"critical.11\">{formError}</Text>}\n <Stack direction=\"row\" gap=\"200\">\n <Button variant=\"solid\" onPress={() => void handleCreate()} isDisabled={submitting}>\n {submitting ? 'Creating…' : 'Create'}\n </Button>\n <Button\n variant=\"outline\"\n onPress={() => { setCreating(false); setFormError(''); }}\n >\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Card.Body>\n </Card.Root>\n )}\n\n {pages.length === 0 && !creating ? (\n <Stack direction=\"column\" gap=\"400\" alignItems=\"center\">\n <Text color=\"neutral.11\">No pages yet.</Text>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> Create first page\n </Button>\n </Stack>\n ) : pages.length > 0 ? (\n <Stack direction=\"column\" gap=\"400\">\n {/* Search by name or path */}\n <div style={{ maxWidth: 360 }}>\n <TextInput\n aria-label=\"Search pages\"\n placeholder=\"Search by name or path…\"\n value={search}\n onChange={(v) => setSearch(v)}\n width=\"100%\"\n trailingElement={\n search !== '' ? (\n <IconButton\n aria-label=\"Clear search\"\n variant=\"ghost\"\n colorPalette=\"neutral\"\n size=\"2xs\"\n onPress={() => setSearch('')}\n >\n <Close />\n </IconButton>\n ) : undefined\n }\n />\n </div>\n {/* DataTable always renders an internal \"pin rows\" column with no\n public prop to disable it — hide it (header + body cells) for\n this list only. The table uses table-layout:fixed, so the column\n collapses cleanly. */}\n <div className=\"puck-page-list\">\n <style>{`\n .puck-page-list .pin-rows-column-header,\n .puck-page-list [data-slot=\"pin-row-cell\"] { display: none !important; }\n `}</style>\n <DataTable columns={columns} rows={rows} aria-label=\"Pages\" />\n </div>\n </Stack>\n ) : null}\n </Stack>\n\n {/* Delete confirmation (Nimbus) */}\n <Dialog.Root\n isOpen={pendingDelete !== null}\n onOpenChange={(open) => {\n if (!open) setPendingDelete(null);\n }}\n >\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>Delete page?</Dialog.Title>\n <Dialog.CloseTrigger />\n </Dialog.Header>\n <Dialog.Body>\n <Text>\n Are you sure you want to delete{' '}\n <Text as=\"span\" fontWeight=\"700\">\n {pendingDelete?.value.name}\n </Text>\n ? This cannot be undone.\n </Text>\n </Dialog.Body>\n <Dialog.Footer>\n <Button slot=\"close\" variant=\"outline\" isDisabled={deleting !== null}>\n Cancel\n </Button>\n <Button\n colorPalette=\"critical\"\n isDisabled={deleting !== null}\n onPress={() => {\n if (pendingDelete) void handleDelete(pendingDelete);\n }}\n >\n {deleting !== null ? 'Deleting…' : 'Delete'}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PageEditorRoute\n// ---------------------------------------------------------------------------\n\ninterface RouteProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageEditorRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const { baseURL, projectKey, businessUnitKey, jwtToken, locale } = usePuckApiContext();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n // Unsaved-changes navigation guard. `pendingNav` holds the deferred\n // navigation until the user confirms in the Nimbus dialog.\n const [isDirty, setIsDirty] = useState(false);\n const [pendingNav, setPendingNav] = useState<(() => void) | null>(null);\n\n const guardedNavigate = useCallback(\n (navFn: () => void) => {\n if (isDirty) {\n setPendingNav(() => navFn);\n } else {\n navFn();\n }\n },\n [isDirty]\n );\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button\n variant=\"ghost\"\n onPress={() => guardedNavigate(() => history.push('/'))}\n >\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n </div>\n <div className=\"puck-editor-fill\" style={{ flex: 1, overflow: 'hidden' }}>\n <PuckEditor\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken ?? ''}\n locale={locale}\n pageKey={pageKey!}\n config={config}\n onDirtyChange={setIsDirty}\n onPreview={() =>\n guardedNavigate(() =>\n history.push(`/${pageKey}/preview`, { pageName })\n )\n }\n onError={(err: Error) => { console.error('[PageManager] editor error:', err); }}\n />\n <PropertiesResizer />\n </div>\n <UnsavedChangesDialog\n isOpen={pendingNav !== null}\n onOpenChange={(open) => {\n if (!open) setPendingNav(null);\n }}\n onConfirm={() => pendingNav?.()}\n />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PagePreviewRoute\n// ---------------------------------------------------------------------------\n\nconst PagePreviewRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n return (\n <div>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button variant=\"ghost\" onPress={() => history.push('/')}>\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n <Badge colorPalette=\"primary\" size=\"xs\">Preview</Badge>\n <div style={{ marginLeft: 'auto' }}>\n <Button variant=\"outline\" size=\"xs\" onPress={() => history.goBack()}>\n <Icon as={Close} /> Close preview\n </Button>\n </div>\n </div>\n <PuckRenderer pageKey={pageKey} mode=\"preview\" config={config} />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Inner router component\n// ---------------------------------------------------------------------------\n\ninterface PageManagerInnerProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageManagerInner: React.FC<PageManagerInnerProps> = ({ config, backButton }) => (\n <Switch>\n <Route exact path=\"/\" render={() => <PageList backButton={backButton} />} />\n <Route\n path=\"/:pageKey/edit\"\n render={() => <PageEditorRoute config={config} backButton={backButton} />}\n />\n <Route\n path=\"/:pageKey/preview\"\n render={() => <PagePreviewRoute config={config} backButton={backButton} />}\n />\n </Switch>\n);\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface PageManagerProps {\n /** URL path where this manager is mounted, e.g. \"/pages\" — used as router basename */\n parentUrl: string;\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n /** Content locale (e.g. \"en-US\") used for locale-aware calls like product search */\n locale?: string;\n /** Puck component config — passed to editor and preview. Defaults to defaultPuckConfig. */\n config?: Config;\n /** Optional element rendered before the breadcrumb in editor/preview headers */\n backButton?: ReactNode;\n}\n\nexport const PageManager: React.FC<PageManagerProps> = ({\n parentUrl,\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n locale,\n config = DEFAULT_CONFIG,\n backButton,\n}) => (\n <EnsureNimbusProvider locale={locale}>\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n locale={locale}\n >\n <BrowserRouter basename={parentUrl}>\n <PageManagerInner config={config} backButton={backButton} />\n </BrowserRouter>\n </PuckApiProvider>\n </EnsureIntlProvider>\n </EnsureNimbusProvider>\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, { type PropsWithChildren } from 'react';\nimport { NimbusProvider } from '@commercetools/nimbus';\n\n/**\n * Ensures a Nimbus context (theme + Chakra + React Aria i18n) exists for the\n * Nimbus components rendered by this package.\n *\n * NimbusProvider is safe to nest: locale overrides the nearest ancestor, color\n * mode is global, and the Inter font links are deduplicated across instances.\n */\nexport const EnsureNimbusProvider: React.FC<PropsWithChildren<{ locale?: string }>> = ({\n locale = 'en',\n children,\n}) => <NimbusProvider locale={locale}>{children}</NimbusProvider>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA6D;AAC7D,8BAOO;AACP,sBAKO;AACP,yBAKO;AACP,2BAA6B;;;ACrB7B,mBAA0D;AAC1D,wBAA8D;AAmBnD;AAJJ,IAAM,qBAAkD,CAAC,EAAE,SAAS,MAAM;AAC/E,QAAM,WAAO,yBAAW,6BAAW;AAEnC,MAAI,MAAM;AACR,WAAO,2EAAG,UAAS;AAAA,EACrB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP,eAAc;AAAA,MACd,UAAU,CAAC;AAAA,MACX,SAAS,CAAC,QAAQ;AAGhB,YAAI,IAAI,SAAS,qCAAmB,oBAAqB;AAEzD,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACtCA,oBAA+B;AAYzB,IAAAC,sBAAA;AAHC,IAAM,uBAAyE,CAAC;AAAA,EACrF,SAAS;AAAA,EACT;AACF,MAAM,6CAAC,gCAAe,QAAiB,UAAS;;;AFkBhD,IAAAC,iBAeO;AACP,0BAOO;AAiBE,IAAAC,sBAAA;AA9CT,IAAM,iBAAyB;AAAA,EAC7B,GAAG;AAAA,EACH,YAAY,EAAE,GAAG,qCAAkB,WAAW;AAChD;AAgCA,IAAM,eAGF;AAAA,EACF,OAAO,EAAE,cAAc,WAAW,OAAO,QAAQ;AAAA,EACjD,WAAW,EAAE,cAAc,YAAY,OAAO,YAAY;AAAA,EAC1D,MAAM,EAAE,cAAc,WAAW,OAAO,WAAW;AACrD;AAEA,IAAM,cAAqE,CAAC,EAAE,QAAQ,MAAM;AAC1F,QAAM,OAAO,aAAa,OAAO;AACjC,SAAO,6CAAC,wBAAM,cAAc,KAAK,cAAc,MAAK,MAAM,eAAK,OAAM;AACvE;AAMA,IAAM,gBAAqC;AAAA,EACzC,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AACd;AAgBA,IAAM,WAAoC,CAAC,EAAE,WAAW,MAAM;AAC5D,QAAM,cAAU,oCAAW;AAC3B,QAAM,EAAE,OAAO,SAAS,OAAO,YAAY,YAAY,QAAQ,QAAI,8BAAa;AAChF,QAAM,EAAE,UAAU,QAAI,kCAAiB,MAAM;AAE7C,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,KAAK;AAC9C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,EAAE;AAEzC,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,EAAE;AACjD,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,EAAE;AAC7C,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAwB,IAAI;AAE5D,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAkC,IAAI;AAEhF,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,EAAE;AAEvC,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,QAAQ,KAAK,GAAG;AAAE,mBAAa,kBAAkB;AAAG;AAAA,IAAQ;AACjE,QAAI,CAAC,QAAQ,KAAK,GAAG;AAAE,mBAAa,kBAAkB;AAAG;AAAA,IAAQ;AACjE,iBAAa,EAAE;AACf,kBAAc,IAAI;AAClB,QAAI;AACF,YAAM,QAA6B;AAAA,QACjC,MAAM,QAAQ,KAAK;AAAA,QACnB,MAAM,QAAQ,KAAK,EAAE,WAAW,GAAG,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,CAAC;AAAA,MAC5E;AAEA,UAAI,aAAa;AACf,cAAM,WAAW,UAAU,KAAK,CAAC,MAAM,EAAE,QAAQ,WAAW;AAC5D,YAAI,SAAU,OAAM,WAAW,SAAS,MAAM;AAAA,MAChD;AACA,YAAM,UAAU,MAAM,WAAW,KAAK;AACtC,kBAAY,KAAK;AACjB,iBAAW,EAAE;AACb,iBAAW,EAAE;AACb,qBAAe,EAAE;AACjB,cAAQ,KAAK,IAAI,QAAQ,GAAG,SAAS,EAAE,UAAU,QAAQ,MAAM,KAAK,CAAC;AAAA,IACvE,SAAS,KAAK;AACZ,mBAAc,IAAc,OAAO;AAAA,IACrC,UAAE;AACA,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,SAA2B;AACrD,gBAAY,KAAK,GAAG;AACpB,QAAI;AACF,YAAM,WAAW,KAAK,GAAG;AACzB,YAAM,QAAQ;AACd,uBAAiB,IAAI;AAAA,IACvB,UAAE;AACA,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,MAAI,SAAS;AACX,WACE,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,SAAS,QAAQ,gBAAgB,SAAS,GACvE,uDAAC,iCAAe,GAClB;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,6CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC5B,wDAAC,uBAAK,OAAM,eAAc;AAAA;AAAA,MAAQ;AAAA,OAAM,GAC1C;AAAA,EAEJ;AAEA,QAAM,OAAO,OAAO,KAAK,EAAE,YAAY;AACvC,QAAM,gBAAgB,OAClB,MAAM;AAAA,IACJ,CAAC,MACC,EAAE,MAAM,KAAK,YAAY,EAAE,SAAS,IAAI,KACxC,EAAE,MAAM,KAAK,YAAY,EAAE,SAAS,IAAI;AAAA,EAC5C,IACA;AAEJ,QAAM,OAAkB,cAAc,IAAI,CAAC,OAAyB,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE;AAExF,QAAM,UAA0C;AAAA,IAC9C;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU,CAAC,QAAQ,IAAI,MAAM;AAAA,MAC7B,QAAQ,CAAC,EAAE,IAAI,MAAM,6CAAC,uBAAK,YAAW,QAAQ,cAAI,MAAM,MAAK;AAAA,IAC/D;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU,CAAC,QAAQ,IAAI,MAAM;AAAA,MAC7B,QAAQ,CAAC,EAAE,IAAI,MACb;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,SAAS;AAAA,YACT,cAAc;AAAA,YACd,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEC,cAAI,MAAM;AAAA;AAAA,MACb;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,IAAI,MACb,8CAAC,wBAAM,WAAU,OAAM,KAAI,OAAM,MAAK,QACnC;AAAA,YAAI,OAAO,SAAS,6CAAC,eAAY,SAAQ,SAAQ;AAAA,QACjD,IAAI,OAAO,aAAa,6CAAC,eAAY,SAAQ,aAAY;AAAA,QACzD,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,OAAO,aAAa,6CAAC,eAAY,SAAQ,QAAO;AAAA,SAC7E;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU,CAAC,QAAQ,IAAI,MAAM;AAAA,MAC7B,QAAQ,CAAC,EAAE,IAAI,MACb,6CAAC,uBAAK,UAAS,MAAK,OAAM,cACvB,cAAI,KAAK,IAAI,MAAM,SAAS,EAAE,eAAe,GAChD;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,IAAI,MACb,8CAAC,wBAAM,WAAU,OAAM,KAAI,OAAM,YAAW,UAC1C;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY,QAAQ,IAAI,MAAM,IAAI;AAAA,YAClC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS,MAAM,QAAQ,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,YAE5E,uDAAC,4BAAK;AAAA;AAAA,QACR;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY,WAAW,IAAI,MAAM,IAAI;AAAA,YACrC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS,MAAM,QAAQ,KAAK,IAAI,IAAI,GAAG,YAAY,EAAE,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,YAE/E,uDAAC,kCAAW;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY,UAAU,IAAI,MAAM,IAAI;AAAA,YACpC,SAAQ;AAAA,YACR,cAAa;AAAA,YACb,MAAK;AAAA,YACL,YAAY,aAAa,IAAI;AAAA,YAC7B,SAAS,MAAM,iBAAiB,GAAG;AAAA,YAEnC,uDAAC,8BAAO;AAAA;AAAA,QACV;AAAA,SACF;AAAA,IAEJ;AAAA,EACF;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,UAAU,UAAU,QAAQ,UAAU,SAAS,YAAY,GACvE;AAAA,kDAAC,wBAAM,WAAU,UAAS,KAAI,OAC5B;AAAA,oDAAC,wBAAM,WAAU,OAAM,gBAAe,iBAAgB,YAAW,UAC/D;AAAA,sDAAC,wBAAM,WAAU,OAAM,KAAI,OAAM,YAAW,UACzC;AAAA;AAAA,UACD,6CAAC,uBAAK,IAAG,MAAK,UAAS,OAAM,YAAW,OAAM,mBAAK;AAAA,WACrD;AAAA,QACA,8CAAC,yBAAO,SAAQ,SAAQ,SAAS,MAAM,YAAY,IAAI,GACrD;AAAA,uDAAC,uBAAK,IAAI,yBAAK;AAAA,UAAE;AAAA,WACnB;AAAA,SACF;AAAA,MAEC,YACC,6CAAC,oBAAK,MAAL,EAAU,SAAQ,YACjB,uDAAC,oBAAK,MAAL,EACC,wDAAC,wBAAM,WAAU,UAAS,KAAI,OAC5B;AAAA,qDAAC,uBAAK,IAAG,MAAK,UAAS,MAAK,YAAW,OAAM,6BAAe;AAAA,QAC5D,8CAAC,wBAAM,WAAU,OAAM,KAAI,OACzB;AAAA,uDAAC,SAAI,OAAO,EAAE,MAAM,EAAE,GACpB,wDAAC,yBAAU,MAAV,EAAe,YAAU,MACxB;AAAA,yDAAC,yBAAU,OAAV,EAAgB,kBAAI;AAAA,YACrB,6CAAC,yBAAU,OAAV,EACC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,WAAW,CAAC;AAAA,gBAC7B,aAAY;AAAA;AAAA,YACd,GACF;AAAA,aACF,GACF;AAAA,UACA,6CAAC,SAAI,OAAO,EAAE,MAAM,EAAE,GACpB,wDAAC,yBAAU,MAAV,EAAe,YAAU,MACxB;AAAA,yDAAC,yBAAU,OAAV,EAAgB,kBAAI;AAAA,YACrB,6CAAC,yBAAU,OAAV,EACC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,WAAW,CAAC;AAAA,gBAC7B,aAAY;AAAA;AAAA,YACd,GACF;AAAA,aACF,GACF;AAAA,WACF;AAAA,QACA,8CAAC,yBAAU,MAAV,EACC;AAAA,uDAAC,yBAAU,OAAV,EAAgB,sBAAQ;AAAA,UACzB,6CAAC,yBAAU,OAAV,EACC;AAAA,YAAC,sBAAO;AAAA,YAAP;AAAA,cACC,cAAW;AAAA,cACX,aAAa,eAAe;AAAA,cAC5B,mBAAmB,CAAC,QAClB,eAAe,OAAO,QAAQ,QAAQ,UAAU,KAAK,OAAO,GAAG,CAAC;AAAA,cAGlE,wDAAC,sBAAO,SAAP,EACC;AAAA,6DAAC,sBAAO,QAAP,EAAc,IAAG,SAAQ,mBAAK;AAAA,gBAC9B,UAAU,IAAI,CAAC,MACd,6CAAC,sBAAO,QAAP,EAA0B,IAAI,EAAE,KAC9B,YAAE,MAAM,QADS,EAAE,GAEtB,CACD;AAAA,iBACH;AAAA;AAAA,UACF,GACF;AAAA,WACF;AAAA,QACC,aAAa,6CAAC,uBAAK,OAAM,eAAe,qBAAU;AAAA,QACnD,8CAAC,wBAAM,WAAU,OAAM,KAAI,OACzB;AAAA,uDAAC,yBAAO,SAAQ,SAAQ,SAAS,MAAM,KAAK,aAAa,GAAG,YAAY,YACrE,uBAAa,mBAAc,UAC9B;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM;AAAE,4BAAY,KAAK;AAAG,6BAAa,EAAE;AAAA,cAAG;AAAA,cACxD;AAAA;AAAA,UAED;AAAA,WACF;AAAA,SACF,GACF,GACF;AAAA,MAGD,MAAM,WAAW,KAAK,CAAC,WACtB,8CAAC,wBAAM,WAAU,UAAS,KAAI,OAAM,YAAW,UAC7C;AAAA,qDAAC,uBAAK,OAAM,cAAa,2BAAa;AAAA,QACtC,8CAAC,yBAAO,SAAQ,SAAQ,SAAS,MAAM,YAAY,IAAI,GACrD;AAAA,uDAAC,uBAAK,IAAI,yBAAK;AAAA,UAAE;AAAA,WACnB;AAAA,SACF,IACE,MAAM,SAAS,IACjB,8CAAC,wBAAM,WAAU,UAAS,KAAI,OAE5B;AAAA,qDAAC,SAAI,OAAO,EAAE,UAAU,IAAI,GAC1B;AAAA,UAAC;AAAA;AAAA,YACC,cAAW;AAAA,YACX,aAAY;AAAA,YACZ,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,UAAU,CAAC;AAAA,YAC5B,OAAM;AAAA,YACN,iBACE,WAAW,KACT;AAAA,cAAC;AAAA;AAAA,gBACC,cAAW;AAAA,gBACX,SAAQ;AAAA,gBACR,cAAa;AAAA,gBACb,MAAK;AAAA,gBACL,SAAS,MAAM,UAAU,EAAE;AAAA,gBAE3B,uDAAC,6BAAM;AAAA;AAAA,YACT,IACE;AAAA;AAAA,QAER,GACF;AAAA,QAKA,8CAAC,SAAI,WAAU,kBACb;AAAA,uDAAC,WAAO;AAAA;AAAA;AAAA,iBAGN;AAAA,UACF,6CAAC,4BAAU,SAAkB,MAAY,cAAW,SAAQ;AAAA,WAC9D;AAAA,SACF,IACE;AAAA,OACN;AAAA,IAGA;AAAA,MAAC,sBAAO;AAAA,MAAP;AAAA,QACC,QAAQ,kBAAkB;AAAA,QAC1B,cAAc,CAAC,SAAS;AACtB,cAAI,CAAC,KAAM,kBAAiB,IAAI;AAAA,QAClC;AAAA,QAEA,wDAAC,sBAAO,SAAP,EACC;AAAA,wDAAC,sBAAO,QAAP,EACC;AAAA,yDAAC,sBAAO,OAAP,EAAa,0BAAY;AAAA,YAC1B,6CAAC,sBAAO,cAAP,EAAoB;AAAA,aACvB;AAAA,UACA,6CAAC,sBAAO,MAAP,EACC,wDAAC,uBAAK;AAAA;AAAA,YAC4B;AAAA,YAChC,6CAAC,uBAAK,IAAG,QAAO,YAAW,OACxB,yBAAe,MAAM,MACxB;AAAA,YAAO;AAAA,aAET,GACF;AAAA,UACA,8CAAC,sBAAO,QAAP,EACC;AAAA,yDAAC,yBAAO,MAAK,SAAQ,SAAQ,WAAU,YAAY,aAAa,MAAM,oBAEtE;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,cAAa;AAAA,gBACb,YAAY,aAAa;AAAA,gBACzB,SAAS,MAAM;AACb,sBAAI,cAAe,MAAK,aAAa,aAAa;AAAA,gBACpD;AAAA,gBAEC,uBAAa,OAAO,mBAAc;AAAA;AAAA,YACrC;AAAA,aACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAWA,IAAM,kBAAwC,CAAC,EAAE,QAAQ,WAAW,MAAM;AACxE,QAAM,EAAE,QAAQ,QAAI,mCAA+B;AACnD,QAAM,cAAU,oCAAW;AAC3B,QAAM,eAAW,qCAAY;AAC7B,QAAM,EAAE,SAAS,YAAY,iBAAiB,UAAU,OAAO,QAAI,mCAAkB;AACrF,QAAM,WACH,SAAS,OAAwC,YAAY,WAAW;AAI3E,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,YAAY,aAAa,QAAI,wBAA8B,IAAI;AAEtE,QAAM,sBAAkB;AAAA,IACtB,CAAC,UAAsB;AACrB,UAAI,SAAS;AACX,sBAAc,MAAM,KAAK;AAAA,MAC3B,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,QAAQ,OAAO,GACrE;AAAA,kDAAC,SAAI,OAAO,eACT;AAAA;AAAA,MACA,cAAc,6CAAC,uBAAK,OAAM,cAAa,eAAC;AAAA,MACzC;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAM,gBAAgB,MAAM,QAAQ,KAAK,GAAG,CAAC;AAAA,UAEtD;AAAA,yDAAC,uBAAK,IAAI,iCAAa;AAAA,YAAE;AAAA;AAAA;AAAA,MAC3B;AAAA,MACA,6CAAC,uBAAK,OAAM,cAAa,eAAC;AAAA,MAC1B,6CAAC,uBAAK,YAAW,QAAQ,oBAAS;AAAA,OACpC;AAAA,IACA,8CAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,MAAM,GAAG,UAAU,SAAS,GACrE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,YAAY;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAe;AAAA,UACf,WAAW,MACT;AAAA,YAAgB,MACd,QAAQ,KAAK,IAAI,OAAO,YAAY,EAAE,SAAS,CAAC;AAAA,UAClD;AAAA,UAEF,SAAS,CAAC,QAAe;AAAE,oBAAQ,MAAM,+BAA+B,GAAG;AAAA,UAAG;AAAA;AAAA,MAChF;AAAA,MACA,6CAAC,wCAAkB;AAAA,OACrB;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,eAAe;AAAA,QACvB,cAAc,CAAC,SAAS;AACtB,cAAI,CAAC,KAAM,eAAc,IAAI;AAAA,QAC/B;AAAA,QACA,WAAW,MAAM,aAAa;AAAA;AAAA,IAChC;AAAA,KACF;AAEJ;AAMA,IAAM,mBAAyC,CAAC,EAAE,QAAQ,WAAW,MAAM;AACzE,QAAM,EAAE,QAAQ,QAAI,mCAA+B;AACnD,QAAM,cAAU,oCAAW;AAC3B,QAAM,eAAW,qCAAY;AAC7B,QAAM,WACH,SAAS,OAAwC,YAAY,WAAW;AAE3E,SACE,8CAAC,SACC;AAAA,kDAAC,SAAI,OAAO,eACT;AAAA;AAAA,MACA,cAAc,6CAAC,uBAAK,OAAM,cAAa,eAAC;AAAA,MACzC,8CAAC,yBAAO,SAAQ,SAAQ,SAAS,MAAM,QAAQ,KAAK,GAAG,GACrD;AAAA,qDAAC,uBAAK,IAAI,iCAAa;AAAA,QAAE;AAAA,SAC3B;AAAA,MACA,6CAAC,uBAAK,OAAM,cAAa,eAAC;AAAA,MAC1B,6CAAC,uBAAK,YAAW,QAAQ,oBAAS;AAAA,MAClC,6CAAC,wBAAM,cAAa,WAAU,MAAK,MAAK,qBAAO;AAAA,MAC/C,6CAAC,SAAI,OAAO,EAAE,YAAY,OAAO,GAC/B,wDAAC,yBAAO,SAAQ,WAAU,MAAK,MAAK,SAAS,MAAM,QAAQ,OAAO,GAChE;AAAA,qDAAC,uBAAK,IAAI,2BAAO;AAAA,QAAE;AAAA,SACrB,GACF;AAAA,OACF;AAAA,IACA,6CAAC,qCAAa,SAAkB,MAAK,WAAU,QAAgB;AAAA,KACjE;AAEJ;AAWA,IAAM,mBAAoD,CAAC,EAAE,QAAQ,WAAW,MAC9E,8CAAC,kCACC;AAAA,+CAAC,iCAAM,OAAK,MAAC,MAAK,KAAI,QAAQ,MAAM,6CAAC,YAAS,YAAwB,GAAI;AAAA,EAC1E;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,QAAQ,MAAM,6CAAC,mBAAgB,QAAgB,YAAwB;AAAA;AAAA,EACzE;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,QAAQ,MAAM,6CAAC,oBAAiB,QAAgB,YAAwB;AAAA;AAAA,EAC1E;AAAA,GACF;AAsBK,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,MACE,6CAAC,wBAAqB,QACpB,uDAAC,sBACC;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,uDAAC,yCAAc,UAAU,WACvB,uDAAC,oBAAiB,QAAgB,YAAwB,GAC5D;AAAA;AACF,GACF,GACF;","names":["import_react","import_jsx_runtime","import_nimbus","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/PageManager.tsx","../src/EnsureIntlProvider.tsx","../src/EnsureNimbusProvider.tsx"],"sourcesContent":["export { PageManager } from './PageManager';\nexport type { PageManagerProps } from './PageManager';\n","import React, { useCallback, useState, type ReactNode } from 'react';\nimport {\n BrowserRouter,\n Switch,\n Route,\n useHistory,\n useParams,\n useLocation,\n} from 'react-router-dom';\nimport {\n PuckApiProvider,\n usePuckPages,\n usePuckTemplates,\n usePuckApiContext,\n} from '@commercetools-demo/puck-api';\nimport {\n PropertiesResizer,\n PuckEditor,\n UnsavedChangesDialog,\n defaultPuckConfig,\n} from '@commercetools-demo/puck-editor';\nimport { PuckRenderer } from '@commercetools-demo/puck-renderer';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\nimport { EnsureNimbusProvider } from './EnsureNimbusProvider';\n\nconst DEFAULT_CONFIG: Config = {\n ...defaultPuckConfig,\n components: { ...defaultPuckConfig.components },\n};\nimport type { Config } from '@measured/puck';\nimport type { CreatePuckPageInput, PuckPageListItem } from '@commercetools-demo/puck-types';\nimport {\n Badge,\n Button,\n Card,\n DataTable,\n Dialog,\n FormField,\n Icon,\n IconButton,\n LoadingSpinner,\n Select,\n Stack,\n Text,\n TextInput,\n type DataTableColumnItem,\n} from '@commercetools/nimbus';\nimport {\n Add,\n ChevronLeft,\n Close,\n Delete,\n Edit,\n Visibility,\n} from '@commercetools/nimbus-icons';\n\n// ---------------------------------------------------------------------------\n// Status badge\n// ---------------------------------------------------------------------------\n\nconst STATUS_BADGE: Record<\n 'draft' | 'published' | 'none',\n { colorPalette: 'warning' | 'positive' | 'neutral'; label: string }\n> = {\n draft: { colorPalette: 'warning', label: 'Draft' },\n published: { colorPalette: 'positive', label: 'Published' },\n none: { colorPalette: 'neutral', label: 'No state' },\n};\n\nconst StatusBadge: React.FC<{ variant: 'draft' | 'published' | 'none' }> = ({ variant }) => {\n const meta = STATUS_BADGE[variant];\n return <Badge colorPalette={meta.colorPalette} size=\"xs\">{meta.label}</Badge>;\n};\n\n// ---------------------------------------------------------------------------\n// Shared 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, #e0e0e0)',\n zIndex: 200,\n flexShrink: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Table row type\n// ---------------------------------------------------------------------------\n\ntype PageRow = PuckPageListItem & { id: string; [key: string]: unknown };\n\n// ---------------------------------------------------------------------------\n// PageList route\n// ---------------------------------------------------------------------------\n\ninterface PageListProps {\n backButton?: ReactNode;\n}\n\nconst PageList: React.FC<PageListProps> = ({ backButton }) => {\n const history = useHistory();\n const { pages, loading, error, createPage, deletePage, refresh } = usePuckPages();\n const { templates } = usePuckTemplates('page');\n\n const [creating, setCreating] = useState(false);\n const [newName, setNewName] = useState('');\n const [newSlug, setNewSlug] = useState('');\n // Selected template for the new page ('' = Empty, today's behaviour).\n const [templateKey, setTemplateKey] = useState('');\n const [formError, setFormError] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n // Page targeted by the (Nimbus) delete-confirmation dialog.\n const [pendingDelete, setPendingDelete] = useState<PuckPageListItem | null>(null);\n // Free-text filter over page name / slug.\n const [search, setSearch] = useState('');\n\n const handleCreate = async () => {\n if (!newName.trim()) { setFormError('Name is required'); return; }\n if (!newSlug.trim()) { setFormError('Slug is required'); return; }\n setFormError('');\n setSubmitting(true);\n try {\n const input: CreatePuckPageInput = {\n name: newName.trim(),\n slug: newSlug.trim().startsWith('/') ? newSlug.trim() : `/${newSlug.trim()}`,\n };\n // Seed from the selected template (Empty leaves puckData unset).\n if (templateKey) {\n const template = templates.find((t) => t.key === templateKey);\n if (template) input.puckData = template.value.puckData;\n }\n const created = await createPage(input);\n setCreating(false);\n setNewName('');\n setNewSlug('');\n setTemplateKey('');\n history.push(`/${created.key}/edit`, { pageName: created.value.name });\n } catch (err) {\n setFormError((err as Error).message);\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleDelete = async (page: PuckPageListItem) => {\n setDeleting(page.key);\n try {\n await deletePage(page.key);\n await refresh();\n setPendingDelete(null);\n } finally {\n setDeleting(null);\n }\n };\n\n if (loading) {\n return (\n <div style={{ padding: '64px', display: 'flex', justifyContent: 'center' }}>\n <LoadingSpinner />\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text color=\"critical.11\">Error: {error}</Text>\n </div>\n );\n }\n\n const term = search.trim().toLowerCase();\n const filteredPages = term\n ? pages.filter(\n (p: PuckPageListItem) =>\n p.value.name.toLowerCase().includes(term) ||\n p.value.slug.toLowerCase().includes(term)\n )\n : pages;\n\n const rows: PageRow[] = filteredPages.map((p: PuckPageListItem) => ({ ...p, id: p.key }));\n\n const columns: DataTableColumnItem<PageRow>[] = [\n {\n id: 'name',\n header: 'Name',\n accessor: (row) => row.value.name,\n render: ({ row }) => <Text fontWeight=\"bold\">{row.value.name}</Text>,\n },\n {\n id: 'slug',\n header: 'Slug',\n accessor: (row) => row.value.slug,\n render: ({ row }) => (\n <code\n style={{\n background: '#f4f4f4',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'monospace',\n }}\n >\n {row.value.slug}\n </code>\n ),\n },\n {\n id: 'status',\n header: 'Status',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" wrap=\"wrap\">\n {row.states.draft && <StatusBadge variant=\"draft\" />}\n {row.states.published && <StatusBadge variant=\"published\" />}\n {!row.states.draft && !row.states.published && <StatusBadge variant=\"none\" />}\n </Stack>\n ),\n },\n {\n id: 'updatedAt',\n header: 'Updated',\n accessor: (row) => row.value.updatedAt,\n render: ({ row }) => (\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {new Date(row.value.updatedAt).toLocaleString()}\n </Text>\n ),\n },\n {\n id: 'actions',\n header: 'Actions',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" alignItems=\"center\">\n <IconButton\n aria-label={`Edit ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/edit`, { pageName: row.value.name })}\n >\n <Edit />\n </IconButton>\n <IconButton\n aria-label={`Preview ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/preview`, { pageName: row.value.name })}\n >\n <Visibility />\n </IconButton>\n <IconButton\n aria-label={`Delete ${row.value.name}`}\n variant=\"ghost\"\n colorPalette=\"critical\"\n size=\"xs\"\n isDisabled={deleting === row.key}\n onPress={() => setPendingDelete(row)}\n >\n <Delete />\n </IconButton>\n </Stack>\n ),\n },\n ];\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Stack direction=\"column\" gap=\"600\">\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n {backButton}\n <Text as=\"h1\" fontSize=\"2xl\" fontWeight=\"700\">Pages</Text>\n </Stack>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> New Page\n </Button>\n </Stack>\n\n {creating && (\n <Card.Root variant=\"outlined\">\n <Card.Body>\n <Stack direction=\"column\" gap=\"400\">\n <Text as=\"h4\" fontSize=\"xl\" fontWeight=\"700\">Create New Page</Text>\n <Stack direction=\"row\" gap=\"400\">\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Name</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newName}\n onChange={(v) => setNewName(v)}\n placeholder=\"Home Page\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Slug</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newSlug}\n onChange={(v) => setNewSlug(v)}\n placeholder=\"/home\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n </Stack>\n <FormField.Root>\n <FormField.Label>Template</FormField.Label>\n <FormField.Input>\n <Select.Root\n aria-label=\"Template\"\n selectedKey={templateKey || 'empty'}\n onSelectionChange={(key) =>\n setTemplateKey(key == null || key === 'empty' ? '' : String(key))\n }\n >\n <Select.Options>\n <Select.Option id=\"empty\">Empty</Select.Option>\n {templates.map((t) => (\n <Select.Option key={t.key} id={t.key}>\n {t.value.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n </FormField.Input>\n </FormField.Root>\n {formError && <Text color=\"critical.11\">{formError}</Text>}\n <Stack direction=\"row\" gap=\"200\">\n <Button variant=\"solid\" onPress={() => void handleCreate()} isDisabled={submitting}>\n {submitting ? 'Creating…' : 'Create'}\n </Button>\n <Button\n variant=\"outline\"\n onPress={() => { setCreating(false); setFormError(''); }}\n >\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Card.Body>\n </Card.Root>\n )}\n\n {pages.length === 0 && !creating ? (\n <Stack direction=\"column\" gap=\"400\" alignItems=\"center\">\n <Text color=\"neutral.11\">No pages yet.</Text>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> Create first page\n </Button>\n </Stack>\n ) : pages.length > 0 ? (\n <Stack direction=\"column\" gap=\"400\">\n {/* Search by name or path */}\n <div style={{ maxWidth: 360 }}>\n <TextInput\n aria-label=\"Search pages\"\n placeholder=\"Search by name or path…\"\n value={search}\n onChange={(v) => setSearch(v)}\n width=\"100%\"\n trailingElement={\n search !== '' ? (\n <IconButton\n aria-label=\"Clear search\"\n variant=\"ghost\"\n colorPalette=\"neutral\"\n size=\"2xs\"\n onPress={() => setSearch('')}\n >\n <Close />\n </IconButton>\n ) : undefined\n }\n />\n </div>\n {/* DataTable always renders an internal \"pin rows\" column with no\n public prop to disable it — hide it (header + body cells) for\n this list only. The table uses table-layout:fixed, so the column\n collapses cleanly. */}\n <div className=\"puck-page-list\">\n <style>{`\n .puck-page-list .pin-rows-column-header,\n .puck-page-list [data-slot=\"pin-row-cell\"] { display: none !important; }\n `}</style>\n <DataTable columns={columns} rows={rows} aria-label=\"Pages\" />\n </div>\n </Stack>\n ) : null}\n </Stack>\n\n {/* Delete confirmation (Nimbus) */}\n <Dialog.Root\n isOpen={pendingDelete !== null}\n onOpenChange={(open) => {\n if (!open) setPendingDelete(null);\n }}\n >\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>Delete page?</Dialog.Title>\n <Dialog.CloseTrigger />\n </Dialog.Header>\n <Dialog.Body>\n <Text>\n Are you sure you want to delete{' '}\n <Text as=\"span\" fontWeight=\"700\">\n {pendingDelete?.value.name}\n </Text>\n ? This cannot be undone.\n </Text>\n </Dialog.Body>\n <Dialog.Footer>\n <Button slot=\"close\" variant=\"outline\" isDisabled={deleting !== null}>\n Cancel\n </Button>\n <Button\n colorPalette=\"critical\"\n isDisabled={deleting !== null}\n onPress={() => {\n if (pendingDelete) void handleDelete(pendingDelete);\n }}\n >\n {deleting !== null ? 'Deleting…' : 'Delete'}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PageEditorRoute\n// ---------------------------------------------------------------------------\n\ninterface RouteProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageEditorRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const { baseURL, projectKey, businessUnitKey, jwtToken, locale } = usePuckApiContext();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n // Unsaved-changes navigation guard. `pendingNav` holds the deferred\n // navigation until the user confirms in the Nimbus dialog.\n const [isDirty, setIsDirty] = useState(false);\n const [pendingNav, setPendingNav] = useState<(() => void) | null>(null);\n\n const guardedNavigate = useCallback(\n (navFn: () => void) => {\n if (isDirty) {\n setPendingNav(() => navFn);\n } else {\n navFn();\n }\n },\n [isDirty]\n );\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button\n variant=\"ghost\"\n onPress={() => guardedNavigate(() => history.push('/'))}\n >\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n </div>\n <div className=\"puck-editor-fill\" style={{ flex: 1, overflow: 'hidden' }}>\n <PuckEditor\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken ?? ''}\n locale={locale}\n pageKey={pageKey!}\n config={config}\n onDirtyChange={setIsDirty}\n onPreview={() =>\n guardedNavigate(() =>\n history.push(`/${pageKey}/preview`, { pageName })\n )\n }\n onError={(err: Error) => { console.error('[PageManager] editor error:', err); }}\n />\n <PropertiesResizer />\n </div>\n <UnsavedChangesDialog\n isOpen={pendingNav !== null}\n onOpenChange={(open) => {\n if (!open) setPendingNav(null);\n }}\n onConfirm={() => pendingNav?.()}\n />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PagePreviewRoute\n// ---------------------------------------------------------------------------\n\nconst PagePreviewRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n return (\n <div>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button variant=\"ghost\" onPress={() => history.push('/')}>\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n <Badge colorPalette=\"primary\" size=\"xs\">Preview</Badge>\n <div style={{ marginLeft: 'auto' }}>\n <Button variant=\"outline\" size=\"xs\" onPress={() => history.goBack()}>\n <Icon as={Close} /> Close preview\n </Button>\n </div>\n </div>\n <PuckRenderer pageKey={pageKey} mode=\"preview\" config={config} />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Inner router component\n// ---------------------------------------------------------------------------\n\ninterface PageManagerInnerProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageManagerInner: React.FC<PageManagerInnerProps> = ({ config, backButton }) => (\n <Switch>\n <Route exact path=\"/\" render={() => <PageList backButton={backButton} />} />\n <Route\n path=\"/:pageKey/edit\"\n render={() => <PageEditorRoute config={config} backButton={backButton} />}\n />\n <Route\n path=\"/:pageKey/preview\"\n render={() => <PagePreviewRoute config={config} backButton={backButton} />}\n />\n </Switch>\n);\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface PageManagerProps {\n /** URL path where this manager is mounted, e.g. \"/pages\" — used as router basename */\n parentUrl: string;\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n /** Content locale (e.g. \"en-US\") used for locale-aware calls like product search */\n locale?: string;\n /** Puck component config — passed to editor and preview. Defaults to defaultPuckConfig. */\n config?: Config;\n /** Optional element rendered before the breadcrumb in editor/preview headers */\n backButton?: ReactNode;\n}\n\nexport const PageManager: React.FC<PageManagerProps> = ({\n parentUrl,\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n locale,\n config = DEFAULT_CONFIG,\n backButton,\n}) => (\n <EnsureNimbusProvider locale={locale}>\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n locale={locale}\n >\n <BrowserRouter basename={parentUrl}>\n <PageManagerInner config={config} backButton={backButton} />\n </BrowserRouter>\n </PuckApiProvider>\n </EnsureIntlProvider>\n </EnsureNimbusProvider>\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, { type PropsWithChildren } from 'react';\nimport { ChakraProvider, createSystem } from '@chakra-ui/react/styled-system';\nimport {\n NimbusI18nProvider,\n _RegionProvider,\n system as nimbusSystem,\n} from '@commercetools/nimbus';\n\n\nconst SCOPED_SYSTEM_KEY = Symbol.for(\n '@commercetools-demo/puck:nimbus-scoped-system'\n);\n\nconst globalScope = globalThis as unknown as Record<\n symbol,\n ReturnType<typeof createSystem> | undefined\n>;\n\nconst scopedSystem: ReturnType<typeof createSystem> =\n globalScope[SCOPED_SYSTEM_KEY] ??\n (globalScope[SCOPED_SYSTEM_KEY] = createSystem({\n // `_config` is the fully-merged Nimbus + Chakra config used to build the\n // stock system; reusing it keeps all Nimbus theming intact.\n ...(nimbusSystem as unknown as { _config: Record<string, unknown> })._config,\n preflight: false,\n globalCss: {},\n }));\n\nexport const EnsureNimbusProvider: React.FC<PropsWithChildren<{ locale?: string }>> = ({\n locale = 'en',\n children,\n}) => (\n <ChakraProvider value={scopedSystem}>\n <NimbusI18nProvider locale={locale}>\n <_RegionProvider>{children}</_RegionProvider>\n </NimbusI18nProvider>\n </ChakraProvider>\n);\n"],"mappings":"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","names":["import_react","import_jsx_runtime","nimbusSystem","import_nimbus","import_jsx_runtime"]}
package/dist/index.mjs CHANGED
@@ -47,12 +47,28 @@ var EnsureIntlProvider = ({ children }) => {
47
47
  };
48
48
 
49
49
  // src/EnsureNimbusProvider.tsx
50
- import { NimbusProvider } from "@commercetools/nimbus";
50
+ import { ChakraProvider, createSystem } from "@chakra-ui/react/styled-system";
51
+ import {
52
+ NimbusI18nProvider,
53
+ _RegionProvider,
54
+ system as nimbusSystem
55
+ } from "@commercetools/nimbus";
51
56
  import { jsx as jsx2 } from "react/jsx-runtime";
57
+ var SCOPED_SYSTEM_KEY = /* @__PURE__ */ Symbol.for(
58
+ "@commercetools-demo/puck:nimbus-scoped-system"
59
+ );
60
+ var globalScope = globalThis;
61
+ var scopedSystem = globalScope[SCOPED_SYSTEM_KEY] ?? (globalScope[SCOPED_SYSTEM_KEY] = createSystem({
62
+ // `_config` is the fully-merged Nimbus + Chakra config used to build the
63
+ // stock system; reusing it keeps all Nimbus theming intact.
64
+ ...nimbusSystem._config,
65
+ preflight: false,
66
+ globalCss: {}
67
+ }));
52
68
  var EnsureNimbusProvider = ({
53
69
  locale = "en",
54
70
  children
55
- }) => /* @__PURE__ */ jsx2(NimbusProvider, { locale, children });
71
+ }) => /* @__PURE__ */ jsx2(ChakraProvider, { value: scopedSystem, children: /* @__PURE__ */ jsx2(NimbusI18nProvider, { locale, children: /* @__PURE__ */ jsx2(_RegionProvider, { children }) }) });
56
72
 
57
73
  // src/PageManager.tsx
58
74
  import {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PageManager.tsx","../src/EnsureIntlProvider.tsx","../src/EnsureNimbusProvider.tsx"],"sourcesContent":["import React, { useCallback, useState, type ReactNode } from 'react';\nimport {\n BrowserRouter,\n Switch,\n Route,\n useHistory,\n useParams,\n useLocation,\n} from 'react-router-dom';\nimport {\n PuckApiProvider,\n usePuckPages,\n usePuckTemplates,\n usePuckApiContext,\n} from '@commercetools-demo/puck-api';\nimport {\n PropertiesResizer,\n PuckEditor,\n UnsavedChangesDialog,\n defaultPuckConfig,\n} from '@commercetools-demo/puck-editor';\nimport { PuckRenderer } from '@commercetools-demo/puck-renderer';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\nimport { EnsureNimbusProvider } from './EnsureNimbusProvider';\n\nconst DEFAULT_CONFIG: Config = {\n ...defaultPuckConfig,\n components: { ...defaultPuckConfig.components },\n};\nimport type { Config } from '@measured/puck';\nimport type { CreatePuckPageInput, PuckPageListItem } from '@commercetools-demo/puck-types';\nimport {\n Badge,\n Button,\n Card,\n DataTable,\n Dialog,\n FormField,\n Icon,\n IconButton,\n LoadingSpinner,\n Select,\n Stack,\n Text,\n TextInput,\n type DataTableColumnItem,\n} from '@commercetools/nimbus';\nimport {\n Add,\n ChevronLeft,\n Close,\n Delete,\n Edit,\n Visibility,\n} from '@commercetools/nimbus-icons';\n\n// ---------------------------------------------------------------------------\n// Status badge\n// ---------------------------------------------------------------------------\n\nconst STATUS_BADGE: Record<\n 'draft' | 'published' | 'none',\n { colorPalette: 'warning' | 'positive' | 'neutral'; label: string }\n> = {\n draft: { colorPalette: 'warning', label: 'Draft' },\n published: { colorPalette: 'positive', label: 'Published' },\n none: { colorPalette: 'neutral', label: 'No state' },\n};\n\nconst StatusBadge: React.FC<{ variant: 'draft' | 'published' | 'none' }> = ({ variant }) => {\n const meta = STATUS_BADGE[variant];\n return <Badge colorPalette={meta.colorPalette} size=\"xs\">{meta.label}</Badge>;\n};\n\n// ---------------------------------------------------------------------------\n// Shared 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, #e0e0e0)',\n zIndex: 200,\n flexShrink: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Table row type\n// ---------------------------------------------------------------------------\n\ntype PageRow = PuckPageListItem & { id: string; [key: string]: unknown };\n\n// ---------------------------------------------------------------------------\n// PageList route\n// ---------------------------------------------------------------------------\n\ninterface PageListProps {\n backButton?: ReactNode;\n}\n\nconst PageList: React.FC<PageListProps> = ({ backButton }) => {\n const history = useHistory();\n const { pages, loading, error, createPage, deletePage, refresh } = usePuckPages();\n const { templates } = usePuckTemplates('page');\n\n const [creating, setCreating] = useState(false);\n const [newName, setNewName] = useState('');\n const [newSlug, setNewSlug] = useState('');\n // Selected template for the new page ('' = Empty, today's behaviour).\n const [templateKey, setTemplateKey] = useState('');\n const [formError, setFormError] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n // Page targeted by the (Nimbus) delete-confirmation dialog.\n const [pendingDelete, setPendingDelete] = useState<PuckPageListItem | null>(null);\n // Free-text filter over page name / slug.\n const [search, setSearch] = useState('');\n\n const handleCreate = async () => {\n if (!newName.trim()) { setFormError('Name is required'); return; }\n if (!newSlug.trim()) { setFormError('Slug is required'); return; }\n setFormError('');\n setSubmitting(true);\n try {\n const input: CreatePuckPageInput = {\n name: newName.trim(),\n slug: newSlug.trim().startsWith('/') ? newSlug.trim() : `/${newSlug.trim()}`,\n };\n // Seed from the selected template (Empty leaves puckData unset).\n if (templateKey) {\n const template = templates.find((t) => t.key === templateKey);\n if (template) input.puckData = template.value.puckData;\n }\n const created = await createPage(input);\n setCreating(false);\n setNewName('');\n setNewSlug('');\n setTemplateKey('');\n history.push(`/${created.key}/edit`, { pageName: created.value.name });\n } catch (err) {\n setFormError((err as Error).message);\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleDelete = async (page: PuckPageListItem) => {\n setDeleting(page.key);\n try {\n await deletePage(page.key);\n await refresh();\n setPendingDelete(null);\n } finally {\n setDeleting(null);\n }\n };\n\n if (loading) {\n return (\n <div style={{ padding: '64px', display: 'flex', justifyContent: 'center' }}>\n <LoadingSpinner />\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text color=\"critical.11\">Error: {error}</Text>\n </div>\n );\n }\n\n const term = search.trim().toLowerCase();\n const filteredPages = term\n ? pages.filter(\n (p: PuckPageListItem) =>\n p.value.name.toLowerCase().includes(term) ||\n p.value.slug.toLowerCase().includes(term)\n )\n : pages;\n\n const rows: PageRow[] = filteredPages.map((p: PuckPageListItem) => ({ ...p, id: p.key }));\n\n const columns: DataTableColumnItem<PageRow>[] = [\n {\n id: 'name',\n header: 'Name',\n accessor: (row) => row.value.name,\n render: ({ row }) => <Text fontWeight=\"bold\">{row.value.name}</Text>,\n },\n {\n id: 'slug',\n header: 'Slug',\n accessor: (row) => row.value.slug,\n render: ({ row }) => (\n <code\n style={{\n background: '#f4f4f4',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'monospace',\n }}\n >\n {row.value.slug}\n </code>\n ),\n },\n {\n id: 'status',\n header: 'Status',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" wrap=\"wrap\">\n {row.states.draft && <StatusBadge variant=\"draft\" />}\n {row.states.published && <StatusBadge variant=\"published\" />}\n {!row.states.draft && !row.states.published && <StatusBadge variant=\"none\" />}\n </Stack>\n ),\n },\n {\n id: 'updatedAt',\n header: 'Updated',\n accessor: (row) => row.value.updatedAt,\n render: ({ row }) => (\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {new Date(row.value.updatedAt).toLocaleString()}\n </Text>\n ),\n },\n {\n id: 'actions',\n header: 'Actions',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" alignItems=\"center\">\n <IconButton\n aria-label={`Edit ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/edit`, { pageName: row.value.name })}\n >\n <Edit />\n </IconButton>\n <IconButton\n aria-label={`Preview ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/preview`, { pageName: row.value.name })}\n >\n <Visibility />\n </IconButton>\n <IconButton\n aria-label={`Delete ${row.value.name}`}\n variant=\"ghost\"\n colorPalette=\"critical\"\n size=\"xs\"\n isDisabled={deleting === row.key}\n onPress={() => setPendingDelete(row)}\n >\n <Delete />\n </IconButton>\n </Stack>\n ),\n },\n ];\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Stack direction=\"column\" gap=\"600\">\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n {backButton}\n <Text as=\"h1\" fontSize=\"2xl\" fontWeight=\"700\">Pages</Text>\n </Stack>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> New Page\n </Button>\n </Stack>\n\n {creating && (\n <Card.Root variant=\"outlined\">\n <Card.Body>\n <Stack direction=\"column\" gap=\"400\">\n <Text as=\"h4\" fontSize=\"xl\" fontWeight=\"700\">Create New Page</Text>\n <Stack direction=\"row\" gap=\"400\">\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Name</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newName}\n onChange={(v) => setNewName(v)}\n placeholder=\"Home Page\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Slug</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newSlug}\n onChange={(v) => setNewSlug(v)}\n placeholder=\"/home\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n </Stack>\n <FormField.Root>\n <FormField.Label>Template</FormField.Label>\n <FormField.Input>\n <Select.Root\n aria-label=\"Template\"\n selectedKey={templateKey || 'empty'}\n onSelectionChange={(key) =>\n setTemplateKey(key == null || key === 'empty' ? '' : String(key))\n }\n >\n <Select.Options>\n <Select.Option id=\"empty\">Empty</Select.Option>\n {templates.map((t) => (\n <Select.Option key={t.key} id={t.key}>\n {t.value.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n </FormField.Input>\n </FormField.Root>\n {formError && <Text color=\"critical.11\">{formError}</Text>}\n <Stack direction=\"row\" gap=\"200\">\n <Button variant=\"solid\" onPress={() => void handleCreate()} isDisabled={submitting}>\n {submitting ? 'Creating…' : 'Create'}\n </Button>\n <Button\n variant=\"outline\"\n onPress={() => { setCreating(false); setFormError(''); }}\n >\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Card.Body>\n </Card.Root>\n )}\n\n {pages.length === 0 && !creating ? (\n <Stack direction=\"column\" gap=\"400\" alignItems=\"center\">\n <Text color=\"neutral.11\">No pages yet.</Text>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> Create first page\n </Button>\n </Stack>\n ) : pages.length > 0 ? (\n <Stack direction=\"column\" gap=\"400\">\n {/* Search by name or path */}\n <div style={{ maxWidth: 360 }}>\n <TextInput\n aria-label=\"Search pages\"\n placeholder=\"Search by name or path…\"\n value={search}\n onChange={(v) => setSearch(v)}\n width=\"100%\"\n trailingElement={\n search !== '' ? (\n <IconButton\n aria-label=\"Clear search\"\n variant=\"ghost\"\n colorPalette=\"neutral\"\n size=\"2xs\"\n onPress={() => setSearch('')}\n >\n <Close />\n </IconButton>\n ) : undefined\n }\n />\n </div>\n {/* DataTable always renders an internal \"pin rows\" column with no\n public prop to disable it — hide it (header + body cells) for\n this list only. The table uses table-layout:fixed, so the column\n collapses cleanly. */}\n <div className=\"puck-page-list\">\n <style>{`\n .puck-page-list .pin-rows-column-header,\n .puck-page-list [data-slot=\"pin-row-cell\"] { display: none !important; }\n `}</style>\n <DataTable columns={columns} rows={rows} aria-label=\"Pages\" />\n </div>\n </Stack>\n ) : null}\n </Stack>\n\n {/* Delete confirmation (Nimbus) */}\n <Dialog.Root\n isOpen={pendingDelete !== null}\n onOpenChange={(open) => {\n if (!open) setPendingDelete(null);\n }}\n >\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>Delete page?</Dialog.Title>\n <Dialog.CloseTrigger />\n </Dialog.Header>\n <Dialog.Body>\n <Text>\n Are you sure you want to delete{' '}\n <Text as=\"span\" fontWeight=\"700\">\n {pendingDelete?.value.name}\n </Text>\n ? This cannot be undone.\n </Text>\n </Dialog.Body>\n <Dialog.Footer>\n <Button slot=\"close\" variant=\"outline\" isDisabled={deleting !== null}>\n Cancel\n </Button>\n <Button\n colorPalette=\"critical\"\n isDisabled={deleting !== null}\n onPress={() => {\n if (pendingDelete) void handleDelete(pendingDelete);\n }}\n >\n {deleting !== null ? 'Deleting…' : 'Delete'}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PageEditorRoute\n// ---------------------------------------------------------------------------\n\ninterface RouteProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageEditorRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const { baseURL, projectKey, businessUnitKey, jwtToken, locale } = usePuckApiContext();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n // Unsaved-changes navigation guard. `pendingNav` holds the deferred\n // navigation until the user confirms in the Nimbus dialog.\n const [isDirty, setIsDirty] = useState(false);\n const [pendingNav, setPendingNav] = useState<(() => void) | null>(null);\n\n const guardedNavigate = useCallback(\n (navFn: () => void) => {\n if (isDirty) {\n setPendingNav(() => navFn);\n } else {\n navFn();\n }\n },\n [isDirty]\n );\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button\n variant=\"ghost\"\n onPress={() => guardedNavigate(() => history.push('/'))}\n >\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n </div>\n <div className=\"puck-editor-fill\" style={{ flex: 1, overflow: 'hidden' }}>\n <PuckEditor\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken ?? ''}\n locale={locale}\n pageKey={pageKey!}\n config={config}\n onDirtyChange={setIsDirty}\n onPreview={() =>\n guardedNavigate(() =>\n history.push(`/${pageKey}/preview`, { pageName })\n )\n }\n onError={(err: Error) => { console.error('[PageManager] editor error:', err); }}\n />\n <PropertiesResizer />\n </div>\n <UnsavedChangesDialog\n isOpen={pendingNav !== null}\n onOpenChange={(open) => {\n if (!open) setPendingNav(null);\n }}\n onConfirm={() => pendingNav?.()}\n />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PagePreviewRoute\n// ---------------------------------------------------------------------------\n\nconst PagePreviewRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n return (\n <div>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button variant=\"ghost\" onPress={() => history.push('/')}>\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n <Badge colorPalette=\"primary\" size=\"xs\">Preview</Badge>\n <div style={{ marginLeft: 'auto' }}>\n <Button variant=\"outline\" size=\"xs\" onPress={() => history.goBack()}>\n <Icon as={Close} /> Close preview\n </Button>\n </div>\n </div>\n <PuckRenderer pageKey={pageKey} mode=\"preview\" config={config} />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Inner router component\n// ---------------------------------------------------------------------------\n\ninterface PageManagerInnerProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageManagerInner: React.FC<PageManagerInnerProps> = ({ config, backButton }) => (\n <Switch>\n <Route exact path=\"/\" render={() => <PageList backButton={backButton} />} />\n <Route\n path=\"/:pageKey/edit\"\n render={() => <PageEditorRoute config={config} backButton={backButton} />}\n />\n <Route\n path=\"/:pageKey/preview\"\n render={() => <PagePreviewRoute config={config} backButton={backButton} />}\n />\n </Switch>\n);\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface PageManagerProps {\n /** URL path where this manager is mounted, e.g. \"/pages\" — used as router basename */\n parentUrl: string;\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n /** Content locale (e.g. \"en-US\") used for locale-aware calls like product search */\n locale?: string;\n /** Puck component config — passed to editor and preview. Defaults to defaultPuckConfig. */\n config?: Config;\n /** Optional element rendered before the breadcrumb in editor/preview headers */\n backButton?: ReactNode;\n}\n\nexport const PageManager: React.FC<PageManagerProps> = ({\n parentUrl,\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n locale,\n config = DEFAULT_CONFIG,\n backButton,\n}) => (\n <EnsureNimbusProvider locale={locale}>\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n locale={locale}\n >\n <BrowserRouter basename={parentUrl}>\n <PageManagerInner config={config} backButton={backButton} />\n </BrowserRouter>\n </PuckApiProvider>\n </EnsureIntlProvider>\n </EnsureNimbusProvider>\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, { type PropsWithChildren } from 'react';\nimport { NimbusProvider } from '@commercetools/nimbus';\n\n/**\n * Ensures a Nimbus context (theme + Chakra + React Aria i18n) exists for the\n * Nimbus components rendered by this package.\n *\n * NimbusProvider is safe to nest: locale overrides the nearest ancestor, color\n * mode is global, and the Inter font links are deduplicated across instances.\n */\nexport const EnsureNimbusProvider: React.FC<PropsWithChildren<{ locale?: string }>> = ({\n locale = 'en',\n children,\n}) => <NimbusProvider locale={locale}>{children}</NimbusProvider>;\n"],"mappings":"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","names":["jsx","jsx"]}
1
+ {"version":3,"sources":["../src/PageManager.tsx","../src/EnsureIntlProvider.tsx","../src/EnsureNimbusProvider.tsx"],"sourcesContent":["import React, { useCallback, useState, type ReactNode } from 'react';\nimport {\n BrowserRouter,\n Switch,\n Route,\n useHistory,\n useParams,\n useLocation,\n} from 'react-router-dom';\nimport {\n PuckApiProvider,\n usePuckPages,\n usePuckTemplates,\n usePuckApiContext,\n} from '@commercetools-demo/puck-api';\nimport {\n PropertiesResizer,\n PuckEditor,\n UnsavedChangesDialog,\n defaultPuckConfig,\n} from '@commercetools-demo/puck-editor';\nimport { PuckRenderer } from '@commercetools-demo/puck-renderer';\nimport { EnsureIntlProvider } from './EnsureIntlProvider';\nimport { EnsureNimbusProvider } from './EnsureNimbusProvider';\n\nconst DEFAULT_CONFIG: Config = {\n ...defaultPuckConfig,\n components: { ...defaultPuckConfig.components },\n};\nimport type { Config } from '@measured/puck';\nimport type { CreatePuckPageInput, PuckPageListItem } from '@commercetools-demo/puck-types';\nimport {\n Badge,\n Button,\n Card,\n DataTable,\n Dialog,\n FormField,\n Icon,\n IconButton,\n LoadingSpinner,\n Select,\n Stack,\n Text,\n TextInput,\n type DataTableColumnItem,\n} from '@commercetools/nimbus';\nimport {\n Add,\n ChevronLeft,\n Close,\n Delete,\n Edit,\n Visibility,\n} from '@commercetools/nimbus-icons';\n\n// ---------------------------------------------------------------------------\n// Status badge\n// ---------------------------------------------------------------------------\n\nconst STATUS_BADGE: Record<\n 'draft' | 'published' | 'none',\n { colorPalette: 'warning' | 'positive' | 'neutral'; label: string }\n> = {\n draft: { colorPalette: 'warning', label: 'Draft' },\n published: { colorPalette: 'positive', label: 'Published' },\n none: { colorPalette: 'neutral', label: 'No state' },\n};\n\nconst StatusBadge: React.FC<{ variant: 'draft' | 'published' | 'none' }> = ({ variant }) => {\n const meta = STATUS_BADGE[variant];\n return <Badge colorPalette={meta.colorPalette} size=\"xs\">{meta.label}</Badge>;\n};\n\n// ---------------------------------------------------------------------------\n// Shared 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, #e0e0e0)',\n zIndex: 200,\n flexShrink: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Table row type\n// ---------------------------------------------------------------------------\n\ntype PageRow = PuckPageListItem & { id: string; [key: string]: unknown };\n\n// ---------------------------------------------------------------------------\n// PageList route\n// ---------------------------------------------------------------------------\n\ninterface PageListProps {\n backButton?: ReactNode;\n}\n\nconst PageList: React.FC<PageListProps> = ({ backButton }) => {\n const history = useHistory();\n const { pages, loading, error, createPage, deletePage, refresh } = usePuckPages();\n const { templates } = usePuckTemplates('page');\n\n const [creating, setCreating] = useState(false);\n const [newName, setNewName] = useState('');\n const [newSlug, setNewSlug] = useState('');\n // Selected template for the new page ('' = Empty, today's behaviour).\n const [templateKey, setTemplateKey] = useState('');\n const [formError, setFormError] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const [deleting, setDeleting] = useState<string | null>(null);\n // Page targeted by the (Nimbus) delete-confirmation dialog.\n const [pendingDelete, setPendingDelete] = useState<PuckPageListItem | null>(null);\n // Free-text filter over page name / slug.\n const [search, setSearch] = useState('');\n\n const handleCreate = async () => {\n if (!newName.trim()) { setFormError('Name is required'); return; }\n if (!newSlug.trim()) { setFormError('Slug is required'); return; }\n setFormError('');\n setSubmitting(true);\n try {\n const input: CreatePuckPageInput = {\n name: newName.trim(),\n slug: newSlug.trim().startsWith('/') ? newSlug.trim() : `/${newSlug.trim()}`,\n };\n // Seed from the selected template (Empty leaves puckData unset).\n if (templateKey) {\n const template = templates.find((t) => t.key === templateKey);\n if (template) input.puckData = template.value.puckData;\n }\n const created = await createPage(input);\n setCreating(false);\n setNewName('');\n setNewSlug('');\n setTemplateKey('');\n history.push(`/${created.key}/edit`, { pageName: created.value.name });\n } catch (err) {\n setFormError((err as Error).message);\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleDelete = async (page: PuckPageListItem) => {\n setDeleting(page.key);\n try {\n await deletePage(page.key);\n await refresh();\n setPendingDelete(null);\n } finally {\n setDeleting(null);\n }\n };\n\n if (loading) {\n return (\n <div style={{ padding: '64px', display: 'flex', justifyContent: 'center' }}>\n <LoadingSpinner />\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ padding: '32px' }}>\n <Text color=\"critical.11\">Error: {error}</Text>\n </div>\n );\n }\n\n const term = search.trim().toLowerCase();\n const filteredPages = term\n ? pages.filter(\n (p: PuckPageListItem) =>\n p.value.name.toLowerCase().includes(term) ||\n p.value.slug.toLowerCase().includes(term)\n )\n : pages;\n\n const rows: PageRow[] = filteredPages.map((p: PuckPageListItem) => ({ ...p, id: p.key }));\n\n const columns: DataTableColumnItem<PageRow>[] = [\n {\n id: 'name',\n header: 'Name',\n accessor: (row) => row.value.name,\n render: ({ row }) => <Text fontWeight=\"bold\">{row.value.name}</Text>,\n },\n {\n id: 'slug',\n header: 'Slug',\n accessor: (row) => row.value.slug,\n render: ({ row }) => (\n <code\n style={{\n background: '#f4f4f4',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'monospace',\n }}\n >\n {row.value.slug}\n </code>\n ),\n },\n {\n id: 'status',\n header: 'Status',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" wrap=\"wrap\">\n {row.states.draft && <StatusBadge variant=\"draft\" />}\n {row.states.published && <StatusBadge variant=\"published\" />}\n {!row.states.draft && !row.states.published && <StatusBadge variant=\"none\" />}\n </Stack>\n ),\n },\n {\n id: 'updatedAt',\n header: 'Updated',\n accessor: (row) => row.value.updatedAt,\n render: ({ row }) => (\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {new Date(row.value.updatedAt).toLocaleString()}\n </Text>\n ),\n },\n {\n id: 'actions',\n header: 'Actions',\n accessor: () => '',\n isSortable: false,\n render: ({ row }) => (\n <Stack direction=\"row\" gap=\"100\" alignItems=\"center\">\n <IconButton\n aria-label={`Edit ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/edit`, { pageName: row.value.name })}\n >\n <Edit />\n </IconButton>\n <IconButton\n aria-label={`Preview ${row.value.name}`}\n variant=\"ghost\"\n size=\"xs\"\n onPress={() => history.push(`/${row.key}/preview`, { pageName: row.value.name })}\n >\n <Visibility />\n </IconButton>\n <IconButton\n aria-label={`Delete ${row.value.name}`}\n variant=\"ghost\"\n colorPalette=\"critical\"\n size=\"xs\"\n isDisabled={deleting === row.key}\n onPress={() => setPendingDelete(row)}\n >\n <Delete />\n </IconButton>\n </Stack>\n ),\n },\n ];\n\n return (\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '32px 24px' }}>\n <Stack direction=\"column\" gap=\"600\">\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n {backButton}\n <Text as=\"h1\" fontSize=\"2xl\" fontWeight=\"700\">Pages</Text>\n </Stack>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> New Page\n </Button>\n </Stack>\n\n {creating && (\n <Card.Root variant=\"outlined\">\n <Card.Body>\n <Stack direction=\"column\" gap=\"400\">\n <Text as=\"h4\" fontSize=\"xl\" fontWeight=\"700\">Create New Page</Text>\n <Stack direction=\"row\" gap=\"400\">\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Name</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newName}\n onChange={(v) => setNewName(v)}\n placeholder=\"Home Page\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n <div style={{ flex: 1 }}>\n <FormField.Root isRequired>\n <FormField.Label>Slug</FormField.Label>\n <FormField.Input>\n <TextInput\n value={newSlug}\n onChange={(v) => setNewSlug(v)}\n placeholder=\"/home\"\n />\n </FormField.Input>\n </FormField.Root>\n </div>\n </Stack>\n <FormField.Root>\n <FormField.Label>Template</FormField.Label>\n <FormField.Input>\n <Select.Root\n aria-label=\"Template\"\n selectedKey={templateKey || 'empty'}\n onSelectionChange={(key) =>\n setTemplateKey(key == null || key === 'empty' ? '' : String(key))\n }\n >\n <Select.Options>\n <Select.Option id=\"empty\">Empty</Select.Option>\n {templates.map((t) => (\n <Select.Option key={t.key} id={t.key}>\n {t.value.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n </FormField.Input>\n </FormField.Root>\n {formError && <Text color=\"critical.11\">{formError}</Text>}\n <Stack direction=\"row\" gap=\"200\">\n <Button variant=\"solid\" onPress={() => void handleCreate()} isDisabled={submitting}>\n {submitting ? 'Creating…' : 'Create'}\n </Button>\n <Button\n variant=\"outline\"\n onPress={() => { setCreating(false); setFormError(''); }}\n >\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Card.Body>\n </Card.Root>\n )}\n\n {pages.length === 0 && !creating ? (\n <Stack direction=\"column\" gap=\"400\" alignItems=\"center\">\n <Text color=\"neutral.11\">No pages yet.</Text>\n <Button variant=\"solid\" onPress={() => setCreating(true)}>\n <Icon as={Add} /> Create first page\n </Button>\n </Stack>\n ) : pages.length > 0 ? (\n <Stack direction=\"column\" gap=\"400\">\n {/* Search by name or path */}\n <div style={{ maxWidth: 360 }}>\n <TextInput\n aria-label=\"Search pages\"\n placeholder=\"Search by name or path…\"\n value={search}\n onChange={(v) => setSearch(v)}\n width=\"100%\"\n trailingElement={\n search !== '' ? (\n <IconButton\n aria-label=\"Clear search\"\n variant=\"ghost\"\n colorPalette=\"neutral\"\n size=\"2xs\"\n onPress={() => setSearch('')}\n >\n <Close />\n </IconButton>\n ) : undefined\n }\n />\n </div>\n {/* DataTable always renders an internal \"pin rows\" column with no\n public prop to disable it — hide it (header + body cells) for\n this list only. The table uses table-layout:fixed, so the column\n collapses cleanly. */}\n <div className=\"puck-page-list\">\n <style>{`\n .puck-page-list .pin-rows-column-header,\n .puck-page-list [data-slot=\"pin-row-cell\"] { display: none !important; }\n `}</style>\n <DataTable columns={columns} rows={rows} aria-label=\"Pages\" />\n </div>\n </Stack>\n ) : null}\n </Stack>\n\n {/* Delete confirmation (Nimbus) */}\n <Dialog.Root\n isOpen={pendingDelete !== null}\n onOpenChange={(open) => {\n if (!open) setPendingDelete(null);\n }}\n >\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>Delete page?</Dialog.Title>\n <Dialog.CloseTrigger />\n </Dialog.Header>\n <Dialog.Body>\n <Text>\n Are you sure you want to delete{' '}\n <Text as=\"span\" fontWeight=\"700\">\n {pendingDelete?.value.name}\n </Text>\n ? This cannot be undone.\n </Text>\n </Dialog.Body>\n <Dialog.Footer>\n <Button slot=\"close\" variant=\"outline\" isDisabled={deleting !== null}>\n Cancel\n </Button>\n <Button\n colorPalette=\"critical\"\n isDisabled={deleting !== null}\n onPress={() => {\n if (pendingDelete) void handleDelete(pendingDelete);\n }}\n >\n {deleting !== null ? 'Deleting…' : 'Delete'}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PageEditorRoute\n// ---------------------------------------------------------------------------\n\ninterface RouteProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageEditorRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const { baseURL, projectKey, businessUnitKey, jwtToken, locale } = usePuckApiContext();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n // Unsaved-changes navigation guard. `pendingNav` holds the deferred\n // navigation until the user confirms in the Nimbus dialog.\n const [isDirty, setIsDirty] = useState(false);\n const [pendingNav, setPendingNav] = useState<(() => void) | null>(null);\n\n const guardedNavigate = useCallback(\n (navFn: () => void) => {\n if (isDirty) {\n setPendingNav(() => navFn);\n } else {\n navFn();\n }\n },\n [isDirty]\n );\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button\n variant=\"ghost\"\n onPress={() => guardedNavigate(() => history.push('/'))}\n >\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n </div>\n <div className=\"puck-editor-fill\" style={{ flex: 1, overflow: 'hidden' }}>\n <PuckEditor\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken ?? ''}\n locale={locale}\n pageKey={pageKey!}\n config={config}\n onDirtyChange={setIsDirty}\n onPreview={() =>\n guardedNavigate(() =>\n history.push(`/${pageKey}/preview`, { pageName })\n )\n }\n onError={(err: Error) => { console.error('[PageManager] editor error:', err); }}\n />\n <PropertiesResizer />\n </div>\n <UnsavedChangesDialog\n isOpen={pendingNav !== null}\n onOpenChange={(open) => {\n if (!open) setPendingNav(null);\n }}\n onConfirm={() => pendingNav?.()}\n />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PagePreviewRoute\n// ---------------------------------------------------------------------------\n\nconst PagePreviewRoute: React.FC<RouteProps> = ({ config, backButton }) => {\n const { pageKey } = useParams<{ pageKey: string }>();\n const history = useHistory();\n const location = useLocation();\n const pageName =\n (location.state as { pageName?: string } | null)?.pageName ?? pageKey ?? 'Page';\n\n return (\n <div>\n <div style={NAV_BAR_STYLE}>\n {backButton}\n {backButton && <Text color=\"neutral.11\">/</Text>}\n <Button variant=\"ghost\" onPress={() => history.push('/')}>\n <Icon as={ChevronLeft} /> Pages\n </Button>\n <Text color=\"neutral.11\">/</Text>\n <Text fontWeight=\"bold\">{pageName}</Text>\n <Badge colorPalette=\"primary\" size=\"xs\">Preview</Badge>\n <div style={{ marginLeft: 'auto' }}>\n <Button variant=\"outline\" size=\"xs\" onPress={() => history.goBack()}>\n <Icon as={Close} /> Close preview\n </Button>\n </div>\n </div>\n <PuckRenderer pageKey={pageKey} mode=\"preview\" config={config} />\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Inner router component\n// ---------------------------------------------------------------------------\n\ninterface PageManagerInnerProps {\n config: Config;\n backButton?: ReactNode;\n}\n\nconst PageManagerInner: React.FC<PageManagerInnerProps> = ({ config, backButton }) => (\n <Switch>\n <Route exact path=\"/\" render={() => <PageList backButton={backButton} />} />\n <Route\n path=\"/:pageKey/edit\"\n render={() => <PageEditorRoute config={config} backButton={backButton} />}\n />\n <Route\n path=\"/:pageKey/preview\"\n render={() => <PagePreviewRoute config={config} backButton={backButton} />}\n />\n </Switch>\n);\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface PageManagerProps {\n /** URL path where this manager is mounted, e.g. \"/pages\" — used as router basename */\n parentUrl: string;\n baseURL: string;\n projectKey: string;\n businessUnitKey: string;\n jwtToken: string;\n /** Content locale (e.g. \"en-US\") used for locale-aware calls like product search */\n locale?: string;\n /** Puck component config — passed to editor and preview. Defaults to defaultPuckConfig. */\n config?: Config;\n /** Optional element rendered before the breadcrumb in editor/preview headers */\n backButton?: ReactNode;\n}\n\nexport const PageManager: React.FC<PageManagerProps> = ({\n parentUrl,\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n locale,\n config = DEFAULT_CONFIG,\n backButton,\n}) => (\n <EnsureNimbusProvider locale={locale}>\n <EnsureIntlProvider>\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n locale={locale}\n >\n <BrowserRouter basename={parentUrl}>\n <PageManagerInner config={config} backButton={backButton} />\n </BrowserRouter>\n </PuckApiProvider>\n </EnsureIntlProvider>\n </EnsureNimbusProvider>\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, { type PropsWithChildren } from 'react';\nimport { ChakraProvider, createSystem } from '@chakra-ui/react/styled-system';\nimport {\n NimbusI18nProvider,\n _RegionProvider,\n system as nimbusSystem,\n} from '@commercetools/nimbus';\n\n\nconst SCOPED_SYSTEM_KEY = Symbol.for(\n '@commercetools-demo/puck:nimbus-scoped-system'\n);\n\nconst globalScope = globalThis as unknown as Record<\n symbol,\n ReturnType<typeof createSystem> | undefined\n>;\n\nconst scopedSystem: ReturnType<typeof createSystem> =\n globalScope[SCOPED_SYSTEM_KEY] ??\n (globalScope[SCOPED_SYSTEM_KEY] = createSystem({\n // `_config` is the fully-merged Nimbus + Chakra config used to build the\n // stock system; reusing it keeps all Nimbus theming intact.\n ...(nimbusSystem as unknown as { _config: Record<string, unknown> })._config,\n preflight: false,\n globalCss: {},\n }));\n\nexport const EnsureNimbusProvider: React.FC<PropsWithChildren<{ locale?: string }>> = ({\n locale = 'en',\n children,\n}) => (\n <ChakraProvider value={scopedSystem}>\n <NimbusI18nProvider locale={locale}>\n <_RegionProvider>{children}</_RegionProvider>\n </NimbusI18nProvider>\n </ChakraProvider>\n);\n"],"mappings":"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","names":["jsx","jsx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commercetools-demo/puck-page-manager",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Router-aware page manager UI (list, editor, preview) for the Puck CMS integration",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -25,13 +25,14 @@
25
25
  "typecheck": "tsc --noEmit"
26
26
  },
27
27
  "dependencies": {
28
- "@commercetools-demo/puck-api": "^0.6.0",
29
- "@commercetools-demo/puck-editor": "^0.6.0",
30
- "@commercetools-demo/puck-renderer": "^0.6.0",
31
- "@commercetools-demo/puck-types": "^0.6.0",
28
+ "@commercetools-demo/puck-api": "^0.6.1",
29
+ "@commercetools-demo/puck-editor": "^0.6.1",
30
+ "@commercetools-demo/puck-renderer": "^0.6.1",
31
+ "@commercetools-demo/puck-types": "^0.6.1",
32
32
  "@measured/puck": "^0.18.2"
33
33
  },
34
34
  "peerDependencies": {
35
+ "@chakra-ui/react": "^3.36.0",
35
36
  "@commercetools/nimbus": "^3.2.0",
36
37
  "@commercetools/nimbus-icons": "^3.2.0",
37
38
  "react": ">=19.0.0",