notion-to-jsx 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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;
@@ -564,11 +672,6 @@ var codeBlock = "styles_codeBlock__1qn42yc0";
564
672
 
565
673
  // src/components/Renderer/components/Code/CodeBlock.tsx
566
674
  var import_prismjs = __toESM(require("prismjs"));
567
- var import_prism = require("prismjs/themes/prism.css");
568
- var import_prism_typescript = require("prismjs/components/prism-typescript");
569
- var import_prism_javascript = require("prismjs/components/prism-javascript");
570
- var import_prism_jsx = require("prismjs/components/prism-jsx");
571
- var import_prism_tsx = require("prismjs/components/prism-tsx");
572
675
  var import_jsx_runtime7 = require("react/jsx-runtime");
573
676
  if (typeof window !== "undefined") {
574
677
  window.Prism = import_prismjs.default;
@@ -622,34 +725,195 @@ var Heading3 = ({
622
725
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: heading3, ...props, children });
623
726
  };
624
727
 
625
- // 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
626
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");
627
898
  var BlockRenderer = ({ block, onFocus, index }) => {
628
899
  if (!block) return null;
629
900
  const blockProps = {
630
901
  tabIndex: 0,
631
- onFocus,
632
- "data-block-id": block.id
902
+ onFocus
633
903
  };
634
904
  switch (block.type) {
635
905
  case "link_preview":
636
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
637
- MemoizedLinkPreview,
638
- {
639
- url: block.link_preview.url,
640
- ...blockProps
641
- }
642
- );
906
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemoizedLinkPreview, { url: block.link_preview.url, ...blockProps });
643
907
  case "paragraph":
644
- 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 }) });
645
909
  case "heading_1":
646
- 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 }) });
647
911
  case "heading_2":
648
- 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 }) });
649
913
  case "heading_3":
650
- 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 }) });
651
915
  case "code":
652
- 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)(
653
917
  CodeBlock_default,
654
918
  {
655
919
  code: block.code.rich_text[0].text.content,
@@ -658,7 +922,7 @@ var BlockRenderer = ({ block, onFocus, index }) => {
658
922
  }
659
923
  ) });
660
924
  case "image":
661
- 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)(
662
926
  MemoizedImage,
663
927
  {
664
928
  src: block.image.file?.url || block.image.external?.url,
@@ -668,8 +932,19 @@ var BlockRenderer = ({ block, onFocus, index }) => {
668
932
  }
669
933
  ) });
670
934
  case "bookmark":
671
- 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)(Toggle_default, { block, tabIndex: blockProps.tabIndex, onFocus });
672
946
  default:
947
+ console.log(`\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uBE14\uB85D \uD0C0\uC785: ${block.type}`, block);
673
948
  return null;
674
949
  }
675
950
  };
@@ -680,9 +955,9 @@ var darkTheme = "theme_darkTheme__sq3jkb15";
680
955
  var lightTheme = "theme_lightTheme__sq3jkb14";
681
956
 
682
957
  // src/components/Title/index.tsx
683
- var import_jsx_runtime10 = require("react/jsx-runtime");
958
+ var import_jsx_runtime16 = require("react/jsx-runtime");
684
959
  var Title = ({ title: title3 }) => {
685
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading1, { children: title3 });
960
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading1, { children: title3 });
686
961
  };
687
962
  var Title_default = Title;
688
963
 
@@ -690,26 +965,26 @@ var Title_default = Title;
690
965
  var cover = "styles_cover__p0cp8d0";
691
966
 
692
967
  // src/components/Cover/index.tsx
693
- var import_jsx_runtime11 = require("react/jsx-runtime");
968
+ var import_jsx_runtime17 = require("react/jsx-runtime");
694
969
  var Cover = ({ src, alt }) => {
695
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { src, alt, className: cover });
970
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("img", { src, alt, className: cover });
696
971
  };
697
972
  var Cover_default = Cover;
698
973
 
699
974
  // src/components/Renderer/index.tsx
700
- var import_jsx_runtime12 = require("react/jsx-runtime");
701
- var Renderer = import_react6.default.memo(
975
+ var import_jsx_runtime18 = require("react/jsx-runtime");
976
+ var Renderer = import_react7.default.memo(
702
977
  ({ blocks, isDarkMode = false, title: title3, cover: cover2, onBlockFocus }) => {
703
978
  const theme = isDarkMode ? darkTheme : lightTheme;
704
- const [focusedIndex, setFocusedIndex] = (0, import_react6.useState)(-1);
705
- const handleBlockFocus = (0, import_react6.useCallback)(
979
+ const [focusedIndex, setFocusedIndex] = (0, import_react7.useState)(-1);
980
+ const handleBlockFocus = (0, import_react7.useCallback)(
706
981
  (index) => {
707
982
  setFocusedIndex(index);
708
983
  onBlockFocus?.(index);
709
984
  },
710
985
  [onBlockFocus]
711
986
  );
712
- const renderedBlocks = (0, import_react6.useMemo)(() => {
987
+ const renderedBlocks = (0, import_react7.useMemo)(() => {
713
988
  const result = [];
714
989
  for (let i = 0; i < blocks.length; i++) {
715
990
  const block = blocks[i];
@@ -718,7 +993,7 @@ var Renderer = import_react6.default.memo(
718
993
  const listItemType = `${listType}_list_item`;
719
994
  if (block.type === listItemType && (i === 0 || blocks[i - 1]?.type !== listItemType)) {
720
995
  result.push(
721
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
996
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
722
997
  ListBlocksRenderer_default,
723
998
  {
724
999
  blocks,
@@ -739,7 +1014,7 @@ var Renderer = import_react6.default.memo(
739
1014
  continue;
740
1015
  } else {
741
1016
  result.push(
742
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1017
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
743
1018
  BlockRenderer_default,
744
1019
  {
745
1020
  block,
@@ -753,15 +1028,15 @@ var Renderer = import_react6.default.memo(
753
1028
  }
754
1029
  return result;
755
1030
  }, [blocks, handleBlockFocus]);
756
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
757
- cover2 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Cover_default, { src: cover2, alt: title3 || "Notion page content" }),
758
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1031
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
1032
+ cover2 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Cover_default, { src: cover2, alt: title3 || "Notion page content" }),
1033
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
759
1034
  "article",
760
1035
  {
761
1036
  className: `${theme} ${container}`,
762
1037
  "aria-label": title3 || "Notion page content",
763
1038
  children: [
764
- title3 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Title_default, { title: title3 }),
1039
+ title3 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Title_default, { title: title3 }),
765
1040
  renderedBlocks
766
1041
  ]
767
1042
  }