@texonom/nreact 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/build/.tsbuildinfo +1 -1
  2. package/build/{chunk-HJGIONX2.js → chunk-72RHNPWF.js} +56 -107
  3. package/build/{chunk-LB5ZQ7L5.js → chunk-P7HX4BAT.js} +2 -3
  4. package/build/dev/{chunk-NVAEYUJK.js → chunk-64UJZ76E.js} +57 -108
  5. package/build/dev/{chunk-NVAEYUJK.js.map → chunk-64UJZ76E.js.map} +1 -1
  6. package/build/dev/{chunk-CWNFRR32.js → chunk-ABDRHJEI.js} +3 -4
  7. package/build/dev/{chunk-CWNFRR32.js.map → chunk-ABDRHJEI.js.map} +1 -1
  8. package/build/dev/{chunk-JX5CEG3A.js → chunk-OAIRL2FN.js} +1 -1
  9. package/build/dev/{chunk-4XJBBVRZ.js → chunk-SEA7YL2O.js} +57 -108
  10. package/build/dev/chunk-SEA7YL2O.js.map +1 -0
  11. package/build/dev/index.js +42 -55
  12. package/build/dev/index.js.map +1 -1
  13. package/build/dev/third-party/code.js +3 -4
  14. package/build/dev/third-party/code.js.map +1 -1
  15. package/build/dev/third-party/collection.js +137 -113
  16. package/build/dev/third-party/collection.js.map +1 -1
  17. package/build/dev/third-party/equation.js +3 -4
  18. package/build/dev/third-party/equation.js.map +1 -1
  19. package/build/dev/third-party/modal.js +1 -1
  20. package/build/dev/third-party/pdf.js +1 -1
  21. package/build/index.js +42 -55
  22. package/build/next.d.ts.map +1 -1
  23. package/build/third-party/code.js +3 -4
  24. package/build/third-party/collection.js +137 -113
  25. package/build/third-party/equation.js +3 -4
  26. package/build/third-party/modal.js +1 -1
  27. package/build/third-party/pdf.js +1 -1
  28. package/build/utils.d.ts.map +1 -1
  29. package/package.json +13 -13
  30. package/build/chunk-26XPY26R.js +0 -1364
  31. package/build/chunk-3GUXT4PT.js +0 -1386
  32. package/build/chunk-3R4ITV3N.js +0 -1358
  33. package/build/chunk-626ANHMX.js +0 -4519
  34. package/build/chunk-BYOAK6PN.js +0 -1362
  35. package/build/chunk-E7SOYYOP.js +0 -1364
  36. package/build/chunk-GDUEQGYI.js +0 -1373
  37. package/build/chunk-INDII3MG.js +0 -1346
  38. package/build/chunk-LAZZ76RR.js +0 -142
  39. package/build/chunk-NH6F5YHO.js +0 -90
  40. package/build/chunk-THLNCQWF.js +0 -1364
  41. package/build/chunk-YEVPS76Z.js +0 -1355
  42. package/build/dev/chunk-2LHADYU7.js +0 -1365
  43. package/build/dev/chunk-2LHADYU7.js.map +0 -1
  44. package/build/dev/chunk-4XJBBVRZ.js.map +0 -1
  45. package/build/dev/chunk-5DDQTDIS.js +0 -1365
  46. package/build/dev/chunk-5DDQTDIS.js.map +0 -1
  47. package/build/dev/chunk-73CYHEZ6.js +0 -1374
  48. package/build/dev/chunk-73CYHEZ6.js.map +0 -1
  49. package/build/dev/chunk-7R2ZX3WF.js +0 -1359
  50. package/build/dev/chunk-7R2ZX3WF.js.map +0 -1
  51. package/build/dev/chunk-CRSVOVI5.js +0 -1387
  52. package/build/dev/chunk-CRSVOVI5.js.map +0 -1
  53. package/build/dev/chunk-EDEWD2W7.js +0 -1363
  54. package/build/dev/chunk-EDEWD2W7.js.map +0 -1
  55. package/build/dev/chunk-O5ZUWUSN.js +0 -158
  56. package/build/dev/chunk-O5ZUWUSN.js.map +0 -1
  57. package/build/dev/chunk-QAD7OWKG.js +0 -91
  58. package/build/dev/chunk-QAD7OWKG.js.map +0 -1
  59. package/build/dev/chunk-QHYYIFZL.js +0 -1365
  60. package/build/dev/chunk-QHYYIFZL.js.map +0 -1
  61. package/build/dev/chunk-QN4Z7A2J.js +0 -1359
  62. package/build/dev/chunk-QN4Z7A2J.js.map +0 -1
  63. package/build/dev/chunk-RO7JTBZN.js +0 -1356
  64. package/build/dev/chunk-RO7JTBZN.js.map +0 -1
  65. package/build/dev/chunk-UE6LH4B3.js +0 -1347
  66. package/build/dev/chunk-UE6LH4B3.js.map +0 -1
  67. package/build/dev/chunk-VHTSGS2P.js +0 -1365
  68. package/build/dev/chunk-VHTSGS2P.js.map +0 -1
  69. package/build/dev/chunk-VZCA75U7.js +0 -143
  70. package/build/dev/chunk-VZCA75U7.js.map +0 -1
  71. package/build/dev/chunk-XJQFUGEP.js +0 -4520
  72. package/build/dev/chunk-XJQFUGEP.js.map +0 -1
  73. package/build/map-image-url.d.ts +0 -3
  74. package/build/map-image-url.d.ts.map +0 -1
  75. package/build/map-page-url.d.ts +0 -2
  76. package/build/map-page-url.d.ts.map +0 -1
  77. /package/build/{chunk-723T62SD.js → chunk-C6BUIPAM.js} +0 -0
  78. /package/build/dev/{chunk-JX5CEG3A.js.map → chunk-OAIRL2FN.js.map} +0 -0
@@ -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 { 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 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 ${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 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,EAAE,MAC7C,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,EAAE,MAC5C,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,KAAK;AAAA,EAEd;AAEA,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,uBAAuB,aAAa,EAAE,MACpD,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,IAAI;AAAA,MACzC;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,EAAE,MAC9C,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,EAAE;AAAA,QACZ,WAAW;AAAA,iEACoC,QAAQ,WAAW;AAAA,sBAC9D,kBAAkB,MAAM,sCAAsC;AAAA;AAAA,MAClE,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,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,CAAC;AAEjF,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,aAAa;AACvD,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,OAAO,IAAI,aAAa,EAAE,MAC7D,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,sBAAsB;AAAA,wBAC/D,YAAY,yBAAyB,qBAAqB;AAAA,wBAC1D,gBAAgB,+BAA+B,2BAA2B;AAAA;AAAA,wBAE1E,mBAAmB,mBAAmB;AAAA,wBACtC,mBAAmB,mBAAmB;AAAA,wBACtC,aAAa;AAAA;AAAA,YAChB,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,+BAA+B;AAAA,4BAC3C,UAAU,6BAA6B;AAAA;AAAA,cAC3C,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;AAAA,kBAEP,mBAAmB,mBAAmB;AAAA,kBACtC,mBAAmB,mBAAmB;AAAA,kBACtC,OAAO;AAAA,kBACP,aAAa,EAAE;AAAA,kBACf,aAAa;AAAA;AAAA,YACjB,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,UAAU,EAAE,IAAI,OAAO;AAAA,YAC9E,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,EAAE;AAG3E,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,WAAW;AAEhF,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAE5B,YAAM,eAAe,GAAG,QAAQ,oBAAoB;AAAA,UAChD,QAAQ,oBAAoB;AAAA,UAC5B,QAAQ,oBAAoB;AAAA,UAC5B,cAAc,UAAU,UAAU,EAAE;AAAA,UACpC,gBAAgB;AAAA,UAChB,OAAO;AAEX,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,EAAE,IAAI,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,OAAO,MAC1C,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,OAAO,IAAI;AAAA,IAEhD,KAAK,QAAQ;AACX,UAAI,CAAC,MAAM,cAAc,GAAC,WAAM,YAAN,mBAAe;AAAQ,eAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,gBAAgB,OAAO,MAAI,MAAM;AAEzG,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,eAAe,cAAc,UAAU,UAAU,EAAE,IAAI,OAAO,QAC3E,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,OAAO,MAAK,OAAQ,IAEnE,gBAAAA,OAAA,cAAC,QAAG,OAAOG,QAAO,WAAW,oCAAoC,OAAO,MACrE,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,OAAO,MAAK,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,CAAC,MAAM,WAAW,QAAQ,KAAK;AACxE,YAAM,QAAQ,EAAE,MAAM;AAEtB,aACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,iBAAiB,OAAO,IAAI,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,UAAU,EAAE,IAAI,OAAO,MACpF,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,WAAW,KAAK,IAAI,OAAO;AAAA;AAAA,UAC7G,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,KAAK;AAAA,UAEd;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,WAAW,EAAE,IAAI,OAAO;AAAA,UAC1G,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,OAAO,MAC1C,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,UAAU,EAAE,IAAI,OAAO,MACxF,IAAI,IAAI,aACP,gBAAAA,OAAA,cAAC,OAAE,KAAK,QAAQ,IAAI,MAAM,IAAIC,UAAS,QAAQ,EAAE,CAAC,IAAI,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,OAAO,MACrC,gBAAAA,OAAA,cAAC,SAAI,WAAU,uBACb,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,SAAkB,WAAsB,GAE7D,gBAAAA,OAAA,cAAC,SAAI,WAAW,qBAAqB,aAAa,sBAAsB,MACtE,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,OAAO,MAAK,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,cAAc,KAAK,MAAM,WAAW,cAAc,KACpG,gBAAAA,OAAA,cAAC,aAAU,OAAO,aAAa,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,uBAAuB,OAAO,MAC9C,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,eAAe,EAAE,IAAI,OAAO,MAChG,MAAM,IAAI,YAAU;AAppB/B,YAAAI,KAAAC,KAAAC;AAqpBY,cAAM,SAAQF,MAAA,uCAAY,YAAZ,gBAAAA,IAAqB;AAEnC,eACE,gBAAAJ,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW,QAAQ,UAAU,KAAK,KAAK;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;;;ADxqBO,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
+ {"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 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 ${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 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,EAAE,MAC7C,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,EAAE,MAC5C,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,WAAY,QAAO;AACxB,MAAI;AAEJ,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,WAAW,GAAG;AAClC,aAAS,IAAI;AAAA,EACf,SAAS,KAAK;AAAA,EAEd;AAEA,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,uBAAuB,aAAa,EAAE,MACpD,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,IAAI;AAAA,MACzC;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,SAAU;AAE/C,YAAI,CAAC,iBAAkB,oBAAmB,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,OAAQ;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,SAAU,QAAO;AAEtB,SACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,gBAAgB,aAAa,EAAE,MAC9C,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,EAAE;AAAA,QACZ,WAAW;AAAA,iEACoC,QAAQ,WAAW;AAAA,sBAC9D,kBAAkB,MAAM,sCAAsC;AAAA;AAAA,MAClE,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,KAAuC,SAAQ,KAAK,8BAA8B,MAAM,EAAE;AAE9F,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB;AACzB,QAAM,sBAAqB,gEAAkB,WAAlB,mBAA0B,mCAA1B,mBAA0D;AAErF,MAAI,CAAC,mBAAoB,QAAO;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,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,MAAO,QAAO;AAInB,MAAI,UAAU,KAAK,MAAM,SAAS,mBAAmB;AACnD,UAAM,aAAa;AACnB,eAAW,OAAO;AAAA,EACpB;AAEA,QAAM,UAAU,cAAc,iBAAiB,gBAAgBC,UAAS,MAAM,EAAE,CAAC;AAEjF,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AAAA;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,aAAa;AACvD,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,OAAO,IAAI,aAAa,EAAE,MAC7D,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,sBAAsB;AAAA,wBAC/D,YAAY,yBAAyB,qBAAqB;AAAA,wBAC1D,gBAAgB,+BAA+B,2BAA2B;AAAA;AAAA,wBAE1E,mBAAmB,mBAAmB;AAAA,wBACtC,mBAAmB,mBAAmB;AAAA,wBACtC,aAAa;AAAA;AAAA,YAChB,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,+BAA+B;AAAA,4BAC3C,UAAU,6BAA6B;AAAA;AAAA,cAC3C,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;AAAA,kBAEP,mBAAmB,mBAAmB;AAAA,kBACtC,mBAAmB,mBAAmB;AAAA,kBACtC,OAAO;AAAA,kBACP,aAAa,EAAE;AAAA,kBACf,aAAa;AAAA;AAAA,YACjB,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,UAAU,EAAE,IAAI,OAAO;AAAA,YAC9E,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,UACzB,gBAAAA,OAAA,cAAC,aAAU,OAAc;AAAA,QAC3B;AAAA,MAEJ;AAAA,IAEF,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK,kBAAkB;AACrB,UAAI,CAAC,MAAM,WAAY,QAAO;AAE9B,YAAM,cAAa,WAAM,WAAN,mBAAc;AACjC,YAAM,KAAKC,UAAS,MAAM,EAAE;AAC5B,YAAM,QAAQ,eAAe,MAAM,WAAW,KAAK,KAAK,iBAAiB,EAAE;AAG3E,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,OAAW,oBAAmB,mBAAmB,WAAW;AAEhF,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OAAO,MAAM,SAAS;AAE5B,YAAM,eAAe,GAAG,QAAQ,oBAAoB;AAAA,UAChD,QAAQ,oBAAoB;AAAA,UAC5B,QAAQ,oBAAoB;AAAA,UAC5B,cAAc,UAAU,UAAU,EAAE;AAAA,UACpC,gBAAgB;AAAA,UAChB,OAAO;AAEX,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,EAAE,IAAI,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,OAAO,MAC1C,gBAAAA,OAAA,cAAC,iBAAS,WAAY,GACtB,gBAAAA,OAAA,cAAC,aAAK,QAAS,CACjB;AAAA,UAEC,QAAO;AAAA,IACd;AAAA,IAEA,KAAK;AACH,aAAO,gBAAAA,OAAA,cAAC,QAAG,WAAW,aAAa,OAAO,IAAI;AAAA,IAEhD,KAAK,QAAQ;AACX,UAAI,CAAC,MAAM,cAAc,GAAC,WAAM,YAAN,mBAAe,QAAQ,QAAO,gBAAAA,OAAA,cAAC,SAAI,WAAW,gBAAgB,OAAO,MAAI,MAAM;AAEzG,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,eAAe,cAAc,UAAU,UAAU,EAAE,IAAI,OAAO,QAC3E,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;AAAA,IAEL,KAAK,iBAAiB;AACpB,YAAM,WAAW,CAAC,SAA0BG,WAC1C,MAAM,SAAS,kBACb,gBAAAH,OAAA,cAAC,QAAG,WAAW,gCAAgC,OAAO,MAAK,OAAQ,IAEnE,gBAAAA,OAAA,cAAC,QAAG,OAAOG,QAAO,WAAW,oCAAoC,OAAO,MACrE,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;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;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,OAAO,MAAK,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,CAAC,MAAM,WAAW,QAAQ,KAAK;AACxE,YAAM,QAAQ,EAAE,MAAM;AAEtB,aACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,iBAAiB,OAAO,IAAI,SACzC,QACH,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,iBAAgB,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK,SAAS;AACZ,UAAI,CAAC,MAAM,WAAY,QAAO;AAE9B,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,gBAAW,WAAW,gBAAgB,cAAc,UAAU,UAAU,EAAE,IAAI,OAAO,MACpF,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,QAAS,QAAO,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,WAAW,KAAK,IAAI,OAAO;AAAA;AAAA,UAC7G,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,WAAY,QAAO;AAE9B,YAAM,OAAO,MAAM,WAAW;AAC9B,UAAI,CAAC,QAAQ,GAAC,UAAK,CAAC,MAAN,mBAAU,IAAI,QAAO;AAEnC,UAAI,QAAQ,eAAe,MAAM,WAAW,KAAK;AACjD,UAAI,CAAC,MAAO,SAAQ,eAAe,IAAI;AAEvC,UAAI;AACF,YAAI,MAAM,WAAW,MAAM;AACzB,cAAI;AACF,kBAAM,MAAM,IAAI,IAAI,KAAK;AACzB,oBAAQ,IAAI;AAAA,UACd,SAAS,KAAK;AAAA,UAEd;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,WAAW,EAAE,IAAI,OAAO;AAAA,UAC1G,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,OAAO,MAC1C,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,KAAM,QAAO;AAElB,YAAM,MAAM,uBAAuB,MAAM,SAAS;AAClD,YAAM,cAAa,WAAM,WAAN,mBAAc;AAEjC,aACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,4BAA4B,cAAc,UAAU,UAAU,EAAE,IAAI,OAAO,MACxF,IAAI,IAAI,aACP,gBAAAA,OAAA,cAAC,OAAE,KAAK,QAAQ,IAAI,MAAM,IAAIC,UAAS,QAAQ,EAAE,CAAC,IAAI,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,OAAO,MACrC,gBAAAA,OAAA,cAAC,SAAI,WAAU,uBACb,gBAAAA,OAAA,cAAC,WAAW,UAAX,EAAoB,SAAkB,WAAsB,GAE7D,gBAAAA,OAAA,cAAC,SAAI,WAAW,qBAAqB,aAAa,sBAAsB,MACtE,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,OAAO,MAAK,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,cAAc,KAAK,MAAM,WAAW,cAAc,KACpG,gBAAAA,OAAA,cAAC,aAAU,OAAO,aAAa,CACjC;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE,gBAAAA,OAAA,cAAC,WAAM,WAAW,uBAAuB,OAAO,MAC9C,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,MAAO,QAAO;AAElC,aACE,gBAAAA,OAAA,cAAC,QAAG,WAAW,2BAA2B,mBAAmB,UAAU,eAAe,EAAE,IAAI,OAAO,MAChG,MAAM,IAAI,YAAU;AAppB/B,YAAAI,KAAAC,KAAAC;AAqpBY,cAAM,SAAQF,MAAA,uCAAY,YAAZ,gBAAAA,IAAqB;AAEnC,eACE,gBAAAJ,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW,QAAQ,UAAU,KAAK,KAAK;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;;;ADxqBO,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,KAAuC,SAAQ,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,IAAK,QAAO;AAAA,WACf,QAAQ,IAAK,QAAO;AAAA,WACpB,QAAQ,KAAM,QAAO;AAAA,WACrB,QAAQ,KAAM,QAAO;AAAA,WACrB,QAAQ,KAAM,QAAO;AAAA,MACzB,QAAO;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,13 +1,13 @@
1
1
  import {
2
2
  Text,
3
3
  useNotionContext
4
- } from "../chunk-N6EDMIQD.js";
4
+ } from "../chunk-SEA7YL2O.js";
5
5
  import {
6
6
  __async,
7
7
  __commonJS,
8
8
  __spreadValues,
9
9
  __toESM
10
- } from "../chunk-Q4G2SZRD.js";
10
+ } from "../chunk-OAIRL2FN.js";
11
11
 
12
12
  // ../../node_modules/.pnpm/clipboard-copy@4.0.1/node_modules/clipboard-copy/index.js
13
13
  var require_clipboard_copy = __commonJS({
@@ -44,8 +44,7 @@ var require_clipboard_copy = __commonJS({
44
44
  selection.removeAllRanges();
45
45
  window.document.body.removeChild(span);
46
46
  }
47
- if (!success)
48
- throw makeError();
47
+ if (!success) throw makeError();
49
48
  });
50
49
  }
51
50
  function clipboardCopy(text) {
@@ -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'\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"]}
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"]}