@endora-commerce/page-builder-admin 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/chrome/AssetPickers.d.ts +16 -0
- package/dist/chrome/AssetPickers.d.ts.map +1 -0
- package/dist/chrome/AssetPickers.js +112 -0
- package/dist/chrome/AssetPickers.js.map +1 -0
- package/dist/chrome/CatalogPickers.d.ts +6 -0
- package/dist/chrome/CatalogPickers.d.ts.map +1 -0
- package/dist/chrome/CatalogPickers.js +310 -0
- package/dist/chrome/CatalogPickers.js.map +1 -0
- package/dist/chrome/ColorPaletteModal.d.ts +11 -0
- package/dist/chrome/ColorPaletteModal.d.ts.map +1 -0
- package/dist/chrome/ColorPaletteModal.js +82 -0
- package/dist/chrome/ColorPaletteModal.js.map +1 -0
- package/dist/chrome/ColorPaletteProvider.d.ts +7 -0
- package/dist/chrome/ColorPaletteProvider.d.ts.map +1 -0
- package/dist/chrome/ColorPaletteProvider.js +40 -0
- package/dist/chrome/ColorPaletteProvider.js.map +1 -0
- package/dist/chrome/PageBuilderHeaderActions.d.ts +52 -0
- package/dist/chrome/PageBuilderHeaderActions.d.ts.map +1 -0
- package/dist/chrome/PageBuilderHeaderActions.js +242 -0
- package/dist/chrome/PageBuilderHeaderActions.js.map +1 -0
- package/dist/chrome/PageBuilderOverlayBridge.d.ts +10 -0
- package/dist/chrome/PageBuilderOverlayBridge.d.ts.map +1 -0
- package/dist/chrome/PageBuilderOverlayBridge.js +25 -0
- package/dist/chrome/PageBuilderOverlayBridge.js.map +1 -0
- package/dist/chrome/QuickTooltip.d.ts +8 -0
- package/dist/chrome/QuickTooltip.d.ts.map +1 -0
- package/dist/chrome/QuickTooltip.js +33 -0
- package/dist/chrome/QuickTooltip.js.map +1 -0
- package/dist/chrome/action-bar-target.d.ts +12 -0
- package/dist/chrome/action-bar-target.d.ts.map +1 -0
- package/dist/chrome/action-bar-target.js +37 -0
- package/dist/chrome/action-bar-target.js.map +1 -0
- package/dist/chrome/cms-page-builder-api.d.ts +21 -0
- package/dist/chrome/cms-page-builder-api.d.ts.map +1 -0
- package/dist/chrome/cms-page-builder-api.js +50 -0
- package/dist/chrome/cms-page-builder-api.js.map +1 -0
- package/dist/chrome/page-builder-data.d.ts +5 -0
- package/dist/chrome/page-builder-data.d.ts.map +1 -0
- package/dist/chrome/page-builder-data.js +12 -0
- package/dist/chrome/page-builder-data.js.map +1 -0
- package/dist/email/EmailBuilderActionBar.d.ts +8 -0
- package/dist/email/EmailBuilderActionBar.d.ts.map +1 -0
- package/dist/email/EmailBuilderActionBar.js +91 -0
- package/dist/email/EmailBuilderActionBar.js.map +1 -0
- package/dist/email/EmailEditorPane.d.ts +42 -0
- package/dist/email/EmailEditorPane.d.ts.map +1 -0
- package/dist/email/EmailEditorPane.js +637 -0
- package/dist/email/EmailEditorPane.js.map +1 -0
- package/dist/email/EmailRichTextField.d.ts +14 -0
- package/dist/email/EmailRichTextField.d.ts.map +1 -0
- package/dist/email/EmailRichTextField.js +45 -0
- package/dist/email/EmailRichTextField.js.map +1 -0
- package/dist/email/EmailRowLayoutPicker.d.ts +8 -0
- package/dist/email/EmailRowLayoutPicker.d.ts.map +1 -0
- package/dist/email/EmailRowLayoutPicker.js +17 -0
- package/dist/email/EmailRowLayoutPicker.js.map +1 -0
- package/dist/email/EmailVariableFields.d.ts +13 -0
- package/dist/email/EmailVariableFields.d.ts.map +1 -0
- package/dist/email/EmailVariableFields.js +49 -0
- package/dist/email/EmailVariableFields.js.map +1 -0
- package/dist/email/EmailVariablesProvider.d.ts +15 -0
- package/dist/email/EmailVariablesProvider.d.ts.map +1 -0
- package/dist/email/EmailVariablesProvider.js +54 -0
- package/dist/email/EmailVariablesProvider.js.map +1 -0
- package/dist/email/email-builder-plugin.d.ts +6 -0
- package/dist/email/email-builder-plugin.d.ts.map +1 -0
- package/dist/email/email-builder-plugin.js +14 -0
- package/dist/email/email-builder-plugin.js.map +1 -0
- package/dist/email/email-template-layout.d.ts +16 -0
- package/dist/email/email-template-layout.d.ts.map +1 -0
- package/dist/email/email-template-layout.js +55 -0
- package/dist/email/email-template-layout.js.map +1 -0
- package/dist/email/email-templates-api.d.ts +14 -0
- package/dist/email/email-templates-api.d.ts.map +1 -0
- package/dist/email/email-templates-api.js +54 -0
- package/dist/email/email-templates-api.js.map +1 -0
- package/dist/email/index.d.ts +33 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +33 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/insert-at-cursor.d.ts +8 -0
- package/dist/email/insert-at-cursor.d.ts.map +1 -0
- package/dist/email/insert-at-cursor.js +12 -0
- package/dist/email/insert-at-cursor.js.map +1 -0
- package/dist/email/variables.d.ts +20 -0
- package/dist/email/variables.d.ts.map +1 -0
- package/dist/email/variables.js +41 -0
- package/dist/email/variables.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -0
- package/tailwind.css +14 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Endora sp. z o.o. and the Endora Commerce contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- Generated by `pnpm --filter backend run manifests:generate`. Delete this line to take the file over; a README without it is never regenerated. -->
|
|
2
|
+
|
|
3
|
+
# @endora-commerce/page-builder-admin
|
|
4
|
+
|
|
5
|
+
The admin-side page-builder chrome and the e-mail builder (feature 091, P5b; D-192). `.` is the editor chrome `cms`, `blog` and `invoices` render — header actions, asset and catalog field factories, the colour palette, the overlay bridge and the action-bar target — which named `cms` nowhere and lived there only because `cms` was the first builder written. `./email` is the e-mail builder those same primitives compose, which `newsletter` and `transactional_emails` render. A fourth member of the `page-builder` family, in D-108's one `linked` group.
|
|
6
|
+
|
|
7
|
+
## What this is
|
|
8
|
+
|
|
9
|
+
A shared library package of **Endora Commerce**, the modular B2B/B2C commerce platform. It declares no module manifest, so the platform composes nothing from it: what is published here is what the platform and the modules built on it compile against.
|
|
10
|
+
|
|
11
|
+
## Entry points
|
|
12
|
+
|
|
13
|
+
- `@endora-commerce/page-builder-admin`
|
|
14
|
+
- `@endora-commerce/page-builder-admin/email`
|
|
15
|
+
- `@endora-commerce/page-builder-admin/tailwind.css`
|
|
16
|
+
|
|
17
|
+
## Depends on
|
|
18
|
+
|
|
19
|
+
Everything below is a **peer** dependency, so the application resolves exactly one copy of each — two copies of a host or of React are a runtime failure rather than a type error. An entry marked *optional* is needed only by the layers that use it.
|
|
20
|
+
|
|
21
|
+
**Endora packages**
|
|
22
|
+
|
|
23
|
+
- `@endora-commerce/admin-kit`
|
|
24
|
+
- `@endora-commerce/cms-components`
|
|
25
|
+
- `@endora-commerce/contracts`
|
|
26
|
+
- `@endora-commerce/email-components`
|
|
27
|
+
- `@endora-commerce/page-builder-core`
|
|
28
|
+
|
|
29
|
+
**Third-party**
|
|
30
|
+
|
|
31
|
+
- `@measured/puck` *
|
|
32
|
+
- `lucide-react` ^1.11.0
|
|
33
|
+
- `react` ^19.0.0
|
|
34
|
+
- `react-dom` ^19.0.0
|
|
35
|
+
|
|
36
|
+
## What the tarball carries
|
|
37
|
+
|
|
38
|
+
- `dist/` — the compiled JavaScript and its type declarations
|
|
39
|
+
- `tailwind.css` — the Tailwind source declaration
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pnpm add @endora-commerce/page-builder-admin
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Licence
|
|
48
|
+
|
|
49
|
+
MIT — the text is in `LICENSE`, beside this file.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CustomField } from '@measured/puck';
|
|
2
|
+
declare const inputClassName = "_Input-input_bsxfo_26";
|
|
3
|
+
export declare const pickerButtonClass = "h-9 shrink-0";
|
|
4
|
+
export declare function createImageSourceField(): CustomField<'url' | 'library'>;
|
|
5
|
+
export declare function createImageUrlField(label: string): CustomField<string>;
|
|
6
|
+
export declare function createImageAssetField(label: string): CustomField<string>;
|
|
7
|
+
export type SlideImageValue = {
|
|
8
|
+
imageSource?: 'url' | 'library';
|
|
9
|
+
src?: string;
|
|
10
|
+
assetId?: string;
|
|
11
|
+
};
|
|
12
|
+
/** Single control for Image Slider slides — hides URL vs Asset based on source. */
|
|
13
|
+
export declare function createSlideImageField(): CustomField<SlideImageValue>;
|
|
14
|
+
export declare function createVideoAssetField(label: string): CustomField<string>;
|
|
15
|
+
export { inputClassName };
|
|
16
|
+
//# sourceMappingURL=AssetPickers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetPickers.d.ts","sourceRoot":"","sources":["../../src/chrome/AssetPickers.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQlD,QAAA,MAAM,cAAc,0BAA0B,CAAC;AAC/C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAiKhD,wBAAgB,sBAAsB,IAAI,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,CAkBvE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAgBtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAexE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,qBAAqB,IAAI,WAAW,CAAC,eAAe,CAAC,CAqDpE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAexE;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
4
|
+
import { FieldLabel } from '@measured/puck';
|
|
5
|
+
import { X } from 'lucide-react';
|
|
6
|
+
import { Button } from '@endora-commerce/admin-kit/ui';
|
|
7
|
+
import { AssetPicker, fetchAssetDetail } from '@endora-commerce/admin-kit/components';
|
|
8
|
+
import { toAbsoluteAssetUrl } from '@endora-commerce/admin-kit/lib';
|
|
9
|
+
const inputClassName = '_Input-input_bsxfo_26';
|
|
10
|
+
export const pickerButtonClass = 'h-9 shrink-0';
|
|
11
|
+
function AssetModalShell({ title, onClose, children, }) {
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const onKey = (e) => {
|
|
14
|
+
if (e.key === 'Escape')
|
|
15
|
+
onClose();
|
|
16
|
+
};
|
|
17
|
+
window.addEventListener('keydown', onKey);
|
|
18
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
19
|
+
}, [onClose]);
|
|
20
|
+
return (_jsx("div", { className: "fixed inset-0 z-[70] flex items-center justify-center bg-black/40 p-4", role: "dialog", "aria-modal": "true", "aria-label": title, onClick: onClose, children: _jsxs("div", { className: "flex max-h-[90vh] w-full max-w-3xl flex-col overflow-hidden rounded-lg border bg-background shadow-lg", onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "flex items-center justify-between gap-3 border-b px-4 py-3", children: [_jsx("h2", { className: "text-base font-semibold", children: title }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onClose, children: "Close" })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: children })] }) }));
|
|
21
|
+
}
|
|
22
|
+
function AssetModalFieldControl({ value, onChange, readOnly, label, acceptMimePrefix, modalTitle, }) {
|
|
23
|
+
const selected = typeof value === 'string' ? value : '';
|
|
24
|
+
const [modalOpen, setModalOpen] = useState(false);
|
|
25
|
+
const [previewUrl, setPreviewUrl] = useState(null);
|
|
26
|
+
const [previewLabel, setPreviewLabel] = useState(null);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (!selected) {
|
|
29
|
+
setPreviewUrl(null);
|
|
30
|
+
setPreviewLabel(null);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
let cancelled = false;
|
|
34
|
+
void (async () => {
|
|
35
|
+
try {
|
|
36
|
+
const asset = await fetchAssetDetail(selected);
|
|
37
|
+
if (!cancelled) {
|
|
38
|
+
setPreviewUrl(toAbsoluteAssetUrl(asset.url));
|
|
39
|
+
setPreviewLabel(asset.label ?? asset.filename);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
if (!cancelled) {
|
|
44
|
+
setPreviewUrl(null);
|
|
45
|
+
setPreviewLabel(selected);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
})();
|
|
49
|
+
return () => {
|
|
50
|
+
cancelled = true;
|
|
51
|
+
};
|
|
52
|
+
}, [selected]);
|
|
53
|
+
const onPick = useCallback((asset) => {
|
|
54
|
+
onChange(asset.id);
|
|
55
|
+
setPreviewUrl(toAbsoluteAssetUrl(asset.url));
|
|
56
|
+
setPreviewLabel(asset.label ?? asset.filename);
|
|
57
|
+
setModalOpen(false);
|
|
58
|
+
}, [onChange]);
|
|
59
|
+
const isImage = acceptMimePrefix === 'image/';
|
|
60
|
+
return (_jsxs(FieldLabel, { label: label, ...(readOnly === true ? { readOnly: true } : {}), children: [_jsxs("div", { className: "space-y-2", children: [selected && previewUrl && isImage ? (_jsx("div", { className: "overflow-hidden rounded-md border bg-muted/30", children: _jsx("img", { src: previewUrl, alt: previewLabel ?? 'Selected asset', className: "max-h-40 w-full object-contain" }) })) : null, selected ? (_jsx("input", { className: inputClassName, readOnly: true, value: previewLabel ?? selected })) : null, _jsxs("div", { className: "flex items-stretch gap-2", children: [_jsx(Button, { type: "button", variant: "outline", className: pickerButtonClass, disabled: readOnly === true, onClick: () => setModalOpen(true), children: selected ? 'Change' : 'Select' }), selected && !readOnly ? (_jsx(Button, { type: "button", variant: "ghost", className: pickerButtonClass, "aria-label": "Clear selection", onClick: () => {
|
|
61
|
+
onChange('');
|
|
62
|
+
setPreviewUrl(null);
|
|
63
|
+
setPreviewLabel(null);
|
|
64
|
+
}, children: _jsx(X, { className: "h-4 w-4" }) })) : null] })] }), modalOpen ? (_jsx(AssetModalShell, { title: modalTitle, onClose: () => setModalOpen(false), children: _jsx(AssetPicker, { ...(acceptMimePrefix ? { acceptMimePrefix } : {}), allowUpload: true, onSelect: onPick, onClose: () => setModalOpen(false) }) })) : null] }));
|
|
65
|
+
}
|
|
66
|
+
export function createImageSourceField() {
|
|
67
|
+
return {
|
|
68
|
+
type: 'custom',
|
|
69
|
+
label: 'Image source',
|
|
70
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(FieldLabel, { label: field.label ?? 'Image source', ...(readOnly === true ? { readOnly: true } : {}), children: _jsxs("select", { className: inputClassName, disabled: readOnly === true, value: value ?? 'url', onChange: (e) => onChange(e.target.value), children: [_jsx("option", { value: "url", children: "URL" }), _jsx("option", { value: "library", children: "Asset library" })] }) })),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function createImageUrlField(label) {
|
|
74
|
+
return {
|
|
75
|
+
type: 'custom',
|
|
76
|
+
label,
|
|
77
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(FieldLabel, { label: field.label ?? label, ...(readOnly === true ? { readOnly: true } : {}), children: _jsx("input", { className: inputClassName, readOnly: readOnly === true, value: value ?? '', placeholder: "https://\u2026", onChange: (e) => onChange(e.target.value) }) })),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function createImageAssetField(label) {
|
|
81
|
+
return {
|
|
82
|
+
type: 'custom',
|
|
83
|
+
label,
|
|
84
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(AssetModalFieldControl, { value: value, onChange: onChange, ...(readOnly === true ? { readOnly: true } : {}), label: field.label ?? label, acceptMimePrefix: "image/", modalTitle: "Select image" })),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** Single control for Image Slider slides — hides URL vs Asset based on source. */
|
|
88
|
+
export function createSlideImageField() {
|
|
89
|
+
return {
|
|
90
|
+
type: 'custom',
|
|
91
|
+
label: 'Image',
|
|
92
|
+
render: ({ value, onChange, readOnly, field }) => {
|
|
93
|
+
const imageSource = value?.imageSource ?? 'url';
|
|
94
|
+
const src = value?.src ?? '';
|
|
95
|
+
const assetId = value?.assetId ?? '';
|
|
96
|
+
return (_jsx(FieldLabel, { label: field.label ?? 'Image', ...(readOnly === true ? { readOnly: true } : {}), children: _jsxs("div", { className: "space-y-3", children: [_jsxs("select", { className: inputClassName, disabled: readOnly === true, value: imageSource, onChange: (e) => onChange({
|
|
97
|
+
imageSource: e.target.value,
|
|
98
|
+
src,
|
|
99
|
+
assetId,
|
|
100
|
+
}), children: [_jsx("option", { value: "url", children: "URL" }), _jsx("option", { value: "library", children: "Asset library" })] }), imageSource === 'library' ? (_jsx(AssetModalFieldControl, { value: assetId, onChange: (nextId) => onChange({ imageSource: 'library', src: '', assetId: nextId }), ...(readOnly === true ? { readOnly: true } : {}), label: "Image", acceptMimePrefix: "image/", modalTitle: "Select image" })) : (_jsx("input", { className: inputClassName, readOnly: readOnly === true, value: src, placeholder: "https://\u2026", onChange: (e) => onChange({ imageSource: 'url', src: e.target.value, assetId: '' }) }))] }) }));
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function createVideoAssetField(label) {
|
|
105
|
+
return {
|
|
106
|
+
type: 'custom',
|
|
107
|
+
label,
|
|
108
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(AssetModalFieldControl, { value: value, onChange: onChange, ...(readOnly === true ? { readOnly: true } : {}), label: field.label ?? label, acceptMimePrefix: "video/", modalTitle: "Select video" })),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export { inputClassName };
|
|
112
|
+
//# sourceMappingURL=AssetPickers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetPickers.js","sourceRoot":"","sources":["../../src/chrome/AssetPickers.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Field } from '@measured/puck';
|
|
2
|
+
export declare function createProductSlugField(): Field<string, Record<string, unknown>>;
|
|
3
|
+
export declare function createProductSlugsField(): Field<string[], Record<string, unknown>>;
|
|
4
|
+
export declare function createCategorySlugField(): Field<string, Record<string, unknown>>;
|
|
5
|
+
export declare function createCategorySlugsField(): Field<string[], Record<string, unknown>>;
|
|
6
|
+
//# sourceMappingURL=CatalogPickers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatalogPickers.d.ts","sourceRoot":"","sources":["../../src/chrome/CatalogPickers.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAysB5C,wBAAgB,sBAAsB,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAc/E;AAED,wBAAgB,uBAAuB,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAclF;AAED,wBAAgB,uBAAuB,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAchF;AAED,wBAAgB,wBAAwB,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcnF"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { PB_DATA_METADATA } from '@endora-commerce/page-builder-core';
|
|
5
|
+
import { ChevronDown, ChevronRight, Search, X } from 'lucide-react';
|
|
6
|
+
import { apiClient, normalize } from '@endora-commerce/admin-kit/lib';
|
|
7
|
+
import { Button } from '@endora-commerce/admin-kit/ui';
|
|
8
|
+
const inputClassName = '_Input-input_bsxfo_26';
|
|
9
|
+
/** Match shadcn Button `h-9` — Puck's input padding is taller by default. */
|
|
10
|
+
const pickerInputClassName = `${inputClassName} !box-border !h-9 !min-h-9 !py-0 !px-3 !text-sm leading-9`;
|
|
11
|
+
const pickerButtonClass = 'h-9 shrink-0 px-3';
|
|
12
|
+
function FieldShell({ label, children, }) {
|
|
13
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("label", { className: "text-xs font-medium opacity-80", children: label }), children] }));
|
|
14
|
+
}
|
|
15
|
+
/** Stable key so modal draft sync does not reset on new array identities each render. */
|
|
16
|
+
function slugsKey(slugs) {
|
|
17
|
+
return slugs.join('\0');
|
|
18
|
+
}
|
|
19
|
+
function pickName(name, fallback) {
|
|
20
|
+
if (typeof name === 'string')
|
|
21
|
+
return name || fallback;
|
|
22
|
+
return name['pl-PL'] ?? name['en-US'] ?? Object.values(name)[0] ?? fallback;
|
|
23
|
+
}
|
|
24
|
+
function flattenCategories(categories) {
|
|
25
|
+
const byParent = new Map();
|
|
26
|
+
for (const cat of categories) {
|
|
27
|
+
const key = cat.parentCategoryId;
|
|
28
|
+
const list = byParent.get(key) ?? [];
|
|
29
|
+
list.push(cat);
|
|
30
|
+
byParent.set(key, list);
|
|
31
|
+
}
|
|
32
|
+
const walk = (parentId, level) => {
|
|
33
|
+
const nodes = byParent.get(parentId) ?? [];
|
|
34
|
+
return nodes.flatMap((cat) => {
|
|
35
|
+
const prefix = level > 0 ? `${'—'.repeat(level)} ` : '';
|
|
36
|
+
return [
|
|
37
|
+
{ slug: cat.slug, label: `${prefix}${pickName(cat.name, cat.slug)}` },
|
|
38
|
+
...walk(cat.id, level + 1),
|
|
39
|
+
];
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
return walk(null, 0);
|
|
43
|
+
}
|
|
44
|
+
function useCategoryOptions() {
|
|
45
|
+
const [categories, setCategories] = useState([]);
|
|
46
|
+
const [loading, setLoading] = useState(true);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
let cancelled = false;
|
|
49
|
+
void (async () => {
|
|
50
|
+
setLoading(true);
|
|
51
|
+
try {
|
|
52
|
+
const res = await apiClient.get('/api/v1/admin/catalog/categories');
|
|
53
|
+
if (!cancelled)
|
|
54
|
+
setCategories(flattenCategories(res.data));
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
if (!cancelled)
|
|
58
|
+
setLoading(false);
|
|
59
|
+
}
|
|
60
|
+
})();
|
|
61
|
+
return () => {
|
|
62
|
+
cancelled = true;
|
|
63
|
+
};
|
|
64
|
+
}, []);
|
|
65
|
+
return { categories, loading };
|
|
66
|
+
}
|
|
67
|
+
function ModalShell({ title, onClose, children, }) {
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
const onKey = (e) => {
|
|
70
|
+
if (e.key === 'Escape')
|
|
71
|
+
onClose();
|
|
72
|
+
};
|
|
73
|
+
window.addEventListener('keydown', onKey);
|
|
74
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
75
|
+
}, [onClose]);
|
|
76
|
+
return (_jsx("div", { className: "fixed inset-0 z-[70] flex items-center justify-center bg-black/40 p-4", role: "dialog", "aria-modal": "true", "aria-label": title, onClick: onClose, children: _jsxs("div", { className: "flex max-h-[85vh] w-full max-w-2xl flex-col overflow-hidden rounded-lg border bg-background shadow-lg", onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "flex items-center justify-between gap-3 border-b px-4 py-3", children: [_jsx("h2", { className: "text-base font-semibold", children: title }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onClose, children: "Close" })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: children })] }) }));
|
|
77
|
+
}
|
|
78
|
+
function ProductSearchModal({ open, selectedSlugs, multiple = true, onClose, onApply, }) {
|
|
79
|
+
const [query, setQuery] = useState('');
|
|
80
|
+
const [status, setStatus] = useState('active');
|
|
81
|
+
const [page, setPage] = useState(0);
|
|
82
|
+
const [products, setProducts] = useState([]);
|
|
83
|
+
const [total, setTotal] = useState(0);
|
|
84
|
+
const [loading, setLoading] = useState(false);
|
|
85
|
+
const [draft, setDraft] = useState(selectedSlugs);
|
|
86
|
+
const pageSize = 20;
|
|
87
|
+
const load = useCallback(async () => {
|
|
88
|
+
setLoading(true);
|
|
89
|
+
try {
|
|
90
|
+
const params = new URLSearchParams();
|
|
91
|
+
params.set('page', String(page));
|
|
92
|
+
params.set('pageSize', String(pageSize));
|
|
93
|
+
if (query.trim())
|
|
94
|
+
params.set('q', query.trim());
|
|
95
|
+
if (status !== 'all')
|
|
96
|
+
params.set('status', status);
|
|
97
|
+
const res = await apiClient.get(`/api/v1/admin/catalog/products?${params.toString()}`);
|
|
98
|
+
setProducts(res.data);
|
|
99
|
+
setTotal(res.pagination.total);
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
setLoading(false);
|
|
103
|
+
}
|
|
104
|
+
}, [page, query, status]);
|
|
105
|
+
const selectedKey = slugsKey(selectedSlugs);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (!open)
|
|
108
|
+
return;
|
|
109
|
+
setDraft(selectedKey ? selectedKey.split('\0') : []);
|
|
110
|
+
setPage(0);
|
|
111
|
+
}, [open, selectedKey]);
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (!open)
|
|
114
|
+
return undefined;
|
|
115
|
+
const id = window.setTimeout(() => void load(), 250);
|
|
116
|
+
return () => window.clearTimeout(id);
|
|
117
|
+
}, [open, load]);
|
|
118
|
+
const toggle = (slug) => {
|
|
119
|
+
if (multiple) {
|
|
120
|
+
setDraft((prev) => (prev.includes(slug) ? prev.filter((s) => s !== slug) : [...prev, slug]));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Single-select: apply immediately (same UX as asset picker).
|
|
124
|
+
onApply([slug]);
|
|
125
|
+
onClose();
|
|
126
|
+
};
|
|
127
|
+
if (!open)
|
|
128
|
+
return null;
|
|
129
|
+
const pageCount = Math.max(1, Math.ceil(total / pageSize));
|
|
130
|
+
return (_jsx(ModalShell, { title: "Select products", onClose: onClose, children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs("div", { className: "relative min-w-[12rem] flex-1", children: [_jsx(Search, { className: "pointer-events-none absolute left-2 top-2.5 h-4 w-4 opacity-50" }), _jsx("input", { className: `${inputClassName} pl-8`, value: query, onChange: (e) => {
|
|
131
|
+
setQuery(e.target.value);
|
|
132
|
+
setPage(0);
|
|
133
|
+
}, placeholder: "Search by name, SKU or slug\u2026" })] }), _jsxs("select", { className: inputClassName, value: status, onChange: (e) => {
|
|
134
|
+
setStatus(e.target.value);
|
|
135
|
+
setPage(0);
|
|
136
|
+
}, children: [_jsx("option", { value: "all", children: "All statuses" }), _jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "draft", children: "Draft" }), _jsx("option", { value: "inactive", children: "Inactive" })] })] }), _jsx("div", { className: "rounded-md border", children: loading ? (_jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "Loading\u2026" })) : products.length === 0 ? (_jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "No products found." })) : (_jsx("ul", { className: "divide-y", children: products.map((product) => {
|
|
137
|
+
const checked = draft.includes(product.slug);
|
|
138
|
+
return (_jsx("li", { children: _jsxs("label", { className: "flex cursor-pointer items-start gap-3 px-3 py-2 hover:bg-muted/40", children: [_jsx("input", { type: multiple ? 'checkbox' : 'radio', name: "product-pick", className: "mt-1", checked: checked, onChange: () => toggle(product.slug) }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "block truncate text-sm font-medium", children: pickName(product.name, product.slug) }), _jsxs("span", { className: "block font-mono text-xs text-muted-foreground", children: [product.sku, " \u00B7 ", product.slug] })] })] }) }, product.id));
|
|
139
|
+
}) })) }), _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("span", { className: "text-xs text-muted-foreground", children: [draft.length, " selected \u00B7 page ", page + 1, " / ", pageCount] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: page <= 0, onClick: () => setPage((p) => p - 1), children: "Previous" }), _jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: page + 1 >= pageCount, onClick: () => setPage((p) => p + 1), children: "Next" })] })] }), _jsxs("div", { className: "flex justify-end gap-2 border-t pt-3", children: [_jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }), multiple ? (_jsx(Button, { type: "button", onClick: () => {
|
|
140
|
+
onApply(draft);
|
|
141
|
+
onClose();
|
|
142
|
+
}, children: "Apply selection" })) : null] })] }) }));
|
|
143
|
+
}
|
|
144
|
+
function CategorySearchModal({ open, selectedSlugs, multiple, onClose, onApply, }) {
|
|
145
|
+
const { categories, loading } = useCategoryOptions();
|
|
146
|
+
const [query, setQuery] = useState('');
|
|
147
|
+
const [draft, setDraft] = useState(selectedSlugs);
|
|
148
|
+
const selectedKey = slugsKey(selectedSlugs);
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
if (!open)
|
|
151
|
+
return;
|
|
152
|
+
setDraft(selectedKey ? selectedKey.split('\0') : []);
|
|
153
|
+
setQuery('');
|
|
154
|
+
}, [open, selectedKey]);
|
|
155
|
+
const filtered = useMemo(() => {
|
|
156
|
+
const needle = normalize(query);
|
|
157
|
+
if (!needle)
|
|
158
|
+
return categories;
|
|
159
|
+
return categories.filter((c) => normalize(c.label).includes(needle) || normalize(c.slug).includes(needle));
|
|
160
|
+
}, [categories, query]);
|
|
161
|
+
if (!open)
|
|
162
|
+
return null;
|
|
163
|
+
const toggle = (slug) => {
|
|
164
|
+
if (multiple) {
|
|
165
|
+
setDraft((prev) => (prev.includes(slug) ? prev.filter((s) => s !== slug) : [...prev, slug]));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
onApply([slug]);
|
|
169
|
+
onClose();
|
|
170
|
+
};
|
|
171
|
+
return (_jsx(ModalShell, { title: multiple ? 'Select categories' : 'Select category', onClose: onClose, children: _jsxs("div", { className: "space-y-3", children: [_jsx("input", { className: inputClassName, value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Filter categories\u2026" }), _jsx("div", { className: "max-h-80 overflow-y-auto rounded-md border", children: loading ? (_jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "Loading\u2026" })) : filtered.length === 0 ? (_jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "No categories found." })) : (_jsx("ul", { className: "divide-y", children: filtered.map((cat) => {
|
|
172
|
+
const checked = draft.includes(cat.slug);
|
|
173
|
+
return (_jsx("li", { children: _jsxs("label", { className: "flex cursor-pointer items-center gap-3 px-3 py-2 hover:bg-muted/40", children: [_jsx("input", { type: multiple ? 'checkbox' : 'radio', name: "category-pick", checked: checked, onChange: () => toggle(cat.slug) }), _jsx("span", { className: "text-sm", children: cat.label })] }) }, cat.slug));
|
|
174
|
+
}) })) }), _jsxs("div", { className: "flex justify-end gap-2 border-t pt-3", children: [_jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }), multiple ? (_jsx(Button, { type: "button", onClick: () => {
|
|
175
|
+
onApply(draft);
|
|
176
|
+
onClose();
|
|
177
|
+
}, children: "Apply" })) : null] })] }) }));
|
|
178
|
+
}
|
|
179
|
+
function SelectedItemsList({ items, onRemove, emptyLabel, }) {
|
|
180
|
+
const [open, setOpen] = useState(items.length > 0);
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
if (items.length > 0)
|
|
183
|
+
setOpen(true);
|
|
184
|
+
}, [items.length]);
|
|
185
|
+
return (_jsxs("div", { className: "rounded-md border", children: [_jsxs("button", { type: "button", className: "flex w-full items-center gap-2 px-3 py-2 text-left text-xs font-medium", onClick: () => setOpen((v) => !v), children: [open ? _jsx(ChevronDown, { className: "h-3.5 w-3.5" }) : _jsx(ChevronRight, { className: "h-3.5 w-3.5" }), "Selected (", items.length, ")"] }), open ? (_jsx("ul", { className: "max-h-40 divide-y overflow-y-auto border-t", children: items.length === 0 ? (_jsx("li", { className: "px-3 py-2 text-xs text-muted-foreground", children: emptyLabel })) : (items.map((item) => (_jsxs("li", { className: "flex items-center gap-2 px-3 py-1.5 text-xs", children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: item.label }), _jsx("button", { type: "button", className: "shrink-0 rounded p-0.5 hover:bg-muted", "aria-label": `Remove ${item.label}`, onClick: () => onRemove(item.slug), children: _jsx(X, { className: "h-3.5 w-3.5" }) })] }, item.slug)))) })) : null] }));
|
|
186
|
+
}
|
|
187
|
+
function ProductSlugsFieldControl({ value, onChange, readOnly, label, }) {
|
|
188
|
+
const selected = Array.isArray(value) ? value : [];
|
|
189
|
+
const [modalOpen, setModalOpen] = useState(false);
|
|
190
|
+
const [labels, setLabels] = useState({});
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (selected.length === 0) {
|
|
193
|
+
setLabels({});
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
let cancelled = false;
|
|
197
|
+
void (async () => {
|
|
198
|
+
try {
|
|
199
|
+
const params = new URLSearchParams();
|
|
200
|
+
params.set('pageSize', '50');
|
|
201
|
+
const res = await apiClient.get(`/api/v1/admin/catalog/products?${params.toString()}`);
|
|
202
|
+
if (cancelled)
|
|
203
|
+
return;
|
|
204
|
+
const next = {};
|
|
205
|
+
for (const product of res.data) {
|
|
206
|
+
if (selected.includes(product.slug)) {
|
|
207
|
+
next[product.slug] = `${pickName(product.name, product.slug)} (${product.sku})`;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
for (const slug of selected) {
|
|
211
|
+
if (!next[slug])
|
|
212
|
+
next[slug] = slug;
|
|
213
|
+
}
|
|
214
|
+
setLabels(next);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
if (!cancelled) {
|
|
218
|
+
setLabels(Object.fromEntries(selected.map((slug) => [slug, slug])));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
})();
|
|
222
|
+
return () => {
|
|
223
|
+
cancelled = true;
|
|
224
|
+
};
|
|
225
|
+
}, [selected]);
|
|
226
|
+
const listItems = selected.map((slug) => ({ slug, label: labels[slug] ?? slug }));
|
|
227
|
+
return (_jsxs(FieldShell, { label: label, children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Button, { type: "button", variant: "outline", className: pickerButtonClass, disabled: readOnly === true, onClick: () => setModalOpen(true), children: "Select products" }), _jsx(SelectedItemsList, { items: listItems, emptyLabel: "No products selected yet.", onRemove: (slug) => onChange(selected.filter((s) => s !== slug)) })] }), _jsx(ProductSearchModal, { open: modalOpen, selectedSlugs: selected, onClose: () => setModalOpen(false), onApply: onChange })] }));
|
|
228
|
+
}
|
|
229
|
+
function CategorySlugsFieldControl({ value, onChange, readOnly, label, }) {
|
|
230
|
+
const selected = Array.isArray(value) ? value : [];
|
|
231
|
+
const { categories } = useCategoryOptions();
|
|
232
|
+
const [modalOpen, setModalOpen] = useState(false);
|
|
233
|
+
const labelBySlug = useMemo(() => new Map(categories.map((c) => [c.slug, c.label])), [categories]);
|
|
234
|
+
const listItems = selected.map((slug) => ({ slug, label: labelBySlug.get(slug) ?? slug }));
|
|
235
|
+
return (_jsxs(FieldShell, { label: label, children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Button, { type: "button", variant: "outline", className: pickerButtonClass, disabled: readOnly === true, onClick: () => setModalOpen(true), children: "Select categories" }), _jsx(SelectedItemsList, { items: listItems, emptyLabel: "No categories selected yet.", onRemove: (slug) => onChange(selected.filter((s) => s !== slug)) })] }), _jsx(CategorySearchModal, { open: modalOpen, selectedSlugs: selected, multiple: true, onClose: () => setModalOpen(false), onApply: onChange })] }));
|
|
236
|
+
}
|
|
237
|
+
function SingleCategoryFieldControl({ value, onChange, readOnly, label, }) {
|
|
238
|
+
const { categories, loading } = useCategoryOptions();
|
|
239
|
+
const [modalOpen, setModalOpen] = useState(false);
|
|
240
|
+
const selected = typeof value === 'string' ? value : '';
|
|
241
|
+
const selectedLabel = categories.find((c) => c.slug === selected)?.label ?? selected;
|
|
242
|
+
const selectedSlugs = useMemo(() => (selected ? [selected] : []), [selected]);
|
|
243
|
+
return (_jsxs(FieldShell, { label: label, children: [_jsx("div", { className: "space-y-2", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { className: `${pickerInputClassName} min-w-0 flex-1`, readOnly: true, value: selectedLabel || '— Not selected —' }), _jsx(Button, { type: "button", variant: "outline", className: pickerButtonClass, disabled: readOnly === true || loading, onClick: () => setModalOpen(true), children: "Select" })] }) }), _jsx(CategorySearchModal, { open: modalOpen, selectedSlugs: selectedSlugs, multiple: false, onClose: () => setModalOpen(false), onApply: (slugs) => onChange(slugs[0] ?? '') })] }));
|
|
244
|
+
}
|
|
245
|
+
function SingleProductFieldControl({ value, onChange, readOnly, label, }) {
|
|
246
|
+
const selected = typeof value === 'string' ? value : '';
|
|
247
|
+
const [modalOpen, setModalOpen] = useState(false);
|
|
248
|
+
const [selectedLabel, setSelectedLabel] = useState(selected);
|
|
249
|
+
useEffect(() => {
|
|
250
|
+
if (!selected) {
|
|
251
|
+
setSelectedLabel('');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
let cancelled = false;
|
|
255
|
+
void (async () => {
|
|
256
|
+
try {
|
|
257
|
+
const params = new URLSearchParams();
|
|
258
|
+
params.set('q', selected);
|
|
259
|
+
params.set('pageSize', '5');
|
|
260
|
+
const res = await apiClient.get(`/api/v1/admin/catalog/products?${params.toString()}`);
|
|
261
|
+
const product = res.data.find((p) => p.slug === selected);
|
|
262
|
+
if (!cancelled) {
|
|
263
|
+
setSelectedLabel(product ? `${pickName(product.name, product.slug)} (${product.sku})` : selected);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
if (!cancelled)
|
|
268
|
+
setSelectedLabel(selected);
|
|
269
|
+
}
|
|
270
|
+
})();
|
|
271
|
+
return () => {
|
|
272
|
+
cancelled = true;
|
|
273
|
+
};
|
|
274
|
+
}, [selected]);
|
|
275
|
+
const selectedSlugs = useMemo(() => (selected ? [selected] : []), [selected]);
|
|
276
|
+
return (_jsxs(FieldShell, { label: label, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { className: `${pickerInputClassName} min-w-0 flex-1`, readOnly: true, value: selectedLabel || '— Not selected —' }), _jsx(Button, { type: "button", variant: "outline", className: pickerButtonClass, disabled: readOnly === true, onClick: () => setModalOpen(true), children: "Select" })] }), _jsx(ProductSearchModal, { open: modalOpen, selectedSlugs: selectedSlugs, multiple: false, onClose: () => setModalOpen(false), onApply: (slugs) => onChange(slugs[0] ?? '') })] }));
|
|
277
|
+
}
|
|
278
|
+
export function createProductSlugField() {
|
|
279
|
+
return {
|
|
280
|
+
type: 'custom',
|
|
281
|
+
label: 'Product',
|
|
282
|
+
metadata: PB_DATA_METADATA,
|
|
283
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(SingleProductFieldControl, { value: value, onChange: onChange, ...(readOnly === true ? { readOnly: true } : {}), label: field.label ?? 'Product' })),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
export function createProductSlugsField() {
|
|
287
|
+
return {
|
|
288
|
+
type: 'custom',
|
|
289
|
+
label: 'Products',
|
|
290
|
+
metadata: PB_DATA_METADATA,
|
|
291
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(ProductSlugsFieldControl, { value: value, onChange: onChange, ...(readOnly === true ? { readOnly: true } : {}), label: field.label ?? 'Products' })),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
export function createCategorySlugField() {
|
|
295
|
+
return {
|
|
296
|
+
type: 'custom',
|
|
297
|
+
label: 'Category',
|
|
298
|
+
metadata: PB_DATA_METADATA,
|
|
299
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(SingleCategoryFieldControl, { value: value, onChange: onChange, ...(readOnly === true ? { readOnly: true } : {}), label: field.label ?? 'Category' })),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
export function createCategorySlugsField() {
|
|
303
|
+
return {
|
|
304
|
+
type: 'custom',
|
|
305
|
+
label: 'Categories',
|
|
306
|
+
metadata: PB_DATA_METADATA,
|
|
307
|
+
render: ({ value, onChange, readOnly, field }) => (_jsx(CategorySlugsFieldControl, { value: value, onChange: onChange, ...(readOnly === true ? { readOnly: true } : {}), label: field.label ?? 'Categories' })),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=CatalogPickers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatalogPickers.js","sourceRoot":"","sources":["../../src/chrome/CatalogPickers.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { CmsColorPaletteEntry } from '@endora-commerce/contracts';
|
|
3
|
+
export declare function ColorPaletteModal({ open, entries, pickMode, onClose, onPick, onSave, }: {
|
|
4
|
+
open: boolean;
|
|
5
|
+
entries: CmsColorPaletteEntry[];
|
|
6
|
+
pickMode: boolean;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onPick: (hex: string) => void;
|
|
9
|
+
onSave: (entries: CmsColorPaletteEntry[]) => Promise<void>;
|
|
10
|
+
}): ReactNode;
|
|
11
|
+
//# sourceMappingURL=ColorPaletteModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPaletteModal.d.ts","sourceRoot":"","sources":["../../src/chrome/ColorPaletteModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AA0DvE,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,EACP,MAAM,EACN,MAAM,GACP,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D,GAAG,SAAS,CAmIZ"}
|