notion-to-jsx 1.2.9 → 1.2.10

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,12 +1,9 @@
1
1
  // src/components/Renderer/index.tsx
2
- import React6, { useState as useState5, useMemo as useMemo2, useCallback } from "react";
3
-
4
- // src/components/Renderer/styles.css.ts
5
- var container = "styles_container__epva5u0";
2
+ import { useMemo as useMemo2, memo as memo2 } from "react";
6
3
 
7
4
  // src/components/Renderer/components/List/styles.css.ts
8
5
  import { createRuntimeFn as _7a468 } from "@vanilla-extract/recipes/createRuntimeFn";
9
- var list = _7a468({ defaultClassName: "styles_list__es8vim0", variantClassNames: { type: { bulleted: "styles_list_type_bulleted__es8vim1", numbered: "styles_list_type_numbered__es8vim2" } }, defaultVariants: {}, compoundVariants: [] });
6
+ var list = _7a468({ defaultClassName: "styles_list__es8vim0", variantClassNames: { type: { bulleted_list_item: "styles_list_type_bulleted_list_item__es8vim1", numbered_list_item: "styles_list_type_numbered_list_item__es8vim2" } }, defaultVariants: {}, compoundVariants: [] });
10
7
  var listItem = "styles_listItem__es8vim3";
11
8
 
12
9
  // src/components/Renderer/components/List/List.tsx
@@ -29,7 +26,7 @@ var ListItem = ({
29
26
  };
30
27
 
31
28
  // src/components/Renderer/components/MemoizedComponents.tsx
32
- import React3 from "react";
29
+ import { memo } from "react";
33
30
 
34
31
  // src/components/Renderer/components/RichText/styles.css.ts
35
32
  import { createRuntimeFn as _7a4682 } from "@vanilla-extract/recipes/createRuntimeFn";
@@ -462,22 +459,16 @@ var LinkPreview = ({ url }) => {
462
459
  var LinkPreview_default = LinkPreview;
463
460
 
464
461
  // src/components/Renderer/components/MemoizedComponents.tsx
465
- var MemoizedRichText = React3.memo(
466
- RichTexts_default,
467
- (prev, next) => {
468
- return JSON.stringify(prev.richTexts) === JSON.stringify(next.richTexts);
469
- }
470
- );
471
- var MemoizedImage = React3.memo(Image_default, (prev, next) => {
462
+ var MemoizedRichText = memo(RichTexts_default, (prev, next) => {
463
+ return JSON.stringify(prev.richTexts) === JSON.stringify(next.richTexts);
464
+ });
465
+ var MemoizedImage = memo(Image_default, (prev, next) => {
472
466
  return prev.src === next.src && prev.alt === next.alt && JSON.stringify(prev.caption) === JSON.stringify(next.caption);
473
467
  });
474
- var MemoizedBookmark = React3.memo(
475
- Bookmark_default,
476
- (prev, next) => {
477
- return prev.url === next.url;
478
- }
479
- );
480
- var MemoizedLinkPreview = React3.memo(
468
+ var MemoizedBookmark = memo(Bookmark_default, (prev, next) => {
469
+ return prev.url === next.url;
470
+ });
471
+ var MemoizedLinkPreview = memo(
481
472
  LinkPreview_default,
482
473
  (prev, next) => {
483
474
  return prev.url === next.url;
@@ -486,46 +477,46 @@ var MemoizedLinkPreview = React3.memo(
486
477
 
487
478
  // src/components/Renderer/components/List/ListBlocksRenderer.tsx
488
479
  import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
489
- var RecursiveListItem = ({ block, index }) => {
490
- const blockProps = {
491
- tabIndex: 0
492
- };
480
+ var RecursiveListItem = ({ block }) => {
493
481
  const blockType = block.type;
494
- const richTexts = block[blockType]?.rich_text;
495
- return /* @__PURE__ */ jsxs4(ListItem, { ...blockProps, children: [
482
+ let content3;
483
+ if (blockType === "bulleted_list_item") {
484
+ content3 = block.bulleted_list_item;
485
+ } else {
486
+ content3 = block.numbered_list_item;
487
+ }
488
+ const richTexts = content3.rich_text;
489
+ const filteredChildren = block.children?.filter(
490
+ (child) => child.type === blockType
491
+ );
492
+ return /* @__PURE__ */ jsxs4(ListItem, { children: [
496
493
  /* @__PURE__ */ jsx7(MemoizedRichText, { richTexts }),
497
- block.children && block.children.length > 0 && /* @__PURE__ */ jsx7(
498
- RecursiveListGroup,
499
- {
500
- blocks: block.children,
501
- type: blockType.split("_")[0]
502
- }
503
- )
494
+ filteredChildren && filteredChildren.length > 0 && /* @__PURE__ */ jsx7(RecursiveListGroup, { blocks: filteredChildren, type: blockType })
504
495
  ] });
505
496
  };
506
497
  var RecursiveListGroup = ({ blocks, type }) => {
507
498
  if (!blocks || blocks.length === 0) return null;
508
- const listItems = blocks.filter(
509
- (block) => block.type === `${type}_list_item`
510
- );
511
- if (listItems.length === 0) return null;
512
499
  return /* @__PURE__ */ jsx7(
513
500
  List,
514
501
  {
515
- as: type === "numbered" ? "ol" : "ul",
502
+ as: type === "numbered_list_item" ? "ol" : "ul",
516
503
  type,
517
504
  role: "list",
518
- "aria-label": type === "bulleted" ? "Bulleted list" : "Numbered list",
519
- children: listItems.map((block, index) => /* @__PURE__ */ jsx7(RecursiveListItem, { block, index }, block.id))
505
+ "aria-label": type,
506
+ children: blocks.map((block) => /* @__PURE__ */ jsx7(RecursiveListItem, { block }, block.id))
520
507
  }
521
508
  );
522
509
  };
523
- var ListBlocksRenderer = ({ blocks, startIndex, type }) => {
510
+ var ListBlocksRenderer = ({
511
+ blocks,
512
+ startIndex,
513
+ type
514
+ }) => {
524
515
  let consecutiveItems = 0;
525
516
  for (let i = startIndex; i < blocks.length; i++) {
526
517
  const block = blocks[i];
527
518
  if (!block) break;
528
- if (block.type === `${type}_list_item`) {
519
+ if (block.type === type) {
529
520
  consecutiveItems++;
530
521
  } else {
531
522
  break;
@@ -535,18 +526,11 @@ var ListBlocksRenderer = ({ blocks, startIndex, type }) => {
535
526
  return /* @__PURE__ */ jsx7(
536
527
  List,
537
528
  {
538
- as: type === "numbered" ? "ol" : "ul",
529
+ as: type === "numbered_list_item" ? "ol" : "ul",
539
530
  type,
540
531
  role: "list",
541
- "aria-label": type === "bulleted" ? "Bulleted list" : "Numbered list",
542
- children: listItems.map((block, index) => /* @__PURE__ */ jsx7(
543
- RecursiveListItem,
544
- {
545
- block,
546
- index: startIndex + index
547
- },
548
- block.id
549
- ))
532
+ "aria-label": type,
533
+ children: listItems.map((block) => /* @__PURE__ */ jsx7(RecursiveListItem, { block }, block.id))
550
534
  }
551
535
  );
552
536
  };
@@ -637,36 +621,27 @@ var columnListContainer = "styles_columnListContainer__wle6we1";
637
621
 
638
622
  // src/components/Renderer/components/Column/Column.tsx
639
623
  import { jsx as jsx10 } from "react/jsx-runtime";
640
- var Column = ({ block, onFocus }) => {
624
+ var Column = ({ block }) => {
641
625
  if (!block || !block.children) return null;
642
- return /* @__PURE__ */ jsx10("div", { className: columnContainer, children: block.children.map((childBlock, index) => /* @__PURE__ */ jsx10(
643
- BlockRenderer_default,
644
- {
645
- block: childBlock,
646
- onFocus,
647
- index,
648
- isColumn: true
649
- },
650
- childBlock.id
651
- )) });
626
+ return /* @__PURE__ */ jsx10("div", { className: columnContainer, children: block.children.map((childBlock) => /* @__PURE__ */ jsx10(BlockRenderer_default, { block: childBlock, isColumn: true }, childBlock.id)) });
652
627
  };
653
628
  var Column_default = Column;
654
629
 
655
630
  // src/components/Renderer/components/Column/ColumnList.tsx
656
631
  import { jsx as jsx11 } from "react/jsx-runtime";
657
- var ColumnList = ({ block, onFocus }) => {
632
+ var ColumnList = ({ block }) => {
658
633
  if (!block || !block.children) return null;
659
- return /* @__PURE__ */ jsx11("div", { className: columnListContainer, children: block.children.map((column) => /* @__PURE__ */ jsx11(Column_default, { block: column, onFocus }, column.id)) });
634
+ return /* @__PURE__ */ jsx11("div", { className: columnListContainer, children: block.children.map((column) => /* @__PURE__ */ jsx11(Column_default, { block: column }, column.id)) });
660
635
  };
661
636
  var ColumnList_default = ColumnList;
662
637
 
663
638
  // src/components/Renderer/components/Quote/styles.css.ts
664
- var container2 = "styles_container__mra9n0";
639
+ var container = "styles_container__mra9n0";
665
640
 
666
641
  // src/components/Renderer/components/Quote/Quote.tsx
667
642
  import { jsx as jsx12 } from "react/jsx-runtime";
668
643
  var Quote = ({ richTexts, tabIndex }) => {
669
- return /* @__PURE__ */ jsx12("blockquote", { className: container2, tabIndex, children: /* @__PURE__ */ jsx12(MemoizedRichText, { richTexts }) });
644
+ return /* @__PURE__ */ jsx12("blockquote", { className: container, tabIndex, children: /* @__PURE__ */ jsx12(MemoizedRichText, { richTexts }) });
670
645
  };
671
646
  var Quote_default = Quote;
672
647
 
@@ -712,23 +687,18 @@ var TableRow_default = TableRow;
712
687
 
713
688
  // src/components/Renderer/components/Table/Table.tsx
714
689
  import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
715
- var Table = ({ block, tabIndex = 0 }) => {
690
+ var Table = ({ block }) => {
716
691
  if (!block.table || !block.children) {
717
692
  return null;
718
693
  }
719
694
  const { table_width, has_column_header, has_row_header } = block.table;
720
- const rows = block.children?.filter(
721
- (child) => child.type === "table_row"
722
- ) || [];
723
- return /* @__PURE__ */ jsx14("div", { className: tableContainer, children: /* @__PURE__ */ jsx14("table", { className: table, tabIndex, children: rows.length > 0 && /* @__PURE__ */ jsxs6(Fragment3, { children: [
695
+ const rows = block.children?.filter((child) => child.type === "table_row") || [];
696
+ return /* @__PURE__ */ jsx14("div", { className: tableContainer, children: /* @__PURE__ */ jsx14("table", { className: table, children: rows.length > 0 && /* @__PURE__ */ jsxs6(Fragment3, { children: [
724
697
  has_column_header && rows[0] && /* @__PURE__ */ jsx14("thead", { children: /* @__PURE__ */ jsx14(TableRow_default, { rowBlock: rows[0], cellClassName: headerCell }) }),
725
- /* @__PURE__ */ jsx14("tbody", { children: rows.filter(
726
- (row) => row !== void 0 && row.type === "table_row"
727
- ).map((row, rowIndex) => {
698
+ /* @__PURE__ */ jsx14("tbody", { children: rows.filter((row) => row !== void 0 && row.type === "table_row").map((row, rowIndex) => {
728
699
  if (has_column_header && rowIndex === 0) {
729
700
  return null;
730
701
  }
731
- const actualRowIndex = has_column_header ? rowIndex - 1 : rowIndex;
732
702
  return /* @__PURE__ */ jsx14(
733
703
  TableRow_default,
734
704
  {
@@ -757,7 +727,7 @@ var toggleIconOpen = "styles_toggleIconOpen__p7ue1z3";
757
727
 
758
728
  // src/components/Renderer/components/Toggle/Toggle.tsx
759
729
  import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
760
- var Toggle = ({ block, tabIndex = 0, onFocus }) => {
730
+ var Toggle = ({ block }) => {
761
731
  const [isOpen, setIsOpen] = useState3(false);
762
732
  if (!block.toggle || !block.children) {
763
733
  return null;
@@ -778,8 +748,6 @@ var Toggle = ({ block, tabIndex = 0, onFocus }) => {
778
748
  className: toggleHeader,
779
749
  onClick: handleToggle,
780
750
  onKeyDown: handleKeyDown,
781
- tabIndex,
782
- onFocus,
783
751
  role: "button",
784
752
  "aria-expanded": isOpen,
785
753
  children: [
@@ -788,56 +756,40 @@ var Toggle = ({ block, tabIndex = 0, onFocus }) => {
788
756
  ]
789
757
  }
790
758
  ),
791
- isOpen && block.children && /* @__PURE__ */ jsx15("div", { className: toggleContent, children: block.children.map((childBlock, index) => /* @__PURE__ */ jsx15(
792
- BlockRenderer_default,
793
- {
794
- block: childBlock,
795
- index
796
- },
797
- childBlock.id
798
- )) })
759
+ isOpen && block.children && /* @__PURE__ */ jsx15("div", { className: toggleContent, children: block.children.map((childBlock) => /* @__PURE__ */ jsx15(BlockRenderer_default, { block: childBlock }, childBlock.id)) })
799
760
  ] });
800
761
  };
801
762
  var Toggle_default = Toggle;
802
763
 
803
764
  // src/components/Renderer/components/Block/BlockRenderer.tsx
804
765
  import { jsx as jsx16 } from "react/jsx-runtime";
805
- var BlockRenderer = ({
806
- block,
807
- onFocus,
808
- index,
809
- isColumn = false
810
- }) => {
766
+ var BlockRenderer = ({ block, isColumn = false }) => {
811
767
  if (!block) return null;
812
- const blockProps = {
813
- tabIndex: 0,
814
- onFocus
815
- };
816
768
  switch (block.type) {
817
769
  case "link_preview":
818
- return /* @__PURE__ */ jsx16(MemoizedLinkPreview, { url: block.link_preview.url, ...blockProps });
770
+ return /* @__PURE__ */ jsx16(MemoizedLinkPreview, { url: block.link_preview.url });
819
771
  case "paragraph":
820
- return /* @__PURE__ */ jsx16(Paragraph, { ...blockProps, children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.paragraph.rich_text }) });
772
+ return /* @__PURE__ */ jsx16(Paragraph, { children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.paragraph.rich_text }) });
821
773
  case "heading_1":
822
- return /* @__PURE__ */ jsx16(Heading1, { ...blockProps, children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.heading_1.rich_text }) });
774
+ return /* @__PURE__ */ jsx16(Heading1, { children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.heading_1.rich_text }) });
823
775
  case "heading_2":
824
- return /* @__PURE__ */ jsx16(Heading2, { ...blockProps, children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.heading_2.rich_text }) });
776
+ return /* @__PURE__ */ jsx16(Heading2, { children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.heading_2.rich_text }) });
825
777
  case "heading_3":
826
- return /* @__PURE__ */ jsx16(Heading3, { ...blockProps, children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.heading_3.rich_text }) });
778
+ return /* @__PURE__ */ jsx16(Heading3, { children: /* @__PURE__ */ jsx16(MemoizedRichText, { richTexts: block.heading_3.rich_text }) });
827
779
  case "code":
828
- return /* @__PURE__ */ jsx16("div", { ...blockProps, children: /* @__PURE__ */ jsx16(
780
+ return /* @__PURE__ */ jsx16("div", { children: /* @__PURE__ */ jsx16(
829
781
  CodeBlock_default,
830
782
  {
831
- code: block.code.rich_text[0].text.content,
783
+ code: block.code.rich_text[0]?.text?.content || "",
832
784
  language: block.code.language,
833
- caption: block.code.caption?.[0]?.plain_text
785
+ caption: block.code.caption
834
786
  }
835
787
  ) });
836
788
  case "image":
837
- return /* @__PURE__ */ jsx16("figure", { ...blockProps, children: /* @__PURE__ */ jsx16(
789
+ return /* @__PURE__ */ jsx16("figure", { children: /* @__PURE__ */ jsx16(
838
790
  MemoizedImage,
839
791
  {
840
- src: block.image.file?.url || block.image.external?.url,
792
+ src: block.image.file?.url || block.image.external?.url || "",
841
793
  alt: block.image.caption?.[0]?.plain_text || "",
842
794
  caption: block.image.caption,
843
795
  format: block.image.format,
@@ -853,32 +805,21 @@ var BlockRenderer = ({
853
805
  }
854
806
  );
855
807
  case "column_list":
856
- return /* @__PURE__ */ jsx16(ColumnList_default, { block, onFocus });
808
+ return /* @__PURE__ */ jsx16(ColumnList_default, { block });
857
809
  case "column":
858
810
  return null;
859
811
  case "quote":
860
- return /* @__PURE__ */ jsx16(Quote_default, { richTexts: block.quote.rich_text, ...blockProps });
812
+ return /* @__PURE__ */ jsx16(Quote_default, { richTexts: block.quote.rich_text });
861
813
  case "table":
862
- return /* @__PURE__ */ jsx16(Table_default2, { block, tabIndex: blockProps.tabIndex });
814
+ return /* @__PURE__ */ jsx16(Table_default2, { block });
863
815
  case "toggle":
864
- return /* @__PURE__ */ jsx16(
865
- Toggle_default,
866
- {
867
- block,
868
- tabIndex: blockProps.tabIndex,
869
- onFocus
870
- }
871
- );
816
+ return /* @__PURE__ */ jsx16(Toggle_default, { block });
872
817
  default:
873
818
  return null;
874
819
  }
875
820
  };
876
821
  var BlockRenderer_default = BlockRenderer;
877
822
 
878
- // src/styles/theme.css.ts
879
- var darkTheme = "theme_darkTheme__sq3jkb1n";
880
- var lightTheme = "theme_lightTheme__sq3jkb1m";
881
-
882
823
  // src/components/Title/index.tsx
883
824
  import { jsx as jsx17 } from "react/jsx-runtime";
884
825
  var Title = ({ title: title3 }) => {
@@ -915,81 +856,69 @@ var Cover = ({ src, alt }) => {
915
856
  };
916
857
  var Cover_default = Cover;
917
858
 
859
+ // src/components/Renderer/styles.css.ts
860
+ var container2 = "styles_container__epva5u0";
861
+
862
+ // src/styles/theme.css.ts
863
+ var darkTheme = "theme_darkTheme__sq3jkb1n";
864
+ var lightTheme = "theme_lightTheme__sq3jkb1m";
865
+
918
866
  // src/components/Renderer/index.tsx
919
867
  import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
920
- var Renderer = React6.memo(
921
- ({ blocks, isDarkMode = false, title: title3, cover, onBlockFocus }) => {
922
- const theme = isDarkMode ? darkTheme : lightTheme;
923
- const [focusedIndex, setFocusedIndex] = useState5(-1);
924
- const handleBlockFocus = useCallback(
925
- (index) => {
926
- setFocusedIndex(index);
927
- onBlockFocus?.(index);
928
- },
929
- [onBlockFocus]
930
- );
931
- const renderedBlocks = useMemo2(() => {
932
- const result = [];
933
- for (let i = 0; i < blocks.length; i++) {
934
- const block = blocks[i];
935
- if (!block) break;
936
- const handleListItem = (listType) => {
937
- const listItemType = `${listType}_list_item`;
938
- if (block.type === listItemType && (i === 0 || blocks[i - 1]?.type !== listItemType)) {
939
- result.push(
940
- /* @__PURE__ */ jsx19(
941
- ListBlocksRenderer_default,
942
- {
943
- blocks,
944
- startIndex: i,
945
- type: listType
946
- },
947
- block.id
948
- )
949
- );
950
- while (i + 1 < blocks.length && blocks[i + 1] && blocks[i + 1]?.type === listItemType) {
951
- i++;
952
- }
953
- return true;
954
- }
955
- return false;
956
- };
957
- if (handleListItem("bulleted") || handleListItem("numbered")) {
958
- continue;
959
- } else {
868
+ var Renderer = memo2(({ blocks, isDarkMode = false, title: title3, cover }) => {
869
+ const theme = isDarkMode ? darkTheme : lightTheme;
870
+ const renderedBlocks = useMemo2(() => {
871
+ const result = [];
872
+ for (let i = 0; i < blocks.length; i++) {
873
+ const block = blocks[i];
874
+ if (!block) break;
875
+ const handleListItem = (listType) => {
876
+ const listItemType = `${listType}_list_item`;
877
+ if (block.type === listItemType && (i === 0 || blocks[i - 1]?.type !== listItemType)) {
960
878
  result.push(
961
879
  /* @__PURE__ */ jsx19(
962
- BlockRenderer_default,
880
+ ListBlocksRenderer_default,
963
881
  {
964
- block,
965
- index: i,
966
- onFocus: () => handleBlockFocus(i)
882
+ blocks,
883
+ startIndex: i,
884
+ type: listItemType
967
885
  },
968
886
  block.id
969
887
  )
970
888
  );
889
+ while (i + 1 < blocks.length && blocks[i + 1] && blocks[i + 1]?.type === listItemType) {
890
+ i++;
891
+ }
892
+ return true;
971
893
  }
894
+ return false;
895
+ };
896
+ if (handleListItem("bulleted") || handleListItem("numbered")) {
897
+ continue;
898
+ } else {
899
+ result.push(/* @__PURE__ */ jsx19(BlockRenderer_default, { block }, block.id));
972
900
  }
973
- return result;
974
- }, [blocks, handleBlockFocus]);
975
- return /* @__PURE__ */ jsxs9(Fragment4, { children: [
976
- cover && /* @__PURE__ */ jsx19(Cover_default, { src: cover, alt: title3 || "Notion page content" }),
977
- /* @__PURE__ */ jsxs9(
978
- "article",
979
- {
980
- className: `${theme} ${container}`,
981
- "aria-label": title3 || "Notion page content",
982
- children: [
983
- title3 && /* @__PURE__ */ jsx19(Title_default, { title: title3 }),
984
- renderedBlocks
985
- ]
986
- }
987
- )
988
- ] });
989
- }
990
- );
901
+ }
902
+ return result;
903
+ }, [blocks]);
904
+ return /* @__PURE__ */ jsxs9(Fragment4, { children: [
905
+ cover && /* @__PURE__ */ jsx19(Cover_default, { src: cover, alt: title3 || "Notion page content" }),
906
+ /* @__PURE__ */ jsxs9(
907
+ "article",
908
+ {
909
+ className: `${theme} ${container2}`,
910
+ "aria-label": title3 || "Notion page content",
911
+ children: [
912
+ title3 && /* @__PURE__ */ jsx19(Title_default, { title: title3 }),
913
+ renderedBlocks
914
+ ]
915
+ }
916
+ )
917
+ ] });
918
+ });
991
919
  Renderer.displayName = "Renderer";
920
+ var Renderer_default = Renderer;
992
921
  export {
993
- Renderer
922
+ Renderer_default as Renderer
994
923
  };
995
924
  //# sourceMappingURL=index.mjs.map