react-native-enriched-markdown-scaffold 1.0.2-scaffold.1 → 1.0.2-scaffold.2
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/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +14 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +4 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +30 -13
- package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockMenuOptions.kt +45 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/CodeBlockContainerView.kt +11 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +4 -4
- package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +4 -4
- package/docs/API_REFERENCE.md +12 -4
- package/docs/COPY_OPTIONS.md +26 -0
- package/ios/EnrichedMarkdown.mm +22 -8
- package/ios/EnrichedMarkdownText.mm +4 -5
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +48 -0
- package/ios/utils/ENRMBlockMenu.h +57 -0
- package/ios/utils/EditMenuUtils.h +22 -5
- package/ios/utils/EditMenuUtils.m +36 -13
- package/ios/views/ENRMCodeBlockContainerView.h +9 -2
- package/ios/views/ENRMCodeBlockContainerView.m +12 -19
- package/ios/views/ENRMMathContainerView.h +4 -0
- package/ios/views/ENRMMathContainerView.m +4 -19
- package/ios/views/TableContainerView.h +4 -0
- package/ios/views/TableContainerView.m +6 -20
- package/lib/module/EnrichedMarkdownNativeComponent.ts +8 -0
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +8 -0
- package/lib/module/native/EnrichedMarkdownText.js +7 -1
- package/lib/module/native/EnrichedMarkdownText.js.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +4 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +4 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownTextProps.d.ts +40 -9
- package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/EnrichedMarkdownNativeComponent.ts +8 -0
- package/src/EnrichedMarkdownTextNativeComponent.ts +8 -0
- package/src/native/EnrichedMarkdownText.tsx +13 -0
- package/src/types/MarkdownTextProps.ts +37 -10
|
@@ -2462,6 +2462,10 @@ struct EnrichedMarkdownSelectionMenuConfigStruct {
|
|
|
2462
2462
|
std::string copyImageUrlLabel{};
|
|
2463
2463
|
std::string copyImageUrlsLabel{};
|
|
2464
2464
|
std::vector<std::string> copyImageUrlPluralTemplates{};
|
|
2465
|
+
bool copyEnabled{false};
|
|
2466
|
+
bool copyFormatMarkdown{false};
|
|
2467
|
+
bool systemItemsNone{false};
|
|
2468
|
+
bool codeBlockCopyButton{false};
|
|
2465
2469
|
|
|
2466
2470
|
|
|
2467
2471
|
#ifdef RN_SERIALIZABLE_STATE
|
|
@@ -2476,6 +2480,10 @@ struct EnrichedMarkdownSelectionMenuConfigStruct {
|
|
|
2476
2480
|
result["copyImageUrlLabel"] = copyImageUrlLabel;
|
|
2477
2481
|
result["copyImageUrlsLabel"] = copyImageUrlsLabel;
|
|
2478
2482
|
result["copyImageUrlPluralTemplates"] = ::facebook::react::toDynamic(copyImageUrlPluralTemplates);
|
|
2483
|
+
result["copyEnabled"] = copyEnabled;
|
|
2484
|
+
result["copyFormatMarkdown"] = copyFormatMarkdown;
|
|
2485
|
+
result["systemItemsNone"] = systemItemsNone;
|
|
2486
|
+
result["codeBlockCopyButton"] = codeBlockCopyButton;
|
|
2479
2487
|
return result;
|
|
2480
2488
|
}
|
|
2481
2489
|
#endif
|
|
@@ -2512,6 +2520,22 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
|
|
|
2512
2520
|
if (tmp_copyImageUrlPluralTemplates != map.end()) {
|
|
2513
2521
|
fromRawValue(context, tmp_copyImageUrlPluralTemplates->second, result.copyImageUrlPluralTemplates);
|
|
2514
2522
|
}
|
|
2523
|
+
auto tmp_copyEnabled = map.find("copyEnabled");
|
|
2524
|
+
if (tmp_copyEnabled != map.end()) {
|
|
2525
|
+
fromRawValue(context, tmp_copyEnabled->second, result.copyEnabled);
|
|
2526
|
+
}
|
|
2527
|
+
auto tmp_copyFormatMarkdown = map.find("copyFormatMarkdown");
|
|
2528
|
+
if (tmp_copyFormatMarkdown != map.end()) {
|
|
2529
|
+
fromRawValue(context, tmp_copyFormatMarkdown->second, result.copyFormatMarkdown);
|
|
2530
|
+
}
|
|
2531
|
+
auto tmp_systemItemsNone = map.find("systemItemsNone");
|
|
2532
|
+
if (tmp_systemItemsNone != map.end()) {
|
|
2533
|
+
fromRawValue(context, tmp_systemItemsNone->second, result.systemItemsNone);
|
|
2534
|
+
}
|
|
2535
|
+
auto tmp_codeBlockCopyButton = map.find("codeBlockCopyButton");
|
|
2536
|
+
if (tmp_codeBlockCopyButton != map.end()) {
|
|
2537
|
+
fromRawValue(context, tmp_codeBlockCopyButton->second, result.codeBlockCopyButton);
|
|
2538
|
+
}
|
|
2515
2539
|
}
|
|
2516
2540
|
|
|
2517
2541
|
static inline std::string toString(const EnrichedMarkdownSelectionMenuConfigStruct &value) {
|
|
@@ -6415,6 +6439,10 @@ struct EnrichedMarkdownTextSelectionMenuConfigStruct {
|
|
|
6415
6439
|
std::string copyImageUrlLabel{};
|
|
6416
6440
|
std::string copyImageUrlsLabel{};
|
|
6417
6441
|
std::vector<std::string> copyImageUrlPluralTemplates{};
|
|
6442
|
+
bool copyEnabled{false};
|
|
6443
|
+
bool copyFormatMarkdown{false};
|
|
6444
|
+
bool systemItemsNone{false};
|
|
6445
|
+
bool codeBlockCopyButton{false};
|
|
6418
6446
|
|
|
6419
6447
|
|
|
6420
6448
|
#ifdef RN_SERIALIZABLE_STATE
|
|
@@ -6429,6 +6457,10 @@ struct EnrichedMarkdownTextSelectionMenuConfigStruct {
|
|
|
6429
6457
|
result["copyImageUrlLabel"] = copyImageUrlLabel;
|
|
6430
6458
|
result["copyImageUrlsLabel"] = copyImageUrlsLabel;
|
|
6431
6459
|
result["copyImageUrlPluralTemplates"] = ::facebook::react::toDynamic(copyImageUrlPluralTemplates);
|
|
6460
|
+
result["copyEnabled"] = copyEnabled;
|
|
6461
|
+
result["copyFormatMarkdown"] = copyFormatMarkdown;
|
|
6462
|
+
result["systemItemsNone"] = systemItemsNone;
|
|
6463
|
+
result["codeBlockCopyButton"] = codeBlockCopyButton;
|
|
6432
6464
|
return result;
|
|
6433
6465
|
}
|
|
6434
6466
|
#endif
|
|
@@ -6465,6 +6497,22 @@ static inline void fromRawValue(const PropsParserContext& context, const RawValu
|
|
|
6465
6497
|
if (tmp_copyImageUrlPluralTemplates != map.end()) {
|
|
6466
6498
|
fromRawValue(context, tmp_copyImageUrlPluralTemplates->second, result.copyImageUrlPluralTemplates);
|
|
6467
6499
|
}
|
|
6500
|
+
auto tmp_copyEnabled = map.find("copyEnabled");
|
|
6501
|
+
if (tmp_copyEnabled != map.end()) {
|
|
6502
|
+
fromRawValue(context, tmp_copyEnabled->second, result.copyEnabled);
|
|
6503
|
+
}
|
|
6504
|
+
auto tmp_copyFormatMarkdown = map.find("copyFormatMarkdown");
|
|
6505
|
+
if (tmp_copyFormatMarkdown != map.end()) {
|
|
6506
|
+
fromRawValue(context, tmp_copyFormatMarkdown->second, result.copyFormatMarkdown);
|
|
6507
|
+
}
|
|
6508
|
+
auto tmp_systemItemsNone = map.find("systemItemsNone");
|
|
6509
|
+
if (tmp_systemItemsNone != map.end()) {
|
|
6510
|
+
fromRawValue(context, tmp_systemItemsNone->second, result.systemItemsNone);
|
|
6511
|
+
}
|
|
6512
|
+
auto tmp_codeBlockCopyButton = map.find("codeBlockCopyButton");
|
|
6513
|
+
if (tmp_codeBlockCopyButton != map.end()) {
|
|
6514
|
+
fromRawValue(context, tmp_codeBlockCopyButton->second, result.codeBlockCopyButton);
|
|
6515
|
+
}
|
|
6468
6516
|
}
|
|
6469
6517
|
|
|
6470
6518
|
static inline std::string toString(const EnrichedMarkdownTextSelectionMenuConfigStruct &value) {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
#include <TargetConditionals.h>
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
/// Selection-menu options that table, math and code block views need for their
|
|
8
|
+
/// own long-press menus. Every field is phrased so that the zero value keeps the
|
|
9
|
+
/// legacy behavior, so a block view that has not received options yet behaves
|
|
10
|
+
/// exactly as before.
|
|
11
|
+
typedef struct {
|
|
12
|
+
// `selectionMenuConfig.copy.enabled == false`.
|
|
13
|
+
BOOL copyHidden;
|
|
14
|
+
// `selectionMenuConfig.copy.format == 'markdown'`: the Copy item writes the
|
|
15
|
+
// block's Markdown instead of its raw content.
|
|
16
|
+
BOOL copyWritesMarkdown;
|
|
17
|
+
// `selectionMenuConfig.copyAsMarkdown.enabled == false`.
|
|
18
|
+
BOOL copyAsMarkdownHidden;
|
|
19
|
+
// `selectionMenuConfig.codeBlockCopyButton.enabled == false`.
|
|
20
|
+
BOOL copyButtonHidden;
|
|
21
|
+
} ENRMBlockMenuOptions;
|
|
22
|
+
|
|
23
|
+
#if !TARGET_OS_OSX
|
|
24
|
+
/// Builds the long-press menu shared by the table, math and code block views.
|
|
25
|
+
/// Returns nil when no item is left — nil is how UIKit suppresses a context
|
|
26
|
+
/// menu, whereas an empty menu would still lift the view.
|
|
27
|
+
static inline UIContextMenuConfiguration *_Nullable ENRMBlockContextMenuConfiguration(
|
|
28
|
+
ENRMBlockMenuOptions options, NSString *_Nullable copyLabel, NSString *_Nullable copyAsMarkdownLabel,
|
|
29
|
+
void (^copyRaw)(void), void (^copyMarkdown)(void))
|
|
30
|
+
{
|
|
31
|
+
if (options.copyHidden && options.copyAsMarkdownHidden) {
|
|
32
|
+
return nil;
|
|
33
|
+
}
|
|
34
|
+
void (^copyHandler)(void) = options.copyWritesMarkdown ? copyMarkdown : copyRaw;
|
|
35
|
+
return [UIContextMenuConfiguration
|
|
36
|
+
configurationWithIdentifier:nil
|
|
37
|
+
previewProvider:nil
|
|
38
|
+
actionProvider:^UIMenu *(NSArray<UIMenuElement *> *suggestedActions) {
|
|
39
|
+
NSMutableArray<UIMenuElement *> *children = [NSMutableArray arrayWithCapacity:2];
|
|
40
|
+
if (!options.copyHidden) {
|
|
41
|
+
[children addObject:[UIAction actionWithTitle:copyLabel ?: @""
|
|
42
|
+
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
43
|
+
identifier:nil
|
|
44
|
+
handler:^(__kindof UIAction *action) { copyHandler(); }]];
|
|
45
|
+
}
|
|
46
|
+
if (!options.copyAsMarkdownHidden) {
|
|
47
|
+
[children addObject:[UIAction actionWithTitle:copyAsMarkdownLabel ?: @""
|
|
48
|
+
image:[RCTUIImage systemImageNamed:@"doc.text"]
|
|
49
|
+
identifier:nil
|
|
50
|
+
handler:^(__kindof UIAction *action) { copyMarkdown(); }]];
|
|
51
|
+
}
|
|
52
|
+
return [UIMenu menuWithTitle:@"" children:children];
|
|
53
|
+
}];
|
|
54
|
+
}
|
|
55
|
+
#endif
|
|
56
|
+
|
|
57
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -9,6 +9,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
9
9
|
typedef struct {
|
|
10
10
|
BOOL copyAsMarkdown;
|
|
11
11
|
BOOL copyImageURL;
|
|
12
|
+
BOOL copyEnabled;
|
|
13
|
+
// Copy writes Markdown as plain text instead of rich text.
|
|
14
|
+
BOOL copyFormatMarkdown;
|
|
15
|
+
// Drop every system-provided item from the text selection menu.
|
|
16
|
+
BOOL systemItemsNone;
|
|
17
|
+
BOOL codeBlockCopyButton;
|
|
12
18
|
// The owner must keep these strings alive for the duration of the call (the
|
|
13
19
|
// view holds them in strong ivars).
|
|
14
20
|
__unsafe_unretained NSString *_Nullable copyLabel;
|
|
@@ -36,6 +42,13 @@ static inline NSString *ENRMResolveImageURLsTitle(ENRMSelectionMenuConfig config
|
|
|
36
42
|
return [titleTemplate stringByReplacingOccurrencesOfString:@"{count}" withString:[@(count) stringValue]];
|
|
37
43
|
}
|
|
38
44
|
|
|
45
|
+
/// Defaults matching the JS-side defaults, used until the first props update.
|
|
46
|
+
static inline ENRMSelectionMenuConfig ENRMDefaultSelectionMenuConfig(void)
|
|
47
|
+
{
|
|
48
|
+
return (ENRMSelectionMenuConfig){
|
|
49
|
+
.copyAsMarkdown = YES, .copyImageURL = YES, .copyEnabled = YES, .codeBlockCopyButton = YES};
|
|
50
|
+
}
|
|
51
|
+
|
|
39
52
|
#ifdef __cplusplus
|
|
40
53
|
|
|
41
54
|
/// Strong owners for the label strings in ENRMSelectionMenuConfig.
|
|
@@ -63,13 +76,17 @@ template <typename T> static inline ENRMSelectionMenuLabels ENRMParseSelectionMe
|
|
|
63
76
|
};
|
|
64
77
|
}
|
|
65
78
|
|
|
66
|
-
/// Builds an ENRMSelectionMenuConfig from pre-parsed labels and
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
/// Builds an ENRMSelectionMenuConfig from pre-parsed labels and the codegen struct's flags.
|
|
80
|
+
template <typename T>
|
|
81
|
+
static inline ENRMSelectionMenuConfig ENRMBuildSelectionMenuConfig(const ENRMSelectionMenuLabels &labels, const T &src)
|
|
69
82
|
{
|
|
70
83
|
return (ENRMSelectionMenuConfig){
|
|
71
|
-
.copyAsMarkdown = copyAsMarkdown,
|
|
72
|
-
.copyImageURL = copyImageUrl,
|
|
84
|
+
.copyAsMarkdown = src.copyAsMarkdown,
|
|
85
|
+
.copyImageURL = src.copyImageUrl,
|
|
86
|
+
.copyEnabled = src.copyEnabled,
|
|
87
|
+
.copyFormatMarkdown = src.copyFormatMarkdown,
|
|
88
|
+
.systemItemsNone = src.systemItemsNone,
|
|
89
|
+
.codeBlockCopyButton = src.codeBlockCopyButton,
|
|
73
90
|
.copyLabel = labels.copyLabel,
|
|
74
91
|
.copyAsMarkdownLabel = labels.copyAsMarkdownLabel,
|
|
75
92
|
.copyImageUrlLabel = labels.copyImageUrlLabel,
|
|
@@ -10,14 +10,24 @@ static NSString *const kActionIdentifierCopy = @"com.swmansion.enriched.markdown
|
|
|
10
10
|
static NSString *const kActionIdentifierCopyMarkdown = @"com.swmansion.enriched.markdown.copyMarkdown";
|
|
11
11
|
static NSString *const kActionIdentifierCopyImageURL = @"com.swmansion.enriched.markdown.copyImageURL";
|
|
12
12
|
|
|
13
|
-
static UIAction *createCopyAction(NSAttributedString *selectedText, NSString *markdown,
|
|
14
|
-
|
|
13
|
+
static UIAction *_Nullable createCopyAction(NSAttributedString *selectedText, NSString *markdown,
|
|
14
|
+
StyleConfig *styleConfig, ENRMSelectionMenuConfig selectionMenuConfig)
|
|
15
15
|
{
|
|
16
|
-
|
|
16
|
+
if (!selectionMenuConfig.copyEnabled)
|
|
17
|
+
return nil;
|
|
18
|
+
|
|
19
|
+
BOOL writesMarkdown = selectionMenuConfig.copyFormatMarkdown;
|
|
20
|
+
return [UIAction actionWithTitle:selectionMenuConfig.copyLabel
|
|
17
21
|
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
18
22
|
identifier:kActionIdentifierCopy
|
|
19
23
|
handler:^(__kindof UIAction *action) {
|
|
20
|
-
|
|
24
|
+
if (!writesMarkdown) {
|
|
25
|
+
copyAttributedStringToPasteboard(selectedText, markdown, styleConfig);
|
|
26
|
+
} else {
|
|
27
|
+
// Plain text only: with HTML/RTF alongside, rich-paste targets
|
|
28
|
+
// would take those and drop the Markdown.
|
|
29
|
+
copyStringToPasteboard(markdown.length > 0 ? markdown : selectedText.string);
|
|
30
|
+
}
|
|
21
31
|
}];
|
|
22
32
|
}
|
|
23
33
|
|
|
@@ -48,10 +58,11 @@ static UIAction *_Nullable createCopyImageURLAction(NSArray<NSString *> *imageUR
|
|
|
48
58
|
}
|
|
49
59
|
|
|
50
60
|
/// Rebuilds the standard-edit menu with the system Copy swapped for the enhanced
|
|
51
|
-
/// copy action
|
|
52
|
-
///
|
|
53
|
-
/// long-press menu of a
|
|
54
|
-
|
|
61
|
+
/// copy action, or dropped when `copyAction` is nil (Copy disabled). All other
|
|
62
|
+
/// system items are kept — dropping them would remove Select All, which on
|
|
63
|
+
/// iOS 16+ is the only way to start a selection from the long-press menu of a
|
|
64
|
+
/// non-editable text view.
|
|
65
|
+
static UIMenu *createEnhancedStandardEditMenu(UIMenu *originalMenu, UIAction *_Nullable copyAction)
|
|
55
66
|
{
|
|
56
67
|
NSMutableArray<UIMenuElement *> *children = [NSMutableArray arrayWithCapacity:originalMenu.children.count];
|
|
57
68
|
BOOL replacedCopy = NO;
|
|
@@ -59,14 +70,16 @@ static UIMenu *createEnhancedStandardEditMenu(UIMenu *originalMenu, UIAction *co
|
|
|
59
70
|
for (UIMenuElement *element in originalMenu.children) {
|
|
60
71
|
if (!replacedCopy && [element isKindOfClass:[UICommand class]] &&
|
|
61
72
|
((UICommand *)element).action == @selector(copy:)) {
|
|
62
|
-
|
|
73
|
+
if (copyAction) {
|
|
74
|
+
[children addObject:copyAction];
|
|
75
|
+
}
|
|
63
76
|
replacedCopy = YES;
|
|
64
77
|
continue;
|
|
65
78
|
}
|
|
66
79
|
[children addObject:element];
|
|
67
80
|
}
|
|
68
81
|
|
|
69
|
-
if (!replacedCopy) {
|
|
82
|
+
if (!replacedCopy && copyAction) {
|
|
70
83
|
[children insertObject:copyAction atIndex:0];
|
|
71
84
|
}
|
|
72
85
|
|
|
@@ -101,7 +114,7 @@ UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange ra
|
|
|
101
114
|
NSString *markdown = markdownForRange(attributedText, range, cachedMarkdown);
|
|
102
115
|
NSArray<NSString *> *imageURLs = imageURLsInRange(attributedText, range);
|
|
103
116
|
|
|
104
|
-
UIAction *copyAction = createCopyAction(selectedText, markdown, styleConfig, selectionMenuConfig
|
|
117
|
+
UIAction *copyAction = createCopyAction(selectedText, markdown, styleConfig, selectionMenuConfig);
|
|
105
118
|
UIAction *copyMarkdownAction = selectionMenuConfig.copyAsMarkdown
|
|
106
119
|
? createCopyMarkdownAction(markdown, selectionMenuConfig.copyAsMarkdownLabel)
|
|
107
120
|
: nil;
|
|
@@ -109,6 +122,16 @@ UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange ra
|
|
|
109
122
|
selectionMenuConfig.copyImageURL ? createCopyImageURLAction(imageURLs, selectionMenuConfig) : nil;
|
|
110
123
|
|
|
111
124
|
NSMutableArray<UIMenuElement *> *result = [NSMutableArray array];
|
|
125
|
+
|
|
126
|
+
if (selectionMenuConfig.systemItemsNone) {
|
|
127
|
+
// Skip suggestedActions entirely. An empty result still yields an (empty)
|
|
128
|
+
// menu: returning nil would make UIKit present its default menu.
|
|
129
|
+
addOptionalAction(result, copyAction);
|
|
130
|
+
addOptionalAction(result, copyMarkdownAction);
|
|
131
|
+
addOptionalAction(result, copyImageURLAction);
|
|
132
|
+
return [UIMenu menuWithChildren:[(customActions ?: @[]) arrayByAddingObjectsFromArray:result]];
|
|
133
|
+
}
|
|
134
|
+
|
|
112
135
|
BOOL foundStandardEditMenu = NO;
|
|
113
136
|
|
|
114
137
|
for (UIMenuElement *element in suggestedActions) {
|
|
@@ -128,8 +151,8 @@ UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange ra
|
|
|
128
151
|
}
|
|
129
152
|
|
|
130
153
|
if (!foundStandardEditMenu) {
|
|
131
|
-
|
|
132
|
-
insertOptionalAction(result,
|
|
154
|
+
insertOptionalAction(result, copyMarkdownAction, 0);
|
|
155
|
+
insertOptionalAction(result, copyAction, 0);
|
|
133
156
|
addOptionalAction(result, copyImageURLAction);
|
|
134
157
|
}
|
|
135
158
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
|
+
#import "ENRMBlockMenu.h"
|
|
2
3
|
#import "ENRMUIKit.h"
|
|
3
4
|
#import "StyleConfig.h"
|
|
4
5
|
|
|
@@ -33,12 +34,18 @@ typedef void (^ENRMCodeBlockCopyBlock)(NSString *code, NSString *language);
|
|
|
33
34
|
|
|
34
35
|
/// Suppresses the long-press copy menu on this block. Mirrors the
|
|
35
36
|
/// `contextMenuHidden` prop; the header copy button is a visible control, not a
|
|
36
|
-
/// context menu, and stays.
|
|
37
|
+
/// context menu, and stays (hide it with `menuOptions.copyButtonHidden`).
|
|
37
38
|
@property (nonatomic, assign) BOOL contextMenuHidden;
|
|
38
39
|
|
|
40
|
+
/// Copy / Copy as Markdown visibility, Copy format and the header copy button
|
|
41
|
+
/// from `selectionMenuConfig`. `copyHidden` also drops the VoiceOver copy action;
|
|
42
|
+
/// the header button and VoiceOver action always copy the raw code.
|
|
43
|
+
@property (nonatomic, assign) ENRMBlockMenuOptions menuOptions;
|
|
44
|
+
|
|
39
45
|
// Fired when the code is copied (header button, context-menu Copy, or the
|
|
40
46
|
// VoiceOver copy action); set by the host to bridge up to the JS onCopyPress
|
|
41
|
-
// event. Not fired for "Copy as Markdown"
|
|
47
|
+
// event. Not fired for "Copy as Markdown", nor for the context-menu Copy when
|
|
48
|
+
// `menuOptions.copyWritesMarkdown` is set.
|
|
42
49
|
@property (nonatomic, copy, nullable) ENRMCodeBlockCopyBlock onCopyPress;
|
|
43
50
|
|
|
44
51
|
@end
|
|
@@ -175,6 +175,13 @@ static BOOL ENRMColorIsDark(RCTUIColor *color)
|
|
|
175
175
|
_copyButton.accessibilityLabel = _copyLabel;
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
+
- (void)setMenuOptions:(ENRMBlockMenuOptions)menuOptions
|
|
179
|
+
{
|
|
180
|
+
_menuOptions = menuOptions;
|
|
181
|
+
// Hiding the button leaves the header (and its height) untouched.
|
|
182
|
+
_copyButton.hidden = menuOptions.copyButtonHidden;
|
|
183
|
+
}
|
|
184
|
+
|
|
178
185
|
- (void)setPending:(BOOL)pending
|
|
179
186
|
{
|
|
180
187
|
if (_pending == pending) {
|
|
@@ -490,24 +497,10 @@ static BOOL ENRMColorIsDark(RCTUIColor *color)
|
|
|
490
497
|
if (_pending || self.contextMenuHidden) {
|
|
491
498
|
return nil;
|
|
492
499
|
}
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
UIAction *copyCode =
|
|
498
|
-
[UIAction actionWithTitle:self.copyLabel
|
|
499
|
-
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
500
|
-
identifier:nil
|
|
501
|
-
handler:^(__kindof UIAction *action) { [self copyCodeToPasteboard]; }];
|
|
502
|
-
|
|
503
|
-
UIAction *copyMarkdown =
|
|
504
|
-
[UIAction actionWithTitle:self.copyAsMarkdownLabel
|
|
505
|
-
image:[RCTUIImage systemImageNamed:@"doc.text"]
|
|
506
|
-
identifier:nil
|
|
507
|
-
handler:^(__kindof UIAction *action) { [self copyMarkdownToPasteboard]; }];
|
|
508
|
-
|
|
509
|
-
return [UIMenu menuWithTitle:@"" children:@[ copyCode, copyMarkdown ]];
|
|
510
|
-
}];
|
|
500
|
+
__weak __typeof(self) weakSelf = self;
|
|
501
|
+
return ENRMBlockContextMenuConfiguration(
|
|
502
|
+
self.menuOptions, self.copyLabel, self.copyAsMarkdownLabel, ^{ [weakSelf copyCodeToPasteboard]; },
|
|
503
|
+
^{ [weakSelf copyMarkdownToPasteboard]; });
|
|
511
504
|
}
|
|
512
505
|
#endif
|
|
513
506
|
|
|
@@ -546,7 +539,7 @@ static BOOL ENRMColorIsDark(RCTUIColor *color)
|
|
|
546
539
|
// button subview from VoiceOver; expose the copy action explicitly instead.
|
|
547
540
|
- (NSArray<UIAccessibilityCustomAction *> *)accessibilityCustomActions
|
|
548
541
|
{
|
|
549
|
-
if (_pending || self.copyLabel.length == 0) {
|
|
542
|
+
if (_pending || self.menuOptions.copyHidden || self.copyLabel.length == 0) {
|
|
550
543
|
return @[];
|
|
551
544
|
}
|
|
552
545
|
UIAccessibilityCustomAction *copyAction =
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
|
+
#import "ENRMBlockMenu.h"
|
|
2
3
|
#import "ENRMUIKit.h"
|
|
3
4
|
#import "StyleConfig.h"
|
|
4
5
|
|
|
@@ -35,6 +36,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
35
36
|
/// `contextMenuHidden` prop; selection and link handling are unaffected.
|
|
36
37
|
@property (nonatomic, assign) BOOL contextMenuHidden;
|
|
37
38
|
|
|
39
|
+
/// Copy / Copy as Markdown visibility and Copy format from `selectionMenuConfig`.
|
|
40
|
+
@property (nonatomic, assign) ENRMBlockMenuOptions menuOptions;
|
|
41
|
+
|
|
38
42
|
@end
|
|
39
43
|
|
|
40
44
|
NS_ASSUME_NONNULL_END
|
|
@@ -130,25 +130,10 @@
|
|
|
130
130
|
if (self.contextMenuHidden) {
|
|
131
131
|
return nil;
|
|
132
132
|
}
|
|
133
|
-
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
actionProvider:^UIMenu *(NSArray<UIMenuElement *> *suggestedActions) {
|
|
138
|
-
UIAction *copyPlainText =
|
|
139
|
-
[UIAction actionWithTitle:self.copyLabel
|
|
140
|
-
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
141
|
-
identifier:nil
|
|
142
|
-
handler:^(__kindof UIAction *action) { [self copyLatexToPasteboard]; }];
|
|
143
|
-
|
|
144
|
-
UIAction *copyMarkdown =
|
|
145
|
-
[UIAction actionWithTitle:self.copyAsMarkdownLabel
|
|
146
|
-
image:[RCTUIImage systemImageNamed:@"doc.text"]
|
|
147
|
-
identifier:nil
|
|
148
|
-
handler:^(__kindof UIAction *action) { [self copyMarkdownToPasteboard]; }];
|
|
149
|
-
|
|
150
|
-
return [UIMenu menuWithTitle:@"" children:@[ copyPlainText, copyMarkdown ]];
|
|
151
|
-
}];
|
|
133
|
+
__weak __typeof(self) weakSelf = self;
|
|
134
|
+
return ENRMBlockContextMenuConfiguration(
|
|
135
|
+
self.menuOptions, self.copyLabel, self.copyAsMarkdownLabel, ^{ [weakSelf copyLatexToPasteboard]; },
|
|
136
|
+
^{ [weakSelf copyMarkdownToPasteboard]; });
|
|
152
137
|
}
|
|
153
138
|
#endif
|
|
154
139
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
|
+
#import "ENRMBlockMenu.h"
|
|
2
3
|
#import "ENRMUIKit.h"
|
|
3
4
|
#import "ParagraphStyleUtils.h"
|
|
4
5
|
#import "StyleConfig.h"
|
|
@@ -56,6 +57,9 @@ typedef void (^TableLinkPressBlock)(NSString *url);
|
|
|
56
57
|
/// `contextMenuHidden` prop; selection and link handling are unaffected.
|
|
57
58
|
@property (nonatomic, assign) BOOL contextMenuHidden;
|
|
58
59
|
|
|
60
|
+
/// Copy / Copy as Markdown visibility and Copy format from `selectionMenuConfig`.
|
|
61
|
+
@property (nonatomic, assign) ENRMBlockMenuOptions menuOptions;
|
|
62
|
+
|
|
59
63
|
@property (nonatomic, readonly) NSUInteger rowCount;
|
|
60
64
|
|
|
61
65
|
- (void)animateNewRowsFromPreviousCount:(NSUInteger)previousRowCount duration:(NSTimeInterval)duration;
|
|
@@ -264,7 +264,8 @@ static void ENRMTableComputeLayout(NSArray<NSArray<TableCellData *> *> *rows, NS
|
|
|
264
264
|
// a single drawRect: pass (no subview / layer compositing issues).
|
|
265
265
|
ENRMTableGridView *gridView = [[ENRMTableGridView alloc] initWithFrame:CGRectZero];
|
|
266
266
|
__weak TableContainerView *weakSelf = self;
|
|
267
|
-
gridView.menuProvider = ^NSMenu *
|
|
267
|
+
gridView.menuProvider = ^NSMenu *
|
|
268
|
+
{
|
|
268
269
|
TableContainerView *strongSelf = weakSelf;
|
|
269
270
|
if (!strongSelf)
|
|
270
271
|
return nil;
|
|
@@ -467,25 +468,10 @@ static void ENRMTableComputeLayout(NSArray<NSArray<TableCellData *> *> *rows, NS
|
|
|
467
468
|
if (self.contextMenuHidden) {
|
|
468
469
|
return nil;
|
|
469
470
|
}
|
|
470
|
-
|
|
471
|
-
return
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
actionProvider:^UIMenu *(NSArray<UIMenuElement *> *suggestedActions) {
|
|
475
|
-
UIAction *copyMarkdown =
|
|
476
|
-
[UIAction actionWithTitle:self.copyAsMarkdownLabel
|
|
477
|
-
image:[RCTUIImage systemImageNamed:@"doc.text"]
|
|
478
|
-
identifier:nil
|
|
479
|
-
handler:^(__kindof UIAction *action) { [self copyMarkdownToPasteboard]; }];
|
|
480
|
-
|
|
481
|
-
UIAction *copyPlainText =
|
|
482
|
-
[UIAction actionWithTitle:self.copyLabel
|
|
483
|
-
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
484
|
-
identifier:nil
|
|
485
|
-
handler:^(__kindof UIAction *action) { [self copyTableToPasteboard]; }];
|
|
486
|
-
|
|
487
|
-
return [UIMenu menuWithTitle:@"" children:@[ copyPlainText, copyMarkdown ]];
|
|
488
|
-
}];
|
|
471
|
+
__weak __typeof(self) weakSelf = self;
|
|
472
|
+
return ENRMBlockContextMenuConfiguration(
|
|
473
|
+
self.menuOptions, self.copyLabel, self.copyAsMarkdownLabel, ^{ [weakSelf copyTableToPasteboard]; },
|
|
474
|
+
^{ [weakSelf copyMarkdownToPasteboard]; });
|
|
489
475
|
}
|
|
490
476
|
#endif // !TARGET_OS_OSX
|
|
491
477
|
|
|
@@ -276,6 +276,14 @@ export interface SelectionMenuConfig {
|
|
|
276
276
|
// Precomputed plural templates indexed by image count (0..100). Empty when no
|
|
277
277
|
// pluralLabels are set; native then uses copyImageUrlLabel/copyImageUrlsLabel.
|
|
278
278
|
copyImageUrlPluralTemplates: ReadonlyArray<string>;
|
|
279
|
+
// false removes the Copy item from the text and block menus.
|
|
280
|
+
copyEnabled: boolean;
|
|
281
|
+
// true: Copy writes Markdown (plain text) instead of rich text / raw block content.
|
|
282
|
+
copyFormatMarkdown: boolean;
|
|
283
|
+
// true: the text selection menu drops every system-provided item.
|
|
284
|
+
systemItemsNone: boolean;
|
|
285
|
+
// false hides the copy button in the code block header.
|
|
286
|
+
codeBlockCopyButton: boolean;
|
|
279
287
|
}
|
|
280
288
|
|
|
281
289
|
export interface OnContextMenuItemPressEvent {
|
|
@@ -277,6 +277,14 @@ export interface SelectionMenuConfig {
|
|
|
277
277
|
// Precomputed plural templates indexed by image count (0..100). Empty when no
|
|
278
278
|
// pluralLabels are set; native then uses copyImageUrlLabel/copyImageUrlsLabel.
|
|
279
279
|
copyImageUrlPluralTemplates: ReadonlyArray<string>;
|
|
280
|
+
// false removes the Copy item from the text and block menus.
|
|
281
|
+
copyEnabled: boolean;
|
|
282
|
+
// true: Copy writes Markdown (plain text) instead of rich text / raw block content.
|
|
283
|
+
copyFormatMarkdown: boolean;
|
|
284
|
+
// true: the text selection menu drops every system-provided item.
|
|
285
|
+
systemItemsNone: boolean;
|
|
286
|
+
// false hides the copy button in the code block header.
|
|
287
|
+
codeBlockCopyButton: boolean;
|
|
280
288
|
}
|
|
281
289
|
|
|
282
290
|
export interface OnContextMenuItemPressEvent {
|
|
@@ -194,6 +194,8 @@ export const EnrichedMarkdownText = ({
|
|
|
194
194
|
// `as unknown` cast; the public type only exposes the object shape.
|
|
195
195
|
const config = selectionMenuConfig;
|
|
196
196
|
const copy = normalizeMenuItem(config?.copy, true, DEFAULT_COPY_LABEL);
|
|
197
|
+
const copyFormat = config?.copy?.format;
|
|
198
|
+
const codeBlockCopyButton = normalizeMenuItem(config?.codeBlockCopyButton, true, '');
|
|
197
199
|
const copyAsMarkdown = normalizeLegacyBooleanMenuItem(config?.copyAsMarkdown, 'selectionMenuConfig', 'copyAsMarkdown', true, DEFAULT_COPY_AS_MARKDOWN_LABEL);
|
|
198
200
|
const copyImageUrl = normalizeLegacyBooleanMenuItem(config?.copyImageUrl, 'selectionMenuConfig', 'copyImageUrl', true, DEFAULT_COPY_IMAGE_URL_LABEL);
|
|
199
201
|
const pluralLabels = config?.copyImageUrl?.pluralLabels;
|
|
@@ -204,7 +206,11 @@ export const EnrichedMarkdownText = ({
|
|
|
204
206
|
copyAsMarkdownLabel: copyAsMarkdown.label,
|
|
205
207
|
copyImageUrlLabel: copyImageUrl.label,
|
|
206
208
|
copyImageUrlsLabel: pluralLabels?.other ?? DEFAULT_COPY_IMAGE_URLS_LABEL,
|
|
207
|
-
copyImageUrlPluralTemplates: buildPluralTemplates(pluralLabels, copyImageUrl.label)
|
|
209
|
+
copyImageUrlPluralTemplates: buildPluralTemplates(pluralLabels, copyImageUrl.label),
|
|
210
|
+
copyEnabled: copy.enabled,
|
|
211
|
+
copyFormatMarkdown: copyFormat === 'markdown',
|
|
212
|
+
systemItemsNone: config?.systemItems === 'none',
|
|
213
|
+
codeBlockCopyButton: codeBlockCopyButton.enabled
|
|
208
214
|
};
|
|
209
215
|
}, [selectionMenuConfig]);
|
|
210
216
|
const resolvedAccessibilityLabels = useMemo(() => resolveAccessibilityLabels(accessibilityLabels), [accessibilityLabels]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useCallback","useRef","useEffect","EnrichedMarkdownTextNativeComponent","EnrichedMarkdownNativeComponent","normalizeMarkdownStyle","resolveAccessibilityLabels","normalizeMenuItem","normalizeLegacyBooleanMenuItem","jsx","_jsx","DEFAULT_COPY_LABEL","DEFAULT_COPY_AS_MARKDOWN_LABEL","DEFAULT_COPY_IMAGE_URL_LABEL","DEFAULT_COPY_IMAGE_URLS_LABEL","buildPluralTemplates","pluralLabels","singularLabel","IntlRef","Intl","PluralRules","pluralRules","other","byCategory","zero","one","two","few","many","templates","n","push","select","defaultMd4cFlags","underline","superscript","subscript","latexMath","highlight","hardSoftBreaks","EnrichedMarkdownText","markdown","markdownStyle","containerStyle","onLinkPress","onLinkLongPress","onTaskListItemPress","enableTaskListItemToggle","onCopyPress","enableLinkPreview","selectable","md4cFlags","allowFontScaling","maxFontSizeMultiplier","allowTrailingMargin","flavor","streamingAnimation","streamingConfig","spoilerOverlay","contextMenuItems","imageRequestHeaders","contextMenuHidden","selectionMenuConfig","accessibilityLabels","selectionColor","selectionHandleColor","textBreakStrategy","lineBreakStrategyIOS","writingDirection","rest","normalizedStyleRef","normalized","current","normalizedStyle","normalizedMd4cFlags","contextMenuCallbacksRef","Map","callbacksMap","item","set","text","onPress","nativeContextMenuItems","filter","visible","map","icon","nativeImageRequestHeaders","Object","entries","name","value","sort","a","b","undefined","handleContextMenuItemPress","e","itemText","selectedText","selectionStart","selectionEnd","nativeEvent","callback","get","selection","start","end","handleLinkPress","url","handleLinkLongPress","handleTaskListItemPress","index","checked","handleCopyPress","code","language","tableMode","codeBlockMode","normalizedStreamingConfig","normalizedSelectionMenuConfig","config","copy","copyAsMarkdown","copyImageUrl","enabled","copyLabel","label","copyAsMarkdownLabel","copyImageUrlLabel","copyImageUrlsLabel","copyImageUrlPluralTemplates","resolvedAccessibilityLabels","sharedProps","style","onContextMenuItemPress"],"sourceRoot":"../../../src","sources":["native/EnrichedMarkdownText.tsx"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["useMemo","useCallback","useRef","useEffect","EnrichedMarkdownTextNativeComponent","EnrichedMarkdownNativeComponent","normalizeMarkdownStyle","resolveAccessibilityLabels","normalizeMenuItem","normalizeLegacyBooleanMenuItem","jsx","_jsx","DEFAULT_COPY_LABEL","DEFAULT_COPY_AS_MARKDOWN_LABEL","DEFAULT_COPY_IMAGE_URL_LABEL","DEFAULT_COPY_IMAGE_URLS_LABEL","buildPluralTemplates","pluralLabels","singularLabel","IntlRef","Intl","PluralRules","pluralRules","other","byCategory","zero","one","two","few","many","templates","n","push","select","defaultMd4cFlags","underline","superscript","subscript","latexMath","highlight","hardSoftBreaks","EnrichedMarkdownText","markdown","markdownStyle","containerStyle","onLinkPress","onLinkLongPress","onTaskListItemPress","enableTaskListItemToggle","onCopyPress","enableLinkPreview","selectable","md4cFlags","allowFontScaling","maxFontSizeMultiplier","allowTrailingMargin","flavor","streamingAnimation","streamingConfig","spoilerOverlay","contextMenuItems","imageRequestHeaders","contextMenuHidden","selectionMenuConfig","accessibilityLabels","selectionColor","selectionHandleColor","textBreakStrategy","lineBreakStrategyIOS","writingDirection","rest","normalizedStyleRef","normalized","current","normalizedStyle","normalizedMd4cFlags","contextMenuCallbacksRef","Map","callbacksMap","item","set","text","onPress","nativeContextMenuItems","filter","visible","map","icon","nativeImageRequestHeaders","Object","entries","name","value","sort","a","b","undefined","handleContextMenuItemPress","e","itemText","selectedText","selectionStart","selectionEnd","nativeEvent","callback","get","selection","start","end","handleLinkPress","url","handleLinkLongPress","handleTaskListItemPress","index","checked","handleCopyPress","code","language","tableMode","codeBlockMode","normalizedStreamingConfig","normalizedSelectionMenuConfig","config","copy","copyFormat","format","codeBlockCopyButton","copyAsMarkdown","copyImageUrl","enabled","copyLabel","label","copyAsMarkdownLabel","copyImageUrlLabel","copyImageUrlsLabel","copyImageUrlPluralTemplates","copyEnabled","copyFormatMarkdown","systemItemsNone","systemItems","resolvedAccessibilityLabels","sharedProps","style","onContextMenuItemPress"],"sourceRoot":"../../../src","sources":["native/EnrichedMarkdownText.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -232,6 +232,10 @@ export interface SelectionMenuConfig {
|
|
|
232
232
|
copyImageUrlLabel: string;
|
|
233
233
|
copyImageUrlsLabel: string;
|
|
234
234
|
copyImageUrlPluralTemplates: ReadonlyArray<string>;
|
|
235
|
+
copyEnabled: boolean;
|
|
236
|
+
copyFormatMarkdown: boolean;
|
|
237
|
+
systemItemsNone: boolean;
|
|
238
|
+
codeBlockCopyButton: boolean;
|
|
235
239
|
}
|
|
236
240
|
export interface OnContextMenuItemPressEvent {
|
|
237
241
|
itemText: string;
|