notion-to-jsx 1.1.1 → 1.2.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/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/components/Renderer/index.tsx
2
- import React6, { useState as useState4, useMemo as useMemo2, useCallback } from "react";
2
+ import React7, { useState as useState5, useMemo as useMemo2, useCallback } from "react";
3
3
 
4
4
  // src/components/Renderer/styles.css.ts
5
5
  var container = "styles_container__epva5u0";
@@ -38,19 +38,29 @@ var richText = _7a4682({ defaultClassName: "styles_richText__fdf3tw0", variantCl
38
38
 
39
39
  // src/components/Renderer/components/RichText/RichTexts.tsx
40
40
  import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
41
+ var renderLink = (href, content3) => /* @__PURE__ */ jsx2("a", { href, target: "_blank", rel: "noopener noreferrer", className: link, children: content3 });
41
42
  var RichTexts = ({ richTexts }) => {
42
43
  return /* @__PURE__ */ jsx2(Fragment, { children: richTexts.map((text, index) => {
43
- const { bold, italic, strikethrough, underline, code, color } = text.annotations;
44
- const content3 = text.text.link ? /* @__PURE__ */ jsx2(
45
- "a",
46
- {
47
- href: text.text.link,
48
- target: "_blank",
49
- rel: "noopener noreferrer",
50
- className: link,
51
- children: text.text.content
44
+ const { bold, italic, strikethrough, underline, code } = text.annotations;
45
+ let content3;
46
+ switch (text.type) {
47
+ case "text": {
48
+ if (text.text) {
49
+ const { text: textData } = text;
50
+ content3 = textData.link ? renderLink(textData.link, textData.content) : textData.content;
51
+ } else {
52
+ content3 = text.plain_text;
53
+ }
54
+ break;
55
+ }
56
+ case "mention": {
57
+ content3 = text.href ? renderLink(text.href, text.plain_text) : text.plain_text;
58
+ break;
52
59
  }
53
- ) : text.text.content;
60
+ default: {
61
+ content3 = text.plain_text;
62
+ }
63
+ }
54
64
  return /* @__PURE__ */ jsx2(
55
65
  "span",
56
66
  {
@@ -247,8 +257,8 @@ var fetchOpenGraphData = async (url) => {
247
257
  if (!response.ok) {
248
258
  throw new Error("Failed to fetch metadata");
249
259
  }
250
- const { status, data: metaData } = data;
251
- if (status !== "success") {
260
+ const { status, data: metaData, statusCode } = data;
261
+ if (status !== "success" || statusCode !== 200) {
252
262
  throw new Error("API returned error status");
253
263
  }
254
264
  const parsedUrl = new URL(url);
@@ -321,13 +331,15 @@ var Bookmark_default = Bookmark;
321
331
  import { useState as useState3, useEffect as useEffect3 } from "react";
322
332
 
323
333
  // src/components/Renderer/components/LinkPreview/styles.css.ts
324
- var card2 = "styles_card__o1p3m11";
325
334
  var content2 = "styles_content__o1p3m12";
335
+ var description2 = "styles_description__o1p3m16";
336
+ var githubContent = "styles_githubContent__o1p3m18";
337
+ var githubPreview = "styles_githubPreview__o1p3m17";
326
338
  var icon = "styles_icon__o1p3m14";
327
339
  var iconContainer = "styles_iconContainer__o1p3m13";
328
340
  var link3 = "styles_link__o1p3m10";
341
+ var preview = "styles_preview__o1p3m11";
329
342
  var title2 = "styles_title__o1p3m15";
330
- var updatedText = "styles_updatedText__o1p3m16";
331
343
 
332
344
  // src/components/Renderer/components/LinkPreview/LinkPreview.tsx
333
345
  import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -345,6 +357,48 @@ var fetchGitHubRepoData = async (repoPath) => {
345
357
  return null;
346
358
  }
347
359
  };
360
+ var extractFigmaData = (url) => {
361
+ try {
362
+ const parsedUrl = new URL(url);
363
+ if (parsedUrl.hostname.includes("figma.com")) {
364
+ const pathSegments = parsedUrl.pathname.split("/");
365
+ const fileSegment = pathSegments.find(
366
+ (segment) => segment.includes("file")
367
+ );
368
+ if (!fileSegment) return null;
369
+ const fileIdMatch = fileSegment.match(/file\/([^/]+)/);
370
+ const fileId = fileIdMatch ? fileIdMatch[1] : "";
371
+ let fileName = "";
372
+ let mode = "";
373
+ if (pathSegments.length > 3) {
374
+ const encodedName = pathSegments[3];
375
+ if (encodedName) {
376
+ fileName = decodeURIComponent(encodedName).replace(/-/g, " ");
377
+ }
378
+ }
379
+ if (!fileName && parsedUrl.pathname.includes("-")) {
380
+ const nameMatch = parsedUrl.pathname.match(/\/([^/]+)(?:\?|$)/);
381
+ if (nameMatch && nameMatch[1]) {
382
+ fileName = decodeURIComponent(nameMatch[1].replace(/-/g, " "));
383
+ }
384
+ }
385
+ if (parsedUrl.search) {
386
+ const searchParams = new URLSearchParams(parsedUrl.search);
387
+ mode = searchParams.get("mode") || "";
388
+ }
389
+ fileName = fileName || "Figma Design";
390
+ return {
391
+ name: fileName,
392
+ url,
393
+ thumbnailUrl: "https://static.figma.com/app/icon/1/favicon.svg"
394
+ };
395
+ }
396
+ return null;
397
+ } catch (error) {
398
+ console.error("Error parsing Figma URL:", error);
399
+ return null;
400
+ }
401
+ };
348
402
  var extractRepoPathFromUrl = (url) => {
349
403
  try {
350
404
  const parsedUrl = new URL(url);
@@ -361,6 +415,19 @@ var extractRepoPathFromUrl = (url) => {
361
415
  return null;
362
416
  }
363
417
  };
418
+ var getLinkType = (url) => {
419
+ try {
420
+ const parsedUrl = new URL(url);
421
+ if (parsedUrl.hostname === "github.com") {
422
+ return "github";
423
+ } else if (parsedUrl.hostname.includes("figma.com")) {
424
+ return "figma";
425
+ }
426
+ return "unknown";
427
+ } catch {
428
+ return "unknown";
429
+ }
430
+ };
364
431
  var formatUpdatedTime = (dateString) => {
365
432
  const date = new Date(dateString);
366
433
  const now = /* @__PURE__ */ new Date();
@@ -396,35 +463,77 @@ var formatUpdatedTime = (dateString) => {
396
463
  };
397
464
  var LinkPreview = ({ url }) => {
398
465
  const [repoData, setRepoData] = useState3(null);
466
+ const [figmaData, setFigmaData] = useState3(null);
399
467
  const [loading, setLoading] = useState3(true);
468
+ const [linkType, setLinkType] = useState3(
469
+ "unknown"
470
+ );
400
471
  useEffect3(() => {
401
- const loadRepoData = async () => {
472
+ const loadLinkData = async () => {
402
473
  setLoading(true);
403
- const repoPath = extractRepoPathFromUrl(url);
404
- if (repoPath) {
405
- const data = await fetchGitHubRepoData(repoPath);
406
- setRepoData(data);
474
+ const type = getLinkType(url);
475
+ setLinkType(type);
476
+ if (type === "github") {
477
+ const repoPath = extractRepoPathFromUrl(url);
478
+ if (repoPath) {
479
+ const data = await fetchGitHubRepoData(repoPath);
480
+ setRepoData(data);
481
+ }
482
+ } else if (type === "figma") {
483
+ const data = extractFigmaData(url);
484
+ setFigmaData(data);
407
485
  }
408
486
  setLoading(false);
409
487
  };
410
- loadRepoData();
488
+ loadLinkData();
411
489
  }, [url]);
412
490
  const repoName = repoData?.name || extractRepoPathFromUrl(url)?.split("/")[1] || "Repository";
413
491
  const updatedTimeText = repoData?.updated_at ? formatUpdatedTime(repoData.updated_at) : "";
414
- return /* @__PURE__ */ jsx5("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: link3, children: /* @__PURE__ */ jsxs3("div", { className: card2, children: [
415
- /* @__PURE__ */ jsx5("div", { className: iconContainer, children: /* @__PURE__ */ jsx5(
416
- "img",
417
- {
418
- src: repoData?.owner?.avatar_url || "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
419
- alt: "Repository icon",
420
- className: icon
421
- }
422
- ) }),
423
- /* @__PURE__ */ jsxs3("div", { className: content2, children: [
424
- /* @__PURE__ */ jsx5("div", { className: title2, children: repoName }),
425
- /* @__PURE__ */ jsx5("div", { className: updatedText, children: loading ? "Loading..." : `NotionX \u2022 ${updatedTimeText}` })
426
- ] })
427
- ] }) });
492
+ return /* @__PURE__ */ jsx5(
493
+ "a",
494
+ {
495
+ href: url,
496
+ target: "_blank",
497
+ rel: "noopener noreferrer",
498
+ className: link3,
499
+ children: linkType === "figma" && figmaData ? (
500
+ // Figma 프리뷰 렌더링
501
+ /* @__PURE__ */ jsxs3("div", { className: preview, children: [
502
+ /* @__PURE__ */ jsx5("div", { className: iconContainer, children: /* @__PURE__ */ jsx5(
503
+ "img",
504
+ {
505
+ src: figmaData.thumbnailUrl || "https://static.figma.com/app/icon/1/favicon.svg",
506
+ alt: "Figma icon",
507
+ className: icon
508
+ }
509
+ ) }),
510
+ /* @__PURE__ */ jsxs3("div", { className: content2, children: [
511
+ /* @__PURE__ */ jsx5("div", { className: title2, children: figmaData.name }),
512
+ /* @__PURE__ */ jsx5("div", { className: description2, children: "www.figma.com" })
513
+ ] })
514
+ ] })
515
+ ) : linkType === "github" ? (
516
+ // GitHub 프리뷰 렌더링
517
+ /* @__PURE__ */ jsxs3("div", { className: `${preview} ${githubPreview}`, children: [
518
+ /* @__PURE__ */ jsx5("div", { className: iconContainer, children: /* @__PURE__ */ jsx5(
519
+ "img",
520
+ {
521
+ src: repoData?.owner?.avatar_url || "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
522
+ alt: "Repository icon",
523
+ className: icon
524
+ }
525
+ ) }),
526
+ /* @__PURE__ */ jsxs3("div", { className: `${content2} ${githubContent}`, children: [
527
+ /* @__PURE__ */ jsx5("div", { className: title2, children: repoName }),
528
+ /* @__PURE__ */ jsx5("div", { className: description2, children: loading ? "Loading..." : `${repoName} \u2022 ${updatedTimeText}` })
529
+ ] })
530
+ ] })
531
+ ) : (
532
+ // 기본 링크 프리뷰 렌더링
533
+ /* @__PURE__ */ jsx5("div", { className: preview, children: /* @__PURE__ */ jsx5("div", { className: content2, children: /* @__PURE__ */ jsx5("div", { className: title2, children: url }) }) })
534
+ )
535
+ }
536
+ );
428
537
  };
429
538
  var LinkPreview_default = LinkPreview;
430
539
 
@@ -455,8 +564,7 @@ var MemoizedLinkPreview = React4.memo(
455
564
  import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
456
565
  var RecursiveListItem = ({ block, index }) => {
457
566
  const blockProps = {
458
- tabIndex: 0,
459
- "data-block-id": block.id
567
+ tabIndex: 0
460
568
  };
461
569
  const blockType = block.type;
462
570
  const richTexts = block[blockType]?.rich_text;
@@ -581,34 +689,195 @@ var Heading3 = ({
581
689
  return /* @__PURE__ */ jsx8("h3", { className: heading3, ...props, children });
582
690
  };
583
691
 
584
- // src/components/Renderer/components/Block/BlockRenderer.tsx
692
+ // src/components/Renderer/components/Column/styles.css.ts
693
+ var columnContainer = "styles_columnContainer__wle6we0";
694
+ var columnListContainer = "styles_columnListContainer__wle6we1";
695
+
696
+ // src/components/Renderer/components/Column/Column.tsx
585
697
  import { jsx as jsx9 } from "react/jsx-runtime";
698
+ var Column = ({ block, onFocus }) => {
699
+ if (!block || !block.children) return null;
700
+ return /* @__PURE__ */ jsx9("div", { className: columnContainer, children: block.children.map((childBlock, index) => /* @__PURE__ */ jsx9(
701
+ BlockRenderer_default,
702
+ {
703
+ block: childBlock,
704
+ onFocus,
705
+ index
706
+ },
707
+ childBlock.id
708
+ )) });
709
+ };
710
+ var Column_default = Column;
711
+
712
+ // src/components/Renderer/components/Column/ColumnList.tsx
713
+ import { jsx as jsx10 } from "react/jsx-runtime";
714
+ var ColumnList = ({ block, onFocus }) => {
715
+ if (!block || !block.children) return null;
716
+ return /* @__PURE__ */ jsx10("div", { className: columnListContainer, children: block.children.map((column) => /* @__PURE__ */ jsx10(Column_default, { block: column, onFocus }, column.id)) });
717
+ };
718
+ var ColumnList_default = ColumnList;
719
+
720
+ // src/components/Renderer/components/Quote/styles.css.ts
721
+ var container2 = "styles_container__mra9n0";
722
+
723
+ // src/components/Renderer/components/Quote/Quote.tsx
724
+ import { jsx as jsx11 } from "react/jsx-runtime";
725
+ var Quote = ({ richTexts, tabIndex }) => {
726
+ return /* @__PURE__ */ jsx11("blockquote", { className: container2, tabIndex, children: /* @__PURE__ */ jsx11(MemoizedRichText, { richTexts }) });
727
+ };
728
+ var Quote_default = Quote;
729
+
730
+ // src/components/Renderer/components/Table/styles.css.ts
731
+ var firstCell = "styles_firstCell__1rvbzfo4";
732
+ var hasRowHeader = "styles_hasRowHeader__1rvbzfo6";
733
+ var headerCell = "styles_headerCell__1rvbzfo2";
734
+ var lastCell = "styles_lastCell__1rvbzfo5";
735
+ var table = "styles_table__1rvbzfo1";
736
+ var tableCell = "styles_tableCell__1rvbzfo3";
737
+ var tableContainer = "styles_tableContainer__1rvbzfo0";
738
+
739
+ // src/components/Renderer/components/Table/TableRow.tsx
740
+ import { jsx as jsx12 } from "react/jsx-runtime";
741
+ var TableRow = ({
742
+ rowBlock,
743
+ cellClassName = "",
744
+ rowHeaderIndex = -1
745
+ }) => {
746
+ if (!rowBlock.table_row?.cells) {
747
+ return null;
748
+ }
749
+ const { cells } = rowBlock.table_row;
750
+ return /* @__PURE__ */ jsx12("tr", { children: cells.map((cell, index) => {
751
+ const isFirstCell = index === 0;
752
+ const isLastCell = index === cells.length - 1;
753
+ const isRowHeader = index === rowHeaderIndex;
754
+ let cellClasses = [tableCell, cellClassName];
755
+ if (isFirstCell) cellClasses.push(firstCell);
756
+ if (isLastCell) cellClasses.push(lastCell);
757
+ if (isRowHeader) cellClasses.push(hasRowHeader);
758
+ return /* @__PURE__ */ jsx12(
759
+ "td",
760
+ {
761
+ className: cellClasses.filter(Boolean).join(" "),
762
+ children: /* @__PURE__ */ jsx12(MemoizedRichText, { richTexts: cell })
763
+ },
764
+ `${rowBlock.id}-cell-${index}`
765
+ );
766
+ }) });
767
+ };
768
+ var TableRow_default = TableRow;
769
+
770
+ // src/components/Renderer/components/Table/Table.tsx
771
+ import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
772
+ var Table = ({ block, tabIndex = 0 }) => {
773
+ if (!block.table || !block.children) {
774
+ return null;
775
+ }
776
+ const { table_width, has_column_header, has_row_header } = block.table;
777
+ const rows = block.children?.filter(
778
+ (child) => child.type === "table_row"
779
+ ) || [];
780
+ return /* @__PURE__ */ jsx13("div", { className: tableContainer, children: /* @__PURE__ */ jsx13("table", { className: table, tabIndex, children: rows.length > 0 && /* @__PURE__ */ jsxs6(Fragment3, { children: [
781
+ has_column_header && rows[0] && /* @__PURE__ */ jsx13("thead", { children: /* @__PURE__ */ jsx13(TableRow_default, { rowBlock: rows[0], cellClassName: headerCell }) }),
782
+ /* @__PURE__ */ jsx13("tbody", { children: rows.filter(
783
+ (row) => row !== void 0 && row.type === "table_row"
784
+ ).map((row, rowIndex) => {
785
+ if (has_column_header && rowIndex === 0) {
786
+ return null;
787
+ }
788
+ const actualRowIndex = has_column_header ? rowIndex - 1 : rowIndex;
789
+ return /* @__PURE__ */ jsx13(
790
+ TableRow_default,
791
+ {
792
+ rowBlock: row,
793
+ rowHeaderIndex: has_row_header ? 0 : -1
794
+ },
795
+ row.id
796
+ );
797
+ }) })
798
+ ] }) }) });
799
+ };
800
+ var Table_default = Table;
801
+
802
+ // src/components/Renderer/components/Table/index.ts
803
+ var Table_default2 = Table_default;
804
+
805
+ // src/components/Renderer/components/Toggle/Toggle.tsx
806
+ import { useState as useState4 } from "react";
807
+
808
+ // src/components/Renderer/components/Toggle/styles.css.ts
809
+ var toggleContainer = "styles_toggleContainer__p7ue1z0";
810
+ var toggleContent = "styles_toggleContent__p7ue1z4";
811
+ var toggleHeader = "styles_toggleHeader__p7ue1z1";
812
+ var toggleIcon = "styles_toggleIcon__p7ue1z2";
813
+ var toggleIconOpen = "styles_toggleIconOpen__p7ue1z3";
814
+
815
+ // src/components/Renderer/components/Toggle/Toggle.tsx
816
+ import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
817
+ var Toggle = ({ block, tabIndex = 0, onFocus }) => {
818
+ const [isOpen, setIsOpen] = useState4(false);
819
+ if (!block.toggle || !block.children) {
820
+ return null;
821
+ }
822
+ const handleToggle = () => {
823
+ setIsOpen(!isOpen);
824
+ };
825
+ const handleKeyDown = (e) => {
826
+ if (e.key === "Enter" || e.key === " ") {
827
+ e.preventDefault();
828
+ handleToggle();
829
+ }
830
+ };
831
+ return /* @__PURE__ */ jsxs7("div", { className: toggleContainer, children: [
832
+ /* @__PURE__ */ jsxs7(
833
+ "div",
834
+ {
835
+ className: toggleHeader,
836
+ onClick: handleToggle,
837
+ onKeyDown: handleKeyDown,
838
+ tabIndex,
839
+ onFocus,
840
+ role: "button",
841
+ "aria-expanded": isOpen,
842
+ children: [
843
+ /* @__PURE__ */ jsx14("span", { className: `${toggleIcon} ${isOpen ? toggleIconOpen : ""}`, children: "\u25B6" }),
844
+ /* @__PURE__ */ jsx14(RichTexts_default, { richTexts: block.toggle.rich_text })
845
+ ]
846
+ }
847
+ ),
848
+ isOpen && block.children && /* @__PURE__ */ jsx14("div", { className: toggleContent, children: block.children.map((childBlock, index) => /* @__PURE__ */ jsx14(
849
+ BlockRenderer_default,
850
+ {
851
+ block: childBlock,
852
+ index
853
+ },
854
+ childBlock.id
855
+ )) })
856
+ ] });
857
+ };
858
+ var Toggle_default = Toggle;
859
+
860
+ // src/components/Renderer/components/Block/BlockRenderer.tsx
861
+ import { jsx as jsx15 } from "react/jsx-runtime";
586
862
  var BlockRenderer = ({ block, onFocus, index }) => {
587
863
  if (!block) return null;
588
864
  const blockProps = {
589
865
  tabIndex: 0,
590
- onFocus,
591
- "data-block-id": block.id
866
+ onFocus
592
867
  };
593
868
  switch (block.type) {
594
869
  case "link_preview":
595
- return /* @__PURE__ */ jsx9(
596
- MemoizedLinkPreview,
597
- {
598
- url: block.link_preview.url,
599
- ...blockProps
600
- }
601
- );
870
+ return /* @__PURE__ */ jsx15(MemoizedLinkPreview, { url: block.link_preview.url, ...blockProps });
602
871
  case "paragraph":
603
- return /* @__PURE__ */ jsx9(Paragraph, { ...blockProps, children: /* @__PURE__ */ jsx9(MemoizedRichText, { richTexts: block.paragraph.rich_text }) });
872
+ return /* @__PURE__ */ jsx15(Paragraph, { ...blockProps, children: /* @__PURE__ */ jsx15(MemoizedRichText, { richTexts: block.paragraph.rich_text }) });
604
873
  case "heading_1":
605
- return /* @__PURE__ */ jsx9(Heading1, { ...blockProps, children: /* @__PURE__ */ jsx9(MemoizedRichText, { richTexts: block.heading_1.rich_text }) });
874
+ return /* @__PURE__ */ jsx15(Heading1, { ...blockProps, children: /* @__PURE__ */ jsx15(MemoizedRichText, { richTexts: block.heading_1.rich_text }) });
606
875
  case "heading_2":
607
- return /* @__PURE__ */ jsx9(Heading2, { ...blockProps, children: /* @__PURE__ */ jsx9(MemoizedRichText, { richTexts: block.heading_2.rich_text }) });
876
+ return /* @__PURE__ */ jsx15(Heading2, { ...blockProps, children: /* @__PURE__ */ jsx15(MemoizedRichText, { richTexts: block.heading_2.rich_text }) });
608
877
  case "heading_3":
609
- return /* @__PURE__ */ jsx9(Heading3, { ...blockProps, children: /* @__PURE__ */ jsx9(MemoizedRichText, { richTexts: block.heading_3.rich_text }) });
878
+ return /* @__PURE__ */ jsx15(Heading3, { ...blockProps, children: /* @__PURE__ */ jsx15(MemoizedRichText, { richTexts: block.heading_3.rich_text }) });
610
879
  case "code":
611
- return /* @__PURE__ */ jsx9("div", { ...blockProps, children: /* @__PURE__ */ jsx9(
880
+ return /* @__PURE__ */ jsx15("div", { ...blockProps, children: /* @__PURE__ */ jsx15(
612
881
  CodeBlock_default,
613
882
  {
614
883
  code: block.code.rich_text[0].text.content,
@@ -617,7 +886,7 @@ var BlockRenderer = ({ block, onFocus, index }) => {
617
886
  }
618
887
  ) });
619
888
  case "image":
620
- return /* @__PURE__ */ jsx9("figure", { ...blockProps, children: /* @__PURE__ */ jsx9(
889
+ return /* @__PURE__ */ jsx15("figure", { ...blockProps, children: /* @__PURE__ */ jsx15(
621
890
  MemoizedImage,
622
891
  {
623
892
  src: block.image.file?.url || block.image.external?.url,
@@ -627,7 +896,24 @@ var BlockRenderer = ({ block, onFocus, index }) => {
627
896
  }
628
897
  ) });
629
898
  case "bookmark":
630
- return /* @__PURE__ */ jsx9(MemoizedBookmark, { url: block.bookmark.url });
899
+ return /* @__PURE__ */ jsx15(MemoizedBookmark, { url: block.bookmark.url });
900
+ case "column_list":
901
+ return /* @__PURE__ */ jsx15(ColumnList_default, { block, onFocus });
902
+ case "column":
903
+ return null;
904
+ case "quote":
905
+ return /* @__PURE__ */ jsx15(Quote_default, { richTexts: block.quote.rich_text, ...blockProps });
906
+ case "table":
907
+ return /* @__PURE__ */ jsx15(Table_default2, { block, tabIndex: blockProps.tabIndex });
908
+ case "toggle":
909
+ return /* @__PURE__ */ jsx15(
910
+ Toggle_default,
911
+ {
912
+ block,
913
+ tabIndex: blockProps.tabIndex,
914
+ onFocus
915
+ }
916
+ );
631
917
  default:
632
918
  return null;
633
919
  }
@@ -639,9 +925,9 @@ var darkTheme = "theme_darkTheme__sq3jkb15";
639
925
  var lightTheme = "theme_lightTheme__sq3jkb14";
640
926
 
641
927
  // src/components/Title/index.tsx
642
- import { jsx as jsx10 } from "react/jsx-runtime";
928
+ import { jsx as jsx16 } from "react/jsx-runtime";
643
929
  var Title = ({ title: title3 }) => {
644
- return /* @__PURE__ */ jsx10(Heading1, { children: title3 });
930
+ return /* @__PURE__ */ jsx16(Heading1, { children: title3 });
645
931
  };
646
932
  var Title_default = Title;
647
933
 
@@ -649,18 +935,18 @@ var Title_default = Title;
649
935
  var cover = "styles_cover__p0cp8d0";
650
936
 
651
937
  // src/components/Cover/index.tsx
652
- import { jsx as jsx11 } from "react/jsx-runtime";
938
+ import { jsx as jsx17 } from "react/jsx-runtime";
653
939
  var Cover = ({ src, alt }) => {
654
- return /* @__PURE__ */ jsx11("img", { src, alt, className: cover });
940
+ return /* @__PURE__ */ jsx17("img", { src, alt, className: cover });
655
941
  };
656
942
  var Cover_default = Cover;
657
943
 
658
944
  // src/components/Renderer/index.tsx
659
- import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
660
- var Renderer = React6.memo(
945
+ import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
946
+ var Renderer = React7.memo(
661
947
  ({ blocks, isDarkMode = false, title: title3, cover: cover2, onBlockFocus }) => {
662
948
  const theme = isDarkMode ? darkTheme : lightTheme;
663
- const [focusedIndex, setFocusedIndex] = useState4(-1);
949
+ const [focusedIndex, setFocusedIndex] = useState5(-1);
664
950
  const handleBlockFocus = useCallback(
665
951
  (index) => {
666
952
  setFocusedIndex(index);
@@ -677,7 +963,7 @@ var Renderer = React6.memo(
677
963
  const listItemType = `${listType}_list_item`;
678
964
  if (block.type === listItemType && (i === 0 || blocks[i - 1]?.type !== listItemType)) {
679
965
  result.push(
680
- /* @__PURE__ */ jsx12(
966
+ /* @__PURE__ */ jsx18(
681
967
  ListBlocksRenderer_default,
682
968
  {
683
969
  blocks,
@@ -698,7 +984,7 @@ var Renderer = React6.memo(
698
984
  continue;
699
985
  } else {
700
986
  result.push(
701
- /* @__PURE__ */ jsx12(
987
+ /* @__PURE__ */ jsx18(
702
988
  BlockRenderer_default,
703
989
  {
704
990
  block,
@@ -712,15 +998,15 @@ var Renderer = React6.memo(
712
998
  }
713
999
  return result;
714
1000
  }, [blocks, handleBlockFocus]);
715
- return /* @__PURE__ */ jsxs6(Fragment3, { children: [
716
- cover2 && /* @__PURE__ */ jsx12(Cover_default, { src: cover2, alt: title3 || "Notion page content" }),
717
- /* @__PURE__ */ jsxs6(
1001
+ return /* @__PURE__ */ jsxs8(Fragment4, { children: [
1002
+ cover2 && /* @__PURE__ */ jsx18(Cover_default, { src: cover2, alt: title3 || "Notion page content" }),
1003
+ /* @__PURE__ */ jsxs8(
718
1004
  "article",
719
1005
  {
720
1006
  className: `${theme} ${container}`,
721
1007
  "aria-label": title3 || "Notion page content",
722
1008
  children: [
723
- title3 && /* @__PURE__ */ jsx12(Title_default, { title: title3 }),
1009
+ title3 && /* @__PURE__ */ jsx18(Title_default, { title: title3 }),
724
1010
  renderedBlocks
725
1011
  ]
726
1012
  }