@uxf/cms 11.48.3 → 11.49.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- }