notion-to-jsx 1.2.12 → 1.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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/Video/styles.css.ts","../src/components/Renderer/components/Video/Video.tsx","../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":["export { default as Renderer } from './components/Renderer';\nexport * from './types';\n","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\" isLoading={!isLoaded} />\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 isLoading?: boolean;\n};\n\n/**\n * 콘텐츠 로딩 중에 표시되는 물결 효과가 있는 스켈레톤 컴포넌트입니다.\n * 이미지, 텍스트 등의 로딩 상태를 표시하는 데 사용합니다.\n */\nconst Skeleton = ({\n variant = 'rect',\n width,\n height,\n className,\n isLoading = true,\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 if (!isLoading) {\n return null;\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 '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/Video/styles.css.ts.vanilla.css?source=LnN0eWxlc192aWRlb0NvbnRhaW5lcl9fMTViOXZrYjAgewogIG1hcmdpbjogMTBweCAwOwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci5zdHlsZXNfdmlkZW9QbGF5ZXJfXzE1Yjl2a2IxIHsKICB3aWR0aDogMTAwJTsKICBhc3BlY3QtcmF0aW86IDE2IC8gOTsKICBib3JkZXI6IG5vbmU7Cn0KLnN0eWxlc192aWRlb0NhcHRpb25fXzE1Yjl2a2IyIHsKICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXNtX19zcTNqa2IxOSk7CiAgZm9udC1zaXplOiB2YXIoLS10eXBvZ3JhcGh5LWZvbnRTaXplLXNtYWxsX19zcTNqa2J1KTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IDEwMCU7CiAgY29sb3I6IHZhcigtLWNvbG9ycy1zZWNvbmRhcnlfX3NxM2prYjMpOwp9';\nexport var videoCaption = 'styles_videoCaption__15b9vkb2';\nexport var videoContainer = 'styles_videoContainer__15b9vkb0';\nexport var videoPlayer = 'styles_videoPlayer__15b9vkb1';","import { VideoBlock } from '../../../../types';\nimport { RichTextItem } from '../RichText/RichTexts'; // Caption을 위해 추가\nimport { videoContainer, videoPlayer, videoCaption } from './styles.css'; // 스타일 임포트\n\ninterface VideoProps {\n block: VideoBlock;\n}\n\nconst Video = ({ block }: VideoProps) => {\n if (block.type !== 'video' || !block.video) {\n return null;\n }\n\n const { type, external, caption } = block.video;\n\n let videoUrl = '';\n // TODO: 'file' 타입 비디오 처리 (Notion 내부 업로드 비디오)\n if (type === 'external') {\n videoUrl = getVideoEmbedUrl(external?.url);\n }\n\n if (!videoUrl) {\n return <p>비디오를 불러올 수 없습니다.</p>;\n }\n\n return (\n <div className={videoContainer}>\n {videoUrl.includes('youtube.com/embed/') ? (\n <iframe\n className={videoPlayer}\n src={videoUrl}\n title=\"YouTube video player\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n ></iframe>\n ) : (\n <p>\n 외부 비디오 링크:{' '}\n <a href={videoUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {videoUrl}\n </a>\n </p>\n )}\n {caption && caption.length > 0 && (\n <figcaption className={videoCaption}>\n {caption.map((c: RichTextItem, i: number) => (\n <span key={i}>{c.plain_text}</span>\n ))}\n </figcaption>\n )}\n </div>\n );\n};\n\nconst getVideoEmbedUrl = (url?: string): string => {\n if (!url) return '';\n\n // YouTube URL 처리 (일반적인 YouTube URL 및 짧은 URL 지원)\n if (url.includes('youtu.be/')) {\n const videoId = url.split('youtu.be/')[1]?.split('?')[0];\n if (videoId) {\n return `https://www.youtube.com/embed/${videoId}`;\n }\n } else if (url.includes('youtube.com/watch?v=')) {\n const videoId = url.split('watch?v=')[1]?.split('&')[0];\n if (videoId) {\n return `https://www.youtube.com/embed/${videoId}`;\n }\n }\n // 다른 외부 비디오 URL (직접 임베드가 어려울 수 있음)\n return url;\n};\n\nexport default Video;\n","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 { Video } from '../Video';\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 case 'video':\n return <Video 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\" isLoading={!isLoaded} />\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":["import_react","_7a468","import_react","import_createRuntimeFn","_7a468","import_jsx_runtime","content","import_createRuntimeFn","_7a468","import_jsx_runtime","import_jsx_runtime","link","import_jsx_runtime","link","import_react","content","description","link","title","import_jsx_runtime","link","content","title","description","import_jsx_runtime","content","import_react","import_jsx_runtime","Prism","content","caption","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","Table_default","import_react","import_jsx_runtime","import_jsx_runtime","caption","import_jsx_runtime","Table_default","import_jsx_runtime","title","import_react","import_createRuntimeFn","imageStyle","_7a468","skeletonWrapper","import_jsx_runtime","skeletonWrapper","imageStyle","container","import_jsx_runtime","title","container"]}
1
+ {"version":3,"sources":["../src/index.ts","../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/ListItemGroup.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/Video/styles.css.ts","../src/components/Renderer/components/Video/Video.tsx","../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":["export { default as Renderer } from './components/Renderer';\nexport * from './types';\n","import { useMemo, memo } from 'react';\n\nimport { ListGroup } 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 // 연속된 리스트 아이템 수집\n const listItems: (BulletedListItemBlock | NumberedListItemBlock)[] =\n [];\n let j = i;\n while (\n j < blocks.length &&\n blocks[j] &&\n blocks[j]?.type === listItemType\n ) {\n listItems.push(\n blocks[j] as BulletedListItemBlock | NumberedListItemBlock\n );\n j++;\n }\n\n result.push(\n <ListGroup\n key={block.id}\n blocks={listItems}\n type={listItemType}\n renderBlock={(childBlock) => <BlockRenderer block={childBlock} />}\n />\n );\n\n // 이미 처리된 리스트 아이템 건너뛰기 (j는 다음 블록의 인덱스)\n i = j - 1;\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=#H4sIAAAAAAAAA5WWwXKbMBCG734KHZuDPHHdTBxyy6EPkOlMj4xACygIiSzChHb67h0kyw4Go3DyjPbf75d2WVnbxvQSmhhFWvyCDxMnWvLYYAtxnPFsb7od+bshJNPK0A5EXpiIDJrnzb/N9jpZGCZFOkr/fkm36og40Wx+Y1CUYArUbV6MMHuLMfBhKIdUIzNCq4hIoYCe9LPEVnHAQTWi/ZinncWzqFTzMeXBUhKWljnqVvGIHBl+ozTVUmNDBz0VauC9nDVx3Lzv38rkcPe8IaRmnAuVR+R+u4OK3G/3D1ANgUQjB6TIuGgbz3WLr3aNNpVH7cCyRh1yCaavdY6sLno6RH/bIK2Ai/aSvbtkZ6wSsr+R/dMG7al8bnNJbcQfGI5xOB3A1uB2QTzh0RK4aGrJ+oi4IE2kTsshcAQ0ImWSMilyFZFKcC5vdUdqjHNkvW/Po23P3EaUHvpNndht5OlugZqg7pTHHkLYk9px2RJXI1P5+XN6CoG93JGTJXIPUurOk1mI7OWOnC6RcwQ41yIJl9iqHZcv1lheBisNltiKHRWWqHWLtTxzeYjr5Y6cLZKFKj0XglwrdtR8iYrAPTQLQa3WMYvljrE+Tj7dQI6fX91eNDQpyeQSE+GhmfoWK3ynDGf89oWpmjqLFc4zEGddfmHsptZvK6xnIM5ahudy6lyuavM1wxlXwcGd+so1bb5GOFv1hcmeGlcrjGcgzloHR39qrNYYXyOcbR26G6aueoXrNcGZvt8yrWoru/dWdfgNNv+Ekp/uyvfP15pQBaAwz4HHGCGdRk4TBFZGxP7QYWWI6CNgJnVHO2T1OHjZAFS16V/9yU47QbuTYvRiamqWCpVTmZ/fR/bf8D8Eymk/JwsAAA==';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var emptyRichText = 'styles_emptyRichText__fdf3twr';\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, emptyRichText } 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 EmptyRichText = () => <div className={emptyRichText} />;\n\nconst RichTexts = ({ richTexts }: RichTextProps) => {\n if (richTexts.length === 0) {\n return <EmptyRichText />;\n }\n\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, useRef, useEffect } 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 const imgRef = useRef<HTMLImageElement>(null);\n\n // 이미지가 이미 로드된 경우를 체크\n useEffect(() => {\n const img = imgRef.current;\n if (img && img.complete && img.naturalHeight !== 0) {\n setIsLoaded(true);\n }\n }, [src]);\n\n const handleLoad = () => {\n setIsLoaded(true);\n };\n\n return (\n <div className={imageContainer}>\n <div className={imageWrapper} style={getImageStyles(format, isColumn)}>\n <div className={skeletonWrapper({ isLoaded })}>\n <Skeleton variant=\"image\" isLoading={!isLoaded} />\n </div>\n <img\n ref={imgRef}\n className={imageStyle({\n loaded: isLoaded,\n hasAspectRatio: !!format?.block_aspect_ratio,\n })}\n src={src}\n alt={alt}\n loading=\"lazy\"\n onLoad={handleLoad}\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 isLoading?: boolean;\n};\n\n/**\n * 콘텐츠 로딩 중에 표시되는 물결 효과가 있는 스켈레톤 컴포넌트입니다.\n * 이미지, 텍스트 등의 로딩 상태를 표시하는 데 사용합니다.\n */\nconst Skeleton = ({\n variant = 'rect',\n width,\n height,\n className,\n isLoading = true,\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 if (!isLoading) {\n return null;\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 React from 'react';\nimport { List, ListItem } from './List';\n\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport {\n BulletedListItemBlock,\n NotionBlock,\n NumberedListItemBlock,\n} from '../../../../types';\n\ninterface RecursiveListItemProps {\n block: BulletedListItemBlock | NumberedListItemBlock;\n renderBlock: (block: NotionBlock, parentBlockId?: string) => React.ReactNode;\n}\n// 리스트 아이템을 렌더링하는 컴포넌트 (중첩 리스트 지원)\nconst RecursiveListItem = ({ block, renderBlock }: RecursiveListItemProps) => {\n let content:\n | BulletedListItemBlock['bulleted_list_item']\n | NumberedListItemBlock['numbered_list_item'];\n\n if (block.type === 'bulleted_list_item') {\n content = block.bulleted_list_item;\n } else {\n // block.type이 'numbered_list_item'이라고 가정 (props 타입에 의해 보장됨)\n content = (block as NumberedListItemBlock).numbered_list_item;\n }\n\n const richTexts = content.rich_text;\n\n const renderedChildren: JSX.Element[] = [];\n const children: NotionBlock[] = block.children ?? [];\n\n if (children.length > 0) {\n let i = 0;\n while (i < children.length) {\n const currentChild = children[i];\n if (!currentChild) {\n i++;\n continue;\n }\n\n if (\n currentChild.type === 'bulleted_list_item' ||\n currentChild.type === 'numbered_list_item'\n ) {\n const groupType = currentChild.type;\n const currentGroup: (BulletedListItemBlock | NumberedListItemBlock)[] =\n [currentChild as BulletedListItemBlock | NumberedListItemBlock];\n let j = i + 1;\n while (j < children.length) {\n const nextChildInGroup = children[j];\n if (!nextChildInGroup) {\n // 타입스크립트 만족용 null 체크\n break;\n }\n if (nextChildInGroup.type === groupType) {\n currentGroup.push(\n nextChildInGroup as BulletedListItemBlock | NumberedListItemBlock\n );\n j++;\n } else {\n break; // 다른 타입 만나면 그룹 종료\n }\n }\n renderedChildren.push(\n <ListGroup\n key={`${currentChild.id}-group`}\n blocks={currentGroup}\n type={groupType} // 그룹의 실제 타입 전달\n renderBlock={renderBlock}\n />\n );\n i = j; // 다음 순회 시작 위치 업데이트\n } else {\n // 리스트 아이템이 아닌 블록은 renderBlock으로 직접 렌더링\n renderedChildren.push(\n <div key={currentChild.id}>{renderBlock(currentChild, block.id)}</div>\n );\n i++; // 다음 자식으로 이동\n }\n }\n }\n\n return (\n <ListItem>\n <MemoizedRichText richTexts={richTexts} />\n {renderedChildren.length > 0 && renderedChildren}\n </ListItem>\n );\n};\n\ninterface ListGroupProps {\n blocks: (BulletedListItemBlock | NumberedListItemBlock)[];\n type: 'bulleted_list_item' | 'numbered_list_item';\n renderBlock: (block: NotionBlock, parentBlockId?: string) => React.ReactNode;\n}\n\nexport const ListGroup = ({ blocks, type, renderBlock }: ListGroupProps) => {\n if (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\n key={block.id}\n block={block}\n renderBlock={renderBlock}\n />\n ))}\n </List>\n );\n};\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 && caption.length > 0 && (\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=LnN0eWxlc190b2dnbGVDb250YWluZXJfX3A3dWUxejAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQouc3R5bGVzX3RvZ2dsZUhlYWRlcl9fcDd1ZTF6MSB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGN1cnNvcjogcG9pbnRlcjsKICBmb250LXNpemU6IHZhcigtLXR5cG9ncmFwaHktZm9udFNpemUtYmFzZV9fc3Ezamtidik7CiAgZm9udC13ZWlnaHQ6IHZhcigtLXR5cG9ncmFwaHktZm9udFdlaWdodC1ub3JtYWxfX3NxM2prYjEwKTsKICBjb2xvcjogaW5oZXJpdDsKICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2IxOCkgMDsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSYWRpdXMtc21fX3NxM2prYjFlKTsKfQouc3R5bGVzX3RvZ2dsZUhlYWRlcl9fcDd1ZTF6MTpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSg1NSwgNTMsIDQ3LCAwLjA4KTsKfQouc3R5bGVzX3RvZ2dsZUljb25fX3A3dWUxejIgewogIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2luZy1zbV9fc3EzamtiMTkpOwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKfQouc3R5bGVzX3RvZ2dsZUljb25PcGVuX19wN3VlMXozIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KLnN0eWxlc190b2dnbGVDb250ZW50X19wN3VlMXo0IHsKICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbGdfX3NxM2prYjFjKTsKICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2IxOCk7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQ==';\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 '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/Video/styles.css.ts.vanilla.css?source=LnN0eWxlc192aWRlb0NvbnRhaW5lcl9fMTViOXZrYjAgewogIG1hcmdpbjogMTBweCAwOwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci5zdHlsZXNfdmlkZW9QbGF5ZXJfXzE1Yjl2a2IxIHsKICB3aWR0aDogMTAwJTsKICBhc3BlY3QtcmF0aW86IDE2IC8gOTsKICBib3JkZXI6IG5vbmU7Cn0KLnN0eWxlc192aWRlb0NhcHRpb25fXzE1Yjl2a2IyIHsKICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXNtX19zcTNqa2IxOSk7CiAgZm9udC1zaXplOiB2YXIoLS10eXBvZ3JhcGh5LWZvbnRTaXplLXNtYWxsX19zcTNqa2J1KTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IDEwMCU7CiAgY29sb3I6IHZhcigtLWNvbG9ycy1zZWNvbmRhcnlfX3NxM2prYjMpOwp9';\nexport var videoCaption = 'styles_videoCaption__15b9vkb2';\nexport var videoContainer = 'styles_videoContainer__15b9vkb0';\nexport var videoPlayer = 'styles_videoPlayer__15b9vkb1';","import { VideoBlock } from '../../../../types';\nimport { RichTextItem } from '../RichText/RichTexts'; // Caption을 위해 추가\nimport { videoContainer, videoPlayer, videoCaption } from './styles.css'; // 스타일 임포트\n\ninterface VideoProps {\n block: VideoBlock;\n}\n\nconst Video = ({ block }: VideoProps) => {\n if (block.type !== 'video' || !block.video) {\n return null;\n }\n\n const { type, external, caption } = block.video;\n\n let videoUrl = '';\n // TODO: 'file' 타입 비디오 처리 (Notion 내부 업로드 비디오)\n if (type === 'external') {\n videoUrl = getVideoEmbedUrl(external?.url);\n }\n\n if (!videoUrl) {\n return <p>비디오를 불러올 수 없습니다.</p>;\n }\n\n return (\n <div className={videoContainer}>\n {videoUrl.includes('youtube.com/embed/') ? (\n <iframe\n className={videoPlayer}\n src={videoUrl}\n title=\"YouTube video player\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n ></iframe>\n ) : (\n <p>\n 외부 비디오 링크:{' '}\n <a href={videoUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {videoUrl}\n </a>\n </p>\n )}\n {caption && caption.length > 0 && (\n <figcaption className={videoCaption}>\n {caption.map((c: RichTextItem, i: number) => (\n <span key={i}>{c.plain_text}</span>\n ))}\n </figcaption>\n )}\n </div>\n );\n};\n\nconst getVideoEmbedUrl = (url?: string): string => {\n if (!url) return '';\n\n // YouTube URL 처리 (일반적인 YouTube URL 및 짧은 URL 지원)\n if (url.includes('youtu.be/')) {\n const videoId = url.split('youtu.be/')[1]?.split('?')[0];\n if (videoId) {\n return `https://www.youtube.com/embed/${videoId}`;\n }\n } else if (url.includes('youtube.com/watch?v=')) {\n const videoId = url.split('watch?v=')[1]?.split('&')[0];\n if (videoId) {\n return `https://www.youtube.com/embed/${videoId}`;\n }\n }\n // 다른 외부 비디오 URL (직접 임베드가 어려울 수 있음)\n return url;\n};\n\nexport default Video;\n","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 { Video } from '../Video';\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 case 'video':\n return <Video 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, useRef, useEffect } 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 const imgRef = useRef<HTMLImageElement>(null);\n\n // 이미지가 이미 로드된 경우를 체크\n useEffect(() => {\n const img = imgRef.current;\n if (img && img.complete && img.naturalHeight !== 0) {\n setIsLoaded(true);\n }\n }, [src]);\n\n const handleLoad = () => {\n setIsLoaded(true);\n };\n\n return (\n <div className={coverContainer}>\n <div className={skeletonWrapper({ isLoaded })}>\n <Skeleton variant=\"image\" isLoading={!isLoaded} />\n </div>\n <img\n ref={imgRef}\n src={src}\n alt={alt}\n className={imageStyle({ isLoaded })}\n onLoad={handleLoad}\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":["import_react","_7a468","import_react","import_createRuntimeFn","_7a468","import_jsx_runtime","content","import_createRuntimeFn","_7a468","import_jsx_runtime","import_jsx_runtime","link","import_jsx_runtime","link","import_react","content","description","link","title","import_jsx_runtime","link","content","title","description","import_jsx_runtime","content","import_react","import_jsx_runtime","Prism","content","caption","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","Table_default","import_react","import_jsx_runtime","import_jsx_runtime","caption","import_jsx_runtime","Table_default","import_jsx_runtime","title","import_react","import_createRuntimeFn","imageStyle","_7a468","skeletonWrapper","import_jsx_runtime","skeletonWrapper","imageStyle","container","import_jsx_runtime","title","container"]}