5htp-core 0.6.0-72 → 0.6.0-75
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/client/components/DropDown.tsx +18 -2
- package/client/components/Rte/Editor.tsx +2 -1
- package/client/components/Rte/ToolbarPlugin/ElementFormat.tsx +1 -1
- package/client/components/Rte/ToolbarPlugin/index.tsx +235 -147
- package/client/components/Rte/index.tsx +2 -0
- package/client/services/router/index.tsx +7 -5
- package/package.json +2 -2
- package/server/services/router/http/index.ts +0 -2
- package/server/services/router/index.ts +3 -1
- package/types/icons.d.ts +1 -1
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
// Npm
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import { JSX, ComponentChild } from 'preact';
|
|
8
|
-
import {
|
|
9
|
-
import { Props as ButtonProps } from './Button';
|
|
8
|
+
import { Menu, MenuProps } from '@mantine/core';
|
|
9
|
+
import Button, { Props as ButtonProps } from './Button';
|
|
10
|
+
import Popover, { Props as PopoverProps } from './containers/Popover';
|
|
10
11
|
|
|
11
12
|
// Core libs
|
|
12
13
|
import { useMantineInput, InputBaseProps } from './utils';
|
|
@@ -26,6 +27,21 @@ export default ({
|
|
|
26
27
|
label, children,
|
|
27
28
|
menuProps = {}, size, icon, ...btnProps
|
|
28
29
|
}: Props) => {
|
|
30
|
+
return (
|
|
31
|
+
<Popover content={(
|
|
32
|
+
<div class="card bg white col menu">
|
|
33
|
+
{children}
|
|
34
|
+
</div>
|
|
35
|
+
)}>
|
|
36
|
+
<Button {...btnProps}
|
|
37
|
+
size={size}
|
|
38
|
+
suffix={<i src="angle-down" />}
|
|
39
|
+
>
|
|
40
|
+
{icon && <i src={icon} />}
|
|
41
|
+
{label}
|
|
42
|
+
</Button>
|
|
43
|
+
</Popover>
|
|
44
|
+
)
|
|
29
45
|
return (
|
|
30
46
|
<Menu {...menuProps} size={size}>
|
|
31
47
|
<Menu.Target>
|
|
@@ -111,6 +111,7 @@ export default ({ value, setValue, props }: {
|
|
|
111
111
|
let {
|
|
112
112
|
// Decoration
|
|
113
113
|
title,
|
|
114
|
+
toolbar,
|
|
114
115
|
// Actions
|
|
115
116
|
preview = true
|
|
116
117
|
} = props;
|
|
@@ -240,7 +241,7 @@ export default ({ value, setValue, props }: {
|
|
|
240
241
|
theme: ExampleTheme,
|
|
241
242
|
}}>
|
|
242
243
|
<div className="editor-container">
|
|
243
|
-
<ToolbarPlugin setIsLinkEditMode={setIsLinkEditMode} />
|
|
244
|
+
<ToolbarPlugin setIsLinkEditMode={setIsLinkEditMode} display={toolbar} />
|
|
244
245
|
<div className="editor-inner">
|
|
245
246
|
<RichTextPlugin
|
|
246
247
|
contentEditable={
|
|
@@ -92,7 +92,7 @@ export default function ElementFormatDropdown({
|
|
|
92
92
|
popover={{ tag: 'li' }}
|
|
93
93
|
>
|
|
94
94
|
{FormatOptions.map((option) => (
|
|
95
|
-
<Button icon={isRTL ? option.iconRTL : option.icon}
|
|
95
|
+
<Button size="s" icon={isRTL ? option.iconRTL : option.icon}
|
|
96
96
|
onClick={() => {
|
|
97
97
|
if (option.value === 'indent')
|
|
98
98
|
editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined);
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
1
|
+
/*----------------------------------
|
|
2
|
+
- DEPENDANCES
|
|
3
|
+
----------------------------------*/
|
|
8
4
|
|
|
9
5
|
// Core
|
|
10
6
|
import Button from '@client/components/Button';
|
|
@@ -49,6 +45,7 @@ import {
|
|
|
49
45
|
} from '@lexical/utils';
|
|
50
46
|
import {
|
|
51
47
|
$createParagraphNode,
|
|
48
|
+
$createTextNode,
|
|
52
49
|
$getNodeByKey,
|
|
53
50
|
$getRoot,
|
|
54
51
|
$getSelection,
|
|
@@ -94,6 +91,47 @@ import { INSERT_PAGE_BREAK } from '../plugins/PageBreakPlugin';
|
|
|
94
91
|
import { InsertPollDialog } from '../plugins/PollPlugin';
|
|
95
92
|
import { InsertTableDialog } from '../plugins/TablePlugin';
|
|
96
93
|
|
|
94
|
+
/*----------------------------------
|
|
95
|
+
- TYPES
|
|
96
|
+
----------------------------------*/
|
|
97
|
+
export type TToolbarDisplay = {
|
|
98
|
+
// Default to true
|
|
99
|
+
blocks?: boolean,
|
|
100
|
+
formatting?: boolean | {
|
|
101
|
+
bold?: boolean,
|
|
102
|
+
italic?: boolean,
|
|
103
|
+
underline?: boolean,
|
|
104
|
+
code?: boolean,
|
|
105
|
+
link?: boolean,
|
|
106
|
+
},
|
|
107
|
+
styles?: boolean | {
|
|
108
|
+
strikethrough?: boolean,
|
|
109
|
+
subscript?: boolean,
|
|
110
|
+
superscript?: boolean,
|
|
111
|
+
clear?: boolean,
|
|
112
|
+
},
|
|
113
|
+
insert?: boolean | {
|
|
114
|
+
horizontalRule?: boolean,
|
|
115
|
+
pageBreak?: boolean,
|
|
116
|
+
code?: boolean,
|
|
117
|
+
image?: boolean,
|
|
118
|
+
inlineImage?: boolean,
|
|
119
|
+
table?: boolean,
|
|
120
|
+
poll?: boolean,
|
|
121
|
+
columns?: boolean,
|
|
122
|
+
stickyNote?: boolean,
|
|
123
|
+
collapsibleContainer?: boolean,
|
|
124
|
+
},
|
|
125
|
+
alignment?: boolean,
|
|
126
|
+
custom?: (
|
|
127
|
+
editor: LexicalEditor,
|
|
128
|
+
getSelection: typeof $getSelection
|
|
129
|
+
) => React.JSX.Element,
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/*----------------------------------
|
|
133
|
+
- UTILS
|
|
134
|
+
----------------------------------*/
|
|
97
135
|
function getCodeLanguageOptions(): [string, string][] {
|
|
98
136
|
const options: [string, string][] = [];
|
|
99
137
|
|
|
@@ -116,16 +154,18 @@ function dropDownActiveClass(active: boolean) {
|
|
|
116
154
|
}
|
|
117
155
|
}
|
|
118
156
|
|
|
119
|
-
|
|
120
|
-
|
|
121
157
|
function Divider(): React.JSX.Element {
|
|
122
158
|
return <div className="divider" />;
|
|
123
159
|
}
|
|
124
160
|
|
|
161
|
+
/*----------------------------------
|
|
162
|
+
- COMPONENT
|
|
163
|
+
----------------------------------*/
|
|
125
164
|
export default function ToolbarPlugin({
|
|
126
|
-
setIsLinkEditMode,
|
|
165
|
+
setIsLinkEditMode, display
|
|
127
166
|
}: {
|
|
128
167
|
setIsLinkEditMode: Dispatch<boolean>;
|
|
168
|
+
display?: TToolbarDisplay
|
|
129
169
|
}): React.JSX.Element {
|
|
130
170
|
|
|
131
171
|
const { modal } = useContext();
|
|
@@ -497,7 +537,13 @@ export default function ToolbarPlugin({
|
|
|
497
537
|
|
|
498
538
|
<Divider /> */}
|
|
499
539
|
|
|
500
|
-
{
|
|
540
|
+
{display?.custom && display?.custom(editor, $getSelection)}
|
|
541
|
+
|
|
542
|
+
{(
|
|
543
|
+
blockTypeNames.includes(blockType)
|
|
544
|
+
&&
|
|
545
|
+
display?.blocks
|
|
546
|
+
) && activeEditor === editor && (
|
|
501
547
|
<>
|
|
502
548
|
<BlockFormatDropDown
|
|
503
549
|
disabled={!isEditable}
|
|
@@ -526,49 +572,48 @@ export default function ToolbarPlugin({
|
|
|
526
572
|
))}
|
|
527
573
|
</div>
|
|
528
574
|
</DropDown>
|
|
529
|
-
) : (
|
|
575
|
+
) : display?.formatting !== false && (
|
|
530
576
|
<>
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
}}
|
|
552
|
-
active={isUnderline}
|
|
553
|
-
title={IS_APPLE ? 'Underline (⌘U)' : 'Underline (Ctrl+U)'}
|
|
554
|
-
/>
|
|
577
|
+
{display?.formatting === true || display?.formatting?.bold !== false && (
|
|
578
|
+
<Button icon="bold" size="s"
|
|
579
|
+
disabled={!isEditable}
|
|
580
|
+
onClick={() => {
|
|
581
|
+
activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');
|
|
582
|
+
}}
|
|
583
|
+
active={isBold}
|
|
584
|
+
title={IS_APPLE ? 'Bold (⌘B)' : 'Bold (Ctrl+B)'}
|
|
585
|
+
/>
|
|
586
|
+
)}
|
|
587
|
+
{display?.formatting === true || display?.formatting?.italic !== false && (
|
|
588
|
+
<Button icon="italic" size="s"
|
|
589
|
+
disabled={!isEditable}
|
|
590
|
+
onClick={() => {
|
|
591
|
+
activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic');
|
|
592
|
+
}}
|
|
593
|
+
active={isItalic}
|
|
594
|
+
title={IS_APPLE ? 'Italic (⌘I)' : 'Italic (Ctrl+I)'}
|
|
595
|
+
/>
|
|
596
|
+
)}
|
|
555
597
|
|
|
556
|
-
{
|
|
557
|
-
<Button icon="
|
|
598
|
+
{display?.formatting === true || display?.formatting?.underline !== false && (
|
|
599
|
+
<Button icon="underline" size="s"
|
|
558
600
|
disabled={!isEditable}
|
|
559
601
|
onClick={() => {
|
|
560
|
-
activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, '
|
|
602
|
+
activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline');
|
|
561
603
|
}}
|
|
562
|
-
active={
|
|
563
|
-
title=
|
|
604
|
+
active={isUnderline}
|
|
605
|
+
title={IS_APPLE ? 'Underline (⌘U)' : 'Underline (Ctrl+U)'}
|
|
606
|
+
/>
|
|
607
|
+
)}
|
|
608
|
+
|
|
609
|
+
{display?.formatting === true || display?.formatting?.link !== false && (
|
|
610
|
+
<Button icon="link" size="s"
|
|
611
|
+
disabled={!isEditable}
|
|
612
|
+
onClick={insertLink}
|
|
613
|
+
active={isLink}
|
|
614
|
+
title="Insert link"
|
|
564
615
|
/>
|
|
565
616
|
)}
|
|
566
|
-
<Button icon="link" size="s"
|
|
567
|
-
disabled={!isEditable}
|
|
568
|
-
onClick={insertLink}
|
|
569
|
-
active={isLink}
|
|
570
|
-
title="Insert link"
|
|
571
|
-
/>
|
|
572
617
|
|
|
573
618
|
{/* <DropdownColorPicker
|
|
574
619
|
disabled={!isEditable}
|
|
@@ -589,52 +634,62 @@ export default function ToolbarPlugin({
|
|
|
589
634
|
title="bg color"
|
|
590
635
|
/> */}
|
|
591
636
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
<Button icon="strikethrough" size="s"
|
|
598
|
-
onClick={() => {
|
|
599
|
-
activeEditor.dispatchCommand( FORMAT_TEXT_COMMAND, 'strikethrough');
|
|
600
|
-
}}
|
|
601
|
-
active={isStrikethrough}
|
|
602
|
-
title="Format text with a strikethrough"
|
|
637
|
+
{display?.styles !== false && (
|
|
638
|
+
<DropDown popover={{ tag: 'li' }} icon="font" size="s"
|
|
639
|
+
disabled={!isEditable}
|
|
640
|
+
hint="Formatting options for additional text styles"
|
|
603
641
|
>
|
|
604
|
-
Strikethrough
|
|
605
|
-
</Button>
|
|
606
642
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
643
|
+
{display?.styles === true || display?.styles?.strikethrough !== false && (
|
|
644
|
+
<Button icon="strikethrough" size="s"
|
|
645
|
+
onClick={() => {
|
|
646
|
+
activeEditor.dispatchCommand( FORMAT_TEXT_COMMAND, 'strikethrough');
|
|
647
|
+
}}
|
|
648
|
+
active={isStrikethrough}
|
|
649
|
+
title="Format text with a strikethrough"
|
|
650
|
+
>
|
|
651
|
+
Strikethrough
|
|
652
|
+
</Button>
|
|
653
|
+
)}
|
|
616
654
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
655
|
+
{display?.styles === true || display?.styles?.subscript !== false && (
|
|
656
|
+
<Button icon="subscript" size="s"
|
|
657
|
+
onClick={() => {
|
|
658
|
+
activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript');
|
|
659
|
+
}}
|
|
660
|
+
active={isSubscript}
|
|
661
|
+
title="Format text with a subscript"
|
|
662
|
+
>
|
|
663
|
+
Subscript
|
|
664
|
+
</Button>
|
|
665
|
+
)}
|
|
628
666
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
667
|
+
{display?.styles === true || display?.styles?.superscript !== false && (
|
|
668
|
+
<Button icon="superscript" size="s"
|
|
669
|
+
onClick={() => {
|
|
670
|
+
activeEditor.dispatchCommand(
|
|
671
|
+
FORMAT_TEXT_COMMAND,
|
|
672
|
+
'superscript',
|
|
673
|
+
);
|
|
674
|
+
}}
|
|
675
|
+
active={isSuperscript}
|
|
676
|
+
title="Format text with a superscript">
|
|
677
|
+
Superscript
|
|
678
|
+
</Button>
|
|
679
|
+
)}
|
|
634
680
|
|
|
635
|
-
|
|
681
|
+
{display?.styles === true || display?.styles?.clear !== false && (
|
|
682
|
+
<Button icon="empty-set" size="s"
|
|
683
|
+
onClick={clearFormatting}
|
|
684
|
+
title="Clear all text formatting">
|
|
685
|
+
Clear Formatting
|
|
686
|
+
</Button>
|
|
687
|
+
)}
|
|
688
|
+
|
|
689
|
+
</DropDown>
|
|
690
|
+
)}
|
|
636
691
|
|
|
637
|
-
{canViewerSeeInsertDropdown && (
|
|
692
|
+
{(canViewerSeeInsertDropdown && display?.insert !== false) && (
|
|
638
693
|
<>
|
|
639
694
|
<Divider />
|
|
640
695
|
<DropDown popover={{ tag: 'li' }}
|
|
@@ -644,29 +699,48 @@ export default function ToolbarPlugin({
|
|
|
644
699
|
hint="Insert specialized editor node"
|
|
645
700
|
>
|
|
646
701
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
702
|
+
{display?.insert === true || display?.insert?.horizontalRule !== false && (
|
|
703
|
+
<Button icon="horizontal-rule" size="s" onClick={() => {
|
|
704
|
+
activeEditor.dispatchCommand( INSERT_HORIZONTAL_RULE_COMMAND, undefined, );
|
|
705
|
+
}}>
|
|
706
|
+
Horizontal Rule
|
|
707
|
+
</Button>
|
|
708
|
+
)}
|
|
652
709
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
710
|
+
{display?.insert === true || display?.insert?.pageBreak !== false && (
|
|
711
|
+
<Button icon="page-break" size="s" onClick={() => {
|
|
712
|
+
activeEditor.dispatchCommand(INSERT_PAGE_BREAK, undefined);
|
|
713
|
+
}}>
|
|
714
|
+
Page Break
|
|
715
|
+
</Button>
|
|
716
|
+
)}
|
|
658
717
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
718
|
+
{(canViewerSeeInsertCodeButton && (display?.insert === true || display?.insert?.code !== false)) && (
|
|
719
|
+
<Button icon="code" size="s"
|
|
720
|
+
disabled={!isEditable}
|
|
721
|
+
onClick={() => {
|
|
722
|
+
activeEditor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code');
|
|
723
|
+
}}
|
|
724
|
+
active={isCode}
|
|
725
|
+
title="Insert code block"
|
|
726
|
+
/>
|
|
727
|
+
)}
|
|
728
|
+
|
|
729
|
+
{display?.insert === true || display?.insert?.image !== false && (
|
|
730
|
+
<Button icon="image" size="s" onClick={() => {
|
|
731
|
+
modal.show('Insert Image', InsertImageDialog, { editor: activeEditor });
|
|
732
|
+
}}>
|
|
733
|
+
Image
|
|
734
|
+
</Button>
|
|
735
|
+
)}
|
|
664
736
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
737
|
+
{display?.insert === true || display?.insert?.inlineImage !== false && (
|
|
738
|
+
<Button icon="image" size="s" onClick={() => {
|
|
739
|
+
modal.show('Insert Inline Image', InsertInlineImageDialog, { editor: activeEditor });
|
|
740
|
+
}}>
|
|
741
|
+
Inline Image
|
|
742
|
+
</Button>
|
|
743
|
+
)}
|
|
670
744
|
|
|
671
745
|
{/* <Button
|
|
672
746
|
onClick={() => {
|
|
@@ -680,24 +754,30 @@ export default function ToolbarPlugin({
|
|
|
680
754
|
<span className="text">Excalidraw</span>
|
|
681
755
|
</Button> */}
|
|
682
756
|
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
modal.show('Insert Poll', InsertPollDialog, { editor: activeEditor });
|
|
691
|
-
}}>
|
|
692
|
-
Poll
|
|
693
|
-
</Button>
|
|
757
|
+
{display?.insert === true || display?.insert?.table !== false && (
|
|
758
|
+
<Button icon="table" size="s" onClick={() => {
|
|
759
|
+
modal.show('Insert Table', InsertTableDialog, { editor: activeEditor });
|
|
760
|
+
}}>
|
|
761
|
+
Table
|
|
762
|
+
</Button>
|
|
763
|
+
)}
|
|
694
764
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
765
|
+
{display?.insert === true || display?.insert?.poll !== false && (
|
|
766
|
+
<Button icon="poll" size="s" onClick={() => {
|
|
767
|
+
modal.show('Insert Poll', InsertPollDialog, { editor: activeEditor });
|
|
768
|
+
}}>
|
|
769
|
+
Poll
|
|
770
|
+
</Button>
|
|
771
|
+
)}
|
|
700
772
|
|
|
773
|
+
{display?.insert === true || display?.insert?.columns !== false && (
|
|
774
|
+
<Button icon="columns" size="s" onClick={() => {
|
|
775
|
+
modal.show('Insert Columns Layout', InsertLayoutDialog, { editor: activeEditor });
|
|
776
|
+
}} >
|
|
777
|
+
Columns Layout
|
|
778
|
+
</Button>
|
|
779
|
+
)}
|
|
780
|
+
|
|
701
781
|
{/* <Button
|
|
702
782
|
onClick={() => {
|
|
703
783
|
modal.show('Insert Equation', (onClose) => (
|
|
@@ -712,24 +792,28 @@ export default function ToolbarPlugin({
|
|
|
712
792
|
<span className="text">Equation</span>
|
|
713
793
|
</Button> */}
|
|
714
794
|
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
795
|
+
{display?.insert === true || display?.insert?.stickyNote !== false && (
|
|
796
|
+
<Button icon="sticky-note" size="s" onClick={() => {
|
|
797
|
+
editor.update(() => {
|
|
798
|
+
const root = $getRoot();
|
|
799
|
+
const stickyNode = $createStickyNode(0, 0);
|
|
800
|
+
root.append(stickyNode);
|
|
801
|
+
});
|
|
802
|
+
}}>
|
|
803
|
+
Sticky Note
|
|
804
|
+
</Button>
|
|
805
|
+
)}
|
|
724
806
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
807
|
+
{display?.insert === true || display?.insert?.collapsibleContainer !== false && (
|
|
808
|
+
<Button icon="caret-right" size="s" onClick={() => {
|
|
809
|
+
editor.dispatchCommand(
|
|
810
|
+
INSERT_COLLAPSIBLE_COMMAND,
|
|
811
|
+
undefined,
|
|
812
|
+
);
|
|
813
|
+
}}>
|
|
814
|
+
Collapsible container
|
|
815
|
+
</Button>
|
|
816
|
+
)}
|
|
733
817
|
|
|
734
818
|
{/*EmbedConfigs.map((embedConfig) => (
|
|
735
819
|
<Button
|
|
@@ -749,13 +833,17 @@ export default function ToolbarPlugin({
|
|
|
749
833
|
)}
|
|
750
834
|
</>
|
|
751
835
|
)}
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
836
|
+
|
|
837
|
+
{display?.alignment !== false && <>
|
|
838
|
+
<Divider />
|
|
839
|
+
<ElementFormatDropdown
|
|
840
|
+
disabled={!isEditable}
|
|
841
|
+
value={elementFormat}
|
|
842
|
+
editor={activeEditor}
|
|
843
|
+
isRTL={isRTL}
|
|
844
|
+
/>
|
|
845
|
+
</>}
|
|
846
|
+
|
|
759
847
|
</div>
|
|
760
848
|
);
|
|
761
849
|
}
|
|
@@ -7,6 +7,7 @@ import React from 'react';
|
|
|
7
7
|
|
|
8
8
|
// Core libs
|
|
9
9
|
import { useInput, InputBaseProps, InputWrapper } from '../utils';
|
|
10
|
+
import type { TToolbarDisplay } from './ToolbarPlugin';
|
|
10
11
|
|
|
11
12
|
// Special componets
|
|
12
13
|
import type TEditor from './Editor';
|
|
@@ -19,6 +20,7 @@ import './style.less';
|
|
|
19
20
|
export type Props = {
|
|
20
21
|
preview?: boolean,
|
|
21
22
|
title: string,
|
|
23
|
+
toolbar?: TToolbarDisplay
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
/*----------------------------------
|
|
@@ -168,7 +168,7 @@ export default class ClientRouter<
|
|
|
168
168
|
|
|
169
169
|
// Error code
|
|
170
170
|
if (typeof url === 'number') {
|
|
171
|
-
this.createResponse( this.errors[url], this.context.request ).then(( page ) => {
|
|
171
|
+
this.createResponse( this.errors[url], this.context.request, data ).then(( page ) => {
|
|
172
172
|
this.navigate(page, data);
|
|
173
173
|
})
|
|
174
174
|
return;
|
|
@@ -335,10 +335,10 @@ export default class ClientRouter<
|
|
|
335
335
|
|
|
336
336
|
};
|
|
337
337
|
|
|
338
|
-
console.log("404 error page not found.", this.errors, this.routes);
|
|
339
|
-
|
|
340
338
|
const notFoundRoute = this.errors[404];
|
|
341
|
-
return await this.createResponse(notFoundRoute, request
|
|
339
|
+
return await this.createResponse(notFoundRoute, request, {
|
|
340
|
+
error: new Error("Page not found")
|
|
341
|
+
});
|
|
342
342
|
}
|
|
343
343
|
|
|
344
344
|
private async load(route: TUnresolvedNormalRoute): Promise<TRoute>;
|
|
@@ -504,7 +504,9 @@ export default class ClientRouter<
|
|
|
504
504
|
// Listener remover
|
|
505
505
|
return () => {
|
|
506
506
|
debug && console.info(LogPrefix, `De-register hook ${hookName} (index ${cbIndex})`);
|
|
507
|
-
|
|
507
|
+
this.hooks[hookName] = this.hooks[hookName]?.filter(
|
|
508
|
+
(_, index) => index !== cbIndex
|
|
509
|
+
);
|
|
508
510
|
}
|
|
509
511
|
|
|
510
512
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "5htp-core",
|
|
3
3
|
"description": "Convenient TypeScript framework designed for Performance and Productivity.",
|
|
4
|
-
"version": "0.6.0-
|
|
4
|
+
"version": "0.6.0-75",
|
|
5
5
|
"author": "Gaetan Le Gac (https://github.com/gaetanlegac)",
|
|
6
6
|
"repository": "git://github.com/gaetanlegac/5htp-core.git",
|
|
7
7
|
"license": "MIT",
|
|
@@ -63,7 +63,6 @@
|
|
|
63
63
|
"md5": "^2.3.0",
|
|
64
64
|
"mime-types": "^2.1.35",
|
|
65
65
|
"module-alias": "^2.2.2",
|
|
66
|
-
"morgan": "^1.10.0",
|
|
67
66
|
"mysql2": "^2.3.0",
|
|
68
67
|
"object-sizeof": "^1.6.3",
|
|
69
68
|
"path-to-regexp": "^6.2.0",
|
|
@@ -73,6 +72,7 @@
|
|
|
73
72
|
"prettier": "^3.3.3",
|
|
74
73
|
"react-scrollbars-custom": "^4.0.27",
|
|
75
74
|
"react-slider": "^2.0.1",
|
|
75
|
+
"react-textarea-autosize": "^8.5.9",
|
|
76
76
|
"regenerator-runtime": "^0.13.9",
|
|
77
77
|
"request": "^2.88.2",
|
|
78
78
|
"slugify": "^1.6.6",
|
|
@@ -468,7 +468,9 @@ export default class ServerRouter
|
|
|
468
468
|
|
|
469
469
|
public async resolve(request: ServerRequest<this>): Promise<ServerResponse<this>> {
|
|
470
470
|
|
|
471
|
-
const logId = LogPrefix + ' ' + (request.isVirtual ? ' ---- ' : '')
|
|
471
|
+
const logId = LogPrefix + ' ' + (request.isVirtual ? ' ---- ' : '')
|
|
472
|
+
+ request.ip + ' ' + request.user?.email + ' '
|
|
473
|
+
+ request.method + ' ' + /*request.domain + ' ' +*/ request.path;
|
|
472
474
|
console.info(logId);
|
|
473
475
|
const timeStart = Date.now();
|
|
474
476
|
|
package/types/icons.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type TIcones = "long-arrow-right"|"times"|"solid/spinner-third"|"sack-dollar"|"bell"|"bullseye"|"project-diagram"|"user-friends"|"eye"|"lock"|"comments"|"phone"|"chalkboard-teacher"|"rocket"|"chart-bar"|"
|
|
1
|
+
export type TIcones = "long-arrow-right"|"times"|"solid/spinner-third"|"sack-dollar"|"bell"|"bullseye"|"project-diagram"|"user-friends"|"eye"|"lock"|"comments"|"phone"|"chalkboard-teacher"|"rocket"|"chart-bar"|"user-circle"|"arrow-right"|"crosshairs"|"at"|"calendar-alt"|"paper-plane"|"plus-circle"|"comments-alt"|"user-shield"|"shield-alt"|"chart-line"|"money-bill-wave"|"star"|"link"|"file-alt"|"long-arrow-left"|"user-plus"|"mouse-pointer"|"thumbs-up"|"dollar-sign"|"key"|"user"|"magnet"|"clock"|"cog"|"trash"|"ellipsis-h"|"plus"|"binoculars"|"brands/linkedin"|"search"|"lightbulb"|"times-circle"|"solid/crown"|"brands/discord"|"pen"|"file"|"envelope"|"angle-up"|"angle-down"|"coins"|"angle-right"|"download"|"check"|"info-circle"|"check-circle"|"exclamation-circle"|"meh-rolling-eyes"|"arrow-left"|"solid/star"|"solid/star-half-alt"|"regular/star"|"chevron-left"|"power-off"|"bars"|"plane-departure"|"brands/whatsapp"|"wind"|"users"|"bug"|"question-circle"|"external-link"|"play"|"minus-circle"|"broom"|"exclamation-triangle"|"solid/check-circle"|"solid/exclamation-triangle"|"solid/times-circle"|"minus"|"comment-alt"|"arrow-to-bottom"|"map-marker-alt"|"briefcase"|"map-marker"|"fire"|"solid/magic"|"magic"|"globe"|"industry"|"calendar"|"building"|"graduation-cap"|"coin"|"bold"|"italic"|"underline"|"strikethrough"|"subscript"|"superscript"|"code"|"unlink"|"font"|"empty-set"|"horizontal-rule"|"page-break"|"image"|"table"|"poll"|"columns"|"sticky-note"|"caret-right"|"align-left"|"align-center"|"align-right"|"align-justify"|"indent"|"outdent"|"list-ul"|"check-square"|"h1"|"h2"|"h3"|"h4"|"list-ol"|"paragraph"|"quote-left"
|