@texonom/nreact 1.2.11 → 1.3.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/build/.tsbuildinfo +1 -1
  2. package/build/block.d.ts.map +1 -1
  3. package/build/chunk-3R4ITV3N.js +1358 -0
  4. package/build/chunk-HJGIONX2.js +1358 -0
  5. package/build/components/asset-wrapper.d.ts.map +1 -1
  6. package/build/components/audio.d.ts.map +1 -1
  7. package/build/components/eoi.d.ts.map +1 -1
  8. package/build/components/file.d.ts.map +1 -1
  9. package/build/components/google-drive.d.ts.map +1 -1
  10. package/build/components/header.d.ts.map +1 -1
  11. package/build/components/lite-youtube-embed.d.ts.map +1 -1
  12. package/build/components/page-aside.d.ts.map +1 -1
  13. package/build/components/page-title.d.ts.map +1 -1
  14. package/build/components/search-dialog.d.ts.map +1 -1
  15. package/build/dev/chunk-4XJBBVRZ.js +1359 -0
  16. package/build/dev/chunk-4XJBBVRZ.js.map +1 -0
  17. package/build/dev/chunk-7R2ZX3WF.js +1359 -0
  18. package/build/dev/chunk-7R2ZX3WF.js.map +1 -0
  19. package/build/dev/chunk-NVAEYUJK.js +1359 -0
  20. package/build/dev/chunk-NVAEYUJK.js.map +1 -0
  21. package/build/dev/index.js +54 -67
  22. package/build/dev/index.js.map +1 -1
  23. package/build/dev/third-party/code.js +2 -3
  24. package/build/dev/third-party/code.js.map +1 -1
  25. package/build/dev/third-party/collection.js +13 -16
  26. package/build/dev/third-party/collection.js.map +1 -1
  27. package/build/dev/third-party/equation.js +2 -3
  28. package/build/dev/third-party/equation.js.map +1 -1
  29. package/build/icons/clear-icon.d.ts.map +1 -1
  30. package/build/icons/loading-icon.d.ts.map +1 -1
  31. package/build/icons/search-icon.d.ts.map +1 -1
  32. package/build/index.js +54 -67
  33. package/build/third-party/code.d.ts.map +1 -1
  34. package/build/third-party/code.js +2 -3
  35. package/build/third-party/collection-card.d.ts.map +1 -1
  36. package/build/third-party/collection-row.d.ts.map +1 -1
  37. package/build/third-party/collection-view-board.d.ts.map +1 -1
  38. package/build/third-party/collection-view-gallery.d.ts.map +1 -1
  39. package/build/third-party/collection-view-table.d.ts.map +1 -1
  40. package/build/third-party/collection.d.ts.map +1 -1
  41. package/build/third-party/collection.js +13 -16
  42. package/build/third-party/equation.d.ts.map +1 -1
  43. package/build/third-party/equation.js +2 -3
  44. package/build/types.d.ts +46 -16
  45. package/build/types.d.ts.map +1 -1
  46. package/build/utils.d.ts +0 -1
  47. package/build/utils.d.ts.map +1 -1
  48. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/renderer.tsx","../../src/block.tsx","../../src/components/audio.tsx","../../src/components/file.tsx","../../src/icons/file-icon.tsx","../../src/components/google-drive.tsx","../../src/components/page-aside.tsx","../../src/components/sync-pointer-block.tsx","../../src/icons/link-icon.tsx"],"sourcesContent":["import React from 'react'\n\nimport mediumZoom from '@fisch0920/medium-zoom'\nimport type { ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { Block } from './block'\nimport { NotionContextProvider, useNotionContext } from './context'\nimport { MapImageUrlFn, MapPageUrlFn, NotionComponents, SearchNotionFn } from './types'\n\nexport const NotionRenderer: React.FC<{\n recordMap: ExtendedRecordMap\n components?: Partial<NotionComponents>\n\n mapPageUrl?: MapPageUrlFn\n mapImageUrl?: MapImageUrlFn\n searchNotion?: SearchNotionFn\n isShowingSearch?: boolean\n onHideSearch?: () => void\n\n rootPageId?: string\n rootDomain?: string\n\n // set fullPage to false to render page content only\n // this will remove the header, cover image, and footer\n fullPage?: boolean\n\n darkMode?: boolean\n previewImages?: boolean\n forceCustomImages?: boolean\n showCollectionViewDropdown?: boolean\n linkTableTitleProperties?: boolean\n isLinkCollectionToUrlProperty?: boolean\n isImageZoomable?: boolean\n\n showTableOfContents?: boolean\n minTableOfContentsItems?: number\n\n defaultPageIcon?: string\n defaultPageCover?: string\n defaultPageCoverPosition?: number\n\n className?: string\n bodyClassName?: string\n\n header?: React.ReactNode\n footer?: React.ReactNode\n pageHeader?: React.ReactNode\n pageFooter?: React.ReactNode\n pageTitle?: React.ReactNode\n pageAside?: React.ReactNode\n pageCover?: React.ReactNode\n\n blockId?: string\n hideBlockId?: boolean\n disableHeader?: boolean\n}> = ({\n components,\n recordMap,\n mapPageUrl,\n mapImageUrl,\n searchNotion,\n isShowingSearch,\n onHideSearch,\n fullPage,\n rootPageId,\n rootDomain,\n darkMode,\n previewImages,\n forceCustomImages,\n showCollectionViewDropdown,\n linkTableTitleProperties,\n isLinkCollectionToUrlProperty,\n isImageZoomable = true,\n showTableOfContents,\n minTableOfContentsItems,\n defaultPageIcon,\n defaultPageCover,\n defaultPageCoverPosition,\n ...rest\n}) => {\n const zoom = React.useMemo(\n () =>\n typeof window !== 'undefined' &&\n mediumZoom({\n background: 'rgba(0, 0, 0, 0.8)',\n minZoomScale: 2.0,\n margin: getMediumZoomMargin()\n }),\n []\n )\n\n return (\n <NotionContextProvider\n components={components}\n recordMap={recordMap}\n mapPageUrl={mapPageUrl}\n mapImageUrl={mapImageUrl}\n searchNotion={searchNotion}\n isShowingSearch={isShowingSearch}\n onHideSearch={onHideSearch}\n fullPage={fullPage}\n rootPageId={rootPageId}\n rootDomain={rootDomain}\n darkMode={darkMode}\n previewImages={previewImages}\n forceCustomImages={forceCustomImages}\n showCollectionViewDropdown={showCollectionViewDropdown}\n linkTableTitleProperties={linkTableTitleProperties}\n isLinkCollectionToUrlProperty={isLinkCollectionToUrlProperty}\n showTableOfContents={showTableOfContents}\n minTableOfContentsItems={minTableOfContentsItems}\n defaultPageIcon={defaultPageIcon}\n defaultPageCover={defaultPageCover}\n defaultPageCoverPosition={defaultPageCoverPosition}\n zoom={isImageZoomable ? zoom : null}>\n <NotionBlockRenderer {...rest} />\n </NotionContextProvider>\n )\n}\n\nexport const NotionBlockRenderer: React.FC<{\n className?: string\n bodyClassName?: string\n header?: React.ReactNode\n footer?: React.ReactNode\n disableHeader?: boolean\n\n blockId?: string\n hideBlockId?: boolean\n level?: number\n}> = ({ level = 0, blockId, ...props }) => {\n const { recordMap } = useNotionContext()\n const id = blockId || Object.keys(recordMap.block)[0]\n const block = recordMap.block[id]?.value\n\n if (!block) {\n if (process.env.NODE_ENV !== 'production') console.warn('missing block', blockId)\n\n return null\n }\n\n return (\n <Block key={id} level={level} block={block} {...props}>\n {block?.content?.map(contentBlockId => (\n <NotionBlockRenderer key={contentBlockId} blockId={contentBlockId} level={level + 1} {...props} />\n ))}\n </Block>\n )\n}\n\nfunction getMediumZoomMargin() {\n const width = window.innerWidth\n\n if (width < 500) return 8\n else if (width < 800) return 20\n else if (width < 1280) return 30\n else if (width < 1600) return 40\n else if (width < 1920) return 48\n else return 72\n}\n","import React from 'react'\n\nimport {\n getBlockCollectionId,\n getBlockIcon,\n getBlockParentPage,\n getPageTableOfContents,\n getTextContent,\n uuidToId\n} from '@texonom/nutils'\n\nimport { AssetWrapper } from './components/asset-wrapper'\nimport { Audio } from './components/audio'\nimport { EOI } from './components/eoi'\nimport { File } from './components/file'\nimport { GoogleDrive } from './components/google-drive'\nimport { LazyImage } from './components/lazy-image'\nimport { PageAside } from './components/page-aside'\nimport { PageIcon } from './components/page-icon'\nimport { PageTitle } from './components/page-title'\nimport { SyncPointerBlock } from './components/sync-pointer-block'\nimport { Text } from './components/text'\nimport { useNotionContext } from './context'\nimport { LinkIcon } from './icons/link-icon'\nimport { cs, getListNumber, isUrl } from './utils'\n\nimport type {\n Block as BlockType,\n PageBlock,\n GoogleDriveBlock,\n AudioBlock,\n FileBlock,\n EquationBlock,\n CodeBlock,\n TableBlock\n} from '@texonom/ntypes'\ninterface BlockProps {\n block: BlockType\n level: number\n\n className?: string\n bodyClassName?: string\n\n header?: React.ReactNode\n footer?: React.ReactNode\n pageHeader?: React.ReactNode\n pageFooter?: React.ReactNode\n pageTitle?: React.ReactNode\n pageAside?: React.ReactNode\n pageCover?: React.ReactNode\n\n hideBlockId?: boolean\n disableHeader?: boolean\n\n children?: React.ReactNode\n}\n\n// TODO: use react state instead of a global for this\nconst tocIndentLevelCache: {\n [blockId: string]: number\n} = {}\n\nconst pageCoverStyleCache: Record<string, object> = {}\n\nexport const Block: React.FC<BlockProps> = props => {\n const ctx = useNotionContext()\n const {\n components,\n fullPage,\n darkMode,\n recordMap,\n mapPageUrl,\n mapImageUrl,\n showTableOfContents,\n minTableOfContentsItems,\n defaultPageIcon,\n defaultPageCover,\n defaultPageCoverPosition\n } = ctx\n\n const [activeSection, setActiveSection] = React.useState(null)\n\n const {\n block,\n children,\n level,\n className,\n bodyClassName,\n header,\n footer,\n pageHeader,\n pageFooter,\n pageTitle,\n pageAside,\n pageCover,\n hideBlockId,\n disableHeader\n } = props\n\n if (!block) return null\n\n // ugly hack to make viewing raw collection views work properly\n // e.g., 6d886ca87ab94c21a16e3b82b43a57fb\n if (level === 0 && block.type === 'collection_view') {\n ;(block as any).type = 'collection_view_page'\n }\n\n const blockId = hideBlockId ? 'notion-block' : `notion-block-${uuidToId(block.id)}`\n\n switch (block.type) {\n case 'collection_view_page':\n // fallthrough\n case 'page':\n if (level === 0) {\n const {\n page_icon = defaultPageIcon,\n page_cover = defaultPageCover,\n page_cover_position = defaultPageCoverPosition,\n page_full_width,\n page_small_text\n } = block.format || {}\n\n if (fullPage) {\n const properties =\n block.type === 'page'\n ? block.properties\n : {\n title: recordMap.collection[getBlockCollectionId(block, recordMap)]?.value?.name\n }\n\n const coverPosition = (1 - (page_cover_position || 0.5)) * 100\n const pageCoverObjectPosition = `center ${coverPosition}%`\n let pageCoverStyle = pageCoverStyleCache[pageCoverObjectPosition]\n if (!pageCoverStyle)\n pageCoverStyle = pageCoverStyleCache[pageCoverObjectPosition] = {\n objectPosition: pageCoverObjectPosition\n }\n\n const pageIcon = getBlockIcon(block, recordMap) ?? defaultPageIcon\n const isPageIconUrl = pageIcon && isUrl(pageIcon)\n\n const toc = getPageTableOfContents(block as PageBlock, recordMap)\n\n const hasToc = showTableOfContents && toc.length >= minTableOfContentsItems\n const hasAside = (hasToc || pageAside) && !page_full_width\n const hasPageCover = pageCover || page_cover\n\n return (\n <div className={cs('notion', 'notion-app', darkMode ? 'dark' : 'light', blockId, className)}>\n <div className='notion-viewport' />\n\n <div className='notion-frame'>\n {!disableHeader && <components.Header block={block} />}\n {header}\n\n <div className='notion-page-scroller'>\n {hasPageCover &&\n (pageCover ? (\n pageCover\n ) : (\n <div className='notion-page-cover-wrapper'>\n <LazyImage\n src={mapImageUrl(page_cover, block)}\n alt={getTextContent(properties?.title)}\n priority={true}\n className='notion-page-cover'\n style={pageCoverStyle}\n />\n </div>\n ))}\n\n <main\n className={cs(\n 'notion-page',\n hasPageCover ? 'notion-page-has-cover' : 'notion-page-no-cover',\n page_icon ? 'notion-page-has-icon' : 'notion-page-no-icon',\n isPageIconUrl ? 'notion-page-has-image-icon' : 'notion-page-has-text-icon',\n 'notion-full-page',\n page_full_width && 'notion-full-width',\n page_small_text && 'notion-small-text',\n bodyClassName\n )}>\n {page_icon && <PageIcon block={block} defaultIcon={defaultPageIcon} inline={false} />}\n\n {pageHeader}\n\n <h1 className='notion-title'>{pageTitle ?? <Text value={properties?.title} block={block} />}</h1>\n\n {(block.type === 'collection_view_page' ||\n (block.type === 'page' && block.parent_table === 'collection')) && (\n <components.Collection block={block} ctx={ctx} />\n )}\n\n {block.type !== 'collection_view_page' && (\n <div\n className={cs(\n 'notion-page-content',\n hasAside && 'notion-page-content-has-aside',\n hasToc && 'notion-page-content-has-toc'\n )}>\n <article className='notion-page-content-inner'>{children}</article>\n\n {hasAside && (\n <PageAside\n toc={toc}\n activeSection={activeSection}\n setActiveSection={setActiveSection}\n hasToc={hasToc}\n hasAside={hasAside}\n pageAside={pageAside}\n />\n )}\n </div>\n )}\n\n {pageFooter}\n </main>\n\n {footer}\n </div>\n </div>\n </div>\n )\n } else {\n return (\n <main\n className={cs(\n 'notion',\n darkMode ? 'dark' : 'light',\n 'notion-page',\n page_full_width && 'notion-full-width',\n page_small_text && 'notion-small-text',\n blockId,\n className,\n bodyClassName\n )}>\n <div className='notion-viewport' />\n\n {pageHeader}\n\n {(block.type === 'collection_view_page' || (block.type === 'page' && block.parent_table === 'collection')) && (\n <components.Collection block={block} ctx={ctx} />\n )}\n\n {block.type !== 'collection_view_page' && children}\n\n {pageFooter}\n </main>\n )\n }\n } else {\n const blockColor = block.format?.block_color\n\n return (\n <components.PageLink\n className={cs('notion-page-link', blockColor && `notion-${blockColor}`, blockId)}\n href={mapPageUrl(block.id)}>\n <PageTitle block={block} />\n </components.PageLink>\n )\n }\n\n case 'header':\n // fallthrough\n case 'sub_header':\n // fallthrough\n case 'sub_sub_header': {\n if (!block.properties) return null\n\n const blockColor = block.format?.block_color\n const id = uuidToId(block.id)\n const title = getTextContent(block.properties.title) || `Notion Header ${id}`\n\n // we use a cache here because constructing the ToC is non-trivial\n let indentLevel = tocIndentLevelCache[block.id]\n let indentLevelClass: string\n\n if (indentLevel === undefined) {\n const page = getBlockParentPage(block, recordMap)\n\n if (page) {\n const toc = getPageTableOfContents(page, recordMap)\n const tocItem = toc.find(tocItem => tocItem.id === block.id)\n\n if (tocItem) {\n indentLevel = tocItem.indentLevel\n tocIndentLevelCache[block.id] = indentLevel\n }\n }\n }\n\n if (indentLevel !== undefined) indentLevelClass = `notion-h-indent-${indentLevel}`\n\n const isH1 = block.type === 'header'\n const isH2 = block.type === 'sub_header'\n const isH3 = block.type === 'sub_sub_header'\n\n const classNameStr = cs(\n isH1 && 'notion-h notion-h1',\n isH2 && 'notion-h notion-h2',\n isH3 && 'notion-h notion-h3',\n blockColor && `notion-${blockColor}`,\n indentLevelClass,\n blockId\n )\n\n const innerHeader = (\n <span>\n <div id={id} className='notion-header-anchor' />\n {!block.format?.toggleable && (\n <a className='notion-hash-link' href={`#${id}`} title={title}>\n <LinkIcon />\n </a>\n )}\n\n <span className='notion-h-title'>\n <Text value={block.properties.title} block={block} />\n </span>\n </span>\n )\n let headerBlock = null\n\n //page title takes the h1 so all header blocks are greater\n if (isH1)\n headerBlock = (\n <h2 className={classNameStr} data-id={id}>\n {innerHeader}\n </h2>\n )\n else if (isH2)\n headerBlock = (\n <h3 className={classNameStr} data-id={id}>\n {innerHeader}\n </h3>\n )\n else\n headerBlock = (\n <h4 className={classNameStr} data-id={id}>\n {innerHeader}\n </h4>\n )\n\n if (block.format?.toggleable)\n return (\n <details className={cs('notion-toggle', blockId)}>\n <summary>{headerBlock}</summary>\n <div>{children}</div>\n </details>\n )\n else return headerBlock\n }\n\n case 'divider':\n return <hr className={cs('notion-hr', blockId)} />\n\n case 'text': {\n if (!block.properties && !block.content?.length) return <div className={cs('notion-blank', blockId)}>&nbsp;</div>\n\n const blockColor = block.format?.block_color\n\n return (\n <div className={cs('notion-text', blockColor && `notion-${blockColor}`, blockId)}>\n {block.properties?.title && <Text value={block.properties.title} block={block} />}\n\n {children && <div className='notion-text-children'>{children}</div>}\n </div>\n )\n }\n\n case 'bulleted_list':\n // fallthrough\n case 'numbered_list': {\n const wrapList = (content: React.ReactNode, start?: number) =>\n block.type === 'bulleted_list' ? (\n <ul className={cs('notion-list', 'notion-list-disc', blockId)}>{content}</ul>\n ) : (\n <ol start={start} className={cs('notion-list', 'notion-list-numbered', blockId)}>\n {content}\n </ol>\n )\n\n let output: JSX.Element | null = null\n\n if (block.content)\n output = (\n <>\n {block.properties && (\n <li>\n <Text value={block.properties.title} block={block} />\n </li>\n )}\n {wrapList(children)}\n </>\n )\n else\n output = block.properties ? (\n <li>\n <Text value={block.properties.title} block={block} />\n </li>\n ) : null\n\n const isTopLevel = block.type !== recordMap.block[block.parent_id]?.value?.type\n const start = getListNumber(block.id, recordMap.block)\n\n return isTopLevel ? wrapList(output, start) : output\n }\n\n case 'embed':\n return <components.Embed blockId={blockId} block={block} />\n case 'tweet':\n // fallthrough\n case 'maps':\n // fallthrough\n case 'pdf':\n // fallthrough\n case 'figma':\n // fallthrough\n case 'typeform':\n // fallthrough\n case 'codepen':\n // fallthrough\n case 'excalidraw':\n // fallthrough\n case 'image':\n // fallthrough\n case 'gist':\n // fallthrough\n case 'video':\n return <AssetWrapper blockId={blockId} block={block} />\n\n case 'drive': {\n const properties = block.format?.drive_properties\n if (!properties)\n if (block.format?.display_source)\n //check if this drive actually needs to be embeded ex. google sheets.\n return <AssetWrapper blockId={blockId} block={block} />\n\n return <GoogleDrive block={block as GoogleDriveBlock} className={blockId} />\n }\n\n case 'audio':\n return <Audio block={block as AudioBlock} className={blockId} />\n\n case 'file':\n return <File block={block as FileBlock} className={blockId} />\n\n case 'equation':\n return <components.Equation block={block as EquationBlock} inline={false} className={blockId} />\n\n case 'code':\n return <components.Code block={block as CodeBlock} />\n\n case 'column_list':\n return <div className={cs('notion-row', blockId)}>{children}</div>\n\n case 'column': {\n // note: notion uses 46px\n const spacerWidth = `min(32px, 4vw)`\n const ratio = block.format?.column_ratio || 0.5\n const parent = recordMap.block[block.parent_id]?.value\n const columns = parent?.content?.length || Math.max(2, Math.ceil(1.0 / ratio))\n\n const width = `calc((100% - (${columns - 1} * ${spacerWidth})) * ${ratio})`\n const style = { width }\n\n return (\n <>\n <div className={cs('notion-column', blockId)} style={style}>\n {children}\n </div>\n\n <div className='notion-spacer' />\n </>\n )\n }\n\n case 'quote': {\n if (!block.properties) return null\n\n const blockColor = block.format?.block_color\n\n return (\n <blockquote className={cs('notion-quote', blockColor && `notion-${blockColor}`, blockId)}>\n <div>\n <Text value={block.properties.title} block={block} />\n </div>\n {children}\n </blockquote>\n )\n }\n\n case 'collection_view':\n return <components.Collection block={block} className={blockId} ctx={ctx} />\n\n case 'callout':\n if (components.Callout) return <components.Callout block={block} className={blockId} />\n else\n return (\n <div\n className={cs('notion-callout', block.format?.block_color && `notion-${block.format?.block_color}_co`, blockId)}>\n <PageIcon block={block} />\n\n <div className='notion-callout-text'>\n <Text value={block.properties?.title} block={block} />\n {children}\n </div>\n </div>\n )\n\n case 'bookmark': {\n if (!block.properties) return null\n\n const link = block.properties.link\n if (!link || !link[0]?.[0]) return null\n\n let title = getTextContent(block.properties.title)\n if (!title) title = getTextContent(link)\n\n if (title)\n if (title.startsWith('http'))\n try {\n const url = new URL(title)\n title = url.hostname\n } catch (err) {\n // ignore invalid links\n }\n\n return (\n <div className='notion-row'>\n <components.Link\n target='_blank'\n rel='noopener noreferrer'\n className={cs('notion-bookmark', block.format?.block_color && `notion-${block.format.block_color}`, blockId)}\n href={link[0][0]}>\n <div>\n {title && (\n <div className='notion-bookmark-title'>\n <Text value={[[title]]} block={block} />\n </div>\n )}\n\n {block.properties?.description && (\n <div className='notion-bookmark-description'>\n <Text value={block.properties?.description} block={block} />\n </div>\n )}\n\n <div className='notion-bookmark-link'>\n {block.format?.bookmark_icon && (\n <div className='notion-bookmark-link-icon'>\n <LazyImage src={mapImageUrl(block.format?.bookmark_icon, block)} alt={title} />\n </div>\n )}\n\n <div className='notion-bookmark-link-text'>\n <Text value={link} block={block} />\n </div>\n </div>\n </div>\n\n {block.format?.bookmark_cover && (\n <div className='notion-bookmark-image'>\n <LazyImage\n src={mapImageUrl(block.format?.bookmark_cover, block)}\n alt={getTextContent(block.properties?.title)}\n style={{\n objectFit: 'cover'\n }}\n />\n </div>\n )}\n </components.Link>\n </div>\n )\n }\n\n case 'toggle':\n return (\n <details className={cs('notion-toggle', blockId)}>\n <summary>\n <Text value={block.properties?.title} block={block} />\n </summary>\n\n <div>{children}</div>\n </details>\n )\n\n case 'table_of_contents': {\n const page = getBlockParentPage(block, recordMap)\n if (!page) return null\n\n const toc = getPageTableOfContents(page, recordMap)\n const blockColor = block.format?.block_color\n\n return (\n <div className={cs('notion-table-of-contents', blockColor && `notion-${blockColor}`, blockId)}>\n {toc.map(tocItem => (\n <a key={tocItem.id} href={`#${uuidToId(tocItem.id)}`} className='notion-table-of-contents-item'>\n <span\n className='notion-table-of-contents-item-body'\n style={{\n display: 'inline-block',\n marginLeft: tocItem.indentLevel * 24\n }}>\n {tocItem.text}\n </span>\n </a>\n ))}\n </div>\n )\n }\n\n case 'to_do': {\n const isChecked = block.properties?.checked?.[0]?.[0] === 'Yes'\n\n return (\n <div className={cs('notion-to-do', blockId)}>\n <div className='notion-to-do-item'>\n <components.Checkbox blockId={blockId} isChecked={isChecked} />\n\n <div className={cs('notion-to-do-body', isChecked && `notion-to-do-checked`)}>\n <Text value={block.properties?.title} block={block} />\n </div>\n </div>\n\n <div className='notion-to-do-children'>{children}</div>\n </div>\n )\n }\n\n case 'transclusion_container':\n return <div className={cs('notion-sync-block', blockId)}>{children}</div>\n\n case 'transclusion_reference':\n return <SyncPointerBlock block={block} level={level + 1} {...props} />\n\n case 'alias': {\n const blockPointerId = block?.format?.alias_pointer?.id\n const linkedBlock = recordMap.block[blockPointerId]?.value\n if (!linkedBlock) {\n console.debug('\"alias\" missing block', blockPointerId)\n return null\n }\n\n return (\n <components.PageLink className={cs('notion-page-link', blockPointerId)} href={mapPageUrl(blockPointerId)}>\n <PageTitle block={linkedBlock} />\n </components.PageLink>\n )\n }\n\n case 'table':\n return (\n <table className={cs('notion-simple-table', blockId)}>\n <tbody>{children}</tbody>\n </table>\n )\n\n case 'table_row': {\n const tableBlock = recordMap.block[block.parent_id]?.value as TableBlock\n const order = tableBlock.format?.table_block_column_order\n const formatMap = tableBlock.format?.table_block_column_format\n const backgroundColor = block.format?.block_color\n\n if (!tableBlock || !order) return null\n\n return (\n <tr className={cs('notion-simple-table-row', backgroundColor && `notion-${backgroundColor}`, blockId)}>\n {order.map(column => {\n const color = formatMap?.[column]?.color\n\n return (\n <td\n key={column}\n className={color ? `notion-${color}` : ''}\n style={{\n width: formatMap?.[column]?.width || 120\n }}>\n <div className='notion-simple-table-cell'>\n <Text value={block.properties?.[column] || [['ㅤ']]} block={block} />\n </div>\n </td>\n )\n })}\n </tr>\n )\n }\n\n case 'external_object_instance':\n return <EOI block={block} className={blockId} />\n\n default:\n if (process.env.NODE_ENV !== 'production')\n console.debug('Unsupported type ' + (block as any).type, JSON.stringify(block, null, 2))\n\n return <div />\n }\n\n return null\n}\n","import React from 'react'\n\nimport { AudioBlock } from '@texonom/ntypes'\n\nimport { useNotionContext } from '../context'\nimport { cs } from '../utils'\n\nexport const Audio: React.FC<{\n block: AudioBlock\n className?: string\n}> = ({ block, className }) => {\n const { recordMap } = useNotionContext()\n const source = recordMap.signed_urls[block.id] || block.properties?.source?.[0]?.[0]\n\n return (\n <div className={cs('notion-audio', className)}>\n <audio controls preload='none' src={source} />\n </div>\n )\n}\n","import React from 'react'\n\nimport { FileBlock } from '@texonom/ntypes'\n\nimport { useNotionContext } from '../context'\nimport { FileIcon } from '../icons/file-icon'\nimport { cs } from '../utils'\nimport { Text } from './text'\n\nexport const File: React.FC<{\n block: FileBlock\n className?: string\n}> = ({ block, className }) => {\n const { components, recordMap } = useNotionContext()\n const source = recordMap.signed_urls[block.id] || block.properties?.source?.[0]?.[0]\n\n return (\n <div className={cs('notion-file', className)}>\n <components.Link className='notion-file-link' href={source} target='_blank' rel='noopener noreferrer'>\n <FileIcon className='notion-file-icon' />\n\n <div className='notion-file-info'>\n <div className='notion-file-title'>\n <Text value={block.properties?.title || [['File']]} block={block} />\n </div>\n\n {block.properties?.size && (\n <div className='notion-file-size'>\n <Text value={block.properties.size} block={block} />\n </div>\n )}\n </div>\n </components.Link>\n </div>\n )\n}\n","import React from 'react'\n\nexport const FileIcon = props => {\n const { className, ...rest } = props\n return (\n <svg className={className} {...rest} viewBox='0 0 30 30'>\n <path d='M22,8v12c0,3.866-3.134,7-7,7s-7-3.134-7-7V8c0-2.762,2.238-5,5-5s5,2.238,5,5v12c0,1.657-1.343,3-3,3s-3-1.343-3-3V8h-2v12c0,2.762,2.238,5,5,5s5-2.238,5-5V8c0-3.866-3.134-7-7-7S6,4.134,6,8v12c0,4.971,4.029,9,9,9s9-4.029,9-9V8H22z'></path>\n </svg>\n )\n}\n","import React from 'react'\n\nimport { GoogleDriveBlock } from '@texonom/ntypes'\n\nimport { useNotionContext } from '../context'\nimport { cs } from '../utils'\nimport { GracefulImage } from './graceful-image'\n\nexport const GoogleDrive: React.FC<{\n block: GoogleDriveBlock\n className?: string\n}> = ({ block, className }) => {\n const { components, mapImageUrl } = useNotionContext()\n const properties = block.format?.drive_properties\n if (!properties) return null\n let domain\n\n try {\n const url = new URL(properties.url)\n domain = url.hostname\n } catch (err) {\n // ignore invalid urls for robustness\n }\n\n return (\n <div className={cs('notion-google-drive', className)}>\n <components.Link className='notion-google-drive-link' href={properties.url} target='_blank' rel='noopener noreferrer'>\n <div className='notion-google-drive-preview'>\n <GracefulImage\n src={mapImageUrl(properties.thumbnail, block)}\n alt={properties.title || 'Google Drive Document'}\n loading='lazy'\n />\n </div>\n\n <div className='notion-google-drive-body'>\n {properties.title && <div className='notion-google-drive-body-title'>{properties.title}</div>}\n\n {/* TODO: re-add last modified time with alternative to timeago.js */}\n {/* {properties.modified_time && (\n <div className='notion-google-drive-body-modified-time'>\n Last modified{' '}\n {properties.user_name ? `by ${properties.user_name} ` : ''}\n {timeago(properties.modified_time)}\n </div>\n )} */}\n\n {properties.icon && domain && (\n <div className='notion-google-drive-body-source'>\n {properties.icon && (\n <div\n className='notion-google-drive-body-source-icon'\n style={{\n backgroundImage: `url(${properties.icon})`\n }}\n />\n )}\n\n {domain && <div className='notion-google-drive-body-source-domain'>{domain}</div>}\n </div>\n )}\n </div>\n </components.Link>\n </div>\n )\n}\n","import React from 'react'\n\nimport throttle from 'lodash.throttle'\nimport { TableOfContentsEntry, uuidToId } from '@texonom/nutils'\n\nimport { cs } from '../utils'\n\nexport const PageAside: React.FC<{\n toc: Array<TableOfContentsEntry>\n activeSection: string | null\n setActiveSection: (activeSection: string | null) => unknown\n hasToc: boolean\n hasAside: boolean\n pageAside?: React.ReactNode\n className?: string\n}> = ({ toc, activeSection, setActiveSection, pageAside, hasToc, hasAside, className }) => {\n const throttleMs = 100\n const actionSectionScrollSpy = React.useMemo(\n () =>\n throttle(() => {\n const sections = document.getElementsByClassName('notion-h')\n\n let prevBBox: DOMRect = null\n let currentSectionId = activeSection\n\n for (let i = 0; i < sections.length; ++i) {\n const section = sections[i]\n if (!section || !(section instanceof Element)) continue\n\n if (!currentSectionId) currentSectionId = section.getAttribute('data-id')\n\n const bbox = section.getBoundingClientRect()\n const prevHeight = prevBBox ? bbox.top - prevBBox.bottom : 0\n const offset = Math.max(150, prevHeight / 4)\n\n // GetBoundingClientRect returns values relative to the viewport\n if (bbox.top - offset < 0) {\n currentSectionId = section.getAttribute('data-id')\n\n prevBBox = bbox\n continue\n }\n\n // No need to continue loop, if last element has been detected\n break\n }\n\n setActiveSection(currentSectionId)\n }, throttleMs),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // explicitly not taking a dependency on activeSection\n setActiveSection\n ]\n )\n\n React.useEffect(() => {\n if (!hasToc) return\n\n window.addEventListener('scroll', actionSectionScrollSpy)\n\n actionSectionScrollSpy()\n\n return () => {\n window.removeEventListener('scroll', actionSectionScrollSpy)\n }\n }, [hasToc, actionSectionScrollSpy])\n\n if (!hasAside) return null\n\n return (\n <aside className={cs('notion-aside', className)}>\n {hasToc && (\n <div className='notion-aside-table-of-contents'>\n <div className='notion-aside-table-of-contents-header'>Table of Contents</div>\n\n <nav className='notion-table-of-contents'>\n {toc.map(tocItem => {\n const id = uuidToId(tocItem.id)\n\n return (\n <a\n key={id}\n href={`#${id}`}\n className={cs(\n 'notion-table-of-contents-item',\n `notion-table-of-contents-item-indent-level-${tocItem.indentLevel}`,\n activeSection === id && 'notion-table-of-contents-active-item'\n )}>\n <span\n className='notion-table-of-contents-item-body'\n style={{\n display: 'inline-block',\n marginLeft: tocItem.indentLevel * 16\n }}>\n {tocItem.text}\n </span>\n </a>\n )\n })}\n </nav>\n </div>\n )}\n\n {pageAside}\n </aside>\n )\n}\n","import React from 'react'\n\nimport { NotionBlockRenderer } from '../renderer'\n\nimport type { Block as BlockType, SyncPointerBlock as SyncPointerBlockType } from '@texonom/ntypes'\n\nexport const SyncPointerBlock: React.FC<{\n block: BlockType\n level: number\n}> = ({ block, level }) => {\n if (!block) {\n if (process.env.NODE_ENV !== 'production') console.warn('missing sync pointer block', block.id)\n\n return null\n }\n\n const syncPointerBlock = block as SyncPointerBlockType\n const referencePointerId = syncPointerBlock?.format?.transclusion_reference_pointer?.id\n\n if (!referencePointerId) return null\n\n return <NotionBlockRenderer key={referencePointerId} level={level} blockId={referencePointerId} />\n}\n","import React from 'react'\n\nexport const LinkIcon = props => {\n const { className, ...rest } = props\n return (\n <svg className={className} {...rest} viewBox='0 0 16 16' width='16' height='16'>\n <path\n fillRule='evenodd'\n d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'\n />\n </svg>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,YAAW;AAElB,OAAO,gBAAgB;;;ACFvB,OAAOC,YAAW;AAElB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OACK;;;ACTP,OAAO,WAAW;AAOX,IAAM,QAGR,CAAC,EAAE,OAAO,UAAU,MAAM;AAV/B;AAWE,QAAM,EAAE,UAAU,IAAI,iBAAiB;AACvC,QAAM,SAAS,UAAU,YAAY,MAAM,EAAE,OAAK,uBAAM,eAAN,mBAAkB,WAAlB,mBAA2B,OAA3B,mBAAgC;AAElF,SACE,oCAAC,SAAI,WAAW,GAAG,gBAAgB,SAAS,KAC1C,oCAAC,WAAM,UAAQ,MAAC,SAAQ,QAAO,KAAK,QAAQ,CAC9C;AAEJ;;;ACnBA,OAAOC,YAAW;;;ACAlB,OAAOC,YAAW;AAEX,IAAM,WAAW,WAAS;AAC/B,QAA+B,YAAvB,YAHV,IAGiC,IAAT,iBAAS,IAAT,CAAd;AACR,SACE,gBAAAC,OAAA,cAAC,sCAAI,aAA0B,OAA9B,EAAoC,SAAQ,gBAC3C,gBAAAA,OAAA,cAAC,UAAK,GAAE,sOAAqO,CAC/O;AAEJ;;;ADAO,IAAM,OAGR,CAAC,EAAE,OAAO,UAAU,MAAM;AAZ/B;AAaE,QAAM,EAAE,YAAY,UAAU,IAAI,iBAAiB;AACnD,QAAM,SAAS,UAAU,YAAY,MAAM,EAAE,OAAK,uBAAM,eAAN,mBAAkB,WAAlB,mBAA2B,OAA3B,mBAAgC;AAElF,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,GAAG,eAAe,SAAS,KACzC,gBAAAA,OAAA,cAAC,WAAW,MAAX,EAAgB,WAAU,oBAAmB,MAAM,QAAQ,QAAO,UAAS,KAAI,yBAC9E,gBAAAA,OAAA,cAAC,YAAS,WAAU,oBAAmB,GAEvC,gBAAAA,OAAA,cAAC,SAAI,WAAU,sBACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,uBACb,gBAAAA,OAAA,cAAC,QAAK,SAAO,WAAM,eAAN,mBAAkB,UAAS,CAAC,CAAC,MAAM,CAAC,GAAG,OAAc,CACpE,KAEC,WAAM,eAAN,mBAAkB,SACjB,gBAAAA,OAAA,cAAC,SAAI,WAAU,sBACb,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,MAAM,OAAc,CACpD,CAEJ,CACF,CACF;AAEJ;;;AEnCA,OAAOC,YAAW;AAQX,IAAM,cAGR,CAAC,EAAE,OAAO,UAAU,MAAM;AAX/B;AAYE,QAAM,EAAE,YAAY,YAAY,IAAI,iBAAiB;AACrD,QAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,MAAI,CAAC;AAAY,WAAO;AACxB,MAAI;AAEJ,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,WAAW,GAAG;AAClC,aAAS,IAAI;AAAA,EACf,SAAS,KAAP;AAAA,EAEF;AAEA,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,GAAG,uBAAuB,SAAS,KACjD,gBAAAA,OAAA,cAAC,WAAW,MAAX,EAAgB,WAAU,4BAA2B,MAAM,WAAW,KAAK,QAAO,UAAS,KAAI,yBAC9F,gBAAAA,OAAA,cAAC,SAAI,WAAU,iCACb,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,YAAY,WAAW,WAAW,KAAK;AAAA,MAC5C,KAAK,WAAW,SAAS;AAAA,MACzB,SAAQ;AAAA;AAAA,EACV,CACF,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,8BACZ,WAAW,SAAS,gBAAAA,OAAA,cAAC,SAAI,WAAU,oCAAkC,WAAW,KAAM,GAWtF,WAAW,QAAQ,UAClB,gBAAAA,OAAA,cAAC,SAAI,WAAU,qCACZ,WAAW,QACV,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,iBAAiB,OAAO,WAAW;AAAA,MACrC;AAAA;AAAA,EACF,GAGD,UAAU,gBAAAA,OAAA,cAAC,SAAI,WAAU,4CAA0C,MAAO,CAC7E,CAEJ,CACF,CACF;AAEJ;;;AC/DA,oBAAqB;AAFrB,OAAOC,YAAW;AAGlB,SAA+B,gBAAgB;AAIxC,IAAM,YAQR,CAAC,EAAE,KAAK,eAAe,kBAAkB,WAAW,QAAQ,UAAU,UAAU,MAAM;AACzF,QAAM,aAAa;AACnB,QAAM,yBAAyBC,OAAM;AAAA,IACnC,UACE,cAAAC,SAAS,MAAM;AACb,YAAM,WAAW,SAAS,uBAAuB,UAAU;AAE3D,UAAI,WAAoB;AACxB,UAAI,mBAAmB;AAEvB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,cAAM,UAAU,SAAS,CAAC;AAC1B,YAAI,CAAC,WAAW,EAAE,mBAAmB;AAAU;AAE/C,YAAI,CAAC;AAAkB,6BAAmB,QAAQ,aAAa,SAAS;AAExE,cAAM,OAAO,QAAQ,sBAAsB;AAC3C,cAAM,aAAa,WAAW,KAAK,MAAM,SAAS,SAAS;AAC3D,cAAM,SAAS,KAAK,IAAI,KAAK,aAAa,CAAC;AAG3C,YAAI,KAAK,MAAM,SAAS,GAAG;AACzB,6BAAmB,QAAQ,aAAa,SAAS;AAEjD,qBAAW;AACX;AAAA,QACF;AAGA;AAAA,MACF;AAEA,uBAAiB,gBAAgB;AAAA,IACnC,GAAG,UAAU;AAAA;AAAA,IAEf;AAAA;AAAA,MAEE;AAAA,IACF;AAAA,EACF;AAEA,EAAAD,OAAM,UAAU,MAAM;AACpB,QAAI,CAAC;AAAQ;AAEb,WAAO,iBAAiB,UAAU,sBAAsB;AAExD,2BAAuB;AAEvB,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,sBAAsB;AAAA,IAC7D;AAAA,EACF,GAAG,CAAC,QAAQ,sBAAsB,CAAC;AAEnC,MAAI,CAAC;AAAU,WAAO;AAEtB,SACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,GAAG,gBAAgB,SAAS,KAC3C,UACC,gBAAAA,OAAA,cAAC,SAAI,WAAU,oCACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,2CAAwC,mBAAiB,GAExE,gBAAAA,OAAA,cAAC,SAAI,WAAU,8BACZ,IAAI,IAAI,aAAW;AAClB,UAAM,KAAK,SAAS,QAAQ,EAAE;AAE9B,WACE,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAM,IAAI;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA,8CAA8C,QAAQ;AAAA,UACtD,kBAAkB,MAAM;AAAA,QAC1B;AAAA;AAAA,MACA,gBAAAA,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,SAAS;AAAA,YACT,YAAY,QAAQ,cAAc;AAAA,UACpC;AAAA;AAAA,QACC,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,EAEJ,CAAC,CACH,CACF,GAGD,SACH;AAEJ;;;AC3GA,OAAOE,YAAW;AAMX,IAAM,mBAGR,CAAC,EAAE,OAAO,MAAM,MAAM;AAT3B;AAUE,MAAI,CAAC,OAAO;AACV,QAAI;AAAuC,cAAQ,KAAK,8BAA8B,MAAM,EAAE;AAE9F,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB;AACzB,QAAM,sBAAqB,gEAAkB,WAAlB,mBAA0B,mCAA1B,mBAA0D;AAErF,MAAI,CAAC;AAAoB,WAAO;AAEhC,SAAO,gBAAAC,OAAA,cAAC,uBAAoB,KAAK,oBAAoB,OAAc,SAAS,oBAAoB;AAClG;;;ACtBA,OAAOC,YAAW;AAEX,IAAM,WAAW,WAAS;AAC/B,QAA+B,YAAvB,YAHV,IAGiC,IAAT,iBAAS,IAAT,CAAd;AACR,SACE,gBAAAC,OAAA,cAAC,sCAAI,aAA0B,OAA9B,EAAoC,SAAQ,aAAY,OAAM,MAAK,QAAO,SACzE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,GAAE;AAAA;AAAA,EACJ,CACF;AAEJ;;;AP8CA,IAAM,sBAEF,CAAC;AAEL,IAAM,sBAA8C,CAAC;AAE9C,IAAM,QAA8B,WAAS;AAhEpD;AAiEE,QAAM,MAAM,iBAAiB;AAC7B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,CAAC,eAAe,gBAAgB,IAAIC,OAAM,SAAS,IAAI;AAE7D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,CAAC;AAAO,WAAO;AAInB,MAAI,UAAU,KAAK,MAAM,SAAS,mBAAmB;AACnD;AAAC,IAAC,MAAc,OAAO;AAAA,EACzB;AAEA,QAAM,UAAU,cAAc,iBAAiB,gBAAgBC,UAAS,MAAM,EAAE;AAEhF,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AAAA,IAEL,KAAK;AACH,UAAI,UAAU,GAAG;AACf,cAAM;AAAA,UACJ,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,sBAAsB;AAAA,UACtB;AAAA,UACA;AAAA,QACF,IAAI,MAAM,UAAU,CAAC;AAErB,YAAI,UAAU;AACZ,gBAAM,aACJ,MAAM,SAAS,SACX,MAAM,aACN;AAAA,YACE,QAAO,qBAAU,WAAW,qBAAqB,OAAO,SAAS,CAAC,MAA3D,mBAA8D,UAA9D,mBAAqE;AAAA,UAC9E;AAEN,gBAAM,iBAAiB,KAAK,uBAAuB,QAAQ;AAC3D,gBAAM,0BAA0B,UAAU;AAC1C,cAAI,iBAAiB,oBAAoB,uBAAuB;AAChE,cAAI,CAAC;AACH,6BAAiB,oBAAoB,uBAAuB,IAAI;AAAA,cAC9D,gBAAgB;AAAA,YAClB;AAEF,gBAAM,YAAW,kBAAa,OAAO,SAAS,MAA7B,YAAkC;AACnD,gBAAM,gBAAgB,YAAY,MAAM,QAAQ;AAEhD,gBAAM,MAAM,uBAAuB,OAAoB,SAAS;AAEhE,gBAAM,SAAS,uBAAuB,IAAI,UAAU;AACpD,gBAAM,YAAY,UAAU,cAAc,CAAC;AAC3C,gBAAM,eAAe,aAAa;AAElC,iBACE,gBAAAD,OAAA,cAAC,SAAI,WAAW,GAAG,UAAU,cAAc,WAAW,SAAS,SAAS,SAAS,SAAS,KACxF,gBAAAA,OAAA,cAAC,SAAI,WAAU,mBAAkB,GAEjC,gBAAAA,OAAA,cAAC,SAAI,WAAU,kBACZ,CAAC,iBAAiB,gBAAAA,OAAA,cAAC,WAAW,QAAX,EAAkB,OAAc,GACnD,QAED,gBAAAA,OAAA,cAAC,SAAI,WAAU,0BACZ,iBACE,YACC,YAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,+BACb,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,YAAY,YAAY,KAAK;AAAA,cAClC,KAAK,eAAe,yCAAY,KAAK;AAAA,cACrC,UAAU;AAAA,cACV,WAAU;AAAA,cACV,OAAO;AAAA;AAAA,UACT,CACF,IAGJ,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,eAAe,0BAA0B;AAAA,gBACzC,YAAY,yBAAyB;AAAA,gBACrC,gBAAgB,+BAA+B;AAAA,gBAC/C;AAAA,gBACA,mBAAmB;AAAA,gBACnB,mBAAmB;AAAA,gBACnB;AAAA,cACF;AAAA;AAAA,YACC,aAAa,gBAAAA,OAAA,cAAC,YAAS,OAAc,aAAa,iBAAiB,QAAQ,OAAO;AAAA,YAElF;AAAA,YAED,gBAAAA,OAAA,cAAC,QAAG,WAAU,kBAAgB,gCAAa,gBAAAA,OAAA,cAAC,QAAK,OAAO,yCAAY,OAAO,OAAc,CAAG;AAAA,aAE1F,MAAM,SAAS,0BACd,MAAM,SAAS,UAAU,MAAM,iBAAiB,iBACjD,gBAAAA,OAAA,cAAC,WAAW,YAAX,EAAsB,OAAc,KAAU;AAAA,YAGhD,MAAM,SAAS,0BACd,gBAAAA,OAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,YAAY;AAAA,kBACZ,UAAU;AAAA,gBACZ;AAAA;AAAA,cACA,gBAAAA,OAAA,cAAC,aAAQ,WAAU,+BAA6B,QAAS;AAAA,cAExD,YACC,gBAAAA,OAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,cACF;AAAA,YAEJ;AAAA,YAGD;AAAA,UACH,GAEC,MACH,CACF,CACF;AAAA,QAEJ,OAAO;AACL,iBACE,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,WAAW,SAAS;AAAA,gBACpB;AAAA,gBACA,mBAAmB;AAAA,gBACnB,mBAAmB;AAAA,gBACnB;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA,YACA,gBAAAA,OAAA,cAAC,SAAI,WAAU,mBAAkB;AAAA,YAEhC;AAAA,aAEC,MAAM,SAAS,0BAA2B,MAAM,SAAS,UAAU,MAAM,iBAAiB,iBAC1F,gBAAAA,OAAA,cAAC,WAAW,YAAX,EAAsB,OAAc,KAAU;AAAA,YAGhD,MAAM,SAAS,0BAA0B;AAAA,YAEzC;AAAA,UACH;AAAA,QAEJ;AAAA,MACF,OAAO;AACL,cAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,eACE,gBAAAA,OAAA;AAAA,UAAC,WAAW;AAAA,UAAX;AAAA,YACC,WAAW,GAAG,oBAAoB,cAAc,UAAU,cAAc,OAAO;AAAA,YAC/E,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,UACzB,gBAAAA,OAAA,cAAC,aAAU,OAAc;AAAA,QAC3B;AAAA,MAEJ;AAAA,IAEF,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK,kBAAkB;AACrB,UAAI,CAAC,MAAM;AAAY,eAAO;AAE9B,YAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,YAAM,KAAKC,UAAS,MAAM,EAAE;AAC5B,YAAM,QAAQ,eAAe,MAAM,WAAW,KAAK,KAAK,iBAAiB;AAGzE,UAAI,cAAc,oBAAoB,MAAM,EAAE;AAC9C,UAAI;AAEJ,UAAI,gBAAgB,QAAW;AAC7B,cAAM,OAAO,mBAAmB,OAAO,SAAS;AAEhD,YAAI,MAAM;AACR,gBAAM,MAAM,uBAAuB,MAAM,SAAS;AAClD,gBAAM,UAAU,IAAI,KAAK,CAAAC,aAAWA,SAAQ,OAAO,MAAM,EAAE;AAE3D,cAAI,SAAS;AACX,0BAAc,QAAQ;AACtB,gCAAoB,MAAM,EAAE,IAAI;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,gBAAgB;AAAW,2BAAmB,mBAAmB;AAErE,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAE5B,YAAM,eAAe;AAAA,QACnB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,cAAc,UAAU;AAAA,QACxB;AAAA,QACA;AAAA,MACF;AAEA,YAAM,cACJ,gBAAAF,OAAA,cAAC,cACC,gBAAAA,OAAA,cAAC,SAAI,IAAQ,WAAU,wBAAuB,GAC7C,GAAC,WAAM,WAAN,mBAAc,eACd,gBAAAA,OAAA,cAAC,OAAE,WAAU,oBAAmB,MAAM,IAAI,MAAM,SAC9C,gBAAAA,OAAA,cAAC,cAAS,CACZ,GAGF,gBAAAA,OAAA,cAAC,UAAK,WAAU,oBACd,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,CACF;AAEF,UAAI,cAAc;AAGlB,UAAI;AACF,sBACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,cAAc,WAAS,MACnC,WACH;AAAA,eAEK;AACP,sBACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,cAAc,WAAS,MACnC,WACH;AAAA;AAGF,sBACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,cAAc,WAAS,MACnC,WACH;AAGJ,WAAI,WAAM,WAAN,mBAAc;AAChB,eACE,gBAAAA,OAAA,cAAC,aAAQ,WAAW,GAAG,iBAAiB,OAAO,KAC7C,gBAAAA,OAAA,cAAC,iBAAS,WAAY,GACtB,gBAAAA,OAAA,cAAC,aAAK,QAAS,CACjB;AAAA;AAEC,eAAO;AAAA,IACd;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,QAAG,WAAW,GAAG,aAAa,OAAO,GAAG;AAAA,IAElD,KAAK,QAAQ;AACX,UAAI,CAAC,MAAM,cAAc,GAAC,WAAM,YAAN,mBAAe;AAAQ,eAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,gBAAgB,OAAO,KAAG,MAAM;AAE3G,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,eAAe,cAAc,UAAU,cAAc,OAAO,OAC5E,WAAM,eAAN,mBAAkB,UAAS,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,GAE9E,YAAY,gBAAAA,OAAA,cAAC,SAAI,WAAU,0BAAwB,QAAS,CAC/D;AAAA,IAEJ;AAAA,IAEA,KAAK;AAAA,IAEL,KAAK,iBAAiB;AACpB,YAAM,WAAW,CAAC,SAA0BG,WAC1C,MAAM,SAAS,kBACb,gBAAAH,OAAA,cAAC,QAAG,WAAW,GAAG,eAAe,oBAAoB,OAAO,KAAI,OAAQ,IAExE,gBAAAA,OAAA,cAAC,QAAG,OAAOG,QAAO,WAAW,GAAG,eAAe,wBAAwB,OAAO,KAC3E,OACH;AAGJ,UAAI,SAA6B;AAEjC,UAAI,MAAM;AACR,iBACE,gBAAAH,OAAA,cAAAA,OAAA,gBACG,MAAM,cACL,gBAAAA,OAAA,cAAC,YACC,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,GAED,SAAS,QAAQ,CACpB;AAAA;AAGF,iBAAS,MAAM,aACb,gBAAAA,OAAA,cAAC,YACC,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,IACE;AAEN,YAAM,aAAa,MAAM,WAAS,qBAAU,MAAM,MAAM,SAAS,MAA/B,mBAAkC,UAAlC,mBAAyC;AAC3E,YAAM,QAAQ,cAAc,MAAM,IAAI,UAAU,KAAK;AAErD,aAAO,aAAa,SAAS,QAAQ,KAAK,IAAI;AAAA,IAChD;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,OAAX,EAAiB,SAAkB,OAAc;AAAA,IAC3D,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,gBAAa,SAAkB,OAAc;AAAA,IAEvD,KAAK,SAAS;AACZ,YAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,UAAI,CAAC;AACH,aAAI,WAAM,WAAN,mBAAc;AAEhB,iBAAO,gBAAAA,OAAA,cAAC,gBAAa,SAAkB,OAAc;AAAA;AAEzD,aAAO,gBAAAA,OAAA,cAAC,eAAY,OAAkC,WAAW,SAAS;AAAA,IAC5E;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,SAAM,OAA4B,WAAW,SAAS;AAAA,IAEhE,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,QAAK,OAA2B,WAAW,SAAS;AAAA,IAE9D,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,OAA+B,QAAQ,OAAO,WAAW,SAAS;AAAA,IAEhG,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,MAAX,EAAgB,OAA2B;AAAA,IAErD,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,cAAc,OAAO,KAAI,QAAS;AAAA,IAE9D,KAAK,UAAU;AAEb,YAAM,cAAc;AACpB,YAAM,UAAQ,WAAM,WAAN,mBAAc,iBAAgB;AAC5C,YAAM,UAAS,eAAU,MAAM,MAAM,SAAS,MAA/B,mBAAkC;AACjD,YAAM,YAAU,sCAAQ,YAAR,mBAAiB,WAAU,KAAK,IAAI,GAAG,KAAK,KAAK,IAAM,KAAK,CAAC;AAE7E,YAAM,QAAQ,iBAAiB,UAAU,OAAO,mBAAmB;AACnE,YAAM,QAAQ,EAAE,MAAM;AAEtB,aACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,iBAAiB,OAAO,GAAG,SAC3C,QACH,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,iBAAgB,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK,SAAS;AACZ,UAAI,CAAC,MAAM;AAAY,eAAO;AAE9B,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,gBAAW,WAAW,GAAG,gBAAgB,cAAc,UAAU,cAAc,OAAO,KACrF,gBAAAA,OAAA,cAAC,aACC,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,GACC,QACH;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,YAAX,EAAsB,OAAc,WAAW,SAAS,KAAU;AAAA,IAE5E,KAAK;AACH,UAAI,WAAW;AAAS,eAAO,gBAAAA,OAAA,cAAC,WAAW,SAAX,EAAmB,OAAc,WAAW,SAAS;AAAA;AAEnF,eACE,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,oBAAkB,WAAM,WAAN,mBAAc,gBAAe,WAAU,WAAM,WAAN,mBAAc,kBAAkB,OAAO;AAAA;AAAA,UAC9G,gBAAAA,OAAA,cAAC,YAAS,OAAc;AAAA,UAExB,gBAAAA,OAAA,cAAC,SAAI,WAAU,yBACb,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,OAAO,OAAc,GACnD,QACH;AAAA,QACF;AAAA,IAGN,KAAK,YAAY;AACf,UAAI,CAAC,MAAM;AAAY,eAAO;AAE9B,YAAM,OAAO,MAAM,WAAW;AAC9B,UAAI,CAAC,QAAQ,GAAC,UAAK,CAAC,MAAN,mBAAU;AAAI,eAAO;AAEnC,UAAI,QAAQ,eAAe,MAAM,WAAW,KAAK;AACjD,UAAI,CAAC;AAAO,gBAAQ,eAAe,IAAI;AAEvC,UAAI;AACF,YAAI,MAAM,WAAW,MAAM;AACzB,cAAI;AACF,kBAAM,MAAM,IAAI,IAAI,KAAK;AACzB,oBAAQ,IAAI;AAAA,UACd,SAAS,KAAP;AAAA,UAEF;AAAA;AAEJ,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAU,gBACb,gBAAAA,OAAA;AAAA,QAAC,WAAW;AAAA,QAAX;AAAA,UACC,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAW,GAAG,qBAAmB,WAAM,WAAN,mBAAc,gBAAe,UAAU,MAAM,OAAO,eAAe,OAAO;AAAA,UAC3G,MAAM,KAAK,CAAC,EAAE,CAAC;AAAA;AAAA,QACf,gBAAAA,OAAA,cAAC,aACE,SACC,gBAAAA,OAAA,cAAC,SAAI,WAAU,2BACb,gBAAAA,OAAA,cAAC,QAAK,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,OAAc,CACxC,KAGD,WAAM,eAAN,mBAAkB,gBACjB,gBAAAA,OAAA,cAAC,SAAI,WAAU,iCACb,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,aAAa,OAAc,CAC5D,GAGF,gBAAAA,OAAA,cAAC,SAAI,WAAU,4BACZ,WAAM,WAAN,mBAAc,kBACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,+BACb,gBAAAA,OAAA,cAAC,aAAU,KAAK,aAAY,WAAM,WAAN,mBAAc,eAAe,KAAK,GAAG,KAAK,OAAO,CAC/E,GAGF,gBAAAA,OAAA,cAAC,SAAI,WAAU,+BACb,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,OAAc,CACnC,CACF,CACF;AAAA,UAEC,WAAM,WAAN,mBAAc,mBACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,2BACb,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,aAAY,WAAM,WAAN,mBAAc,gBAAgB,KAAK;AAAA,YACpD,KAAK,gBAAe,WAAM,eAAN,mBAAkB,KAAK;AAAA,YAC3C,OAAO;AAAA,cACL,WAAW;AAAA,YACb;AAAA;AAAA,QACF,CACF;AAAA,MAEJ,CACF;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE,gBAAAA,OAAA,cAAC,aAAQ,WAAW,GAAG,iBAAiB,OAAO,KAC7C,gBAAAA,OAAA,cAAC,iBACC,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,OAAO,OAAc,CACtD,GAEA,gBAAAA,OAAA,cAAC,aAAK,QAAS,CACjB;AAAA,IAGJ,KAAK,qBAAqB;AACxB,YAAM,OAAO,mBAAmB,OAAO,SAAS;AAChD,UAAI,CAAC;AAAM,eAAO;AAElB,YAAM,MAAM,uBAAuB,MAAM,SAAS;AAClD,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,4BAA4B,cAAc,UAAU,cAAc,OAAO,KACzF,IAAI,IAAI,aACP,gBAAAA,OAAA,cAAC,OAAE,KAAK,QAAQ,IAAI,MAAM,IAAIC,UAAS,QAAQ,EAAE,KAAK,WAAU,mCAC9D,gBAAAD,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,SAAS;AAAA,YACT,YAAY,QAAQ,cAAc;AAAA,UACpC;AAAA;AAAA,QACC,QAAQ;AAAA,MACX,CACF,CACD,CACH;AAAA,IAEJ;AAAA,IAEA,KAAK,SAAS;AACZ,YAAM,cAAY,uBAAM,eAAN,mBAAkB,YAAlB,mBAA4B,OAA5B,mBAAiC,QAAO;AAE1D,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,gBAAgB,OAAO,KACxC,gBAAAA,OAAA,cAAC,SAAI,WAAU,uBACb,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,SAAkB,WAAsB,GAE7D,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,qBAAqB,aAAa,sBAAsB,KACzE,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,OAAO,OAAc,CACtD,CACF,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,2BAAyB,QAAS,CACnD;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,qBAAqB,OAAO,KAAI,QAAS;AAAA,IAErE,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,mCAAiB,OAAc,OAAO,QAAQ,KAAO,MAAO;AAAA,IAEtE,KAAK,SAAS;AACZ,YAAM,kBAAiB,0CAAO,WAAP,mBAAe,kBAAf,mBAA8B;AACrD,YAAM,eAAc,eAAU,MAAM,cAAc,MAA9B,mBAAiC;AACrD,UAAI,CAAC,aAAa;AAChB,gBAAQ,MAAM,yBAAyB,cAAc;AACrD,eAAO;AAAA,MACT;AAEA,aACE,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,WAAW,GAAG,oBAAoB,cAAc,GAAG,MAAM,WAAW,cAAc,KACrG,gBAAAA,OAAA,cAAC,aAAU,OAAO,aAAa,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,GAAG,uBAAuB,OAAO,KACjD,gBAAAA,OAAA,cAAC,eAAO,QAAS,CACnB;AAAA,IAGJ,KAAK,aAAa;AAChB,YAAM,cAAa,eAAU,MAAM,MAAM,SAAS,MAA/B,mBAAkC;AACrD,YAAM,SAAQ,gBAAW,WAAX,mBAAmB;AACjC,YAAM,aAAY,gBAAW,WAAX,mBAAmB;AACrC,YAAM,mBAAkB,WAAM,WAAN,mBAAc;AAEtC,UAAI,CAAC,cAAc,CAAC;AAAO,eAAO;AAElC,aACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,GAAG,2BAA2B,mBAAmB,UAAU,mBAAmB,OAAO,KACjG,MAAM,IAAI,YAAU;AA5pB/B,YAAAI,KAAAC,KAAAC;AA6pBY,cAAM,SAAQF,MAAA,uCAAY,YAAZ,gBAAAA,IAAqB;AAEnC,eACE,gBAAAJ,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW,QAAQ,UAAU,UAAU;AAAA,YACvC,OAAO;AAAA,cACL,SAAOK,MAAA,uCAAY,YAAZ,gBAAAA,IAAqB,UAAS;AAAA,YACvC;AAAA;AAAA,UACA,gBAAAL,OAAA,cAAC,SAAI,WAAU,8BACb,gBAAAA,OAAA,cAAC,QAAK,SAAOM,MAAA,MAAM,eAAN,gBAAAA,IAAmB,YAAW,CAAC,CAAC,QAAG,CAAC,GAAG,OAAc,CACpE;AAAA,QACF;AAAA,MAEJ,CAAC,CACH;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAN,OAAA,cAAC,OAAI,OAAc,WAAW,SAAS;AAAA,IAEhD;AACE,UAAI;AACF,gBAAQ,MAAM,sBAAuB,MAAc,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAEzF,aAAO,gBAAAA,OAAA,cAAC,WAAI;AAAA,EAChB;AAEA,SAAO;AACT;;;ADlrBO,IAAM,iBA8CR,CAAC,OAwBA;AAxBA,eACJ;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EA7EF,IAuDM,IAuBD,iBAvBC,IAuBD;AAAA,IAtBH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,OAAOO,OAAM;AAAA,IACjB,MACE,OAAO,WAAW,eAClB,WAAW;AAAA,MACT,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,QAAQ,oBAAoB;AAAA,IAC9B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,kBAAkB,OAAO;AAAA;AAAA,IAC/B,gBAAAA,OAAA,cAAC,wCAAwB,KAAM;AAAA,EACjC;AAEJ;AAEO,IAAM,sBAUR,CAAC,OAAqC;AAArC,eAAE,UAAQ,GAAG,QAlInB,IAkIM,IAAyB,kBAAzB,IAAyB,CAAvB,SAAW;AAlInB,MAAAC,KAAAC;AAmIE,QAAM,EAAE,UAAU,IAAI,iBAAiB;AACvC,QAAM,KAAK,WAAW,OAAO,KAAK,UAAU,KAAK,EAAE,CAAC;AACpD,QAAM,SAAQD,MAAA,UAAU,MAAM,EAAE,MAAlB,gBAAAA,IAAqB;AAEnC,MAAI,CAAC,OAAO;AACV,QAAI;AAAuC,cAAQ,KAAK,iBAAiB,OAAO;AAEhF,WAAO;AAAA,EACT;AAEA,SACE,gBAAAD,OAAA,cAAC,wBAAM,KAAK,IAAI,OAAc,SAAkB,SAC7CE,MAAA,+BAAO,YAAP,gBAAAA,IAAgB,IAAI,oBACnB,gBAAAF,OAAA,cAAC,sCAAoB,KAAK,gBAAgB,SAAS,gBAAgB,OAAO,QAAQ,KAAO,MAAO,EAEpG;AAEJ;AAEA,SAAS,sBAAsB;AAC7B,QAAM,QAAQ,OAAO;AAErB,MAAI,QAAQ;AAAK,WAAO;AAAA,WACf,QAAQ;AAAK,WAAO;AAAA,WACpB,QAAQ;AAAM,WAAO;AAAA,WACrB,QAAQ;AAAM,WAAO;AAAA,WACrB,QAAQ;AAAM,WAAO;AAAA;AACzB,WAAO;AACd;","names":["React","React","uuidToId","React","React","React","React","React","React","React","React","throttle","React","React","React","React","React","uuidToId","tocItem","start","_a","_b","_c","React","_a","_b"]}
1
+ {"version":3,"sources":["../../src/renderer.tsx","../../src/block.tsx","../../src/components/audio.tsx","../../src/components/file.tsx","../../src/icons/file-icon.tsx","../../src/components/google-drive.tsx","../../src/components/page-aside.tsx","../../src/components/sync-pointer-block.tsx","../../src/icons/link-icon.tsx"],"sourcesContent":["import React from 'react'\n\nimport mediumZoom from '@fisch0920/medium-zoom'\nimport type { ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { Block } from './block'\nimport { NotionContextProvider, useNotionContext } from './context'\nimport { MapImageUrlFn, MapPageUrlFn, NotionComponents, SearchNotionFn } from './types'\n\nexport const NotionRenderer: React.FC<{\n recordMap: ExtendedRecordMap\n components?: Partial<NotionComponents>\n\n mapPageUrl?: MapPageUrlFn\n mapImageUrl?: MapImageUrlFn\n searchNotion?: SearchNotionFn\n isShowingSearch?: boolean\n onHideSearch?: () => void\n\n rootPageId?: string\n rootDomain?: string\n\n // set fullPage to false to render page content only\n // this will remove the header, cover image, and footer\n fullPage?: boolean\n\n darkMode?: boolean\n previewImages?: boolean\n forceCustomImages?: boolean\n showCollectionViewDropdown?: boolean\n linkTableTitleProperties?: boolean\n isLinkCollectionToUrlProperty?: boolean\n isImageZoomable?: boolean\n\n showTableOfContents?: boolean\n minTableOfContentsItems?: number\n\n defaultPageIcon?: string\n defaultPageCover?: string\n defaultPageCoverPosition?: number\n\n className?: string\n bodyClassName?: string\n\n header?: React.ReactNode\n footer?: React.ReactNode\n pageHeader?: React.ReactNode\n pageFooter?: React.ReactNode\n pageTitle?: React.ReactNode\n pageAside?: React.ReactNode\n pageCover?: React.ReactNode\n\n blockId?: string\n hideBlockId?: boolean\n disableHeader?: boolean\n}> = ({\n components,\n recordMap,\n mapPageUrl,\n mapImageUrl,\n searchNotion,\n isShowingSearch,\n onHideSearch,\n fullPage,\n rootPageId,\n rootDomain,\n darkMode,\n previewImages,\n forceCustomImages,\n showCollectionViewDropdown,\n linkTableTitleProperties,\n isLinkCollectionToUrlProperty,\n isImageZoomable = true,\n showTableOfContents,\n minTableOfContentsItems,\n defaultPageIcon,\n defaultPageCover,\n defaultPageCoverPosition,\n ...rest\n}) => {\n const zoom = React.useMemo(\n () =>\n typeof window !== 'undefined' &&\n mediumZoom({\n background: 'rgba(0, 0, 0, 0.8)',\n minZoomScale: 2.0,\n margin: getMediumZoomMargin()\n }),\n []\n )\n\n return (\n <NotionContextProvider\n components={components}\n recordMap={recordMap}\n mapPageUrl={mapPageUrl}\n mapImageUrl={mapImageUrl}\n searchNotion={searchNotion}\n isShowingSearch={isShowingSearch}\n onHideSearch={onHideSearch}\n fullPage={fullPage}\n rootPageId={rootPageId}\n rootDomain={rootDomain}\n darkMode={darkMode}\n previewImages={previewImages}\n forceCustomImages={forceCustomImages}\n showCollectionViewDropdown={showCollectionViewDropdown}\n linkTableTitleProperties={linkTableTitleProperties}\n isLinkCollectionToUrlProperty={isLinkCollectionToUrlProperty}\n showTableOfContents={showTableOfContents}\n minTableOfContentsItems={minTableOfContentsItems}\n defaultPageIcon={defaultPageIcon}\n defaultPageCover={defaultPageCover}\n defaultPageCoverPosition={defaultPageCoverPosition}\n zoom={isImageZoomable ? zoom : null}>\n <NotionBlockRenderer {...rest} />\n </NotionContextProvider>\n )\n}\n\nexport const NotionBlockRenderer: React.FC<{\n className?: string\n bodyClassName?: string\n header?: React.ReactNode\n footer?: React.ReactNode\n disableHeader?: boolean\n\n blockId?: string\n hideBlockId?: boolean\n level?: number\n}> = ({ level = 0, blockId, ...props }) => {\n const { recordMap } = useNotionContext()\n const id = blockId || Object.keys(recordMap.block)[0]\n const block = recordMap.block[id]?.value\n\n if (!block) {\n if (process.env.NODE_ENV !== 'production') console.warn('missing block', blockId)\n\n return null\n }\n\n return (\n <Block key={id} level={level} block={block} {...props}>\n {block?.content?.map(contentBlockId => (\n <NotionBlockRenderer key={contentBlockId} blockId={contentBlockId} level={level + 1} {...props} />\n ))}\n </Block>\n )\n}\n\nfunction getMediumZoomMargin() {\n const width = window.innerWidth\n\n if (width < 500) return 8\n else if (width < 800) return 20\n else if (width < 1280) return 30\n else if (width < 1600) return 40\n else if (width < 1920) return 48\n else return 72\n}\n","import React from 'react'\n\nimport {\n getBlockCollectionId,\n getBlockIcon,\n getBlockParentPage,\n getPageTableOfContents,\n getTextContent,\n uuidToId\n} from '@texonom/nutils'\n\nimport { AssetWrapper } from './components/asset-wrapper'\nimport { Audio } from './components/audio'\nimport { EOI } from './components/eoi'\nimport { File } from './components/file'\nimport { GoogleDrive } from './components/google-drive'\nimport { LazyImage } from './components/lazy-image'\nimport { PageAside } from './components/page-aside'\nimport { PageIcon } from './components/page-icon'\nimport { PageTitle } from './components/page-title'\nimport { SyncPointerBlock } from './components/sync-pointer-block'\nimport { Text } from './components/text'\nimport { useNotionContext } from './context'\nimport { LinkIcon } from './icons/link-icon'\nimport { getListNumber, isUrl } from './utils'\n\nimport type {\n Block as BlockType,\n PageBlock,\n GoogleDriveBlock,\n AudioBlock,\n FileBlock,\n EquationBlock,\n CollectionViewPageBlock,\n CodeBlock,\n TableBlock\n} from '@texonom/ntypes'\ninterface BlockProps {\n block: BlockType\n level: number\n\n className?: string\n bodyClassName?: string\n\n header?: React.ReactNode\n footer?: React.ReactNode\n pageHeader?: React.ReactNode\n pageFooter?: React.ReactNode\n pageTitle?: React.ReactNode\n pageAside?: React.ReactNode\n pageCover?: React.ReactNode\n\n hideBlockId?: boolean\n disableHeader?: boolean\n\n children?: React.ReactNode\n}\n\n// TODO: use react state instead of a global for this\nconst tocIndentLevelCache: {\n [blockId: string]: number\n} = {}\n\nconst pageCoverStyleCache: Record<string, object> = {}\n\nexport const Block: React.FC<BlockProps> = props => {\n const ctx = useNotionContext()\n const {\n components,\n fullPage,\n darkMode,\n recordMap,\n mapPageUrl,\n mapImageUrl,\n showTableOfContents,\n minTableOfContentsItems,\n defaultPageIcon,\n defaultPageCover,\n defaultPageCoverPosition\n } = ctx\n\n const [activeSection, setActiveSection] = React.useState(null)\n\n const {\n block,\n children,\n level,\n className,\n bodyClassName,\n header,\n footer,\n pageHeader,\n pageFooter,\n pageTitle,\n pageAside,\n pageCover,\n hideBlockId,\n disableHeader\n } = props\n\n if (!block) return null\n\n // ugly hack to make viewing raw collection views work properly\n // e.g., 6d886ca87ab94c21a16e3b82b43a57fb\n if (level === 0 && block.type === 'collection_view') {\n const view_block = block as unknown as CollectionViewPageBlock\n view_block.type = 'collection_view_page'\n }\n\n const blockId = hideBlockId ? 'notion-block' : `notion-block-${uuidToId(block.id)}`\n\n switch (block.type) {\n case 'collection_view_page':\n // fallthrough\n case 'page':\n if (level === 0) {\n const {\n page_icon = defaultPageIcon,\n page_cover = defaultPageCover,\n page_cover_position = defaultPageCoverPosition,\n page_full_width,\n page_small_text\n } = block.format || {}\n\n if (fullPage) {\n const properties =\n block.type === 'page'\n ? block.properties\n : {\n title: recordMap.collection[getBlockCollectionId(block, recordMap)]?.value?.name\n }\n\n const coverPosition = (1 - (page_cover_position || 0.5)) * 100\n const pageCoverObjectPosition = `center ${coverPosition}%`\n let pageCoverStyle = pageCoverStyleCache[pageCoverObjectPosition]\n if (!pageCoverStyle)\n pageCoverStyle = pageCoverStyleCache[pageCoverObjectPosition] = {\n objectPosition: pageCoverObjectPosition\n }\n\n const pageIcon = getBlockIcon(block, recordMap) ?? defaultPageIcon\n const isPageIconUrl = pageIcon && isUrl(pageIcon)\n\n const toc = getPageTableOfContents(block as PageBlock, recordMap)\n\n const hasToc = showTableOfContents && toc.length >= minTableOfContentsItems\n const hasAside = (hasToc || pageAside) && !page_full_width\n const hasPageCover = pageCover || page_cover\n\n return (\n <div className={`notion notion-app ${darkMode ? 'dark' : 'light'} ${blockId} ${className || ''}`}>\n <div className='notion-viewport' />\n\n <div className='notion-frame'>\n {!disableHeader && <components.Header block={block} />}\n {header}\n\n <div className='notion-page-scroller'>\n {hasPageCover &&\n (pageCover ? (\n pageCover\n ) : (\n <div className='notion-page-cover-wrapper'>\n <LazyImage\n src={mapImageUrl(page_cover, block)}\n alt={getTextContent(properties?.title)}\n priority={true}\n className='notion-page-cover'\n style={pageCoverStyle}\n />\n </div>\n ))}\n\n <main\n className={`notion-page\n ${hasPageCover ? 'notion-page-has-cover' : 'notion-page-no-cover'}\n ${page_icon ? 'notion-page-has-icon' : 'notion-page-no-icon'}\n ${isPageIconUrl ? 'notion-page-has-image-icon' : 'notion-page-has-text-icon'}\n notion-full-page\n ${page_full_width && 'notion-full-width'}\n ${page_small_text && 'notion-small-text'}\n ${bodyClassName}`}>\n {page_icon && <PageIcon block={block} defaultIcon={defaultPageIcon} inline={false} />}\n\n {pageHeader}\n\n <h1 className='notion-title'>{pageTitle ?? <Text value={properties?.title} block={block} />}</h1>\n\n {(block.type === 'collection_view_page' ||\n (block.type === 'page' && block.parent_table === 'collection')) && (\n <components.Collection block={block} ctx={ctx} />\n )}\n\n {block.type !== 'collection_view_page' && (\n <div\n className={`notion-page-content\n ${hasAside && 'notion-page-content-has-aside'}\n ${hasToc && 'notion-page-content-has-toc'}`}>\n <article className='notion-page-content-inner'>{children}</article>\n\n {hasAside && (\n <PageAside\n toc={toc}\n activeSection={activeSection}\n setActiveSection={setActiveSection}\n hasToc={hasToc}\n hasAside={hasAside}\n pageAside={pageAside}\n />\n )}\n </div>\n )}\n\n {pageFooter}\n </main>\n\n {footer}\n </div>\n </div>\n </div>\n )\n } else {\n return (\n <main\n className={`notion\n ${darkMode ? 'dark' : 'light'},\n notion-page\n ${page_full_width && 'notion-full-width'}\n ${page_small_text && 'notion-small-text'}\n ${blockId}\n ${className || ''}\n ${bodyClassName}`}>\n <div className='notion-viewport' />\n\n {pageHeader}\n\n {(block.type === 'collection_view_page' || (block.type === 'page' && block.parent_table === 'collection')) && (\n <components.Collection block={block} ctx={ctx} />\n )}\n\n {block.type !== 'collection_view_page' && children}\n\n {pageFooter}\n </main>\n )\n }\n } else {\n const blockColor = block.format?.block_color\n\n return (\n <components.PageLink\n className={`notion-page-link ${blockColor && `notion-${blockColor}`} ${blockId}`}\n href={mapPageUrl(block.id)}>\n <PageTitle block={block} />\n </components.PageLink>\n )\n }\n\n case 'header':\n // fallthrough\n case 'sub_header':\n // fallthrough\n case 'sub_sub_header': {\n if (!block.properties) return null\n\n const blockColor = block.format?.block_color\n const id = uuidToId(block.id)\n const title = getTextContent(block.properties.title) || `Notion Header ${id}`\n\n // we use a cache here because constructing the ToC is non-trivial\n let indentLevel = tocIndentLevelCache[block.id]\n let indentLevelClass: string\n\n if (indentLevel === undefined) {\n const page = getBlockParentPage(block, recordMap)\n\n if (page) {\n const toc = getPageTableOfContents(page, recordMap)\n const tocItem = toc.find(tocItem => tocItem.id === block.id)\n\n if (tocItem) {\n indentLevel = tocItem.indentLevel\n tocIndentLevelCache[block.id] = indentLevel\n }\n }\n }\n\n if (indentLevel !== undefined) indentLevelClass = `notion-h-indent-${indentLevel}`\n\n const isH1 = block.type === 'header'\n const isH2 = block.type === 'sub_header'\n const isH3 = block.type === 'sub_sub_header'\n\n const classNameStr = `${isH1 && 'notion-h notion-h1'}\n ${isH2 && 'notion-h notion-h2'}\n ${isH3 && 'notion-h notion-h3'}\n ${blockColor && `notion-${blockColor}`}\n ${indentLevelClass},\n ${blockId}`\n\n const innerHeader = (\n <span>\n <div id={id} className='notion-header-anchor' />\n {!block.format?.toggleable && (\n <a className='notion-hash-link' href={`#${id}`} title={title}>\n <LinkIcon />\n </a>\n )}\n\n <span className='notion-h-title'>\n <Text value={block.properties.title} block={block} />\n </span>\n </span>\n )\n let headerBlock = null\n\n //page title takes the h1 so all header blocks are greater\n if (isH1)\n headerBlock = (\n <h2 className={classNameStr} data-id={id}>\n {innerHeader}\n </h2>\n )\n else if (isH2)\n headerBlock = (\n <h3 className={classNameStr} data-id={id}>\n {innerHeader}\n </h3>\n )\n else\n headerBlock = (\n <h4 className={classNameStr} data-id={id}>\n {innerHeader}\n </h4>\n )\n\n if (block.format?.toggleable)\n return (\n <details className={`notion-toggle ${blockId}`}>\n <summary>{headerBlock}</summary>\n <div>{children}</div>\n </details>\n )\n else return headerBlock\n }\n\n case 'divider':\n return <hr className={`notion-hr ${blockId}`} />\n\n case 'text': {\n if (!block.properties && !block.content?.length) return <div className={`notion-blank ${blockId}`}>&nbsp;</div>\n\n const blockColor = block.format?.block_color\n\n return (\n <div className={`notion-text ${blockColor && `notion-${blockColor}`} ${blockId}`}>\n {block.properties?.title && <Text value={block.properties.title} block={block} />}\n\n {children && <div className='notion-text-children'>{children}</div>}\n </div>\n )\n }\n\n case 'bulleted_list':\n // fallthrough\n case 'numbered_list': {\n const wrapList = (content: React.ReactNode, start?: number) =>\n block.type === 'bulleted_list' ? (\n <ul className={`notion-list notion-list-disc ${blockId}`}>{content}</ul>\n ) : (\n <ol start={start} className={`notion-list notion-list-numbered ${blockId}`}>\n {content}\n </ol>\n )\n\n let output: JSX.Element | null = null\n\n if (block.content)\n output = (\n <>\n {block.properties && (\n <li>\n <Text value={block.properties.title} block={block} />\n </li>\n )}\n {wrapList(children)}\n </>\n )\n else\n output = block.properties ? (\n <li>\n <Text value={block.properties.title} block={block} />\n </li>\n ) : null\n\n const isTopLevel = block.type !== recordMap.block[block.parent_id]?.value?.type\n const start = getListNumber(block.id, recordMap.block)\n\n return isTopLevel ? wrapList(output, start) : output\n }\n\n case 'embed':\n return <components.Embed blockId={blockId} block={block} />\n case 'tweet':\n // fallthrough\n case 'maps':\n // fallthrough\n case 'pdf':\n // fallthrough\n case 'figma':\n // fallthrough\n case 'typeform':\n // fallthrough\n case 'codepen':\n // fallthrough\n case 'excalidraw':\n // fallthrough\n case 'image':\n // fallthrough\n case 'gist':\n // fallthrough\n case 'video':\n return <AssetWrapper blockId={blockId} block={block} />\n\n case 'drive': {\n const properties = block.format?.drive_properties\n if (!properties)\n if (block.format?.display_source)\n //check if this drive actually needs to be embeded ex. google sheets.\n return <AssetWrapper blockId={blockId} block={block} />\n\n return <GoogleDrive block={block as GoogleDriveBlock} className={blockId} />\n }\n\n case 'audio':\n return <Audio block={block as AudioBlock} className={blockId} />\n\n case 'file':\n return <File block={block as FileBlock} className={blockId} />\n\n case 'equation':\n return <components.Equation block={block as EquationBlock} inline={false} className={blockId} />\n\n case 'code':\n return <components.Code block={block as CodeBlock} />\n\n case 'column_list':\n return <div className={`notion-row ${blockId}`}>{children}</div>\n\n case 'column': {\n // note: notion uses 46px\n const spacerWidth = `min(32px, 4vw)`\n const ratio = block.format?.column_ratio || 0.5\n const parent = recordMap.block[block.parent_id]?.value\n const columns = parent?.content?.length || Math.max(2, Math.ceil(1.0 / ratio))\n\n const width = `calc((100% - (${columns - 1} * ${spacerWidth})) * ${ratio})`\n const style = { width }\n\n return (\n <>\n <div className={`notion-column ${blockId}`} style={style}>\n {children}\n </div>\n\n <div className='notion-spacer' />\n </>\n )\n }\n\n case 'quote': {\n if (!block.properties) return null\n\n const blockColor = block.format?.block_color\n\n return (\n <blockquote className={`notion-quote ${blockColor && `notion-${blockColor}`} ${blockId}`}>\n <div>\n <Text value={block.properties.title} block={block} />\n </div>\n {children}\n </blockquote>\n )\n }\n\n case 'collection_view':\n return <components.Collection block={block} className={blockId} ctx={ctx} />\n\n case 'callout':\n if (components.Callout) return <components.Callout block={block} className={blockId} />\n else\n return (\n <div\n className={`notion-callout ${block.format?.block_color && `notion-${block.format?.block_color}_co`} ${blockId}`}>\n <PageIcon block={block} />\n\n <div className='notion-callout-text'>\n <Text value={block.properties?.title} block={block} />\n {children}\n </div>\n </div>\n )\n\n case 'bookmark': {\n if (!block.properties) return null\n\n const link = block.properties.link\n if (!link || !link[0]?.[0]) return null\n\n let title = getTextContent(block.properties.title)\n if (!title) title = getTextContent(link)\n\n if (title)\n if (title.startsWith('http'))\n try {\n const url = new URL(title)\n title = url.hostname\n } catch (err) {\n // ignore invalid links\n }\n\n return (\n <div className='notion-row'>\n <components.Link\n target='_blank'\n rel='noopener noreferrer'\n className={`notion-bookmark ${block.format?.block_color && `notion-${block.format.block_color}`} ${blockId}`}\n href={link[0][0]}>\n <div>\n {title && (\n <div className='notion-bookmark-title'>\n <Text value={[[title]]} block={block} />\n </div>\n )}\n\n {block.properties?.description && (\n <div className='notion-bookmark-description'>\n <Text value={block.properties?.description} block={block} />\n </div>\n )}\n\n <div className='notion-bookmark-link'>\n {block.format?.bookmark_icon && (\n <div className='notion-bookmark-link-icon'>\n <LazyImage src={mapImageUrl(block.format?.bookmark_icon, block)} alt={title} />\n </div>\n )}\n\n <div className='notion-bookmark-link-text'>\n <Text value={link} block={block} />\n </div>\n </div>\n </div>\n\n {block.format?.bookmark_cover && (\n <div className='notion-bookmark-image'>\n <LazyImage\n src={mapImageUrl(block.format?.bookmark_cover, block)}\n alt={getTextContent(block.properties?.title)}\n style={{\n objectFit: 'cover'\n }}\n />\n </div>\n )}\n </components.Link>\n </div>\n )\n }\n\n case 'toggle':\n return (\n <details className={`notion-toggle ${blockId}`}>\n <summary>\n <Text value={block.properties?.title} block={block} />\n </summary>\n\n <div>{children}</div>\n </details>\n )\n\n case 'table_of_contents': {\n const page = getBlockParentPage(block, recordMap)\n if (!page) return null\n\n const toc = getPageTableOfContents(page, recordMap)\n const blockColor = block.format?.block_color\n\n return (\n <div className={`notion-table-of-contents ${blockColor && `notion-${blockColor}`} ${blockId}`}>\n {toc.map(tocItem => (\n <a key={tocItem.id} href={`#${uuidToId(tocItem.id)}`} className='notion-table-of-contents-item'>\n <span\n className='notion-table-of-contents-item-body'\n style={{\n display: 'inline-block',\n marginLeft: tocItem.indentLevel * 24\n }}>\n {tocItem.text}\n </span>\n </a>\n ))}\n </div>\n )\n }\n\n case 'to_do': {\n const isChecked = block.properties?.checked?.[0]?.[0] === 'Yes'\n\n return (\n <div className={`notion-to-do ${blockId}`}>\n <div className='notion-to-do-item'>\n <components.Checkbox blockId={blockId} isChecked={isChecked} />\n\n <div className={`notion-to-do-body ${isChecked && `notion-to-do-checked`}`}>\n <Text value={block.properties?.title} block={block} />\n </div>\n </div>\n\n <div className='notion-to-do-children'>{children}</div>\n </div>\n )\n }\n\n case 'transclusion_container':\n return <div className={`notion-sync-block ${blockId}`}>{children}</div>\n\n case 'transclusion_reference':\n return <SyncPointerBlock block={block} level={level + 1} {...props} />\n\n case 'alias': {\n const blockPointerId = block?.format?.alias_pointer?.id\n const linkedBlock = recordMap.block[blockPointerId]?.value\n if (!linkedBlock) {\n console.debug('\"alias\" missing block', blockPointerId)\n return null\n }\n\n return (\n <components.PageLink className={`notion-page-link ${blockPointerId}}`} href={mapPageUrl(blockPointerId)}>\n <PageTitle block={linkedBlock} />\n </components.PageLink>\n )\n }\n\n case 'table':\n return (\n <table className={`notion-simple-table ${blockId}`}>\n <tbody>{children}</tbody>\n </table>\n )\n\n case 'table_row': {\n const tableBlock = recordMap.block[block.parent_id]?.value as TableBlock\n const order = tableBlock.format?.table_block_column_order\n const formatMap = tableBlock.format?.table_block_column_format\n const backgroundColor = block.format?.block_color\n\n if (!tableBlock || !order) return null\n\n return (\n <tr className={`notion-simple-table-row ${backgroundColor && `notion-${backgroundColor}`} ${blockId}`}>\n {order.map(column => {\n const color = formatMap?.[column]?.color\n\n return (\n <td\n key={column}\n className={color ? `notion-${color}` : ''}\n style={{\n width: formatMap?.[column]?.width || 120\n }}>\n <div className='notion-simple-table-cell'>\n <Text value={block.properties?.[column] || [['ㅤ']]} block={block} />\n </div>\n </td>\n )\n })}\n </tr>\n )\n }\n\n case 'external_object_instance':\n return <EOI block={block} className={blockId} />\n\n default:\n if (process.env.NODE_ENV !== 'production')\n console.debug('Unsupported type ' + (block as BlockType).type, JSON.stringify(block, null, 2))\n\n return <div />\n }\n}\n","import React from 'react'\n\nimport { AudioBlock } from '@texonom/ntypes'\n\nimport { useNotionContext } from '../context'\n\nexport const Audio: React.FC<{\n block: AudioBlock\n className?: string\n}> = ({ block, className }) => {\n const { recordMap } = useNotionContext()\n const source = recordMap.signed_urls[block.id] || block.properties?.source?.[0]?.[0]\n\n return (\n <div className={`notion-audio ${className || ''}`}>\n <audio controls preload='none' src={source} />\n </div>\n )\n}\n","import React from 'react'\n\nimport { FileBlock } from '@texonom/ntypes'\n\nimport { useNotionContext } from '../context'\nimport { FileIcon } from '../icons/file-icon'\nimport { Text } from './text'\n\nexport const File: React.FC<{\n block: FileBlock\n className?: string\n}> = ({ block, className }) => {\n const { components, recordMap } = useNotionContext()\n const source = recordMap.signed_urls[block.id] || block.properties?.source?.[0]?.[0]\n\n return (\n <div className={`notion-file ${className || ''}`}>\n <components.Link className='notion-file-link' href={source} target='_blank' rel='noopener noreferrer'>\n <FileIcon className='notion-file-icon' />\n\n <div className='notion-file-info'>\n <div className='notion-file-title'>\n <Text value={block.properties?.title || [['File']]} block={block} />\n </div>\n\n {block.properties?.size && (\n <div className='notion-file-size'>\n <Text value={block.properties.size} block={block} />\n </div>\n )}\n </div>\n </components.Link>\n </div>\n )\n}\n","import React from 'react'\n\nexport const FileIcon = props => {\n const { className, ...rest } = props\n return (\n <svg className={className} {...rest} viewBox='0 0 30 30'>\n <path d='M22,8v12c0,3.866-3.134,7-7,7s-7-3.134-7-7V8c0-2.762,2.238-5,5-5s5,2.238,5,5v12c0,1.657-1.343,3-3,3s-3-1.343-3-3V8h-2v12c0,2.762,2.238,5,5,5s5-2.238,5-5V8c0-3.866-3.134-7-7-7S6,4.134,6,8v12c0,4.971,4.029,9,9,9s9-4.029,9-9V8H22z'></path>\n </svg>\n )\n}\n","import React from 'react'\n\nimport { GoogleDriveBlock } from '@texonom/ntypes'\n\nimport { useNotionContext } from '../context'\nimport { GracefulImage } from './graceful-image'\n\nexport const GoogleDrive: React.FC<{\n block: GoogleDriveBlock\n className?: string\n}> = ({ block, className }) => {\n const { components, mapImageUrl } = useNotionContext()\n const properties = block.format?.drive_properties\n if (!properties) return null\n let domain\n\n try {\n const url = new URL(properties.url)\n domain = url.hostname\n } catch (err) {\n // ignore invalid urls for robustness\n }\n\n return (\n <div className={`notion-google-drive ${className || ''}`}>\n <components.Link className='notion-google-drive-link' href={properties.url} target='_blank' rel='noopener noreferrer'>\n <div className='notion-google-drive-preview'>\n <GracefulImage\n src={mapImageUrl(properties.thumbnail, block)}\n alt={properties.title || 'Google Drive Document'}\n loading='lazy'\n />\n </div>\n\n <div className='notion-google-drive-body'>\n {properties.title && <div className='notion-google-drive-body-title'>{properties.title}</div>}\n\n {/* TODO: re-add last modified time with alternative to timeago.js */}\n {/* {properties.modified_time && (\n <div className='notion-google-drive-body-modified-time'>\n Last modified{' '}\n {properties.user_name ? `by ${properties.user_name} ` : ''}\n {timeago(properties.modified_time)}\n </div>\n )} */}\n\n {properties.icon && domain && (\n <div className='notion-google-drive-body-source'>\n {properties.icon && (\n <div\n className='notion-google-drive-body-source-icon'\n style={{\n backgroundImage: `url(${properties.icon})`\n }}\n />\n )}\n\n {domain && <div className='notion-google-drive-body-source-domain'>{domain}</div>}\n </div>\n )}\n </div>\n </components.Link>\n </div>\n )\n}\n","import React from 'react'\n\nimport throttle from 'lodash.throttle'\nimport { TableOfContentsEntry, uuidToId } from '@texonom/nutils'\n\nexport const PageAside: React.FC<{\n toc: Array<TableOfContentsEntry>\n activeSection: string | null\n setActiveSection: (activeSection: string | null) => unknown\n hasToc: boolean\n hasAside: boolean\n pageAside?: React.ReactNode\n className?: string\n}> = ({ toc, activeSection, setActiveSection, pageAside, hasToc, hasAside, className }) => {\n const throttleMs = 100\n const actionSectionScrollSpy = React.useMemo(\n () =>\n throttle(() => {\n const sections = document.getElementsByClassName('notion-h')\n\n let prevBBox: DOMRect = null\n let currentSectionId = activeSection\n\n for (let i = 0; i < sections.length; ++i) {\n const section = sections[i]\n if (!section || !(section instanceof Element)) continue\n\n if (!currentSectionId) currentSectionId = section.getAttribute('data-id')\n\n const bbox = section.getBoundingClientRect()\n const prevHeight = prevBBox ? bbox.top - prevBBox.bottom : 0\n const offset = Math.max(150, prevHeight / 4)\n\n // GetBoundingClientRect returns values relative to the viewport\n if (bbox.top - offset < 0) {\n currentSectionId = section.getAttribute('data-id')\n\n prevBBox = bbox\n continue\n }\n\n // No need to continue loop, if last element has been detected\n break\n }\n\n setActiveSection(currentSectionId)\n }, throttleMs),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // explicitly not taking a dependency on activeSection\n setActiveSection\n ]\n )\n\n React.useEffect(() => {\n if (!hasToc) return\n\n window.addEventListener('scroll', actionSectionScrollSpy)\n\n actionSectionScrollSpy()\n\n return () => {\n window.removeEventListener('scroll', actionSectionScrollSpy)\n }\n }, [hasToc, actionSectionScrollSpy])\n\n if (!hasAside) return null\n\n return (\n <aside className={`notion-aside ${className || ''}`}>\n {hasToc && (\n <div className='notion-aside-table-of-contents'>\n <div className='notion-aside-table-of-contents-header'>Table of Contents</div>\n\n <nav className='notion-table-of-contents'>\n {toc.map(tocItem => {\n const id = uuidToId(tocItem.id)\n\n return (\n <a\n key={id}\n href={`#${id}`}\n className={`notion-table-of-contents-item\n notion-table-of-contents-item-indent-level-${tocItem.indentLevel}\n ${activeSection === id && 'notion-table-of-contents-active-item'}`}>\n <span\n className='notion-table-of-contents-item-body'\n style={{\n display: 'inline-block',\n marginLeft: tocItem.indentLevel * 16\n }}>\n {tocItem.text}\n </span>\n </a>\n )\n })}\n </nav>\n </div>\n )}\n\n {pageAside}\n </aside>\n )\n}\n","import React from 'react'\n\nimport { NotionBlockRenderer } from '../renderer'\n\nimport type { Block as BlockType, SyncPointerBlock as SyncPointerBlockType } from '@texonom/ntypes'\n\nexport const SyncPointerBlock: React.FC<{\n block: BlockType\n level: number\n}> = ({ block, level }) => {\n if (!block) {\n if (process.env.NODE_ENV !== 'production') console.warn('missing sync pointer block', block.id)\n\n return null\n }\n\n const syncPointerBlock = block as SyncPointerBlockType\n const referencePointerId = syncPointerBlock?.format?.transclusion_reference_pointer?.id\n\n if (!referencePointerId) return null\n\n return <NotionBlockRenderer key={referencePointerId} level={level} blockId={referencePointerId} />\n}\n","import React from 'react'\n\nexport const LinkIcon = props => {\n const { className, ...rest } = props\n return (\n <svg className={className} {...rest} viewBox='0 0 16 16' width='16' height='16'>\n <path\n fillRule='evenodd'\n d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'\n />\n </svg>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,YAAW;AAElB,OAAO,gBAAgB;;;ACFvB,OAAOC,YAAW;AAElB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OACK;;;ACTP,OAAO,WAAW;AAMX,IAAM,QAGR,CAAC,EAAE,OAAO,UAAU,MAAM;AAT/B;AAUE,QAAM,EAAE,UAAU,IAAI,iBAAiB;AACvC,QAAM,SAAS,UAAU,YAAY,MAAM,EAAE,OAAK,uBAAM,eAAN,mBAAkB,WAAlB,mBAA2B,OAA3B,mBAAgC;AAElF,SACE,oCAAC,SAAI,WAAW,gBAAgB,aAAa,QAC3C,oCAAC,WAAM,UAAQ,MAAC,SAAQ,QAAO,KAAK,QAAQ,CAC9C;AAEJ;;;AClBA,OAAOC,YAAW;;;ACAlB,OAAOC,YAAW;AAEX,IAAM,WAAW,WAAS;AAC/B,QAA+B,YAAvB,YAHV,IAGiC,IAAT,iBAAS,IAAT,CAAd;AACR,SACE,gBAAAC,OAAA,cAAC,sCAAI,aAA0B,OAA9B,EAAoC,SAAQ,gBAC3C,gBAAAA,OAAA,cAAC,UAAK,GAAE,sOAAqO,CAC/O;AAEJ;;;ADDO,IAAM,OAGR,CAAC,EAAE,OAAO,UAAU,MAAM;AAX/B;AAYE,QAAM,EAAE,YAAY,UAAU,IAAI,iBAAiB;AACnD,QAAM,SAAS,UAAU,YAAY,MAAM,EAAE,OAAK,uBAAM,eAAN,mBAAkB,WAAlB,mBAA2B,OAA3B,mBAAgC;AAElF,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,eAAe,aAAa,QAC1C,gBAAAA,OAAA,cAAC,WAAW,MAAX,EAAgB,WAAU,oBAAmB,MAAM,QAAQ,QAAO,UAAS,KAAI,yBAC9E,gBAAAA,OAAA,cAAC,YAAS,WAAU,oBAAmB,GAEvC,gBAAAA,OAAA,cAAC,SAAI,WAAU,sBACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,uBACb,gBAAAA,OAAA,cAAC,QAAK,SAAO,WAAM,eAAN,mBAAkB,UAAS,CAAC,CAAC,MAAM,CAAC,GAAG,OAAc,CACpE,KAEC,WAAM,eAAN,mBAAkB,SACjB,gBAAAA,OAAA,cAAC,SAAI,WAAU,sBACb,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,MAAM,OAAc,CACpD,CAEJ,CACF,CACF;AAEJ;;;AElCA,OAAOC,YAAW;AAOX,IAAM,cAGR,CAAC,EAAE,OAAO,UAAU,MAAM;AAV/B;AAWE,QAAM,EAAE,YAAY,YAAY,IAAI,iBAAiB;AACrD,QAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,MAAI,CAAC;AAAY,WAAO;AACxB,MAAI;AAEJ,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,WAAW,GAAG;AAClC,aAAS,IAAI;AAAA,EACf,SAAS,KAAP;AAAA,EAEF;AAEA,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,uBAAuB,aAAa,QAClD,gBAAAA,OAAA,cAAC,WAAW,MAAX,EAAgB,WAAU,4BAA2B,MAAM,WAAW,KAAK,QAAO,UAAS,KAAI,yBAC9F,gBAAAA,OAAA,cAAC,SAAI,WAAU,iCACb,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,YAAY,WAAW,WAAW,KAAK;AAAA,MAC5C,KAAK,WAAW,SAAS;AAAA,MACzB,SAAQ;AAAA;AAAA,EACV,CACF,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,8BACZ,WAAW,SAAS,gBAAAA,OAAA,cAAC,SAAI,WAAU,oCAAkC,WAAW,KAAM,GAWtF,WAAW,QAAQ,UAClB,gBAAAA,OAAA,cAAC,SAAI,WAAU,qCACZ,WAAW,QACV,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,iBAAiB,OAAO,WAAW;AAAA,MACrC;AAAA;AAAA,EACF,GAGD,UAAU,gBAAAA,OAAA,cAAC,SAAI,WAAU,4CAA0C,MAAO,CAC7E,CAEJ,CACF,CACF;AAEJ;;;AC9DA,oBAAqB;AAFrB,OAAOC,YAAW;AAGlB,SAA+B,gBAAgB;AAExC,IAAM,YAQR,CAAC,EAAE,KAAK,eAAe,kBAAkB,WAAW,QAAQ,UAAU,UAAU,MAAM;AACzF,QAAM,aAAa;AACnB,QAAM,yBAAyBA,OAAM;AAAA,IACnC,UACE,cAAAC,SAAS,MAAM;AACb,YAAM,WAAW,SAAS,uBAAuB,UAAU;AAE3D,UAAI,WAAoB;AACxB,UAAI,mBAAmB;AAEvB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,cAAM,UAAU,SAAS,CAAC;AAC1B,YAAI,CAAC,WAAW,EAAE,mBAAmB;AAAU;AAE/C,YAAI,CAAC;AAAkB,6BAAmB,QAAQ,aAAa,SAAS;AAExE,cAAM,OAAO,QAAQ,sBAAsB;AAC3C,cAAM,aAAa,WAAW,KAAK,MAAM,SAAS,SAAS;AAC3D,cAAM,SAAS,KAAK,IAAI,KAAK,aAAa,CAAC;AAG3C,YAAI,KAAK,MAAM,SAAS,GAAG;AACzB,6BAAmB,QAAQ,aAAa,SAAS;AAEjD,qBAAW;AACX;AAAA,QACF;AAGA;AAAA,MACF;AAEA,uBAAiB,gBAAgB;AAAA,IACnC,GAAG,UAAU;AAAA;AAAA,IAEf;AAAA;AAAA,MAEE;AAAA,IACF;AAAA,EACF;AAEA,EAAAD,OAAM,UAAU,MAAM;AACpB,QAAI,CAAC;AAAQ;AAEb,WAAO,iBAAiB,UAAU,sBAAsB;AAExD,2BAAuB;AAEvB,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,sBAAsB;AAAA,IAC7D;AAAA,EACF,GAAG,CAAC,QAAQ,sBAAsB,CAAC;AAEnC,MAAI,CAAC;AAAU,WAAO;AAEtB,SACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,gBAAgB,aAAa,QAC5C,UACC,gBAAAA,OAAA,cAAC,SAAI,WAAU,oCACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,2CAAwC,mBAAiB,GAExE,gBAAAA,OAAA,cAAC,SAAI,WAAU,8BACZ,IAAI,IAAI,aAAW;AAClB,UAAM,KAAK,SAAS,QAAQ,EAAE;AAE9B,WACE,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAM,IAAI;AAAA,QACV,WAAW;AAAA,iEACoC,QAAQ;AAAA,sBACnD,kBAAkB,MAAM;AAAA;AAAA,MAC5B,gBAAAA,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,SAAS;AAAA,YACT,YAAY,QAAQ,cAAc;AAAA,UACpC;AAAA;AAAA,QACC,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,EAEJ,CAAC,CACH,CACF,GAGD,SACH;AAEJ;;;ACvGA,OAAOE,YAAW;AAMX,IAAM,mBAGR,CAAC,EAAE,OAAO,MAAM,MAAM;AAT3B;AAUE,MAAI,CAAC,OAAO;AACV,QAAI;AAAuC,cAAQ,KAAK,8BAA8B,MAAM,EAAE;AAE9F,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB;AACzB,QAAM,sBAAqB,gEAAkB,WAAlB,mBAA0B,mCAA1B,mBAA0D;AAErF,MAAI,CAAC;AAAoB,WAAO;AAEhC,SAAO,gBAAAC,OAAA,cAAC,uBAAoB,KAAK,oBAAoB,OAAc,SAAS,oBAAoB;AAClG;;;ACtBA,OAAOC,YAAW;AAEX,IAAM,WAAW,WAAS;AAC/B,QAA+B,YAAvB,YAHV,IAGiC,IAAT,iBAAS,IAAT,CAAd;AACR,SACE,gBAAAC,OAAA,cAAC,sCAAI,aAA0B,OAA9B,EAAoC,SAAQ,aAAY,OAAM,MAAK,QAAO,SACzE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,GAAE;AAAA;AAAA,EACJ,CACF;AAEJ;;;AP+CA,IAAM,sBAEF,CAAC;AAEL,IAAM,sBAA8C,CAAC;AAE9C,IAAM,QAA8B,WAAS;AAjEpD;AAkEE,QAAM,MAAM,iBAAiB;AAC7B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,CAAC,eAAe,gBAAgB,IAAIC,OAAM,SAAS,IAAI;AAE7D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,CAAC;AAAO,WAAO;AAInB,MAAI,UAAU,KAAK,MAAM,SAAS,mBAAmB;AACnD,UAAM,aAAa;AACnB,eAAW,OAAO;AAAA,EACpB;AAEA,QAAM,UAAU,cAAc,iBAAiB,gBAAgBC,UAAS,MAAM,EAAE;AAEhF,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AAAA,IAEL,KAAK;AACH,UAAI,UAAU,GAAG;AACf,cAAM;AAAA,UACJ,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,sBAAsB;AAAA,UACtB;AAAA,UACA;AAAA,QACF,IAAI,MAAM,UAAU,CAAC;AAErB,YAAI,UAAU;AACZ,gBAAM,aACJ,MAAM,SAAS,SACX,MAAM,aACN;AAAA,YACE,QAAO,qBAAU,WAAW,qBAAqB,OAAO,SAAS,CAAC,MAA3D,mBAA8D,UAA9D,mBAAqE;AAAA,UAC9E;AAEN,gBAAM,iBAAiB,KAAK,uBAAuB,QAAQ;AAC3D,gBAAM,0BAA0B,UAAU;AAC1C,cAAI,iBAAiB,oBAAoB,uBAAuB;AAChE,cAAI,CAAC;AACH,6BAAiB,oBAAoB,uBAAuB,IAAI;AAAA,cAC9D,gBAAgB;AAAA,YAClB;AAEF,gBAAM,YAAW,kBAAa,OAAO,SAAS,MAA7B,YAAkC;AACnD,gBAAM,gBAAgB,YAAY,MAAM,QAAQ;AAEhD,gBAAM,MAAM,uBAAuB,OAAoB,SAAS;AAEhE,gBAAM,SAAS,uBAAuB,IAAI,UAAU;AACpD,gBAAM,YAAY,UAAU,cAAc,CAAC;AAC3C,gBAAM,eAAe,aAAa;AAElC,iBACE,gBAAAD,OAAA,cAAC,SAAI,WAAW,qBAAqB,WAAW,SAAS,WAAW,WAAW,aAAa,QAC1F,gBAAAA,OAAA,cAAC,SAAI,WAAU,mBAAkB,GAEjC,gBAAAA,OAAA,cAAC,SAAI,WAAU,kBACZ,CAAC,iBAAiB,gBAAAA,OAAA,cAAC,WAAW,QAAX,EAAkB,OAAc,GACnD,QAED,gBAAAA,OAAA,cAAC,SAAI,WAAU,0BACZ,iBACE,YACC,YAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,+BACb,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,YAAY,YAAY,KAAK;AAAA,cAClC,KAAK,eAAe,yCAAY,KAAK;AAAA,cACrC,UAAU;AAAA,cACV,WAAU;AAAA,cACV,OAAO;AAAA;AAAA,UACT,CACF,IAGJ,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,wBACP,eAAe,0BAA0B;AAAA,wBACzC,YAAY,yBAAyB;AAAA,wBACrC,gBAAgB,+BAA+B;AAAA;AAAA,wBAE/C,mBAAmB;AAAA,wBACnB,mBAAmB;AAAA,wBACnB;AAAA;AAAA,YACH,aAAa,gBAAAA,OAAA,cAAC,YAAS,OAAc,aAAa,iBAAiB,QAAQ,OAAO;AAAA,YAElF;AAAA,YAED,gBAAAA,OAAA,cAAC,QAAG,WAAU,kBAAgB,gCAAa,gBAAAA,OAAA,cAAC,QAAK,OAAO,yCAAY,OAAO,OAAc,CAAG;AAAA,aAE1F,MAAM,SAAS,0BACd,MAAM,SAAS,UAAU,MAAM,iBAAiB,iBACjD,gBAAAA,OAAA,cAAC,WAAW,YAAX,EAAsB,OAAc,KAAU;AAAA,YAGhD,MAAM,SAAS,0BACd,gBAAAA,OAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,4BACP,YAAY;AAAA,4BACZ,UAAU;AAAA;AAAA,cACd,gBAAAA,OAAA,cAAC,aAAQ,WAAU,+BAA6B,QAAS;AAAA,cAExD,YACC,gBAAAA,OAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,cACF;AAAA,YAEJ;AAAA,YAGD;AAAA,UACH,GAEC,MACH,CACF,CACF;AAAA,QAEJ,OAAO;AACL,iBACE,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,kBACP,WAAW,SAAS;AAAA;AAAA,kBAEpB,mBAAmB;AAAA,kBACnB,mBAAmB;AAAA,kBACnB;AAAA,kBACA,aAAa;AAAA,kBACb;AAAA;AAAA,YACJ,gBAAAA,OAAA,cAAC,SAAI,WAAU,mBAAkB;AAAA,YAEhC;AAAA,aAEC,MAAM,SAAS,0BAA2B,MAAM,SAAS,UAAU,MAAM,iBAAiB,iBAC1F,gBAAAA,OAAA,cAAC,WAAW,YAAX,EAAsB,OAAc,KAAU;AAAA,YAGhD,MAAM,SAAS,0BAA0B;AAAA,YAEzC;AAAA,UACH;AAAA,QAEJ;AAAA,MACF,OAAO;AACL,cAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,eACE,gBAAAA,OAAA;AAAA,UAAC,WAAW;AAAA,UAAX;AAAA,YACC,WAAW,oBAAoB,cAAc,UAAU,gBAAgB;AAAA,YACvE,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,UACzB,gBAAAA,OAAA,cAAC,aAAU,OAAc;AAAA,QAC3B;AAAA,MAEJ;AAAA,IAEF,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK,kBAAkB;AACrB,UAAI,CAAC,MAAM;AAAY,eAAO;AAE9B,YAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,YAAM,KAAKC,UAAS,MAAM,EAAE;AAC5B,YAAM,QAAQ,eAAe,MAAM,WAAW,KAAK,KAAK,iBAAiB;AAGzE,UAAI,cAAc,oBAAoB,MAAM,EAAE;AAC9C,UAAI;AAEJ,UAAI,gBAAgB,QAAW;AAC7B,cAAM,OAAO,mBAAmB,OAAO,SAAS;AAEhD,YAAI,MAAM;AACR,gBAAM,MAAM,uBAAuB,MAAM,SAAS;AAClD,gBAAM,UAAU,IAAI,KAAK,CAAAC,aAAWA,SAAQ,OAAO,MAAM,EAAE;AAE3D,cAAI,SAAS;AACX,0BAAc,QAAQ;AACtB,gCAAoB,MAAM,EAAE,IAAI;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,gBAAgB;AAAW,2BAAmB,mBAAmB;AAErE,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAE5B,YAAM,eAAe,GAAG,QAAQ;AAAA,UAC5B,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,cAAc,UAAU;AAAA,UACxB;AAAA,UACA;AAEJ,YAAM,cACJ,gBAAAF,OAAA,cAAC,cACC,gBAAAA,OAAA,cAAC,SAAI,IAAQ,WAAU,wBAAuB,GAC7C,GAAC,WAAM,WAAN,mBAAc,eACd,gBAAAA,OAAA,cAAC,OAAE,WAAU,oBAAmB,MAAM,IAAI,MAAM,SAC9C,gBAAAA,OAAA,cAAC,cAAS,CACZ,GAGF,gBAAAA,OAAA,cAAC,UAAK,WAAU,oBACd,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,CACF;AAEF,UAAI,cAAc;AAGlB,UAAI;AACF,sBACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,cAAc,WAAS,MACnC,WACH;AAAA,eAEK;AACP,sBACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,cAAc,WAAS,MACnC,WACH;AAAA;AAGF,sBACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,cAAc,WAAS,MACnC,WACH;AAGJ,WAAI,WAAM,WAAN,mBAAc;AAChB,eACE,gBAAAA,OAAA,cAAC,aAAQ,WAAW,iBAAiB,aACnC,gBAAAA,OAAA,cAAC,iBAAS,WAAY,GACtB,gBAAAA,OAAA,cAAC,aAAK,QAAS,CACjB;AAAA;AAEC,eAAO;AAAA,IACd;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,QAAG,WAAW,aAAa,WAAW;AAAA,IAEhD,KAAK,QAAQ;AACX,UAAI,CAAC,MAAM,cAAc,GAAC,WAAM,YAAN,mBAAe;AAAQ,eAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,gBAAgB,aAAW,MAAM;AAEzG,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,eAAe,cAAc,UAAU,gBAAgB,eACpE,WAAM,eAAN,mBAAkB,UAAS,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,GAE9E,YAAY,gBAAAA,OAAA,cAAC,SAAI,WAAU,0BAAwB,QAAS,CAC/D;AAAA,IAEJ;AAAA,IAEA,KAAK;AAAA,IAEL,KAAK,iBAAiB;AACpB,YAAM,WAAW,CAAC,SAA0BG,WAC1C,MAAM,SAAS,kBACb,gBAAAH,OAAA,cAAC,QAAG,WAAW,gCAAgC,aAAY,OAAQ,IAEnE,gBAAAA,OAAA,cAAC,QAAG,OAAOG,QAAO,WAAW,oCAAoC,aAC9D,OACH;AAGJ,UAAI,SAA6B;AAEjC,UAAI,MAAM;AACR,iBACE,gBAAAH,OAAA,cAAAA,OAAA,gBACG,MAAM,cACL,gBAAAA,OAAA,cAAC,YACC,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,GAED,SAAS,QAAQ,CACpB;AAAA;AAGF,iBAAS,MAAM,aACb,gBAAAA,OAAA,cAAC,YACC,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,IACE;AAEN,YAAM,aAAa,MAAM,WAAS,qBAAU,MAAM,MAAM,SAAS,MAA/B,mBAAkC,UAAlC,mBAAyC;AAC3E,YAAM,QAAQ,cAAc,MAAM,IAAI,UAAU,KAAK;AAErD,aAAO,aAAa,SAAS,QAAQ,KAAK,IAAI;AAAA,IAChD;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,OAAX,EAAiB,SAAkB,OAAc;AAAA,IAC3D,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AAAA,IAEL,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,gBAAa,SAAkB,OAAc;AAAA,IAEvD,KAAK,SAAS;AACZ,YAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,UAAI,CAAC;AACH,aAAI,WAAM,WAAN,mBAAc;AAEhB,iBAAO,gBAAAA,OAAA,cAAC,gBAAa,SAAkB,OAAc;AAAA;AAEzD,aAAO,gBAAAA,OAAA,cAAC,eAAY,OAAkC,WAAW,SAAS;AAAA,IAC5E;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,SAAM,OAA4B,WAAW,SAAS;AAAA,IAEhE,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,QAAK,OAA2B,WAAW,SAAS;AAAA,IAE9D,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,OAA+B,QAAQ,OAAO,WAAW,SAAS;AAAA,IAEhG,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,MAAX,EAAgB,OAA2B;AAAA,IAErD,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,cAAc,aAAY,QAAS;AAAA,IAE5D,KAAK,UAAU;AAEb,YAAM,cAAc;AACpB,YAAM,UAAQ,WAAM,WAAN,mBAAc,iBAAgB;AAC5C,YAAM,UAAS,eAAU,MAAM,MAAM,SAAS,MAA/B,mBAAkC;AACjD,YAAM,YAAU,sCAAQ,YAAR,mBAAiB,WAAU,KAAK,IAAI,GAAG,KAAK,KAAK,IAAM,KAAK,CAAC;AAE7E,YAAM,QAAQ,iBAAiB,UAAU,OAAO,mBAAmB;AACnE,YAAM,QAAQ,EAAE,MAAM;AAEtB,aACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,iBAAiB,WAAW,SACzC,QACH,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,iBAAgB,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK,SAAS;AACZ,UAAI,CAAC,MAAM;AAAY,eAAO;AAE9B,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,gBAAW,WAAW,gBAAgB,cAAc,UAAU,gBAAgB,aAC7E,gBAAAA,OAAA,cAAC,aACC,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,WAAW,OAAO,OAAc,CACrD,GACC,QACH;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,WAAW,YAAX,EAAsB,OAAc,WAAW,SAAS,KAAU;AAAA,IAE5E,KAAK;AACH,UAAI,WAAW;AAAS,eAAO,gBAAAA,OAAA,cAAC,WAAW,SAAX,EAAmB,OAAc,WAAW,SAAS;AAAA;AAEnF,eACE,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,oBAAkB,WAAM,WAAN,mBAAc,gBAAe,WAAU,WAAM,WAAN,mBAAc,oBAAoB;AAAA;AAAA,UACtG,gBAAAA,OAAA,cAAC,YAAS,OAAc;AAAA,UAExB,gBAAAA,OAAA,cAAC,SAAI,WAAU,yBACb,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,OAAO,OAAc,GACnD,QACH;AAAA,QACF;AAAA,IAGN,KAAK,YAAY;AACf,UAAI,CAAC,MAAM;AAAY,eAAO;AAE9B,YAAM,OAAO,MAAM,WAAW;AAC9B,UAAI,CAAC,QAAQ,GAAC,UAAK,CAAC,MAAN,mBAAU;AAAI,eAAO;AAEnC,UAAI,QAAQ,eAAe,MAAM,WAAW,KAAK;AACjD,UAAI,CAAC;AAAO,gBAAQ,eAAe,IAAI;AAEvC,UAAI;AACF,YAAI,MAAM,WAAW,MAAM;AACzB,cAAI;AACF,kBAAM,MAAM,IAAI,IAAI,KAAK;AACzB,oBAAQ,IAAI;AAAA,UACd,SAAS,KAAP;AAAA,UAEF;AAAA;AAEJ,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAU,gBACb,gBAAAA,OAAA;AAAA,QAAC,WAAW;AAAA,QAAX;AAAA,UACC,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAW,qBAAmB,WAAM,WAAN,mBAAc,gBAAe,UAAU,MAAM,OAAO,iBAAiB;AAAA,UACnG,MAAM,KAAK,CAAC,EAAE,CAAC;AAAA;AAAA,QACf,gBAAAA,OAAA,cAAC,aACE,SACC,gBAAAA,OAAA,cAAC,SAAI,WAAU,2BACb,gBAAAA,OAAA,cAAC,QAAK,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,OAAc,CACxC,KAGD,WAAM,eAAN,mBAAkB,gBACjB,gBAAAA,OAAA,cAAC,SAAI,WAAU,iCACb,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,aAAa,OAAc,CAC5D,GAGF,gBAAAA,OAAA,cAAC,SAAI,WAAU,4BACZ,WAAM,WAAN,mBAAc,kBACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,+BACb,gBAAAA,OAAA,cAAC,aAAU,KAAK,aAAY,WAAM,WAAN,mBAAc,eAAe,KAAK,GAAG,KAAK,OAAO,CAC/E,GAGF,gBAAAA,OAAA,cAAC,SAAI,WAAU,+BACb,gBAAAA,OAAA,cAAC,QAAK,OAAO,MAAM,OAAc,CACnC,CACF,CACF;AAAA,UAEC,WAAM,WAAN,mBAAc,mBACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,2BACb,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,aAAY,WAAM,WAAN,mBAAc,gBAAgB,KAAK;AAAA,YACpD,KAAK,gBAAe,WAAM,eAAN,mBAAkB,KAAK;AAAA,YAC3C,OAAO;AAAA,cACL,WAAW;AAAA,YACb;AAAA;AAAA,QACF,CACF;AAAA,MAEJ,CACF;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE,gBAAAA,OAAA,cAAC,aAAQ,WAAW,iBAAiB,aACnC,gBAAAA,OAAA,cAAC,iBACC,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,OAAO,OAAc,CACtD,GAEA,gBAAAA,OAAA,cAAC,aAAK,QAAS,CACjB;AAAA,IAGJ,KAAK,qBAAqB;AACxB,YAAM,OAAO,mBAAmB,OAAO,SAAS;AAChD,UAAI,CAAC;AAAM,eAAO;AAElB,YAAM,MAAM,uBAAuB,MAAM,SAAS;AAClD,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,4BAA4B,cAAc,UAAU,gBAAgB,aACjF,IAAI,IAAI,aACP,gBAAAA,OAAA,cAAC,OAAE,KAAK,QAAQ,IAAI,MAAM,IAAIC,UAAS,QAAQ,EAAE,KAAK,WAAU,mCAC9D,gBAAAD,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,SAAS;AAAA,YACT,YAAY,QAAQ,cAAc;AAAA,UACpC;AAAA;AAAA,QACC,QAAQ;AAAA,MACX,CACF,CACD,CACH;AAAA,IAEJ;AAAA,IAEA,KAAK,SAAS;AACZ,YAAM,cAAY,uBAAM,eAAN,mBAAkB,YAAlB,mBAA4B,OAA5B,mBAAiC,QAAO;AAE1D,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,gBAAgB,aAC9B,gBAAAA,OAAA,cAAC,SAAI,WAAU,uBACb,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,SAAkB,WAAsB,GAE7D,gBAAAA,OAAA,cAAC,SAAI,WAAW,qBAAqB,aAAa,4BAChD,gBAAAA,OAAA,cAAC,QAAK,QAAO,WAAM,eAAN,mBAAkB,OAAO,OAAc,CACtD,CACF,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,2BAAyB,QAAS,CACnD;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,qBAAqB,aAAY,QAAS;AAAA,IAEnE,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,mCAAiB,OAAc,OAAO,QAAQ,KAAO,MAAO;AAAA,IAEtE,KAAK,SAAS;AACZ,YAAM,kBAAiB,0CAAO,WAAP,mBAAe,kBAAf,mBAA8B;AACrD,YAAM,eAAc,eAAU,MAAM,cAAc,MAA9B,mBAAiC;AACrD,UAAI,CAAC,aAAa;AAChB,gBAAQ,MAAM,yBAAyB,cAAc;AACrD,eAAO;AAAA,MACT;AAEA,aACE,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,WAAW,oBAAoB,mBAAmB,MAAM,WAAW,cAAc,KACpG,gBAAAA,OAAA,cAAC,aAAU,OAAO,aAAa,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,uBAAuB,aACvC,gBAAAA,OAAA,cAAC,eAAO,QAAS,CACnB;AAAA,IAGJ,KAAK,aAAa;AAChB,YAAM,cAAa,eAAU,MAAM,MAAM,SAAS,MAA/B,mBAAkC;AACrD,YAAM,SAAQ,gBAAW,WAAX,mBAAmB;AACjC,YAAM,aAAY,gBAAW,WAAX,mBAAmB;AACrC,YAAM,mBAAkB,WAAM,WAAN,mBAAc;AAEtC,UAAI,CAAC,cAAc,CAAC;AAAO,eAAO;AAElC,aACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,2BAA2B,mBAAmB,UAAU,qBAAqB,aACzF,MAAM,IAAI,YAAU;AAtpB/B,YAAAI,KAAAC,KAAAC;AAupBY,cAAM,SAAQF,MAAA,uCAAY,YAAZ,gBAAAA,IAAqB;AAEnC,eACE,gBAAAJ,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW,QAAQ,UAAU,UAAU;AAAA,YACvC,OAAO;AAAA,cACL,SAAOK,MAAA,uCAAY,YAAZ,gBAAAA,IAAqB,UAAS;AAAA,YACvC;AAAA;AAAA,UACA,gBAAAL,OAAA,cAAC,SAAI,WAAU,8BACb,gBAAAA,OAAA,cAAC,QAAK,SAAOM,MAAA,MAAM,eAAN,gBAAAA,IAAmB,YAAW,CAAC,CAAC,QAAG,CAAC,GAAG,OAAc,CACpE;AAAA,QACF;AAAA,MAEJ,CAAC,CACH;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAN,OAAA,cAAC,OAAI,OAAc,WAAW,SAAS;AAAA,IAEhD;AACE,UAAI;AACF,gBAAQ,MAAM,sBAAuB,MAAoB,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAE/F,aAAO,gBAAAA,OAAA,cAAC,WAAI;AAAA,EAChB;AACF;;;AD1qBO,IAAM,iBA8CR,CAAC,OAwBA;AAxBA,eACJ;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EA7EF,IAuDM,IAuBD,iBAvBC,IAuBD;AAAA,IAtBH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,OAAOO,OAAM;AAAA,IACjB,MACE,OAAO,WAAW,eAClB,WAAW;AAAA,MACT,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,QAAQ,oBAAoB;AAAA,IAC9B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,kBAAkB,OAAO;AAAA;AAAA,IAC/B,gBAAAA,OAAA,cAAC,wCAAwB,KAAM;AAAA,EACjC;AAEJ;AAEO,IAAM,sBAUR,CAAC,OAAqC;AAArC,eAAE,UAAQ,GAAG,QAlInB,IAkIM,IAAyB,kBAAzB,IAAyB,CAAvB,SAAW;AAlInB,MAAAC,KAAAC;AAmIE,QAAM,EAAE,UAAU,IAAI,iBAAiB;AACvC,QAAM,KAAK,WAAW,OAAO,KAAK,UAAU,KAAK,EAAE,CAAC;AACpD,QAAM,SAAQD,MAAA,UAAU,MAAM,EAAE,MAAlB,gBAAAA,IAAqB;AAEnC,MAAI,CAAC,OAAO;AACV,QAAI;AAAuC,cAAQ,KAAK,iBAAiB,OAAO;AAEhF,WAAO;AAAA,EACT;AAEA,SACE,gBAAAD,OAAA,cAAC,wBAAM,KAAK,IAAI,OAAc,SAAkB,SAC7CE,MAAA,+BAAO,YAAP,gBAAAA,IAAgB,IAAI,oBACnB,gBAAAF,OAAA,cAAC,sCAAoB,KAAK,gBAAgB,SAAS,gBAAgB,OAAO,QAAQ,KAAO,MAAO,EAEpG;AAEJ;AAEA,SAAS,sBAAsB;AAC7B,QAAM,QAAQ,OAAO;AAErB,MAAI,QAAQ;AAAK,WAAO;AAAA,WACf,QAAQ;AAAK,WAAO;AAAA,WACpB,QAAQ;AAAM,WAAO;AAAA,WACrB,QAAQ;AAAM,WAAO;AAAA,WACrB,QAAQ;AAAM,WAAO;AAAA;AACzB,WAAO;AACd;","names":["React","React","uuidToId","React","React","React","React","React","React","React","throttle","React","React","React","React","React","uuidToId","tocItem","start","_a","_b","_c","React","_a","_b"]}
@@ -1,8 +1,7 @@
1
1
  import {
2
2
  Text,
3
- cs,
4
3
  useNotionContext
5
- } from "../chunk-VHTSGS2P.js";
4
+ } from "../chunk-NVAEYUJK.js";
6
5
  import {
7
6
  __async,
8
7
  __commonJS,
@@ -129,7 +128,7 @@ var Code = ({ block, defaultLanguage = "typescript", className }) => {
129
128
  }, 1200);
130
129
  }, [content, copyTimeout]);
131
130
  const copyButton = /* @__PURE__ */ React2.createElement("div", { className: "notion-code-copy-button", onClick: onClickCopyToClipboard }, /* @__PURE__ */ React2.createElement(copy_default, null));
132
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("pre", { className: cs("notion-code", className) }, /* @__PURE__ */ React2.createElement("div", { className: "notion-code-copy" }, copyButton, isCopied && /* @__PURE__ */ React2.createElement("div", { className: "notion-code-copy-tooltip" }, /* @__PURE__ */ React2.createElement("div", null, isCopied ? "Copied" : "Copy"))), /* @__PURE__ */ React2.createElement("code", { className: `language-${language}`, ref: codeRef }, content)), caption && /* @__PURE__ */ React2.createElement("figcaption", { className: "notion-asset-caption" }, /* @__PURE__ */ React2.createElement(Text, { value: caption, block })));
131
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("pre", { className: `notion-code ${className || ""}` }, /* @__PURE__ */ React2.createElement("div", { className: "notion-code-copy" }, copyButton, isCopied && /* @__PURE__ */ React2.createElement("div", { className: "notion-code-copy-tooltip" }, /* @__PURE__ */ React2.createElement("div", null, isCopied ? "Copied" : "Copy"))), /* @__PURE__ */ React2.createElement("code", { className: `language-${language}`, ref: codeRef }, content)), caption && /* @__PURE__ */ React2.createElement("figcaption", { className: "notion-asset-caption" }, /* @__PURE__ */ React2.createElement(Text, { value: caption, block })));
133
132
  };
134
133
  export {
135
134
  Code
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../node_modules/.pnpm/clipboard-copy@4.0.1/node_modules/clipboard-copy/index.js","../../../src/third-party/code.tsx","../../../src/icons/copy.tsx"],"sourcesContent":["/*! clipboard-copy. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* global DOMException */\n\nmodule.exports = clipboardCopy\n\nfunction makeError () {\n return new DOMException('The request is not allowed', 'NotAllowedError')\n}\n\nasync function copyClipboardApi (text) {\n // Use the Async Clipboard API when available. Requires a secure browsing\n // context (i.e. HTTPS)\n if (!navigator.clipboard) {\n throw makeError()\n }\n return navigator.clipboard.writeText(text)\n}\n\nasync function copyExecCommand (text) {\n // Put the text to copy into a <span>\n const span = document.createElement('span')\n span.textContent = text\n\n // Preserve consecutive spaces and newlines\n span.style.whiteSpace = 'pre'\n span.style.webkitUserSelect = 'auto'\n span.style.userSelect = 'all'\n\n // Add the <span> to the page\n document.body.appendChild(span)\n\n // Make a selection object representing the range of text selected by the user\n const selection = window.getSelection()\n const range = window.document.createRange()\n selection.removeAllRanges()\n range.selectNode(span)\n selection.addRange(range)\n\n // Copy text to the clipboard\n let success = false\n try {\n success = window.document.execCommand('copy')\n } finally {\n // Cleanup\n selection.removeAllRanges()\n window.document.body.removeChild(span)\n }\n\n if (!success) throw makeError()\n}\n\nasync function clipboardCopy (text) {\n try {\n await copyClipboardApi(text)\n } catch (err) {\n // ...Otherwise, use document.execCommand() fallback\n try {\n await copyExecCommand(text)\n } catch (err2) {\n throw (err2 || err || makeError())\n }\n }\n}\n","import React from 'react'\n\nimport copyToClipboard from 'clipboard-copy'\nimport { CodeBlock } from '@texonom/ntypes'\nimport { getBlockTitle } from '@texonom/nutils'\nimport { highlightElement } from 'prismjs'\nimport 'prismjs/components/prism-clike.min.js'\nimport 'prismjs/components/prism-css-extras.min.js'\nimport 'prismjs/components/prism-css.min.js'\nimport 'prismjs/components/prism-javascript.min.js'\nimport 'prismjs/components/prism-js-extras.min.js'\nimport 'prismjs/components/prism-json.min.js'\nimport 'prismjs/components/prism-jsx.min.js'\nimport 'prismjs/components/prism-tsx.min.js'\nimport 'prismjs/components/prism-typescript.min.js'\n\nimport { Text } from '../components/text'\nimport { useNotionContext } from '../context'\nimport CopyIcon from '../icons/copy'\nimport { cs } from '../utils'\n\nexport const Code: React.FC<{\n block: CodeBlock\n defaultLanguage?: string\n className?: string\n}> = ({ block, defaultLanguage = 'typescript', className }) => {\n const [isCopied, setIsCopied] = React.useState(false)\n const copyTimeout = React.useRef<number>()\n const { recordMap } = useNotionContext()\n const content = getBlockTitle(block, recordMap)\n const language = (block.properties?.language?.[0]?.[0] || defaultLanguage).toLowerCase()\n const caption = block.properties.caption\n\n const codeRef = React.useRef()\n React.useEffect(() => {\n if (codeRef.current)\n try {\n highlightElement(codeRef.current)\n } catch (err) {\n console.warn('prismjs highlight error', err)\n }\n }, [codeRef])\n\n const onClickCopyToClipboard = React.useCallback(() => {\n copyToClipboard(content)\n setIsCopied(true)\n\n if (copyTimeout.current) {\n clearTimeout(copyTimeout.current)\n copyTimeout.current = null\n }\n\n copyTimeout.current = setTimeout(() => {\n setIsCopied(false)\n }, 1200) as unknown as number\n }, [content, copyTimeout])\n\n const copyButton = (\n <div className='notion-code-copy-button' onClick={onClickCopyToClipboard}>\n <CopyIcon />\n </div>\n )\n\n return (\n <>\n <pre className={cs('notion-code', className)}>\n <div className='notion-code-copy'>\n {copyButton}\n\n {isCopied && (\n <div className='notion-code-copy-tooltip'>\n <div>{isCopied ? 'Copied' : 'Copy'}</div>\n </div>\n )}\n </div>\n\n <code className={`language-${language}`} ref={codeRef}>\n {content}\n </code>\n </pre>\n\n {caption && (\n <figcaption className='notion-asset-caption'>\n <Text value={caption} block={block} />\n </figcaption>\n )}\n </>\n )\n}\n","import React from 'react'\n\nfunction SvgCopy(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg fill='currentColor' viewBox='0 0 16 16' width='1em' version='1.1' {...props}>\n <path\n fillRule='evenodd'\n d='M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z'\n />\n <path\n fillRule='evenodd'\n d='M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z'\n />\n </svg>\n )\n}\n\nexport default SvgCopy\n"],"mappings":"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","names":["React","React","copyToClipboard"]}
1
+ {"version":3,"sources":["../../../../../node_modules/.pnpm/clipboard-copy@4.0.1/node_modules/clipboard-copy/index.js","../../../src/third-party/code.tsx","../../../src/icons/copy.tsx"],"sourcesContent":["/*! clipboard-copy. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* global DOMException */\n\nmodule.exports = clipboardCopy\n\nfunction makeError () {\n return new DOMException('The request is not allowed', 'NotAllowedError')\n}\n\nasync function copyClipboardApi (text) {\n // Use the Async Clipboard API when available. Requires a secure browsing\n // context (i.e. HTTPS)\n if (!navigator.clipboard) {\n throw makeError()\n }\n return navigator.clipboard.writeText(text)\n}\n\nasync function copyExecCommand (text) {\n // Put the text to copy into a <span>\n const span = document.createElement('span')\n span.textContent = text\n\n // Preserve consecutive spaces and newlines\n span.style.whiteSpace = 'pre'\n span.style.webkitUserSelect = 'auto'\n span.style.userSelect = 'all'\n\n // Add the <span> to the page\n document.body.appendChild(span)\n\n // Make a selection object representing the range of text selected by the user\n const selection = window.getSelection()\n const range = window.document.createRange()\n selection.removeAllRanges()\n range.selectNode(span)\n selection.addRange(range)\n\n // Copy text to the clipboard\n let success = false\n try {\n success = window.document.execCommand('copy')\n } finally {\n // Cleanup\n selection.removeAllRanges()\n window.document.body.removeChild(span)\n }\n\n if (!success) throw makeError()\n}\n\nasync function clipboardCopy (text) {\n try {\n await copyClipboardApi(text)\n } catch (err) {\n // ...Otherwise, use document.execCommand() fallback\n try {\n await copyExecCommand(text)\n } catch (err2) {\n throw (err2 || err || makeError())\n }\n }\n}\n","import React from 'react'\n\nimport copyToClipboard from 'clipboard-copy'\nimport { CodeBlock } from '@texonom/ntypes'\nimport { getBlockTitle } from '@texonom/nutils'\nimport { highlightElement } from 'prismjs'\nimport 'prismjs/components/prism-clike.min.js'\nimport 'prismjs/components/prism-css-extras.min.js'\nimport 'prismjs/components/prism-css.min.js'\nimport 'prismjs/components/prism-javascript.min.js'\nimport 'prismjs/components/prism-js-extras.min.js'\nimport 'prismjs/components/prism-json.min.js'\nimport 'prismjs/components/prism-jsx.min.js'\nimport 'prismjs/components/prism-tsx.min.js'\nimport 'prismjs/components/prism-typescript.min.js'\n\nimport { Text } from '../components/text'\nimport { useNotionContext } from '../context'\nimport CopyIcon from '../icons/copy'\n\nexport const Code: React.FC<{\n block: CodeBlock\n defaultLanguage?: string\n className?: string\n}> = ({ block, defaultLanguage = 'typescript', className }) => {\n const [isCopied, setIsCopied] = React.useState(false)\n const copyTimeout = React.useRef<number>()\n const { recordMap } = useNotionContext()\n const content = getBlockTitle(block, recordMap)\n const language = (block.properties?.language?.[0]?.[0] || defaultLanguage).toLowerCase()\n const caption = block.properties.caption\n\n const codeRef = React.useRef()\n React.useEffect(() => {\n if (codeRef.current)\n try {\n highlightElement(codeRef.current)\n } catch (err) {\n console.warn('prismjs highlight error', err)\n }\n }, [codeRef])\n\n const onClickCopyToClipboard = React.useCallback(() => {\n copyToClipboard(content)\n setIsCopied(true)\n\n if (copyTimeout.current) {\n clearTimeout(copyTimeout.current)\n copyTimeout.current = null\n }\n\n copyTimeout.current = setTimeout(() => {\n setIsCopied(false)\n }, 1200) as unknown as number\n }, [content, copyTimeout])\n\n const copyButton = (\n <div className='notion-code-copy-button' onClick={onClickCopyToClipboard}>\n <CopyIcon />\n </div>\n )\n\n return (\n <>\n <pre className={`notion-code ${className || ''}`}>\n <div className='notion-code-copy'>\n {copyButton}\n\n {isCopied && (\n <div className='notion-code-copy-tooltip'>\n <div>{isCopied ? 'Copied' : 'Copy'}</div>\n </div>\n )}\n </div>\n\n <code className={`language-${language}`} ref={codeRef}>\n {content}\n </code>\n </pre>\n\n {caption && (\n <figcaption className='notion-asset-caption'>\n <Text value={caption} block={block} />\n </figcaption>\n )}\n </>\n )\n}\n","import React from 'react'\n\nfunction SvgCopy(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg fill='currentColor' viewBox='0 0 16 16' width='1em' version='1.1' {...props}>\n <path\n fillRule='evenodd'\n d='M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z'\n />\n <path\n fillRule='evenodd'\n d='M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z'\n />\n </svg>\n )\n}\n\nexport default SvgCopy\n"],"mappings":"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","names":["React","React","copyToClipboard"]}
@@ -9,11 +9,10 @@ import {
9
9
  PageIcon,
10
10
  PageTitle,
11
11
  Text,
12
- cs,
13
12
  dummyLink,
14
13
  formatDate,
15
14
  useNotionContext
16
- } from "../chunk-VHTSGS2P.js";
15
+ } from "../chunk-NVAEYUJK.js";
17
16
  import {
18
17
  __commonJS,
19
18
  __objRest,
@@ -3486,7 +3485,7 @@ var PropertyImpl = (props) => {
3486
3485
  const renderTitleValue = React6.useMemo(
3487
3486
  () => function FormulaTitle() {
3488
3487
  if (block && linkToTitlePage)
3489
- return /* @__PURE__ */ React6.createElement(components.PageLink, { className: cs("notion-page-link"), href: mapPageUrl(block.id) }, /* @__PURE__ */ React6.createElement(PageTitle, { block }));
3488
+ return /* @__PURE__ */ React6.createElement(components.PageLink, { className: "notion-page-link", href: mapPageUrl(block.id) }, /* @__PURE__ */ React6.createElement(PageTitle, { block }));
3490
3489
  else
3491
3490
  return /* @__PURE__ */ React6.createElement(Text, { value: data, block });
3492
3491
  },
@@ -3641,7 +3640,7 @@ var PropertyImpl = (props) => {
3641
3640
  option,
3642
3641
  color
3643
3642
  }),
3644
- () => /* @__PURE__ */ React6.createElement("div", { key: index, className: cs(`notion-property-${schema.type}-item`, color && `notion-item-${color}`) }, value)
3643
+ () => /* @__PURE__ */ React6.createElement("div", { key: index, className: `notion-property-${schema.type}-item ${color && `notion-item-${color}`}` }, value)
3645
3644
  );
3646
3645
  });
3647
3646
  break;
@@ -3722,7 +3721,7 @@ var CollectionRow = ({ block, pageHeader = false, className }) => {
3722
3721
  } else {
3723
3722
  propertyIds.sort((a, b) => schemas[a].name.localeCompare(schemas[b].name));
3724
3723
  }
3725
- return /* @__PURE__ */ React7.createElement("div", { className: cs("notion-collection-row", className) }, /* @__PURE__ */ React7.createElement("div", { className: "notion-collection-row-body" }, propertyIds.map((propertyId) => {
3724
+ return /* @__PURE__ */ React7.createElement("div", { className: `notion-collection-row ${className || ""}` }, /* @__PURE__ */ React7.createElement("div", { className: "notion-collection-row-body" }, propertyIds.map((propertyId) => {
3726
3725
  var _a2;
3727
3726
  const schema = schemas[propertyId];
3728
3727
  return /* @__PURE__ */ React7.createElement("div", { className: "notion-collection-row-property", key: propertyId }, /* @__PURE__ */ React7.createElement(CollectionColumnTitle, { schema }), /* @__PURE__ */ React7.createElement("div", { className: "notion-collection-row-value" }, /* @__PURE__ */ React7.createElement(
@@ -3878,14 +3877,14 @@ var CollectionCard = (_a) => {
3878
3877
  isLinkCollectionToUrlProperty && url ? /* @__PURE__ */ React9.createElement(
3879
3878
  components.Link,
3880
3879
  __spreadValues({
3881
- className: cs("notion-collection-card", `notion-collection-card-size-${coverSize}`, className),
3880
+ className: `notion-collection-card ${`notion-collection-card-size-${coverSize}`} ${className || ""}`,
3882
3881
  href: url
3883
3882
  }, rest),
3884
3883
  innerCard
3885
3884
  ) : /* @__PURE__ */ React9.createElement(
3886
3885
  components.PageLink,
3887
3886
  __spreadValues({
3888
- className: cs("notion-collection-card", `notion-collection-card-size-${coverSize}`, className),
3887
+ className: `notion-collection-card ${`notion-collection-card-size-${coverSize}`} ${className || ""}`,
3889
3888
  href: mapPageUrl(block.id)
3890
3889
  }, rest),
3891
3890
  innerCard
@@ -3997,7 +3996,7 @@ function Board({ collectionView, collectionData, collection, padding }) {
3997
3996
  }),
3998
3997
  [padding]
3999
3998
  );
4000
- return /* @__PURE__ */ React11.createElement("div", { className: "notion-board" }, /* @__PURE__ */ React11.createElement("div", { className: cs("notion-board-view", `notion-board-view-size-${board_cover_size}`), style: boardStyle }, /* @__PURE__ */ React11.createElement("div", { className: "notion-board-header" }, /* @__PURE__ */ React11.createElement("div", { className: "notion-board-header-inner" }, boardGroups.map((p, index) => {
3999
+ return /* @__PURE__ */ React11.createElement("div", { className: "notion-board" }, /* @__PURE__ */ React11.createElement("div", { className: `notion-board-view ${`notion-board-view-size-${board_cover_size}`}`, style: boardStyle }, /* @__PURE__ */ React11.createElement("div", { className: "notion-board-header" }, /* @__PURE__ */ React11.createElement("div", { className: "notion-board-header-inner" }, boardGroups.map((p, index) => {
4001
4000
  var _a2, _b2, _c;
4002
4001
  if (!((_a2 = collectionData.board_columns) == null ? void 0 : _a2.results))
4003
4002
  return null;
@@ -4059,7 +4058,7 @@ function Gallery({ blockIds, collectionView, collection }) {
4059
4058
  gallery_cover_size = "medium",
4060
4059
  gallery_cover_aspect = "cover"
4061
4060
  } = collectionView.format || {};
4062
- return /* @__PURE__ */ React12.createElement("div", { className: "notion-gallery" }, /* @__PURE__ */ React12.createElement("div", { className: "notion-gallery-view" }, /* @__PURE__ */ React12.createElement("div", { className: cs("notion-gallery-grid", `notion-gallery-grid-size-${gallery_cover_size}`) }, blockIds == null ? void 0 : blockIds.map((blockId) => {
4061
+ return /* @__PURE__ */ React12.createElement("div", { className: "notion-gallery" }, /* @__PURE__ */ React12.createElement("div", { className: "notion-gallery-view" }, /* @__PURE__ */ React12.createElement("div", { className: `notion-gallery-grid ${`notion-gallery-grid-size-${gallery_cover_size}`}` }, blockIds == null ? void 0 : blockIds.map((blockId) => {
4063
4062
  var _a, _b;
4064
4063
  const block = (_a = recordMap.block[blockId]) == null ? void 0 : _a.value;
4065
4064
  if (!block)
@@ -4197,7 +4196,7 @@ function Table({ blockIds = [], collection, collectionView, width, padding }) {
4197
4196
  "div",
4198
4197
  {
4199
4198
  key: p.property,
4200
- className: cs("notion-table-cell", `notion-table-cell-${schema.type}`),
4199
+ className: `notion-table-cell ${`notion-table-cell-${schema.type}`}`,
4201
4200
  style
4202
4201
  },
4203
4202
  /* @__PURE__ */ React14.createElement(
@@ -4319,7 +4318,7 @@ var CollectionViewBlock = ({ block, className }) => {
4319
4318
  block.format = __spreadProps(__spreadValues({}, block.format), {
4320
4319
  page_icon: collection.icon
4321
4320
  });
4322
- return /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("div", null, viewIds.length > 1 && showCollectionViewDropdown && /* @__PURE__ */ React16.createElement(CollectionViewTabs, { collectionViewId, viewIds, onChangeView })), showTitle && /* @__PURE__ */ React16.createElement("div", { className: "notion-collection-header" }, /* @__PURE__ */ React16.createElement("div", { className: "notion-collection-header-title" }, /* @__PURE__ */ React16.createElement(PageIcon, { block, className: "notion-page-title-icon", hideDefaultIcon: true }), title))), /* @__PURE__ */ React16.createElement("div", { className: cs("notion-collection", className) }, /* @__PURE__ */ React16.createElement(
4321
+ return /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("div", null, viewIds.length > 1 && showCollectionViewDropdown && /* @__PURE__ */ React16.createElement(CollectionViewTabs, { collectionViewId, viewIds, onChangeView })), showTitle && /* @__PURE__ */ React16.createElement("div", { className: "notion-collection-header" }, /* @__PURE__ */ React16.createElement("div", { className: "notion-collection-header-title" }, /* @__PURE__ */ React16.createElement(PageIcon, { block, className: "notion-page-title-icon", hideDefaultIcon: true }), title))), /* @__PURE__ */ React16.createElement("div", { className: `notion-collection ${className || ""}` }, /* @__PURE__ */ React16.createElement(
4323
4322
  CollectionView,
4324
4323
  {
4325
4324
  collection,
@@ -4339,10 +4338,8 @@ var CollectionViewTabs = ({ collectionViewId, viewIds, onChangeView }) => {
4339
4338
  {
4340
4339
  onClick: () => onChangeView(viewId),
4341
4340
  key: viewId,
4342
- className: cs(
4343
- "notion-collection-view-tabs-content-item",
4344
- collectionViewId === viewId && "notion-collection-view-tabs-content-item-active"
4345
- )
4341
+ className: `notion-collection-view-tabs-content-item
4342
+ ${collectionViewId === viewId && "notion-collection-view-tabs-content-item-active"}`
4346
4343
  },
4347
4344
  /* @__PURE__ */ React16.createElement(CollectionViewColumnDesc, { collectionView: (_a = recordMap.collection_view[viewId]) == null ? void 0 : _a.value })
4348
4345
  );
@@ -4352,7 +4349,7 @@ var CollectionViewColumnDesc = (_a) => {
4352
4349
  var _b = _a, { collectionView, className, children } = _b, rest = __objRest(_b, ["collectionView", "className", "children"]);
4353
4350
  const { type } = collectionView;
4354
4351
  const name = collectionView.name || `${type[0].toUpperCase()}${type.slice(1)} view`;
4355
- return /* @__PURE__ */ React16.createElement("div", __spreadValues({ className: cs("notion-collection-view-type", className) }, rest), /* @__PURE__ */ React16.createElement(CollectionViewIcon, { className: "notion-collection-view-type-icon", type }), /* @__PURE__ */ React16.createElement("span", { className: "notion-collection-view-type-title" }, name), children);
4352
+ return /* @__PURE__ */ React16.createElement("div", __spreadValues({ className: `notion-collection-view-type ${className || ""}` }, rest), /* @__PURE__ */ React16.createElement(CollectionViewIcon, { className: "notion-collection-view-type-icon", type }), /* @__PURE__ */ React16.createElement("span", { className: "notion-collection-view-type-title" }, name), children);
4356
4353
  };
4357
4354
  export {
4358
4355
  Collection,