@medway-ui/native 1.6.1 → 1.7.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/README.md +27 -2
- package/lib/commonjs/components/Alert.js +3 -1
- package/lib/commonjs/components/Alert.js.map +1 -1
- package/lib/commonjs/components/AlertDialog.js +5 -2
- package/lib/commonjs/components/AlertDialog.js.map +1 -1
- package/lib/commonjs/components/Badge.js +37 -2
- package/lib/commonjs/components/Badge.js.map +1 -1
- package/lib/commonjs/components/Button.js +32 -1
- package/lib/commonjs/components/Button.js.map +1 -1
- package/lib/commonjs/components/Carousel.js +12 -2
- package/lib/commonjs/components/Carousel.js.map +1 -1
- package/lib/commonjs/components/Checkbox.js +2 -0
- package/lib/commonjs/components/Checkbox.js.map +1 -1
- package/lib/commonjs/components/Chip.js +208 -0
- package/lib/commonjs/components/Chip.js.map +1 -0
- package/lib/commonjs/components/Choice.js +116 -0
- package/lib/commonjs/components/Choice.js.map +1 -0
- package/lib/commonjs/components/Dialog.js +27 -16
- package/lib/commonjs/components/Dialog.js.map +1 -1
- package/lib/commonjs/components/DropdownMenu.js +73 -57
- package/lib/commonjs/components/DropdownMenu.js.map +1 -1
- package/lib/commonjs/components/EmptyState.js +9 -2
- package/lib/commonjs/components/EmptyState.js.map +1 -1
- package/lib/commonjs/components/Feed.js +7 -3
- package/lib/commonjs/components/Feed.js.map +1 -1
- package/lib/commonjs/components/Feedback.js +77 -0
- package/lib/commonjs/components/Feedback.js.map +1 -0
- package/lib/commonjs/components/Filter.js +93 -0
- package/lib/commonjs/components/Filter.js.map +1 -0
- package/lib/commonjs/components/IndexLevel.js +4 -3
- package/lib/commonjs/components/IndexLevel.js.map +1 -1
- package/lib/commonjs/components/Input.js +149 -45
- package/lib/commonjs/components/Input.js.map +1 -1
- package/lib/commonjs/components/InvitePopover.js +4 -1
- package/lib/commonjs/components/InvitePopover.js.map +1 -1
- package/lib/commonjs/components/MemberRow.js +3 -4
- package/lib/commonjs/components/MemberRow.js.map +1 -1
- package/lib/commonjs/components/PostForm.js +18 -8
- package/lib/commonjs/components/PostForm.js.map +1 -1
- package/lib/commonjs/components/PrizeCollection.js +1 -1
- package/lib/commonjs/components/RadioGroup.js +7 -0
- package/lib/commonjs/components/RadioGroup.js.map +1 -1
- package/lib/commonjs/components/Select.js +1 -1
- package/lib/commonjs/components/Sheet.js +4 -1
- package/lib/commonjs/components/Sheet.js.map +1 -1
- package/lib/commonjs/components/Skeleton.js +55 -4
- package/lib/commonjs/components/Skeleton.js.map +1 -1
- package/lib/commonjs/components/Switch.js +2 -0
- package/lib/commonjs/components/Switch.js.map +1 -1
- package/lib/commonjs/components/Tabs.js +2 -0
- package/lib/commonjs/components/Tabs.js.map +1 -1
- package/lib/commonjs/components/Toast.js +355 -79
- package/lib/commonjs/components/Toast.js.map +1 -1
- package/lib/commonjs/editor/NoteEditor.js +36 -11
- package/lib/commonjs/editor/NoteEditor.js.map +1 -1
- package/lib/commonjs/editor/editorHtml.generated.js +1 -1
- package/lib/commonjs/editor/editorHtml.generated.js.map +1 -1
- package/lib/commonjs/hooks/useThemeColor.js +693 -65
- package/lib/commonjs/hooks/useThemeColor.js.map +1 -1
- package/lib/commonjs/hooks/useTrackedText.js +21 -0
- package/lib/commonjs/hooks/useTrackedText.js.map +1 -0
- package/lib/commonjs/index.js +46 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/lib/optional-deps.js +20 -0
- package/lib/commonjs/lib/optional-deps.js.map +1 -0
- package/lib/commonjs/lib/touch-target.js +19 -0
- package/lib/commonjs/lib/touch-target.js.map +1 -0
- package/lib/module/components/Alert.js +3 -1
- package/lib/module/components/Alert.js.map +1 -1
- package/lib/module/components/AlertDialog.js +5 -2
- package/lib/module/components/AlertDialog.js.map +1 -1
- package/lib/module/components/Badge.js +36 -2
- package/lib/module/components/Badge.js.map +1 -1
- package/lib/module/components/Button.js +32 -1
- package/lib/module/components/Button.js.map +1 -1
- package/lib/module/components/Carousel.js +12 -2
- package/lib/module/components/Carousel.js.map +1 -1
- package/lib/module/components/Checkbox.js +2 -0
- package/lib/module/components/Checkbox.js.map +1 -1
- package/lib/module/components/Chip.js +204 -0
- package/lib/module/components/Chip.js.map +1 -0
- package/lib/module/components/Choice.js +112 -0
- package/lib/module/components/Choice.js.map +1 -0
- package/lib/module/components/Dialog.js +28 -17
- package/lib/module/components/Dialog.js.map +1 -1
- package/lib/module/components/DropdownMenu.js +74 -58
- package/lib/module/components/DropdownMenu.js.map +1 -1
- package/lib/module/components/EmptyState.js +9 -2
- package/lib/module/components/EmptyState.js.map +1 -1
- package/lib/module/components/Feed.js +7 -3
- package/lib/module/components/Feed.js.map +1 -1
- package/lib/module/components/Feedback.js +74 -0
- package/lib/module/components/Feedback.js.map +1 -0
- package/lib/module/components/Filter.js +89 -0
- package/lib/module/components/Filter.js.map +1 -0
- package/lib/module/components/IndexLevel.js +4 -3
- package/lib/module/components/IndexLevel.js.map +1 -1
- package/lib/module/components/Input.js +149 -45
- package/lib/module/components/Input.js.map +1 -1
- package/lib/module/components/InvitePopover.js +4 -1
- package/lib/module/components/InvitePopover.js.map +1 -1
- package/lib/module/components/MemberRow.js +3 -4
- package/lib/module/components/MemberRow.js.map +1 -1
- package/lib/module/components/PostForm.js +18 -8
- package/lib/module/components/PostForm.js.map +1 -1
- package/lib/module/components/PrizeCollection.js +1 -1
- package/lib/module/components/RadioGroup.js +7 -0
- package/lib/module/components/RadioGroup.js.map +1 -1
- package/lib/module/components/Select.js +1 -1
- package/lib/module/components/Sheet.js +4 -1
- package/lib/module/components/Sheet.js.map +1 -1
- package/lib/module/components/Skeleton.js +56 -5
- package/lib/module/components/Skeleton.js.map +1 -1
- package/lib/module/components/Switch.js +2 -0
- package/lib/module/components/Switch.js.map +1 -1
- package/lib/module/components/Tabs.js +2 -0
- package/lib/module/components/Tabs.js.map +1 -1
- package/lib/module/components/Toast.js +360 -84
- package/lib/module/components/Toast.js.map +1 -1
- package/lib/module/editor/NoteEditor.js +36 -11
- package/lib/module/editor/NoteEditor.js.map +1 -1
- package/lib/module/editor/editorHtml.generated.js +1 -1
- package/lib/module/editor/editorHtml.generated.js.map +1 -1
- package/lib/module/hooks/useThemeColor.js +693 -65
- package/lib/module/hooks/useThemeColor.js.map +1 -1
- package/lib/module/hooks/useTrackedText.js +18 -0
- package/lib/module/hooks/useTrackedText.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/lib/optional-deps.js +16 -0
- package/lib/module/lib/optional-deps.js.map +1 -0
- package/lib/module/lib/touch-target.js +15 -0
- package/lib/module/lib/touch-target.js.map +1 -0
- package/lib/typescript/components/Alert.d.ts.map +1 -1
- package/lib/typescript/components/AlertDialog.d.ts.map +1 -1
- package/lib/typescript/components/Badge.d.ts +1 -1
- package/lib/typescript/components/Badge.d.ts.map +1 -1
- package/lib/typescript/components/Button.d.ts.map +1 -1
- package/lib/typescript/components/Carousel.d.ts +1 -1
- package/lib/typescript/components/Carousel.d.ts.map +1 -1
- package/lib/typescript/components/Checkbox.d.ts.map +1 -1
- package/lib/typescript/components/Chip.d.ts +30 -0
- package/lib/typescript/components/Chip.d.ts.map +1 -0
- package/lib/typescript/components/Choice.d.ts +17 -0
- package/lib/typescript/components/Choice.d.ts.map +1 -0
- package/lib/typescript/components/Dialog.d.ts.map +1 -1
- package/lib/typescript/components/DropdownMenu.d.ts +0 -7
- package/lib/typescript/components/DropdownMenu.d.ts.map +1 -1
- package/lib/typescript/components/EmptyState.d.ts +3 -2
- package/lib/typescript/components/EmptyState.d.ts.map +1 -1
- package/lib/typescript/components/Feed.d.ts.map +1 -1
- package/lib/typescript/components/Feedback.d.ts +17 -0
- package/lib/typescript/components/Feedback.d.ts.map +1 -0
- package/lib/typescript/components/Filter.d.ts +17 -0
- package/lib/typescript/components/Filter.d.ts.map +1 -0
- package/lib/typescript/components/IndexLevel.d.ts.map +1 -1
- package/lib/typescript/components/Input.d.ts +3 -3
- package/lib/typescript/components/Input.d.ts.map +1 -1
- package/lib/typescript/components/InvitePopover.d.ts.map +1 -1
- package/lib/typescript/components/MemberRow.d.ts.map +1 -1
- package/lib/typescript/components/PostForm.d.ts.map +1 -1
- package/lib/typescript/components/RadioGroup.d.ts.map +1 -1
- package/lib/typescript/components/Sheet.d.ts.map +1 -1
- package/lib/typescript/components/Skeleton.d.ts +1 -1
- package/lib/typescript/components/Skeleton.d.ts.map +1 -1
- package/lib/typescript/components/Switch.d.ts.map +1 -1
- package/lib/typescript/components/Tabs.d.ts.map +1 -1
- package/lib/typescript/components/Tag.d.ts +2 -2
- package/lib/typescript/components/ThemedIcon.d.ts +1 -1
- package/lib/typescript/components/ThemedIcon.d.ts.map +1 -1
- package/lib/typescript/components/Toast.d.ts +24 -13
- package/lib/typescript/components/Toast.d.ts.map +1 -1
- package/lib/typescript/editor/NoteEditor.d.ts.map +1 -1
- package/lib/typescript/editor/editorHtml.generated.d.ts.map +1 -1
- package/lib/typescript/hooks/useThemeColor.d.ts +0 -10
- package/lib/typescript/hooks/useThemeColor.d.ts.map +1 -1
- package/lib/typescript/hooks/useTrackedText.d.ts +6 -0
- package/lib/typescript/hooks/useTrackedText.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +9 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/lib/optional-deps.d.ts +23 -0
- package/lib/typescript/lib/optional-deps.d.ts.map +1 -0
- package/lib/typescript/lib/touch-target.d.ts +5 -0
- package/lib/typescript/lib/touch-target.d.ts.map +1 -0
- package/package.json +6 -1
- package/setup/createMedwayUiNavigator.tsx +4 -7
- package/setup/metro.js +12 -3
- package/src/components/Alert.tsx +3 -1
- package/src/components/AlertDialog.tsx +8 -3
- package/src/components/Badge.tsx +51 -3
- package/src/components/Button.tsx +39 -1
- package/src/components/Carousel.tsx +17 -3
- package/src/components/Checkbox.tsx +2 -0
- package/src/components/Chip.tsx +227 -0
- package/src/components/Choice.tsx +139 -0
- package/src/components/Dialog.tsx +39 -23
- package/src/components/DropdownMenu.tsx +99 -87
- package/src/components/EmptyState.tsx +18 -3
- package/src/components/Feed.tsx +4 -3
- package/src/components/Feedback.tsx +111 -0
- package/src/components/Filter.tsx +106 -0
- package/src/components/IndexLevel.tsx +8 -10
- package/src/components/Input.tsx +142 -54
- package/src/components/InvitePopover.tsx +5 -1
- package/src/components/MemberRow.tsx +3 -5
- package/src/components/PostForm.tsx +16 -9
- package/src/components/PrizeCollection.tsx +1 -1
- package/src/components/RadioGroup.tsx +8 -0
- package/src/components/Select.tsx +1 -1
- package/src/components/Sheet.tsx +4 -1
- package/src/components/Skeleton.tsx +47 -6
- package/src/components/Switch.tsx +2 -0
- package/src/components/Tabs.tsx +2 -0
- package/src/components/ThemedIcon.tsx +1 -1
- package/src/components/Toast.tsx +489 -87
- package/src/editor/NoteEditor.tsx +47 -10
- package/src/editor/editorHtml.generated.ts +1 -1
- package/src/hooks/useThemeColor.ts +757 -64
- package/src/hooks/useTrackedText.ts +20 -0
- package/src/index.ts +36 -1
- package/src/lib/optional-deps.ts +27 -0
- package/src/lib/touch-target.ts +12 -0
- package/setup/index.tsx +0 -42
|
@@ -354,6 +354,23 @@ const NoteEditor = forwardRef<NoteEditorHandle, NoteEditorProps>(
|
|
|
354
354
|
);
|
|
355
355
|
}, []);
|
|
356
356
|
|
|
357
|
+
const editableRef = useRef(editable);
|
|
358
|
+
useEffect(() => {
|
|
359
|
+
editableRef.current = editable;
|
|
360
|
+
}, [editable]);
|
|
361
|
+
|
|
362
|
+
const sendMutation = useCallback(
|
|
363
|
+
(message: NativeToEditorMessage) => {
|
|
364
|
+
if (editableRef.current) send(message);
|
|
365
|
+
},
|
|
366
|
+
[send]
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
const handleWebViewReset = useCallback(() => {
|
|
370
|
+
setIsReady(false);
|
|
371
|
+
setSlashState(EMPTY_SLASH_STATE);
|
|
372
|
+
}, []);
|
|
373
|
+
|
|
357
374
|
const pendingDocumentRequests = useRef(
|
|
358
375
|
new Map<string, { resolve: (doc: EditorDocument) => void; reject: (error: Error) => void }>()
|
|
359
376
|
);
|
|
@@ -392,17 +409,25 @@ const NoteEditor = forwardRef<NoteEditorHandle, NoteEditorProps>(
|
|
|
392
409
|
|
|
393
410
|
const insertImage = useCallback(async () => {
|
|
394
411
|
const upload = onImageUploadRef.current;
|
|
395
|
-
if (!upload) return;
|
|
412
|
+
if (!upload || !editableRef.current) return;
|
|
396
413
|
|
|
397
414
|
try {
|
|
398
415
|
const result = await upload();
|
|
399
416
|
if (!result) return;
|
|
400
|
-
|
|
417
|
+
if (!editableRef.current) {
|
|
418
|
+
onImageRemovedRef.current?.(result.src);
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
sendMutation({
|
|
422
|
+
type: "insertImage",
|
|
423
|
+
src: result.src,
|
|
424
|
+
alt: result.alt ?? null,
|
|
425
|
+
});
|
|
401
426
|
} catch (error) {
|
|
402
427
|
// eslint-disable-next-line no-console
|
|
403
428
|
console.error("@medway-ui/native NoteEditor: onImageUpload failed", error);
|
|
404
429
|
}
|
|
405
|
-
}, [
|
|
430
|
+
}, [sendMutation]);
|
|
406
431
|
|
|
407
432
|
const handleMessage = useCallback(
|
|
408
433
|
(event: WebViewMessageEvent) => {
|
|
@@ -540,17 +565,17 @@ const NoteEditor = forwardRef<NoteEditorHandle, NoteEditorProps>(
|
|
|
540
565
|
|
|
541
566
|
const confirmLink = useCallback(() => {
|
|
542
567
|
const href = linkValue.trim();
|
|
543
|
-
|
|
568
|
+
sendMutation(
|
|
544
569
|
href
|
|
545
570
|
? { type: "command", command: { name: "setLink", href } }
|
|
546
571
|
: { type: "command", command: { name: "unsetLink" } }
|
|
547
572
|
);
|
|
548
573
|
setLinkDialogOpen(false);
|
|
549
|
-
}, [linkValue,
|
|
574
|
+
}, [linkValue, sendMutation]);
|
|
550
575
|
|
|
551
576
|
const runToolbarCommand = useCallback(
|
|
552
|
-
(command: EditorCommand) =>
|
|
553
|
-
[
|
|
577
|
+
(command: EditorCommand) => sendMutation({ type: "command", command }),
|
|
578
|
+
[sendMutation]
|
|
554
579
|
);
|
|
555
580
|
const toolbarGroups = useMemo(
|
|
556
581
|
() => buildToolbarGroups(selectionState, openLinkDialog),
|
|
@@ -559,10 +584,11 @@ const NoteEditor = forwardRef<NoteEditorHandle, NoteEditorProps>(
|
|
|
559
584
|
|
|
560
585
|
const handleSlashSelect = useCallback(
|
|
561
586
|
(id: SlashCommandId) => {
|
|
587
|
+
if (!editable) return;
|
|
562
588
|
send({ type: "runSlashCommand", commandId: id });
|
|
563
589
|
if (id === "image") insertImage();
|
|
564
590
|
},
|
|
565
|
-
[send, insertImage]
|
|
591
|
+
[editable, send, insertImage]
|
|
566
592
|
);
|
|
567
593
|
|
|
568
594
|
const containerHeight = isEmbedded ? contentHeight : undefined;
|
|
@@ -581,6 +607,7 @@ const NoteEditor = forwardRef<NoteEditorHandle, NoteEditorProps>(
|
|
|
581
607
|
<NoteEditorToolbar
|
|
582
608
|
groups={toolbarGroups}
|
|
583
609
|
state={selectionState}
|
|
610
|
+
disabled={!editable}
|
|
584
611
|
onCommand={runToolbarCommand}
|
|
585
612
|
onImagePress={onImageUpload ? insertImage : undefined}
|
|
586
613
|
/>
|
|
@@ -620,6 +647,9 @@ const NoteEditor = forwardRef<NoteEditorHandle, NoteEditorProps>(
|
|
|
620
647
|
// "about:blankse.evil.com".
|
|
621
648
|
originWhitelist={["^about:blank$"]}
|
|
622
649
|
onMessage={handleMessage}
|
|
650
|
+
onLoadStart={handleWebViewReset}
|
|
651
|
+
onContentProcessDidTerminate={handleWebViewReset}
|
|
652
|
+
onRenderProcessGone={handleWebViewReset}
|
|
623
653
|
// Links already leave the editor via the `linkPress` message, so
|
|
624
654
|
// nothing rendered here needs to navigate. Allowing only the
|
|
625
655
|
// initial `about:blank` load closes off `data:`/script-driven
|
|
@@ -694,11 +724,13 @@ NoteEditor.displayName = "NoteEditor";
|
|
|
694
724
|
function NoteEditorToolbar({
|
|
695
725
|
groups,
|
|
696
726
|
state,
|
|
727
|
+
disabled: allDisabled,
|
|
697
728
|
onCommand,
|
|
698
729
|
onImagePress,
|
|
699
730
|
}: {
|
|
700
731
|
groups: ToolbarItem[][];
|
|
701
732
|
state: EditorSelectionState;
|
|
733
|
+
disabled: boolean;
|
|
702
734
|
onCommand: (command: EditorCommand) => void;
|
|
703
735
|
onImagePress?: () => void;
|
|
704
736
|
}) {
|
|
@@ -719,7 +751,7 @@ function NoteEditorToolbar({
|
|
|
719
751
|
) : null}
|
|
720
752
|
{group.map((item) => {
|
|
721
753
|
const active = item.activeKey ? state.active[item.activeKey] : false;
|
|
722
|
-
const disabled = item.disabled?.(state) ?? false;
|
|
754
|
+
const disabled = allDisabled || (item.disabled?.(state) ?? false);
|
|
723
755
|
const Icon = item.Icon;
|
|
724
756
|
|
|
725
757
|
const buttonStyle: StyleProp<ViewStyle> = [
|
|
@@ -751,8 +783,13 @@ function NoteEditorToolbar({
|
|
|
751
783
|
<Pressable
|
|
752
784
|
accessibilityRole="button"
|
|
753
785
|
accessibilityLabel="Inserir imagem"
|
|
786
|
+
accessibilityState={{ disabled: allDisabled }}
|
|
787
|
+
disabled={allDisabled}
|
|
754
788
|
onPress={onImagePress}
|
|
755
|
-
style={
|
|
789
|
+
style={[
|
|
790
|
+
styles.toolbarButton,
|
|
791
|
+
allDisabled ? styles.toolbarButtonDisabled : null,
|
|
792
|
+
]}
|
|
756
793
|
>
|
|
757
794
|
<ImageIcon width={16} height={16} color={iconColor} />
|
|
758
795
|
</Pressable>
|