@report-designer/designer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/band-metadata.d.ts +8 -0
- package/dist/band-metadata.d.ts.map +1 -0
- package/dist/band-metadata.js +75 -0
- package/dist/band-metadata.js.map +1 -0
- package/dist/component-factory.d.ts +9 -0
- package/dist/component-factory.d.ts.map +1 -0
- package/dist/component-factory.js +141 -0
- package/dist/component-factory.js.map +1 -0
- package/dist/component-palette-model.d.ts +14 -0
- package/dist/component-palette-model.d.ts.map +1 -0
- package/dist/component-palette-model.js +21 -0
- package/dist/component-palette-model.js.map +1 -0
- package/dist/components/Canvas.d.ts +5 -0
- package/dist/components/Canvas.d.ts.map +1 -0
- package/dist/components/Canvas.js +2428 -0
- package/dist/components/Canvas.js.map +1 -0
- package/dist/components/ConditionalFormatManager.d.ts +8 -0
- package/dist/components/ConditionalFormatManager.d.ts.map +1 -0
- package/dist/components/ConditionalFormatManager.js +135 -0
- package/dist/components/ConditionalFormatManager.js.map +1 -0
- package/dist/components/Designer.d.ts +22 -0
- package/dist/components/Designer.d.ts.map +1 -0
- package/dist/components/Designer.js +115 -0
- package/dist/components/Designer.js.map +1 -0
- package/dist/components/ExpressionEditor.d.ts +10 -0
- package/dist/components/ExpressionEditor.d.ts.map +1 -0
- package/dist/components/ExpressionEditor.js +203 -0
- package/dist/components/ExpressionEditor.js.map +1 -0
- package/dist/components/LeftPanel.d.ts +11 -0
- package/dist/components/LeftPanel.d.ts.map +1 -0
- package/dist/components/LeftPanel.js +551 -0
- package/dist/components/LeftPanel.js.map +1 -0
- package/dist/components/PropertyEditor.d.ts +6 -0
- package/dist/components/PropertyEditor.d.ts.map +1 -0
- package/dist/components/PropertyEditor.js +1002 -0
- package/dist/components/PropertyEditor.js.map +1 -0
- package/dist/components/RibbonToolbar.d.ts +3 -0
- package/dist/components/RibbonToolbar.d.ts.map +1 -0
- package/dist/components/RibbonToolbar.js +179 -0
- package/dist/components/RibbonToolbar.js.map +1 -0
- package/dist/components/TextFormatEditor.d.ts +13 -0
- package/dist/components/TextFormatEditor.d.ts.map +1 -0
- package/dist/components/TextFormatEditor.js +199 -0
- package/dist/components/TextFormatEditor.js.map +1 -0
- package/dist/components/TextStyleLibraryDialog.d.ts +8 -0
- package/dist/components/TextStyleLibraryDialog.d.ts.map +1 -0
- package/dist/components/TextStyleLibraryDialog.js +367 -0
- package/dist/components/TextStyleLibraryDialog.js.map +1 -0
- package/dist/components/canvas/DesignerCanvasFrame.d.ts +10 -0
- package/dist/components/canvas/DesignerCanvasFrame.d.ts.map +1 -0
- package/dist/components/canvas/DesignerCanvasFrame.js +22 -0
- package/dist/components/canvas/DesignerCanvasFrame.js.map +1 -0
- package/dist/components/chart/ChartAxesPanel.d.ts +12 -0
- package/dist/components/chart/ChartAxesPanel.d.ts.map +1 -0
- package/dist/components/chart/ChartAxesPanel.js +71 -0
- package/dist/components/chart/ChartAxesPanel.js.map +1 -0
- package/dist/components/chart/ChartDataPanel.d.ts +21 -0
- package/dist/components/chart/ChartDataPanel.d.ts.map +1 -0
- package/dist/components/chart/ChartDataPanel.js +80 -0
- package/dist/components/chart/ChartDataPanel.js.map +1 -0
- package/dist/components/chart/ChartLabelPanel.d.ts +12 -0
- package/dist/components/chart/ChartLabelPanel.d.ts.map +1 -0
- package/dist/components/chart/ChartLabelPanel.js +34 -0
- package/dist/components/chart/ChartLabelPanel.js.map +1 -0
- package/dist/components/chart/ChartLegendPanel.d.ts +12 -0
- package/dist/components/chart/ChartLegendPanel.d.ts.map +1 -0
- package/dist/components/chart/ChartLegendPanel.js +48 -0
- package/dist/components/chart/ChartLegendPanel.js.map +1 -0
- package/dist/components/chart/ChartPropertyPanel.d.ts +26 -0
- package/dist/components/chart/ChartPropertyPanel.d.ts.map +1 -0
- package/dist/components/chart/ChartPropertyPanel.js +119 -0
- package/dist/components/chart/ChartPropertyPanel.js.map +1 -0
- package/dist/components/chart/ChartThemePanel.d.ts +9 -0
- package/dist/components/chart/ChartThemePanel.d.ts.map +1 -0
- package/dist/components/chart/ChartThemePanel.js +21 -0
- package/dist/components/chart/ChartThemePanel.js.map +1 -0
- package/dist/components/chart/ChartTitlePanel.d.ts +10 -0
- package/dist/components/chart/ChartTitlePanel.d.ts.map +1 -0
- package/dist/components/chart/ChartTitlePanel.js +45 -0
- package/dist/components/chart/ChartTitlePanel.js.map +1 -0
- package/dist/components/chart/ChartTypeStylePanel.d.ts +11 -0
- package/dist/components/chart/ChartTypeStylePanel.d.ts.map +1 -0
- package/dist/components/chart/ChartTypeStylePanel.js +37 -0
- package/dist/components/chart/ChartTypeStylePanel.js.map +1 -0
- package/dist/components/chart/ColorPaletteEditor.d.ts +10 -0
- package/dist/components/chart/ColorPaletteEditor.d.ts.map +1 -0
- package/dist/components/chart/ColorPaletteEditor.js +18 -0
- package/dist/components/chart/ColorPaletteEditor.js.map +1 -0
- package/dist/components/chart/chart-options.d.ts +119 -0
- package/dist/components/chart/chart-options.d.ts.map +1 -0
- package/dist/components/chart/chart-options.js +217 -0
- package/dist/components/chart/chart-options.js.map +1 -0
- package/dist/components/dialogs/BandWizardDialog.d.ts +8 -0
- package/dist/components/dialogs/BandWizardDialog.d.ts.map +1 -0
- package/dist/components/dialogs/BandWizardDialog.js +54 -0
- package/dist/components/dialogs/BandWizardDialog.js.map +1 -0
- package/dist/components/dialogs/GroupWizardDialog.d.ts +8 -0
- package/dist/components/dialogs/GroupWizardDialog.d.ts.map +1 -0
- package/dist/components/dialogs/GroupWizardDialog.js +70 -0
- package/dist/components/dialogs/GroupWizardDialog.js.map +1 -0
- package/dist/components/dialogs/JsonDataSourceDialog.d.ts +8 -0
- package/dist/components/dialogs/JsonDataSourceDialog.d.ts.map +1 -0
- package/dist/components/dialogs/JsonDataSourceDialog.js +67 -0
- package/dist/components/dialogs/JsonDataSourceDialog.js.map +1 -0
- package/dist/components/dialogs/PageSetupDialog.d.ts +8 -0
- package/dist/components/dialogs/PageSetupDialog.d.ts.map +1 -0
- package/dist/components/dialogs/PageSetupDialog.js +145 -0
- package/dist/components/dialogs/PageSetupDialog.js.map +1 -0
- package/dist/components/dialogs/dialog-utils.d.ts +6 -0
- package/dist/components/dialogs/dialog-utils.d.ts.map +1 -0
- package/dist/components/dialogs/dialog-utils.js +37 -0
- package/dist/components/dialogs/dialog-utils.js.map +1 -0
- package/dist/components/events/EventEditorDialog.d.ts +43 -0
- package/dist/components/events/EventEditorDialog.d.ts.map +1 -0
- package/dist/components/events/EventEditorDialog.js +271 -0
- package/dist/components/events/EventEditorDialog.js.map +1 -0
- package/dist/components/events/EventScriptEditor.d.ts +41 -0
- package/dist/components/events/EventScriptEditor.d.ts.map +1 -0
- package/dist/components/events/EventScriptEditor.js +140 -0
- package/dist/components/events/EventScriptEditor.js.map +1 -0
- package/dist/components/events/event-editor-utils.d.ts +18 -0
- package/dist/components/events/event-editor-utils.d.ts.map +1 -0
- package/dist/components/events/event-editor-utils.js +66 -0
- package/dist/components/events/event-editor-utils.js.map +1 -0
- package/dist/components/events/event-script-monaco.d.ts +74 -0
- package/dist/components/events/event-script-monaco.d.ts.map +1 -0
- package/dist/components/events/event-script-monaco.js +282 -0
- package/dist/components/events/event-script-monaco.js.map +1 -0
- package/dist/components/events/event-script-templates.d.ts +7 -0
- package/dist/components/events/event-script-templates.d.ts.map +1 -0
- package/dist/components/events/event-script-templates.js +100 -0
- package/dist/components/events/event-script-templates.js.map +1 -0
- package/dist/components/expression/ExpressionMonacoEditor.d.ts +16 -0
- package/dist/components/expression/ExpressionMonacoEditor.d.ts.map +1 -0
- package/dist/components/expression/ExpressionMonacoEditor.js +63 -0
- package/dist/components/expression/ExpressionMonacoEditor.js.map +1 -0
- package/dist/components/expression/InlineExpressionEditor.d.ts +10 -0
- package/dist/components/expression/InlineExpressionEditor.d.ts.map +1 -0
- package/dist/components/expression/InlineExpressionEditor.js +33 -0
- package/dist/components/expression/InlineExpressionEditor.js.map +1 -0
- package/dist/components/expression/expression-monaco.d.ts +34 -0
- package/dist/components/expression/expression-monaco.d.ts.map +1 -0
- package/dist/components/expression/expression-monaco.js +87 -0
- package/dist/components/expression/expression-monaco.js.map +1 -0
- package/dist/components/panels/DesignerLeftPanel.d.ts +11 -0
- package/dist/components/panels/DesignerLeftPanel.d.ts.map +1 -0
- package/dist/components/panels/DesignerLeftPanel.js +8 -0
- package/dist/components/panels/DesignerLeftPanel.js.map +1 -0
- package/dist/components/panels/DesignerPropertyPanel.d.ts +6 -0
- package/dist/components/panels/DesignerPropertyPanel.d.ts.map +1 -0
- package/dist/components/panels/DesignerPropertyPanel.js +441 -0
- package/dist/components/panels/DesignerPropertyPanel.js.map +1 -0
- package/dist/components/panels/PanelSearchBox.d.ts +9 -0
- package/dist/components/panels/PanelSearchBox.d.ts.map +1 -0
- package/dist/components/panels/PanelSearchBox.js +5 -0
- package/dist/components/panels/PanelSearchBox.js.map +1 -0
- package/dist/components/properties/BandPropertyGrid.d.ts +6 -0
- package/dist/components/properties/BandPropertyGrid.d.ts.map +1 -0
- package/dist/components/properties/BandPropertyGrid.js +504 -0
- package/dist/components/properties/BandPropertyGrid.js.map +1 -0
- package/dist/components/properties/BoxStyleEditors.d.ts +59 -0
- package/dist/components/properties/BoxStyleEditors.d.ts.map +1 -0
- package/dist/components/properties/BoxStyleEditors.js +87 -0
- package/dist/components/properties/BoxStyleEditors.js.map +1 -0
- package/dist/components/properties/FontEditor.d.ts +28 -0
- package/dist/components/properties/FontEditor.d.ts.map +1 -0
- package/dist/components/properties/FontEditor.js +22 -0
- package/dist/components/properties/FontEditor.js.map +1 -0
- package/dist/components/ribbon/DesignerRibbon.d.ts +3 -0
- package/dist/components/ribbon/DesignerRibbon.d.ts.map +1 -0
- package/dist/components/ribbon/DesignerRibbon.js +193 -0
- package/dist/components/ribbon/DesignerRibbon.js.map +1 -0
- package/dist/components/richtext/RichTextInlineEditor.d.ts +15 -0
- package/dist/components/richtext/RichTextInlineEditor.d.ts.map +1 -0
- package/dist/components/richtext/RichTextInlineEditor.js +94 -0
- package/dist/components/richtext/RichTextInlineEditor.js.map +1 -0
- package/dist/components/shell/DesignerShell.d.ts +12 -0
- package/dist/components/shell/DesignerShell.d.ts.map +1 -0
- package/dist/components/shell/DesignerShell.js +124 -0
- package/dist/components/shell/DesignerShell.js.map +1 -0
- package/dist/components/shell/DesignerStatusBar.d.ts +3 -0
- package/dist/components/shell/DesignerStatusBar.d.ts.map +1 -0
- package/dist/components/shell/DesignerStatusBar.js +23 -0
- package/dist/components/shell/DesignerStatusBar.js.map +1 -0
- package/dist/components/tree/ReportTree.d.ts +3 -0
- package/dist/components/tree/ReportTree.d.ts.map +1 -0
- package/dist/components/tree/ReportTree.js +17 -0
- package/dist/components/tree/ReportTree.js.map +1 -0
- package/dist/data-source-fields.d.ts +14 -0
- package/dist/data-source-fields.d.ts.map +1 -0
- package/dist/data-source-fields.js +49 -0
- package/dist/data-source-fields.js.map +1 -0
- package/dist/data-source-paths.d.ts +10 -0
- package/dist/data-source-paths.d.ts.map +1 -0
- package/dist/data-source-paths.js +61 -0
- package/dist/data-source-paths.js.map +1 -0
- package/dist/expression/expression-catalog.d.ts +39 -0
- package/dist/expression/expression-catalog.d.ts.map +1 -0
- package/dist/expression/expression-catalog.js +127 -0
- package/dist/expression/expression-catalog.js.map +1 -0
- package/dist/expression/expression-preview.d.ts +11 -0
- package/dist/expression/expression-preview.d.ts.map +1 -0
- package/dist/expression/expression-preview.js +58 -0
- package/dist/expression/expression-preview.js.map +1 -0
- package/dist/expression/expression-validation.d.ts +12 -0
- package/dist/expression/expression-validation.d.ts.map +1 -0
- package/dist/expression/expression-validation.js +85 -0
- package/dist/expression/expression-validation.js.map +1 -0
- package/dist/expression/function-catalog.d.ts +21 -0
- package/dist/expression/function-catalog.d.ts.map +1 -0
- package/dist/expression/function-catalog.js +96 -0
- package/dist/expression/function-catalog.js.map +1 -0
- package/dist/i18n/DesignerI18nProvider.d.ts +11 -0
- package/dist/i18n/DesignerI18nProvider.d.ts.map +1 -0
- package/dist/i18n/DesignerI18nProvider.js +32 -0
- package/dist/i18n/DesignerI18nProvider.js.map +1 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/messages.d.ts +5 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +1383 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/page-settings.d.ts +21 -0
- package/dist/page-settings.d.ts.map +1 -0
- package/dist/page-settings.js +66 -0
- package/dist/page-settings.js.map +1 -0
- package/dist/report-structure.d.ts +20 -0
- package/dist/report-structure.d.ts.map +1 -0
- package/dist/report-structure.js +219 -0
- package/dist/report-structure.js.map +1 -0
- package/dist/store/designer-store.d.ts +161 -0
- package/dist/store/designer-store.d.ts.map +1 -0
- package/dist/store/designer-store.js +1851 -0
- package/dist/store/designer-store.js.map +1 -0
- package/dist/table/table-structure.d.ts +50 -0
- package/dist/table/table-structure.d.ts.map +1 -0
- package/dist/table/table-structure.js +251 -0
- package/dist/table/table-structure.js.map +1 -0
- package/dist/text-style-application.d.ts +11 -0
- package/dist/text-style-application.d.ts.map +1 -0
- package/dist/text-style-application.js +135 -0
- package/dist/text-style-application.js.map +1 -0
- package/dist/text-style-bindings.d.ts +16 -0
- package/dist/text-style-bindings.d.ts.map +1 -0
- package/dist/text-style-bindings.js +549 -0
- package/dist/text-style-bindings.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { AlignCenterOutlined, AlignLeftOutlined, AlignRightOutlined, BoldOutlined, ClearOutlined, ItalicOutlined, OrderedListOutlined, SaveOutlined, StrikethroughOutlined, UnderlineOutlined, UnorderedListOutlined, } from '@ant-design/icons';
|
|
4
|
+
import { Button, ColorPicker, InputNumber, Select, Space, Tooltip } from 'antd';
|
|
5
|
+
import { getReportFontOptions, sanitizeRichHtml } from '@report-designer/core';
|
|
6
|
+
import { EditorContent, useEditor } from '@tiptap/react';
|
|
7
|
+
import StarterKit from '@tiptap/starter-kit';
|
|
8
|
+
import { Color, FontFamily, FontSize, TextStyle } from '@tiptap/extension-text-style';
|
|
9
|
+
import TextAlign from '@tiptap/extension-text-align';
|
|
10
|
+
import Underline from '@tiptap/extension-underline';
|
|
11
|
+
import Link from '@tiptap/extension-link';
|
|
12
|
+
import Placeholder from '@tiptap/extension-placeholder';
|
|
13
|
+
import { useDesignerI18n } from '../../i18n';
|
|
14
|
+
const FONT_SIZE_OPTIONS = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 28, 32, 36, 48, 72].map(value => ({
|
|
15
|
+
label: String(value),
|
|
16
|
+
value,
|
|
17
|
+
}));
|
|
18
|
+
export const RichTextInlineEditor = ({ html, document, fonts, onSave, onCancel, }) => {
|
|
19
|
+
const { t } = useDesignerI18n();
|
|
20
|
+
const [fontSize, setFontSize] = useState(12);
|
|
21
|
+
const fontOptions = useMemo(() => getReportFontOptions(fonts), [fonts]);
|
|
22
|
+
const content = document ?? (html || '<p></p>');
|
|
23
|
+
const editor = useEditor({
|
|
24
|
+
immediatelyRender: false,
|
|
25
|
+
extensions: [
|
|
26
|
+
StarterKit.configure({
|
|
27
|
+
heading: false,
|
|
28
|
+
code: false,
|
|
29
|
+
codeBlock: false,
|
|
30
|
+
blockquote: false,
|
|
31
|
+
horizontalRule: false,
|
|
32
|
+
}),
|
|
33
|
+
TextStyle,
|
|
34
|
+
Color,
|
|
35
|
+
FontFamily,
|
|
36
|
+
FontSize,
|
|
37
|
+
TextAlign.configure({ types: ['paragraph'] }),
|
|
38
|
+
Underline,
|
|
39
|
+
Link.configure({ openOnClick: false, autolink: false, linkOnPaste: false }),
|
|
40
|
+
Placeholder.configure({ placeholder: '' }),
|
|
41
|
+
],
|
|
42
|
+
content,
|
|
43
|
+
editorProps: {
|
|
44
|
+
attributes: {
|
|
45
|
+
'aria-label': t('richText.editor'),
|
|
46
|
+
class: 'rd-richtext-inline-surface',
|
|
47
|
+
style: 'outline: none;',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
const run = (command) => {
|
|
52
|
+
if (!editor)
|
|
53
|
+
return;
|
|
54
|
+
const chain = editor.chain().focus();
|
|
55
|
+
command(chain);
|
|
56
|
+
};
|
|
57
|
+
const applyFontFamily = (family) => {
|
|
58
|
+
run(chain => chain.setFontFamily(family).run());
|
|
59
|
+
};
|
|
60
|
+
const applyFontSize = (size) => {
|
|
61
|
+
if (!size)
|
|
62
|
+
return;
|
|
63
|
+
setFontSize(size);
|
|
64
|
+
run(chain => chain.setFontSize(`${size}px`).run());
|
|
65
|
+
};
|
|
66
|
+
const applyColor = (_, css) => {
|
|
67
|
+
run(chain => chain.setColor(css).run());
|
|
68
|
+
};
|
|
69
|
+
const save = () => {
|
|
70
|
+
if (!editor)
|
|
71
|
+
return;
|
|
72
|
+
onSave({
|
|
73
|
+
html: sanitizeRichHtml(editor.getHTML()),
|
|
74
|
+
document: editor.getJSON(),
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
const iconButton = (label, icon, onClick, active = false) => (_jsx(Tooltip, { title: label, children: _jsx(Button, { "aria-label": label, size: "small", type: active ? 'primary' : 'default', icon: icon, onMouseDown: event => event.preventDefault(), onClick: onClick }) }));
|
|
78
|
+
return (_jsxs("div", { "data-testid": "richtext-inline-editor", style: {
|
|
79
|
+
display: 'flex',
|
|
80
|
+
flexDirection: 'column',
|
|
81
|
+
width: '100%',
|
|
82
|
+
height: '100%',
|
|
83
|
+
minHeight: 96,
|
|
84
|
+
background: '#ffffff',
|
|
85
|
+
border: '1px solid #1677ff',
|
|
86
|
+
boxShadow: '0 4px 14px rgba(22,119,255,0.18)',
|
|
87
|
+
}, onPointerDown: event => event.stopPropagation(), onMouseDown: event => event.stopPropagation(), onContextMenu: event => event.stopPropagation(), children: [_jsxs(Space, { size: 4, wrap: true, style: {
|
|
88
|
+
flex: '0 0 auto',
|
|
89
|
+
padding: 4,
|
|
90
|
+
borderBottom: '1px solid #e5e7eb',
|
|
91
|
+
background: '#f8fafc',
|
|
92
|
+
}, children: [_jsx(Select, { "aria-label": t('richText.font'), size: "small", style: { width: 132 }, placeholder: t('richText.font'), options: fontOptions, onChange: applyFontFamily }), _jsx(InputNumber, { "aria-label": t('richText.fontSize'), size: "small", min: 6, max: 120, value: fontSize, controls: true, style: { width: 70 }, onChange: applyFontSize }), _jsx(ColorPicker, { size: "small", onChange: applyColor }), iconButton(t('richText.bold'), _jsx(BoldOutlined, {}), () => run(chain => chain.toggleBold().run()), Boolean(editor?.isActive('bold'))), iconButton(t('richText.italic'), _jsx(ItalicOutlined, {}), () => run(chain => chain.toggleItalic().run()), Boolean(editor?.isActive('italic'))), iconButton(t('richText.underline'), _jsx(UnderlineOutlined, {}), () => run(chain => chain.toggleUnderline().run()), Boolean(editor?.isActive('underline'))), iconButton(t('richText.strike'), _jsx(StrikethroughOutlined, {}), () => run(chain => chain.toggleStrike().run()), Boolean(editor?.isActive('strike'))), iconButton(t('richText.alignLeft'), _jsx(AlignLeftOutlined, {}), () => run(chain => chain.setTextAlign('left').run())), iconButton(t('richText.alignCenter'), _jsx(AlignCenterOutlined, {}), () => run(chain => chain.setTextAlign('center').run())), iconButton(t('richText.alignRight'), _jsx(AlignRightOutlined, {}), () => run(chain => chain.setTextAlign('right').run())), iconButton(t('richText.bulletList'), _jsx(UnorderedListOutlined, {}), () => run(chain => chain.toggleBulletList().run())), iconButton(t('richText.orderedList'), _jsx(OrderedListOutlined, {}), () => run(chain => chain.toggleOrderedList().run())), iconButton(t('richText.clearFormat'), _jsx(ClearOutlined, {}), () => run(chain => chain.unsetAllMarks().clearNodes().run())), _jsx(Button, { "aria-label": t('richText.save'), size: "small", type: "primary", icon: _jsx(SaveOutlined, {}), onClick: save, children: t('richText.save') }), _jsx(Button, { "aria-label": t('richText.cancel'), size: "small", onClick: onCancel, children: t('richText.cancel') })] }), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: 'auto', padding: 4 }, children: _jsx(EditorContent, { editor: editor }) })] }));
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=RichTextInlineEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RichTextInlineEditor.js","sourceRoot":"","sources":["../../../src/components/richtext/RichTextInlineEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ReportTemplate } from '@report-designer/core';
|
|
3
|
+
import type { ExpressionCatalogExtensions } from '../../expression/expression-catalog';
|
|
4
|
+
import '../../styles/designer-shell.css';
|
|
5
|
+
interface DesignerShellProps {
|
|
6
|
+
className?: string;
|
|
7
|
+
subreports?: Record<string, ReportTemplate>;
|
|
8
|
+
expressionExtensions?: ExpressionCatalogExtensions;
|
|
9
|
+
}
|
|
10
|
+
export declare const DesignerShell: React.FC<DesignerShellProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=DesignerShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignerShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/DesignerShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAiB5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEvF,OAAO,iCAAiC,CAAC;AAWzC,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;CACpD;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAsEtD,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { PushpinOutlined, RedoOutlined, SaveOutlined, UndoOutlined, } from '@ant-design/icons';
|
|
4
|
+
import { Button, Tooltip } from 'antd';
|
|
5
|
+
import { DesignerCanvasFrame } from '../canvas/DesignerCanvasFrame';
|
|
6
|
+
import { ConditionalFormatManager } from '../ConditionalFormatManager';
|
|
7
|
+
import { TextStyleLibraryDialog } from '../TextStyleLibraryDialog';
|
|
8
|
+
import { DesignerLeftPanel } from '../panels/DesignerLeftPanel';
|
|
9
|
+
import { DesignerPropertyPanel } from '../panels/DesignerPropertyPanel';
|
|
10
|
+
import { DesignerRibbon } from '../ribbon/DesignerRibbon';
|
|
11
|
+
import { useDesignerStore } from '../../store/designer-store';
|
|
12
|
+
import { useDesignerI18n } from '../../i18n';
|
|
13
|
+
import { DesignerStatusBar } from './DesignerStatusBar';
|
|
14
|
+
import '../../styles/designer-shell.css';
|
|
15
|
+
const LEFT_DOCK_STORAGE_KEY = 'rd-designer-left-panel-dock';
|
|
16
|
+
const PROPERTY_DOCK_STORAGE_KEY = 'rd-designer-property-panel-dock';
|
|
17
|
+
const LEFT_PANEL_WIDTH = '270px';
|
|
18
|
+
const PROPERTY_PANEL_WIDTH = '310px';
|
|
19
|
+
const DOCK_TAB_WIDTH = '30px';
|
|
20
|
+
export const DesignerShell = ({ className, subreports, expressionExtensions }) => {
|
|
21
|
+
const { t } = useDesignerI18n();
|
|
22
|
+
const templateName = useDesignerStore(s => s.template.name);
|
|
23
|
+
const undo = useDesignerStore(s => s.undo);
|
|
24
|
+
const redo = useDesignerStore(s => s.redo);
|
|
25
|
+
const canUndo = useDesignerStore(s => s.canUndo);
|
|
26
|
+
const canRedo = useDesignerStore(s => s.canRedo);
|
|
27
|
+
const textStyleLibraryOpen = useDesignerStore(s => s.textStyleLibraryOpen);
|
|
28
|
+
const closeTextStyleLibrary = useDesignerStore(s => s.closeTextStyleLibrary);
|
|
29
|
+
const conditionalFormatLibraryOpen = useDesignerStore(s => s.conditionalFormatLibraryOpen);
|
|
30
|
+
const closeConditionalFormatLibrary = useDesignerStore(s => s.closeConditionalFormatLibrary);
|
|
31
|
+
const [leftDockMode, setLeftDockMode] = usePersistentDockMode(LEFT_DOCK_STORAGE_KEY);
|
|
32
|
+
const [propertyDockMode, setPropertyDockMode] = usePersistentDockMode(PROPERTY_DOCK_STORAGE_KEY);
|
|
33
|
+
const [leftActiveTab, setLeftActiveTab] = React.useState('tree');
|
|
34
|
+
const leftColumnWidth = leftDockMode === 'pinned' ? LEFT_PANEL_WIDTH : DOCK_TAB_WIDTH;
|
|
35
|
+
const propertyColumnWidth = propertyDockMode === 'pinned' ? PROPERTY_PANEL_WIDTH : DOCK_TAB_WIDTH;
|
|
36
|
+
const leftDockTabs = [
|
|
37
|
+
{ key: 'palette', label: t('leftPanel.components'), testId: 'designer-left-dock-tab-palette' },
|
|
38
|
+
{ key: 'data', label: t('leftPanel.dictionary'), testId: 'designer-left-dock-tab-data' },
|
|
39
|
+
{ key: 'tree', label: t('leftPanel.report'), testId: 'designer-left-dock-tab-tree' },
|
|
40
|
+
];
|
|
41
|
+
const propertyDockTabs = [
|
|
42
|
+
{ key: 'properties', label: t('shell.propertyPanel'), testId: 'designer-property-dock-tab-properties' },
|
|
43
|
+
];
|
|
44
|
+
return (_jsxs("div", { className: className ? `rd-designer-shell ${className}` : 'rd-designer-shell', children: [_jsx(QuickAccess, { templateName: templateName, undo: undo, redo: redo, canUndo: canUndo(), canRedo: canRedo() }), _jsx(DesignerRibbon, {}), _jsxs("div", { className: "rd-designer-body", "data-testid": "designer-body", style: { gridTemplateColumns: `${leftColumnWidth} minmax(360px, 1fr) ${propertyColumnWidth}` }, children: [_jsx(DockablePanel, { side: "left", mode: leftDockMode, width: LEFT_PANEL_WIDTH, testId: "designer-left-dock", stripTestId: "designer-left-dock-strip", tabs: leftDockTabs, activeTabKey: leftActiveTab, pinTitle: t('shell.pinLeftPanel'), unpinTitle: t('shell.unpinLeftPanel'), onTabActivate: key => setLeftActiveTab(key), onModeChange: setLeftDockMode, children: _jsx(DesignerLeftPanel, { activeTab: leftActiveTab, expressionExtensions: expressionExtensions, onActiveTabChange: setLeftActiveTab }) }), _jsx(DesignerCanvasFrame, { subreports: subreports, expressionExtensions: expressionExtensions }), _jsx(DockablePanel, { side: "right", mode: propertyDockMode, width: PROPERTY_PANEL_WIDTH, testId: "designer-property-dock", stripTestId: "designer-property-dock-strip", tabs: propertyDockTabs, activeTabKey: "properties", pinTitle: t('shell.pinPropertyPanel'), unpinTitle: t('shell.unpinPropertyPanel'), onModeChange: setPropertyDockMode, children: _jsx(DesignerPropertyPanel, { expressionExtensions: expressionExtensions }) })] }), _jsx(DesignerStatusBar, {}), _jsx(TextStyleLibraryDialog, { open: textStyleLibraryOpen, onClose: closeTextStyleLibrary }), _jsx(ConditionalFormatManager, { open: conditionalFormatLibraryOpen, onClose: closeConditionalFormatLibrary })] }));
|
|
45
|
+
};
|
|
46
|
+
const DockablePanel = ({ children, mode, onModeChange, activeTabKey, onTabActivate, pinTitle, side, stripTestId, tabs, testId, unpinTitle, width, }) => {
|
|
47
|
+
const [open, setOpen] = React.useState(false);
|
|
48
|
+
const isAuto = mode === 'auto';
|
|
49
|
+
const isOpen = isAuto && open;
|
|
50
|
+
const pinButtonTitle = isAuto ? pinTitle : unpinTitle;
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
if (!isAuto)
|
|
53
|
+
setOpen(false);
|
|
54
|
+
}, [isAuto]);
|
|
55
|
+
const showPanel = () => {
|
|
56
|
+
if (isAuto)
|
|
57
|
+
setOpen(true);
|
|
58
|
+
};
|
|
59
|
+
const hidePanel = () => {
|
|
60
|
+
if (isAuto)
|
|
61
|
+
setOpen(false);
|
|
62
|
+
};
|
|
63
|
+
const toggleMode = () => {
|
|
64
|
+
onModeChange(isAuto ? 'pinned' : 'auto');
|
|
65
|
+
};
|
|
66
|
+
const activateTab = (key) => {
|
|
67
|
+
onTabActivate?.(key);
|
|
68
|
+
showPanel();
|
|
69
|
+
};
|
|
70
|
+
const autoContentStyle = isAuto
|
|
71
|
+
? {
|
|
72
|
+
...(side === 'left' ? { left: DOCK_TAB_WIDTH } : { right: DOCK_TAB_WIDTH }),
|
|
73
|
+
opacity: isOpen ? 1 : 0,
|
|
74
|
+
visibility: isOpen ? 'visible' : 'hidden',
|
|
75
|
+
pointerEvents: isOpen ? 'auto' : 'none',
|
|
76
|
+
transform: isOpen ? 'translateX(0)' : `translateX(${side === 'left' ? '-8px' : '8px'})`,
|
|
77
|
+
}
|
|
78
|
+
: undefined;
|
|
79
|
+
const pinButtonVisible = !isAuto || isOpen;
|
|
80
|
+
const pinButtonStyle = {
|
|
81
|
+
opacity: pinButtonVisible ? 1 : 0,
|
|
82
|
+
visibility: pinButtonVisible ? 'visible' : 'hidden',
|
|
83
|
+
pointerEvents: pinButtonVisible ? 'auto' : 'none',
|
|
84
|
+
};
|
|
85
|
+
const pinButtonOrientationClass = isAuto ? 'rd-dock-pin-button-horizontal' : 'rd-dock-pin-button-vertical';
|
|
86
|
+
return (_jsxs("div", { className: `rd-dock-panel rd-dock-panel-${side} rd-dock-panel-${mode}${isOpen ? ' rd-dock-panel-open' : ''}`, "data-dock-mode": mode, "data-dock-open": isOpen ? 'true' : 'false', "data-testid": testId, onMouseEnter: showPanel, onMouseLeave: hidePanel, style: { ['--rd-dock-width']: width }, children: [_jsx("div", { className: "rd-dock-strip", "data-testid": stripTestId, onMouseEnter: showPanel, children: tabs.map(tab => (_jsx("button", { type: "button", className: `rd-dock-strip-tab${tab.key === activeTabKey ? ' rd-dock-strip-tab-active' : ''}`, "data-testid": tab.testId, title: tab.label, "aria-label": tab.label, onMouseEnter: () => activateTab(tab.key), onFocus: () => activateTab(tab.key), onClick: () => activateTab(tab.key), children: _jsx("span", { children: tab.label }) }, tab.key))) }), _jsxs("div", { className: "rd-dock-content", style: autoContentStyle, onMouseEnter: showPanel, children: [_jsx(Tooltip, { title: pinButtonTitle, children: _jsx(Button, { className: `rd-dock-pin-button ${pinButtonOrientationClass}`, "data-testid": `${testId}-pin-button`, size: "small", style: pinButtonStyle, type: "text", title: pinButtonTitle, "aria-label": pinButtonTitle, icon: _jsx(PushpinOutlined, { "aria-hidden": true }), onClick: toggleMode }) }), children] })] }));
|
|
87
|
+
};
|
|
88
|
+
function usePersistentDockMode(storageKey) {
|
|
89
|
+
const [mode, setMode] = React.useState(() => readDockMode(storageKey));
|
|
90
|
+
const updateMode = React.useCallback((nextMode) => {
|
|
91
|
+
setMode(nextMode);
|
|
92
|
+
try {
|
|
93
|
+
window.localStorage.setItem(storageKey, nextMode);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Local storage can be unavailable in embedded or private contexts.
|
|
97
|
+
}
|
|
98
|
+
}, [storageKey]);
|
|
99
|
+
return [mode, updateMode];
|
|
100
|
+
}
|
|
101
|
+
function readDockMode(storageKey) {
|
|
102
|
+
try {
|
|
103
|
+
return window.localStorage.getItem(storageKey) === 'auto' ? 'auto' : 'pinned';
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return 'pinned';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const QuickAccess = ({ templateName, undo, redo, canUndo, canRedo }) => {
|
|
110
|
+
const { t } = useDesignerI18n();
|
|
111
|
+
const saveTemplate = () => {
|
|
112
|
+
const currentTemplate = useDesignerStore.getState().template;
|
|
113
|
+
const json = JSON.stringify(currentTemplate, null, 2);
|
|
114
|
+
const blob = new Blob([json], { type: 'application/json' });
|
|
115
|
+
const url = URL.createObjectURL(blob);
|
|
116
|
+
const link = document.createElement('a');
|
|
117
|
+
link.href = url;
|
|
118
|
+
link.download = `${currentTemplate.name || 'report'}.json`;
|
|
119
|
+
link.click();
|
|
120
|
+
URL.revokeObjectURL(url);
|
|
121
|
+
};
|
|
122
|
+
return (_jsxs("header", { className: "rd-quick-access", "data-testid": "designer-quick-access", children: [_jsxs("div", { className: "rd-quick-access-buttons", children: [_jsx(Tooltip, { title: t('shell.save'), children: _jsx(Button, { size: "small", type: "text", icon: _jsx(SaveOutlined, {}), onClick: saveTemplate }) }), _jsx("span", { className: "rd-quick-access-separator" }), _jsx(Tooltip, { title: t('shell.undo'), children: _jsx(Button, { size: "small", type: "text", icon: _jsx(UndoOutlined, {}), disabled: !canUndo, onClick: undo }) }), _jsx(Tooltip, { title: t('shell.redo'), children: _jsx(Button, { size: "small", type: "text", icon: _jsx(RedoOutlined, {}), disabled: !canRedo, onClick: redo }) })] }), _jsx("div", { className: "rd-quick-access-title", children: templateName || t('shell.untitledReport') }), _jsx("div", { className: "rd-quick-access-meta", children: t('shell.designerName') })] }));
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=DesignerShell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignerShell.js","sourceRoot":"","sources":["../../../src/components/shell/DesignerShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignerStatusBar.d.ts","sourceRoot":"","sources":["../../../src/components/shell/DesignerStatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAwCrC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useDesignerStore } from '../../store/designer-store';
|
|
3
|
+
import { formatUnitValue, getReportUnitSymbol } from '../../page-settings';
|
|
4
|
+
import { useDesignerI18n } from '../../i18n';
|
|
5
|
+
export const DesignerStatusBar = () => {
|
|
6
|
+
const { t } = useDesignerI18n();
|
|
7
|
+
const template = useDesignerStore(s => s.template);
|
|
8
|
+
const currentPageId = useDesignerStore(s => s.currentPageId);
|
|
9
|
+
const selectedComponentIds = useDesignerStore(s => s.selectedComponentIds);
|
|
10
|
+
const selectedBandId = useDesignerStore(s => s.selectedBandId);
|
|
11
|
+
const reportUnit = useDesignerStore(s => s.reportUnit);
|
|
12
|
+
const zoom = useDesignerStore(s => s.zoom);
|
|
13
|
+
const currentPage = template.pages.find(p => p.id === currentPageId) ?? template.pages[0];
|
|
14
|
+
const unitSymbol = getReportUnitSymbol(reportUnit);
|
|
15
|
+
const margins = currentPage?.margins ?? { top: 0, right: 0, bottom: 0, left: 0 };
|
|
16
|
+
const selectedLabel = selectedComponentIds.length > 0
|
|
17
|
+
? t('status.selection.components', { count: selectedComponentIds.length })
|
|
18
|
+
: selectedBandId
|
|
19
|
+
? t('status.selection.band')
|
|
20
|
+
: t('status.selection.none');
|
|
21
|
+
return (_jsxs("div", { className: "rd-status-bar", "data-testid": "designer-status-bar", children: [_jsx("div", { className: "rd-status-item", children: selectedLabel }), currentPage && (_jsxs(_Fragment, { children: [_jsx("div", { className: "rd-status-item", children: t('status.pageOf', { current: template.pages.findIndex(p => p.id === currentPage.id) + 1, total: template.pages.length }) }), _jsxs("div", { className: "rd-status-item", children: [formatUnitValue(currentPage.width, reportUnit), " x ", formatUnitValue(currentPage.height, reportUnit), " ", unitSymbol] }), _jsxs("div", { className: "rd-status-item", children: [t('status.margins'), " ", formatUnitValue(margins.top, reportUnit), "/", formatUnitValue(margins.right, reportUnit), "/", formatUnitValue(margins.bottom, reportUnit), "/", formatUnitValue(margins.left, reportUnit), " ", unitSymbol] })] })), _jsx("div", { className: "rd-status-spacer" }), _jsxs("div", { className: "rd-status-item", children: [t('status.grid'), " ", formatUnitValue(5, reportUnit), " ", unitSymbol] }), _jsx("div", { className: "rd-status-item", children: t('status.snapOn') }), _jsxs("div", { className: "rd-status-item", children: [Math.round(zoom * 100), "%"] })] }));
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=DesignerStatusBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignerStatusBar.js","sourceRoot":"","sources":["../../../src/components/shell/DesignerStatusBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportTree.d.ts","sourceRoot":"","sources":["../../../src/components/tree/ReportTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAoB9B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Tree } from 'antd';
|
|
3
|
+
import { useDesignerStore } from '../../store/designer-store';
|
|
4
|
+
export const ReportTree = () => {
|
|
5
|
+
const template = useDesignerStore(s => s.template);
|
|
6
|
+
const selectBand = useDesignerStore(s => s.selectBand);
|
|
7
|
+
const treeData = template.pages.map(page => ({
|
|
8
|
+
key: page.id,
|
|
9
|
+
title: page.id,
|
|
10
|
+
children: page.bands.map(band => ({
|
|
11
|
+
key: band.id,
|
|
12
|
+
title: `${band.type}${band.dataBand?.dataSourceId ?? band.dataSource ? ` (${band.dataBand?.dataSourceId ?? band.dataSource})` : ''}`,
|
|
13
|
+
})),
|
|
14
|
+
}));
|
|
15
|
+
return (_jsx(Tree, { treeData: treeData, defaultExpandAll: true, onSelect: (keys) => selectBand(String(keys[0] ?? '') || null) }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=ReportTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportTree.js","sourceRoot":"","sources":["../../../src/components/tree/ReportTree.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,CAAC,MAAM,UAAU,GAAa,GAAG,EAAE;IACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAe,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,GAAG,EAAE,IAAI,CAAC,EAAE;QACZ,KAAK,EAAE,IAAI,CAAC,EAAE;QACd,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,GAAG,EAAE,IAAI,CAAC,EAAE;YACZ,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;SACrI,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IAEJ,OAAO,CACL,KAAC,IAAI,IACH,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,QAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,GAC7D,CACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DataField, DataSource } from '@report-designer/core';
|
|
2
|
+
export interface FieldPathTreeNode {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
path: string;
|
|
6
|
+
searchText: string;
|
|
7
|
+
sourceId: string;
|
|
8
|
+
field?: DataField;
|
|
9
|
+
children?: FieldPathTreeNode[];
|
|
10
|
+
}
|
|
11
|
+
export declare function formatDataFieldExpression(sourceId: string, fieldName: string): string;
|
|
12
|
+
export declare function formatDataFieldLabel(sourceId: string, fieldName: string): string;
|
|
13
|
+
export declare function buildFieldPathTree(source: DataSource): FieldPathTreeNode[];
|
|
14
|
+
//# sourceMappingURL=data-source-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-fields.d.ts","sourceRoot":"","sources":["../src/data-source-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAgD1E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function formatDataFieldExpression(sourceId, fieldName) {
|
|
2
|
+
return `{${fieldName}}`;
|
|
3
|
+
}
|
|
4
|
+
export function formatDataFieldLabel(sourceId, fieldName) {
|
|
5
|
+
return sourceId === 'root' ? fieldName : `${sourceId}.${fieldName}`;
|
|
6
|
+
}
|
|
7
|
+
export function buildFieldPathTree(source) {
|
|
8
|
+
const roots = [];
|
|
9
|
+
const rootBySegment = new Map();
|
|
10
|
+
for (const field of source.schema ?? source.fields ?? []) {
|
|
11
|
+
const segments = field.name.split('.').filter(Boolean);
|
|
12
|
+
if (segments.length === 0) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
let siblings = roots;
|
|
16
|
+
let siblingMap = rootBySegment;
|
|
17
|
+
let currentPath = '';
|
|
18
|
+
segments.forEach((segment, index) => {
|
|
19
|
+
currentPath = currentPath ? `${currentPath}.${segment}` : segment;
|
|
20
|
+
const isLeaf = index === segments.length - 1;
|
|
21
|
+
const key = `${source.id}.${currentPath}`;
|
|
22
|
+
let node = siblingMap.get(segment);
|
|
23
|
+
if (!node) {
|
|
24
|
+
node = {
|
|
25
|
+
key,
|
|
26
|
+
label: isLeaf ? field.label || segment : segment,
|
|
27
|
+
path: currentPath,
|
|
28
|
+
sourceId: source.id,
|
|
29
|
+
searchText: `${source.id} ${source.name ?? ''} ${currentPath} ${field.label ?? ''} ${field.type ?? ''}`.toLowerCase(),
|
|
30
|
+
children: isLeaf ? undefined : [],
|
|
31
|
+
};
|
|
32
|
+
siblings.push(node);
|
|
33
|
+
siblingMap.set(segment, node);
|
|
34
|
+
}
|
|
35
|
+
if (isLeaf) {
|
|
36
|
+
node.field = field;
|
|
37
|
+
node.label = field.label || segment;
|
|
38
|
+
node.searchText = `${source.id} ${source.name ?? ''} ${field.name} ${field.label ?? ''} ${field.type ?? ''}`.toLowerCase();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
node.children ??= [];
|
|
42
|
+
const map = new Map(node.children.map(child => [child.path.split('.').at(-1) ?? child.path, child]));
|
|
43
|
+
siblingMap = map;
|
|
44
|
+
siblings = node.children;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return roots;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data-source-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-fields.js","sourceRoot":"","sources":["../src/data-source-fields.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,SAAiB;IAC3E,OAAO,IAAI,SAAS,GAAG,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,SAAiB;IACtE,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE3D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,aAAa,CAAC;QAC/B,IAAI,WAAW,GAAG,EAAE,CAAC;QAErB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAClE,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC;YAC1C,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG;oBACL,GAAG;oBACH,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO;oBAChD,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,UAAU,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE;oBACrH,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;iBAClC,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC;gBACpC,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC3H,OAAO;YACT,CAAC;YAED,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACrG,UAAU,GAAG,GAAG,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DataField, DataSource } from '@report-designer/core';
|
|
2
|
+
export interface ArrayPathOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function getRootDataSource(dataSources: DataSource[]): DataSource | undefined;
|
|
7
|
+
export declare function getRootFields(dataSources: DataSource[]): DataField[];
|
|
8
|
+
export declare function getFieldsForPath(dataSources: DataSource[], arrayPath?: string): DataField[];
|
|
9
|
+
export declare function createArrayPathOptions(dataSources: DataSource[], rowsByPath?: Record<string, unknown[]>, existingPaths?: string[]): ArrayPathOption[];
|
|
10
|
+
//# sourceMappingURL=data-source-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-paths.d.ts","sourceRoot":"","sources":["../src/data-source-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,SAAS,CAEnF;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAGpE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB3F;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAM,EAC1C,aAAa,GAAE,MAAM,EAAO,GAC3B,eAAe,EAAE,CA0BnB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export function getRootDataSource(dataSources) {
|
|
2
|
+
return dataSources.find(source => source.id === 'root') ?? dataSources[0];
|
|
3
|
+
}
|
|
4
|
+
export function getRootFields(dataSources) {
|
|
5
|
+
const source = getRootDataSource(dataSources);
|
|
6
|
+
return source?.schema?.length ? source.schema : source?.fields ?? [];
|
|
7
|
+
}
|
|
8
|
+
export function getFieldsForPath(dataSources, arrayPath) {
|
|
9
|
+
const fields = getRootFields(dataSources);
|
|
10
|
+
const normalizedPath = normalizeArrayPath(arrayPath);
|
|
11
|
+
if (!normalizedPath || normalizedPath === 'root') {
|
|
12
|
+
return fields;
|
|
13
|
+
}
|
|
14
|
+
const directSource = dataSources.find(source => source.id === normalizedPath);
|
|
15
|
+
if (directSource?.fields?.length || directSource?.schema?.length) {
|
|
16
|
+
const directFields = directSource.schema?.length ? directSource.schema : directSource.fields ?? [];
|
|
17
|
+
if (directFields.some(field => !field.name.startsWith(`${normalizedPath}.`))) {
|
|
18
|
+
return directFields;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const prefix = `${normalizedPath}.`;
|
|
22
|
+
return fields
|
|
23
|
+
.filter(field => field.name.startsWith(prefix))
|
|
24
|
+
.map(field => ({
|
|
25
|
+
...field,
|
|
26
|
+
name: field.name.slice(prefix.length),
|
|
27
|
+
path: field.path?.startsWith(prefix) ? field.path.slice(prefix.length) : field.path,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
export function createArrayPathOptions(dataSources, rowsByPath = {}, existingPaths = []) {
|
|
31
|
+
const paths = new Set();
|
|
32
|
+
Object.keys(rowsByPath).forEach(path => {
|
|
33
|
+
if (path && path !== 'root') {
|
|
34
|
+
paths.add(path);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
existingPaths.forEach(path => {
|
|
38
|
+
if (path && path !== 'root') {
|
|
39
|
+
paths.add(path);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
for (const field of getRootFields(dataSources)) {
|
|
43
|
+
const segments = field.name.split('.').filter(Boolean);
|
|
44
|
+
for (let length = 1; length < segments.length; length += 1) {
|
|
45
|
+
const candidate = segments.slice(0, length).join('.');
|
|
46
|
+
if (length === 1 || Object.prototype.hasOwnProperty.call(rowsByPath, candidate)) {
|
|
47
|
+
paths.add(candidate);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return Array.from(paths)
|
|
52
|
+
.sort((left, right) => left.localeCompare(right))
|
|
53
|
+
.map(path => ({ value: path, label: path }));
|
|
54
|
+
}
|
|
55
|
+
function normalizeArrayPath(path) {
|
|
56
|
+
if (!path) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
return path.startsWith('root.') ? path.slice(5) : path;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data-source-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-paths.js","sourceRoot":"","sources":["../src/data-source-paths.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAAC,WAAyB;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAyB;IACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAyB,EAAE,SAAkB;IAC5E,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;IAC9E,IAAI,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACjE,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,CAAC;QACnG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7E,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,cAAc,GAAG,CAAC;IACpC,OAAO,MAAM;SACV,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC9C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,KAAK;QACR,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;KACpF,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,WAAyB,EACzB,aAAwC,EAAE,EAC1C,gBAA0B,EAAE;IAE5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrC,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3B,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;gBAChF,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAChD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EvalContext } from '@report-designer/core';
|
|
2
|
+
import type { DesignerLocale } from '../i18n/messages';
|
|
3
|
+
import { type ExpressionFunctionMeta } from './function-catalog';
|
|
4
|
+
export type ExpressionRuntimeFunction = (args: unknown[], ctx: EvalContext) => unknown;
|
|
5
|
+
export interface ExpressionSystemVariableMeta {
|
|
6
|
+
name: string;
|
|
7
|
+
insertText?: string;
|
|
8
|
+
description: Record<DesignerLocale, string>;
|
|
9
|
+
previewValue?: unknown | ((ctx: ExpressionVariablePreviewContext) => unknown);
|
|
10
|
+
}
|
|
11
|
+
export interface ExpressionVariablePreviewContext {
|
|
12
|
+
templateName: string;
|
|
13
|
+
rowIndex: number;
|
|
14
|
+
date: Date;
|
|
15
|
+
}
|
|
16
|
+
export interface ExpressionFormatMeta {
|
|
17
|
+
name: string;
|
|
18
|
+
insertText: string;
|
|
19
|
+
detail: Record<DesignerLocale, string>;
|
|
20
|
+
description: Record<DesignerLocale, string>;
|
|
21
|
+
}
|
|
22
|
+
export interface ExpressionCatalogExtensions {
|
|
23
|
+
functions?: Array<ExpressionFunctionMeta & {
|
|
24
|
+
evaluate?: ExpressionRuntimeFunction;
|
|
25
|
+
}>;
|
|
26
|
+
variables?: ExpressionSystemVariableMeta[];
|
|
27
|
+
formats?: ExpressionFormatMeta[];
|
|
28
|
+
}
|
|
29
|
+
export interface ResolvedExpressionCatalog {
|
|
30
|
+
functions: ExpressionFunctionMeta[];
|
|
31
|
+
variables: ExpressionSystemVariableMeta[];
|
|
32
|
+
formats: ExpressionFormatMeta[];
|
|
33
|
+
runtimeFunctions: Record<string, ExpressionRuntimeFunction>;
|
|
34
|
+
}
|
|
35
|
+
export declare const BUILTIN_SYSTEM_VARIABLES: ExpressionSystemVariableMeta[];
|
|
36
|
+
export declare const BUILTIN_FORMAT_PATTERNS: ExpressionFormatMeta[];
|
|
37
|
+
export declare function resolveExpressionCatalog(extensions?: ExpressionCatalogExtensions): ResolvedExpressionCatalog;
|
|
38
|
+
export declare function getExpressionVariableValues(catalog: ResolvedExpressionCatalog, context: ExpressionVariablePreviewContext): Record<string, unknown>;
|
|
39
|
+
//# sourceMappingURL=expression-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-catalog.d.ts","sourceRoot":"","sources":["../../src/expression/expression-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC;AAEvF,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,gCAAgC,KAAK,OAAO,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,KAAK,CAAC,sBAAsB,GAAG;QAAE,QAAQ,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,CAAC;IACrF,SAAS,CAAC,EAAE,4BAA4B,EAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,SAAS,EAAE,4BAA4B,EAAE,CAAC;IAC1C,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,wBAAwB,EAAE,4BAA4B,EAqClE,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EAYzD,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,UAAU,CAAC,EAAE,2BAA2B,GAAG,yBAAyB,CA+B5G;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE,gCAAgC,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB"}
|