@uxf/cms 11.48.3 → 11.49.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.
@@ -0,0 +1,6 @@
1
+ import React, { ReactNode } from "react";
2
+ interface ContentBuilderBodyProps {
3
+ children: ReactNode;
4
+ }
5
+ export declare function ContentBuilderBody(props: ContentBuilderBodyProps): React.JSX.Element;
6
+ export {};
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContentBuilderBody = ContentBuilderBody;
7
+ const react_1 = __importDefault(require("react"));
8
+ function ContentBuilderBody(props) {
9
+ return react_1.default.createElement("div", { className: "uxf-cb__body" }, props.children);
10
+ }
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface ContentBuilderHeaderProps {
3
+ title: string;
4
+ className?: string;
5
+ }
6
+ export declare function ContentBuilderHeader(props: ContentBuilderHeaderProps): React.JSX.Element;
7
+ export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContentBuilderHeader = ContentBuilderHeader;
7
+ const button_1 = require("@uxf/ui/button");
8
+ const react_1 = __importDefault(require("react"));
9
+ function ContentBuilderHeader(props) {
10
+ return (react_1.default.createElement("div", { className: "uxf-cb__header" },
11
+ react_1.default.createElement("h1", { className: "uxg-cb__header-title uxf-typo-h5" }, props.title),
12
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Ulo\u017Eit")));
13
+ }
@@ -1,11 +1,11 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import { FieldValues, SubmitErrorHandler, SubmitHandler, UseFormReturn } from "react-hook-form";
3
- interface Props<FormData extends FieldValues> {
3
+ interface ContentBuilderRootProps<FormData extends FieldValues> {
4
4
  id: string;
5
5
  children: ReactNode;
6
6
  formApi: UseFormReturn<FormData>;
7
7
  onSubmit: SubmitHandler<FormData>;
8
8
  onError?: SubmitErrorHandler<FormData>;
9
9
  }
10
- export declare function FormWrapper<FormData extends FieldValues>(props: Props<FormData>): React.JSX.Element;
10
+ export declare function ContentBuilderRoot<FormData extends FieldValues>(props: ContentBuilderRootProps<FormData>): React.JSX.Element;
11
11
  export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContentBuilderRoot = ContentBuilderRoot;
7
+ const form_1 = require("@uxf/form/form");
8
+ const react_1 = __importDefault(require("react"));
9
+ const details_visibility_context_1 = require("../pages/content-builder/context/details-visibility-context");
10
+ function ContentBuilderRoot(props) {
11
+ return (react_1.default.createElement(form_1.Form, { className: "uxf-cb", formApi: props.formApi, id: props.id, onError: props.onError, onSubmit: props.onSubmit },
12
+ react_1.default.createElement(details_visibility_context_1.DetailsVisibilityProvider, null, props.children)));
13
+ }
@@ -3,5 +3,5 @@ interface Props {
3
3
  children: ReactNode;
4
4
  title: string;
5
5
  }
6
- export declare function Sidebar(props: Props): React.JSX.Element;
6
+ export declare function ContentBuilderSidebar(props: Props): React.JSX.Element;
7
7
  export {};
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Sidebar = Sidebar;
6
+ exports.ContentBuilderSidebar = ContentBuilderSidebar;
7
7
  const react_1 = __importDefault(require("react"));
8
- function Sidebar(props) {
9
- return (react_1.default.createElement("div", { className: "shrink-0 basis-[500px] bg-white px-4 pb-8 xl:overflow-y-auto dark:bg-gray-950" },
10
- react_1.default.createElement("h2", { className: "uxf-typo-h5 px-4 pb-4 pt-6" }, props.title),
8
+ function ContentBuilderSidebar(props) {
9
+ return (react_1.default.createElement("div", { className: "uxf-cb__sidebar" },
10
+ react_1.default.createElement("h2", { className: "uxf-typo-h5" }, props.title),
11
11
  props.children));
12
12
  }
@@ -0,0 +1,49 @@
1
+ :root {
2
+ --uxf-cb-header-height: theme("height.14");
3
+ }
4
+
5
+ .uxf-cb {
6
+ &__header {
7
+ align-items: center;
8
+ background-color: theme("colors.white");
9
+ display: flex;
10
+ height: var(--uxf-cb-header-height);
11
+ justify-content: space-between;
12
+ padding: theme("space.2") theme("space.4");
13
+ position: sticky;
14
+ top: 0;
15
+ z-index: theme("zIndex.30");
16
+
17
+ @apply shadow-md;
18
+ }
19
+
20
+ &__body {
21
+ display: flex;
22
+ flex-direction: column-reverse;
23
+
24
+ @screen sm {
25
+ flex-direction: row;
26
+ height: calc(100vh - var(--uxf-cb-header-height));
27
+ }
28
+ }
29
+
30
+ &__content {
31
+ overflow-y: auto;
32
+ padding: theme("space.4");
33
+
34
+ @screen sm {
35
+ flex-grow: 1;
36
+ overflow-y: auto;
37
+ }
38
+ }
39
+
40
+ &__content-header {
41
+ margin-top: 0;
42
+ }
43
+
44
+ &__sidebar {
45
+ background-color: theme("colors.white");
46
+ overflow-y: auto;
47
+ padding: theme("space.4") theme("space.4") theme("space.16");
48
+ }
49
+ }
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { SubmitHandler, UseFormReturn } from "react-hook-form";
3
3
  import { ContentComponent } from "../pages/content-builder";
4
4
  import { ContentBuilderFormData, FieldsConfiguration } from "./types";
5
- interface ContentBuilderProps {
5
+ export interface ContentBuilderProps {
6
6
  id?: string;
7
7
  formApi: UseFormReturn<ContentBuilderFormData>;
8
8
  onSubmit: SubmitHandler<ContentBuilderFormData>;
@@ -11,4 +11,3 @@ interface ContentBuilderProps {
11
11
  fields?: FieldsConfiguration;
12
12
  }
13
13
  export declare function ContentBuilder(props: ContentBuilderProps): React.JSX.Element;
14
- export {};
@@ -27,10 +27,12 @@ exports.ContentBuilder = ContentBuilder;
27
27
  const tabs_1 = require("@uxf/ui/tabs");
28
28
  const react_1 = __importStar(require("react"));
29
29
  const content_builder_1 = require("../pages/content-builder");
30
- const form_wrapper_1 = require("./form-wrapper");
30
+ const content_builder_body_1 = require("./content-builder-body");
31
+ const content_builder_header_1 = require("./content-builder-header");
32
+ const content_builder_root_1 = require("./content-builder-root");
33
+ const content_builder_sidebar_1 = require("./content-builder-sidebar");
31
34
  const content_builder_basic_form_1 = require("./forms/content-builder-basic-form");
32
35
  const content_builder_seo_form_1 = require("./forms/content-builder-seo-form");
33
- const sidebar_1 = require("./sidebar");
34
36
  var TabName;
35
37
  (function (TabName) {
36
38
  TabName["Basic"] = "basic";
@@ -40,12 +42,14 @@ function ContentBuilder(props) {
40
42
  var _a;
41
43
  const generatedId = (0, react_1.useId)();
42
44
  const [activeTab, setActiveTab] = (0, react_1.useState)(TabName.Basic);
43
- return (react_1.default.createElement(form_wrapper_1.FormWrapper, { formApi: props.formApi, id: (_a = props.id) !== null && _a !== void 0 ? _a : generatedId, onSubmit: props.onSubmit },
44
- react_1.default.createElement(content_builder_1.ContentField, { contentComponents: props.ContentComponents, control: props.formApi.control, name: "content" }),
45
- react_1.default.createElement(sidebar_1.Sidebar, { title: "Nastaven\u00ED" },
46
- react_1.default.createElement(tabs_1.Tabs, { onChange: setActiveTab, value: activeTab },
47
- react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "Z\u00E1kladn\u00ED", name: TabName.Basic },
48
- react_1.default.createElement(content_builder_basic_form_1.ContentBuilderBasicForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace })),
49
- react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "SEO", name: TabName.Seo },
50
- react_1.default.createElement(content_builder_seo_form_1.ContentBuilderSeoForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace }))))));
45
+ return (react_1.default.createElement(content_builder_root_1.ContentBuilderRoot, { formApi: props.formApi, id: (_a = props.id) !== null && _a !== void 0 ? _a : generatedId, onSubmit: props.onSubmit },
46
+ react_1.default.createElement(content_builder_header_1.ContentBuilderHeader, { title: "\u010Cl\u00E1nek knihovny" }),
47
+ react_1.default.createElement(content_builder_body_1.ContentBuilderBody, null,
48
+ react_1.default.createElement(content_builder_1.ContentField, { contentComponents: props.ContentComponents, control: props.formApi.control, name: "content" }),
49
+ react_1.default.createElement(content_builder_sidebar_1.ContentBuilderSidebar, { title: "Nastaven\u00ED" },
50
+ react_1.default.createElement(tabs_1.Tabs, { onChange: setActiveTab, value: activeTab },
51
+ react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "Z\u00E1kladn\u00ED", name: TabName.Basic },
52
+ react_1.default.createElement(content_builder_basic_form_1.ContentBuilderBasicForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace })),
53
+ react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "SEO", name: TabName.Seo },
54
+ react_1.default.createElement(content_builder_seo_form_1.ContentBuilderSeoForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace })))))));
51
55
  }
@@ -1,4 +1,4 @@
1
1
  export * from "./content-builder";
2
- export * from "./form-wrapper";
2
+ export * from "./content-builder-root";
3
3
  export * from "./map-content-response-to-form-data";
4
4
  export * from "./map-form-data-to-content-request";
@@ -15,6 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./content-builder"), exports);
18
- __exportStar(require("./form-wrapper"), exports);
18
+ __exportStar(require("./content-builder-root"), exports);
19
19
  __exportStar(require("./map-content-response-to-form-data"), exports);
20
20
  __exportStar(require("./map-form-data-to-content-request"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/cms",
3
- "version": "11.48.3",
3
+ "version": "11.49.0",
4
4
  "description": "UXF Cms",
5
5
  "author": "UXFans <dev@uxf.cz>",
6
6
  "homepage": "https://gitlab.com/uxf-npm/cms#readme",
@@ -32,11 +32,11 @@
32
32
  "@redux-devtools/extension": "3.3.0",
33
33
  "@uxf/core": "11.47.0",
34
34
  "@uxf/core-react": "11.47.0",
35
- "@uxf/data-grid": "11.48.3",
36
- "@uxf/form": "11.48.3",
35
+ "@uxf/data-grid": "11.49.0",
36
+ "@uxf/form": "11.49.0",
37
37
  "@uxf/router": "11.46.0",
38
- "@uxf/ui": "11.48.3",
39
- "@uxf/wysiwyg": "11.48.3",
38
+ "@uxf/ui": "11.49.0",
39
+ "@uxf/wysiwyg": "11.49.0",
40
40
  "axios": "1.7.5",
41
41
  "axios-hooks": "5.0.2",
42
42
  "es6-error": "4.1.1",
@@ -7,6 +7,7 @@ exports.FormContent = void 0;
7
7
  const sortable_1 = require("@dnd-kit/sortable");
8
8
  const utilities_1 = require("@dnd-kit/utilities");
9
9
  const button_1 = require("@uxf/ui/button");
10
+ const dialog_panel_1 = require("@uxf/ui/dialog/dialog-panel");
10
11
  const icon_1 = require("@uxf/ui/icon");
11
12
  const modal_service_1 = require("@uxf/ui/modal/modal-service");
12
13
  const paper_1 = require("@uxf/ui/paper/paper");
@@ -18,10 +19,10 @@ const getSection = (sections, type) => {
18
19
  const AddSectionButton = (props) => {
19
20
  return (react_1.default.createElement("div", { className: "mt-4 flex justify-center" },
20
21
  react_1.default.createElement(button_1.Button, { onClick: () => (0, modal_service_1.openModal)({
21
- children: (react_1.default.createElement("div", { className: "px-4 py-6" },
22
- react_1.default.createElement("h2", { className: "uxf-typo-h5 mb-4" }, "P\u0159idat sekci"),
23
- react_1.default.createElement("div", { className: "space-y-4" }, props.contentComponents.map((component) => (react_1.default.createElement(button_1.Button, { isFullWidth: true, key: component.getConfig().type, onClick: () => props.createSection(component, props.index), variant: "secondary" }, component.getConfig().label)))))),
24
- width: "sm",
22
+ children: (react_1.default.createElement(dialog_panel_1.DialogPanel, { width: "sm" },
23
+ react_1.default.createElement("div", { className: "px-4 py-6" },
24
+ react_1.default.createElement("h2", { className: "uxf-typo-h5 mb-4" }, "P\u0159idat sekci"),
25
+ react_1.default.createElement("div", { className: "space-y-4" }, props.contentComponents.map((component) => (react_1.default.createElement(button_1.Button, { isFullWidth: true, key: component.getConfig().type, onClick: () => props.createSection(component, props.index), variant: "secondary" }, component.getConfig().label))))))),
25
26
  }), size: "sm", variant: "secondary" }, "P\u0159idat sekci")));
26
27
  };
27
28
  const FormContent = (props) => {
@@ -7,6 +7,7 @@ exports.ContentField = void 0;
7
7
  const core_1 = require("@dnd-kit/core");
8
8
  const sortable_1 = require("@dnd-kit/sortable");
9
9
  const button_1 = require("@uxf/ui/button");
10
+ const dialog_panel_1 = require("@uxf/ui/dialog/dialog-panel");
10
11
  const icon_1 = require("@uxf/ui/icon");
11
12
  const modal_service_1 = require("@uxf/ui/modal/modal-service");
12
13
  const react_1 = __importDefault(require("react"));
@@ -29,8 +30,8 @@ const ContentField = (props) => {
29
30
  });
30
31
  const activeItemIndex = fields.findIndex((f) => f.id === (activeItem === null || activeItem === void 0 ? void 0 : activeItem.id));
31
32
  const setVisibilityForAll = (0, details_visibility_context_1.useDetailsVisibilityControls)();
32
- return (react_1.default.createElement("div", { className: "grow px-4 pb-8 xl:overflow-y-auto" },
33
- react_1.default.createElement("div", { className: "mb-4 mt-6 flex flex-wrap items-center justify-between gap-4" },
33
+ return (react_1.default.createElement("div", { className: "uxf-cb__content" },
34
+ react_1.default.createElement("div", { className: "uxf-cb__content-header mb-4 mt-6 flex flex-wrap items-center justify-between gap-4" },
34
35
  react_1.default.createElement("h2", { className: "uxf-typo-h5" }, "Obsah"),
35
36
  fields.length > 1 && (react_1.default.createElement("div", { className: "flex justify-end space-x-4" },
36
37
  react_1.default.createElement(button_1.Button, { onClick: () => setVisibilityForAll(true), size: "sm", variant: "secondary" },
@@ -50,10 +51,10 @@ const ContentField = (props) => {
50
51
  react_1.default.createElement(core_1.DragOverlay, { dropAnimation: dropAnimationConfig }, activeItem ? (react_1.default.createElement(form_content_1.FormContent, { ...activeItem, contentComponents: props.contentComponents, control: props.control, createSection: createSection, index: activeItemIndex, name: `${props.name}.data[${activeItemIndex}]`, showAddButton: false })) : null)),
51
52
  fields.length < 1 && (react_1.default.createElement("div", null,
52
53
  react_1.default.createElement(button_1.Button, { className: "h-20 border-2 border-dashed border-gray-600", isFullWidth: true, onClick: () => (0, modal_service_1.openModal)({
53
- children: (react_1.default.createElement("div", { className: "px-4 py-6" },
54
- react_1.default.createElement("h2", { className: "uxf-typo-h5 mb-4" }, "P\u0159idat sekci"),
55
- react_1.default.createElement("div", { className: "space-y-4" }, props.contentComponents.map((component) => (react_1.default.createElement(button_1.Button, { isFullWidth: true, key: component.getConfig().type, onClick: () => createSection(component, 0), variant: "secondary" }, component.getConfig().label)))))),
56
- width: "sm",
54
+ children: (react_1.default.createElement(dialog_panel_1.DialogPanel, { width: "sm" },
55
+ react_1.default.createElement("div", { className: "px-4 py-6" },
56
+ react_1.default.createElement("h2", { className: "uxf-typo-h5 mb-4" }, "P\u0159idat sekci"),
57
+ react_1.default.createElement("div", { className: "space-y-4" }, props.contentComponents.map((component) => (react_1.default.createElement(button_1.Button, { isFullWidth: true, key: component.getConfig().type, onClick: () => createSection(component, 0), variant: "secondary" }, component.getConfig().label))))))),
57
58
  }), size: "lg", variant: "text" },
58
59
  react_1.default.createElement(icon_1.Icon, { className: "mr-3", name: "plus", size: 16 }),
59
60
  "P\u0159idat sekci")))));
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.removeConfirmHandler = removeConfirmHandler;
7
7
  const button_1 = require("@uxf/ui/button");
8
+ const dialog_panel_1 = require("@uxf/ui/dialog/dialog-panel");
8
9
  const modal_1 = require("@uxf/ui/modal");
9
10
  const modal_dialog_1 = require("@uxf/ui/modal-dialog/modal-dialog");
10
11
  const react_1 = __importDefault(require("react"));
@@ -12,16 +13,16 @@ function removeConfirmHandler() {
12
13
  return new Promise((resolve) => {
13
14
  (0, modal_1.openModal)({
14
15
  isBackdropCloseDisabled: true,
15
- children: (react_1.default.createElement(modal_dialog_1.ModalDialog, { footer: react_1.default.createElement(react_1.default.Fragment, null,
16
- react_1.default.createElement(button_1.Button, { onClick: () => {
17
- resolve(false);
18
- (0, modal_1.closeModal)();
19
- } }, "Zru\u0161it"),
20
- react_1.default.createElement(button_1.Button, { color: "negative", onClick: () => {
21
- resolve(true);
22
- (0, modal_1.closeModal)();
23
- } }, "Ano, smazat")), title: "Opravdu chcete smazat tento soubor?" })),
24
- width: "sm",
16
+ children: (react_1.default.createElement(dialog_panel_1.DialogPanel, { width: "sm" },
17
+ react_1.default.createElement(modal_dialog_1.ModalDialog, { footer: react_1.default.createElement(react_1.default.Fragment, null,
18
+ react_1.default.createElement(button_1.Button, { onClick: () => {
19
+ resolve(false);
20
+ (0, modal_1.closeModal)();
21
+ } }, "Zru\u0161it"),
22
+ react_1.default.createElement(button_1.Button, { color: "negative", onClick: () => {
23
+ resolve(true);
24
+ (0, modal_1.closeModal)();
25
+ } }, "Ano, smazat")), title: "Opravdu chcete smazat tento soubor?" }))),
25
26
  });
26
27
  });
27
28
  }
@@ -1,47 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.FormWrapper = FormWrapper;
27
- const form_1 = require("@uxf/form/form");
28
- const rem_1 = require("@uxf/styles/units/rem");
29
- const react_1 = __importStar(require("react"));
30
- const constants_1 = require("../pages/content-builder/constants");
31
- const details_visibility_context_1 = require("../pages/content-builder/context/details-visibility-context");
32
- const use_viewport_height_1 = require("../utils/use-viewport-height");
33
- function FormWrapper(props) {
34
- const [headerHeight, setHeaderHeight] = (0, react_1.useState)(0);
35
- const viewportHeight = (0, use_viewport_height_1.useViewportHeight)(true);
36
- const height = viewportHeight === "100vh" ? viewportHeight : (0, rem_1.rem)(viewportHeight);
37
- (0, react_1.useEffect)(() => {
38
- const header = document.getElementById(constants_1.CONTENT_BUILDER_PAGE_HEADER_ID);
39
- if (header) {
40
- setHeaderHeight(header.offsetHeight);
41
- }
42
- }, []);
43
- return (react_1.default.createElement(form_1.Form, { formApi: props.formApi, id: props.id, onError: props.onError, onSubmit: props.onSubmit },
44
- react_1.default.createElement("div", { className: "flex flex-col-reverse overflow-hidden xl:h-[calc(var(--viewport-height)-var(--header-height))] xl:flex-row", style: { "--viewport-height": height, "--header-height": (0, rem_1.rem)(headerHeight) } },
45
- react_1.default.createElement(details_visibility_context_1.DetailsVisibilityProvider, null, props.children),
46
- " ")));
47
- }