notion-to-jsx 1.2.8 → 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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Renderer/index.tsx","../src/components/Renderer/styles.css.ts","../src/components/Renderer/components/List/styles.css.ts","../src/components/Renderer/components/List/List.tsx","../src/components/Renderer/components/MemoizedComponents.tsx","../src/components/Renderer/components/RichText/styles.css.ts","../src/components/Renderer/components/RichText/RichTexts.tsx","../src/components/Renderer/components/Image/Image.tsx","../src/components/Renderer/components/Image/styles.css.ts","../src/components/Skeleton/styles.css.ts","../src/components/Skeleton/index.tsx","../src/components/Renderer/components/Bookmark/styles.css.ts","../src/components/Renderer/components/Bookmark/Bookmark.tsx","../src/components/Renderer/components/LinkPreview/LinkPreview.tsx","../src/components/Renderer/components/LinkPreview/styles.css.ts","../src/components/Renderer/components/List/ListBlocksRenderer.tsx","../src/components/Renderer/components/Code/CodeBlock.tsx","../src/components/Renderer/components/Code/styles.css.ts","../src/components/Renderer/components/Typography/styles.css.ts","../src/components/Renderer/components/Typography/Typography.tsx","../src/components/Renderer/components/Column/styles.css.ts","../src/components/Renderer/components/Column/Column.tsx","../src/components/Renderer/components/Column/ColumnList.tsx","../src/components/Renderer/components/Quote/styles.css.ts","../src/components/Renderer/components/Quote/Quote.tsx","../src/components/Renderer/components/Table/styles.css.ts","../src/components/Renderer/components/Table/TableRow.tsx","../src/components/Renderer/components/Table/Table.tsx","../src/components/Renderer/components/Table/index.ts","../src/components/Renderer/components/Toggle/Toggle.tsx","../src/components/Renderer/components/Toggle/styles.css.ts","../src/components/Renderer/components/Block/BlockRenderer.tsx","../src/styles/theme.css.ts","../src/components/Title/index.tsx","../src/components/Cover/index.tsx","../src/components/Cover/styles.css.ts"],"sourcesContent":["import React, { useState, useMemo, useCallback } from 'react';\nimport { container } from './styles.css';\n\nimport { NotionBlock } from '../../types';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { ListBlocksRenderer } from './components/List';\nimport { BlockRenderer } from './components/Block';\nimport '../../styles/reset.css';\nimport { darkTheme, lightTheme } from '../../styles/theme.css';\nimport Title from '../Title';\nimport Cover from '../Cover';\n\ninterface Props {\n blocks: NotionBlock[];\n title?: string;\n cover?: string;\n isDarkMode?: boolean;\n onBlockFocus?: (index: number) => void;\n}\nexport const Renderer: React.FC<Props> = React.memo(\n ({ blocks, isDarkMode = false, title, cover, onBlockFocus }) => {\n const theme = isDarkMode ? darkTheme : lightTheme;\n const [focusedIndex, setFocusedIndex] = useState<number>(-1);\n\n const handleBlockFocus = useCallback(\n (index: number) => {\n setFocusedIndex(index);\n onBlockFocus?.(index);\n },\n [onBlockFocus]\n );\n\n const renderedBlocks = useMemo(() => {\n const result: JSX.Element[] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n if (!block) break;\n\n // 리스트 아이템 타입 처리를 위한 공통 함수\n const handleListItem = (listType: 'bulleted' | 'numbered') => {\n const listItemType = `${listType}_list_item`;\n\n if (\n block.type === listItemType &&\n (i === 0 || blocks[i - 1]?.type !== listItemType)\n ) {\n result.push(\n <ListBlocksRenderer\n key={block.id}\n blocks={blocks}\n startIndex={i}\n type={listType}\n />\n );\n\n // 연속된 같은 타입의 리스트 아이템 건너뛰기\n while (\n i + 1 < blocks.length &&\n blocks[i + 1] &&\n blocks[i + 1]?.type === listItemType\n ) {\n i++;\n }\n\n return true;\n }\n\n return false;\n };\n\n // 순서대로 각 리스트 타입 처리 시도\n if (handleListItem('bulleted') || handleListItem('numbered')) {\n // 리스트 아이템이 처리되었으므로 다음 블록으로 진행\n continue;\n } else {\n // 리스트 아이템이 아닌 일반 블록 처리\n result.push(\n <BlockRenderer\n key={block.id}\n block={block}\n index={i}\n onFocus={() => handleBlockFocus(i)}\n />\n );\n }\n }\n\n return result;\n }, [blocks, handleBlockFocus]);\n\n return (\n <>\n {cover && <Cover src={cover} alt={title || 'Notion page content'} />}\n <article\n className={`${theme} ${container}`}\n aria-label={title || 'Notion page content'}\n >\n {title && <Title title={title} />}\n {renderedBlocks}\n </article>\n </>\n );\n }\n);\n\nRenderer.displayName = 'Renderer';\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb250YWluZXJfX2VwdmE1dTAgewogIG1heC13aWR0aDogNzIwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14bF9fc3EzamtiMWQpOwp9CkBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkgewogIC5zdHlsZXNfY29udGFpbmVyX19lcHZhNXUwIHsKICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWRfX3NxM2prYjFiKTsKICB9Cn0=';\nexport var container = 'styles_container__epva5u0';","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/List/styles.css.ts.vanilla.css?source=LnN0eWxlc19saXN0X19lczh2aW0wIHsKICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2IxOCkgdmFyKC0tc3BhY2luZy14eHNfX3NxM2prYjE3KTsKICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbGdfX3NxM2prYjFjKTsKfQouc3R5bGVzX2xpc3RfdHlwZV9idWxsZXRlZF9fZXM4dmltMSB7CiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjOwp9Ci5zdHlsZXNfbGlzdF90eXBlX251bWJlcmVkX19lczh2aW0yIHsKICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7Cn0KLnN0eWxlc19saXN0SXRlbV9fZXM4dmltMyB7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14eHNfX3NxM2prYjE3KSAwOwp9';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var list = _7a468({defaultClassName:'styles_list__es8vim0',variantClassNames:{type:{bulleted:'styles_list_type_bulleted__es8vim1',numbered:'styles_list_type_numbered__es8vim2'}},defaultVariants:{},compoundVariants:[]});\nexport var listItem = 'styles_listItem__es8vim3';","import React from 'react';\nimport { list, listItem } from './styles.css';\n\ninterface ListProps\n extends React.HTMLAttributes<HTMLUListElement | HTMLOListElement> {\n as?: 'ul' | 'ol';\n type: 'bulleted' | 'numbered';\n children: React.ReactNode;\n}\n\nexport const List: React.FC<ListProps> = ({\n as: Component = 'ul',\n type,\n className,\n children,\n ...props\n}) => {\n return (\n <Component className={list({ type })} {...props}>\n {children}\n </Component>\n );\n};\n\ninterface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode;\n}\n\nexport const ListItem: React.FC<ListItemProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <li className={listItem} {...props}>\n {children}\n </li>\n );\n};\n","import React from 'react';\nimport RichText, { RichTextItem, RichTextProps } from './RichText/RichTexts';\nimport { Image, ImageProps } from './Image';\nimport Bookmark, { type BookmarkProps } from './Bookmark/Bookmark';\nimport LinkPreview, { type LinkPreviewProps } from './LinkPreview/LinkPreview';\n\nexport const MemoizedRichText = React.memo<RichTextProps>(\n RichText,\n (prev, next) => {\n return JSON.stringify(prev.richTexts) === JSON.stringify(next.richTexts);\n }\n);\n\nexport const MemoizedImage = React.memo<ImageProps>(Image, (prev, next) => {\n return (\n prev.src === next.src &&\n prev.alt === next.alt &&\n JSON.stringify(prev.caption) === JSON.stringify(next.caption)\n );\n});\n\nexport const MemoizedBookmark = React.memo<BookmarkProps>(\n Bookmark,\n (prev, next) => {\n return prev.url === next.url;\n }\n);\n\nexport const MemoizedLinkPreview = React.memo<LinkPreviewProps>(\n LinkPreview,\n (prev, next) => {\n return prev.url === next.url;\n }\n);\n\n// 타입 가드 유틸리티\nexport const isRichTextArray = (value: unknown): value is RichTextItem[] => {\n if (!Array.isArray(value)) return false;\n return value.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n item.type === 'text'\n );\n};\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/RichText/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA5WWwW6jMBCG73kKH7cHR8lmq7b01sM+wGqlPSKDB3AwNh1MKbvqu6+wa9IEgsMJifn/78cexvK2Mb2EJkaRFr/h3cRxxrOD6Xbk34aQTCtDM1YJ2UdEqAJQmOfNx2Z76Uq05LHBFrx/f/J3IPLCRGTQzJqFYVKkZ/bvJ7tVR8SJZv2NQVGCKVC3eXGGOViMgXdDOaQamRFaRUQKBfRTP0tsFQccVGe0H/O0UTyLSjU/p9xbSsLSMkfdKh6RN4bfKE211NjQQU+FGngvoyaOm9fDsUwe7543hNSMc6HyiOy2e6jIbnu4h2ooJBo5IEXGRdt4rnv5y76jTeVRe7Cssw45g+lrnSOri54O1T+2SCvgoj259ye3/z9m3T9t0a7Ke5uTtRF/YVjG4+cC7B5c3xBPeLAELppaMvtj2oYmUqflUHgDNCJlkjIpchWRSnAur3VHaoxzZL1vz4Ntz9yHKD30mzqx+5CnuwVqgrpTHvsYwn6qHZctcTUylY+/01MI7OWOnCyRe5BSd57MQmQvd+R0iZwjwLgXSXiLrdpx+eIey9NgpcEttmJHhSVq3WItRy4Pcb3ckbNFslCl50KQa8WOmi9REbiHZiGo1Tpmsdwx1sfJlxPI8fOL04uGJiWZHGIiPDTT3GJF7pThgo83TNU0WaxInoG46PKGsZtGH1dEz0BctAzP5TS5XNXmS4YLroKDO82Va9p8iXCx6obJngZXK4JnIC5aB0d/GqzWBF8iXGwdOhumqXpF6iXBhb5eC61qK9v5qDp8B5u/QskvZ+Xr12NtvIguX8YI6TRymiCwMiL2QYc3Q0W/AWZSd7RDVp8XP/4Dd/4tTRMLAAA=';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var link = 'styles_link__fdf3twq';\nexport var richText = _7a468({defaultClassName:'styles_richText__fdf3tw0',variantClassNames:{bold:{true:'styles_richText_bold_true__fdf3tw1'},italic:{true:'styles_richText_italic_true__fdf3tw2'},strikethrough:{true:'styles_richText_strikethrough_true__fdf3tw3'},underline:{true:'styles_richText_underline_true__fdf3tw4'},code:{true:'styles_richText_code_true__fdf3tw5'},color:{'default':'styles_richText_color_default__fdf3tw6',gray:'styles_richText_color_gray__fdf3tw7',brown:'styles_richText_color_brown__fdf3tw8',orange:'styles_richText_color_orange__fdf3tw9',yellow:'styles_richText_color_yellow__fdf3twa',green:'styles_richText_color_green__fdf3twb',blue:'styles_richText_color_blue__fdf3twc',purple:'styles_richText_color_purple__fdf3twd',pink:'styles_richText_color_pink__fdf3twe',red:'styles_richText_color_red__fdf3twf',gray_background:'styles_richText_color_gray_background__fdf3twg',brown_background:'styles_richText_color_brown_background__fdf3twh',orange_background:'styles_richText_color_orange_background__fdf3twi',yellow_background:'styles_richText_color_yellow_background__fdf3twj',green_background:'styles_richText_color_green_background__fdf3twk',blue_background:'styles_richText_color_blue_background__fdf3twl',purple_background:'styles_richText_color_purple_background__fdf3twm',pink_background:'styles_richText_color_pink_background__fdf3twn',red_background:'styles_richText_color_red_background__fdf3two'}},defaultVariants:{},compoundVariants:[[{strikethrough:true,underline:true},'styles_richText_compound_0__fdf3twp']]});","import React from 'react';\nimport { richText, link } from './styles.css';\n\n// 지원하는 Notion 색상 타입 정의\ntype NotionColor =\n | 'default'\n | 'gray'\n | 'brown'\n | 'orange'\n | 'yellow'\n | 'green'\n | 'blue'\n | 'purple'\n | 'pink'\n | 'red'\n | 'gray_background'\n | 'brown_background'\n | 'orange_background'\n | 'yellow_background'\n | 'green_background'\n | 'blue_background'\n | 'purple_background'\n | 'pink_background'\n | 'red_background';\n\nexport interface RichTextItem {\n type: 'text' | 'mention' | string;\n annotations: {\n bold: boolean;\n italic: boolean;\n strikethrough: boolean;\n underline: boolean;\n code: boolean;\n color: string;\n };\n bold: boolean;\n italic: boolean;\n strikethrough: boolean;\n underline: boolean;\n code: boolean;\n color: string;\n plain_text: string;\n href: string | null;\n\n text?: {\n content: string;\n link: {\n url: string | null;\n } | null;\n };\n}\n\nexport interface RichTextProps {\n richTexts: RichTextItem[];\n}\n\n/**\n * 링크 컴포넌트를 생성하는 함수\n */\nconst renderLink = (href: string, content: React.ReactNode) => (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={link}>\n {content}\n </a>\n);\n\nconst RichTexts: React.FC<RichTextProps> = ({ richTexts }) => {\n return (\n <>\n {richTexts.map((text, index) => {\n const { bold, italic, strikethrough, underline, code, color } =\n text.annotations;\n\n // 컨텐츠 렌더링 로직\n let content: React.ReactNode;\n\n // TODO: Refactor\n switch (text.type) {\n case 'text': {\n if (text.text) {\n const { text: textData } = text;\n\n content = textData.link?.url\n ? renderLink(textData.link.url, textData.content)\n : textData.content;\n } else {\n content = text.plain_text;\n }\n break;\n }\n\n case 'mention': {\n content = text.href\n ? renderLink(text.href, text.plain_text)\n : text.plain_text;\n break;\n }\n\n default: {\n content = text.plain_text;\n }\n }\n\n // NOTION COLOR 적용\n // color 값이 지원하는 색상이 아닌 경우 undefined로 처리하여 타입 에러 방지\n const notionColors: NotionColor[] = [\n 'default',\n 'gray',\n 'brown',\n 'orange',\n 'yellow',\n 'green',\n 'blue',\n 'purple',\n 'pink',\n 'red',\n 'gray_background',\n 'brown_background',\n 'orange_background',\n 'yellow_background',\n 'green_background',\n 'blue_background',\n 'purple_background',\n 'pink_background',\n 'red_background',\n ];\n\n const safeColor = notionColors.includes(color as NotionColor)\n ? (color as NotionColor)\n : undefined;\n\n return (\n <span\n key={index}\n className={richText({\n bold,\n italic,\n strikethrough,\n underline,\n code,\n color: safeColor,\n })}\n >\n {content}\n </span>\n );\n })}\n </>\n );\n};\n\nexport default RichTexts;\n","import React, { useState } from 'react';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport {\n imageContainer,\n imageWrapper,\n imageStyle,\n caption,\n skeletonWrapper,\n} from './styles.css';\nimport { RichTextItem } from '../RichText/RichTexts';\nimport Skeleton from '../../../Skeleton';\n\nexport interface ImageFormat {\n block_width?: number;\n block_height?: number;\n block_aspect_ratio?: number;\n}\n\nexport interface ImageProps {\n src: string;\n alt: string;\n caption?: RichTextItem[];\n priority?: boolean;\n format?: ImageFormat;\n isColumn?: boolean;\n}\n\nconst MAX_WIDTH = 720;\n\n// 이미지 태그에 사용되는 aspectRatio 스타일\nconst getImageTagStyle = (format?: ImageFormat) => {\n return format?.block_aspect_ratio\n ? { aspectRatio: `${format.block_aspect_ratio}` }\n : undefined;\n};\n\nconst Image: React.FC<ImageProps> = ({\n src,\n alt,\n caption: imageCaption,\n format,\n isColumn = false,\n}) => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n return (\n <div className={imageContainer}>\n <div className={imageWrapper} style={getImageStyles(format, isColumn)}>\n <div className={skeletonWrapper({ isLoaded })}>\n <Skeleton variant=\"image\" />\n </div>\n <img\n className={imageStyle({\n loaded: isLoaded,\n hasAspectRatio: !!format?.block_aspect_ratio,\n })}\n src={src}\n alt={alt}\n loading=\"lazy\"\n onLoad={() => setIsLoaded(true)}\n width={format?.block_width}\n height={format?.block_height}\n style={getImageTagStyle(format)}\n />\n </div>\n {imageCaption && imageCaption.length > 0 && (\n <figcaption className={caption}>\n <MemoizedRichText richTexts={imageCaption} />\n </figcaption>\n )}\n </div>\n );\n};\n\nexport default Image;\n\n// 이미지 스타일 유틸리티 함수\nconst getImageStyles = (format?: ImageFormat, isColumn: boolean = false) => {\n // width 계산 로직\n const getWidthStyle = () => {\n if (\n !isColumn &&\n format?.block_aspect_ratio &&\n format.block_aspect_ratio < 1\n ) {\n return `${format.block_aspect_ratio * 100}%`;\n }\n\n if (format?.block_width) {\n return format.block_width > MAX_WIDTH\n ? '100%'\n : `${format.block_width}px`;\n }\n\n return '100%';\n };\n\n // aspectRatio 계산 로직\n const getAspectRatioStyle = () => {\n return format?.block_aspect_ratio ? `${format.block_aspect_ratio}` : 'auto';\n };\n\n return {\n width: getWidthStyle(),\n aspectRatio: getAspectRatioStyle(),\n };\n};\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Image/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA4VTsW7bMBDd/RVcCtQDDTku2kaZiq6dkqGjcBZP0sUUyfJOjuWi/16QiezYhp1J5JHv8d29pwXLaJEr6qHFn94JkMNYVXfNytVNof7OlAqeSci7UkW0ILTFh5lSL2SkK9WyKD6lbQBjyLWl2kL8rDUHqMm1mvuq4j+r5816eT9XRbq59tFg1BEMDTzdfy0+5pruzQHUzBPEbzE21r+UqiNj0KVaD7ElV6pCwSA+VQxxsDCWqrG4S4X01YYi1q/ya2+HPoPBUus0CfZcqhqdYHyY/Zst3k/jd4QQjrNY3phFDzt9Mo8zqqe0nojuMtHZ+DqktpPyspe19fUmVSSCm972aboyqmKxYoXAWYRfP2MtuiFJnWYnrwixHgyaSuJwELXKot54S7W8jWzA8gH65RRaXIF2wD84YC2PIORPKb5mCsjHOqbzaRJHqhpCan6CfMsQwZ3obObRRpV89nFKVt6wZqy9MxDHKVqr+TFFWny4mdycJu9EM+1xuilj8G2E0I06nT3RHjX3YO0EHObvG+ANWhTvznL1/SxXsGZvB8mWZln5p7HYyNvySnKm/V6TM7jLHn6YmuvqiH9dpuT+htVXCU6chsuc/Qd6kFP2gwQAAA==';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var caption = 'styles_caption__2f3ncf7';\nexport var imageContainer = 'styles_imageContainer__2f3ncf0';\nexport var imageStyle = _7a468({defaultClassName:'styles_imageStyle__2f3ncf2',variantClassNames:{loaded:{true:'styles_imageStyle_loaded_true__2f3ncf3',false:'styles_imageStyle_loaded_false__2f3ncf4'},hasAspectRatio:{true:'styles_imageStyle_hasAspectRatio_true__2f3ncf5',false:'styles_imageStyle_hasAspectRatio_false__2f3ncf6'}},defaultVariants:{loaded:false,hasAspectRatio:false},compoundVariants:[]});\nexport var imageWrapper = 'styles_imageWrapper__2f3ncf1';\nexport var skeletonWrapper = _7a468({defaultClassName:'styles_skeletonWrapper__2f3ncf8',variantClassNames:{isLoaded:{true:'styles_skeletonWrapper_isLoaded_true__2f3ncf9',false:'styles_skeletonWrapper_isLoaded_false__2f3ncfa'}},defaultVariants:{isLoaded:false},compoundVariants:[]});","import 'src/components/Skeleton/styles.css.ts.vanilla.css?source=QGtleWZyYW1lcyBzdHlsZXNfc2hpbW1lcl9fYTNnOHE5MCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7CiAgfQp9Ci5zdHlsZXNfc2tlbGV0b25fX2EzZzhxOTEgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKICBib3JkZXItcmFkaXVzOiA0cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLnN0eWxlc19za2VsZXRvbl9fYTNnOHE5MTo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDAsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAyMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSA2MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpOwogIGFuaW1hdGlvbjogc3R5bGVzX3NoaW1tZXJfX2EzZzhxOTAgLjhzIGluZmluaXRlIGxpbmVhcjsKICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9Ci5zdHlsZXNfcmVjdF9fYTNnOHE5MiB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAyMHB4OwogIG1hcmdpbi1ib3R0b206IDhweDsKfQouc3R5bGVzX2NpcmNsZV9fYTNnOHE5MyB7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiA1MHB4OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQouc3R5bGVzX2ltYWdlX19hM2c4cTk0IHsKICB3aWR0aDogMTAwJTsKICBib3JkZXItcmFkaXVzOiA4cHg7Cn0=';\nexport var circle = 'styles_circle__a3g8q93';\nexport var image = 'styles_image__a3g8q94';\nexport var rect = 'styles_rect__a3g8q92';\nexport var skeleton = 'styles_skeleton__a3g8q91';","import { FC } from 'react';\nimport * as styles from './styles.css';\n\ntype SkeletonProps = {\n /**\n * 스켈레톤 형태 - 직사각형, 원형, 이미지 크기\n * @default 'rect'\n */\n variant?: 'rect' | 'circle' | 'image';\n /**\n * 커스텀 너비 (px 또는 %)\n */\n width?: string;\n /**\n * 커스텀 높이 (px 또는 %)\n */\n height?: string;\n /**\n * 추가 CSS 클래스명\n */\n className?: string;\n};\n\n/**\n * 콘텐츠 로딩 중에 표시되는 물결 효과가 있는 스켈레톤 컴포넌트입니다.\n * 이미지, 텍스트 등의 로딩 상태를 표시하는 데 사용합니다.\n */\nconst Skeleton: FC<SkeletonProps> = ({\n variant = 'rect',\n width,\n height,\n className,\n}) => {\n const getVariantClass = () => {\n switch (variant) {\n case 'circle':\n return styles.circle;\n case 'image':\n return styles.image;\n case 'rect':\n default:\n return styles.rect;\n }\n };\n\n return (\n <div\n className={`${styles.skeleton} ${getVariantClass()} ${className || ''}`}\n style={{\n width: width || undefined,\n height: height || undefined,\n }}\n />\n );\n};\n\nexport default Skeleton;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Bookmark/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA71WPW/bMBDd/Su4FIgHGpLito6yFOjUpUNboKNBiSfrYopkSNqyUuS/F6S+EztJi6KTwfvi47t3J6+sawTYrUC5327vzf2mKSLya0GIg5OjHHJlmEMlUyKVhNsFIRytFqxJSSZUvvcWzThHuaNO6ZQcmbmi1GqWe9PJbrf2/vpun8Wb5TQ2U86p6pXwx8Wqw5czw3t8ccA3wCgEnHzlTBkOJiWxPhGrBPKudq6EMpa27r78ejmmUMM4HmyPpTV+CzZa8QFQEVLUEUwhVJ2SEjkH6W3OMGmxZSlTJ2pLxlVNolViCTAbWKvYiZaAu9KlZGOguvi4tPRXhCeOtQaewmkGaz/nSUkH0vXVklCn4/wp2RmzMJRhy9tzpPrflKxJTOJNpAcT5Wggb1+cK3GoAg93B+uwaGgHIiX+JqAZuBpapp6zN0LXBo4I9WclHUPpW9W+4fp8u1tk8RQZE7iTFB1UNiU5SAfmLKzR9bwrb8L4pWI76PGtA74auStTEkfRO1+kL9qfVXYHuaMF+uv9DROjVr14RmCvK9NWQ+9gJgGHTgzg3s8FEP3xCBJSKOmoxQfoI12j1c4wXTbU+77jA8y0dBzT6o6Gs4k/g5NaqDBTYlR0EvLD2KbzGfY7aQgLURXKoYHx6v3FFnb7bHSAEKgtWu+qS3QQCAC/5mrD9JRQDjY3qH2Lelo//Cdaxyx3kRQLuZKcmaYPvV5OFZiskr+kZRg5WkO2R0czFcasPwqUQHPBKp2SZOrwe0sZDLN2BOMwZ2JKqEUHX1k1iPRjYHPWyg7xC1+Wif5v/i2h2mA1oTM5vxkvLJsdex3pbFeMtBTsiPmosc1sr3SEPCUoLGNbGpT7IMOx2sGIH2Fc2mo3odo5BZxV/4vC8FvzyRs+VcCRkauJa51E+rQM175txU9I7v9rPC4efwM4QP1joggAAA==';\nexport var card = 'styles_card__qrq8yf1';\nexport var content = 'styles_content__qrq8yf2';\nexport var description = 'styles_description__qrq8yf6';\nexport var favicon = 'styles_favicon__qrq8yf8';\nexport var link = 'styles_link__qrq8yf0';\nexport var previewContainer = 'styles_previewContainer__qrq8yf3';\nexport var previewImage = 'styles_previewImage__qrq8yf4';\nexport var siteName = 'styles_siteName__qrq8yf7';\nexport var title = 'styles_title__qrq8yf5';\nexport var urlText = 'styles_urlText__qrq8yf9';","import React from 'react';\nimport {\n link,\n card,\n content,\n previewContainer,\n previewImage,\n title,\n description,\n siteName,\n favicon,\n urlText,\n} from './styles.css';\n\ninterface OpenGraphData {\n title: string;\n description: string;\n image: string;\n siteName: string;\n url: string;\n favicon?: string;\n}\n\nexport interface BookmarkProps {\n url: string;\n metadata?: OpenGraphData;\n}\n\nconst Bookmark: React.FC<BookmarkProps> = ({ url, metadata }) => {\n return (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className={link}>\n <div className={card}>\n <div className={content}>\n <div>\n <h4 className={title}>{metadata?.title || url}</h4>\n <p className={description}>{metadata?.description || ''}</p>\n </div>\n <div className={siteName}>\n {metadata?.favicon && (\n <img src={metadata.favicon} alt=\"\" className={favicon} />\n )}\n <span className={urlText}>{metadata?.url || ''}</span>\n </div>\n </div>\n {metadata?.image && (\n <div className={previewContainer}>\n <img\n className={previewImage}\n src={metadata.image}\n alt={metadata.title}\n loading=\"lazy\"\n onError={(e) => {\n // 이미지 로드 실패 시 처리\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n }}\n />\n </div>\n )}\n </div>\n </a>\n );\n};\n\nexport default Bookmark;\n","import React, { useState, useEffect } from 'react';\nimport * as styles from './styles.css';\n\nexport interface LinkPreviewProps {\n url: string;\n}\n\ninterface RepoData {\n name: string;\n full_name: string;\n owner: {\n avatar_url: string;\n };\n updated_at: string;\n}\n\ninterface FigmaData {\n name: string;\n url: string;\n thumbnailUrl?: string;\n}\n\n// GitHub 레포지토리 데이터를 가져오는 함수\nconst fetchGitHubRepoData = async (\n repoPath: string\n): Promise<RepoData | null> => {\n try {\n const apiUrl = `https://api.github.com/repos/${repoPath}`;\n const response = await fetch(apiUrl);\n\n if (!response.ok) {\n throw new Error('Failed to fetch GitHub repo data');\n }\n\n const data = await response.json();\n return data;\n } catch (error) {\n console.error('Error fetching GitHub repo data:', error);\n return null;\n }\n};\n\n// Figma 파일 정보 추출 함수\nconst extractFigmaData = (url: string): FigmaData | null => {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.hostname.includes('figma.com')) {\n // URL에서 파일 이름 추출\n const pathSegments = parsedUrl.pathname.split('/');\n const fileSegment = pathSegments.find((segment) =>\n segment.includes('file')\n );\n\n if (!fileSegment) return null;\n\n // 파일 ID와 이름 파싱\n const fileIdMatch = fileSegment.match(/file\\/([^/]+)/);\n const fileId = fileIdMatch ? fileIdMatch[1] : '';\n\n // URL에서 파일 이름 추출 (URL 파라미터에서)\n let fileName = '';\n let mode = '';\n\n // URL 경로에서 파일 이름 추출 시도\n if (pathSegments.length > 3) {\n // URL 경로에서 이름 부분 추출 (/file/ID/NAME 형식)\n const encodedName = pathSegments[3];\n if (encodedName) {\n // URL 디코딩 및 하이픈을 공백으로 변환\n fileName = decodeURIComponent(encodedName).replace(/-/g, ' ');\n }\n }\n\n // 파일 이름이 추출되지 않았으면 URL에서 직접 찾기\n if (!fileName && parsedUrl.pathname.includes('-')) {\n const nameMatch = parsedUrl.pathname.match(/\\/([^/]+)(?:\\?|$)/);\n if (nameMatch && nameMatch[1]) {\n fileName = decodeURIComponent(nameMatch[1].replace(/-/g, ' '));\n }\n }\n\n // 파라미터에서 모드 추출 (dev, design 등)\n if (parsedUrl.search) {\n const searchParams = new URLSearchParams(parsedUrl.search);\n mode = searchParams.get('mode') || '';\n }\n\n // 이름이 추출되지 않았으면 기본값 사용\n fileName = fileName || 'Figma Design';\n\n return {\n name: fileName,\n url: url,\n thumbnailUrl: 'https://static.figma.com/app/icon/1/favicon.svg',\n };\n }\n return null;\n } catch (error) {\n console.error('Error parsing Figma URL:', error);\n return null;\n }\n};\n\n// GitHub URL에서 레포지토리 경로 추출\nconst extractRepoPathFromUrl = (url: string): string | null => {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.hostname === 'github.com') {\n // URL 경로에서 첫 번째 '/'를 제거하고 나머지 경로 반환\n const path = parsedUrl.pathname.substring(1);\n // 레포지토리 경로는 일반적으로 'username/repo-name' 형식\n const pathParts = path.split('/');\n if (pathParts.length >= 2) {\n return `${pathParts[0]}/${pathParts[1]}`;\n }\n }\n return null;\n } catch (error) {\n console.error('Error parsing URL:', error);\n return null;\n }\n};\n\n// URL이 어떤 타입의 링크인지 확인\nconst getLinkType = (url: string): 'github' | 'figma' | 'unknown' => {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.hostname === 'github.com') {\n return 'github';\n } else if (parsedUrl.hostname.includes('figma.com')) {\n return 'figma';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n};\n\n// 날짜 포맷팅 함수\nconst formatUpdatedTime = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffInHours = Math.floor(\n (now.getTime() - date.getTime()) / (1000 * 60 * 60)\n );\n\n if (diffInHours < 24) {\n return `Updated ${diffInHours} hours ago`;\n } else {\n const diffInDays = Math.floor(diffInHours / 24);\n if (diffInDays === 1) {\n return 'Updated yesterday';\n } else if (diffInDays < 30) {\n return `Updated ${diffInDays} days ago`;\n } else {\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `Updated on ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n }\n }\n};\n\nconst LinkPreview: React.FC<LinkPreviewProps> = ({ url }) => {\n const [repoData, setRepoData] = useState<RepoData | null>(null);\n const [figmaData, setFigmaData] = useState<FigmaData | null>(null);\n const [loading, setLoading] = useState(true);\n const [linkType, setLinkType] = useState<'github' | 'figma' | 'unknown'>(\n 'unknown'\n );\n\n useEffect(() => {\n const loadLinkData = async () => {\n setLoading(true);\n const type = getLinkType(url);\n setLinkType(type);\n\n if (type === 'github') {\n const repoPath = extractRepoPathFromUrl(url);\n if (repoPath) {\n const data = await fetchGitHubRepoData(repoPath);\n setRepoData(data);\n }\n } else if (type === 'figma') {\n const data = extractFigmaData(url);\n setFigmaData(data);\n }\n\n setLoading(false);\n };\n\n loadLinkData();\n }, [url]);\n\n // 레포지토리 이름 추출 (full_name에서 organization/repo 형식)\n const repoName =\n repoData?.name ||\n extractRepoPathFromUrl(url)?.split('/')[1] ||\n 'Repository';\n\n // 업데이트 시간 포맷팅\n const updatedTimeText = repoData?.updated_at\n ? formatUpdatedTime(repoData.updated_at)\n : '';\n\n // 모든 링크 타입을 조건부 렌더링으로 통합\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.link}\n >\n {linkType === 'figma' && figmaData ? (\n // Figma 프리뷰 렌더링\n <div className={styles.preview}>\n <div className={styles.iconContainer}>\n <img\n src={\n figmaData.thumbnailUrl ||\n 'https://static.figma.com/app/icon/1/favicon.svg'\n }\n alt=\"Figma icon\"\n className={styles.icon}\n />\n </div>\n <div className={styles.content}>\n <div className={styles.title}>{figmaData.name}</div>\n <div className={styles.description}>www.figma.com</div>\n </div>\n </div>\n ) : linkType === 'github' ? (\n // GitHub 프리뷰 렌더링\n <div className={`${styles.preview} ${styles.githubPreview}`}>\n <div className={styles.iconContainer}>\n <img\n src={\n repoData?.owner?.avatar_url ||\n 'https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png'\n }\n alt=\"Repository icon\"\n className={styles.icon}\n />\n </div>\n <div className={`${styles.content} ${styles.githubContent}`}>\n <div className={styles.title}>{repoName}</div>\n <div className={styles.description}>\n {loading ? 'Loading...' : `${repoName} • ${updatedTimeText}`}\n </div>\n </div>\n </div>\n ) : (\n // 기본 링크 프리뷰 렌더링\n <div className={styles.preview}>\n <div className={styles.content}>\n <div className={styles.title}>{url}</div>\n </div>\n </div>\n )}\n </a>\n );\n};\n\nexport default LinkPreview;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/LinkPreview/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7WUwZLaMAyG7/sUvnSmezBDgO120uO+QKc99Mg4sUIEjpXagoTt9N07djAku9By6SkTyZY+/ZY083w04NcG7W69pqxdNtlc/HoQgqFnqaEkpxjJ5sKShS8PQmj0rVHHXBSGyl2wtEprtBvJ1ObioNxHKX2rymDqe79e+5/L7a7Inh/HhwtipuZf538/zE6ErYMDQpcgswh5ZqkM9CF6QU6Dy0XW9sKTQX2KX5Ih5+XgThlWj5cr0imNe594BuO3aJONPjNV8QodwFWGulzUqDXYYGOnrMdBqoJ66WulqRPz2cILUD5KpwxurESGxueiBMvgRpK81aJQHs6JVUy8Ue8UHsEVfxUsrwN2lO3Cd44W/yal7ibRSrIMllO0xXX5wzcXmciE2jMli9TooBykKcnsG3tdxEs2LMm+kGWFNjzXkHN5PecNUbd7z1gd5Ql87OpQc52LxezJQRMMNeCm5rElYvvaod3lYv4WLRGtItEpXDaffxgHS/9UbKFkWWFgGGq6r+18c34LmLwFIxtIDE+RoSLL0uMrpEh8bGnjVFsfZfB9x1eYNNQh9lO81p2Ar178EZ3SQ4MFmUt3LOL9OFb5dMbC4jgfuz0uYb1cHGAMth59fJ4aGWJ/Q9g6nVPtuHoNvnTYhnZKGny6X4PLfuGbFXgoyWrljuno8j+UsUGu98XX6ZA+x0Ia1cvURatTQ6a1aaDiu1fAkONlOrqfY4534xFBZQHcQZzFPykHOzkaBgAA';\nexport var content = 'styles_content__o1p3m12';\nexport var description = 'styles_description__o1p3m16';\nexport var githubContent = 'styles_githubContent__o1p3m18';\nexport var githubPreview = 'styles_githubPreview__o1p3m17';\nexport var icon = 'styles_icon__o1p3m14';\nexport var iconContainer = 'styles_iconContainer__o1p3m13';\nexport var link = 'styles_link__o1p3m10';\nexport var preview = 'styles_preview__o1p3m11';\nexport var title = 'styles_title__o1p3m15';","import React from 'react';\nimport { List, ListItem } from './List';\nimport { MemoizedRichText } from '../MemoizedComponents';\n\nexport interface Props {\n blocks: any[];\n startIndex: number;\n type: 'bulleted' | 'numbered';\n}\n\n// 리스트 아이템을 렌더링하는 컴포넌트 (중첩 리스트 지원)\nconst RecursiveListItem: React.FC<{\n block: any;\n index: number;\n}> = ({ block, index }) => {\n const blockProps = {\n tabIndex: 0,\n };\n\n const blockType = block.type;\n const richTexts = block[blockType]?.rich_text;\n\n return (\n <ListItem {...blockProps}>\n <MemoizedRichText richTexts={richTexts} />\n {block.children && block.children.length > 0 && (\n <RecursiveListGroup\n blocks={block.children}\n type={blockType.split('_')[0] as 'bulleted' | 'numbered'}\n />\n )}\n </ListItem>\n );\n};\n\n// 중첩 리스트 그룹을 렌더링하는 컴포넌트\nconst RecursiveListGroup: React.FC<{\n blocks: any[];\n type: 'bulleted' | 'numbered';\n}> = ({ blocks, type }) => {\n if (!blocks || blocks.length === 0) return null;\n\n // 리스트 타입에 맞는 아이템만 필터링\n const listItems = blocks.filter(\n (block) => block.type === `${type}_list_item`\n );\n\n if (listItems.length === 0) return null;\n\n return (\n <List\n as={type === 'numbered' ? 'ol' : 'ul'}\n type={type}\n role=\"list\"\n aria-label={type === 'bulleted' ? 'Bulleted list' : 'Numbered list'}\n >\n {listItems.map((block, index) => (\n <RecursiveListItem key={block.id} block={block} index={index} />\n ))}\n </List>\n );\n};\n\nconst ListBlocksRenderer: React.FC<Props> = ({ blocks, startIndex, type }) => {\n let consecutiveItems = 0;\n for (let i = startIndex; i < blocks.length; i++) {\n const block = blocks[i];\n if (!block) break;\n if (block.type === `${type}_list_item`) {\n consecutiveItems++;\n } else {\n break;\n }\n }\n\n const listItems = blocks.slice(startIndex, startIndex + consecutiveItems);\n\n return (\n <List\n as={type === 'numbered' ? 'ol' : 'ul'}\n type={type}\n role=\"list\"\n aria-label={type === 'bulleted' ? 'Bulleted list' : 'Numbered list'}\n >\n {listItems.map((block, index) => (\n <RecursiveListItem\n key={block.id}\n block={block}\n index={startIndex + index}\n />\n ))}\n </List>\n );\n};\n\nexport default ListBlocksRenderer;\n","import React, { useMemo } from 'react';\nimport { codeBlock } from './styles.css';\nimport Prism, { Grammar, Token } from 'prismjs';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport { RichTextItem } from '../RichText/RichTexts';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-jsx';\nimport 'prismjs/components/prism-tsx';\n\nif (typeof window !== 'undefined') {\n window.Prism = Prism;\n}\n\nexport interface Props {\n code: string;\n language: string;\n caption?: RichTextItem[];\n}\n\nconst renderToken = (token: string | Token, i: number): React.ReactNode => {\n if (typeof token === 'string') {\n return <span key={i}>{token}</span>;\n }\n\n const content = token.content;\n let tokenContent: React.ReactNode;\n\n if (Array.isArray(content)) {\n tokenContent = content.map((subToken, j) => renderToken(subToken, j));\n } else if (typeof content === 'object' && content !== null) {\n tokenContent = renderToken(content as Token, 0);\n } else {\n tokenContent = content;\n }\n\n return (\n <span key={i} className={`token ${token.type}`}>\n {tokenContent}\n </span>\n );\n};\n\nconst CodeBlock: React.FC<Props> = ({ code, language, caption }) => {\n const tokens = useMemo(() => {\n const prismLanguage =\n Prism.languages[language] || Prism.languages.plaintext;\n return Prism.tokenize(code, prismLanguage as Grammar);\n }, [code, language]);\n\n return (\n <>\n <pre className={`${codeBlock} language-${language}`}>\n <code className={`language-${language}`}>\n {tokens.map((token, i) => renderToken(token, i))}\n </code>\n </pre>\n {caption && (\n <figcaption>\n <MemoizedRichText richTexts={caption} />\n </figcaption>\n )}\n </>\n );\n};\n\nexport default CodeBlock;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Code/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb2RlQmxvY2tfXzFxbjQyeWMwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvcnMtY29kZS1iYWNrZ3JvdW5kX19zcTNqa2I1KTsKICBjb2xvcjogdmFyKC0tY29sb3JzLWNvZGUtdGV4dF9fc3EzamtiNik7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZF9fc3EzamtiMWIpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cy1tZF9fc3EzamtiMWYpOwogIG92ZXJmbG93OiBhdXRvOwogIGZvbnQtZmFtaWx5OiB2YXIoLS10eXBvZ3JhcGh5LWZvbnRGYW1pbHktY29kZV9fc3Ezamticyk7CiAgbGluZS1oZWlnaHQ6IHZhcigtLXR5cG9ncmFwaHktbGluZUhlaWdodC1yZWxheGVkX19zcTNqa2IxNik7CiAgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLXNtX19zcTNqa2IxOSkgMDsKfQ==';\nexport var codeBlock = 'styles_codeBlock__1qn42yc0';","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Typography/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA92VP2+DMBDFdz6FxzI44o+iNmSvOrdDR2TgALcGu7aTQKp+9wqnhpA0qB0ioYz43c/3fPckFkq3DFQsiCSFJKKM45VHVsvCQ58OQilnXEZoS+QdxuZDYQ2NjmP1Eb69J767dhDKea1xTirKWlurW8HNfS3u1Ecj4oQosKg0KKM14BJoUepf0E59MuII9ZeGFSTLaF1YTgmS0rrAjerrHtxT7Ui8H7wruocLzl/oHkbNtwO2u+S7U18PvmsuK8L6pp6hdyXVYExBhIQEvJNErJ0vZ3FxHVHO043CW6powsAsh290N6AIBaJBijOajRclJK2IbG3vwLT+gTDPcwXasN1xwmUGEkuS0Y2yLzocPpszrKr+EeAeey2BdGvwrVV//sn509JL31LN/1aecJb1DcPJqA7ByFzknajVcEsyPfHZhyOwVoNbCUdgqfZa4WBFX5eeh+No4qvpic8+HKG1Gt5KOEJL7a8VjpE1ch6P0U9wcuazi8c3yEv+9ZMIAAA=';\nexport var heading1 = 'styles_heading1__90a95g1';\nexport var heading2 = 'styles_heading2__90a95g2';\nexport var heading3 = 'styles_heading3__90a95g3';\nexport var paragraph = 'styles_paragraph__90a95g0';","import React from 'react';\nimport { paragraph, heading1, heading2, heading3 } from './styles.css';\n\ninterface TypographyProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport const Paragraph: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <p className={paragraph} {...props}>\n {children}\n </p>\n );\n};\n\nexport const Heading1: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <h1 className={heading1} {...props}>\n {children}\n </h1>\n );\n};\n\nexport const Heading2: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <h2 className={heading2} {...props}>\n {children}\n </h2>\n );\n};\n\nexport const Heading3: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <h3 className={heading3} {...props}>\n {children}\n </h3>\n );\n};\n","import 'src/components/Renderer/components/Column/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb2x1bW5Db250YWluZXJfX3dsZTZ3ZTAgewogIGZsZXg6IDE7CiAgbWluLXdpZHRoOiAwOwp9Ci5zdHlsZXNfY29sdW1uTGlzdENvbnRhaW5lcl9fd2xlNndlMSB7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogcm93OwogIGdhcDogMXJlbTsKICBtYXJnaW4tYm90dG9tOiAxcmVtOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSAobWF4LXdpZHRoOiA0MjBweCkgewogIC5zdHlsZXNfY29sdW1uTGlzdENvbnRhaW5lcl9fd2xlNndlMSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIH0KfQ==';\nexport var columnContainer = 'styles_columnContainer__wle6we0';\nexport var columnListContainer = 'styles_columnListContainer__wle6we1';","import React from 'react';\nimport BlockRenderer from '../Block/BlockRenderer';\nimport { columnContainer } from './styles.css';\n\nexport interface ColumnProps {\n block: any;\n onFocus?: () => void;\n}\n\nconst Column: React.FC<ColumnProps> = ({ block, onFocus }) => {\n if (!block || !block.children) return null;\n\n return (\n <div className={columnContainer}>\n {block.children.map((childBlock: any, index: number) => (\n <BlockRenderer\n key={childBlock.id}\n block={childBlock}\n onFocus={onFocus}\n index={index}\n isColumn\n />\n ))}\n </div>\n );\n};\n\nexport default Column;\n","import React from 'react';\nimport Column from './Column';\nimport { columnListContainer } from './styles.css';\n\nexport interface ColumnListProps {\n block: any;\n onFocus?: () => void;\n}\n\nconst ColumnList: React.FC<ColumnListProps> = ({ block, onFocus }) => {\n if (!block || !block.children) return null;\n\n return (\n <div className={columnListContainer}>\n {block.children.map((column: any) => (\n <Column key={column.id} block={column} onFocus={onFocus} />\n ))}\n </div>\n );\n};\n\nexport default ColumnList;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Quote/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb250YWluZXJfX21yYTluMCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG1hcmdpbjogdmFyKC0tc3BhY2luZy14c19fc3EzamtiMTgpIDA7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14c19fc3EzamtiMTgpIDAgdmFyKC0tc3BhY2luZy14c19fc3EzamtiMTgpIDFyZW07CiAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjZTFlMWUxOwogIGNvbG9yOiAjMzczNTJmOwogIGZvbnQtc2l6ZTogdmFyKC0tdHlwb2dyYXBoeS1mb250U2l6ZS1iYXNlX19zcTNqa2J2KTsKICBsaW5lLWhlaWdodDogdmFyKC0tdHlwb2dyYXBoeS1saW5lSGVpZ2h0LWJhc2VfX3NxM2prYjE1KTsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0=';\nexport var container = 'styles_container__mra9n0';","import React from 'react';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport { container } from './styles.css';\nimport { RichTextItem } from '../RichText/RichTexts';\nimport { richText } from '../RichText/styles.css';\n\nexport interface QuoteProps {\n richTexts: RichTextItem[];\n tabIndex?: number;\n}\n\nconst Quote: React.FC<QuoteProps> = ({ richTexts, tabIndex }) => {\n return (\n <blockquote className={container} tabIndex={tabIndex}>\n <MemoizedRichText richTexts={richTexts} />\n </blockquote>\n );\n};\n\nexport default Quote;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Table/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7VSy27bMBC8+ysIFAUSwDQkO86DOebSc3roUaDElbQJxVXJtfwo+u+FZElhkrZBD70Rs7vD2ZldBT5aCBnr3MIDOdbowGdZ6rv8VFIifiyE2KPhWok0ST7fL4RotK/QSaZWiU77CylDqwt0lTyELAvfN0/PeXp7GbXmxEzNh905eQNeem1wF6buM/g4YDI08wgMI9SBLy3tlajRGHD3i5+LVbzTvEr6u1XGHwuyVrcBlJheUXGUq0TSgyU5lgFPMOnjY0uV1219lH3tK55AhkZbOyndDUILsuSVQFeDR45l1qAN+AfoJ0at60FrrovnytPOGTlOfypvyutyM+vYA1Y1/0HJt6EoAzSYkzWzcevLdya9+nwzfN5SQEZySniwmrEbLGm1MYMXf0nyTS2K7O58E+hkPQpfe2herFYibQ8ikEUjfJXri+12Kbabpbi6WYpkldzFV2KhZCUcuTgrf6ad0A48Y6Gt1BYrpwRT28MMB56gnqbHdqGPGiwUrIaG2KQSfeBXJl2dE4qlfKz9hdDqN3zbmG/c4l8Iax0eaf9lOKWZ9Pq/n9EvZDpjHT8EAAA=';\nexport var firstCell = 'styles_firstCell__1rvbzfo4';\nexport var hasRowHeader = 'styles_hasRowHeader__1rvbzfo6';\nexport var headerCell = 'styles_headerCell__1rvbzfo2';\nexport var lastCell = 'styles_lastCell__1rvbzfo5';\nexport var table = 'styles_table__1rvbzfo1';\nexport var tableCell = 'styles_tableCell__1rvbzfo3';\nexport var tableContainer = 'styles_tableContainer__1rvbzfo0';","import React from 'react';\nimport { tableCell, firstCell, lastCell, hasRowHeader } from './styles.css';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport { NotionBlock } from '../../../../types';\nimport { RichTextItem } from '../RichText/RichTexts';\n\ninterface TableRowProps {\n rowBlock: NotionBlock;\n cellClassName?: string;\n rowHeaderIndex?: number;\n}\n\nconst TableRow: React.FC<TableRowProps> = ({\n rowBlock,\n cellClassName = '',\n rowHeaderIndex = -1,\n}) => {\n if (!rowBlock.table_row?.cells) {\n return null;\n }\n\n const { cells } = rowBlock.table_row;\n\n return (\n <tr>\n {cells.map((cell: RichTextItem[], index: number) => {\n const isFirstCell = index === 0;\n const isLastCell = index === cells.length - 1;\n const isRowHeader = index === rowHeaderIndex;\n\n let cellClasses = [tableCell, cellClassName];\n\n if (isFirstCell) cellClasses.push(firstCell);\n if (isLastCell) cellClasses.push(lastCell);\n if (isRowHeader) cellClasses.push(hasRowHeader);\n\n return (\n <td\n key={`${rowBlock.id}-cell-${index}`}\n className={cellClasses.filter(Boolean).join(' ')}\n >\n <MemoizedRichText richTexts={cell} />\n </td>\n );\n })}\n </tr>\n );\n};\n\nexport default TableRow;\n","import React from 'react';\nimport { tableContainer, table, headerCell, hasRowHeader } from './styles.css';\nimport TableRow from './TableRow';\nimport { NotionBlock } from '../../../../types';\n\ninterface TableProps {\n block: NotionBlock;\n tabIndex?: number;\n}\n\nconst Table: React.FC<TableProps> = ({ block, tabIndex = 0 }) => {\n if (!block.table || !block.children) {\n return null;\n }\n\n const { table_width, has_column_header, has_row_header } = block.table;\n const rows =\n block.children?.filter(\n (child: NotionBlock) => child.type === 'table_row'\n ) || [];\n\n return (\n <div className={tableContainer}>\n <table className={table} tabIndex={tabIndex}>\n {rows.length > 0 && (\n <>\n {has_column_header && rows[0] && (\n <thead>\n <TableRow rowBlock={rows[0]} cellClassName={headerCell} />\n </thead>\n )}\n <tbody>\n {/* 유효한 row만 매핑하도록 필터링 추가 */}\n {rows\n .filter(\n (row): row is NotionBlock =>\n row !== undefined && row.type === 'table_row'\n )\n .map((row: NotionBlock, rowIndex: number) => {\n // 열 헤더가 있고 첫 번째 행이면 이미 thead에서 렌더링되었으므로 건너뜁니다\n if (has_column_header && rowIndex === 0) {\n return null;\n }\n\n const actualRowIndex = has_column_header\n ? rowIndex - 1\n : rowIndex;\n // 타입 체크를 통해 row가 실제 Block 타입임을 확인합니다\n return (\n <TableRow\n key={row.id}\n rowBlock={row}\n rowHeaderIndex={has_row_header ? 0 : -1}\n />\n );\n })}\n </tbody>\n </>\n )}\n </table>\n </div>\n );\n};\n\nexport default Table;\n","import Table from './Table';\nimport TableRow from './TableRow';\n\nexport { TableRow };\nexport default Table;\n","import React, { useState } from 'react';\nimport { NotionBlock } from '../../../../types';\nimport { \n toggleContainer, \n toggleHeader, \n toggleIcon, \n toggleIconOpen, \n toggleContent \n} from './styles.css';\nimport { RichTexts } from '../../components/RichText';\nimport BlockRenderer from '../../components/Block/BlockRenderer';\n\ninterface ToggleProps {\n block: NotionBlock;\n tabIndex?: number;\n onFocus?: () => void;\n}\n\nconst Toggle: React.FC<ToggleProps> = ({ block, tabIndex = 0, onFocus }) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Toggle이 없거나 children이 없는 경우 렌더링하지 않음\n if (!block.toggle || !block.children) {\n return null;\n }\n\n const handleToggle = () => {\n setIsOpen(!isOpen);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={toggleContainer}>\n <div \n className={toggleHeader}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n tabIndex={tabIndex}\n onFocus={onFocus}\n role=\"button\"\n aria-expanded={isOpen}\n >\n <span className={`${toggleIcon} ${isOpen ? toggleIconOpen : ''}`}>\n ▶\n </span>\n <RichTexts richTexts={block.toggle.rich_text} />\n </div>\n\n {isOpen && block.children && (\n <div className={toggleContent}>\n {block.children.map((childBlock, index) => (\n <BlockRenderer\n key={childBlock.id}\n block={childBlock}\n index={index}\n />\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default Toggle;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nimport 'src/components/Renderer/components/Toggle/styles.css.ts.vanilla.css?source=LnN0eWxlc190b2dnbGVDb250YWluZXJfX3A3dWUxejAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQouc3R5bGVzX3RvZ2dsZUhlYWRlcl9fcDd1ZTF6MSB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGN1cnNvcjogcG9pbnRlcjsKICBmb250LXNpemU6IHZhcigtLXR5cG9ncmFwaHktZm9udFNpemUtYmFzZV9fc3Ezamtidik7CiAgZm9udC13ZWlnaHQ6IHZhcigtLXR5cG9ncmFwaHktZm9udFdlaWdodC1ub3JtYWxfX3NxM2prYjEwKTsKICBjb2xvcjogaW5oZXJpdDsKICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2IxOCkgMDsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSYWRpdXMtc21fX3NxM2prYjFlKTsKfQouc3R5bGVzX3RvZ2dsZUhlYWRlcl9fcDd1ZTF6MTpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSg1NSwgNTMsIDQ3LCAwLjA4KTsKfQouc3R5bGVzX3RvZ2dsZUljb25fX3A3dWUxejIgewogIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1zbV9fc3EzamtiMTkpOwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICB3aWR0aDogMS4ycmVtOwogIGhlaWdodDogMS4ycmVtOwp9Ci5zdHlsZXNfdG9nZ2xlSWNvbk9wZW5fX3A3dWUxejMgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQouc3R5bGVzX3RvZ2dsZUNvbnRlbnRfX3A3dWUxejQgewogIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1sZ19fc3EzamtiMWMpOwogIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmcteHNfX3NxM2prYjE4KTsKICBvdmVyZmxvdzogaGlkZGVuOwp9';\nexport var toggleContainer = 'styles_toggleContainer__p7ue1z0';\nexport var toggleContent = 'styles_toggleContent__p7ue1z4';\nexport var toggleHeader = 'styles_toggleHeader__p7ue1z1';\nexport var toggleIcon = 'styles_toggleIcon__p7ue1z2';\nexport var toggleIconOpen = 'styles_toggleIconOpen__p7ue1z3';","import React from 'react';\n\nimport {\n MemoizedRichText,\n MemoizedImage,\n MemoizedBookmark,\n MemoizedLinkPreview,\n} from '../MemoizedComponents';\nimport { CodeBlock } from '../Code';\nimport { Heading1, Heading2, Heading3, Paragraph } from '../Typography';\nimport { ColumnList } from '../Column';\nimport { Quote } from '../Quote';\nimport Table from '../Table';\nimport { Toggle } from '../Toggle';\n\nexport interface Props {\n block: any;\n onFocus?: () => void;\n index: number;\n isColumn?: boolean;\n}\n\nconst BlockRenderer: React.FC<Props> = ({\n block,\n onFocus,\n index,\n isColumn = false,\n}) => {\n if (!block) return null;\n\n const blockProps = {\n tabIndex: 0,\n onFocus,\n };\n\n switch (block.type) {\n case 'link_preview':\n return (\n <MemoizedLinkPreview url={block.link_preview.url} {...blockProps} />\n );\n case 'paragraph':\n return (\n <Paragraph {...blockProps}>\n <MemoizedRichText richTexts={block.paragraph.rich_text} />\n </Paragraph>\n );\n\n case 'heading_1':\n return (\n <Heading1 {...blockProps}>\n <MemoizedRichText richTexts={block.heading_1.rich_text} />\n </Heading1>\n );\n\n case 'heading_2':\n return (\n <Heading2 {...blockProps}>\n <MemoizedRichText richTexts={block.heading_2.rich_text} />\n </Heading2>\n );\n\n case 'heading_3':\n return (\n <Heading3 {...blockProps}>\n <MemoizedRichText richTexts={block.heading_3.rich_text} />\n </Heading3>\n );\n\n case 'code':\n return (\n <div {...blockProps}>\n <CodeBlock\n code={block.code.rich_text[0].text.content}\n language={block.code.language}\n caption={block.code.caption?.[0]?.plain_text}\n />\n </div>\n );\n\n case 'image':\n return (\n <figure {...blockProps}>\n <MemoizedImage\n src={block.image.file?.url || block.image.external?.url}\n alt={block.image.caption?.[0]?.plain_text || ''}\n caption={block.image.caption}\n format={block.image.format}\n isColumn={isColumn}\n />\n </figure>\n );\n\n case 'bookmark':\n return (\n <MemoizedBookmark\n url={block.bookmark.url}\n metadata={block.bookmark.metadata}\n />\n );\n\n case 'column_list':\n return <ColumnList block={block} onFocus={onFocus} />;\n\n case 'column':\n // 개별 column은 ColumnList에서 처리됩니다\n return null;\n\n case 'quote':\n return <Quote richTexts={block.quote.rich_text} {...blockProps} />;\n\n case 'table':\n return <Table block={block} tabIndex={blockProps.tabIndex} />;\n\n case 'toggle':\n return (\n <Toggle\n block={block}\n tabIndex={blockProps.tabIndex}\n onFocus={onFocus}\n />\n );\n\n default:\n return null;\n }\n};\n\nexport default BlockRenderer;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XXW+jRhSG7/dXHIWbVgKL+eBremVs0Fbq3mxa9XI1mAkmBoYFe2Nv1f9ejRMwmDFJpd27OFGUyM8LZ+YcJo8X+60oxZciz7b7P8+/fmm/ksddgkr45wOAZe1PtcwaXm9P1oOs9jEv8+JkJbzt0YbBIbdaXrVWK5r8ASxe14Ww2lO7F6UJYZFXu098c3/+O5bV3oS7e5FJAX/9fmfCR1F8E/t8w01YNjkvTLhc67eZGjYy7WtoGdzHn2Qlrc8iOxS8MWElq1YWvDXh7o88EQ3f57ICxdyZ8ElUhTShlJVsa74R2vvc59+FdWy7e+wZ2AvPaUR5m25LXhRd4KAC/iuJ4U5+Y4Bm4YI3WU8/MUALPH/1LeroIwM8j+IOPakLv3Jd0sHf56v4W6jRsirZlLzfGGQzoLY9FyhFmh/KPoAYOPOBVpR5Iou0j2AG7nxkhBMGngYv8kp8fMb36mfP0+d1zwWGrUXOeVPn8EYU/CguFbkq4b1E1JTmVWYdL/OIPDVfaLD3PXRhfMVokPayt4FCpsSoen41+x1UXspNhsPbvV9k/fub8VT1tV6mIh2OaCKbVDSfeZof2mG14mpBI25QzoPiiHcDHNSVjZc/wgbFba92YMwNwHy4DxtZyKa1Er7ZZY08VH19NgPj4fwagXtxvIwYA4N4xMFjpG7ykjenjsIMDJu4buqOqFZsZJUOOMLAcHzXdoNxZedldBBlYAgkqPBHkDppNWtwGDRZwn9BxDERQSbCtrlAv06jw1W5DAxMcYDFlMsr9Th0pMfAiELHc7xbZDgpydeW5IxrqqT6V2BlDe93J2BgeL7neVRHJo18qjqUMzCC2A0dokNlw6vLEZ0wMNaBR+y1jj2JopBPHbthYKzCAOFYX6wQfQkpA4NSn7hIW21x6AsQaoaIFy0DHVkfmrro2Qe1MNt1QlvL5tWuIzNVKqIrf6kjm8sZtlXrp3RFvZsNmI5Vfu57tIq0m/bci2nqUaWCyInm2jKN7RgY8TIK13MdmsYKFQtjsg5vN2uaKlWN65hEq5t9m4YqFUKxHTszLZzGpKqQRlGsHadzN6ehWoWCKIq1m6gaO818VZm1atjLwb7lqXwandmPDGxA9RFwfQT7+Qm1TXj5Xtjd89lFB8f4TkVpfQS3PoKlrnGdRlfhwdFenO9r10dAjoqTG/F/PyyePTjlzW6swdW7Br9r8LsGv2vwuwb/LA22U4TQWBCuNXgTpCgdK4xGgx2fu1c+rdVgPwloMNbPqQYTm7gkfaMGG8hFCcavm69mIT/OfHVV3HDd4Px6k+uGy2Dp+zp06rqR5y9p9DbXXYfLkGpFaOK6rr90PW0J167r4GC10lrp1HVD5Dt6f7t23bXr+kvtJ4Mr141cd+lqPW3GdUmsvv6v61JCbao19VnXpZRgrLXxWddVd9PH5lwXB2RN9J+obrsudqitn6FZ1yUuXlHtjMy4LrUxxdp73XZdSvEKhz/NdZWjUm30R4jufzMt9bDwFQAA';\nexport var darkTheme = 'theme_darkTheme__sq3jkb1n';\nexport var lightTheme = 'theme_lightTheme__sq3jkb1m';\nexport var vars = {colors:{background:'var(--colors-background__sq3jkb0)',text:'var(--colors-text__sq3jkb1)',primary:'var(--colors-primary__sq3jkb2)',secondary:'var(--colors-secondary__sq3jkb3)',border:'var(--colors-border__sq3jkb4)',code:{background:'var(--colors-code-background__sq3jkb5)',text:'var(--colors-code-text__sq3jkb6)',inline:'var(--colors-code-inline__sq3jkb7)',inlineBackground:'var(--colors-code-inlineBackground__sq3jkb8)'},notion:{gray:'var(--colors-notion-gray__sq3jkb9)',brown:'var(--colors-notion-brown__sq3jkba)',orange:'var(--colors-notion-orange__sq3jkbb)',yellow:'var(--colors-notion-yellow__sq3jkbc)',green:'var(--colors-notion-green__sq3jkbd)',blue:'var(--colors-notion-blue__sq3jkbe)',purple:'var(--colors-notion-purple__sq3jkbf)',pink:'var(--colors-notion-pink__sq3jkbg)',red:'var(--colors-notion-red__sq3jkbh)',gray_background:'var(--colors-notion-gray_background__sq3jkbi)',brown_background:'var(--colors-notion-brown_background__sq3jkbj)',orange_background:'var(--colors-notion-orange_background__sq3jkbk)',yellow_background:'var(--colors-notion-yellow_background__sq3jkbl)',green_background:'var(--colors-notion-green_background__sq3jkbm)',blue_background:'var(--colors-notion-blue_background__sq3jkbn)',purple_background:'var(--colors-notion-purple_background__sq3jkbo)',pink_background:'var(--colors-notion-pink_background__sq3jkbp)',red_background:'var(--colors-notion-red_background__sq3jkbq)'}},typography:{fontFamily:{base:'var(--typography-fontFamily-base__sq3jkbr)',code:'var(--typography-fontFamily-code__sq3jkbs)'},fontSize:{xs:'var(--typography-fontSize-xs__sq3jkbt)',small:'var(--typography-fontSize-small__sq3jkbu)',base:'var(--typography-fontSize-base__sq3jkbv)',large:'var(--typography-fontSize-large__sq3jkbw)',h1:'var(--typography-fontSize-h1__sq3jkbx)',h2:'var(--typography-fontSize-h2__sq3jkby)',h3:'var(--typography-fontSize-h3__sq3jkbz)'},fontWeight:{normal:'var(--typography-fontWeight-normal__sq3jkb10)',medium:'var(--typography-fontWeight-medium__sq3jkb11)',semibold:'var(--typography-fontWeight-semibold__sq3jkb12)',bold:'var(--typography-fontWeight-bold__sq3jkb13)'},lineHeight:{tight:'var(--typography-lineHeight-tight__sq3jkb14)',base:'var(--typography-lineHeight-base__sq3jkb15)',relaxed:'var(--typography-lineHeight-relaxed__sq3jkb16)'}},spacing:{xxs:'var(--spacing-xxs__sq3jkb17)',xs:'var(--spacing-xs__sq3jkb18)',sm:'var(--spacing-sm__sq3jkb19)',base:'var(--spacing-base__sq3jkb1a)',md:'var(--spacing-md__sq3jkb1b)',lg:'var(--spacing-lg__sq3jkb1c)',xl:'var(--spacing-xl__sq3jkb1d)'},borderRadius:{sm:'var(--borderRadius-sm__sq3jkb1e)',md:'var(--borderRadius-md__sq3jkb1f)',lg:'var(--borderRadius-lg__sq3jkb1g)',xl:'var(--borderRadius-xl__sq3jkb1h)',xxl:'var(--borderRadius-xxl__sq3jkb1i)'},shadows:{sm:'var(--shadows-sm__sq3jkb1j)',md:'var(--shadows-md__sq3jkb1k)',lg:'var(--shadows-lg__sq3jkb1l)'}};","import { Heading1 } from '../Renderer/components/Typography';\n\ninterface Props {\n title: string;\n}\nconst Title = ({ title }: Props) => {\n return <Heading1>{title}</Heading1>;\n};\n\nexport default Title;\n","import { useState } from 'react';\nimport { coverContainer, skeletonWrapper, imageStyle } from './styles.css';\nimport Skeleton from '../Skeleton';\n\ninterface CoverProps {\n src: string;\n alt: string;\n}\n\n/**\n * 노션 페이지 상단에 표시되는 커버 이미지 컴포넌트\n * 이미지 로딩 중에는 스켈레톤 UI를 표시하고, 로딩 완료 시 자연스럽게 이미지로 전환됩니다.\n */\nconst Cover = ({ src, alt }: CoverProps) => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n return (\n <div className={coverContainer}>\n <div className={skeletonWrapper({ isLoaded })}>\n <Skeleton variant=\"image\" />\n </div>\n <img\n src={src}\n alt={alt}\n className={imageStyle({ isLoaded })}\n onLoad={() => setIsLoaded(true)}\n loading=\"lazy\"\n />\n </div>\n );\n};\n\nexport default Cover;\n","import 'src/components/Cover/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb3ZlckNvbnRhaW5lcl9fcDBjcDhkMCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwogIG1heC13aWR0aDogNTYuMjVyZW07CiAgaGVpZ2h0OiAzMHZoOwogIG1hcmdpbjogMCBhdXRvOwogIGJvcmRlci1yYWRpdXM6IDEuNXJlbTsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJveC1zaGFkb3c6IDJweCAycHggOHB4IDRweCBoc2xhKDAsMCUsNiUsLjEpOwp9Ci5zdHlsZXNfc2tlbGV0b25XcmFwcGVyX19wMGNwOGQxIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIHotaW5kZXg6IDE7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7Cn0KLnN0eWxlc19za2VsZXRvbldyYXBwZXJfaXNMb2FkZWRfdHJ1ZV9fcDBjcDhkMiB7CiAgb3BhY2l0eTogMDsKfQouc3R5bGVzX3NrZWxldG9uV3JhcHBlcl9pc0xvYWRlZF9mYWxzZV9fcDBjcDhkMyB7CiAgb3BhY2l0eTogMTsKfQouc3R5bGVzX2ltYWdlU3R5bGVfX3AwY3A4ZDQgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvYmplY3QtZml0OiBjb3ZlcjsKICBvYmplY3QtcG9zaXRpb246IGNlbnRlciA1MCU7CiAgZGlzcGxheTogYmxvY2s7CiAgei1pbmRleDogMjsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKfQouc3R5bGVzX2ltYWdlU3R5bGVfaXNMb2FkZWRfdHJ1ZV9fcDBjcDhkNSB7CiAgb3BhY2l0eTogMTsKfQouc3R5bGVzX2ltYWdlU3R5bGVfaXNMb2FkZWRfZmFsc2VfX3AwY3A4ZDYgewogIG9wYWNpdHk6IDA7Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgLnN0eWxlc19jb3ZlckNvbnRhaW5lcl9fcDBjcDhkMCB7CiAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07CiAgICBoZWlnaHQ6IDI1dmg7CiAgfQp9';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var coverContainer = 'styles_coverContainer__p0cp8d0';\nexport var imageStyle = _7a468({defaultClassName:'styles_imageStyle__p0cp8d4',variantClassNames:{isLoaded:{true:'styles_imageStyle_isLoaded_true__p0cp8d5',false:'styles_imageStyle_isLoaded_false__p0cp8d6'}},defaultVariants:{isLoaded:false},compoundVariants:[]});\nexport var skeletonWrapper = _7a468({defaultClassName:'styles_skeletonWrapper__p0cp8d1',variantClassNames:{isLoaded:{true:'styles_skeletonWrapper_isLoaded_true__p0cp8d2',false:'styles_skeletonWrapper_isLoaded_false__p0cp8d3'}},defaultVariants:{isLoaded:false},compoundVariants:[]});"],"mappings":"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","names":["React","useState","useMemo","React","_7a468","jsx","content","_7a468","jsx","jsx","link","jsx","jsxs","link","useState","content","description","link","title","jsx","jsxs","useState","link","content","title","description","React","jsx","jsxs","Fragment","jsx","jsxs","content","caption","jsx","jsx","jsx","container","jsx","container","jsx","Fragment","jsx","jsxs","Table_default","useState","jsx","jsxs","useState","jsx","Table_default","jsx","title","useState","_7a468","imageStyle","skeletonWrapper","jsx","jsxs","useState","skeletonWrapper","imageStyle","Fragment","jsx","jsxs","React","title","useState","useMemo"]}
1
+ {"version":3,"sources":["../src/components/Renderer/index.tsx","../src/components/Renderer/components/List/styles.css.ts","../src/components/Renderer/components/List/List.tsx","../src/components/Renderer/components/MemoizedComponents.tsx","../src/components/Renderer/components/RichText/styles.css.ts","../src/components/Renderer/components/RichText/RichTexts.tsx","../src/components/Renderer/components/Image/Image.tsx","../src/components/Renderer/components/Image/styles.css.ts","../src/components/Skeleton/styles.css.ts","../src/components/Skeleton/index.tsx","../src/components/Renderer/components/Bookmark/styles.css.ts","../src/components/Renderer/components/Bookmark/Bookmark.tsx","../src/components/Renderer/components/LinkPreview/LinkPreview.tsx","../src/components/Renderer/components/LinkPreview/styles.css.ts","../src/components/Renderer/components/List/ListBlocksRenderer.tsx","../src/components/Renderer/components/Code/CodeBlock.tsx","../src/components/Renderer/components/Code/styles.css.ts","../src/components/Renderer/components/Typography/styles.css.ts","../src/components/Renderer/components/Typography/Typography.tsx","../src/components/Renderer/components/Column/styles.css.ts","../src/components/Renderer/components/Column/Column.tsx","../src/components/Renderer/components/Column/ColumnList.tsx","../src/components/Renderer/components/Quote/styles.css.ts","../src/components/Renderer/components/Quote/Quote.tsx","../src/components/Renderer/components/Table/styles.css.ts","../src/components/Renderer/components/Table/TableRow.tsx","../src/components/Renderer/components/Table/Table.tsx","../src/components/Renderer/components/Table/index.ts","../src/components/Renderer/components/Toggle/Toggle.tsx","../src/components/Renderer/components/Toggle/styles.css.ts","../src/components/Renderer/components/Block/BlockRenderer.tsx","../src/components/Title/index.tsx","../src/components/Cover/index.tsx","../src/components/Cover/styles.css.ts","../src/components/Renderer/styles.css.ts","../src/styles/theme.css.ts"],"sourcesContent":["import { useMemo, memo } from 'react';\n\nimport { ListBlocksRenderer } from './components/List';\nimport { BlockRenderer } from './components/Block';\nimport Title from '../Title';\nimport Cover from '../Cover';\n\nimport {\n BulletedListItemBlock,\n NotionBlock,\n NumberedListItemBlock,\n} from '../../types';\nimport { container } from './styles.css';\nimport '../../styles/reset.css';\nimport { darkTheme, lightTheme } from '../../styles/theme.css';\n\ninterface Props {\n blocks: NotionBlock[];\n title?: string;\n cover?: string;\n isDarkMode?: boolean;\n}\n\nconst Renderer = memo(({ blocks, isDarkMode = false, title, cover }: Props) => {\n const theme = isDarkMode ? darkTheme : lightTheme;\n\n const renderedBlocks = useMemo(() => {\n const result: JSX.Element[] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n if (!block) break;\n\n // 리스트 아이템 타입 처리를 위한 공통 함수\n const handleListItem = (listType: 'bulleted' | 'numbered') => {\n const listItemType = `${listType}_list_item` as (\n | BulletedListItemBlock\n | NumberedListItemBlock\n )['type'];\n\n if (\n block.type === listItemType &&\n (i === 0 || blocks[i - 1]?.type !== listItemType)\n ) {\n result.push(\n <ListBlocksRenderer\n key={block.id}\n blocks={\n blocks as (BulletedListItemBlock | NumberedListItemBlock)[]\n }\n startIndex={i}\n type={listItemType}\n />\n );\n\n // 연속된 같은 타입의 리스트 아이템 건너뛰기\n while (\n i + 1 < blocks.length &&\n blocks[i + 1] &&\n blocks[i + 1]?.type === listItemType\n ) {\n i++;\n }\n\n return true;\n }\n\n return false;\n };\n\n // 순서대로 각 리스트 타입 처리 시도\n if (handleListItem('bulleted') || handleListItem('numbered')) {\n // 리스트 아이템이 처리되었으므로 다음 블록으로 진행\n continue;\n } else {\n // 리스트 아이템이 아닌 일반 블록 처리\n result.push(<BlockRenderer key={block.id} block={block} />);\n }\n }\n\n return result;\n }, [blocks]);\n\n return (\n <>\n {cover && <Cover src={cover} alt={title || 'Notion page content'} />}\n <article\n className={`${theme} ${container}`}\n aria-label={title || 'Notion page content'}\n >\n {title && <Title title={title} />}\n {renderedBlocks}\n </article>\n </>\n );\n});\n\nRenderer.displayName = 'Renderer';\n\nexport default Renderer;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/List/styles.css.ts.vanilla.css?source=LnN0eWxlc19saXN0X19lczh2aW0wIHsKICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2IxOCkgdmFyKC0tc3BhY2luZy14eHNfX3NxM2prYjE3KTsKICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbGdfX3NxM2prYjFjKTsKICBjb2xvcjogdmFyKC0tY29sb3JzLXRleHRfX3NxM2prYjEpOwp9Ci5zdHlsZXNfbGlzdF90eXBlX2J1bGxldGVkX2xpc3RfaXRlbV9fZXM4dmltMSB7CiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjOwp9Ci5zdHlsZXNfbGlzdF90eXBlX251bWJlcmVkX2xpc3RfaXRlbV9fZXM4dmltMiB7CiAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOwp9Ci5zdHlsZXNfbGlzdEl0ZW1fX2VzOHZpbTMgewogIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHhzX19zcTNqa2IxNykgMDsKfQ==';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport 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:[]});\nexport var listItem = 'styles_listItem__es8vim3';","import { PropsWithChildren, HTMLAttributes } from 'react';\nimport { list, listItem } from './styles.css';\n\ninterface ListProps\n extends HTMLAttributes<HTMLUListElement | HTMLOListElement> {\n as?: 'ul' | 'ol';\n type: 'bulleted_list_item' | 'numbered_list_item';\n}\n\nexport const List = ({\n as: Component = 'ul',\n type,\n className,\n children,\n ...props\n}: PropsWithChildren<ListProps>) => {\n return (\n <Component className={list({ type })} {...props}>\n {children}\n </Component>\n );\n};\n\nexport const ListItem = ({\n className,\n children,\n ...props\n}: PropsWithChildren<HTMLAttributes<HTMLLIElement>>) => {\n return (\n <li className={listItem} {...props}>\n {children}\n </li>\n );\n};\n","import { memo } from 'react';\nimport RichText, { RichTextItem, RichTextProps } from './RichText/RichTexts';\nimport { Image, ImageProps } from './Image';\nimport Bookmark, { type Props as BookmarkProps } from './Bookmark/Bookmark';\n\nimport LinkPreview, { type LinkPreviewProps } from './LinkPreview/LinkPreview';\n\nexport const MemoizedRichText = memo<RichTextProps>(RichText, (prev, next) => {\n return JSON.stringify(prev.richTexts) === JSON.stringify(next.richTexts);\n});\n\nexport const MemoizedImage = memo<ImageProps>(Image, (prev, next) => {\n return (\n prev.src === next.src &&\n prev.alt === next.alt &&\n JSON.stringify(prev.caption) === JSON.stringify(next.caption)\n );\n});\n\nexport const MemoizedBookmark = memo<BookmarkProps>(Bookmark, (prev, next) => {\n return prev.url === next.url;\n});\n\nexport const MemoizedLinkPreview = memo<LinkPreviewProps>(\n LinkPreview,\n (prev, next) => {\n return prev.url === next.url;\n }\n);\n\n// 타입 가드 유틸리티\nexport const isRichTextArray = (value: unknown): value is RichTextItem[] => {\n if (!Array.isArray(value)) return false;\n return value.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n item.type === 'text'\n );\n};\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/RichText/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA5WWz26jMBDG73kKH7cHR8lmq7bk1sM+wGqlPSKDB3AwNh1MKbvqu6+w6/yD4HCK5Pnm9+GZzMjrxvQSmhhFWvyGDxMnWvLYYAtxnPFsZ7ot+bciJNPK0A5EXpiIDJr96nO1vk4WhkmRXqR/P6VbdUScaDK/MShKMAXqNi8uMDuLMfBhKIdUIzNCq4hIoYB+6SeJreKAg+qC9mOadhRPolLNLymPlpKwtMxRt4pH5J3hN0pTLTU2dNBToQbe61ETx83b7lAmzw/7FSE141yoPCKb9RYqslnvHqEaAolGDkiRcdE2nusOf9kz2lQetQXLuuiQSzB9rXNkddHTIfrHBmkFXLSn7O0pO2OVkP2N7J82aG/lc5tTaiP+wnCN568L2BrcLognPFkCF00tWR8RF6SJ1Gk5BN4BjUiZpEyKXEWkEpzLW92RGuMcWe/b82TbM/UhSg/9pk7sPuTlYYaaoO6Uxz6HsF9qx2VzXI1M5ce/00sI7OWOnMyRe5BSd57MQmQvd+R0jpwjwLEWSbjEVu24fLbG8jRYabDEVuyoMEetW6zlkctDXC935GyWLFTpuRDkWrGj5nNUBO6hWQhqtY5ZzHeM9XFytoEcP7/aXjQ0KcloiYnw0Ix9iwW+Y4YzPtwxVWNnscB5AuKsyzvGbmx9WGA9AXHWMjyXY+dyUZuvGc64Cg7u2FcuafM1wtmqOyZ7bFwtMJ6AOGsdHP2xsVpifI1wtnVoN4xd9QLXa4IzfbtlWtVWtvFWdfgNNv2Ekme78u18rQlVAAqzDzzGCOk0cpogsDIi9ocOJ0NEvwNmUne0Q1ZfBj//AzVk5MjdCgAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var link = 'styles_link__fdf3twq';\nexport var richText = _7a468({defaultClassName:'styles__fdf3tw0',variantClassNames:{bold:{true:'styles_richText_bold_true__fdf3tw1'},italic:{true:'styles_richText_italic_true__fdf3tw2'},strikethrough:{true:'styles_richText_strikethrough_true__fdf3tw3'},underline:{true:'styles_richText_underline_true__fdf3tw4'},code:{true:'styles_richText_code_true__fdf3tw5'},color:{'default':'styles_richText_color_default__fdf3tw6',gray:'styles_richText_color_gray__fdf3tw7',brown:'styles_richText_color_brown__fdf3tw8',orange:'styles_richText_color_orange__fdf3tw9',yellow:'styles_richText_color_yellow__fdf3twa',green:'styles_richText_color_green__fdf3twb',blue:'styles_richText_color_blue__fdf3twc',purple:'styles_richText_color_purple__fdf3twd',pink:'styles_richText_color_pink__fdf3twe',red:'styles_richText_color_red__fdf3twf',gray_background:'styles_richText_color_gray_background__fdf3twg',brown_background:'styles_richText_color_brown_background__fdf3twh',orange_background:'styles_richText_color_orange_background__fdf3twi',yellow_background:'styles_richText_color_yellow_background__fdf3twj',green_background:'styles_richText_color_green_background__fdf3twk',blue_background:'styles_richText_color_blue_background__fdf3twl',purple_background:'styles_richText_color_purple_background__fdf3twm',pink_background:'styles_richText_color_pink_background__fdf3twn',red_background:'styles_richText_color_red_background__fdf3two'}},defaultVariants:{},compoundVariants:[[{strikethrough:true,underline:true},'styles_richText_compound_0__fdf3twp']]});","import { ReactNode } from 'react';\nimport { richText, link } from './styles.css';\n\n// 지원하는 Notion 색상 타입 정의\ntype NotionColor =\n | 'default'\n | 'gray'\n | 'brown'\n | 'orange'\n | 'yellow'\n | 'green'\n | 'blue'\n | 'purple'\n | 'pink'\n | 'red'\n | 'gray_background'\n | 'brown_background'\n | 'orange_background'\n | 'yellow_background'\n | 'green_background'\n | 'blue_background'\n | 'purple_background'\n | 'pink_background'\n | 'red_background';\n\nexport interface RichTextItem {\n type: 'text' | 'mention' | string;\n annotations: {\n bold: boolean;\n italic: boolean;\n strikethrough: boolean;\n underline: boolean;\n code: boolean;\n color: string;\n };\n bold: boolean;\n italic: boolean;\n strikethrough: boolean;\n underline: boolean;\n code: boolean;\n color: string;\n plain_text: string;\n href: string | null;\n\n text?: {\n content: string;\n link: {\n url: string | null;\n } | null;\n };\n}\n\n/**\n * 링크 컴포넌트를 생성하는 함수\n */\nconst renderLink = (href: string, content: ReactNode) => (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={link}>\n {content}\n </a>\n);\n\nexport interface RichTextProps {\n richTexts: RichTextItem[];\n}\n\nconst RichTexts = ({ richTexts }: RichTextProps) => {\n return (\n <>\n {richTexts.map((text, index) => {\n const { bold, italic, strikethrough, underline, code, color } =\n text.annotations;\n\n // 컨텐츠 렌더링 로직\n let content: React.ReactNode;\n\n // TODO: Refactor\n switch (text.type) {\n case 'text': {\n if (text.text) {\n const { text: textData } = text;\n\n content = textData.link?.url\n ? renderLink(textData.link.url, textData.content)\n : textData.content;\n } else {\n content = text.plain_text;\n }\n break;\n }\n\n case 'mention': {\n content = text.href\n ? renderLink(text.href, text.plain_text)\n : text.plain_text;\n break;\n }\n\n default: {\n content = text.plain_text;\n }\n }\n\n // NOTION COLOR 적용\n // color 값이 지원하는 색상이 아닌 경우 undefined로 처리하여 타입 에러 방지\n const notionColors: NotionColor[] = [\n 'default',\n 'gray',\n 'brown',\n 'orange',\n 'yellow',\n 'green',\n 'blue',\n 'purple',\n 'pink',\n 'red',\n 'gray_background',\n 'brown_background',\n 'orange_background',\n 'yellow_background',\n 'green_background',\n 'blue_background',\n 'purple_background',\n 'pink_background',\n 'red_background',\n ];\n\n const safeColor = notionColors.includes(color as NotionColor)\n ? (color as NotionColor)\n : undefined;\n\n return (\n <span\n key={index}\n className={richText({\n bold,\n italic,\n strikethrough,\n underline,\n code,\n color: safeColor,\n })}\n >\n {content}\n </span>\n );\n })}\n </>\n );\n};\n\nexport default RichTexts;\n","import { useState } from 'react';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport {\n imageContainer,\n imageWrapper,\n imageStyle,\n caption,\n skeletonWrapper,\n} from './styles.css';\nimport { RichTextItem } from '../RichText/RichTexts';\nimport Skeleton from '../../../Skeleton';\n\nexport interface ImageFormat {\n block_width?: number;\n block_height?: number;\n block_aspect_ratio?: number;\n}\n\nconst MAX_WIDTH = 720;\n\n// 이미지 태그에 사용되는 aspectRatio 스타일\nconst getImageTagStyle = (format?: ImageFormat) => {\n return format?.block_aspect_ratio\n ? { aspectRatio: `${format.block_aspect_ratio}` }\n : undefined;\n};\n\nexport interface Props {\n src: string;\n alt: string;\n caption?: RichTextItem[];\n priority?: boolean;\n format?: ImageFormat;\n isColumn?: boolean;\n}\n\nconst Image = ({\n src,\n alt,\n caption: imageCaption,\n format,\n isColumn = false,\n}: Props) => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n return (\n <div className={imageContainer}>\n <div className={imageWrapper} style={getImageStyles(format, isColumn)}>\n <div className={skeletonWrapper({ isLoaded })}>\n <Skeleton variant=\"image\" />\n </div>\n <img\n className={imageStyle({\n loaded: isLoaded,\n hasAspectRatio: !!format?.block_aspect_ratio,\n })}\n src={src}\n alt={alt}\n loading=\"lazy\"\n onLoad={() => setIsLoaded(true)}\n width={format?.block_width}\n height={format?.block_height}\n style={getImageTagStyle(format)}\n />\n </div>\n {imageCaption && imageCaption.length > 0 && (\n <figcaption className={caption}>\n <MemoizedRichText richTexts={imageCaption} />\n </figcaption>\n )}\n </div>\n );\n};\n\nexport default Image;\n\n// 이미지 스타일 유틸리티 함수\nconst getImageStyles = (format?: ImageFormat, isColumn: boolean = false) => {\n // width 계산 로직\n const getWidthStyle = () => {\n if (\n !isColumn &&\n format?.block_aspect_ratio &&\n format.block_aspect_ratio < 1\n ) {\n return `${format.block_aspect_ratio * 100}%`;\n }\n\n if (format?.block_width) {\n return format.block_width > MAX_WIDTH\n ? '100%'\n : `${format.block_width}px`;\n }\n\n return '100%';\n };\n\n // aspectRatio 계산 로직\n const getAspectRatioStyle = () => {\n return format?.block_aspect_ratio ? `${format.block_aspect_ratio}` : 'auto';\n };\n\n return {\n width: getWidthStyle(),\n aspectRatio: getAspectRatioStyle(),\n };\n};\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Image/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA4VTsW7bMBDd/RVcCtQDDTku2kaZiq6dkqGjcBZP0sUUyfJOjuWi/16QiezYhp1J5JHv8d29pwXLaJEr6qHFn94JkMNYVXfNytVNof7OlAqeSci7UkW0ILTFh5lSL2SkK9WyKD6lbQBjyLWl2kL8rDUHqMm1mvuq4j+r5816eT9XRbq59tFg1BEMDTzdfy0+5pruzQHUzBPEbzE21r+UqiNj0KVaD7ElV6pCwSA+VQxxsDCWqrG4S4X01YYi1q/ya2+HPoPBUus0CfZcqhqdYHyY/Zst3k/jd4QQjrNY3phFDzt9Mo8zqqe0nojuMtHZ+DqktpPyspe19fUmVSSCm972aboyqmKxYoXAWYRfP2MtuiFJnWYnrwixHgyaSuJwELXKot54S7W8jWzA8gH65RRaXIF2wD84YC2PIORPKb5mCsjHOqbzaRJHqhpCan6CfMsQwZ3obObRRpV89nFKVt6wZqy9MxDHKVqr+TFFWny4mdycJu9EM+1xuilj8G2E0I06nT3RHjX3YO0EHObvG+ANWhTvznL1/SxXsGZvB8mWZln5p7HYyNvySnKm/V6TM7jLHn6YmuvqiH9dpuT+htVXCU6chsuc/Qd6kFP2gwQAAA==';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var caption = 'styles_caption__2f3ncf7';\nexport var imageContainer = 'styles_imageContainer__2f3ncf0';\nexport var imageStyle = _7a468({defaultClassName:'styles_imageStyle__2f3ncf2',variantClassNames:{loaded:{true:'styles_imageStyle_loaded_true__2f3ncf3',false:'styles_imageStyle_loaded_false__2f3ncf4'},hasAspectRatio:{true:'styles_imageStyle_hasAspectRatio_true__2f3ncf5',false:'styles_imageStyle_hasAspectRatio_false__2f3ncf6'}},defaultVariants:{loaded:false,hasAspectRatio:false},compoundVariants:[]});\nexport var imageWrapper = 'styles_imageWrapper__2f3ncf1';\nexport var skeletonWrapper = _7a468({defaultClassName:'styles_skeletonWrapper__2f3ncf8',variantClassNames:{isLoaded:{true:'styles_skeletonWrapper_isLoaded_true__2f3ncf9',false:'styles_skeletonWrapper_isLoaded_false__2f3ncfa'}},defaultVariants:{isLoaded:false},compoundVariants:[]});","import 'src/components/Skeleton/styles.css.ts.vanilla.css?source=QGtleWZyYW1lcyBzdHlsZXNfc2hpbW1lcl9fYTNnOHE5MCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7CiAgfQp9Ci5zdHlsZXNfc2tlbGV0b25fX2EzZzhxOTEgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKICBib3JkZXItcmFkaXVzOiA0cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLnN0eWxlc19za2VsZXRvbl9fYTNnOHE5MTo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDAsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAyMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSA2MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpOwogIGFuaW1hdGlvbjogc3R5bGVzX3NoaW1tZXJfX2EzZzhxOTAgLjhzIGluZmluaXRlIGxpbmVhcjsKICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9Ci5zdHlsZXNfcmVjdF9fYTNnOHE5MiB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAyMHB4OwogIG1hcmdpbi1ib3R0b206IDhweDsKfQouc3R5bGVzX2NpcmNsZV9fYTNnOHE5MyB7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiA1MHB4OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQouc3R5bGVzX2ltYWdlX19hM2c4cTk0IHsKICB3aWR0aDogMTAwJTsKICBib3JkZXItcmFkaXVzOiA4cHg7Cn0=';\nexport var circle = 'styles_circle__a3g8q93';\nexport var image = 'styles_image__a3g8q94';\nexport var rect = 'styles_rect__a3g8q92';\nexport var skeleton = 'styles_skeleton__a3g8q91';","import * as styles from './styles.css';\n\ntype SkeletonProps = {\n /**\n * 스켈레톤 형태 - 직사각형, 원형, 이미지 크기\n * @default 'rect'\n */\n variant?: 'rect' | 'circle' | 'image';\n /**\n * 커스텀 너비 (px 또는 %)\n */\n width?: string;\n /**\n * 커스텀 높이 (px 또는 %)\n */\n height?: string;\n /**\n * 추가 CSS 클래스명\n */\n className?: string;\n};\n\n/**\n * 콘텐츠 로딩 중에 표시되는 물결 효과가 있는 스켈레톤 컴포넌트입니다.\n * 이미지, 텍스트 등의 로딩 상태를 표시하는 데 사용합니다.\n */\nconst Skeleton = ({\n variant = 'rect',\n width,\n height,\n className,\n}: SkeletonProps) => {\n const getVariantClass = () => {\n switch (variant) {\n case 'circle':\n return styles.circle;\n case 'image':\n return styles.image;\n case 'rect':\n default:\n return styles.rect;\n }\n };\n\n return (\n <div\n className={`${styles.skeleton} ${getVariantClass()} ${className || ''}`}\n style={{\n width: width || undefined,\n height: height || undefined,\n }}\n />\n );\n};\n\nexport default Skeleton;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Bookmark/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA71WPW/bMBDd/Su4FIgHGpLito6yFOjUpUNboKNBiSfrYopkSNqyUuS/F6S+EztJi6KTwfvi47t3J6+sawTYrUC5327vzf2mKSLya0GIg5OjHHJlmEMlUyKVhNsFIRytFqxJSSZUvvcWzThHuaNO6ZQcmbmi1GqWe9PJbrf2/vpun8Wb5TQ2U86p6pXwx8Wqw5czw3t8ccA3wCgEnHzlTBkOJiWxPhGrBPKudq6EMpa27r78ejmmUMM4HmyPpTV+CzZa8QFQEVLUEUwhVJ2SEjkH6W3OMGmxZSlTJ2pLxlVNolViCTAbWKvYiZaAu9KlZGOguvi4tPRXhCeOtQaewmkGaz/nSUkH0vXVklCn4/wp2RmzMJRhy9tzpPrflKxJTOJNpAcT5Wggb1+cK3GoAg93B+uwaGgHIiX+JqAZuBpapp6zN0LXBo4I9WclHUPpW9W+4fp8u1tk8RQZE7iTFB1UNiU5SAfmLKzR9bwrb8L4pWI76PGtA74auStTEkfRO1+kL9qfVXYHuaMF+uv9DROjVr14RmCvK9NWQ+9gJgGHTgzg3s8FEP3xCBJSKOmoxQfoI12j1c4wXTbU+77jA8y0dBzT6o6Gs4k/g5NaqDBTYlR0EvLD2KbzGfY7aQgLURXKoYHx6v3FFnb7bHSAEKgtWu+qS3QQCAC/5mrD9JRQDjY3qH2Lelo//Cdaxyx3kRQLuZKcmaYPvV5OFZiskr+kZRg5WkO2R0czFcasPwqUQHPBKp2SZOrwe0sZDLN2BOMwZ2JKqEUHX1k1iPRjYHPWyg7xC1+Wif5v/i2h2mA1oTM5vxkvLJsdex3pbFeMtBTsiPmosc1sr3SEPCUoLGNbGpT7IMOx2sGIH2Fc2mo3odo5BZxV/4vC8FvzyRs+VcCRkauJa51E+rQM175txU9I7v9rPC4efwM4QP1joggAAA==';\nexport var card = 'styles_card__qrq8yf1';\nexport var content = 'styles_content__qrq8yf2';\nexport var description = 'styles_description__qrq8yf6';\nexport var favicon = 'styles_favicon__qrq8yf8';\nexport var link = 'styles_link__qrq8yf0';\nexport var previewContainer = 'styles_previewContainer__qrq8yf3';\nexport var previewImage = 'styles_previewImage__qrq8yf4';\nexport var siteName = 'styles_siteName__qrq8yf7';\nexport var title = 'styles_title__qrq8yf5';\nexport var urlText = 'styles_urlText__qrq8yf9';","import {\n link,\n card,\n content,\n previewContainer,\n previewImage,\n title,\n description,\n siteName,\n favicon,\n urlText,\n} from './styles.css';\nimport { OpenGraphData } from './type';\n\nexport interface Props {\n url: string;\n metadata?: OpenGraphData;\n}\n\nconst Bookmark = ({ url, metadata }: Props) => {\n return (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className={link}>\n <div className={card}>\n <div className={content}>\n <div>\n <h4 className={title}>{metadata?.title || url}</h4>\n <p className={description}>{metadata?.description || ''}</p>\n </div>\n <div className={siteName}>\n {metadata?.favicon && (\n <img src={metadata.favicon} alt=\"\" className={favicon} />\n )}\n <span className={urlText}>{metadata?.url || ''}</span>\n </div>\n </div>\n {metadata?.image && (\n <div className={previewContainer}>\n <img\n className={previewImage}\n src={metadata.image}\n alt={metadata.title}\n loading=\"lazy\"\n onError={(e) => {\n // 이미지 로드 실패 시 처리\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n }}\n />\n </div>\n )}\n </div>\n </a>\n );\n};\n\nexport default Bookmark;\n","import { useState, useEffect } from 'react';\nimport * as styles from './styles.css';\n\ninterface RepoData {\n name: string;\n full_name: string;\n owner: {\n avatar_url: string;\n };\n updated_at: string;\n}\n\ninterface FigmaData {\n name: string;\n url: string;\n thumbnailUrl?: string;\n}\n\n// GitHub 레포지토리 데이터를 가져오는 함수\nconst fetchGitHubRepoData = async (\n repoPath: string\n): Promise<RepoData | null> => {\n try {\n const apiUrl = `https://api.github.com/repos/${repoPath}`;\n const response = await fetch(apiUrl);\n\n if (!response.ok) {\n throw new Error('Failed to fetch GitHub repo data');\n }\n\n const data = await response.json();\n return data;\n } catch (error) {\n console.error('Error fetching GitHub repo data:', error);\n return null;\n }\n};\n\n// Figma 파일 정보 추출 함수\nconst extractFigmaData = (url: string): FigmaData | null => {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.hostname.includes('figma.com')) {\n // URL에서 파일 이름 추출\n const pathSegments = parsedUrl.pathname.split('/');\n const fileSegment = pathSegments.find((segment) =>\n segment.includes('file')\n );\n\n if (!fileSegment) return null;\n\n // 파일 ID와 이름 파싱\n const fileIdMatch = fileSegment.match(/file\\/([^/]+)/);\n const fileId = fileIdMatch ? fileIdMatch[1] : '';\n\n // URL에서 파일 이름 추출 (URL 파라미터에서)\n let fileName = '';\n let mode = '';\n\n // URL 경로에서 파일 이름 추출 시도\n if (pathSegments.length > 3) {\n // URL 경로에서 이름 부분 추출 (/file/ID/NAME 형식)\n const encodedName = pathSegments[3];\n if (encodedName) {\n // URL 디코딩 및 하이픈을 공백으로 변환\n fileName = decodeURIComponent(encodedName).replace(/-/g, ' ');\n }\n }\n\n // 파일 이름이 추출되지 않았으면 URL에서 직접 찾기\n if (!fileName && parsedUrl.pathname.includes('-')) {\n const nameMatch = parsedUrl.pathname.match(/\\/([^/]+)(?:\\?|$)/);\n if (nameMatch && nameMatch[1]) {\n fileName = decodeURIComponent(nameMatch[1].replace(/-/g, ' '));\n }\n }\n\n // 파라미터에서 모드 추출 (dev, design 등)\n if (parsedUrl.search) {\n const searchParams = new URLSearchParams(parsedUrl.search);\n mode = searchParams.get('mode') || '';\n }\n\n // 이름이 추출되지 않았으면 기본값 사용\n fileName = fileName || 'Figma Design';\n\n return {\n name: fileName,\n url: url,\n thumbnailUrl: 'https://static.figma.com/app/icon/1/favicon.svg',\n };\n }\n return null;\n } catch (error) {\n console.error('Error parsing Figma URL:', error);\n return null;\n }\n};\n\n// GitHub URL에서 레포지토리 경로 추출\nconst extractRepoPathFromUrl = (url: string): string | null => {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.hostname === 'github.com') {\n // URL 경로에서 첫 번째 '/'를 제거하고 나머지 경로 반환\n const path = parsedUrl.pathname.substring(1);\n // 레포지토리 경로는 일반적으로 'username/repo-name' 형식\n const pathParts = path.split('/');\n if (pathParts.length >= 2) {\n return `${pathParts[0]}/${pathParts[1]}`;\n }\n }\n return null;\n } catch (error) {\n console.error('Error parsing URL:', error);\n return null;\n }\n};\n\n// URL이 어떤 타입의 링크인지 확인\nconst getLinkType = (url: string): 'github' | 'figma' | 'unknown' => {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.hostname === 'github.com') {\n return 'github';\n } else if (parsedUrl.hostname.includes('figma.com')) {\n return 'figma';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n};\n\n// 날짜 포맷팅 함수\nconst formatUpdatedTime = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffInHours = Math.floor(\n (now.getTime() - date.getTime()) / (1000 * 60 * 60)\n );\n\n if (diffInHours < 24) {\n return `Updated ${diffInHours} hours ago`;\n } else {\n const diffInDays = Math.floor(diffInHours / 24);\n if (diffInDays === 1) {\n return 'Updated yesterday';\n } else if (diffInDays < 30) {\n return `Updated ${diffInDays} days ago`;\n } else {\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `Updated on ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n }\n }\n};\n\nexport interface LinkPreviewProps {\n url: string;\n}\nconst LinkPreview = ({ url }: LinkPreviewProps) => {\n const [repoData, setRepoData] = useState<RepoData | null>(null);\n const [figmaData, setFigmaData] = useState<FigmaData | null>(null);\n const [loading, setLoading] = useState(true);\n const [linkType, setLinkType] = useState<'github' | 'figma' | 'unknown'>(\n 'unknown'\n );\n\n useEffect(() => {\n const loadLinkData = async () => {\n setLoading(true);\n const type = getLinkType(url);\n setLinkType(type);\n\n if (type === 'github') {\n const repoPath = extractRepoPathFromUrl(url);\n if (repoPath) {\n const data = await fetchGitHubRepoData(repoPath);\n setRepoData(data);\n }\n } else if (type === 'figma') {\n const data = extractFigmaData(url);\n setFigmaData(data);\n }\n\n setLoading(false);\n };\n\n loadLinkData();\n }, [url]);\n\n // 레포지토리 이름 추출 (full_name에서 organization/repo 형식)\n const repoName =\n repoData?.name ||\n extractRepoPathFromUrl(url)?.split('/')[1] ||\n 'Repository';\n\n // 업데이트 시간 포맷팅\n const updatedTimeText = repoData?.updated_at\n ? formatUpdatedTime(repoData.updated_at)\n : '';\n\n // 모든 링크 타입을 조건부 렌더링으로 통합\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.link}\n >\n {linkType === 'figma' && figmaData ? (\n // Figma 프리뷰 렌더링\n <div className={styles.preview}>\n <div className={styles.iconContainer}>\n <img\n src={\n figmaData.thumbnailUrl ||\n 'https://static.figma.com/app/icon/1/favicon.svg'\n }\n alt=\"Figma icon\"\n className={styles.icon}\n />\n </div>\n <div className={styles.content}>\n <div className={styles.title}>{figmaData.name}</div>\n <div className={styles.description}>www.figma.com</div>\n </div>\n </div>\n ) : linkType === 'github' ? (\n // GitHub 프리뷰 렌더링\n <div className={`${styles.preview} ${styles.githubPreview}`}>\n <div className={styles.iconContainer}>\n <img\n src={\n repoData?.owner?.avatar_url ||\n 'https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png'\n }\n alt=\"Repository icon\"\n className={styles.icon}\n />\n </div>\n <div className={`${styles.content} ${styles.githubContent}`}>\n <div className={styles.title}>{repoName}</div>\n <div className={styles.description}>\n {loading ? 'Loading...' : `${repoName} • ${updatedTimeText}`}\n </div>\n </div>\n </div>\n ) : (\n // 기본 링크 프리뷰 렌더링\n <div className={styles.preview}>\n <div className={styles.content}>\n <div className={styles.title}>{url}</div>\n </div>\n </div>\n )}\n </a>\n );\n};\n\nexport default LinkPreview;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/LinkPreview/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7WUwZLaMAyG7/sUvnSmezBDgO120uO+QKc99Mg4sUIEjpXagoTt9N07djAku9By6SkTyZY+/ZY083w04NcG7W69pqxdNtlc/HoQgqFnqaEkpxjJ5sKShS8PQmj0rVHHXBSGyl2wtEprtBvJ1ObioNxHKX2rymDqe79e+5/L7a7Inh/HhwtipuZf538/zE6ErYMDQpcgswh5ZqkM9CF6QU6Dy0XW9sKTQX2KX5Ih5+XgThlWj5cr0imNe594BuO3aJONPjNV8QodwFWGulzUqDXYYGOnrMdBqoJ66WulqRPz2cILUD5KpwxurESGxueiBMvgRpK81aJQHs6JVUy8Ue8UHsEVfxUsrwN2lO3Cd44W/yal7ibRSrIMllO0xXX5wzcXmciE2jMli9TooBykKcnsG3tdxEs2LMm+kGWFNjzXkHN5PecNUbd7z1gd5Ql87OpQc52LxezJQRMMNeCm5rElYvvaod3lYv4WLRGtItEpXDaffxgHS/9UbKFkWWFgGGq6r+18c34LmLwFIxtIDE+RoSLL0uMrpEh8bGnjVFsfZfB9x1eYNNQh9lO81p2Ar178EZ3SQ4MFmUt3LOL9OFb5dMbC4jgfuz0uYb1cHGAMth59fJ4aGWJ/Q9g6nVPtuHoNvnTYhnZKGny6X4PLfuGbFXgoyWrljuno8j+UsUGu98XX6ZA+x0Ia1cvURatTQ6a1aaDiu1fAkONlOrqfY4534xFBZQHcQZzFPykHOzkaBgAA';\nexport var content = 'styles_content__o1p3m12';\nexport var description = 'styles_description__o1p3m16';\nexport var githubContent = 'styles_githubContent__o1p3m18';\nexport var githubPreview = 'styles_githubPreview__o1p3m17';\nexport var icon = 'styles_icon__o1p3m14';\nexport var iconContainer = 'styles_iconContainer__o1p3m13';\nexport var link = 'styles_link__o1p3m10';\nexport var preview = 'styles_preview__o1p3m11';\nexport var title = 'styles_title__o1p3m15';","import { List, ListItem } from './List';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport {\n BulletedListItemBlock,\n NumberedListItemBlock,\n} from '../../../../types';\n\ninterface RecursiveListItemProps {\n block: BulletedListItemBlock | NumberedListItemBlock;\n}\n// 리스트 아이템을 렌더링하는 컴포넌트 (중첩 리스트 지원)\nconst RecursiveListItem = ({ block }: RecursiveListItemProps) => {\n const blockType = block.type;\n let content;\n\n if (blockType === 'bulleted_list_item') {\n content = block.bulleted_list_item;\n } else {\n content = block.numbered_list_item;\n }\n\n const richTexts = content.rich_text;\n\n // 자식 블록들을 필터링하여 현재 리스트 타입(bulleted 또는 numbered)과 일치하는 블록만 선택\n const filteredChildren = block.children?.filter(\n (child): child is BulletedListItemBlock | NumberedListItemBlock =>\n child.type === blockType\n );\n\n return (\n <ListItem>\n <MemoizedRichText richTexts={richTexts} />\n {filteredChildren && filteredChildren.length > 0 && (\n <RecursiveListGroup blocks={filteredChildren} type={blockType} />\n )}\n </ListItem>\n );\n};\n\ninterface RecursiveListGroupProps {\n blocks: (BulletedListItemBlock | NumberedListItemBlock)[];\n type: 'bulleted_list_item' | 'numbered_list_item';\n}\n// 중첩 리스트 그룹을 렌더링하는 컴포넌트\nconst RecursiveListGroup = ({ blocks, type }: RecursiveListGroupProps) => {\n if (!blocks || blocks.length === 0) return null;\n\n return (\n <List\n as={type === 'numbered_list_item' ? 'ol' : 'ul'}\n type={type}\n role=\"list\"\n aria-label={type}\n >\n {blocks.map((block) => (\n <RecursiveListItem key={block.id} block={block} />\n ))}\n </List>\n );\n};\n\nexport interface ListBlocksRendererProps {\n blocks: (BulletedListItemBlock | NumberedListItemBlock)[];\n startIndex: number;\n type: (BulletedListItemBlock | NumberedListItemBlock)['type'];\n}\n\nconst ListBlocksRenderer = ({\n blocks,\n startIndex,\n type,\n}: ListBlocksRendererProps) => {\n let consecutiveItems = 0;\n for (let i = startIndex; i < blocks.length; i++) {\n const block = blocks[i];\n if (!block) break;\n if (block.type === type) {\n consecutiveItems++;\n } else {\n break;\n }\n }\n\n const listItems = blocks.slice(startIndex, startIndex + consecutiveItems);\n\n return (\n <List\n as={type === 'numbered_list_item' ? 'ol' : 'ul'}\n type={type}\n role=\"list\"\n aria-label={type}\n >\n {listItems.map((block) => (\n <RecursiveListItem key={block.id} block={block} />\n ))}\n </List>\n );\n};\n\nexport default ListBlocksRenderer;\n","import { ReactNode, useMemo } from 'react';\nimport { codeBlock } from './styles.css';\nimport Prism, { Grammar, Token } from 'prismjs';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport { RichTextItem } from '../RichText/RichTexts';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-jsx';\nimport 'prismjs/components/prism-tsx';\n\nif (typeof window !== 'undefined') {\n window.Prism = Prism;\n}\n\nconst renderToken = (token: string | Token, i: number): ReactNode => {\n if (typeof token === 'string') {\n return <span key={i}>{token}</span>;\n }\n\n const content = token.content;\n let tokenContent: ReactNode;\n\n if (Array.isArray(content)) {\n tokenContent = content.map((subToken, j) => renderToken(subToken, j));\n } else if (typeof content === 'object' && content !== null) {\n tokenContent = renderToken(content as Token, 0);\n } else {\n tokenContent = content;\n }\n\n return (\n <span key={i} className={`token ${token.type}`}>\n {tokenContent}\n </span>\n );\n};\n\nexport interface Props {\n code: string;\n language: string;\n caption?: RichTextItem[];\n}\n\nconst CodeBlock = ({ code, language, caption }: Props) => {\n const tokens = useMemo(() => {\n const prismLanguage =\n Prism.languages[language] || Prism.languages.plaintext;\n return Prism.tokenize(code, prismLanguage as Grammar);\n }, [code, language]);\n\n return (\n <>\n <pre className={`${codeBlock} language-${language}`}>\n <code className={`language-${language}`}>\n {tokens.map((token, i) => renderToken(token, i))}\n </code>\n </pre>\n {caption && (\n <figcaption>\n <MemoizedRichText richTexts={caption} />\n </figcaption>\n )}\n </>\n );\n};\n\nexport default CodeBlock;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Code/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb2RlQmxvY2tfXzFxbjQyeWMwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvcnMtY29kZS1iYWNrZ3JvdW5kX19zcTNqa2I1KTsKICBjb2xvcjogdmFyKC0tY29sb3JzLWNvZGUtdGV4dF9fc3EzamtiNik7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZF9fc3EzamtiMWIpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cy1tZF9fc3EzamtiMWYpOwogIG92ZXJmbG93OiBhdXRvOwogIGZvbnQtZmFtaWx5OiB2YXIoLS10eXBvZ3JhcGh5LWZvbnRGYW1pbHktY29kZV9fc3Ezamticyk7CiAgbGluZS1oZWlnaHQ6IHZhcigtLXR5cG9ncmFwaHktbGluZUhlaWdodC1yZWxheGVkX19zcTNqa2IxNik7CiAgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLXNtX19zcTNqa2IxOSkgMDsKfQ==';\nexport var codeBlock = 'styles_codeBlock__1qn42yc0';","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Typography/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA82VvW6DMBSFd57CYxkc8aOoDXmBzu3QERl8AbcGu7aTQKq+e4VTk5A0qB1SMeLj43t8PksstOk46FQSRUpFZJWmq4CslmWAPjyEcsGFStCWqDuM7YfGBlqTpvo9fn3LQn/tIcRZA7gCVlbG7TWdFPa8DvfqoxVxRjQM1qX1SkIpa0rn05LkrClxq4d9D/65diLe20MK0Ris2R5+GN9rz2wPo+Hbo213LXevvhxyN0LVhA9DA+veVcyADQUJkgrwThG59j69xdVOk0LkG423TLOMg21YbExfUIIi2SItOKPjtqViNVGdmx3Z0d8mLIpCg7HefjkTioLCilC20e5Gh8Unu4Z1PVwC/NOsFZAeQ+iihv+E/1fkqtC52r9xywSnw8B48r0d6VIfBWdqfTwlm65t9oQjFzWaFeHIubpbEeblsC+/JHxS22q6ttkTjl3UeFaEY+fa34rwKBq5ZDz6p0wWNzvGXy21e5+nBwAA';\nexport var heading1 = 'styles_heading1__90a95g1';\nexport var heading2 = 'styles_heading2__90a95g2';\nexport var heading3 = 'styles_heading3__90a95g3';\nexport var paragraph = 'styles_paragraph__90a95g0';","import { HTMLAttributes, PropsWithChildren } from 'react';\nimport { paragraph, heading1, heading2, heading3 } from './styles.css';\n\ntype TypographyProps = PropsWithChildren<HTMLAttributes<HTMLElement>>;\n\nexport const Paragraph = ({\n className,\n children,\n ...props\n}: TypographyProps) => {\n return (\n <p className={paragraph} {...props}>\n {children}\n </p>\n );\n};\n\nexport const Heading1 = ({\n className,\n children,\n ...props\n}: TypographyProps) => {\n return (\n <h1 className={heading1} {...props}>\n {children}\n </h1>\n );\n};\n\nexport const Heading2 = ({\n className,\n children,\n ...props\n}: TypographyProps) => {\n return (\n <h2 className={heading2} {...props}>\n {children}\n </h2>\n );\n};\n\nexport const Heading3 = ({\n className,\n children,\n ...props\n}: TypographyProps) => {\n return (\n <h3 className={heading3} {...props}>\n {children}\n </h3>\n );\n};\n","import 'src/components/Renderer/components/Column/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb2x1bW5Db250YWluZXJfX3dsZTZ3ZTAgewogIGZsZXg6IDE7CiAgbWluLXdpZHRoOiAwOwp9Ci5zdHlsZXNfY29sdW1uTGlzdENvbnRhaW5lcl9fd2xlNndlMSB7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogcm93OwogIGdhcDogMXJlbTsKICBtYXJnaW4tYm90dG9tOiAxcmVtOwogIHdpZHRoOiAxMDAlOwp9CkBtZWRpYSAobWF4LXdpZHRoOiA0MjBweCkgewogIC5zdHlsZXNfY29sdW1uTGlzdENvbnRhaW5lcl9fd2xlNndlMSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIH0KfQ==';\nexport var columnContainer = 'styles_columnContainer__wle6we0';\nexport var columnListContainer = 'styles_columnListContainer__wle6we1';","import { ColumnBlock } from '../../../../types';\nimport BlockRenderer from '../Block/BlockRenderer';\nimport { columnContainer } from './styles.css';\n\nexport interface ColumnProps {\n block: ColumnBlock;\n}\n\nconst Column = ({ block }: ColumnProps) => {\n if (!block || !block.children) return null;\n\n return (\n <div className={columnContainer}>\n {block.children.map((childBlock) => (\n <BlockRenderer key={childBlock.id} block={childBlock} isColumn />\n ))}\n </div>\n );\n};\n\nexport default Column;\n","import Column from './Column';\nimport { columnListContainer } from './styles.css';\nimport { ColumnListBlock } from '../../../../types';\n\nexport interface ColumnListProps {\n block: ColumnListBlock;\n}\n\nconst ColumnList = ({ block }: ColumnListProps) => {\n if (!block || !block.children) return null;\n\n return (\n <div className={columnListContainer}>\n {block.children.map((column) => (\n <Column key={column.id} block={column} />\n ))}\n </div>\n );\n};\n\nexport default ColumnList;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Quote/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb250YWluZXJfX21yYTluMCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG1hcmdpbjogdmFyKC0tc3BhY2luZy14c19fc3EzamtiMTgpIDA7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14c19fc3EzamtiMTgpIDAgdmFyKC0tc3BhY2luZy14c19fc3EzamtiMTgpIDFyZW07CiAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjZTFlMWUxOwogIGNvbG9yOiB2YXIoLS1jb2xvcnMtdGV4dF9fc3EzamtiMSk7CiAgZm9udC1zaXplOiB2YXIoLS10eXBvZ3JhcGh5LWZvbnRTaXplLWJhc2VfX3NxM2prYnYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS10eXBvZ3JhcGh5LWxpbmVIZWlnaHQtYmFzZV9fc3EzamtiMTUpOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQ==';\nexport var container = 'styles_container__mra9n0';","import { MemoizedRichText } from '../MemoizedComponents';\nimport { container } from './styles.css';\nimport { RichTextItem } from '../RichText/RichTexts';\n\nexport interface QuoteProps {\n richTexts: RichTextItem[];\n tabIndex?: number;\n}\n\nconst Quote = ({ richTexts, tabIndex }: QuoteProps) => {\n return (\n <blockquote className={container} tabIndex={tabIndex}>\n <MemoizedRichText richTexts={richTexts} />\n </blockquote>\n );\n};\n\nexport default Quote;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Table/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7VSy27bMBC8+ysIFAUSwDQkO86DOebSc3roUaDElbQJxVXJtfwo+u+FZElhkrZBD70Rs7vD2ZldBT5aCBnr3MIDOdbowGdZ6rv8VFIifiyE2KPhWok0ST7fL4RotK/QSaZWiU77CylDqwt0lTyELAvfN0/PeXp7GbXmxEzNh905eQNeem1wF6buM/g4YDI08wgMI9SBLy3tlajRGHD3i5+LVbzTvEr6u1XGHwuyVrcBlJheUXGUq0TSgyU5lgFPMOnjY0uV1219lH3tK55AhkZbOyndDUILsuSVQFeDR45l1qAN+AfoJ0at60FrrovnytPOGTlOfypvyutyM+vYA1Y1/0HJt6EoAzSYkzWzcevLdya9+nwzfN5SQEZySniwmrEbLGm1MYMXf0nyTS2K7O58E+hkPQpfe2herFYibQ8ikEUjfJXri+12Kbabpbi6WYpkldzFV2KhZCUcuTgrf6ad0A48Y6Gt1BYrpwRT28MMB56gnqbHdqGPGiwUrIaG2KQSfeBXJl2dE4qlfKz9hdDqN3zbmG/c4l8Iax0eaf9lOKWZ9Pq/n9EvZDpjHT8EAAA=';\nexport var firstCell = 'styles_firstCell__1rvbzfo4';\nexport var hasRowHeader = 'styles_hasRowHeader__1rvbzfo6';\nexport var headerCell = 'styles_headerCell__1rvbzfo2';\nexport var lastCell = 'styles_lastCell__1rvbzfo5';\nexport var table = 'styles_table__1rvbzfo1';\nexport var tableCell = 'styles_tableCell__1rvbzfo3';\nexport var tableContainer = 'styles_tableContainer__1rvbzfo0';","import { tableCell, firstCell, lastCell, hasRowHeader } from './styles.css';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport { TableRowBlock } from '../../../../types';\nimport { RichTextItem } from '../RichText/RichTexts';\n\ninterface TableRowProps {\n rowBlock: TableRowBlock;\n cellClassName?: string;\n rowHeaderIndex?: number;\n}\n\nconst TableRow = ({\n rowBlock,\n cellClassName = '',\n rowHeaderIndex = -1,\n}: TableRowProps) => {\n if (!rowBlock.table_row?.cells) {\n return null;\n }\n\n const { cells } = rowBlock.table_row;\n\n return (\n <tr>\n {cells.map((cell: RichTextItem[], index: number) => {\n const isFirstCell = index === 0;\n const isLastCell = index === cells.length - 1;\n const isRowHeader = index === rowHeaderIndex;\n\n let cellClasses = [tableCell, cellClassName];\n\n if (isFirstCell) cellClasses.push(firstCell);\n if (isLastCell) cellClasses.push(lastCell);\n if (isRowHeader) cellClasses.push(hasRowHeader);\n\n return (\n <td\n key={`${rowBlock.id}-cell-${index}`}\n className={cellClasses.filter(Boolean).join(' ')}\n >\n <MemoizedRichText richTexts={cell} />\n </td>\n );\n })}\n </tr>\n );\n};\n\nexport default TableRow;\n","import { tableContainer, table, headerCell } from './styles.css';\nimport TableRow from './TableRow';\nimport { TableBlock } from '../../../../types';\n\ninterface TableProps {\n block: TableBlock;\n}\n\nconst Table = ({ block }: TableProps) => {\n if (!block.table || !block.children) {\n return null;\n }\n\n const { table_width, has_column_header, has_row_header } = block.table;\n const rows =\n block.children?.filter((child) => child.type === 'table_row') || [];\n\n return (\n <div className={tableContainer}>\n <table className={table}>\n {rows.length > 0 && (\n <>\n {has_column_header && rows[0] && (\n <thead>\n <TableRow rowBlock={rows[0]} cellClassName={headerCell} />\n </thead>\n )}\n <tbody>\n {/* 유효한 row만 매핑하도록 필터링 추가 */}\n {rows\n .filter((row) => row !== undefined && row.type === 'table_row')\n .map((row, rowIndex: number) => {\n // 열 헤더가 있고 첫 번째 행이면 이미 thead에서 렌더링되었으므로 건너뜁니다\n if (has_column_header && rowIndex === 0) {\n return null;\n }\n\n return (\n <TableRow\n key={row.id}\n rowBlock={row}\n rowHeaderIndex={has_row_header ? 0 : -1}\n />\n );\n })}\n </tbody>\n </>\n )}\n </table>\n </div>\n );\n};\n\nexport default Table;\n","import Table from './Table';\nexport { default as TableRow } from './TableRow';\nexport default Table;\n","import { useState, KeyboardEvent } from 'react';\nimport { ToggleBlock } from '../../../../types';\nimport {\n toggleContainer,\n toggleHeader,\n toggleIcon,\n toggleIconOpen,\n toggleContent,\n} from './styles.css';\nimport { RichTexts } from '../../components/RichText';\nimport BlockRenderer from '../../components/Block/BlockRenderer';\n\ninterface ToggleProps {\n block: ToggleBlock;\n}\n\nconst Toggle = ({ block }: ToggleProps) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Toggle이 없거나 children이 없는 경우 렌더링하지 않음\n if (!block.toggle || !block.children) {\n return null;\n }\n\n const handleToggle = () => {\n setIsOpen(!isOpen);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={toggleContainer}>\n <div\n className={toggleHeader}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n role=\"button\"\n aria-expanded={isOpen}\n >\n <span className={`${toggleIcon} ${isOpen ? toggleIconOpen : ''}`}>\n ▶\n </span>\n <RichTexts richTexts={block.toggle.rich_text} />\n </div>\n\n {isOpen && block.children && (\n <div className={toggleContent}>\n {block.children.map((childBlock) => (\n <BlockRenderer key={childBlock.id} block={childBlock} />\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default Toggle;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/components/Toggle/styles.css.ts.vanilla.css?source=LnN0eWxlc190b2dnbGVDb250YWluZXJfX3A3dWUxejAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQouc3R5bGVzX3RvZ2dsZUhlYWRlcl9fcDd1ZTF6MSB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGN1cnNvcjogcG9pbnRlcjsKICBmb250LXNpemU6IHZhcigtLXR5cG9ncmFwaHktZm9udFNpemUtYmFzZV9fc3Ezamtidik7CiAgZm9udC13ZWlnaHQ6IHZhcigtLXR5cG9ncmFwaHktZm9udFdlaWdodC1ub3JtYWxfX3NxM2prYjEwKTsKICBjb2xvcjogaW5oZXJpdDsKICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2IxOCkgMDsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSYWRpdXMtc21fX3NxM2prYjFlKTsKfQouc3R5bGVzX3RvZ2dsZUhlYWRlcl9fcDd1ZTF6MTpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSg1NSwgNTMsIDQ3LCAwLjA4KTsKfQouc3R5bGVzX3RvZ2dsZUljb25fX3A3dWUxejIgewogIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1zbV9fc3EzamtiMTkpOwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICB3aWR0aDogMS4ycmVtOwogIGhlaWdodDogMS4ycmVtOwp9Ci5zdHlsZXNfdG9nZ2xlSWNvbk9wZW5fX3A3dWUxejMgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQouc3R5bGVzX3RvZ2dsZUNvbnRlbnRfX3A3dWUxejQgewogIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2luZy1sZ19fc3EzamtiMWMpOwogIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmcteHNfX3NxM2prYjE4KTsKICBvdmVyZmxvdzogaGlkZGVuOwp9';\nexport var toggleContainer = 'styles_toggleContainer__p7ue1z0';\nexport var toggleContent = 'styles_toggleContent__p7ue1z4';\nexport var toggleHeader = 'styles_toggleHeader__p7ue1z1';\nexport var toggleIcon = 'styles_toggleIcon__p7ue1z2';\nexport var toggleIconOpen = 'styles_toggleIconOpen__p7ue1z3';","import {\n MemoizedRichText,\n MemoizedImage,\n MemoizedBookmark,\n MemoizedLinkPreview,\n} from '../MemoizedComponents';\nimport { CodeBlock } from '../Code';\nimport { Heading1, Heading2, Heading3, Paragraph } from '../Typography';\nimport { ColumnList } from '../Column';\nimport { Quote } from '../Quote';\nimport Table from '../Table';\nimport { Toggle } from '../Toggle';\nimport { NotionBlock } from '../../../../types';\n\nexport interface Props {\n block: NotionBlock;\n isColumn?: boolean;\n}\n\nconst BlockRenderer = ({ block, isColumn = false }: Props) => {\n if (!block) return null;\n\n switch (block.type) {\n case 'link_preview':\n return <MemoizedLinkPreview url={block.link_preview.url} />;\n case 'paragraph':\n return (\n <Paragraph>\n <MemoizedRichText richTexts={block.paragraph.rich_text} />\n </Paragraph>\n );\n\n case 'heading_1':\n return (\n <Heading1>\n <MemoizedRichText richTexts={block.heading_1.rich_text} />\n </Heading1>\n );\n\n case 'heading_2':\n return (\n <Heading2>\n <MemoizedRichText richTexts={block.heading_2.rich_text} />\n </Heading2>\n );\n\n case 'heading_3':\n return (\n <Heading3>\n <MemoizedRichText richTexts={block.heading_3.rich_text} />\n </Heading3>\n );\n\n case 'code':\n return (\n <div>\n <CodeBlock\n code={block.code.rich_text[0]?.text?.content || ''}\n language={block.code.language}\n caption={block.code.caption}\n />\n </div>\n );\n\n case 'image':\n return (\n <figure>\n <MemoizedImage\n src={block.image.file?.url || block.image.external?.url || ''}\n alt={block.image.caption?.[0]?.plain_text || ''}\n caption={block.image.caption}\n format={block.image.format}\n isColumn={isColumn}\n />\n </figure>\n );\n\n case 'bookmark':\n return (\n <MemoizedBookmark\n url={block.bookmark.url}\n metadata={block.bookmark.metadata}\n />\n );\n\n case 'column_list':\n return <ColumnList block={block} />;\n\n case 'column':\n // 개별 column은 ColumnList에서 처리됩니다\n return null;\n\n case 'quote':\n return <Quote richTexts={block.quote.rich_text} />;\n\n case 'table':\n return <Table block={block} />;\n\n case 'toggle':\n return <Toggle block={block} />;\n\n default:\n return null;\n }\n};\n\nexport default BlockRenderer;\n","import { Heading1 } from '../Renderer/components/Typography';\n\ninterface Props {\n title: string;\n}\nconst Title = ({ title }: Props) => {\n return <Heading1>{title}</Heading1>;\n};\n\nexport default Title;\n","import { useState } from 'react';\nimport { coverContainer, skeletonWrapper, imageStyle } from './styles.css';\nimport Skeleton from '../Skeleton';\n\ninterface Props {\n src: string;\n alt: string;\n}\n\n/**\n * 노션 페이지 상단에 표시되는 커버 이미지 컴포넌트\n * 이미지 로딩 중에는 스켈레톤 UI를 표시하고, 로딩 완료 시 자연스럽게 이미지로 전환됩니다.\n */\nconst Cover = ({ src, alt }: Props) => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n return (\n <div className={coverContainer}>\n <div className={skeletonWrapper({ isLoaded })}>\n <Skeleton variant=\"image\" />\n </div>\n <img\n src={src}\n alt={alt}\n className={imageStyle({ isLoaded })}\n onLoad={() => setIsLoaded(true)}\n loading=\"lazy\"\n />\n </div>\n );\n};\n\nexport default Cover;\n","import 'src/components/Cover/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb3ZlckNvbnRhaW5lcl9fcDBjcDhkMCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwogIG1heC13aWR0aDogNTYuMjVyZW07CiAgaGVpZ2h0OiAzMHZoOwogIG1hcmdpbjogMCBhdXRvOwogIGJvcmRlci1yYWRpdXM6IDEuNXJlbTsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJveC1zaGFkb3c6IDJweCAycHggOHB4IDRweCBoc2xhKDAsMCUsNiUsLjEpOwp9Ci5zdHlsZXNfc2tlbGV0b25XcmFwcGVyX19wMGNwOGQxIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIHotaW5kZXg6IDE7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7Cn0KLnN0eWxlc19za2VsZXRvbldyYXBwZXJfaXNMb2FkZWRfdHJ1ZV9fcDBjcDhkMiB7CiAgb3BhY2l0eTogMDsKfQouc3R5bGVzX3NrZWxldG9uV3JhcHBlcl9pc0xvYWRlZF9mYWxzZV9fcDBjcDhkMyB7CiAgb3BhY2l0eTogMTsKfQouc3R5bGVzX2ltYWdlU3R5bGVfX3AwY3A4ZDQgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvYmplY3QtZml0OiBjb3ZlcjsKICBvYmplY3QtcG9zaXRpb246IGNlbnRlciA1MCU7CiAgZGlzcGxheTogYmxvY2s7CiAgei1pbmRleDogMjsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKfQouc3R5bGVzX2ltYWdlU3R5bGVfaXNMb2FkZWRfdHJ1ZV9fcDBjcDhkNSB7CiAgb3BhY2l0eTogMTsKfQouc3R5bGVzX2ltYWdlU3R5bGVfaXNMb2FkZWRfZmFsc2VfX3AwY3A4ZDYgewogIG9wYWNpdHk6IDA7Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgLnN0eWxlc19jb3ZlckNvbnRhaW5lcl9fcDBjcDhkMCB7CiAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07CiAgICBoZWlnaHQ6IDI1dmg7CiAgfQp9';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var coverContainer = 'styles_coverContainer__p0cp8d0';\nexport var imageStyle = _7a468({defaultClassName:'styles_imageStyle__p0cp8d4',variantClassNames:{isLoaded:{true:'styles_imageStyle_isLoaded_true__p0cp8d5',false:'styles_imageStyle_isLoaded_false__p0cp8d6'}},defaultVariants:{isLoaded:false},compoundVariants:[]});\nexport var skeletonWrapper = _7a468({defaultClassName:'styles_skeletonWrapper__p0cp8d1',variantClassNames:{isLoaded:{true:'styles_skeletonWrapper_isLoaded_true__p0cp8d2',false:'styles_skeletonWrapper_isLoaded_false__p0cp8d3'}},defaultVariants:{isLoaded:false},compoundVariants:[]});","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nimport 'src/components/Renderer/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb250YWluZXJfX2VwdmE1dTAgewogIG1heC13aWR0aDogNzIwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14bF9fc3EzamtiMWQpOwp9CkBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkgewogIC5zdHlsZXNfY29udGFpbmVyX19lcHZhNXUwIHsKICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWRfX3NxM2prYjFiKTsKICB9Cn0=';\nexport var container = 'styles_container__epva5u0';","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2XT4+jNhiH7/sprOXSSiHyPwy4p5CAeuhediv1uDLBkzABzJqkk2zV775yMhAIDjOVtrdkRtFIeX7w2u+L88x8v5Wl/Frkm+3+z/OfX5tv5HmXohL88wEA192farXRot6e3CdV7RNR5sXJTUXToZqDvNpKne9/m0isVdYlGg6+JJ9UpdzPcnMohJ6BpaoaVYhmBj7+kadSi32uKmCYjzPwSVaFmoFSVaqpxVpa7/Ml/y7dY9PeY88BnPueluV9uilFUbSBgwkEbyT66/6bAzQJF0JvOvqFAzTH01ffopY+coCnUdyiJ3PhN65LWvj7dBV/STMIbqV0KbqNQZADCuFUoJRZfii7AOLAmw40ssxTVWRdBHPApiMDnHDgW/Air+TvF3xv3jueXtY9Fei3FnnnTZ3CtSzEUV4rYibhv0bMlObVxj1e5xH5Zr5Qb+876MoEhrEgzXVvQ4OMiUH14mb2W6i8lpv2h7f9vNh0n6+HU9XVep2KrD+iqdKZ1J9Flh+afrXyZkEDrlfOk+GIfwfs1bUZLn+A9Yrb3uzAkOuBeX8f1qpQunFTsd5ttDpUXX2QA+fp/BqAe3m8jhgHDvGJh4dIrfNS6FNLYQ4cSBjL2IBq5FpVWY8jHDhewCALh5Wdl9FClANHIkllMIDMSWtZg8eB3qTiF0S8GSJohjCczdGv42h/VYwDB1McYjnm8so8Di3pc+DEked7/j0yGpUUWEvyhjVVynwVuBstut0JOXD8wPd9aiNTrV6qFhUcOGHCIo/YUKVFdT2iUw6cVegTuLKxJ1kU6qVl1xw4yyhEOLEXK2VXQsaBQ2lAGLJWWxy6AqSZIeLHi9BG1gddFx37ZBYGmRdBK5tXu5bcmFIRXQYLG6mvZ9jWrJ/SJfXvNmA8Vvm57/Eytm7apRfj1LNJhbEXT7VlHNtx4CSLOFpNdWgcK0wsSsgqut+scao0Na4SEi/v9m0cqkwIJTDxJlo4jilTIY3jxDpO526OQ7UJhXGcWDfRNHac+WYyK9Ow14N9KzL1MjiznzmAANVHgOsjgJcnFM7A6+8cts9nG+0d4zsTpfURsPoIXHON2zS6CfeO9uJ8X1gfAfJMnNyJ//thfrHWTOjdUFqrh7Q+pPUhrQ9pfUjrRVphhhAafp3fSus6zFA2FA6LtHqBYDf2a5XWIA1pOJTFsbQSSBjJ3imtDmIoxfhtT7Us5Od5qq2KO2Yanl/vMtNoES6CwIaOzTT2gwWN32emq2gRUau2jMyUBQvmW0u4NVMPh8ul1SHHZhqhwLPb1q2ZrhgLFlaPvzHTmLEFs1rVhJmSxPz8VzOlhEJq9epJM6WUYGx150kzNXezx6bMFIdkRez//9w3U+xRaJ+hSTMlDC+pdUYmzJRCTLH1XvfNlFK8xNH/ZqbGKKk1+jO09Aew0NpYTBUAAA==';\nexport var darkTheme = 'theme_darkTheme__sq3jkb1n';\nexport var lightTheme = 'theme_lightTheme__sq3jkb1m';\nexport var vars = {colors:{background:'var(--colors-background__sq3jkb0)',text:'var(--colors-text__sq3jkb1)',primary:'var(--colors-primary__sq3jkb2)',secondary:'var(--colors-secondary__sq3jkb3)',border:'var(--colors-border__sq3jkb4)',code:{background:'var(--colors-code-background__sq3jkb5)',text:'var(--colors-code-text__sq3jkb6)',inline:'var(--colors-code-inline__sq3jkb7)',inlineBackground:'var(--colors-code-inlineBackground__sq3jkb8)'},notion:{gray:'var(--colors-notion-gray__sq3jkb9)',brown:'var(--colors-notion-brown__sq3jkba)',orange:'var(--colors-notion-orange__sq3jkbb)',yellow:'var(--colors-notion-yellow__sq3jkbc)',green:'var(--colors-notion-green__sq3jkbd)',blue:'var(--colors-notion-blue__sq3jkbe)',purple:'var(--colors-notion-purple__sq3jkbf)',pink:'var(--colors-notion-pink__sq3jkbg)',red:'var(--colors-notion-red__sq3jkbh)',gray_background:'var(--colors-notion-gray_background__sq3jkbi)',brown_background:'var(--colors-notion-brown_background__sq3jkbj)',orange_background:'var(--colors-notion-orange_background__sq3jkbk)',yellow_background:'var(--colors-notion-yellow_background__sq3jkbl)',green_background:'var(--colors-notion-green_background__sq3jkbm)',blue_background:'var(--colors-notion-blue_background__sq3jkbn)',purple_background:'var(--colors-notion-purple_background__sq3jkbo)',pink_background:'var(--colors-notion-pink_background__sq3jkbp)',red_background:'var(--colors-notion-red_background__sq3jkbq)'}},typography:{fontFamily:{base:'var(--typography-fontFamily-base__sq3jkbr)',code:'var(--typography-fontFamily-code__sq3jkbs)'},fontSize:{xs:'var(--typography-fontSize-xs__sq3jkbt)',small:'var(--typography-fontSize-small__sq3jkbu)',base:'var(--typography-fontSize-base__sq3jkbv)',large:'var(--typography-fontSize-large__sq3jkbw)',h1:'var(--typography-fontSize-h1__sq3jkbx)',h2:'var(--typography-fontSize-h2__sq3jkby)',h3:'var(--typography-fontSize-h3__sq3jkbz)'},fontWeight:{normal:'var(--typography-fontWeight-normal__sq3jkb10)',medium:'var(--typography-fontWeight-medium__sq3jkb11)',semibold:'var(--typography-fontWeight-semibold__sq3jkb12)',bold:'var(--typography-fontWeight-bold__sq3jkb13)'},lineHeight:{tight:'var(--typography-lineHeight-tight__sq3jkb14)',base:'var(--typography-lineHeight-base__sq3jkb15)',relaxed:'var(--typography-lineHeight-relaxed__sq3jkb16)'}},spacing:{xxs:'var(--spacing-xxs__sq3jkb17)',xs:'var(--spacing-xs__sq3jkb18)',sm:'var(--spacing-sm__sq3jkb19)',base:'var(--spacing-base__sq3jkb1a)',md:'var(--spacing-md__sq3jkb1b)',lg:'var(--spacing-lg__sq3jkb1c)',xl:'var(--spacing-xl__sq3jkb1d)'},borderRadius:{sm:'var(--borderRadius-sm__sq3jkb1e)',md:'var(--borderRadius-md__sq3jkb1f)',lg:'var(--borderRadius-lg__sq3jkb1g)',xl:'var(--borderRadius-xl__sq3jkb1h)',xxl:'var(--borderRadius-xxl__sq3jkb1i)'},shadows:{sm:'var(--shadows-sm__sq3jkb1j)',md:'var(--shadows-md__sq3jkb1k)',lg:'var(--shadows-lg__sq3jkb1l)'}};"],"mappings":"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","names":["useMemo","memo","_7a468","jsx","content","_7a468","jsx","jsx","link","jsx","jsxs","link","useState","content","description","link","title","jsx","jsxs","useState","link","content","title","description","jsx","jsxs","content","Fragment","jsx","jsxs","content","caption","jsx","jsx","jsx","jsx","jsx","Fragment","jsx","jsxs","Table_default","useState","jsx","jsxs","useState","jsx","Table_default","jsx","title","useState","_7a468","imageStyle","skeletonWrapper","jsx","jsxs","useState","skeletonWrapper","imageStyle","container","Fragment","jsx","jsxs","memo","title","useMemo","container"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "notion-to-jsx",
3
- "version": "1.2.8",
3
+ "version": "1.2.10",
4
4
  "description": "Notion blocks to JSX renderer",
5
5
  "private": false,
6
6
  "repository": {