notion-to-jsx 0.0.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +588 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +88 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.js +777 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +740 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +43 -5
- package/.turbo/turbo-test.log +0 -7
- package/tsconfig.json +0 -8
- package/tsconfig.lint.json +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Renderer/index.tsx","../src/components/Renderer/styles.css.ts","../src/components/Renderer/components/List/styles.css.ts","../src/components/Renderer/components/List/List.tsx","../src/components/Renderer/components/MemoizedComponents.tsx","../src/components/Renderer/components/RichText/styles.css.ts","../src/components/Renderer/components/RichText/RichTexts.tsx","../src/components/Renderer/components/Image/Image.tsx","../src/components/Renderer/components/Image/styles.css.ts","../src/components/Renderer/components/Bookmark/Bookmark.tsx","../src/components/Renderer/components/Bookmark/styles.css.ts","../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/Block/BlockRenderer.tsx","../src/styles/theme.css.ts","../src/components/Title/index.tsx","../src/components/Cover/styles.css.ts","../src/components/Cover/index.tsx"],"sourcesContent":["import React, { useState, useMemo, useCallback } from 'react';\nimport { container } from './styles.css';\n\nimport { NotionBlock } from '../../types';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { ListBlocksRenderer } from './components/List';\nimport { BlockRenderer } from './components/Block';\nimport '../../styles/reset.css';\nimport { darkTheme, lightTheme } from '../../styles/theme.css';\nimport Title from '../Title';\nimport Cover from '../Cover';\n\ninterface Props {\n blocks: NotionBlock[];\n title?: string;\n cover?: string;\n isDarkMode?: boolean;\n onBlockFocus?: (index: number) => void;\n}\nexport const Renderer: React.FC<Props> = React.memo(\n ({ blocks, isDarkMode = false, title, cover, onBlockFocus }) => {\n const theme = isDarkMode ? darkTheme : lightTheme;\n const [focusedIndex, setFocusedIndex] = useState<number>(-1);\n\n const handleBlockFocus = useCallback(\n (index: number) => {\n setFocusedIndex(index);\n onBlockFocus?.(index);\n },\n [onBlockFocus]\n );\n\n const renderedBlocks = useMemo(() => {\n const result: JSX.Element[] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n if (!block) break;\n\n // 리스트 아이템 타입 처리를 위한 공통 함수\n const handleListItem = (listType: 'bulleted' | 'numbered') => {\n const listItemType = `${listType}_list_item`;\n\n if (\n block.type === listItemType &&\n (i === 0 || blocks[i - 1]?.type !== listItemType)\n ) {\n result.push(\n <ListBlocksRenderer\n key={block.id}\n blocks={blocks}\n startIndex={i}\n type={listType}\n />\n );\n\n // 연속된 같은 타입의 리스트 아이템 건너뛰기\n while (\n i + 1 < blocks.length &&\n blocks[i + 1] &&\n blocks[i + 1]?.type === listItemType\n ) {\n i++;\n }\n\n return true;\n }\n\n return false;\n };\n\n // 순서대로 각 리스트 타입 처리 시도\n if (handleListItem('bulleted') || handleListItem('numbered')) {\n // 리스트 아이템이 처리되었으므로 다음 블록으로 진행\n continue;\n } else {\n // 리스트 아이템이 아닌 일반 블록 처리\n result.push(\n <BlockRenderer\n key={block.id}\n block={block}\n index={i}\n onFocus={() => handleBlockFocus(i)}\n />\n );\n }\n }\n\n return result;\n }, [blocks, handleBlockFocus]);\n\n return (\n <>\n {cover && <Cover src={cover} alt={title || 'Notion page content'} />}\n <article\n className={`${theme} ${container}`}\n aria-label={title || 'Notion page content'}\n >\n {title && <Title title={title} />}\n {renderedBlocks}\n </article>\n </>\n );\n }\n);\n\nRenderer.displayName = 'Renderer';\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb250YWluZXJfX2VwdmE1dTAgewogIG1heC13aWR0aDogNzIwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14bF9fc3Ezamtidik7Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7CiAgLnN0eWxlc19jb250YWluZXJfX2VwdmE1dTAgewogICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZF9fc3EzamtidCk7CiAgfQp9';\nexport var container = 'styles_container__epva5u0';","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/List/styles.css.ts.vanilla.css?source=LnN0eWxlc19saXN0X19lczh2aW0wIHsKICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzX19zcTNqa2JxKSB2YXIoLS1zcGFjaW5nLXh4c19fc3EzamticCk7CiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjaW5nLWxnX19zcTNqa2J1KTsKfQouc3R5bGVzX2xpc3RfdHlwZV9idWxsZXRlZF9fZXM4dmltMSB7CiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjOwp9Ci5zdHlsZXNfbGlzdF90eXBlX251bWJlcmVkX19lczh2aW0yIHsKICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7Cn0KLnN0eWxlc19saXN0SXRlbV9fZXM4dmltMyB7CiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14eHNfX3NxM2prYnApIDA7Cn0=';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var list = _7a468({defaultClassName:'styles_list__es8vim0',variantClassNames:{type:{bulleted:'styles_list_type_bulleted__es8vim1',numbered:'styles_list_type_numbered__es8vim2'}},defaultVariants:{},compoundVariants:[]});\nexport var listItem = 'styles_listItem__es8vim3';","import React from 'react';\nimport { list, listItem } from './styles.css';\n\ninterface ListProps\n extends React.HTMLAttributes<HTMLUListElement | HTMLOListElement> {\n as?: 'ul' | 'ol';\n type: 'bulleted' | 'numbered';\n children: React.ReactNode;\n}\n\nexport const List: React.FC<ListProps> = ({\n as: Component = 'ul',\n type,\n className,\n children,\n ...props\n}) => {\n return (\n <Component className={list({ type })} {...props}>\n {children}\n </Component>\n );\n};\n\ninterface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode;\n}\n\nexport const ListItem: React.FC<ListItemProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <li className={listItem} {...props}>\n {children}\n </li>\n );\n};\n","import React from 'react';\nimport RichText, { RichTextItem, RichTextProps } from './RichText/RichTexts';\nimport { Image, ImageProps } from './Image';\nimport Bookmark, { type BookmarkProps } from './Bookmark/Bookmark';\nimport LinkPreview, { type LinkPreviewProps } from './LinkPreview/LinkPreview';\n\nexport const MemoizedRichText = React.memo<RichTextProps>(\n RichText,\n (prev, next) => {\n return JSON.stringify(prev.richTexts) === JSON.stringify(next.richTexts);\n }\n);\n\nexport const MemoizedImage = React.memo<ImageProps>(Image, (prev, next) => {\n return (\n prev.src === next.src &&\n prev.alt === next.alt &&\n JSON.stringify(prev.caption) === JSON.stringify(next.caption)\n );\n});\n\nexport const MemoizedBookmark = React.memo<BookmarkProps>(\n Bookmark,\n (prev, next) => {\n return prev.url === next.url;\n }\n);\n\nexport const MemoizedLinkPreview = React.memo<LinkPreviewProps>(\n LinkPreview,\n (prev, next) => {\n return prev.url === next.url;\n }\n);\n\n// 타입 가드 유틸리티\nexport const isRichTextArray = (value: unknown): value is RichTextItem[] => {\n if (!Array.isArray(value)) return false;\n return value.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n item.type === 'text'\n );\n};\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/RichText/styles.css.ts.vanilla.css?source=LnN0eWxlc19yaWNoVGV4dF9fZmRmM3R3MCB7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Cn0KLnN0eWxlc19yaWNoVGV4dF9ib2xkX3RydWVfX2ZkZjN0dzEgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Ci5zdHlsZXNfcmljaFRleHRfaXRhbGljX3RydWVfX2ZkZjN0dzIgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQouc3R5bGVzX3JpY2hUZXh0X3N0cmlrZXRocm91Z2hfdHJ1ZV9fZmRmM3R3MyB7CiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cn0KLnN0eWxlc19yaWNoVGV4dF91bmRlcmxpbmVfdHJ1ZV9fZmRmM3R3NCB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLnN0eWxlc19yaWNoVGV4dF9jb2RlX3RydWVfX2ZkZjN0dzUgewogIGJhY2tncm91bmQ6IHZhcigtLWNvbG9ycy1jb2RlLWlubGluZUJhY2tncm91bmRfX3NxM2prYjgpOwogIHBhZGRpbmc6IDAuMWVtIDAuMzVlbTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSYWRpdXMtc21fX3NxM2prYncpOwogIGZvbnQtd2VpZ2h0OiB2YXIoLS10eXBvZ3JhcGh5LWZvbnRXZWlnaHQtbWVkaXVtX19zcTNqa2JqKTsKICBmb250LWZhbWlseTogdmFyKC0tdHlwb2dyYXBoeS1mb250RmFtaWx5LWNvZGVfX3NxM2prYmEpOwogIGZvbnQtc2l6ZTogMC44NWVtOwogIGNvbG9yOiB2YXIoLS1jb2xvcnMtY29kZS1pbmxpbmVfX3NxM2prYjcpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9Ci5zdHlsZXNfcmljaFRleHRfY29tcG91bmRfMF9fZmRmM3R3NiB7CiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggdW5kZXJsaW5lOwp9Ci5zdHlsZXNfbGlua19fZmRmM3R3NyB7CiAgY29sb3I6IGluaGVyaXQ7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0=';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var link = 'styles_link__fdf3tw7';\nexport var richText = _7a468({defaultClassName:'styles_richText__fdf3tw0',variantClassNames:{bold:{true:'styles_richText_bold_true__fdf3tw1'},italic:{true:'styles_richText_italic_true__fdf3tw2'},strikethrough:{true:'styles_richText_strikethrough_true__fdf3tw3'},underline:{true:'styles_richText_underline_true__fdf3tw4'},code:{true:'styles_richText_code_true__fdf3tw5'}},defaultVariants:{},compoundVariants:[[{strikethrough:true,underline:true},'styles_richText_compound_0__fdf3tw6']]});","import React from 'react';\nimport { richText, link } from './styles.css';\n\nexport interface RichTextItem {\n type: 'text';\n text: {\n content: string;\n link: string | null;\n };\n content: string;\n link: string | null;\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\nexport interface RichTextProps {\n richTexts: RichTextItem[];\n}\n\nconst RichTexts: React.FC<RichTextProps> = ({ richTexts }) => {\n return (\n <>\n {richTexts.map((text, index) => {\n const { bold, italic, strikethrough, underline, code, color } =\n text.annotations;\n\n const content = text.text.link ? (\n <a\n href={text.text.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={link}\n >\n {text.text.content}\n </a>\n ) : (\n text.text.content\n );\n\n // TODO: NOTION COLOR 적용\n // const colorValue =\n // color === 'default'\n // ? 'inherit'\n // : color?.includes('_background')\n // ? `var(--notion-${color})`\n // : `var(--notion-${color})`;\n\n return (\n <span\n key={index}\n className={richText({\n bold,\n italic,\n strikethrough,\n underline,\n code,\n })}\n >\n {content}\n </span>\n );\n })}\n </>\n );\n};\n\nexport default RichTexts;\n","import React, { useState, useEffect } from 'react';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport {\n imageContainer,\n imageWrapper,\n styledImage,\n placeholder,\n caption,\n} from './styles.css';\nimport { RichTextItem } from '../RichText/RichTexts';\n\nexport interface ImageFormat {\n block_width?: number;\n block_height?: number;\n block_aspect_ratio?: number;\n}\n\nexport interface ImageProps {\n src: string;\n alt: string;\n caption?: RichTextItem[];\n priority?: boolean;\n format?: ImageFormat;\n}\n\nconst MAX_WIDTH = 720;\n\nconst Image: React.FC<ImageProps> = ({\n src,\n alt,\n caption: imageCaption,\n priority = false,\n format,\n}) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [error, setError] = useState(false);\n\n useEffect(() => {\n setIsLoaded(false);\n setError(false);\n }, [src]);\n\n return (\n <figure className={imageContainer}>\n <div\n className={imageWrapper({\n hasWidth: !!format?.block_width,\n })}\n style={\n format?.block_width\n ? {\n width:\n format.block_width > MAX_WIDTH\n ? '100%'\n : `${format.block_width}px`,\n }\n : undefined\n }\n >\n {!isLoaded && !error && (\n <div\n className={placeholder}\n style={{\n width: format?.block_width\n ? format.block_width > MAX_WIDTH\n ? '100%'\n : `${format.block_width}px`\n : '100%',\n aspectRatio: format?.block_aspect_ratio\n ? `${format.block_aspect_ratio}`\n : 'auto',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"#888\"\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(1 1)\" strokeWidth=\"2\">\n <circle strokeOpacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\" />\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </g>\n </g>\n </svg>\n </div>\n )}\n {error && (\n <div\n className={placeholder}\n style={{\n width: format?.block_width\n ? format.block_width > MAX_WIDTH\n ? '100%'\n : `${format.block_width}px`\n : '100%',\n aspectRatio: format?.block_aspect_ratio\n ? `${format.block_aspect_ratio}`\n : 'auto',\n }}\n >\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\n stroke=\"#FF6B6B\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15 9L9 15\"\n stroke=\"#FF6B6B\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 9L15 15\"\n stroke=\"#FF6B6B\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <div style={{ width: '10px' }} />\n <p style={{ color: '#FF6B6B', fontSize: '14px' }}>\n Image Load failed\n </p>\n </div>\n )}\n <img\n className={styledImage({\n loaded: isLoaded,\n hasAspectRatio: !!format?.block_aspect_ratio,\n })}\n src={src}\n alt={alt}\n loading={priority ? 'eager' : 'lazy'}\n onLoad={() => setIsLoaded(true)}\n onError={() => setError(true)}\n width={format?.block_width}\n height={format?.block_height}\n style={\n format?.block_aspect_ratio\n ? { aspectRatio: `${format.block_aspect_ratio}` }\n : undefined\n }\n />\n </div>\n {imageCaption && imageCaption.length > 0 && (\n <figcaption className={caption}>\n <MemoizedRichText richTexts={imageCaption} />\n </figcaption>\n )}\n </figure>\n );\n};\n\nexport default Image;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/Image/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA4VTTW/bMAy951fwMqABqsBpsA+4p6GnXTtgOxqMRNtMZUmTmDTusP8+SKmbZGm7k8AnvifyiVwkGS2lhgfs6M47QXYUm+amXTndVvB7BhB8YmHvaohkUXhHtzOARzbS17Csqg85DGgMu66GHcYrpVJAza5TaWia9Gu1eVjHOVQ5ce2joagiGt6mKf0A3hdMDWbi7OeZ4XcUW+sfa+jZGHIZGzB27GqoALfiM2I4BYtjDa2lfQbyqQxH0ofitbfboZDRcucUCw2pBk1OKN7O/swWp178jBjC0YnVO04MuFf/uPEcHpo76GXkB74ILq9L8vzNh3tMhdO0aBNNtI+ljrPXjvxymG9ZZcr/dJkP0BN3vdSX1q2t1w8ZkYhuatXnr5QRqsUqAWEqPfv1hrSoliUbW8amOJtChiMK+7P2v5aL+4yfmHBzXWqYv9WE9WjINBK3Lw19Lg0911TD8j/UM/O+nHOrU26wqKn31hz/fF3SL+bq1ekB2GyTcDuq7AY5eW2wNIZs6aSvi77QXlTRPFXT3vo4OViCpBJp7wzGcVqP1fy4Ckp8eG/5ykZ4JyrxE02JMgbfRQz9qPLdd34ilQa0duLp/DV/AUzsuJwkBAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var caption = 'styles_caption__2f3ncfc';\nexport var imageAspectRatioVar = 'var(--imageAspectRatioVar__2f3ncf2)';\nexport var imageContainer = 'styles_imageContainer__2f3ncf0';\nexport var imageWidthVar = 'var(--imageWidthVar__2f3ncf1)';\nexport var imageWrapper = _7a468({defaultClassName:'styles_imageWrapper__2f3ncf3',variantClassNames:{hasWidth:{true:'styles_imageWrapper_hasWidth_true__2f3ncf4',false:'styles_imageWrapper_hasWidth_false__2f3ncf5'}},defaultVariants:{hasWidth:false},compoundVariants:[]});\nexport var placeholder = 'styles_placeholder__2f3ncfb';\nexport var styledImage = _7a468({defaultClassName:'styles_styledImage__2f3ncf6',variantClassNames:{loaded:{true:'styles_styledImage_loaded_true__2f3ncf7',false:'styles_styledImage_loaded_false__2f3ncf8'},hasAspectRatio:{true:'styles_styledImage_hasAspectRatio_true__2f3ncf9',false:'styles_styledImage_hasAspectRatio_false__2f3ncfa'}},defaultVariants:{loaded:false,hasAspectRatio:false},compoundVariants:[]});","import React, { useState, useEffect } from 'react';\nimport {\n link,\n card,\n content,\n previewContainer,\n previewImage,\n title,\n description,\n siteName,\n favicon,\n urlText,\n} from './styles.css';\n\ninterface OpenGraphData {\n title: string;\n description: string;\n image: string;\n siteName: string;\n url: string;\n favicon?: string;\n}\n\nexport interface BookmarkProps {\n url: string;\n}\n\n// OpenGraph 데이터를 가져오는 함수\nconst fetchOpenGraphData = async (url: string): Promise<OpenGraphData> => {\n try {\n const apiUrl = `https://api.microlink.io/?url=${encodeURIComponent(url)}`;\n const response = await fetch(apiUrl);\n const data = await response.json();\n\n if (!response.ok) {\n throw new Error('Failed to fetch metadata');\n }\n\n const { status, data: metaData } = data;\n\n if (status !== 'success') {\n throw new Error('API returned error status');\n }\n\n const parsedUrl = new URL(url);\n const domain = parsedUrl.hostname;\n\n return {\n title: metaData.title || domain,\n description: metaData.description || 'No description available',\n image: metaData.image?.url || '',\n siteName: metaData.publisher || domain,\n url: metaData.url || '',\n favicon:\n metaData.logo?.url ||\n `https://www.google.com/s2/favicons?domain=${domain}&sz=64`,\n };\n } catch (error) {\n console.error('Error fetching OpenGraph data:', error);\n\n const parsedUrl = new URL(url);\n const domain = parsedUrl.hostname;\n\n return {\n title: domain,\n description: 'No description available',\n image: '',\n url: '',\n siteName: domain,\n favicon: `https://www.google.com/s2/favicons?domain=${domain}&sz=64`,\n };\n }\n};\n\nconst Bookmark: React.FC<BookmarkProps> = ({ url }) => {\n const [ogData, setOgData] = useState<OpenGraphData | null>(null);\n const [error, setError] = useState(false);\n\n useEffect(() => {\n const loadOgData = async () => {\n try {\n const data = await fetchOpenGraphData(url);\n setOgData(data);\n } catch (err) {\n setError(true);\n }\n };\n\n loadOgData();\n }, [url]);\n\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}>{ogData?.title || url}</h4>\n <p className={description}>{ogData?.description || ''}</p>\n </div>\n <div className={siteName}>\n {ogData?.favicon && (\n <img src={ogData.favicon} alt=\"\" className={favicon} />\n )}\n <span className={urlText}>{ogData?.url || ''}</span>\n </div>\n </div>\n {ogData?.image && (\n <div className={previewContainer}>\n <img\n className={previewImage}\n src={ogData.image}\n alt={ogData.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 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/Bookmark/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA71WTW/bMAy991foMqA5KIjddMvcy4CddtlhG7BjIFtMzEaWFEmJnQ7974Nkyx9t0nbDsFMgUqQeHx/pzK07CbBrgXK3Xu/NfnXaLMivK0IcNI5yKJRhDpXMiFQS7q4I4Wi1YKeM5EIVO2/RjHOUW+qUzsiRmWtKrWaFNzV2vbb7m/tdvp+Nr+bKOVW9fPvxat6hK5jhEV0S0PUgNgIanzhXhoPJSKIbYpVA3qUulFDG0tYdsy9nQwg1jOPBRiit8Vuw0YrHiCZEqCOYjVB1RkrkHKS3OcOkxZaiXDXUloyrmizmqSXAbKCsYg0tAbely8jKQHWxtqz0T4QKh1w9S+E0RpWkU5qUdCBdzJaGPB3jT6nOmYWYxs7uzlHqfzOyJAlJVgvdmyhHA0VbcKHEoQo03B+sw82Jdhgy4h8CmoOroSXqOXkDcm3giFB/VtIxlL5RbQk355vdIkvGyJjAraTooLIZKUA6MGdhDa7nTXkTxi8V20LEtwz4auSuzEiyWLzzSWLSeFb5PRSObtA/718YGbWK2hmAva5LW8XW1RMBOHSix3Y7bf/iT8ePkI2Sjlp8gHjRnbTaGqbLE/W+7/gAEyHxIazuSDgb+DM4qYUKcyV6Oe9CeJjYbDq+fhn1og+3KpR995L57cX+dYtscIAQqC1a76pLdBDKB7/fasP0mE4OtjCofX8iqe//D6lDUH6REwuFkpyZU7x6MxurL52nf8lKP260hnyHjuYqjFg8CpRAC8EqnZF07PArSxkMc3YE47BgYsynRQdfWdUr9EMgc9LJDvELX5RB++bf8qkNViM20/NL8cKe2bJXgU62xEDKhh2xGAS2mmyUjo6n9IQ1bEuDchc0OGQ7GPEjzEqb7WPIdq7/Z6X/oiz8vnxSw6cKODJyPXIt04VuZuHZty33EcfxH8bj1eNv8l7YipgIAAA=';\nexport var card = 'styles_card__qrq8yf1';\nexport var content = 'styles_content__qrq8yf2';\nexport var description = 'styles_description__qrq8yf6';\nexport var favicon = 'styles_favicon__qrq8yf8';\nexport var link = 'styles_link__qrq8yf0';\nexport var previewContainer = 'styles_previewContainer__qrq8yf3';\nexport var previewImage = 'styles_previewImage__qrq8yf4';\nexport var siteName = 'styles_siteName__qrq8yf7';\nexport var title = 'styles_title__qrq8yf5';\nexport var urlText = 'styles_urlText__qrq8yf9';","import React, { useState, useEffect } from 'react';\nimport {\n link,\n card,\n content,\n iconContainer,\n icon,\n title,\n updatedText,\n} from './styles.css';\n\nexport interface LinkPreviewProps {\n url: string;\n}\n\ninterface RepoData {\n name: string;\n full_name: string;\n owner: {\n avatar_url: string;\n };\n updated_at: string;\n}\n\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// 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// 날짜 포맷팅 함수\nconst formatUpdatedTime = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffInHours = Math.floor(\n (now.getTime() - date.getTime()) / (1000 * 60 * 60)\n );\n\n if (diffInHours < 24) {\n return `Updated ${diffInHours} hours ago`;\n } else {\n const diffInDays = Math.floor(diffInHours / 24);\n if (diffInDays === 1) {\n return 'Updated yesterday';\n } else if (diffInDays < 30) {\n return `Updated ${diffInDays} days ago`;\n } else {\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `Updated on ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n }\n }\n};\n\nconst LinkPreview: React.FC<LinkPreviewProps> = ({ url }) => {\n const [repoData, setRepoData] = useState<RepoData | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const loadRepoData = async () => {\n setLoading(true);\n const repoPath = extractRepoPathFromUrl(url);\n\n if (repoPath) {\n const data = await fetchGitHubRepoData(repoPath);\n setRepoData(data);\n }\n\n setLoading(false);\n };\n\n loadRepoData();\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 return (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className={link}>\n <div className={card}>\n <div className={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={icon}\n />\n </div>\n <div className={content}>\n <div className={title}>{repoName}</div>\n <div className={updatedText}>\n {loading ? 'Loading...' : `NotionX • ${updatedTimeText}`}\n </div>\n </div>\n </div>\n </a>\n );\n};\n\nexport default LinkPreview;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/LinkPreview/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA61UTY/aMBC976/wpVL3YESA7cE99h+0lXpETjyQAceT2sMmbNX/XtnBhPCh3UNPiPl4efPejGeBjxbC2qLbr9dUtMummIs/T0Iw9CwNVOQ1IzklHDn4+iSEwdBafVSitFTtY6TVxqDbSqZWiVftP0sZWl3FUN+H9Tr8Xu72Zft8WVsSMzXvlP99mp34VdqbzK9I/M40Nhb6iFySN+CVKNpeBLJoTtgVWfJBDumMvnoeW6TXBg8hcxmC31NMNiZ39KmDXsFvLHVK1GgMuBhjr13AQaSSehlqbagT89kiCNAhiaYtbp1EhiYoUYFj8DHc6F7WgNualVh5aC4Uupam1AEylzCR0sKGr6tH3pxqt/rGmmnJA6lVHSdOgo+jnZHSv0uRisUUihyD44y2uG9c/FWiEIXQB6YckQY9VIOqFdlDk7TeHQLj5ihPyErEaUCWwB0Mbtw6NPLBitw3cqzRxVUYWC3vs3rg2A2BqZkdGq6VWMxeTm5md4v5/NN5tFB7dHsl5tfkMqdV4vQQbIxQuYOK5QYjk2Gyjy12aLJn3cQyRraQabwkGhtyLAO+QQbiY0tbr9v6KGPuB77BZD1NWrnU1p0Y3238lZIyQIMl2fMS7VN7Ols1veH4Jp1X7fE9xpdrTIC12AYMMdXVyJAuAOKD1nndXg5/aI1mMD/TZwYJvnxcgvHtKh9OEKAiZ7Q/5tLl/xvjHz3UtpnMBQAA';\nexport var card = 'styles_card__o1p3m11';\nexport var content = 'styles_content__o1p3m12';\nexport var icon = 'styles_icon__o1p3m14';\nexport var iconContainer = 'styles_iconContainer__o1p3m13';\nexport var link = 'styles_link__o1p3m10';\nexport var title = 'styles_title__o1p3m15';\nexport var updatedText = 'styles_updatedText__o1p3m16';","import React from 'react';\nimport { List, ListItem } from './List';\nimport { MemoizedRichText } from '../MemoizedComponents';\n\nexport interface Props {\n blocks: any[];\n startIndex: number;\n type: 'bulleted' | 'numbered';\n}\n\n// 리스트 아이템을 렌더링하는 컴포넌트 (중첩 리스트 지원)\nconst RecursiveListItem: React.FC<{\n block: any;\n index: number;\n}> = ({ block, index }) => {\n const blockProps = {\n tabIndex: 0,\n 'data-block-id': block.id,\n };\n\n const blockType = block.type;\n const richTexts = block[blockType]?.rich_text;\n\n return (\n <ListItem {...blockProps}>\n <MemoizedRichText richTexts={richTexts} />\n {block.children && block.children.length > 0 && (\n <RecursiveListGroup\n blocks={block.children}\n type={blockType.split('_')[0] as 'bulleted' | 'numbered'}\n />\n )}\n </ListItem>\n );\n};\n\n// 중첩 리스트 그룹을 렌더링하는 컴포넌트\nconst RecursiveListGroup: React.FC<{\n blocks: any[];\n type: 'bulleted' | 'numbered';\n}> = ({ blocks, type }) => {\n if (!blocks || blocks.length === 0) return null;\n\n // 리스트 타입에 맞는 아이템만 필터링\n const listItems = blocks.filter(\n (block) => block.type === `${type}_list_item`\n );\n\n if (listItems.length === 0) return null;\n\n return (\n <List\n as={type === 'numbered' ? 'ol' : 'ul'}\n type={type}\n role=\"list\"\n aria-label={type === 'bulleted' ? 'Bulleted list' : 'Numbered list'}\n >\n {listItems.map((block, index) => (\n <RecursiveListItem key={block.id} block={block} index={index} />\n ))}\n </List>\n );\n};\n\nconst ListBlocksRenderer: React.FC<Props> = ({ blocks, startIndex, type }) => {\n let consecutiveItems = 0;\n for (let i = startIndex; i < blocks.length; i++) {\n const block = blocks[i];\n if (!block) break;\n if (block.type === `${type}_list_item`) {\n consecutiveItems++;\n } else {\n break;\n }\n }\n\n const listItems = blocks.slice(startIndex, startIndex + consecutiveItems);\n\n return (\n <List\n as={type === 'numbered' ? 'ol' : 'ul'}\n type={type}\n role=\"list\"\n aria-label={type === 'bulleted' ? 'Bulleted list' : 'Numbered list'}\n >\n {listItems.map((block, index) => (\n <RecursiveListItem\n key={block.id}\n block={block}\n index={startIndex + index}\n />\n ))}\n </List>\n );\n};\n\nexport default ListBlocksRenderer;\n","import React, { useMemo } from 'react';\nimport { codeBlock } from './styles.css';\nimport Prism, { Grammar } from 'prismjs';\nimport { MemoizedRichText } from '../MemoizedComponents';\nimport { RichTextItem } from '../RichText/RichTexts';\n\nimport 'prismjs/themes/prism.css';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-jsx';\nimport 'prismjs/components/prism-tsx';\n\nif (typeof window !== 'undefined') {\n window.Prism = Prism;\n}\n\nexport interface Props {\n code: string;\n language: string;\n caption?: RichTextItem[];\n}\n\nconst CodeBlock: React.FC<Props> = ({ code, language, caption }) => {\n const highlightedCode = useMemo(() => {\n const prismLanguage =\n Prism.languages[language] || Prism.languages.plaintext;\n return Prism.highlight(code, prismLanguage as Grammar, language);\n }, [code, language]);\n\n return (\n <>\n <pre className={codeBlock}>\n <code dangerouslySetInnerHTML={{ __html: highlightedCode }} />\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+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/Code/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA5VTTW/bMAy951cY2KUBpiBbm6xNbz0MO+8PBLTEOFpk0aWoNN6w/z5YrdN56BbON5PvPT1+LZL0AdPWksOHQPaw3X54jDcfe7usfsyqqgZ7aJhydMZSIN5UR+Ar8/yTzEAzr5jtNj1efzvUq/n9rKr+ShA8yQhdF2gHzvnYjODUgfWxMe1ZUQqsJnbIhsH5nEbwc/Brif3GOBUGHZF3gZ42FWShIbKjKGYHrQ/9qCB9Rw1Dt+/NkP1cksXqKAbzMzX577iplovbFbZDMPiIZo++2csbekP2S0kaxgAnPPujItkCNz7+WXdqRxTPq+X97Ods8Y85DbEyrElpPu6RvVwiL4QOGBeW2hajvK8U2I4pUKOCOrLSd6jCWgcCpY6XxXm3Lt9r5weJTeUFgrfKurocrWQQT3EifVc+rQhThyy9qgwBXWtqooAQVdiY2xpZ10WKSUA5ydS3NYVpY5YrZVcSBrRCOlsgwiZCq1uFJOyjro12DzoHdfZB/HQL1ncXj+uFPSwAaIvFKF65LZnDBVyA2GRo0NiU/qs/JTdlTCcNa7wGZf0gnINueGXURwhZBz9g/0TsJtaWn7S+dsN9e9KdkQ2QUtnCyWvO3cD6VvkgY4Mn1Wu+7YjVp3gE9lCHqTMs+/kLwgSrKKQHAAA=';\nexport var codeBlock = 'styles_codeBlock__1qn42yc0';","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nimport 'src/components/Renderer/components/Typography/styles.css.ts.vanilla.css?source=#H4sIAAAAAAAAA92VP2+DMBDFdz6FxzI4CqAOIXvVuR06IhMb7NZgxzYhpOp3r3B6IX8a1A6RUEbu3c9+vnsSM+s6yWymiSGlIZpn2WJOFo/lHH0GCK2UVCZFG2IeMPYfFju2dVlm18n7Rx6FywChQtUOF6QSsoNe12nlz+twrz55EefEMkAXHpWiZpgzUXL3C9qrz148QWuPakKpqEvArCYrUZd4a6FtHZ5Lg6YH41bs2BXbr2LHTm6mA9ZeM92rb3vTFaOiqQB+93DLhWPeEkuRNgy3huhl8BXMrq4iLdSqsXgjrMgl84tRjeuHk6JYb5FVUtDTJWkjKmI6uDr2V/9AWBWFZc6zfTlXhjKDDaGisfCgffHF17A9vKENj61yRvoVROA0mnxo/rRxHgFU/G/fuZIUUDkaUgltmxDNz8TqcIYbn/bUcxGD0/hOchEDVN4oF7KEtuYyF8O0zfi0p56LBJwmd5KLBCB+o1wcG7OXyTj+543Oe2rJ+Abt6zK1fwgAAA==';\nexport var heading1 = 'styles_heading1__90a95g1';\nexport var heading2 = 'styles_heading2__90a95g2';\nexport var heading3 = 'styles_heading3__90a95g3';\nexport var paragraph = 'styles_paragraph__90a95g0';","import React from 'react';\nimport { paragraph, heading1, heading2, heading3 } from './styles.css';\n\ninterface TypographyProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport const Paragraph: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <p className={paragraph} {...props}>\n {children}\n </p>\n );\n};\n\nexport const Heading1: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <h1 className={heading1} {...props}>\n {children}\n </h1>\n );\n};\n\nexport const Heading2: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <h2 className={heading2} {...props}>\n {children}\n </h2>\n );\n};\n\nexport const Heading3: React.FC<TypographyProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <h3 className={heading3} {...props}>\n {children}\n </h3>\n );\n};\n","import React from 'react';\n\nimport {\n MemoizedRichText,\n MemoizedImage,\n MemoizedBookmark,\n MemoizedLinkPreview,\n} from '../MemoizedComponents';\nimport { CodeBlock } from '../Code';\nimport { Heading1, Heading2, Heading3, Paragraph } from '../Typography';\n\nexport interface Props {\n block: any;\n onFocus?: () => void;\n index: number;\n}\n\nconst BlockRenderer: React.FC<Props> = ({ block, onFocus, index }) => {\n if (!block) return null;\n\n const blockProps = {\n tabIndex: 0,\n onFocus,\n 'data-block-id': block.id,\n };\n\n switch (block.type) {\n case 'link_preview':\n return (\n <MemoizedLinkPreview\n url={block.link_preview.url}\n {...blockProps}\n />\n );\n case 'paragraph':\n return (\n <Paragraph {...blockProps}>\n <MemoizedRichText richTexts={block.paragraph.rich_text} />\n </Paragraph>\n );\n\n case 'heading_1':\n return (\n <Heading1 {...blockProps}>\n <MemoizedRichText richTexts={block.heading_1.rich_text} />\n </Heading1>\n );\n\n case 'heading_2':\n return (\n <Heading2 {...blockProps}>\n <MemoizedRichText richTexts={block.heading_2.rich_text} />\n </Heading2>\n );\n\n case 'heading_3':\n return (\n <Heading3 {...blockProps}>\n <MemoizedRichText richTexts={block.heading_3.rich_text} />\n </Heading3>\n );\n\n case 'code':\n return (\n <div {...blockProps}>\n <CodeBlock\n code={block.code.rich_text[0].text.content}\n language={block.code.language}\n caption={block.code.caption?.[0]?.plain_text}\n />\n </div>\n );\n\n case 'image':\n return (\n <figure {...blockProps}>\n <MemoizedImage\n src={block.image.file?.url || block.image.external?.url}\n alt={block.image.caption?.[0]?.plain_text || ''}\n caption={block.image.caption}\n format={block.image.format}\n />\n </figure>\n );\n\n case 'bookmark':\n return <MemoizedBookmark url={block.bookmark.url} />;\n\n default:\n return null;\n }\n};\n\nexport default BlockRenderer;\n","import 'src/styles/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA+2VS2/aQBSF9/kVV/GmlWzk8ROmq6ZqlErNJrTqMhrbg5kw9jgzJjGp+t+rgfiJcbpIdyCEQP7O+NzLgTMr1zSj95yl6/LH/u29enQfNhHy4PcFgGWVu0KkkhTrnbUSeXlNMsZ3VkRUgy4wbJmlSK4sRSVbgUWKglNL7VRJMxOuOMs3tyRe7j9fi7w04XJJU0Hh57dLE24of6Ili4kJnyUj3IT2rE8THmKRNB4IhuX1rciFdUfTLSfShC8iV4ITZcLldxZRSUomctDMpQm3NOfChEzkQhUkpqP3WbIXalWqvkeEwZ6FvqTZaVplhPNaEGvB/A1Fd5MJBjQJcyLThqYY0MyZPn2NanqFwZlGnRpN9cFvnOvW8HraxS+qo2XlQmakWQzD4Nn2FJ/RhG2zmn/A4E/zimYsEjypFRsMwbSiS3MM4QjNWU5vDnSpX2s8O4w8xXe/1Xy/zilaUk4q2tgRWhC+KnQ8WZ5aVRvEQucKdXbeMA3yqJERQjU7lZo4BrrG1SDwNZM1TstuYOvLPK0vb/tBamw2QXjqhjISMqHyjiRsqzpGnwej9LDWSqUxNzzBtZ52/bl7VGvsZTB6H2s5ZHc3EAsupLIiEm9SKbZ5Y87GYKz2jx5Y0qoJFcJguKHrO32kkCwjcldTDgbDdoMgCXqUorHIkw7nYjD8eWAHi76z/Rg15GEwKKIenfcg/b86MoOPQaYR+YBc30QuMpFjmzP08VjanSrAYDies3DoMcdy/ROoyRCD8fXKD/3wFHl1ZGk+asl/9aTWJBHP3SghhMEGVFTgFBXYB7FtwutzZg+lbbyQo6VeUUFQVGDpM4ZqNBC3mUPu/r52UQHytdw9If9zMTsUckLkpt/H/rmPz3187uNzH5/7+H362E4QQv2yGfZxvEhQ0m/QkT725yQYFPtoH8+jhbfo9+BxH7u2G7jJP/axgQIUOc7bFTwyyPtVcM/FfyhdXZbeqPQ9Gvcv5gJaSgIPAAA=';\nexport var darkTheme = 'theme_darkTheme__sq3jkb15';\nexport var lightTheme = 'theme_lightTheme__sq3jkb14';\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)'}},typography:{fontFamily:{base:'var(--typography-fontFamily-base__sq3jkb9)',code:'var(--typography-fontFamily-code__sq3jkba)'},fontSize:{xs:'var(--typography-fontSize-xs__sq3jkbb)',small:'var(--typography-fontSize-small__sq3jkbc)',base:'var(--typography-fontSize-base__sq3jkbd)',large:'var(--typography-fontSize-large__sq3jkbe)',h1:'var(--typography-fontSize-h1__sq3jkbf)',h2:'var(--typography-fontSize-h2__sq3jkbg)',h3:'var(--typography-fontSize-h3__sq3jkbh)'},fontWeight:{normal:'var(--typography-fontWeight-normal__sq3jkbi)',medium:'var(--typography-fontWeight-medium__sq3jkbj)',semibold:'var(--typography-fontWeight-semibold__sq3jkbk)',bold:'var(--typography-fontWeight-bold__sq3jkbl)'},lineHeight:{tight:'var(--typography-lineHeight-tight__sq3jkbm)',base:'var(--typography-lineHeight-base__sq3jkbn)',relaxed:'var(--typography-lineHeight-relaxed__sq3jkbo)'}},spacing:{xxs:'var(--spacing-xxs__sq3jkbp)',xs:'var(--spacing-xs__sq3jkbq)',sm:'var(--spacing-sm__sq3jkbr)',base:'var(--spacing-base__sq3jkbs)',md:'var(--spacing-md__sq3jkbt)',lg:'var(--spacing-lg__sq3jkbu)',xl:'var(--spacing-xl__sq3jkbv)'},borderRadius:{sm:'var(--borderRadius-sm__sq3jkbw)',md:'var(--borderRadius-md__sq3jkbx)',lg:'var(--borderRadius-lg__sq3jkby)',xl:'var(--borderRadius-xl__sq3jkbz)',xxl:'var(--borderRadius-xxl__sq3jkb10)'},shadows:{sm:'var(--shadows-sm__sq3jkb11)',md:'var(--shadows-md__sq3jkb12)',lg:'var(--shadows-lg__sq3jkb13)'}};","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 'src/components/Cover/styles.css.ts.vanilla.css?source=LnN0eWxlc19jb3Zlcl9fcDBjcDhkMCB7CiAgd2lkdGg6IDEwMCU7CiAgbWF4LXdpZHRoOiA1Ni4yNXJlbTsKICBoZWlnaHQ6IDMwdmg7CiAgZGlzcGxheTogYmxvY2s7CiAgb2JqZWN0LWZpdDogY292ZXI7CiAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXIgNTAlOwogIGJvcmRlci1yYWRpdXM6IDEuNXJlbTsKICBtYXJnaW46IDAgYXV0bzsKfQpAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAuc3R5bGVzX2NvdmVyX19wMGNwOGQwIHsKICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTsKICAgIGhlaWdodDogMjV2aDsKICB9Cn0=';\nexport var cover = 'styles_cover__p0cp8d0';","import { cover } from './styles.css';\n\ninterface CoverProps {\n src: string;\n alt: string;\n}\n\nconst Cover = ({ src, alt }: CoverProps) => {\n return <img src={src} alt={alt} className={cover} />;\n};\n\nexport default Cover;\n"],"mappings":"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","names":["React","useState","useMemo","React","_7a468","jsx","content","_7a468","_7a468","jsx","useState","useEffect","link","jsx","jsxs","useState","useEffect","link","useState","useEffect","card","content","link","title","jsx","jsxs","useState","useEffect","link","card","content","title","React","jsx","jsxs","Fragment","jsx","jsxs","caption","jsx","jsx","jsx","title","jsx","Fragment","jsx","jsxs","React","title","cover","useState","useMemo"]}
|
package/package.json
CHANGED
|
@@ -1,17 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "notion-to-jsx",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Notion blocks to JSX renderer",
|
|
5
|
+
"private": false,
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/01-binary/notion-to-jsx",
|
|
9
|
+
"directory": "/packages/notion-to-jsx"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"module": "./dist/index.mjs",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"sideEffects": [
|
|
18
|
+
"**/*.css",
|
|
19
|
+
"**/*.css.ts"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"notion",
|
|
23
|
+
"jsx",
|
|
24
|
+
"react",
|
|
25
|
+
"renderer"
|
|
26
|
+
],
|
|
7
27
|
"author": "Jinsoo Lee",
|
|
8
28
|
"license": "MIT",
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"react": "^18.0.0",
|
|
31
|
+
"react-dom": "^18.0.0"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@vanilla-extract/css": "^1.17.1",
|
|
35
|
+
"@vanilla-extract/recipes": "^0.5.5",
|
|
36
|
+
"@vanilla-extract/sprinkles": "^1.6.3",
|
|
37
|
+
"prismjs": "^1.29.0"
|
|
38
|
+
},
|
|
9
39
|
"devDependencies": {
|
|
40
|
+
"@types/prismjs": "^1.26.5",
|
|
41
|
+
"@types/react": "^18.3.18",
|
|
42
|
+
"@types/react-dom": "^18.3.5",
|
|
43
|
+
"@vanilla-extract/esbuild-plugin": "^2.3.15",
|
|
44
|
+
"tsup": "^8.0.0",
|
|
10
45
|
"typescript": "^5.6.3",
|
|
11
46
|
"@repo/eslint-config": "0.0.0",
|
|
12
47
|
"@repo/typescript-config": "0.0.0"
|
|
13
48
|
},
|
|
14
49
|
"scripts": {
|
|
15
|
-
"
|
|
50
|
+
"build": "tsup",
|
|
51
|
+
"dev": "tsup --watch",
|
|
52
|
+
"lint": "eslint .",
|
|
53
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
16
54
|
}
|
|
17
55
|
}
|
package/.turbo/turbo-test.log
DELETED
package/tsconfig.json
DELETED