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.js CHANGED
@@ -35,7 +35,7 @@ __export(index_exports, {
35
35
  module.exports = __toCommonJS(index_exports);
36
36
 
37
37
  // src/components/Renderer/index.tsx
38
- var import_react6 = __toESM(require("react"));
38
+ var import_react7 = __toESM(require("react"));
39
39
 
40
40
  // src/components/Renderer/styles.css.ts
41
41
  var container = "styles_container__epva5u0";
@@ -74,19 +74,29 @@ var richText = (0, import_createRuntimeFn2.createRuntimeFn)({ defaultClassName:
74
74
 
75
75
  // src/components/Renderer/components/RichText/RichTexts.tsx
76
76
  var import_jsx_runtime2 = require("react/jsx-runtime");
77
+ var renderLink = (href, content3) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("a", { href, target: "_blank", rel: "noopener noreferrer", className: link, children: content3 });
77
78
  var RichTexts = ({ richTexts }) => {
78
79
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children: richTexts.map((text, index) => {
79
- const { bold, italic, strikethrough, underline, code, color } = text.annotations;
80
- const content3 = text.text.link ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
81
- "a",
82
- {
83
- href: text.text.link,
84
- target: "_blank",
85
- rel: "noopener noreferrer",
86
- className: link,
87
- children: text.text.content
80
+ const { bold, italic, strikethrough, underline, code } = text.annotations;
81
+ let content3;
82
+ switch (text.type) {
83
+ case "text": {
84
+ if (text.text) {
85
+ const { text: textData } = text;
86
+ content3 = textData.link ? renderLink(textData.link, textData.content) : textData.content;
87
+ } else {
88
+ content3 = text.plain_text;
89
+ }
90
+ break;
91
+ }
92
+ case "mention": {
93
+ content3 = text.href ? renderLink(text.href, text.plain_text) : text.plain_text;
94
+ break;
88
95
  }
89
- ) : text.text.content;
96
+ default: {
97
+ content3 = text.plain_text;
98
+ }
99
+ }
90
100
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
91
101
  "span",
92
102
  {
@@ -283,8 +293,8 @@ var fetchOpenGraphData = async (url) => {
283
293
  if (!response.ok) {
284
294
  throw new Error("Failed to fetch metadata");
285
295
  }
286
- const { status, data: metaData } = data;
287
- if (status !== "success") {
296
+ const { status, data: metaData, statusCode } = data;
297
+ if (status !== "success" || statusCode !== 200) {
288
298
  throw new Error("API returned error status");
289
299
  }
290
300
  const parsedUrl = new URL(url);
@@ -357,13 +367,15 @@ var Bookmark_default = Bookmark;
357
367
  var import_react3 = require("react");
358
368
 
359
369
  // src/components/Renderer/components/LinkPreview/styles.css.ts
360
- var card2 = "styles_card__o1p3m11";
361
370
  var content2 = "styles_content__o1p3m12";
371
+ var description2 = "styles_description__o1p3m16";
372
+ var githubContent = "styles_githubContent__o1p3m18";
373
+ var githubPreview = "styles_githubPreview__o1p3m17";
362
374
  var icon = "styles_icon__o1p3m14";
363
375
  var iconContainer = "styles_iconContainer__o1p3m13";
364
376
  var link3 = "styles_link__o1p3m10";
377
+ var preview = "styles_preview__o1p3m11";
365
378
  var title2 = "styles_title__o1p3m15";
366
- var updatedText = "styles_updatedText__o1p3m16";
367
379
 
368
380
  // src/components/Renderer/components/LinkPreview/LinkPreview.tsx
369
381
  var import_jsx_runtime5 = require("react/jsx-runtime");
@@ -381,6 +393,48 @@ var fetchGitHubRepoData = async (repoPath) => {
381
393
  return null;
382
394
  }
383
395
  };
396
+ var extractFigmaData = (url) => {
397
+ try {
398
+ const parsedUrl = new URL(url);
399
+ if (parsedUrl.hostname.includes("figma.com")) {
400
+ const pathSegments = parsedUrl.pathname.split("/");
401
+ const fileSegment = pathSegments.find(
402
+ (segment) => segment.includes("file")
403
+ );
404
+ if (!fileSegment) return null;
405
+ const fileIdMatch = fileSegment.match(/file\/([^/]+)/);
406
+ const fileId = fileIdMatch ? fileIdMatch[1] : "";
407
+ let fileName = "";
408
+ let mode = "";
409
+ if (pathSegments.length > 3) {
410
+ const encodedName = pathSegments[3];
411
+ if (encodedName) {
412
+ fileName = decodeURIComponent(encodedName).replace(/-/g, " ");
413
+ }
414
+ }
415
+ if (!fileName && parsedUrl.pathname.includes("-")) {
416
+ const nameMatch = parsedUrl.pathname.match(/\/([^/]+)(?:\?|$)/);
417
+ if (nameMatch && nameMatch[1]) {
418
+ fileName = decodeURIComponent(nameMatch[1].replace(/-/g, " "));
419
+ }
420
+ }
421
+ if (parsedUrl.search) {
422
+ const searchParams = new URLSearchParams(parsedUrl.search);
423
+ mode = searchParams.get("mode") || "";
424
+ }
425
+ fileName = fileName || "Figma Design";
426
+ return {
427
+ name: fileName,
428
+ url,
429
+ thumbnailUrl: "https://static.figma.com/app/icon/1/favicon.svg"
430
+ };
431
+ }
432
+ return null;
433
+ } catch (error) {
434
+ console.error("Error parsing Figma URL:", error);
435
+ return null;
436
+ }
437
+ };
384
438
  var extractRepoPathFromUrl = (url) => {
385
439
  try {
386
440
  const parsedUrl = new URL(url);
@@ -397,6 +451,19 @@ var extractRepoPathFromUrl = (url) => {
397
451
  return null;
398
452
  }
399
453
  };
454
+ var getLinkType = (url) => {
455
+ try {
456
+ const parsedUrl = new URL(url);
457
+ if (parsedUrl.hostname === "github.com") {
458
+ return "github";
459
+ } else if (parsedUrl.hostname.includes("figma.com")) {
460
+ return "figma";
461
+ }
462
+ return "unknown";
463
+ } catch {
464
+ return "unknown";
465
+ }
466
+ };
400
467
  var formatUpdatedTime = (dateString) => {
401
468
  const date = new Date(dateString);
402
469
  const now = /* @__PURE__ */ new Date();
@@ -432,35 +499,77 @@ var formatUpdatedTime = (dateString) => {
432
499
  };
433
500
  var LinkPreview = ({ url }) => {
434
501
  const [repoData, setRepoData] = (0, import_react3.useState)(null);
502
+ const [figmaData, setFigmaData] = (0, import_react3.useState)(null);
435
503
  const [loading, setLoading] = (0, import_react3.useState)(true);
504
+ const [linkType, setLinkType] = (0, import_react3.useState)(
505
+ "unknown"
506
+ );
436
507
  (0, import_react3.useEffect)(() => {
437
- const loadRepoData = async () => {
508
+ const loadLinkData = async () => {
438
509
  setLoading(true);
439
- const repoPath = extractRepoPathFromUrl(url);
440
- if (repoPath) {
441
- const data = await fetchGitHubRepoData(repoPath);
442
- setRepoData(data);
510
+ const type = getLinkType(url);
511
+ setLinkType(type);
512
+ if (type === "github") {
513
+ const repoPath = extractRepoPathFromUrl(url);
514
+ if (repoPath) {
515
+ const data = await fetchGitHubRepoData(repoPath);
516
+ setRepoData(data);
517
+ }
518
+ } else if (type === "figma") {
519
+ const data = extractFigmaData(url);
520
+ setFigmaData(data);
443
521
  }
444
522
  setLoading(false);
445
523
  };
446
- loadRepoData();
524
+ loadLinkData();
447
525
  }, [url]);
448
526
  const repoName = repoData?.name || extractRepoPathFromUrl(url)?.split("/")[1] || "Repository";
449
527
  const updatedTimeText = repoData?.updated_at ? formatUpdatedTime(repoData.updated_at) : "";
450
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: link3, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: card2, children: [
451
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: iconContainer, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
452
- "img",
453
- {
454
- src: repoData?.owner?.avatar_url || "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
455
- alt: "Repository icon",
456
- className: icon
457
- }
458
- ) }),
459
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: content2, children: [
460
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: title2, children: repoName }),
461
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: updatedText, children: loading ? "Loading..." : `NotionX \u2022 ${updatedTimeText}` })
462
- ] })
463
- ] }) });
528
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
529
+ "a",
530
+ {
531
+ href: url,
532
+ target: "_blank",
533
+ rel: "noopener noreferrer",
534
+ className: link3,
535
+ children: linkType === "figma" && figmaData ? (
536
+ // Figma 프리뷰 렌더링
537
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: preview, children: [
538
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: iconContainer, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
539
+ "img",
540
+ {
541
+ src: figmaData.thumbnailUrl || "https://static.figma.com/app/icon/1/favicon.svg",
542
+ alt: "Figma icon",
543
+ className: icon
544
+ }
545
+ ) }),
546
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: content2, children: [
547
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: title2, children: figmaData.name }),
548
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: description2, children: "www.figma.com" })
549
+ ] })
550
+ ] })
551
+ ) : linkType === "github" ? (
552
+ // GitHub 프리뷰 렌더링
553
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: `${preview} ${githubPreview}`, children: [
554
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: iconContainer, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
555
+ "img",
556
+ {
557
+ src: repoData?.owner?.avatar_url || "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
558
+ alt: "Repository icon",
559
+ className: icon
560
+ }
561
+ ) }),
562
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: `${content2} ${githubContent}`, children: [
563
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: title2, children: repoName }),
564
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: description2, children: loading ? "Loading..." : `${repoName} \u2022 ${updatedTimeText}` })
565
+ ] })
566
+ ] })
567
+ ) : (
568
+ // 기본 링크 프리뷰 렌더링
569
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: preview, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: content2, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: title2, children: url }) }) })
570
+ )
571
+ }
572
+ );
464
573
  };
465
574
  var LinkPreview_default = LinkPreview;
466
575
 
@@ -491,8 +600,7 @@ var MemoizedLinkPreview = import_react4.default.memo(
491
600
  var import_jsx_runtime6 = require("react/jsx-runtime");
492
601
  var RecursiveListItem = ({ block, index }) => {
493
602
  const blockProps = {
494
- tabIndex: 0,
495
- "data-block-id": block.id
603
+ tabIndex: 0
496
604
  };
497
605
  const blockType = block.type;
498
606
  const richTexts = block[blockType]?.rich_text;
@@ -617,34 +725,195 @@ var Heading3 = ({
617
725
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: heading3, ...props, children });
618
726
  };
619
727
 
620
- // src/components/Renderer/components/Block/BlockRenderer.tsx
728
+ // src/components/Renderer/components/Column/styles.css.ts
729
+ var columnContainer = "styles_columnContainer__wle6we0";
730
+ var columnListContainer = "styles_columnListContainer__wle6we1";
731
+
732
+ // src/components/Renderer/components/Column/Column.tsx
621
733
  var import_jsx_runtime9 = require("react/jsx-runtime");
734
+ var Column = ({ block, onFocus }) => {
735
+ if (!block || !block.children) return null;
736
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: columnContainer, children: block.children.map((childBlock, index) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
737
+ BlockRenderer_default,
738
+ {
739
+ block: childBlock,
740
+ onFocus,
741
+ index
742
+ },
743
+ childBlock.id
744
+ )) });
745
+ };
746
+ var Column_default = Column;
747
+
748
+ // src/components/Renderer/components/Column/ColumnList.tsx
749
+ var import_jsx_runtime10 = require("react/jsx-runtime");
750
+ var ColumnList = ({ block, onFocus }) => {
751
+ if (!block || !block.children) return null;
752
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: columnListContainer, children: block.children.map((column) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Column_default, { block: column, onFocus }, column.id)) });
753
+ };
754
+ var ColumnList_default = ColumnList;
755
+
756
+ // src/components/Renderer/components/Quote/styles.css.ts
757
+ var container2 = "styles_container__mra9n0";
758
+
759
+ // src/components/Renderer/components/Quote/Quote.tsx
760
+ var import_jsx_runtime11 = require("react/jsx-runtime");
761
+ var Quote = ({ richTexts, tabIndex }) => {
762
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("blockquote", { className: container2, tabIndex, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(MemoizedRichText, { richTexts }) });
763
+ };
764
+ var Quote_default = Quote;
765
+
766
+ // src/components/Renderer/components/Table/styles.css.ts
767
+ var firstCell = "styles_firstCell__1rvbzfo4";
768
+ var hasRowHeader = "styles_hasRowHeader__1rvbzfo6";
769
+ var headerCell = "styles_headerCell__1rvbzfo2";
770
+ var lastCell = "styles_lastCell__1rvbzfo5";
771
+ var table = "styles_table__1rvbzfo1";
772
+ var tableCell = "styles_tableCell__1rvbzfo3";
773
+ var tableContainer = "styles_tableContainer__1rvbzfo0";
774
+
775
+ // src/components/Renderer/components/Table/TableRow.tsx
776
+ var import_jsx_runtime12 = require("react/jsx-runtime");
777
+ var TableRow = ({
778
+ rowBlock,
779
+ cellClassName = "",
780
+ rowHeaderIndex = -1
781
+ }) => {
782
+ if (!rowBlock.table_row?.cells) {
783
+ return null;
784
+ }
785
+ const { cells } = rowBlock.table_row;
786
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { children: cells.map((cell, index) => {
787
+ const isFirstCell = index === 0;
788
+ const isLastCell = index === cells.length - 1;
789
+ const isRowHeader = index === rowHeaderIndex;
790
+ let cellClasses = [tableCell, cellClassName];
791
+ if (isFirstCell) cellClasses.push(firstCell);
792
+ if (isLastCell) cellClasses.push(lastCell);
793
+ if (isRowHeader) cellClasses.push(hasRowHeader);
794
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
795
+ "td",
796
+ {
797
+ className: cellClasses.filter(Boolean).join(" "),
798
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MemoizedRichText, { richTexts: cell })
799
+ },
800
+ `${rowBlock.id}-cell-${index}`
801
+ );
802
+ }) });
803
+ };
804
+ var TableRow_default = TableRow;
805
+
806
+ // src/components/Renderer/components/Table/Table.tsx
807
+ var import_jsx_runtime13 = require("react/jsx-runtime");
808
+ var Table = ({ block, tabIndex = 0 }) => {
809
+ if (!block.table || !block.children) {
810
+ return null;
811
+ }
812
+ const { table_width, has_column_header, has_row_header } = block.table;
813
+ const rows = block.children?.filter(
814
+ (child) => child.type === "table_row"
815
+ ) || [];
816
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: tableContainer, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("table", { className: table, tabIndex, children: rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
817
+ has_column_header && rows[0] && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TableRow_default, { rowBlock: rows[0], cellClassName: headerCell }) }),
818
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("tbody", { children: rows.filter(
819
+ (row) => row !== void 0 && row.type === "table_row"
820
+ ).map((row, rowIndex) => {
821
+ if (has_column_header && rowIndex === 0) {
822
+ return null;
823
+ }
824
+ const actualRowIndex = has_column_header ? rowIndex - 1 : rowIndex;
825
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
826
+ TableRow_default,
827
+ {
828
+ rowBlock: row,
829
+ rowHeaderIndex: has_row_header ? 0 : -1
830
+ },
831
+ row.id
832
+ );
833
+ }) })
834
+ ] }) }) });
835
+ };
836
+ var Table_default = Table;
837
+
838
+ // src/components/Renderer/components/Table/index.ts
839
+ var Table_default2 = Table_default;
840
+
841
+ // src/components/Renderer/components/Toggle/Toggle.tsx
842
+ var import_react6 = require("react");
843
+
844
+ // src/components/Renderer/components/Toggle/styles.css.ts
845
+ var toggleContainer = "styles_toggleContainer__p7ue1z0";
846
+ var toggleContent = "styles_toggleContent__p7ue1z4";
847
+ var toggleHeader = "styles_toggleHeader__p7ue1z1";
848
+ var toggleIcon = "styles_toggleIcon__p7ue1z2";
849
+ var toggleIconOpen = "styles_toggleIconOpen__p7ue1z3";
850
+
851
+ // src/components/Renderer/components/Toggle/Toggle.tsx
852
+ var import_jsx_runtime14 = require("react/jsx-runtime");
853
+ var Toggle = ({ block, tabIndex = 0, onFocus }) => {
854
+ const [isOpen, setIsOpen] = (0, import_react6.useState)(false);
855
+ if (!block.toggle || !block.children) {
856
+ return null;
857
+ }
858
+ const handleToggle = () => {
859
+ setIsOpen(!isOpen);
860
+ };
861
+ const handleKeyDown = (e) => {
862
+ if (e.key === "Enter" || e.key === " ") {
863
+ e.preventDefault();
864
+ handleToggle();
865
+ }
866
+ };
867
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: toggleContainer, children: [
868
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
869
+ "div",
870
+ {
871
+ className: toggleHeader,
872
+ onClick: handleToggle,
873
+ onKeyDown: handleKeyDown,
874
+ tabIndex,
875
+ onFocus,
876
+ role: "button",
877
+ "aria-expanded": isOpen,
878
+ children: [
879
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: `${toggleIcon} ${isOpen ? toggleIconOpen : ""}`, children: "\u25B6" }),
880
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(RichTexts_default, { richTexts: block.toggle.rich_text })
881
+ ]
882
+ }
883
+ ),
884
+ isOpen && block.children && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: toggleContent, children: block.children.map((childBlock, index) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
885
+ BlockRenderer_default,
886
+ {
887
+ block: childBlock,
888
+ index
889
+ },
890
+ childBlock.id
891
+ )) })
892
+ ] });
893
+ };
894
+ var Toggle_default = Toggle;
895
+
896
+ // src/components/Renderer/components/Block/BlockRenderer.tsx
897
+ var import_jsx_runtime15 = require("react/jsx-runtime");
622
898
  var BlockRenderer = ({ block, onFocus, index }) => {
623
899
  if (!block) return null;
624
900
  const blockProps = {
625
901
  tabIndex: 0,
626
- onFocus,
627
- "data-block-id": block.id
902
+ onFocus
628
903
  };
629
904
  switch (block.type) {
630
905
  case "link_preview":
631
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
632
- MemoizedLinkPreview,
633
- {
634
- url: block.link_preview.url,
635
- ...blockProps
636
- }
637
- );
906
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedLinkPreview, { url: block.link_preview.url, ...blockProps });
638
907
  case "paragraph":
639
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Paragraph, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MemoizedRichText, { richTexts: block.paragraph.rich_text }) });
908
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Paragraph, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedRichText, { richTexts: block.paragraph.rich_text }) });
640
909
  case "heading_1":
641
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading1, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MemoizedRichText, { richTexts: block.heading_1.rich_text }) });
910
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading1, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedRichText, { richTexts: block.heading_1.rich_text }) });
642
911
  case "heading_2":
643
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading2, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MemoizedRichText, { richTexts: block.heading_2.rich_text }) });
912
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading2, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedRichText, { richTexts: block.heading_2.rich_text }) });
644
913
  case "heading_3":
645
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading3, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MemoizedRichText, { richTexts: block.heading_3.rich_text }) });
914
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading3, { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedRichText, { richTexts: block.heading_3.rich_text }) });
646
915
  case "code":
647
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
916
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
648
917
  CodeBlock_default,
649
918
  {
650
919
  code: block.code.rich_text[0].text.content,
@@ -653,7 +922,7 @@ var BlockRenderer = ({ block, onFocus, index }) => {
653
922
  }
654
923
  ) });
655
924
  case "image":
656
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("figure", { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
925
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("figure", { ...blockProps, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
657
926
  MemoizedImage,
658
927
  {
659
928
  src: block.image.file?.url || block.image.external?.url,
@@ -663,7 +932,24 @@ var BlockRenderer = ({ block, onFocus, index }) => {
663
932
  }
664
933
  ) });
665
934
  case "bookmark":
666
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MemoizedBookmark, { url: block.bookmark.url });
935
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedBookmark, { url: block.bookmark.url });
936
+ case "column_list":
937
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ColumnList_default, { block, onFocus });
938
+ case "column":
939
+ return null;
940
+ case "quote":
941
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Quote_default, { richTexts: block.quote.rich_text, ...blockProps });
942
+ case "table":
943
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Table_default2, { block, tabIndex: blockProps.tabIndex });
944
+ case "toggle":
945
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
946
+ Toggle_default,
947
+ {
948
+ block,
949
+ tabIndex: blockProps.tabIndex,
950
+ onFocus
951
+ }
952
+ );
667
953
  default:
668
954
  return null;
669
955
  }
@@ -675,9 +961,9 @@ var darkTheme = "theme_darkTheme__sq3jkb15";
675
961
  var lightTheme = "theme_lightTheme__sq3jkb14";
676
962
 
677
963
  // src/components/Title/index.tsx
678
- var import_jsx_runtime10 = require("react/jsx-runtime");
964
+ var import_jsx_runtime16 = require("react/jsx-runtime");
679
965
  var Title = ({ title: title3 }) => {
680
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading1, { children: title3 });
966
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading1, { children: title3 });
681
967
  };
682
968
  var Title_default = Title;
683
969
 
@@ -685,26 +971,26 @@ var Title_default = Title;
685
971
  var cover = "styles_cover__p0cp8d0";
686
972
 
687
973
  // src/components/Cover/index.tsx
688
- var import_jsx_runtime11 = require("react/jsx-runtime");
974
+ var import_jsx_runtime17 = require("react/jsx-runtime");
689
975
  var Cover = ({ src, alt }) => {
690
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { src, alt, className: cover });
976
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("img", { src, alt, className: cover });
691
977
  };
692
978
  var Cover_default = Cover;
693
979
 
694
980
  // src/components/Renderer/index.tsx
695
- var import_jsx_runtime12 = require("react/jsx-runtime");
696
- var Renderer = import_react6.default.memo(
981
+ var import_jsx_runtime18 = require("react/jsx-runtime");
982
+ var Renderer = import_react7.default.memo(
697
983
  ({ blocks, isDarkMode = false, title: title3, cover: cover2, onBlockFocus }) => {
698
984
  const theme = isDarkMode ? darkTheme : lightTheme;
699
- const [focusedIndex, setFocusedIndex] = (0, import_react6.useState)(-1);
700
- const handleBlockFocus = (0, import_react6.useCallback)(
985
+ const [focusedIndex, setFocusedIndex] = (0, import_react7.useState)(-1);
986
+ const handleBlockFocus = (0, import_react7.useCallback)(
701
987
  (index) => {
702
988
  setFocusedIndex(index);
703
989
  onBlockFocus?.(index);
704
990
  },
705
991
  [onBlockFocus]
706
992
  );
707
- const renderedBlocks = (0, import_react6.useMemo)(() => {
993
+ const renderedBlocks = (0, import_react7.useMemo)(() => {
708
994
  const result = [];
709
995
  for (let i = 0; i < blocks.length; i++) {
710
996
  const block = blocks[i];
@@ -713,7 +999,7 @@ var Renderer = import_react6.default.memo(
713
999
  const listItemType = `${listType}_list_item`;
714
1000
  if (block.type === listItemType && (i === 0 || blocks[i - 1]?.type !== listItemType)) {
715
1001
  result.push(
716
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1002
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
717
1003
  ListBlocksRenderer_default,
718
1004
  {
719
1005
  blocks,
@@ -734,7 +1020,7 @@ var Renderer = import_react6.default.memo(
734
1020
  continue;
735
1021
  } else {
736
1022
  result.push(
737
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1023
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
738
1024
  BlockRenderer_default,
739
1025
  {
740
1026
  block,
@@ -748,15 +1034,15 @@ var Renderer = import_react6.default.memo(
748
1034
  }
749
1035
  return result;
750
1036
  }, [blocks, handleBlockFocus]);
751
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
752
- cover2 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Cover_default, { src: cover2, alt: title3 || "Notion page content" }),
753
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1037
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
1038
+ cover2 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Cover_default, { src: cover2, alt: title3 || "Notion page content" }),
1039
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
754
1040
  "article",
755
1041
  {
756
1042
  className: `${theme} ${container}`,
757
1043
  "aria-label": title3 || "Notion page content",
758
1044
  children: [
759
- title3 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Title_default, { title: title3 }),
1045
+ title3 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Title_default, { title: title3 }),
760
1046
  renderedBlocks
761
1047
  ]
762
1048
  }