@gravity-ui/page-constructor 8.5.0-alpha.4 → 8.5.0-alpha.5
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/build/cjs/blocks/ContentLayout/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/ExtendedFeatures/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/FilterBlock/index.d.ts +1 -1
- package/build/cjs/blocks/FilterBlock/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Form/index.d.ts +1 -1
- package/build/cjs/blocks/Form/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/HeaderSlider/index.d.ts +1 -1
- package/build/cjs/blocks/HeaderSlider/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Icons/index.d.ts +1 -1
- package/build/cjs/blocks/Icons/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Info/index.d.ts +1 -1
- package/build/cjs/blocks/Info/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Map/index.d.ts +1 -1
- package/build/cjs/blocks/Map/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Media/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/PromoFeaturesBlock/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Questions/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Share/index.d.ts +1 -1
- package/build/cjs/blocks/Share/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Slider/index.d.ts +1 -1
- package/build/cjs/blocks/Slider/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Table/index.d.ts +1 -1
- package/build/cjs/blocks/Table/index_deprecated.d.ts +1 -1
- package/build/cjs/blocks/Tabs/index.d.ts +1 -1
- package/build/cjs/blocks/Tabs/index_deprecated.d.ts +1 -1
- package/build/cjs/form-builder-v2/FormBuilderV2.js +1 -1
- package/build/cjs/form-builder-v2/FormBuilderV2.js.map +1 -1
- package/build/cjs/form-builder-v2/components/Palette/Palette.js +1 -1
- package/build/cjs/form-builder-v2/components/Palette/Palette.js.map +1 -1
- package/build/cjs/form-generator-v2/components/constants.d.ts +11 -11
- package/build/cjs/form-generator-v2/index.d.ts +2 -0
- package/build/cjs/form-generator-v2/index.js +8 -0
- package/build/cjs/form-generator-v2/index.js.map +1 -0
- package/build/esm/blocks/ContentLayout/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/ExtendedFeatures/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/FilterBlock/index.d.ts +1 -1
- package/build/esm/blocks/FilterBlock/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Form/index.d.ts +1 -1
- package/build/esm/blocks/Form/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/HeaderSlider/index.d.ts +1 -1
- package/build/esm/blocks/HeaderSlider/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Icons/index.d.ts +1 -1
- package/build/esm/blocks/Icons/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Info/index.d.ts +1 -1
- package/build/esm/blocks/Info/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Map/index.d.ts +1 -1
- package/build/esm/blocks/Map/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Media/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/PromoFeaturesBlock/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Questions/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Share/index.d.ts +1 -1
- package/build/esm/blocks/Share/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Slider/index.d.ts +1 -1
- package/build/esm/blocks/Slider/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Table/index.d.ts +1 -1
- package/build/esm/blocks/Table/index_deprecated.d.ts +1 -1
- package/build/esm/blocks/Tabs/index.d.ts +1 -1
- package/build/esm/blocks/Tabs/index_deprecated.d.ts +1 -1
- package/build/esm/form-builder-v2/FormBuilderV2.js +1 -1
- package/build/esm/form-builder-v2/FormBuilderV2.js.map +1 -1
- package/build/esm/form-builder-v2/components/Palette/Palette.js +2 -2
- package/build/esm/form-builder-v2/components/Palette/Palette.js.map +1 -1
- package/build/esm/form-generator-v2/components/constants.d.ts +11 -11
- package/build/esm/form-generator-v2/index.d.ts +2 -0
- package/build/esm/form-generator-v2/index.js +3 -0
- package/build/esm/form-generator-v2/index.js.map +1 -0
- package/package.json +9 -1
|
@@ -27,7 +27,7 @@ const b = (0, cn_1.formBuilderV2Cn)('main');
|
|
|
27
27
|
const PALETTE_MIN = 160;
|
|
28
28
|
const PALETTE_MAX = 400;
|
|
29
29
|
const PALETTE_DEFAULT = 220;
|
|
30
|
-
const INSPECTOR_MIN =
|
|
30
|
+
const INSPECTOR_MIN = 270;
|
|
31
31
|
const INSPECTOR_MAX = 560;
|
|
32
32
|
const INSPECTOR_DEFAULT = 320;
|
|
33
33
|
const FormBuilderShell = ({ className, density }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormBuilderV2.js","sourceRoot":"../../../src","sources":["form-builder-v2/FormBuilderV2.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport type {DragDropEvents} from '@dnd-kit/abstract';\nimport type {DragDropManager, Draggable, Droppable} from '@dnd-kit/dom';\nimport {move} from '@dnd-kit/helpers';\nimport {DragDropProvider, DragOverlay} from '@dnd-kit/react';\nimport {Code, Eye, Pencil} from '@gravity-ui/icons';\nimport {Button, Icon, SegmentedRadioGroup} from '@gravity-ui/uikit';\n\nimport type {Content} from '../form-generator-v2/types';\n\nimport {CanvasContentProvider} from './CanvasContentContext';\nimport {Canvas} from './components/Canvas/Canvas';\nimport {ContentTab} from './components/ContentTab/ContentTab';\nimport {DragOverlayPreview} from './components/DragOverlayPreview/DragOverlayPreview';\nimport {Inspector} from './components/Inspector/Inspector';\nimport {PALETTE_DRAGGABLE_PREFIX, Palette} from './components/Palette/Palette';\nimport {ResizeHandle} from './components/ResizeHandle/ResizeHandle';\nimport {SchemaPopup} from './components/SchemaPopup/SchemaPopup';\nimport {FormProvider, useFormContext} from './hooks/FormContext';\nimport {FormField} from './types';\nimport {formBuilderV2Cn} from './utils/cn';\nimport {isDropAfter, isPaletteData, isSectionDropData} from './utils/dragData';\nimport {applyGroupsMap, buildGroupsMap} from './utils/fieldGroups';\nimport {findFieldById} from './utils/fieldTree';\nimport {stripIds} from './utils/stripIds';\n\nimport './FormBuilderV2.scss';\n\nconst b = formBuilderV2Cn('main');\n\ntype DndEvents = DragDropEvents<Draggable, Droppable, DragDropManager>;\ntype DragEndEvent = Parameters<DndEvents['dragend']>[0];\n\ntype Mode = 'edit' | 'preview';\n\nexport type FormBuilderDensity = 'full' | 'compact';\n\nconst PALETTE_MIN = 160;\nconst PALETTE_MAX = 400;\nconst PALETTE_DEFAULT = 220;\nconst INSPECTOR_MIN = 240;\nconst INSPECTOR_MAX = 560;\nconst INSPECTOR_DEFAULT = 320;\n\ninterface FormBuilderV2Props {\n className?: string;\n formFields: FormField[];\n onChange?: (fields: FormField[]) => void;\n\n density?: FormBuilderDensity;\n}\n\ninterface FormBuilderShellProps {\n className?: string;\n density: FormBuilderDensity;\n}\n\nconst FormBuilderShell = ({className, density}: FormBuilderShellProps) => {\n const [mode, setMode] = React.useState<Mode>('edit');\n const [canvasContent, setCanvasContent] = React.useState<Content>({});\n const [templateContent, setTemplateContent] = React.useState<Content>({});\n const [paletteWidth, setPaletteWidth] = React.useState(PALETTE_DEFAULT);\n const [inspectorWidth, setInspectorWidth] = React.useState(INSPECTOR_DEFAULT);\n const [schemaPopupOpen, setSchemaPopupOpen] = React.useState(false);\n const schemaButtonRef = React.useRef<HTMLButtonElement | null>(null);\n\n const isCompact = density === 'compact';\n\n const {\n formFields,\n setAllFields,\n addField,\n addFieldToSection,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n } = useFormContext();\n\n const schema = React.useMemo(() => stripIds(formFields), [formFields]);\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n if (event.canceled) return;\n const {source, target} = event.operation;\n if (!source) return;\n\n const paletteData = isPaletteData(source.data) ? source.data : null;\n const isPaletteDrag =\n paletteData !== null || String(source.id).startsWith(PALETTE_DRAGGABLE_PREFIX);\n\n if (isPaletteDrag) {\n const type = paletteData?.type;\n if (!type) return;\n if (!target) {\n addField(type);\n return;\n }\n\n if (isSectionDropData(target.data)) {\n addFieldToSection(target.data.sectionId, type);\n return;\n }\n\n if (String(target.id) === String(source.id)) {\n addField(type);\n return;\n }\n\n const dropAfter = isDropAfter(\n event.operation.position?.current?.y,\n target.shape?.center?.y,\n );\n if (dropAfter) {\n insertFieldAfter(String(target.id), type);\n } else {\n insertFieldBefore(String(target.id), type);\n }\n return;\n }\n\n if (target && isSectionDropData(target.data)) {\n moveFieldToSection(String(source.id), target.data.sectionId);\n return;\n }\n\n const groups = buildGroupsMap(formFields);\n const nextGroups = move(groups, event);\n const nextFields = applyGroupsMap(nextGroups);\n setAllFields(nextFields);\n },\n [\n addField,\n addFieldToSection,\n formFields,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n setAllFields,\n ],\n );\n\n const gridStyle = {\n '--fb2-palette-w': `${paletteWidth}px`,\n '--fb2-inspector-w': `${inspectorWidth}px`,\n } as React.CSSProperties;\n\n return (\n <div className={b({compact: density === 'compact'}, className)}>\n <CanvasContentProvider\n content={canvasContent}\n setContent={setCanvasContent}\n templateContent={templateContent}\n setTemplateContent={setTemplateContent}\n >\n <div className={b('toolbar')}>\n <SegmentedRadioGroup<Mode>\n size=\"m\"\n value={mode}\n onUpdate={setMode}\n options={[\n {\n value: 'edit',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Pencil} size={14} />\n Edit\n </span>\n ),\n },\n {\n value: 'preview',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Eye} size={14} />\n Preview\n </span>\n ),\n },\n ]}\n />\n <Button\n ref={schemaButtonRef}\n view=\"outlined\"\n size=\"m\"\n onClick={() => setSchemaPopupOpen((prev) => !prev)}\n >\n <Icon data={Code} size={14} />\n Schema\n </Button>\n <SchemaPopup\n schema={schema}\n onApply={setAllFields}\n open={schemaPopupOpen}\n onOpenChange={setSchemaPopupOpen}\n anchorElement={schemaButtonRef.current}\n />\n </div>\n\n {mode === 'edit' ? (\n <DragDropProvider onDragEnd={handleDragEnd}>\n <div className={b('visual')} style={gridStyle}>\n <aside className={b('palette')}>\n <Palette />\n </aside>\n {!isCompact && (\n <ResizeHandle\n value={paletteWidth}\n min={PALETTE_MIN}\n max={PALETTE_MAX}\n direction=\"left\"\n onChange={setPaletteWidth}\n />\n )}\n <main className={b('canvas')}>\n <Canvas />\n </main>\n <ResizeHandle\n value={inspectorWidth}\n min={INSPECTOR_MIN}\n max={INSPECTOR_MAX}\n direction=\"right\"\n onChange={setInspectorWidth}\n />\n <aside className={b('inspector')}>\n <Inspector />\n </aside>\n </div>\n <DragOverlay dropAnimation={null}>\n {(source) => {\n if (!source) return null;\n if (isPaletteData(source.data)) {\n return <DragOverlayPreview type={source.data.type} />;\n }\n const field = findFieldById(formFields, String(source.id));\n if (!field) return null;\n return <DragOverlayPreview type={field.type} field={field} />;\n }}\n </DragOverlay>\n </DragDropProvider>\n ) : (\n <ContentTab />\n )}\n </CanvasContentProvider>\n </div>\n );\n};\n\nexport const FormBuilderV2 = ({\n className,\n formFields,\n onChange,\n density = 'full',\n}: FormBuilderV2Props) => {\n return (\n <FormProvider formFields={formFields} onChange={onChange}>\n <FormBuilderShell className={className} density={density} />\n </FormProvider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"FormBuilderV2.js","sourceRoot":"../../../src","sources":["form-builder-v2/FormBuilderV2.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport type {DragDropEvents} from '@dnd-kit/abstract';\nimport type {DragDropManager, Draggable, Droppable} from '@dnd-kit/dom';\nimport {move} from '@dnd-kit/helpers';\nimport {DragDropProvider, DragOverlay} from '@dnd-kit/react';\nimport {Code, Eye, Pencil} from '@gravity-ui/icons';\nimport {Button, Icon, SegmentedRadioGroup} from '@gravity-ui/uikit';\n\nimport type {Content} from '../form-generator-v2/types';\n\nimport {CanvasContentProvider} from './CanvasContentContext';\nimport {Canvas} from './components/Canvas/Canvas';\nimport {ContentTab} from './components/ContentTab/ContentTab';\nimport {DragOverlayPreview} from './components/DragOverlayPreview/DragOverlayPreview';\nimport {Inspector} from './components/Inspector/Inspector';\nimport {PALETTE_DRAGGABLE_PREFIX, Palette} from './components/Palette/Palette';\nimport {ResizeHandle} from './components/ResizeHandle/ResizeHandle';\nimport {SchemaPopup} from './components/SchemaPopup/SchemaPopup';\nimport {FormProvider, useFormContext} from './hooks/FormContext';\nimport {FormField} from './types';\nimport {formBuilderV2Cn} from './utils/cn';\nimport {isDropAfter, isPaletteData, isSectionDropData} from './utils/dragData';\nimport {applyGroupsMap, buildGroupsMap} from './utils/fieldGroups';\nimport {findFieldById} from './utils/fieldTree';\nimport {stripIds} from './utils/stripIds';\n\nimport './FormBuilderV2.scss';\n\nconst b = formBuilderV2Cn('main');\n\ntype DndEvents = DragDropEvents<Draggable, Droppable, DragDropManager>;\ntype DragEndEvent = Parameters<DndEvents['dragend']>[0];\n\ntype Mode = 'edit' | 'preview';\n\nexport type FormBuilderDensity = 'full' | 'compact';\n\nconst PALETTE_MIN = 160;\nconst PALETTE_MAX = 400;\nconst PALETTE_DEFAULT = 220;\nconst INSPECTOR_MIN = 270;\nconst INSPECTOR_MAX = 560;\nconst INSPECTOR_DEFAULT = 320;\n\ninterface FormBuilderV2Props {\n className?: string;\n formFields: FormField[];\n onChange?: (fields: FormField[]) => void;\n\n density?: FormBuilderDensity;\n}\n\ninterface FormBuilderShellProps {\n className?: string;\n density: FormBuilderDensity;\n}\n\nconst FormBuilderShell = ({className, density}: FormBuilderShellProps) => {\n const [mode, setMode] = React.useState<Mode>('edit');\n const [canvasContent, setCanvasContent] = React.useState<Content>({});\n const [templateContent, setTemplateContent] = React.useState<Content>({});\n const [paletteWidth, setPaletteWidth] = React.useState(PALETTE_DEFAULT);\n const [inspectorWidth, setInspectorWidth] = React.useState(INSPECTOR_DEFAULT);\n const [schemaPopupOpen, setSchemaPopupOpen] = React.useState(false);\n const schemaButtonRef = React.useRef<HTMLButtonElement | null>(null);\n\n const isCompact = density === 'compact';\n\n const {\n formFields,\n setAllFields,\n addField,\n addFieldToSection,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n } = useFormContext();\n\n const schema = React.useMemo(() => stripIds(formFields), [formFields]);\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n if (event.canceled) return;\n const {source, target} = event.operation;\n if (!source) return;\n\n const paletteData = isPaletteData(source.data) ? source.data : null;\n const isPaletteDrag =\n paletteData !== null || String(source.id).startsWith(PALETTE_DRAGGABLE_PREFIX);\n\n if (isPaletteDrag) {\n const type = paletteData?.type;\n if (!type) return;\n if (!target) {\n addField(type);\n return;\n }\n\n if (isSectionDropData(target.data)) {\n addFieldToSection(target.data.sectionId, type);\n return;\n }\n\n if (String(target.id) === String(source.id)) {\n addField(type);\n return;\n }\n\n const dropAfter = isDropAfter(\n event.operation.position?.current?.y,\n target.shape?.center?.y,\n );\n if (dropAfter) {\n insertFieldAfter(String(target.id), type);\n } else {\n insertFieldBefore(String(target.id), type);\n }\n return;\n }\n\n if (target && isSectionDropData(target.data)) {\n moveFieldToSection(String(source.id), target.data.sectionId);\n return;\n }\n\n const groups = buildGroupsMap(formFields);\n const nextGroups = move(groups, event);\n const nextFields = applyGroupsMap(nextGroups);\n setAllFields(nextFields);\n },\n [\n addField,\n addFieldToSection,\n formFields,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n setAllFields,\n ],\n );\n\n const gridStyle = {\n '--fb2-palette-w': `${paletteWidth}px`,\n '--fb2-inspector-w': `${inspectorWidth}px`,\n } as React.CSSProperties;\n\n return (\n <div className={b({compact: density === 'compact'}, className)}>\n <CanvasContentProvider\n content={canvasContent}\n setContent={setCanvasContent}\n templateContent={templateContent}\n setTemplateContent={setTemplateContent}\n >\n <div className={b('toolbar')}>\n <SegmentedRadioGroup<Mode>\n size=\"m\"\n value={mode}\n onUpdate={setMode}\n options={[\n {\n value: 'edit',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Pencil} size={14} />\n Edit\n </span>\n ),\n },\n {\n value: 'preview',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Eye} size={14} />\n Preview\n </span>\n ),\n },\n ]}\n />\n <Button\n ref={schemaButtonRef}\n view=\"outlined\"\n size=\"m\"\n onClick={() => setSchemaPopupOpen((prev) => !prev)}\n >\n <Icon data={Code} size={14} />\n Schema\n </Button>\n <SchemaPopup\n schema={schema}\n onApply={setAllFields}\n open={schemaPopupOpen}\n onOpenChange={setSchemaPopupOpen}\n anchorElement={schemaButtonRef.current}\n />\n </div>\n\n {mode === 'edit' ? (\n <DragDropProvider onDragEnd={handleDragEnd}>\n <div className={b('visual')} style={gridStyle}>\n <aside className={b('palette')}>\n <Palette />\n </aside>\n {!isCompact && (\n <ResizeHandle\n value={paletteWidth}\n min={PALETTE_MIN}\n max={PALETTE_MAX}\n direction=\"left\"\n onChange={setPaletteWidth}\n />\n )}\n <main className={b('canvas')}>\n <Canvas />\n </main>\n <ResizeHandle\n value={inspectorWidth}\n min={INSPECTOR_MIN}\n max={INSPECTOR_MAX}\n direction=\"right\"\n onChange={setInspectorWidth}\n />\n <aside className={b('inspector')}>\n <Inspector />\n </aside>\n </div>\n <DragOverlay dropAnimation={null}>\n {(source) => {\n if (!source) return null;\n if (isPaletteData(source.data)) {\n return <DragOverlayPreview type={source.data.type} />;\n }\n const field = findFieldById(formFields, String(source.id));\n if (!field) return null;\n return <DragOverlayPreview type={field.type} field={field} />;\n }}\n </DragOverlay>\n </DragDropProvider>\n ) : (\n <ContentTab />\n )}\n </CanvasContentProvider>\n </div>\n );\n};\n\nexport const FormBuilderV2 = ({\n className,\n formFields,\n onChange,\n density = 'full',\n}: FormBuilderV2Props) => {\n return (\n <FormProvider formFields={formFields} onChange={onChange}>\n <FormBuilderShell className={className} density={density} />\n </FormProvider>\n );\n};\n"]}
|
|
@@ -43,7 +43,7 @@ const PaletteTile = ({ type, label, icon, onClick }) => {
|
|
|
43
43
|
ref(element);
|
|
44
44
|
handleRef(element);
|
|
45
45
|
}, [ref, handleRef]);
|
|
46
|
-
return ((0, jsx_runtime_1.jsxs)(uikit_1.Button, { ref: setRefs, view: "flat", size: "m", className: b('tile', { dragging: isDragging }), onClick: onClick,
|
|
46
|
+
return ((0, jsx_runtime_1.jsx)(uikit_1.Tooltip, { content: label, placement: "right", openDelay: 500, children: (0, jsx_runtime_1.jsxs)(uikit_1.Button, { ref: setRefs, view: "flat", size: "m", className: b('tile', { dragging: isDragging }), onClick: onClick, children: [(0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icon, size: 18 }), (0, jsx_runtime_1.jsx)("span", { className: b('tile-label'), children: label })] }) }));
|
|
47
47
|
};
|
|
48
48
|
const Palette = () => {
|
|
49
49
|
const { addField, addFieldToSection, formFields, selectedFieldId } = (0, FormContext_1.useFormContext)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Palette.js","sourceRoot":"../../../../../src","sources":["form-builder-v2/components/Palette/Palette.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,sCAAyE;AACzE,0CAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"Palette.js","sourceRoot":"../../../../../src","sources":["form-builder-v2/components/Palette/Palette.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {PointerActivationConstraints, PointerSensor} from '@dnd-kit/dom';\nimport {useDraggable} from '@dnd-kit/react';\nimport {Button, Card, Icon, Text, Tooltip} from '@gravity-ui/uikit';\nimport type {IconData} from '@gravity-ui/uikit';\n\nimport {useFormContext} from '../../hooks/FormContext';\nimport {BuilderFieldType, FormField} from '../../types';\nimport {formBuilderV2Cn} from '../../utils/cn';\nimport type {PaletteDragData} from '../../utils/dragData';\nimport {FIELD_TYPES, PALETTE_LABELS, TYPE_ICONS} from '../../utils/fieldMeta';\n\nimport './Palette.scss';\n\nexport type {PaletteDragData};\n\nconst b = formBuilderV2Cn('palette');\n\nexport const PALETTE_DRAGGABLE_PREFIX = 'palette:';\n\nconst findContainerId = (\n fields: FormField[],\n selectedId: string | null,\n parentSectionId: string | null = null,\n): string | null | undefined => {\n if (!selectedId) return null;\n for (const field of fields) {\n if (field.id === selectedId) {\n return field.type === 'section' ? field.id : parentSectionId;\n }\n if (field.type === 'section') {\n const nested = findContainerId(field.fields, selectedId, field.id);\n if (nested !== undefined) return nested;\n }\n }\n return undefined;\n};\n\ninterface PaletteTileProps {\n type: BuilderFieldType;\n label: string;\n icon: IconData;\n onClick: () => void;\n}\n\nconst DRAG_DISTANCE = 4;\n\nconst paletteSensors = [\n PointerSensor.configure({\n activationConstraints: [new PointerActivationConstraints.Distance({value: DRAG_DISTANCE})],\n }),\n];\n\nconst PaletteTile = ({type, label, icon, onClick}: PaletteTileProps) => {\n const {ref, handleRef, isDragging} = useDraggable({\n id: `${PALETTE_DRAGGABLE_PREFIX}${type}`,\n data: {kind: 'palette', type},\n sensors: paletteSensors,\n });\n\n const setRefs = React.useCallback(\n (element: HTMLButtonElement | null) => {\n ref(element);\n handleRef(element);\n },\n [ref, handleRef],\n );\n\n return (\n <Tooltip content={label} placement=\"right\" openDelay={500}>\n <Button\n ref={setRefs}\n view=\"flat\"\n size=\"m\"\n className={b('tile', {dragging: isDragging})}\n onClick={onClick}\n >\n <Icon data={icon} size={18} />\n <span className={b('tile-label')}>{label}</span>\n </Button>\n </Tooltip>\n );\n};\n\nexport const Palette = () => {\n const {addField, addFieldToSection, formFields, selectedFieldId} = useFormContext();\n\n const containerId = React.useMemo(\n () => findContainerId(formFields, selectedFieldId),\n [formFields, selectedFieldId],\n );\n\n const handleAdd = (type: BuilderFieldType) => {\n if (containerId) {\n addFieldToSection(containerId, type);\n } else {\n addField(type);\n }\n };\n\n return (\n <Card className={b()} view=\"outlined\">\n <div className={b('header')}>\n <Text variant=\"subheader-2\">Add field</Text>\n <Text variant=\"caption-1\" color=\"hint\">\n Click to add, or drag onto the canvas to drop at a specific position.\n </Text>\n </div>\n <div className={b('items')}>\n {FIELD_TYPES.map((type) => (\n <PaletteTile\n key={type}\n type={type}\n label={PALETTE_LABELS[type]}\n icon={TYPE_ICONS[type]}\n onClick={() => handleAdd(type)}\n />\n ))}\n </div>\n </Card>\n );\n};\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export declare const componentMap: {
|
|
2
|
-
section: ({ title, opened, fields, when, content, onUpdate, className, index, withAddButton, itemTitle, itemView, }: import("../../index.js").ClassNameProps & import("../
|
|
3
|
-
select: ({ title, name, options, when, content, onUpdate, hasClear, defaultValue, }: import("../
|
|
4
|
-
textInput: ({ title, name, when, content, onUpdate, defaultValue }: import("../
|
|
5
|
-
segmentedRadioGroup: ({ title, name, options, when, content, onUpdate, defaultValue, }: import("../
|
|
6
|
-
colorInput: ({ title, name, when, content, onUpdate, className, defaultValue, }: import("../../index.js").ClassNameProps & import("../
|
|
2
|
+
section: ({ title, opened, fields, when, content, onUpdate, className, index, withAddButton, itemTitle, itemView, }: import("../../index.js").ClassNameProps & import("../index.js").CommonProps & import("../index.js").SectionField) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
select: ({ title, name, options, when, content, onUpdate, hasClear, defaultValue, }: import("../index.js").CommonProps & import("../index.js").SelectField) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
textInput: ({ title, name, when, content, onUpdate, defaultValue }: import("../index.js").CommonProps & import("../index.js").TextField) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
segmentedRadioGroup: ({ title, name, options, when, content, onUpdate, defaultValue, }: import("../index.js").CommonProps & import("../index.js").SegmentedRadioGroupField) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
colorInput: ({ title, name, when, content, onUpdate, className, defaultValue, }: import("../../index.js").ClassNameProps & import("../index.js").CommonProps & import("../index.js").ColorField) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
text: ({ text, level, color, when, content, className }: import("../../index.js").ClassNameProps & {
|
|
8
8
|
text: string;
|
|
9
|
-
level?: import("../
|
|
10
|
-
color?: import("../
|
|
11
|
-
when?: import("../
|
|
12
|
-
content: import("../
|
|
9
|
+
level?: import("../index.js").Text["level"];
|
|
10
|
+
color?: import("../index.js").Text["color"];
|
|
11
|
+
when?: import("../index.js").When;
|
|
12
|
+
content: import("../index.js").Content;
|
|
13
13
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
textArea: ({ when, title, content, name, onUpdate, defaultValue }: import("../
|
|
15
|
-
switch: ({ title, when, name, content, onUpdate, className, defaultValue }: import("../../index.js").ClassNameProps & import("../
|
|
14
|
+
textArea: ({ when, title, content, name, onUpdate, defaultValue }: import("../index.js").CommonProps & import("../index.js").TextField) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
switch: ({ title, when, name, content, onUpdate, className, defaultValue }: import("../../index.js").ClassNameProps & import("../index.js").SwitchField & import("../index.js").CommonProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
16
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FormGeneratorV2 = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
var FormGenerator_1 = require("./FormGenerator.js");
|
|
6
|
+
Object.defineProperty(exports, "FormGeneratorV2", { enumerable: true, get: function () { return tslib_1.__importDefault(FormGenerator_1).default; } });
|
|
7
|
+
tslib_1.__exportStar(require("./types.js"), exports);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["form-generator-v2/index.ts"],"names":[],"mappings":";;;;AAAA,oDAA2D;AAAnD,yIAAA,OAAO,OAAmB;AAClC,qDAAwB","sourcesContent":["export {default as FormGeneratorV2} from './FormGenerator';\nexport * from './types';\n"]}
|
|
@@ -24,7 +24,7 @@ const b = formBuilderV2Cn('main');
|
|
|
24
24
|
const PALETTE_MIN = 160;
|
|
25
25
|
const PALETTE_MAX = 400;
|
|
26
26
|
const PALETTE_DEFAULT = 220;
|
|
27
|
-
const INSPECTOR_MIN =
|
|
27
|
+
const INSPECTOR_MIN = 270;
|
|
28
28
|
const INSPECTOR_MAX = 560;
|
|
29
29
|
const INSPECTOR_DEFAULT = 320;
|
|
30
30
|
const FormBuilderShell = ({ className, density }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormBuilderV2.js","sourceRoot":"../../../src","sources":["form-builder-v2/FormBuilderV2.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport type {DragDropEvents} from '@dnd-kit/abstract';\nimport type {DragDropManager, Draggable, Droppable} from '@dnd-kit/dom';\nimport {move} from '@dnd-kit/helpers';\nimport {DragDropProvider, DragOverlay} from '@dnd-kit/react';\nimport {Code, Eye, Pencil} from '@gravity-ui/icons';\nimport {Button, Icon, SegmentedRadioGroup} from '@gravity-ui/uikit';\n\nimport type {Content} from '../form-generator-v2/types';\n\nimport {CanvasContentProvider} from './CanvasContentContext';\nimport {Canvas} from './components/Canvas/Canvas';\nimport {ContentTab} from './components/ContentTab/ContentTab';\nimport {DragOverlayPreview} from './components/DragOverlayPreview/DragOverlayPreview';\nimport {Inspector} from './components/Inspector/Inspector';\nimport {PALETTE_DRAGGABLE_PREFIX, Palette} from './components/Palette/Palette';\nimport {ResizeHandle} from './components/ResizeHandle/ResizeHandle';\nimport {SchemaPopup} from './components/SchemaPopup/SchemaPopup';\nimport {FormProvider, useFormContext} from './hooks/FormContext';\nimport {FormField} from './types';\nimport {formBuilderV2Cn} from './utils/cn';\nimport {isDropAfter, isPaletteData, isSectionDropData} from './utils/dragData';\nimport {applyGroupsMap, buildGroupsMap} from './utils/fieldGroups';\nimport {findFieldById} from './utils/fieldTree';\nimport {stripIds} from './utils/stripIds';\n\nimport './FormBuilderV2.scss';\n\nconst b = formBuilderV2Cn('main');\n\ntype DndEvents = DragDropEvents<Draggable, Droppable, DragDropManager>;\ntype DragEndEvent = Parameters<DndEvents['dragend']>[0];\n\ntype Mode = 'edit' | 'preview';\n\nexport type FormBuilderDensity = 'full' | 'compact';\n\nconst PALETTE_MIN = 160;\nconst PALETTE_MAX = 400;\nconst PALETTE_DEFAULT = 220;\nconst INSPECTOR_MIN = 240;\nconst INSPECTOR_MAX = 560;\nconst INSPECTOR_DEFAULT = 320;\n\ninterface FormBuilderV2Props {\n className?: string;\n formFields: FormField[];\n onChange?: (fields: FormField[]) => void;\n\n density?: FormBuilderDensity;\n}\n\ninterface FormBuilderShellProps {\n className?: string;\n density: FormBuilderDensity;\n}\n\nconst FormBuilderShell = ({className, density}: FormBuilderShellProps) => {\n const [mode, setMode] = React.useState<Mode>('edit');\n const [canvasContent, setCanvasContent] = React.useState<Content>({});\n const [templateContent, setTemplateContent] = React.useState<Content>({});\n const [paletteWidth, setPaletteWidth] = React.useState(PALETTE_DEFAULT);\n const [inspectorWidth, setInspectorWidth] = React.useState(INSPECTOR_DEFAULT);\n const [schemaPopupOpen, setSchemaPopupOpen] = React.useState(false);\n const schemaButtonRef = React.useRef<HTMLButtonElement | null>(null);\n\n const isCompact = density === 'compact';\n\n const {\n formFields,\n setAllFields,\n addField,\n addFieldToSection,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n } = useFormContext();\n\n const schema = React.useMemo(() => stripIds(formFields), [formFields]);\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n if (event.canceled) return;\n const {source, target} = event.operation;\n if (!source) return;\n\n const paletteData = isPaletteData(source.data) ? source.data : null;\n const isPaletteDrag =\n paletteData !== null || String(source.id).startsWith(PALETTE_DRAGGABLE_PREFIX);\n\n if (isPaletteDrag) {\n const type = paletteData?.type;\n if (!type) return;\n if (!target) {\n addField(type);\n return;\n }\n\n if (isSectionDropData(target.data)) {\n addFieldToSection(target.data.sectionId, type);\n return;\n }\n\n if (String(target.id) === String(source.id)) {\n addField(type);\n return;\n }\n\n const dropAfter = isDropAfter(\n event.operation.position?.current?.y,\n target.shape?.center?.y,\n );\n if (dropAfter) {\n insertFieldAfter(String(target.id), type);\n } else {\n insertFieldBefore(String(target.id), type);\n }\n return;\n }\n\n if (target && isSectionDropData(target.data)) {\n moveFieldToSection(String(source.id), target.data.sectionId);\n return;\n }\n\n const groups = buildGroupsMap(formFields);\n const nextGroups = move(groups, event);\n const nextFields = applyGroupsMap(nextGroups);\n setAllFields(nextFields);\n },\n [\n addField,\n addFieldToSection,\n formFields,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n setAllFields,\n ],\n );\n\n const gridStyle = {\n '--fb2-palette-w': `${paletteWidth}px`,\n '--fb2-inspector-w': `${inspectorWidth}px`,\n } as React.CSSProperties;\n\n return (\n <div className={b({compact: density === 'compact'}, className)}>\n <CanvasContentProvider\n content={canvasContent}\n setContent={setCanvasContent}\n templateContent={templateContent}\n setTemplateContent={setTemplateContent}\n >\n <div className={b('toolbar')}>\n <SegmentedRadioGroup<Mode>\n size=\"m\"\n value={mode}\n onUpdate={setMode}\n options={[\n {\n value: 'edit',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Pencil} size={14} />\n Edit\n </span>\n ),\n },\n {\n value: 'preview',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Eye} size={14} />\n Preview\n </span>\n ),\n },\n ]}\n />\n <Button\n ref={schemaButtonRef}\n view=\"outlined\"\n size=\"m\"\n onClick={() => setSchemaPopupOpen((prev) => !prev)}\n >\n <Icon data={Code} size={14} />\n Schema\n </Button>\n <SchemaPopup\n schema={schema}\n onApply={setAllFields}\n open={schemaPopupOpen}\n onOpenChange={setSchemaPopupOpen}\n anchorElement={schemaButtonRef.current}\n />\n </div>\n\n {mode === 'edit' ? (\n <DragDropProvider onDragEnd={handleDragEnd}>\n <div className={b('visual')} style={gridStyle}>\n <aside className={b('palette')}>\n <Palette />\n </aside>\n {!isCompact && (\n <ResizeHandle\n value={paletteWidth}\n min={PALETTE_MIN}\n max={PALETTE_MAX}\n direction=\"left\"\n onChange={setPaletteWidth}\n />\n )}\n <main className={b('canvas')}>\n <Canvas />\n </main>\n <ResizeHandle\n value={inspectorWidth}\n min={INSPECTOR_MIN}\n max={INSPECTOR_MAX}\n direction=\"right\"\n onChange={setInspectorWidth}\n />\n <aside className={b('inspector')}>\n <Inspector />\n </aside>\n </div>\n <DragOverlay dropAnimation={null}>\n {(source) => {\n if (!source) return null;\n if (isPaletteData(source.data)) {\n return <DragOverlayPreview type={source.data.type} />;\n }\n const field = findFieldById(formFields, String(source.id));\n if (!field) return null;\n return <DragOverlayPreview type={field.type} field={field} />;\n }}\n </DragOverlay>\n </DragDropProvider>\n ) : (\n <ContentTab />\n )}\n </CanvasContentProvider>\n </div>\n );\n};\n\nexport const FormBuilderV2 = ({\n className,\n formFields,\n onChange,\n density = 'full',\n}: FormBuilderV2Props) => {\n return (\n <FormProvider formFields={formFields} onChange={onChange}>\n <FormBuilderShell className={className} density={density} />\n </FormProvider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"FormBuilderV2.js","sourceRoot":"../../../src","sources":["form-builder-v2/FormBuilderV2.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport type {DragDropEvents} from '@dnd-kit/abstract';\nimport type {DragDropManager, Draggable, Droppable} from '@dnd-kit/dom';\nimport {move} from '@dnd-kit/helpers';\nimport {DragDropProvider, DragOverlay} from '@dnd-kit/react';\nimport {Code, Eye, Pencil} from '@gravity-ui/icons';\nimport {Button, Icon, SegmentedRadioGroup} from '@gravity-ui/uikit';\n\nimport type {Content} from '../form-generator-v2/types';\n\nimport {CanvasContentProvider} from './CanvasContentContext';\nimport {Canvas} from './components/Canvas/Canvas';\nimport {ContentTab} from './components/ContentTab/ContentTab';\nimport {DragOverlayPreview} from './components/DragOverlayPreview/DragOverlayPreview';\nimport {Inspector} from './components/Inspector/Inspector';\nimport {PALETTE_DRAGGABLE_PREFIX, Palette} from './components/Palette/Palette';\nimport {ResizeHandle} from './components/ResizeHandle/ResizeHandle';\nimport {SchemaPopup} from './components/SchemaPopup/SchemaPopup';\nimport {FormProvider, useFormContext} from './hooks/FormContext';\nimport {FormField} from './types';\nimport {formBuilderV2Cn} from './utils/cn';\nimport {isDropAfter, isPaletteData, isSectionDropData} from './utils/dragData';\nimport {applyGroupsMap, buildGroupsMap} from './utils/fieldGroups';\nimport {findFieldById} from './utils/fieldTree';\nimport {stripIds} from './utils/stripIds';\n\nimport './FormBuilderV2.scss';\n\nconst b = formBuilderV2Cn('main');\n\ntype DndEvents = DragDropEvents<Draggable, Droppable, DragDropManager>;\ntype DragEndEvent = Parameters<DndEvents['dragend']>[0];\n\ntype Mode = 'edit' | 'preview';\n\nexport type FormBuilderDensity = 'full' | 'compact';\n\nconst PALETTE_MIN = 160;\nconst PALETTE_MAX = 400;\nconst PALETTE_DEFAULT = 220;\nconst INSPECTOR_MIN = 270;\nconst INSPECTOR_MAX = 560;\nconst INSPECTOR_DEFAULT = 320;\n\ninterface FormBuilderV2Props {\n className?: string;\n formFields: FormField[];\n onChange?: (fields: FormField[]) => void;\n\n density?: FormBuilderDensity;\n}\n\ninterface FormBuilderShellProps {\n className?: string;\n density: FormBuilderDensity;\n}\n\nconst FormBuilderShell = ({className, density}: FormBuilderShellProps) => {\n const [mode, setMode] = React.useState<Mode>('edit');\n const [canvasContent, setCanvasContent] = React.useState<Content>({});\n const [templateContent, setTemplateContent] = React.useState<Content>({});\n const [paletteWidth, setPaletteWidth] = React.useState(PALETTE_DEFAULT);\n const [inspectorWidth, setInspectorWidth] = React.useState(INSPECTOR_DEFAULT);\n const [schemaPopupOpen, setSchemaPopupOpen] = React.useState(false);\n const schemaButtonRef = React.useRef<HTMLButtonElement | null>(null);\n\n const isCompact = density === 'compact';\n\n const {\n formFields,\n setAllFields,\n addField,\n addFieldToSection,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n } = useFormContext();\n\n const schema = React.useMemo(() => stripIds(formFields), [formFields]);\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n if (event.canceled) return;\n const {source, target} = event.operation;\n if (!source) return;\n\n const paletteData = isPaletteData(source.data) ? source.data : null;\n const isPaletteDrag =\n paletteData !== null || String(source.id).startsWith(PALETTE_DRAGGABLE_PREFIX);\n\n if (isPaletteDrag) {\n const type = paletteData?.type;\n if (!type) return;\n if (!target) {\n addField(type);\n return;\n }\n\n if (isSectionDropData(target.data)) {\n addFieldToSection(target.data.sectionId, type);\n return;\n }\n\n if (String(target.id) === String(source.id)) {\n addField(type);\n return;\n }\n\n const dropAfter = isDropAfter(\n event.operation.position?.current?.y,\n target.shape?.center?.y,\n );\n if (dropAfter) {\n insertFieldAfter(String(target.id), type);\n } else {\n insertFieldBefore(String(target.id), type);\n }\n return;\n }\n\n if (target && isSectionDropData(target.data)) {\n moveFieldToSection(String(source.id), target.data.sectionId);\n return;\n }\n\n const groups = buildGroupsMap(formFields);\n const nextGroups = move(groups, event);\n const nextFields = applyGroupsMap(nextGroups);\n setAllFields(nextFields);\n },\n [\n addField,\n addFieldToSection,\n formFields,\n insertFieldBefore,\n insertFieldAfter,\n moveFieldToSection,\n setAllFields,\n ],\n );\n\n const gridStyle = {\n '--fb2-palette-w': `${paletteWidth}px`,\n '--fb2-inspector-w': `${inspectorWidth}px`,\n } as React.CSSProperties;\n\n return (\n <div className={b({compact: density === 'compact'}, className)}>\n <CanvasContentProvider\n content={canvasContent}\n setContent={setCanvasContent}\n templateContent={templateContent}\n setTemplateContent={setTemplateContent}\n >\n <div className={b('toolbar')}>\n <SegmentedRadioGroup<Mode>\n size=\"m\"\n value={mode}\n onUpdate={setMode}\n options={[\n {\n value: 'edit',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Pencil} size={14} />\n Edit\n </span>\n ),\n },\n {\n value: 'preview',\n content: (\n <span className={b('toolbar-option')}>\n <Icon data={Eye} size={14} />\n Preview\n </span>\n ),\n },\n ]}\n />\n <Button\n ref={schemaButtonRef}\n view=\"outlined\"\n size=\"m\"\n onClick={() => setSchemaPopupOpen((prev) => !prev)}\n >\n <Icon data={Code} size={14} />\n Schema\n </Button>\n <SchemaPopup\n schema={schema}\n onApply={setAllFields}\n open={schemaPopupOpen}\n onOpenChange={setSchemaPopupOpen}\n anchorElement={schemaButtonRef.current}\n />\n </div>\n\n {mode === 'edit' ? (\n <DragDropProvider onDragEnd={handleDragEnd}>\n <div className={b('visual')} style={gridStyle}>\n <aside className={b('palette')}>\n <Palette />\n </aside>\n {!isCompact && (\n <ResizeHandle\n value={paletteWidth}\n min={PALETTE_MIN}\n max={PALETTE_MAX}\n direction=\"left\"\n onChange={setPaletteWidth}\n />\n )}\n <main className={b('canvas')}>\n <Canvas />\n </main>\n <ResizeHandle\n value={inspectorWidth}\n min={INSPECTOR_MIN}\n max={INSPECTOR_MAX}\n direction=\"right\"\n onChange={setInspectorWidth}\n />\n <aside className={b('inspector')}>\n <Inspector />\n </aside>\n </div>\n <DragOverlay dropAnimation={null}>\n {(source) => {\n if (!source) return null;\n if (isPaletteData(source.data)) {\n return <DragOverlayPreview type={source.data.type} />;\n }\n const field = findFieldById(formFields, String(source.id));\n if (!field) return null;\n return <DragOverlayPreview type={field.type} field={field} />;\n }}\n </DragOverlay>\n </DragDropProvider>\n ) : (\n <ContentTab />\n )}\n </CanvasContentProvider>\n </div>\n );\n};\n\nexport const FormBuilderV2 = ({\n className,\n formFields,\n onChange,\n density = 'full',\n}: FormBuilderV2Props) => {\n return (\n <FormProvider formFields={formFields} onChange={onChange}>\n <FormBuilderShell className={className} density={density} />\n </FormProvider>\n );\n};\n"]}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { PointerActivationConstraints, PointerSensor } from '@dnd-kit/dom';
|
|
4
4
|
import { useDraggable } from '@dnd-kit/react';
|
|
5
|
-
import { Button, Card, Icon, Text } from '@gravity-ui/uikit';
|
|
5
|
+
import { Button, Card, Icon, Text, Tooltip } from '@gravity-ui/uikit';
|
|
6
6
|
import { useFormContext } from "../../hooks/FormContext.js";
|
|
7
7
|
import { formBuilderV2Cn } from "../../utils/cn.js";
|
|
8
8
|
import { FIELD_TYPES, PALETTE_LABELS, TYPE_ICONS } from "../../utils/fieldMeta.js";
|
|
@@ -40,7 +40,7 @@ const PaletteTile = ({ type, label, icon, onClick }) => {
|
|
|
40
40
|
ref(element);
|
|
41
41
|
handleRef(element);
|
|
42
42
|
}, [ref, handleRef]);
|
|
43
|
-
return (_jsxs(Button, { ref: setRefs, view: "flat", size: "m", className: b('tile', { dragging: isDragging }), onClick: onClick,
|
|
43
|
+
return (_jsx(Tooltip, { content: label, placement: "right", openDelay: 500, children: _jsxs(Button, { ref: setRefs, view: "flat", size: "m", className: b('tile', { dragging: isDragging }), onClick: onClick, children: [_jsx(Icon, { data: icon, size: 18 }), _jsx("span", { className: b('tile-label'), children: label })] }) }));
|
|
44
44
|
};
|
|
45
45
|
export const Palette = () => {
|
|
46
46
|
const { addField, addFieldToSection, formFields, selectedFieldId } = useFormContext();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Palette.js","sourceRoot":"../../../../../src","sources":["form-builder-v2/components/Palette/Palette.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,4BAA4B,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AACzE,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Palette.js","sourceRoot":"../../../../../src","sources":["form-builder-v2/components/Palette/Palette.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {PointerActivationConstraints, PointerSensor} from '@dnd-kit/dom';\nimport {useDraggable} from '@dnd-kit/react';\nimport {Button, Card, Icon, Text, Tooltip} from '@gravity-ui/uikit';\nimport type {IconData} from '@gravity-ui/uikit';\n\nimport {useFormContext} from '../../hooks/FormContext';\nimport {BuilderFieldType, FormField} from '../../types';\nimport {formBuilderV2Cn} from '../../utils/cn';\nimport type {PaletteDragData} from '../../utils/dragData';\nimport {FIELD_TYPES, PALETTE_LABELS, TYPE_ICONS} from '../../utils/fieldMeta';\n\nimport './Palette.scss';\n\nexport type {PaletteDragData};\n\nconst b = formBuilderV2Cn('palette');\n\nexport const PALETTE_DRAGGABLE_PREFIX = 'palette:';\n\nconst findContainerId = (\n fields: FormField[],\n selectedId: string | null,\n parentSectionId: string | null = null,\n): string | null | undefined => {\n if (!selectedId) return null;\n for (const field of fields) {\n if (field.id === selectedId) {\n return field.type === 'section' ? field.id : parentSectionId;\n }\n if (field.type === 'section') {\n const nested = findContainerId(field.fields, selectedId, field.id);\n if (nested !== undefined) return nested;\n }\n }\n return undefined;\n};\n\ninterface PaletteTileProps {\n type: BuilderFieldType;\n label: string;\n icon: IconData;\n onClick: () => void;\n}\n\nconst DRAG_DISTANCE = 4;\n\nconst paletteSensors = [\n PointerSensor.configure({\n activationConstraints: [new PointerActivationConstraints.Distance({value: DRAG_DISTANCE})],\n }),\n];\n\nconst PaletteTile = ({type, label, icon, onClick}: PaletteTileProps) => {\n const {ref, handleRef, isDragging} = useDraggable({\n id: `${PALETTE_DRAGGABLE_PREFIX}${type}`,\n data: {kind: 'palette', type},\n sensors: paletteSensors,\n });\n\n const setRefs = React.useCallback(\n (element: HTMLButtonElement | null) => {\n ref(element);\n handleRef(element);\n },\n [ref, handleRef],\n );\n\n return (\n <Tooltip content={label} placement=\"right\" openDelay={500}>\n <Button\n ref={setRefs}\n view=\"flat\"\n size=\"m\"\n className={b('tile', {dragging: isDragging})}\n onClick={onClick}\n >\n <Icon data={icon} size={18} />\n <span className={b('tile-label')}>{label}</span>\n </Button>\n </Tooltip>\n );\n};\n\nexport const Palette = () => {\n const {addField, addFieldToSection, formFields, selectedFieldId} = useFormContext();\n\n const containerId = React.useMemo(\n () => findContainerId(formFields, selectedFieldId),\n [formFields, selectedFieldId],\n );\n\n const handleAdd = (type: BuilderFieldType) => {\n if (containerId) {\n addFieldToSection(containerId, type);\n } else {\n addField(type);\n }\n };\n\n return (\n <Card className={b()} view=\"outlined\">\n <div className={b('header')}>\n <Text variant=\"subheader-2\">Add field</Text>\n <Text variant=\"caption-1\" color=\"hint\">\n Click to add, or drag onto the canvas to drop at a specific position.\n </Text>\n </div>\n <div className={b('items')}>\n {FIELD_TYPES.map((type) => (\n <PaletteTile\n key={type}\n type={type}\n label={PALETTE_LABELS[type]}\n icon={TYPE_ICONS[type]}\n onClick={() => handleAdd(type)}\n />\n ))}\n </div>\n </Card>\n );\n};\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export declare const componentMap: {
|
|
2
|
-
section: ({ title, opened, fields, when, content, onUpdate, className, index, withAddButton, itemTitle, itemView, }: import("../../index.js").ClassNameProps & import("../
|
|
3
|
-
select: ({ title, name, options, when, content, onUpdate, hasClear, defaultValue, }: import("../
|
|
4
|
-
textInput: ({ title, name, when, content, onUpdate, defaultValue }: import("../
|
|
5
|
-
segmentedRadioGroup: ({ title, name, options, when, content, onUpdate, defaultValue, }: import("../
|
|
6
|
-
colorInput: ({ title, name, when, content, onUpdate, className, defaultValue, }: import("../../index.js").ClassNameProps & import("../
|
|
2
|
+
section: ({ title, opened, fields, when, content, onUpdate, className, index, withAddButton, itemTitle, itemView, }: import("../../index.js").ClassNameProps & import("../index.js").CommonProps & import("../index.js").SectionField) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
select: ({ title, name, options, when, content, onUpdate, hasClear, defaultValue, }: import("../index.js").CommonProps & import("../index.js").SelectField) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
textInput: ({ title, name, when, content, onUpdate, defaultValue }: import("../index.js").CommonProps & import("../index.js").TextField) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
segmentedRadioGroup: ({ title, name, options, when, content, onUpdate, defaultValue, }: import("../index.js").CommonProps & import("../index.js").SegmentedRadioGroupField) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
colorInput: ({ title, name, when, content, onUpdate, className, defaultValue, }: import("../../index.js").ClassNameProps & import("../index.js").CommonProps & import("../index.js").ColorField) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
text: ({ text, level, color, when, content, className }: import("../../index.js").ClassNameProps & {
|
|
8
8
|
text: string;
|
|
9
|
-
level?: import("../
|
|
10
|
-
color?: import("../
|
|
11
|
-
when?: import("../
|
|
12
|
-
content: import("../
|
|
9
|
+
level?: import("../index.js").Text["level"];
|
|
10
|
+
color?: import("../index.js").Text["color"];
|
|
11
|
+
when?: import("../index.js").When;
|
|
12
|
+
content: import("../index.js").Content;
|
|
13
13
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
textArea: ({ when, title, content, name, onUpdate, defaultValue }: import("../
|
|
15
|
-
switch: ({ title, when, name, content, onUpdate, className, defaultValue }: import("../../index.js").ClassNameProps & import("../
|
|
14
|
+
textArea: ({ when, title, content, name, onUpdate, defaultValue }: import("../index.js").CommonProps & import("../index.js").TextField) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
switch: ({ title, when, name, content, onUpdate, className, defaultValue }: import("../../index.js").ClassNameProps & import("../index.js").SwitchField & import("../index.js").CommonProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
16
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["form-generator-v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,2BAAwB;AAC3D,2BAAwB","sourcesContent":["export {default as FormGeneratorV2} from './FormGenerator';\nexport * from './types';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gravity-ui/page-constructor",
|
|
3
|
-
"version": "8.5.0-alpha.
|
|
3
|
+
"version": "8.5.0-alpha.5",
|
|
4
4
|
"description": "Gravity UI Page Constructor",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
"require": "./build/cjs/form-generator/index.js",
|
|
35
35
|
"import": "./build/esm/form-generator/index.js"
|
|
36
36
|
},
|
|
37
|
+
"./form-generator-v2": {
|
|
38
|
+
"types": "./build/esm/form-generator-v2/index.d.ts",
|
|
39
|
+
"require": "./build/cjs/form-generator-v2/index.js",
|
|
40
|
+
"import": "./build/esm/form-generator-v2/index.js"
|
|
41
|
+
},
|
|
37
42
|
"./form-builder": {
|
|
38
43
|
"types": "./build/esm/form-builder/index.d.ts",
|
|
39
44
|
"require": "./build/cjs/form-builder/index.js",
|
|
@@ -74,6 +79,9 @@
|
|
|
74
79
|
"form-generator": [
|
|
75
80
|
"./build/esm/form-generator/index.d.ts"
|
|
76
81
|
],
|
|
82
|
+
"form-generator-v2": [
|
|
83
|
+
"./build/esm/form-generator-v2/index.d.ts"
|
|
84
|
+
],
|
|
77
85
|
"form-builder": [
|
|
78
86
|
"./build/esm/form-builder/index.d.ts"
|
|
79
87
|
],
|