@retor/react-native 0.2.0 → 0.3.1
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 +3 -3
- package/dist/index.d.mts +20 -41
- package/dist/index.d.ts +20 -41
- package/dist/index.js +245 -84
- package/dist/index.mjs +236 -71
- package/package.json +14 -3
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
33
|
AddNoteSheet: () => AddNoteSheet,
|
|
34
|
+
BlurBackground: () => BlurBackground,
|
|
34
35
|
CoverPhoto: () => CoverPhoto,
|
|
35
36
|
Hud: () => Hud,
|
|
36
37
|
LineDetailSheet: () => LineDetailSheet,
|
|
@@ -356,28 +357,52 @@ function Hud({ children }) {
|
|
|
356
357
|
}
|
|
357
358
|
|
|
358
359
|
// src/ProjectSheet.tsx
|
|
360
|
+
var import_react5 = __toESM(require("react"));
|
|
361
|
+
var import_react_native4 = require("react-native");
|
|
362
|
+
var import_bottom_sheet2 = require("@gorhom/bottom-sheet");
|
|
363
|
+
var import_lucide_react_native = require("lucide-react-native");
|
|
364
|
+
|
|
365
|
+
// src/BlurBackground.tsx
|
|
359
366
|
var import_react4 = __toESM(require("react"));
|
|
360
367
|
var import_react_native3 = require("react-native");
|
|
361
|
-
var
|
|
362
|
-
function
|
|
368
|
+
var import_expo_blur = require("expo-blur");
|
|
369
|
+
function BlurBackground({ style }) {
|
|
370
|
+
return /* @__PURE__ */ import_react4.default.createElement(import_react_native3.View, { style: [style, import_react_native3.StyleSheet.absoluteFill, { overflow: "hidden", borderTopLeftRadius: 24, borderTopRightRadius: 24 }] }, /* @__PURE__ */ import_react4.default.createElement(import_expo_blur.BlurView, { intensity: 60, tint: "dark", style: import_react_native3.StyleSheet.absoluteFill }), /* @__PURE__ */ import_react4.default.createElement(import_react_native3.View, { style: [import_react_native3.StyleSheet.absoluteFill, { backgroundColor: "rgba(20,20,20,0.55)" }] }));
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// src/ProjectSheet.tsx
|
|
374
|
+
function ProjectSheet({ snapPoints = ["35%", "85%"], renderHeader, children }) {
|
|
363
375
|
const { project, activeLineId, isAddNoteOpen } = useRetorBridge();
|
|
364
|
-
const sheetRef = (0,
|
|
365
|
-
const snapPointsArr = (0,
|
|
366
|
-
(0,
|
|
376
|
+
const sheetRef = (0, import_react5.useRef)(null);
|
|
377
|
+
const snapPointsArr = (0, import_react5.useMemo)(() => snapPoints, [snapPoints]);
|
|
378
|
+
const [minimized, setMinimized] = (0, import_react5.useState)(false);
|
|
379
|
+
(0, import_react5.useEffect)(() => {
|
|
367
380
|
if (activeLineId || isAddNoteOpen) {
|
|
368
381
|
sheetRef.current?.dismiss();
|
|
369
382
|
} else {
|
|
370
383
|
sheetRef.current?.present();
|
|
384
|
+
setMinimized(false);
|
|
371
385
|
}
|
|
372
386
|
}, [activeLineId, isAddNoteOpen]);
|
|
373
|
-
|
|
387
|
+
const handleSheetChange = (index) => {
|
|
388
|
+
setMinimized(index === 0);
|
|
389
|
+
};
|
|
390
|
+
const toggleMinimize = () => {
|
|
391
|
+
if (minimized) {
|
|
392
|
+
sheetRef.current?.snapToIndex(snapPointsArr.length - 1);
|
|
393
|
+
} else {
|
|
394
|
+
sheetRef.current?.snapToIndex(0);
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
374
398
|
import_bottom_sheet2.BottomSheetModal,
|
|
375
399
|
{
|
|
376
400
|
ref: sheetRef,
|
|
377
401
|
snapPoints: snapPointsArr,
|
|
378
402
|
enablePanDownToClose: false,
|
|
379
403
|
enableDismissOnClose: false,
|
|
380
|
-
|
|
404
|
+
onChange: handleSheetChange,
|
|
405
|
+
backdropComponent: (props) => /* @__PURE__ */ import_react5.default.createElement(
|
|
381
406
|
import_bottom_sheet2.BottomSheetBackdrop,
|
|
382
407
|
{
|
|
383
408
|
...props,
|
|
@@ -388,48 +413,69 @@ function ProjectSheet({ snapPoints = ["20%", "60%"], renderHeader, children }) {
|
|
|
388
413
|
}
|
|
389
414
|
),
|
|
390
415
|
handleIndicatorStyle: styles2.handle,
|
|
391
|
-
|
|
416
|
+
backgroundComponent: BlurBackground
|
|
392
417
|
},
|
|
393
|
-
/* @__PURE__ */
|
|
418
|
+
/* @__PURE__ */ import_react5.default.createElement(import_bottom_sheet2.BottomSheetView, { style: styles2.content }, renderHeader ? renderHeader({ name: project?.name, description: project?.description }) : /* @__PURE__ */ import_react5.default.createElement(import_react_native4.View, { style: styles2.header }, /* @__PURE__ */ import_react5.default.createElement(import_react_native4.View, { style: { flex: 1, minWidth: 0 } }, project?.name && /* @__PURE__ */ import_react5.default.createElement(import_react_native4.Text, { style: styles2.title, numberOfLines: 1 }, project.name), project?.description && /* @__PURE__ */ import_react5.default.createElement(import_react_native4.Text, { style: styles2.subtitle, numberOfLines: 4 }, project.description)), /* @__PURE__ */ import_react5.default.createElement(import_react_native4.Pressable, { style: styles2.iconBtn, onPress: toggleMinimize }, minimized ? /* @__PURE__ */ import_react5.default.createElement(import_lucide_react_native.ArrowUp, { size: 14, color: "rgba(255,255,255,0.6)" }) : /* @__PURE__ */ import_react5.default.createElement(import_lucide_react_native.ArrowDown, { size: 14, color: "rgba(255,255,255,0.6)" }))), children ?? /* @__PURE__ */ import_react5.default.createElement(DefaultLinesCarousel, null))
|
|
394
419
|
);
|
|
395
420
|
}
|
|
396
421
|
function DefaultLinesCarousel() {
|
|
397
|
-
return /* @__PURE__ */
|
|
422
|
+
return /* @__PURE__ */ import_react5.default.createElement(LinesCarousel, null, (line) => /* @__PURE__ */ import_react5.default.createElement(DefaultLineCard, { line }));
|
|
398
423
|
}
|
|
399
424
|
function LinesCarousel({ children, gap = 12, paddingHorizontal = 16 }) {
|
|
400
425
|
const { lines } = useRetorBridge();
|
|
401
426
|
if (lines.length === 0) return null;
|
|
402
|
-
return /* @__PURE__ */
|
|
403
|
-
|
|
427
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_native4.View, { style: styles2.carouselWrap }, /* @__PURE__ */ import_react5.default.createElement(import_react_native4.Text, { style: styles2.carouselLabel }, "Routes"), /* @__PURE__ */ import_react5.default.createElement(
|
|
428
|
+
import_react_native4.ScrollView,
|
|
404
429
|
{
|
|
405
430
|
horizontal: true,
|
|
406
431
|
showsHorizontalScrollIndicator: false,
|
|
407
|
-
contentContainerStyle: { paddingHorizontal, gap }
|
|
408
|
-
style: styles2.carousel
|
|
432
|
+
contentContainerStyle: { paddingHorizontal, gap }
|
|
409
433
|
},
|
|
410
|
-
lines.map((line, idx) => /* @__PURE__ */
|
|
411
|
-
);
|
|
434
|
+
lines.map((line, idx) => /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, { key: line._id }, children(line, idx)))
|
|
435
|
+
));
|
|
412
436
|
}
|
|
413
437
|
function DefaultLineCard({ line }) {
|
|
414
438
|
const { controls } = useRetorBridge();
|
|
415
|
-
return /* @__PURE__ */
|
|
416
|
-
|
|
439
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
440
|
+
import_react_native4.Pressable,
|
|
417
441
|
{
|
|
418
442
|
onPress: () => controls.openLine(line._id),
|
|
419
443
|
style: styles2.lineCard
|
|
420
444
|
},
|
|
421
|
-
/* @__PURE__ */
|
|
422
|
-
line.subtitle && /* @__PURE__ */
|
|
445
|
+
/* @__PURE__ */ import_react5.default.createElement(import_react_native4.Text, { style: styles2.lineCardTitle, numberOfLines: 1 }, line.name || "Line"),
|
|
446
|
+
line.subtitle && /* @__PURE__ */ import_react5.default.createElement(import_react_native4.Text, { style: styles2.lineCardSubtitle, numberOfLines: 2 }, line.subtitle)
|
|
423
447
|
);
|
|
424
448
|
}
|
|
425
|
-
var styles2 =
|
|
426
|
-
background: { backgroundColor: "rgba(20,20,20,0.95)" },
|
|
449
|
+
var styles2 = import_react_native4.StyleSheet.create({
|
|
427
450
|
handle: { backgroundColor: "rgba(255,255,255,0.3)" },
|
|
428
451
|
content: { flex: 1, paddingTop: 12, paddingBottom: 24 },
|
|
429
|
-
header: {
|
|
452
|
+
header: {
|
|
453
|
+
flexDirection: "row",
|
|
454
|
+
alignItems: "flex-start",
|
|
455
|
+
paddingHorizontal: 24,
|
|
456
|
+
paddingBottom: 16,
|
|
457
|
+
gap: 8
|
|
458
|
+
},
|
|
430
459
|
title: { color: "white", fontSize: 18, fontWeight: "600", lineHeight: 22 },
|
|
431
460
|
subtitle: { color: "rgba(255,255,255,0.6)", fontSize: 13, marginTop: 4, lineHeight: 18 },
|
|
432
|
-
|
|
461
|
+
iconBtn: {
|
|
462
|
+
width: 28,
|
|
463
|
+
height: 28,
|
|
464
|
+
borderRadius: 14,
|
|
465
|
+
backgroundColor: "rgba(255,255,255,0.1)",
|
|
466
|
+
alignItems: "center",
|
|
467
|
+
justifyContent: "center"
|
|
468
|
+
},
|
|
469
|
+
carouselWrap: { marginTop: 8 },
|
|
470
|
+
carouselLabel: {
|
|
471
|
+
color: "rgba(255,255,255,0.4)",
|
|
472
|
+
fontSize: 10,
|
|
473
|
+
textTransform: "uppercase",
|
|
474
|
+
letterSpacing: 1,
|
|
475
|
+
fontWeight: "500",
|
|
476
|
+
paddingHorizontal: 24,
|
|
477
|
+
marginBottom: 8
|
|
478
|
+
},
|
|
433
479
|
lineCard: {
|
|
434
480
|
width: 220,
|
|
435
481
|
backgroundColor: "rgba(255,255,255,0.06)",
|
|
@@ -441,28 +487,49 @@ var styles2 = import_react_native3.StyleSheet.create({
|
|
|
441
487
|
});
|
|
442
488
|
|
|
443
489
|
// src/LineDetailSheet.tsx
|
|
444
|
-
var
|
|
445
|
-
var
|
|
490
|
+
var import_react6 = __toESM(require("react"));
|
|
491
|
+
var import_react_native5 = require("react-native");
|
|
446
492
|
var import_bottom_sheet3 = require("@gorhom/bottom-sheet");
|
|
447
|
-
|
|
493
|
+
var import_react_native_svg = __toESM(require("react-native-svg"));
|
|
494
|
+
var import_lucide_react_native2 = require("lucide-react-native");
|
|
495
|
+
function LineDetailSheet({ snapPoints = ["35%", "85%"], renderHeader, children }) {
|
|
448
496
|
const { activeLine, isAddNoteOpen, controls } = useRetorBridge();
|
|
449
|
-
const sheetRef = (0,
|
|
450
|
-
const snapPointsArr = (0,
|
|
451
|
-
(0,
|
|
497
|
+
const sheetRef = (0, import_react6.useRef)(null);
|
|
498
|
+
const snapPointsArr = (0, import_react6.useMemo)(() => snapPoints, [snapPoints]);
|
|
499
|
+
const [minimized, setMinimized] = (0, import_react6.useState)(false);
|
|
500
|
+
(0, import_react6.useEffect)(() => {
|
|
452
501
|
if (activeLine && !isAddNoteOpen) {
|
|
453
502
|
sheetRef.current?.present();
|
|
503
|
+
setMinimized(false);
|
|
454
504
|
} else {
|
|
455
505
|
sheetRef.current?.dismiss();
|
|
456
506
|
}
|
|
457
507
|
}, [activeLine, isAddNoteOpen]);
|
|
458
|
-
|
|
508
|
+
const handleSheetChange = (index) => {
|
|
509
|
+
setMinimized(index === 0);
|
|
510
|
+
};
|
|
511
|
+
const toggleMinimize = () => {
|
|
512
|
+
if (minimized) {
|
|
513
|
+
sheetRef.current?.snapToIndex(snapPointsArr.length - 1);
|
|
514
|
+
} else {
|
|
515
|
+
sheetRef.current?.snapToIndex(0);
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
const renderFooter = (0, import_react6.useCallback)(
|
|
519
|
+
(props) => /* @__PURE__ */ import_react6.default.createElement(import_bottom_sheet3.BottomSheetFooter, { ...props, bottomInset: 0 }, /* @__PURE__ */ import_react6.default.createElement(import_react_native5.View, { style: styles3.footer }, /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Pressable, { style: styles3.doneButton, onPress: () => controls.exitLine() }, /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: styles3.doneText }, "Done")))),
|
|
520
|
+
[controls]
|
|
521
|
+
);
|
|
522
|
+
const header = activeLine ? renderHeader ? renderHeader(activeLine) : /* @__PURE__ */ import_react6.default.createElement(DefaultHeader, { line: activeLine, minimized, onToggleMinimize: toggleMinimize }) : null;
|
|
523
|
+
return /* @__PURE__ */ import_react6.default.createElement(
|
|
459
524
|
import_bottom_sheet3.BottomSheetModal,
|
|
460
525
|
{
|
|
461
526
|
ref: sheetRef,
|
|
462
527
|
snapPoints: snapPointsArr,
|
|
463
528
|
enablePanDownToClose: false,
|
|
464
529
|
enableDismissOnClose: false,
|
|
465
|
-
|
|
530
|
+
onChange: handleSheetChange,
|
|
531
|
+
footerComponent: renderFooter,
|
|
532
|
+
backdropComponent: (props) => /* @__PURE__ */ import_react6.default.createElement(
|
|
466
533
|
import_bottom_sheet3.BottomSheetBackdrop,
|
|
467
534
|
{
|
|
468
535
|
...props,
|
|
@@ -473,63 +540,158 @@ function LineDetailSheet({ snapPoints = ["25%", "75%"], renderHeader, children }
|
|
|
473
540
|
}
|
|
474
541
|
),
|
|
475
542
|
handleIndicatorStyle: styles3.handle,
|
|
476
|
-
|
|
543
|
+
backgroundComponent: BlurBackground
|
|
477
544
|
},
|
|
478
|
-
|
|
545
|
+
activeLine && (children ?? /* @__PURE__ */ import_react6.default.createElement(DefaultLineTagList, { listHeader: header }))
|
|
479
546
|
);
|
|
480
547
|
}
|
|
481
|
-
function
|
|
482
|
-
|
|
548
|
+
function DefaultHeader({
|
|
549
|
+
line,
|
|
550
|
+
minimized,
|
|
551
|
+
onToggleMinimize
|
|
552
|
+
}) {
|
|
553
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react_native5.View, { style: styles3.header }, /* @__PURE__ */ import_react6.default.createElement(import_react_native5.View, { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: styles3.title, numberOfLines: 1 }, line.name), line.subtitle && /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: styles3.subtitle, numberOfLines: 1 }, line.subtitle), line.description && /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: styles3.description, numberOfLines: minimized ? 2 : 4 }, line.description)), /* @__PURE__ */ import_react6.default.createElement(import_react_native5.View, { style: styles3.headerActions }, /* @__PURE__ */ import_react6.default.createElement(AutoplayButton, null), /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Pressable, { style: styles3.iconBtn, onPress: onToggleMinimize }, minimized ? /* @__PURE__ */ import_react6.default.createElement(import_lucide_react_native2.ArrowUp, { size: 14, color: "rgba(255,255,255,0.6)" }) : /* @__PURE__ */ import_react6.default.createElement(import_lucide_react_native2.ArrowDown, { size: 14, color: "rgba(255,255,255,0.6)" }))));
|
|
483
554
|
}
|
|
484
|
-
function
|
|
555
|
+
function AutoplayButton() {
|
|
556
|
+
const { isPlaying, progress, controls } = useRetorBridge();
|
|
557
|
+
const r = 12.5;
|
|
558
|
+
const c = 2 * Math.PI * r;
|
|
559
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Pressable, { style: styles3.iconBtn, onPress: () => controls.toggleAutoplay() }, /* @__PURE__ */ import_react6.default.createElement(import_react_native_svg.default, { width: 28, height: 28, style: import_react_native5.StyleSheet.absoluteFill }, /* @__PURE__ */ import_react6.default.createElement(
|
|
560
|
+
import_react_native_svg.Circle,
|
|
561
|
+
{
|
|
562
|
+
cx: 14,
|
|
563
|
+
cy: 14,
|
|
564
|
+
r,
|
|
565
|
+
fill: "none",
|
|
566
|
+
stroke: "white",
|
|
567
|
+
strokeWidth: 2,
|
|
568
|
+
strokeDasharray: `${c}`,
|
|
569
|
+
strokeDashoffset: c * (1 - progress),
|
|
570
|
+
strokeLinecap: "round",
|
|
571
|
+
transform: "rotate(-90, 14, 14)"
|
|
572
|
+
}
|
|
573
|
+
)), isPlaying ? /* @__PURE__ */ import_react6.default.createElement(import_lucide_react_native2.Pause, { size: 11, color: "white", fill: "white" }) : /* @__PURE__ */ import_react6.default.createElement(import_lucide_react_native2.Play, { size: 11, color: "white", fill: "white", style: { marginLeft: 1 } }));
|
|
574
|
+
}
|
|
575
|
+
function LineTagList({ children, listHeader }) {
|
|
485
576
|
const { activeLine, closestTagId } = useRetorBridge();
|
|
486
|
-
const
|
|
577
|
+
const listRef = (0, import_react6.useRef)(null);
|
|
578
|
+
const tags = (0, import_react6.useMemo)(
|
|
487
579
|
() => (activeLine?.tags ?? []).filter((t) => t.name && t.name.trim().length > 0),
|
|
488
580
|
[activeLine]
|
|
489
581
|
);
|
|
582
|
+
(0, import_react6.useEffect)(() => {
|
|
583
|
+
if (!closestTagId) return;
|
|
584
|
+
const index = tags.findIndex((t2) => t2._id === closestTagId);
|
|
585
|
+
if (index < 0) return;
|
|
586
|
+
const t = setTimeout(() => {
|
|
587
|
+
try {
|
|
588
|
+
listRef.current?.scrollToIndex({ index, animated: true, viewPosition: 0 });
|
|
589
|
+
} catch {
|
|
590
|
+
}
|
|
591
|
+
}, 50);
|
|
592
|
+
return () => clearTimeout(t);
|
|
593
|
+
}, [closestTagId, tags]);
|
|
490
594
|
if (!activeLine) return null;
|
|
491
|
-
return /* @__PURE__ */
|
|
595
|
+
return /* @__PURE__ */ import_react6.default.createElement(
|
|
492
596
|
import_bottom_sheet3.BottomSheetFlatList,
|
|
493
597
|
{
|
|
598
|
+
ref: listRef,
|
|
494
599
|
data: tags,
|
|
495
600
|
keyExtractor: (t) => t._id,
|
|
496
|
-
|
|
497
|
-
|
|
601
|
+
ListHeaderComponent: listHeader ? () => /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, listHeader) : void 0,
|
|
602
|
+
renderItem: ({ item }) => /* @__PURE__ */ import_react6.default.createElement(import_react_native5.View, null, children(item, item._id === closestTagId)),
|
|
603
|
+
contentContainerStyle: styles3.list,
|
|
604
|
+
removeClippedSubviews: false,
|
|
605
|
+
onScrollToIndexFailed: (info) => {
|
|
606
|
+
const offset = info.averageItemLength * info.index;
|
|
607
|
+
listRef.current?.scrollToOffset({ offset, animated: false });
|
|
608
|
+
setTimeout(() => {
|
|
609
|
+
try {
|
|
610
|
+
listRef.current?.scrollToIndex({ index: info.index, animated: true, viewPosition: 0 });
|
|
611
|
+
} catch {
|
|
612
|
+
}
|
|
613
|
+
}, 100);
|
|
614
|
+
}
|
|
498
615
|
}
|
|
499
616
|
);
|
|
500
617
|
}
|
|
618
|
+
function DefaultLineTagList({ listHeader }) {
|
|
619
|
+
return /* @__PURE__ */ import_react6.default.createElement(LineTagList, { listHeader }, (tag, isActive) => /* @__PURE__ */ import_react6.default.createElement(DefaultTagItem, { tag, isActive }));
|
|
620
|
+
}
|
|
501
621
|
function DefaultTagItem({ tag, isActive }) {
|
|
502
|
-
const { controls } = useRetorBridge();
|
|
503
|
-
return /* @__PURE__ */
|
|
504
|
-
|
|
622
|
+
const { controls, openAddNote } = useRetorBridge();
|
|
623
|
+
return /* @__PURE__ */ import_react6.default.createElement(
|
|
624
|
+
import_react_native5.Pressable,
|
|
505
625
|
{
|
|
506
626
|
onPress: () => controls.scrollToTag(tag._id),
|
|
507
627
|
style: [styles3.tagItem, isActive && styles3.tagItemActive]
|
|
508
628
|
},
|
|
509
|
-
/* @__PURE__ */
|
|
510
|
-
tag.subtitle && /* @__PURE__ */
|
|
629
|
+
/* @__PURE__ */ import_react6.default.createElement(import_react_native5.View, { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: [styles3.tagText, isActive && styles3.tagTextActive], numberOfLines: 1 }, tag.name), isActive && tag.description && /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: styles3.tagDescription, numberOfLines: 2 }, tag.description)),
|
|
630
|
+
tag.subtitle && /* @__PURE__ */ import_react6.default.createElement(import_react_native5.Text, { style: styles3.tagSubtitle, numberOfLines: 1 }, tag.subtitle),
|
|
631
|
+
isActive && /* @__PURE__ */ import_react6.default.createElement(
|
|
632
|
+
import_react_native5.Pressable,
|
|
633
|
+
{
|
|
634
|
+
onPress: (e) => {
|
|
635
|
+
e.stopPropagation();
|
|
636
|
+
openAddNote(tag._id);
|
|
637
|
+
},
|
|
638
|
+
style: styles3.plusBtn
|
|
639
|
+
},
|
|
640
|
+
/* @__PURE__ */ import_react6.default.createElement(import_lucide_react_native2.Plus, { size: 14, color: "white" })
|
|
641
|
+
)
|
|
511
642
|
);
|
|
512
643
|
}
|
|
513
|
-
var styles3 =
|
|
514
|
-
background: { backgroundColor: "rgba(20,20,20,0.95)" },
|
|
644
|
+
var styles3 = import_react_native5.StyleSheet.create({
|
|
515
645
|
handle: { backgroundColor: "rgba(255,255,255,0.3)" },
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
646
|
+
header: {
|
|
647
|
+
flexDirection: "row",
|
|
648
|
+
alignItems: "flex-start",
|
|
649
|
+
paddingHorizontal: 24,
|
|
650
|
+
paddingTop: 8,
|
|
651
|
+
paddingBottom: 16,
|
|
652
|
+
gap: 8
|
|
653
|
+
},
|
|
654
|
+
headerActions: { flexDirection: "row", alignItems: "center", gap: 6 },
|
|
655
|
+
title: { color: "white", fontSize: 18, fontWeight: "700" },
|
|
656
|
+
subtitle: { color: "rgba(255,255,255,0.5)", fontSize: 12, marginTop: 2 },
|
|
657
|
+
description: { color: "rgba(255,255,255,0.6)", fontSize: 12, marginTop: 6, lineHeight: 18 },
|
|
658
|
+
iconBtn: {
|
|
659
|
+
width: 28,
|
|
660
|
+
height: 28,
|
|
661
|
+
borderRadius: 14,
|
|
662
|
+
backgroundColor: "rgba(255,255,255,0.1)",
|
|
663
|
+
alignItems: "center",
|
|
664
|
+
justifyContent: "center",
|
|
665
|
+
position: "relative"
|
|
666
|
+
},
|
|
667
|
+
list: { paddingHorizontal: 16, paddingBottom: 96, gap: 4 },
|
|
522
668
|
tagItem: {
|
|
669
|
+
flexDirection: "row",
|
|
670
|
+
alignItems: "center",
|
|
523
671
|
paddingHorizontal: 12,
|
|
524
|
-
paddingVertical:
|
|
672
|
+
paddingVertical: 12,
|
|
525
673
|
borderRadius: 12,
|
|
526
|
-
|
|
674
|
+
gap: 8
|
|
527
675
|
},
|
|
528
676
|
tagItemActive: { backgroundColor: "rgba(255,255,255,0.1)" },
|
|
529
|
-
tagText: { color: "rgba(255,255,255,0.6)", fontSize:
|
|
677
|
+
tagText: { color: "rgba(255,255,255,0.6)", fontSize: 13 },
|
|
530
678
|
tagTextActive: { color: "white", fontWeight: "600" },
|
|
531
|
-
|
|
532
|
-
|
|
679
|
+
tagDescription: { color: "rgba(255,255,255,0.4)", fontSize: 11, marginTop: 2, lineHeight: 14 },
|
|
680
|
+
tagSubtitle: { color: "rgba(255,255,255,0.4)", fontSize: 10 },
|
|
681
|
+
plusBtn: {
|
|
682
|
+
width: 24,
|
|
683
|
+
height: 24,
|
|
684
|
+
borderRadius: 12,
|
|
685
|
+
backgroundColor: "rgba(255,255,255,0.2)",
|
|
686
|
+
alignItems: "center",
|
|
687
|
+
justifyContent: "center"
|
|
688
|
+
},
|
|
689
|
+
footer: {
|
|
690
|
+
paddingHorizontal: 16,
|
|
691
|
+
paddingBottom: 24,
|
|
692
|
+
paddingTop: 8,
|
|
693
|
+
backgroundColor: "transparent"
|
|
694
|
+
},
|
|
533
695
|
doneButton: {
|
|
534
696
|
backgroundColor: "white",
|
|
535
697
|
borderRadius: 14,
|
|
@@ -540,9 +702,10 @@ var styles3 = import_react_native4.StyleSheet.create({
|
|
|
540
702
|
});
|
|
541
703
|
|
|
542
704
|
// src/AddNoteSheet.tsx
|
|
543
|
-
var
|
|
544
|
-
var
|
|
705
|
+
var import_react7 = __toESM(require("react"));
|
|
706
|
+
var import_react_native6 = require("react-native");
|
|
545
707
|
var import_bottom_sheet4 = require("@gorhom/bottom-sheet");
|
|
708
|
+
var import_lucide_react_native3 = require("lucide-react-native");
|
|
546
709
|
function AddNoteSheet({
|
|
547
710
|
snapPoints = ["50%"],
|
|
548
711
|
maxLength = 280,
|
|
@@ -550,11 +713,11 @@ function AddNoteSheet({
|
|
|
550
713
|
renderForm
|
|
551
714
|
}) {
|
|
552
715
|
const { isAddNoteOpen, addNoteTagId, activeLine, closeAddNote, submitNote } = useRetorBridge();
|
|
553
|
-
const sheetRef = (0,
|
|
554
|
-
const snapPointsArr = (0,
|
|
555
|
-
const [text, setText] = (0,
|
|
556
|
-
const [isPrivate, setPrivate] = (0,
|
|
557
|
-
(0,
|
|
716
|
+
const sheetRef = (0, import_react7.useRef)(null);
|
|
717
|
+
const snapPointsArr = (0, import_react7.useMemo)(() => snapPoints, [snapPoints]);
|
|
718
|
+
const [text, setText] = (0, import_react7.useState)("");
|
|
719
|
+
const [isPrivate, setPrivate] = (0, import_react7.useState)(true);
|
|
720
|
+
(0, import_react7.useEffect)(() => {
|
|
558
721
|
if (isAddNoteOpen) {
|
|
559
722
|
sheetRef.current?.present();
|
|
560
723
|
setText("");
|
|
@@ -563,7 +726,7 @@ function AddNoteSheet({
|
|
|
563
726
|
sheetRef.current?.dismiss();
|
|
564
727
|
}
|
|
565
728
|
}, [isAddNoteOpen]);
|
|
566
|
-
const tag = (0,
|
|
729
|
+
const tag = (0, import_react7.useMemo)(
|
|
567
730
|
() => activeLine?.tags.find((t) => t._id === addNoteTagId) ?? null,
|
|
568
731
|
[activeLine, addNoteTagId]
|
|
569
732
|
);
|
|
@@ -583,14 +746,14 @@ function AddNoteSheet({
|
|
|
583
746
|
close: closeAddNote,
|
|
584
747
|
maxLength
|
|
585
748
|
};
|
|
586
|
-
return /* @__PURE__ */
|
|
749
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
587
750
|
import_bottom_sheet4.BottomSheetModal,
|
|
588
751
|
{
|
|
589
752
|
ref: sheetRef,
|
|
590
753
|
snapPoints: snapPointsArr,
|
|
591
754
|
enablePanDownToClose: true,
|
|
592
755
|
onDismiss: closeAddNote,
|
|
593
|
-
backdropComponent: (props) => /* @__PURE__ */
|
|
756
|
+
backdropComponent: (props) => /* @__PURE__ */ import_react7.default.createElement(
|
|
594
757
|
import_bottom_sheet4.BottomSheetBackdrop,
|
|
595
758
|
{
|
|
596
759
|
...props,
|
|
@@ -600,9 +763,9 @@ function AddNoteSheet({
|
|
|
600
763
|
}
|
|
601
764
|
),
|
|
602
765
|
handleIndicatorStyle: styles4.handle,
|
|
603
|
-
|
|
766
|
+
backgroundComponent: BlurBackground
|
|
604
767
|
},
|
|
605
|
-
/* @__PURE__ */
|
|
768
|
+
/* @__PURE__ */ import_react7.default.createElement(import_bottom_sheet4.BottomSheetView, { style: styles4.content }, renderForm ? renderForm(formApi) : /* @__PURE__ */ import_react7.default.createElement(import_react_native6.View, { style: styles4.form }, /* @__PURE__ */ import_react7.default.createElement(import_react_native6.View, { style: styles4.headerRow }, /* @__PURE__ */ import_react7.default.createElement(import_react_native6.View, { style: { flex: 1 } }, activeLine && /* @__PURE__ */ import_react7.default.createElement(import_react_native6.Text, { style: styles4.title, numberOfLines: 1 }, activeLine.name), tag && /* @__PURE__ */ import_react7.default.createElement(import_react_native6.Text, { style: styles4.subtitle, numberOfLines: 1 }, tag.name)), /* @__PURE__ */ import_react7.default.createElement(import_react_native6.Pressable, { onPress: closeAddNote, style: styles4.closeBtn }, /* @__PURE__ */ import_react7.default.createElement(import_lucide_react_native3.X, { size: 14, color: "rgba(255,255,255,0.6)" }))), /* @__PURE__ */ import_react7.default.createElement(
|
|
606
769
|
import_bottom_sheet4.BottomSheetTextInput,
|
|
607
770
|
{
|
|
608
771
|
value: text,
|
|
@@ -615,26 +778,25 @@ function AddNoteSheet({
|
|
|
615
778
|
style: styles4.input,
|
|
616
779
|
autoFocus: true
|
|
617
780
|
}
|
|
618
|
-
), /* @__PURE__ */
|
|
619
|
-
|
|
781
|
+
), /* @__PURE__ */ import_react7.default.createElement(import_react_native6.View, { style: styles4.footer }, /* @__PURE__ */ import_react7.default.createElement(import_react_native6.Text, { style: [styles4.counter, text.length > maxLength * 0.9 && { color: "#fbbf24" }] }, text.length, "/", maxLength), /* @__PURE__ */ import_react7.default.createElement(import_react_native6.View, { style: { flex: 1 } }), /* @__PURE__ */ import_react7.default.createElement(
|
|
782
|
+
import_react_native6.Pressable,
|
|
620
783
|
{
|
|
621
784
|
onPress: () => setPrivate(!isPrivate),
|
|
622
785
|
style: [styles4.pill, !isPrivate && styles4.pillActive]
|
|
623
786
|
},
|
|
624
|
-
/* @__PURE__ */
|
|
625
|
-
), /* @__PURE__ */
|
|
626
|
-
|
|
787
|
+
/* @__PURE__ */ import_react7.default.createElement(import_react_native6.Text, { style: [styles4.pillText, !isPrivate && styles4.pillTextActive] }, isPrivate ? "Private" : "Public")
|
|
788
|
+
), /* @__PURE__ */ import_react7.default.createElement(
|
|
789
|
+
import_react_native6.Pressable,
|
|
627
790
|
{
|
|
628
791
|
onPress: handleSubmit,
|
|
629
792
|
disabled: !text.trim(),
|
|
630
793
|
style: [styles4.submit, !text.trim() && styles4.submitDisabled]
|
|
631
794
|
},
|
|
632
|
-
/* @__PURE__ */
|
|
795
|
+
/* @__PURE__ */ import_react7.default.createElement(import_lucide_react_native3.ArrowUp, { size: 16, color: "black", strokeWidth: 2.5 })
|
|
633
796
|
))))
|
|
634
797
|
);
|
|
635
798
|
}
|
|
636
|
-
var styles4 =
|
|
637
|
-
background: { backgroundColor: "rgba(20,20,20,0.98)" },
|
|
799
|
+
var styles4 = import_react_native6.StyleSheet.create({
|
|
638
800
|
handle: { backgroundColor: "rgba(255,255,255,0.3)" },
|
|
639
801
|
content: { flex: 1, padding: 24 },
|
|
640
802
|
form: { flex: 1 },
|
|
@@ -649,7 +811,6 @@ var styles4 = import_react_native5.StyleSheet.create({
|
|
|
649
811
|
alignItems: "center",
|
|
650
812
|
justifyContent: "center"
|
|
651
813
|
},
|
|
652
|
-
closeBtnText: { color: "rgba(255,255,255,0.6)", fontSize: 14 },
|
|
653
814
|
input: {
|
|
654
815
|
flex: 1,
|
|
655
816
|
color: "white",
|
|
@@ -683,16 +844,15 @@ var styles4 = import_react_native5.StyleSheet.create({
|
|
|
683
844
|
alignItems: "center",
|
|
684
845
|
justifyContent: "center"
|
|
685
846
|
},
|
|
686
|
-
submitDisabled: { opacity: 0.3 }
|
|
687
|
-
submitArrow: { color: "black", fontSize: 16, fontWeight: "700" }
|
|
847
|
+
submitDisabled: { opacity: 0.3 }
|
|
688
848
|
});
|
|
689
849
|
|
|
690
850
|
// src/CoverPhoto.tsx
|
|
691
|
-
var
|
|
851
|
+
var import_react8 = __toESM(require("react"));
|
|
692
852
|
var import_react_native_webview2 = require("react-native-webview");
|
|
693
853
|
function CoverPhoto({ projectId, baseUrl = "https://retor.app", style }) {
|
|
694
854
|
const uri = `${baseUrl}/p/${projectId}?cover=true`;
|
|
695
|
-
return /* @__PURE__ */
|
|
855
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
696
856
|
import_react_native_webview2.WebView,
|
|
697
857
|
{
|
|
698
858
|
source: { uri },
|
|
@@ -707,6 +867,7 @@ function CoverPhoto({ projectId, baseUrl = "https://retor.app", style }) {
|
|
|
707
867
|
// Annotate the CommonJS export names for ESM import in node:
|
|
708
868
|
0 && (module.exports = {
|
|
709
869
|
AddNoteSheet,
|
|
870
|
+
BlurBackground,
|
|
710
871
|
CoverPhoto,
|
|
711
872
|
Hud,
|
|
712
873
|
LineDetailSheet,
|