@caring-dev/react-notion-x 7.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/context--HOSgWjH.d.ts +133 -0
- package/build/context-z-0zUcFf.d.ts +136 -0
- package/build/index.d.ts +94 -0
- package/build/index.js +3302 -0
- package/build/index.js.map +1 -0
- package/build/third-party/code.d.ts +10 -0
- package/build/third-party/code.js +2364 -0
- package/build/third-party/code.js.map +1 -0
- package/build/third-party/collection.d.ts +25 -0
- package/build/third-party/collection.js +7221 -0
- package/build/third-party/collection.js.map +1 -0
- package/build/third-party/equation.d.ts +11 -0
- package/build/third-party/equation.js +2234 -0
- package/build/third-party/equation.js.map +1 -0
- package/build/third-party/modal.d.ts +1 -0
- package/build/third-party/modal.js +8 -0
- package/build/third-party/modal.js.map +1 -0
- package/build/third-party/pdf.d.ts +7 -0
- package/build/third-party/pdf.js +16 -0
- package/build/third-party/pdf.js.map +1 -0
- package/package.json +91 -0
- package/readme.md +19 -0
- package/src/styles.css +3603 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/lodash.throttle@4.1.1/node_modules/lodash.throttle/index.js","../src/components/header.tsx","../src/context.tsx","../src/components/asset-wrapper.tsx","../src/utils.ts","../src/components/asset.tsx","../src/components/lazy-image.tsx","../src/components/lazy-image-full.tsx","../src/components/lite-youtube-embed.tsx","../src/components/text.tsx","../src/components/eoi.tsx","../src/icons/type-github.tsx","../src/components/mention-preview-card.tsx","../src/components/graceful-image.tsx","../src/components/link-mention.tsx","../src/components/page-title.tsx","../src/components/page-icon.tsx","../src/icons/default-page-icon.tsx","../src/icons/check.tsx","../src/components/checkbox.tsx","../src/next.tsx","../src/icons/search-icon.tsx","../src/components/search-dialog.tsx","../src/icons/clear-icon.tsx","../src/icons/loading-icon.tsx","../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":["/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","import type * as types from 'notion-types'\nimport { getPageBreadcrumbs } from 'notion-utils'\nimport React from 'react'\nimport { useHotkeys } from 'react-hotkeys-hook'\n\nimport { useNotionContext } from '../context'\nimport { SearchIcon } from '../icons/search-icon'\nimport { type SearchNotionFn } from '../types'\nimport { cs } from '../utils'\nimport { PageIcon } from './page-icon'\nimport { SearchDialog } from './search-dialog'\n\nexport function Header({\n block\n}: {\n block: types.CollectionViewPageBlock | types.PageBlock\n}) {\n return (\n <header className='notion-header'>\n <div className='notion-nav-header'>\n <Breadcrumbs block={block} />\n <Search block={block} />\n </div>\n </header>\n )\n}\n\nexport function Breadcrumbs({\n block,\n rootOnly = false\n}: {\n block: types.Block\n rootOnly?: boolean\n}) {\n const { recordMap, mapPageUrl, components } = useNotionContext()\n\n const breadcrumbs = React.useMemo(() => {\n const tempBreadcrumbs = getPageBreadcrumbs(recordMap, block.id)\n if (rootOnly) {\n return [tempBreadcrumbs?.[0]].filter(Boolean)\n }\n\n return tempBreadcrumbs\n }, [recordMap, block.id, rootOnly])\n\n return (\n <div className='breadcrumbs' key='breadcrumbs'>\n {breadcrumbs?.map((breadcrumb, index: number) => {\n if (!breadcrumb) {\n return null\n }\n\n const pageLinkProps: any = {}\n const componentMap = {\n pageLink: components.PageLink\n }\n\n if (breadcrumb.active) {\n componentMap.pageLink = (props: any) => <div {...props} />\n } else {\n pageLinkProps.href = mapPageUrl(breadcrumb.pageId)\n }\n\n return (\n <React.Fragment key={breadcrumb.pageId}>\n <componentMap.pageLink\n className={cs('breadcrumb', breadcrumb.active && 'active')}\n {...pageLinkProps}\n >\n {breadcrumb.icon && (\n <PageIcon className='icon' block={breadcrumb.block} />\n )}\n\n {breadcrumb.title && (\n <span className='title'>{breadcrumb.title}</span>\n )}\n </componentMap.pageLink>\n\n {index < breadcrumbs.length - 1 && (\n <span className='spacer'>/</span>\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n}\n\nexport function Search({\n block,\n search,\n title = 'Search'\n}: {\n block: types.Block\n search?: SearchNotionFn\n title?: React.ReactNode\n}) {\n const { searchNotion, rootPageId, isShowingSearch, onHideSearch } =\n useNotionContext()\n const onSearchNotion = search || searchNotion\n\n const [isSearchOpen, setIsSearchOpen] = React.useState(isShowingSearch)\n React.useEffect(() => {\n setIsSearchOpen(isShowingSearch)\n }, [isShowingSearch])\n\n const onOpenSearch = React.useCallback(() => {\n setIsSearchOpen(true)\n }, [])\n\n const onCloseSearch = React.useCallback(() => {\n setIsSearchOpen(false)\n if (onHideSearch) {\n onHideSearch()\n }\n }, [onHideSearch])\n\n useHotkeys('cmd+p', (event) => {\n onOpenSearch()\n event.preventDefault()\n event.stopPropagation()\n })\n\n useHotkeys('cmd+k', (event) => {\n onOpenSearch()\n event.preventDefault()\n event.stopPropagation()\n })\n\n const hasSearch = !!onSearchNotion\n\n return (\n <>\n {hasSearch && (\n <div\n role='button'\n className={cs('breadcrumb', 'button', 'notion-search-button')}\n onClick={onOpenSearch}\n >\n <SearchIcon className='searchIcon' />\n\n {title && <span className='title'>{title}</span>}\n </div>\n )}\n\n {isSearchOpen && hasSearch && (\n <SearchDialog\n isOpen={isSearchOpen}\n rootBlockId={rootPageId || block?.id}\n onClose={onCloseSearch}\n searchNotion={onSearchNotion}\n />\n )}\n </>\n )\n}\n","import { type ExtendedRecordMap } from 'notion-types'\nimport { defaultMapImageUrl, defaultMapPageUrl } from 'notion-utils'\nimport React from 'react'\n\nimport { AssetWrapper } from './components/asset-wrapper'\nimport { Checkbox as DefaultCheckbox } from './components/checkbox'\nimport { Header } from './components/header'\nimport { wrapNextImage, wrapNextLegacyImage, wrapNextLink } from './next'\nimport {\n type MapImageUrlFn,\n type MapPageUrlFn,\n type NotionComponents,\n type SearchNotionFn\n} from './types'\n\nexport interface NotionContext {\n recordMap: ExtendedRecordMap\n components: 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 fullPage: boolean\n darkMode: boolean\n previewImages: boolean\n forceCustomImages: boolean\n showCollectionViewDropdown: boolean\n showTableOfContents: boolean\n minTableOfContentsItems: number\n linkTableTitleProperties: boolean\n isLinkCollectionToUrlProperty: boolean\n\n defaultPageIcon?: string | null\n defaultPageCover?: string | null\n defaultPageCoverPosition?: number\n\n zoom: any\n}\n\nexport interface PartialNotionContext {\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 fullPage?: boolean\n darkMode?: boolean\n previewImages?: boolean\n forceCustomImages?: boolean\n showCollectionViewDropdown?: boolean\n linkTableTitleProperties?: boolean\n isLinkCollectionToUrlProperty?: boolean\n\n showTableOfContents?: boolean\n minTableOfContentsItems?: number\n\n defaultPageIcon?: string | null\n defaultPageCover?: string | null\n defaultPageCoverPosition?: number\n\n zoom?: any\n}\n\nfunction DefaultLink(props: any) {\n return <a target='_blank' rel='noopener noreferrer' {...props} />\n}\nconst DefaultLinkMemo = React.memo(DefaultLink)\nfunction DefaultPageLink(props: any) {\n return <a {...props} />\n}\nconst DefaultPageLinkMemo = React.memo(DefaultPageLink)\n\nfunction DefaultEmbed(props: any) {\n return <AssetWrapper {...props} />\n}\nconst DefaultHeader = Header\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function dummyLink({ href, rel, target, title, ...rest }: any) {\n return <span {...rest} />\n}\n\nconst dummyComponent = (name: string) => () => {\n console.warn(\n `Warning: using empty component \"${name}\" (you should override this in NotionRenderer.components)`\n )\n\n return null\n}\n\n// TODO: should we use React.memo here?\n// https://reactjs.org/docs/react-api.html#reactmemo\nconst dummyOverrideFn = (_: any, defaultValueFn: () => React.ReactNode) =>\n defaultValueFn()\n\nconst defaultComponents: NotionComponents = {\n Image: null, // disable custom images by default\n Link: DefaultLinkMemo,\n PageLink: DefaultPageLinkMemo,\n Checkbox: DefaultCheckbox,\n Callout: undefined, // use the built-in callout rendering by default\n\n Code: dummyComponent('Code'),\n Equation: dummyComponent('Equation'),\n\n Collection: dummyComponent('Collection'),\n Property: undefined, // use the built-in property rendering by default\n\n propertyTextValue: dummyOverrideFn,\n propertySelectValue: dummyOverrideFn,\n propertyRelationValue: dummyOverrideFn,\n propertyFormulaValue: dummyOverrideFn,\n propertyTitleValue: dummyOverrideFn,\n propertyPersonValue: dummyOverrideFn,\n propertyFileValue: dummyOverrideFn,\n propertyCheckboxValue: dummyOverrideFn,\n propertyUrlValue: dummyOverrideFn,\n propertyEmailValue: dummyOverrideFn,\n propertyPhoneNumberValue: dummyOverrideFn,\n propertyNumberValue: dummyOverrideFn,\n propertyLastEditedTimeValue: dummyOverrideFn,\n propertyCreatedTimeValue: dummyOverrideFn,\n propertyDateValue: dummyOverrideFn,\n propertyAutoIncrementIdValue: dummyOverrideFn,\n\n Pdf: dummyComponent('Pdf'),\n Tweet: dummyComponent('Tweet'),\n Modal: dummyComponent('Modal'),\n\n Header: DefaultHeader,\n Embed: DefaultEmbed\n}\n\nconst defaultNotionContext: NotionContext = {\n recordMap: {\n block: {},\n collection: {},\n collection_view: {},\n collection_query: {},\n notion_user: {},\n signed_urls: {}\n },\n\n components: defaultComponents,\n\n mapPageUrl: defaultMapPageUrl(),\n mapImageUrl: defaultMapImageUrl,\n searchNotion: undefined,\n isShowingSearch: false,\n onHideSearch: undefined,\n\n fullPage: false,\n darkMode: false,\n previewImages: false,\n forceCustomImages: false,\n showCollectionViewDropdown: true,\n linkTableTitleProperties: true,\n isLinkCollectionToUrlProperty: false,\n\n showTableOfContents: false,\n minTableOfContentsItems: 3,\n\n defaultPageIcon: null,\n defaultPageCover: null,\n defaultPageCoverPosition: 0.5,\n\n zoom: null\n}\n\nconst ctx = React.createContext<NotionContext>(defaultNotionContext)\n\nexport function NotionContextProvider({\n components: themeComponents = {},\n children,\n mapPageUrl,\n mapImageUrl,\n rootPageId,\n ...rest\n}: PartialNotionContext & {\n children?: React.ReactNode\n}) {\n for (const key of Object.keys(rest)) {\n if ((rest as any)[key] === undefined) {\n delete (rest as any)[key]\n }\n }\n\n const wrappedThemeComponents = React.useMemo(\n () => ({\n ...themeComponents\n }),\n [themeComponents]\n )\n\n if (\n wrappedThemeComponents.nextImage &&\n wrappedThemeComponents.nextLegacyImage\n ) {\n console.warn(\n 'You should not pass both nextImage and nextLegacyImage. Only nextImage component will be used.'\n )\n wrappedThemeComponents.Image = wrapNextImage(themeComponents.nextImage)\n } else if (wrappedThemeComponents.nextImage) {\n wrappedThemeComponents.Image = wrapNextImage(themeComponents.nextImage)\n } else if (wrappedThemeComponents.nextLegacyImage) {\n wrappedThemeComponents.Image = wrapNextLegacyImage(\n themeComponents.nextLegacyImage\n )\n }\n\n if (wrappedThemeComponents.nextLink) {\n wrappedThemeComponents.nextLink = wrapNextLink(themeComponents.nextLink)\n }\n\n // ensure the user can't override default components with falsy values\n // since it would result in very difficult-to-debug react errors\n for (const key of Object.keys(wrappedThemeComponents)) {\n if (!(wrappedThemeComponents as any)[key]) {\n delete (wrappedThemeComponents as any)[key]\n }\n }\n\n const value = React.useMemo(\n () => ({\n ...defaultNotionContext,\n ...rest,\n rootPageId,\n mapPageUrl: mapPageUrl ?? defaultMapPageUrl(rootPageId),\n mapImageUrl: mapImageUrl ?? defaultMapImageUrl,\n components: { ...defaultComponents, ...wrappedThemeComponents }\n }),\n [mapImageUrl, mapPageUrl, wrappedThemeComponents, rootPageId, rest]\n )\n\n return <ctx.Provider value={value}>{children}</ctx.Provider>\n}\n\nexport const NotionContextConsumer = ctx.Consumer\n\nexport const useNotionContext = (): NotionContext => {\n return React.useContext(ctx)\n}\n","import type React from 'react'\nimport { type BaseContentBlock, type Block } from 'notion-types'\nimport { parsePageId } from 'notion-utils'\n\nimport { useNotionContext } from '..'\nimport { cs } from '../utils'\nimport { Asset } from './asset'\nimport { Text } from './text'\n\nconst urlStyle = { width: '100%' }\n\nexport function AssetWrapper({\n blockId,\n block\n}: {\n blockId: string\n block: Block\n}) {\n const value = block as BaseContentBlock\n const { components, mapPageUrl, rootDomain, zoom } = useNotionContext()\n\n let isURL = false\n if (block.type === 'image') {\n const caption: string | undefined = value?.properties?.caption?.[0]?.[0]\n if (caption) {\n const id = parsePageId(caption, { uuid: true })\n\n const isPage = caption.charAt(0) === '/' && id\n if (isPage || isValidURL(caption)) {\n isURL = true\n }\n }\n }\n\n const figure = (\n <figure\n className={cs(\n 'notion-asset-wrapper',\n `notion-asset-wrapper-${block.type}`,\n value.format?.block_full_width && 'notion-asset-wrapper-full',\n blockId\n )}\n >\n <Asset block={value} zoomable={zoom && !isURL}>\n {value?.properties?.caption && !isURL && (\n <figcaption className='notion-asset-caption'>\n <Text value={value.properties.caption} block={block} />\n </figcaption>\n )}\n </Asset>\n </figure>\n )\n\n // allows for an image to be a link\n if (isURL) {\n const caption: string | undefined = value?.properties?.caption?.[0]?.[0]\n const id = parsePageId(caption, { uuid: true })\n const isPage = caption?.charAt(0) === '/' && id\n const captionHostname = extractHostname(caption)\n\n return (\n <components.PageLink\n style={urlStyle}\n href={isPage ? mapPageUrl(id) : caption}\n target={\n captionHostname &&\n captionHostname !== rootDomain &&\n !caption?.startsWith('/')\n ? 'blank_'\n : null\n }\n >\n {figure}\n </components.PageLink>\n )\n }\n\n return figure\n}\n\nfunction isValidURL(str: string) {\n // TODO: replace this with a more well-tested package\n const pattern = new RegExp(\n '^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$',\n 'i'\n )\n return !!pattern.test(str)\n}\n\nfunction extractHostname(url?: string) {\n try {\n const hostname = new URL(url!).hostname\n return hostname\n } catch {\n return ''\n }\n}\n","import { type BlockMap } from 'notion-types'\n\nexport { formatDate, formatNotionDateTime, isUrl } from 'notion-utils'\n\nexport const cs = (...classes: Array<string | undefined | false>) =>\n classes.filter((a) => !!a).join(' ')\n\nconst groupBlockContent = (blockMap: BlockMap): string[][] => {\n const output: string[][] = []\n\n let lastType: string | undefined\n let index = -1\n\n for (const id of Object.keys(blockMap)) {\n const blockValue = blockMap[id]?.value\n\n if (blockValue) {\n if (blockValue.content)\n for (const blockId of blockValue.content) {\n const blockType = blockMap[blockId]?.value?.type\n\n if (blockType && blockType !== lastType) {\n index++\n lastType = blockType\n output[index] = []\n }\n\n if (index > -1) {\n output[index]?.push(blockId)\n }\n }\n }\n\n lastType = undefined\n }\n\n return output\n}\n\nexport const getListNumber = (blockId: string, blockMap: BlockMap) => {\n const groups = groupBlockContent(blockMap)\n const group = groups.find((g) => g.includes(blockId))\n\n if (!group) {\n return\n }\n\n const groupIndex = group.indexOf(blockId) + 1\n const startIndex = blockMap[blockId]?.value.format?.list_start_index\n return blockMap[blockId]?.value.type === 'numbered_list'\n ? (startIndex ?? groupIndex)\n : groupIndex\n}\n\nexport const getListNestingLevel = (\n blockId: string,\n blockMap: BlockMap\n): number => {\n let level = 0\n let currentBlockId = blockId\n\n while (true) {\n const parentId = blockMap[currentBlockId]?.value?.parent_id\n\n if (!parentId) break\n\n const parentBlock = blockMap[parentId]?.value\n if (!parentBlock) break\n\n if (parentBlock.type === 'numbered_list') {\n level++\n currentBlockId = parentId\n } else {\n break\n }\n }\n\n return level\n}\n\nexport const getListStyle = (level: number): string => {\n const styles: string[] = ['decimal', 'lower-alpha', 'lower-roman']\n const index = ((level % styles.length) + styles.length) % styles.length\n return styles[index] as string\n}\n\nexport const getHashFragmentValue = (url: string) => {\n return url.includes('#') ? url.replace(/^.+(#.+)$/, '$1') : ''\n}\n\nexport const isBrowser = !!globalThis.window\n\nconst youtubeDomains = new Set([\n 'youtu.be',\n 'youtube.com',\n 'www.youtube.com',\n 'youtube-nocookie.com',\n 'www.youtube-nocookie.com'\n])\n\nexport const getYoutubeId = (url: string): string | null => {\n try {\n const { hostname } = new URL(url)\n if (!youtubeDomains.has(hostname)) {\n return null\n }\n const regExp =\n /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/i\n\n const match = url.match(regExp)\n if (match && match[2]?.length === 11) {\n return match[2]\n }\n } catch {\n // ignore invalid urls\n }\n\n return null\n}\n\nexport const getUrlParams = (\n url: string\n): Record<string, string> | undefined => {\n try {\n const { searchParams } = new URL(url)\n const result: Record<string, string> = {}\n for (const [key, value] of searchParams.entries()) {\n result[key] = value\n }\n\n return result\n } catch {\n // ignore invalid urls\n }\n\n return\n}\n","import type React from 'react'\nimport { type BaseContentBlock, type Block } from 'notion-types'\nimport { getTextContent } from 'notion-utils'\n\nimport { useNotionContext } from '../context'\nimport { getUrlParams, getYoutubeId } from '../utils'\nimport { LazyImage } from './lazy-image'\nimport { LiteYouTubeEmbed } from './lite-youtube-embed'\n\nconst isServer = !globalThis.window\n\nconst supportedAssetTypes = new Set([\n 'replit',\n 'video',\n 'image',\n 'embed',\n 'figma',\n 'typeform',\n 'excalidraw',\n 'maps',\n 'tweet',\n 'pdf',\n 'gist',\n 'codepen',\n 'drive'\n])\n\nexport function Asset({\n block,\n zoomable = true,\n children\n}: {\n block: BaseContentBlock\n children: any\n zoomable?: boolean\n}) {\n const { recordMap, mapImageUrl, components } = useNotionContext()\n\n if (!block || !supportedAssetTypes.has(block.type)) {\n return null\n }\n\n const style: React.CSSProperties = {\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignSelf: 'center',\n width: '100%',\n maxWidth: '100%',\n flexDirection: 'column'\n }\n\n const assetStyle: React.CSSProperties = {}\n // console.log('asset', block)\n\n if (block.format) {\n const {\n block_aspect_ratio,\n block_height,\n block_width,\n block_full_width,\n block_page_width,\n block_preserve_scale\n } = block.format\n\n if (block_full_width || block_page_width) {\n if (block_full_width) {\n style.width = '100vw'\n } else {\n style.width = '100%'\n }\n\n if (block.type === 'video') {\n if (block_height) {\n style.height = block_height\n } else if (block_aspect_ratio) {\n style.paddingBottom = `${block_aspect_ratio * 100}%`\n } else if (block_preserve_scale) {\n style.objectFit = 'contain'\n }\n } else if (block_aspect_ratio && block.type !== 'image') {\n style.paddingBottom = `${block_aspect_ratio * 100}%`\n } else if (block_height) {\n style.height = block_height\n } else if (block_preserve_scale) {\n if (block.type === 'image') {\n style.height = '100%'\n } else {\n // TODO: this is just a guess\n style.paddingBottom = '75%'\n style.minHeight = 100\n }\n }\n } else {\n switch (block.format?.block_alignment) {\n case 'center':\n style.alignSelf = 'center'\n break\n\n case 'left':\n style.alignSelf = 'start'\n break\n\n case 'right':\n style.alignSelf = 'end'\n break\n }\n\n if (block_width) {\n style.width = block_width\n }\n\n if (block_preserve_scale && block.type !== 'image') {\n style.paddingBottom = '50%'\n style.minHeight = 100\n } else {\n if (block_height && block.type !== 'image') {\n style.height = block_height\n }\n }\n }\n\n if (block.type === 'image') {\n assetStyle.objectFit = 'cover'\n } else if (block_preserve_scale) {\n assetStyle.objectFit = 'contain'\n }\n }\n\n let source =\n recordMap.signed_urls?.[block.id] || block.properties?.source?.[0]?.[0]\n\n if (!source) {\n return null\n }\n\n if (block.space_id) {\n const url = new URL(source)\n url.searchParams.set('spaceId', block.space_id)\n source = url.toString()\n }\n\n let content = null\n\n if (block.type === 'tweet') {\n const src = source\n if (!src) return null\n\n const id = src.split('?')?.[0]?.split('/').pop()\n if (!id) return null\n\n content = (\n <div\n style={{\n ...assetStyle,\n maxWidth: 420,\n width: '100%',\n marginLeft: 'auto',\n marginRight: 'auto'\n }}\n >\n <components.Tweet id={id} />\n </div>\n )\n } else if (block.type === 'pdf') {\n style.overflow = 'auto'\n style.background = 'rgb(226, 226, 226)'\n style.display = 'block'\n\n if (!style.padding) {\n style.padding = '8px 16px'\n }\n\n if (!isServer) {\n // console.log('pdf', block, signedUrl)\n content = <components.Pdf file={source} />\n }\n } else if (\n block.type === 'embed' ||\n block.type === 'video' ||\n block.type === 'figma' ||\n block.type === 'typeform' ||\n block.type === 'gist' ||\n block.type === 'maps' ||\n block.type === 'excalidraw' ||\n block.type === 'codepen' ||\n block.type === 'drive' ||\n block.type === 'replit'\n ) {\n if (\n block.type === 'video' &&\n source &&\n !source.includes('youtube') &&\n !source.includes('youtu.be') &&\n !source.includes('vimeo') &&\n !source.includes('wistia') &&\n !source.includes('loom') &&\n !source.includes('videoask') &&\n !source.includes('getcloudapp') &&\n !source.includes('tella')\n ) {\n style.paddingBottom = undefined\n\n content = (\n <video\n playsInline\n controls\n preload='metadata'\n style={assetStyle}\n src={source}\n title={block.type}\n />\n )\n } else {\n let src = block.format?.display_source || source\n\n if (src) {\n const youtubeVideoId: string | null =\n block.type === 'video' ? getYoutubeId(src) : null\n // console.log({ youtubeVideoId, src, format: block.format, style })\n\n if (youtubeVideoId) {\n const params = getUrlParams(src)\n content = (\n <LiteYouTubeEmbed\n id={youtubeVideoId}\n style={assetStyle}\n className='notion-asset-object-fit'\n params={params}\n />\n )\n } else if (block.type === 'gist') {\n if (!src.endsWith('.pibb')) {\n src = `${src}.pibb`\n }\n\n assetStyle.width = '100%'\n style.paddingBottom = '50%'\n\n // TODO: GitHub gists do not resize their height properly\n content = (\n <iframe\n style={assetStyle}\n className='notion-asset-object-fit'\n src={src}\n title='GitHub Gist'\n frameBorder='0'\n // TODO: is this sandbox necessary?\n // sandbox='allow-scripts allow-popups allow-top-navigation-by-user-activation allow-forms allow-same-origin'\n // this is important for perf but react's TS definitions don't seem to like it\n loading='lazy'\n scrolling='auto'\n />\n )\n } else {\n src += block.type === 'typeform' ? '&disable-auto-focus=true' : ''\n\n content = (\n <iframe\n className='notion-asset-object-fit'\n style={assetStyle}\n src={src}\n title={`iframe ${block.type}`}\n frameBorder='0'\n // TODO: is this sandbox necessary?\n // sandbox='allow-scripts allow-popups allow-top-navigation-by-user-activation allow-forms allow-same-origin'\n allowFullScreen\n // this is important for perf but react's TS definitions don't seem to like it\n loading='lazy'\n scrolling='auto'\n />\n )\n }\n }\n }\n } else if (block.type === 'image') {\n // TODO: kind of a hack for now. New file.notion.so images aren't signed correctly\n // Gifs need to use their original file URLs and not the source prop (see #663)\n if (!source.includes('.gif') && source.includes('file.notion.so')) {\n source = block.properties?.source?.[0]?.[0]\n }\n const src = mapImageUrl(source, block as Block)\n const altText = getTextContent(block.properties?.alt_text)\n const caption = getTextContent(block.properties?.caption)\n const alt = altText || caption || 'notion image'\n\n content = (\n <LazyImage\n src={src}\n alt={alt}\n zoomable={zoomable}\n height={style.height as number}\n style={assetStyle}\n />\n )\n }\n\n return (\n <>\n <div style={style}>\n {content}\n {block.type === 'image' && children}\n </div>\n\n {block.type !== 'image' && children}\n </>\n )\n}\n","import { normalizeUrl } from 'notion-utils'\nimport React from 'react'\n\nimport { useNotionContext } from '../context'\nimport { cs } from '../utils'\nimport { ImageState, LazyImageFull } from './lazy-image-full'\n\n/**\n * Progressive, lazy images modeled after Medium's LQIP technique.\n */\nexport function LazyImage({\n src,\n alt,\n className,\n style,\n zoomable = false,\n priority = false,\n height,\n ...rest\n}: {\n src?: string\n alt?: string\n className?: string\n style?: React.CSSProperties\n height?: number\n zoomable?: boolean\n priority?: boolean\n}) {\n const { recordMap, zoom, previewImages, forceCustomImages, components } =\n useNotionContext()\n const zoomRef = React.useRef(zoom ? zoom.clone() : null)\n const previewImage = previewImages\n ? (recordMap?.preview_images?.[src!] ??\n recordMap?.preview_images?.[normalizeUrl(src)])\n : null\n\n const onLoad = React.useCallback(\n (e: any) => {\n if (zoomable && (e.target.src || e.target.srcset)) {\n if (zoomRef.current) {\n ;(zoomRef.current as any).attach(e.target)\n }\n }\n },\n [zoomRef, zoomable]\n )\n\n const attachZoom = React.useCallback(\n (image: any) => {\n if (zoomRef.current && image) {\n ;(zoomRef.current as any).attach(image)\n }\n },\n [zoomRef]\n )\n\n const attachZoomRef = React.useMemo(\n () => (zoomable ? attachZoom : undefined),\n [zoomable, attachZoom]\n )\n\n if (previewImage) {\n const aspectRatio = previewImage.originalHeight / previewImage.originalWidth\n\n if (components.Image) {\n // TODO: could try using next/image onLoadComplete to replace LazyImageFull\n // while retaining our blur implementation\n return (\n <components.Image\n src={src}\n alt={alt}\n style={style}\n className={className}\n width={previewImage.originalWidth}\n height={previewImage.originalHeight}\n blurDataURL={previewImage.dataURIBase64}\n placeholder='blur'\n priority={priority}\n onLoad={onLoad}\n />\n )\n }\n\n return (\n <LazyImageFull src={src!} {...rest} experimentalDecode={true}>\n {({ imageState, ref }) => {\n const isLoaded = imageState === ImageState.LoadSuccess\n const wrapperStyle: React.CSSProperties = {\n width: '100%'\n }\n const imgStyle: React.CSSProperties = {}\n\n if (height) {\n wrapperStyle.height = height\n } else {\n imgStyle.position = 'absolute'\n wrapperStyle.paddingBottom = `${aspectRatio * 100}%`\n }\n\n return (\n <div\n className={cs(\n 'lazy-image-wrapper',\n isLoaded && 'lazy-image-loaded',\n className\n )}\n style={wrapperStyle}\n >\n <img\n className='lazy-image-preview'\n src={previewImage.dataURIBase64}\n alt={alt}\n ref={ref}\n style={style}\n decoding='async'\n />\n\n <img\n className='lazy-image-real'\n src={src}\n alt={alt}\n ref={attachZoomRef}\n style={{\n ...style,\n ...imgStyle\n }}\n width={previewImage.originalWidth}\n height={previewImage.originalHeight}\n decoding='async'\n loading='lazy'\n />\n </div>\n )\n }}\n </LazyImageFull>\n )\n } else {\n // TODO: GracefulImage doesn't seem to support refs, but we'd like to prevent\n // invalid images from loading as error states\n\n /*\n NOTE: Using next/image without a pre-defined width/height is a huge pain in\n the ass. If we have a preview image, then this works fine since we know the\n dimensions ahead of time, but if we don't, then next/image won't display\n anything.\n\n Since next/image is the most common use case for using custom images, and this\n is likely to trip people up, we're disabling non-preview custom images for now.\n\n If you have a use case that is affected by this, please open an issue on github.\n */\n if (components.Image && forceCustomImages) {\n return (\n <components.Image\n src={src}\n alt={alt}\n className={className}\n style={style}\n width={null}\n height={height || null}\n priority={priority}\n onLoad={onLoad}\n />\n )\n }\n\n // Default image element\n return (\n <img\n className={className}\n style={style}\n src={src}\n alt={alt}\n ref={attachZoomRef}\n loading='lazy'\n decoding='async'\n {...rest}\n />\n )\n }\n}\n","//^^ Imported from https://github.com/fpapado/react-lazy-images/\n//^^ Edited by mustaqimarifin https://github.com/mustaqimarifin\n\nimport { Component } from 'react'\nimport { InView } from 'react-intersection-observer'\nimport { ofType, unionize, type UnionOf } from 'unionize'\n\n/**\n * Valid props for LazyImage components\n */\nexport type CommonLazyImageProps = ImageProps & {\n // NOTE: if you add props here, remember to destructure them out of being\n // passed to the children, in the render() callback.\n\n /** Whether to skip checking for viewport and always show the 'actual' component\n * @see https://github.com/fpapado/react-lazy-images/#eager-loading--server-side-rendering-ssr\n */\n loadEagerly?: boolean\n\n /** Subset of props for the IntersectionObserver\n * @see https://github.com/thebuilder/react-intersection-observer#props\n */\n observerProps?: ObserverProps\n\n /** Use the Image Decode API;\n * The call to a new HTML <img> element’s decode() function returns a promise, which,\n * when fulfilled, ensures that the image can be appended to the DOM without causing\n * a decoding delay on the next frame.\n * @see: https://www.chromestatus.com/feature/5637156160667648\n */\n experimentalDecode?: boolean\n\n /** Whether to log out internal state transitions for the component */\n debugActions?: boolean\n\n /** Delay a certain duration before starting to load, in ms.\n * This can help avoid loading images while the user scrolls quickly past them.\n * TODO: naming things.\n */\n debounceDurationMs?: number\n}\n\n/** Valid props for LazyImageFull */\nexport interface LazyImageFullProps extends CommonLazyImageProps {\n /** Children should be either a function or a node */\n children: (args: RenderCallbackArgs) => React.ReactNode\n}\n\n/** Values that the render props take */\nexport interface RenderCallbackArgs {\n imageState: ImageState\n imageProps: ImageProps\n /** When not loading eagerly, a ref to bind to the DOM element. This is needed for the intersection calculation to work. */\n ref?: React.RefObject<any> | ((node?: Element | null) => void)\n}\n\nexport interface ImageProps {\n /** The source of the image to load */\n src: string\n\n /** The source set of the image to load */\n srcSet?: string\n\n /** The alt text description of the image you are loading */\n alt?: string\n\n /** Sizes descriptor */\n sizes?: string\n}\n\n/** Subset of react-intersection-observer's props */\nexport interface ObserverProps {\n /**\n * Margin around the root that expands the area for intersection.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin\n * @default \"50px 0px\"\n * @example Declaration same as CSS margin:\n * `\"10px 20px 30px 40px\"` (top, right, bottom, left).\n */\n rootMargin?: string\n\n /** Number between 0 and 1 indicating the the percentage that should be\n * visible before triggering.\n * @default `0.01`\n */\n threshold?: number\n}\n\n/** States that the image loading can be in.\n * Used together with LazyImageFull render props.\n * External representation of the internal state.\n * */\nexport enum ImageState {\n NotAsked = 'NotAsked',\n Loading = 'Loading',\n LoadSuccess = 'LoadSuccess',\n LoadError = 'LoadError'\n}\n\n/** The component's state */\nconst LazyImageFullState = unionize({\n NotAsked: {},\n Buffering: {},\n // Could try to make it Promise<HTMLImageElement>,\n // but we don't use the element anyway, and we cache promises\n Loading: {},\n LoadSuccess: {},\n LoadError: ofType<{ msg: string }>()\n})\n\ntype LazyImageFullState = UnionOf<typeof LazyImageFullState>\n\n/** Actions that change the component's state.\n * These are not unlike Actions in Redux or, the ones I'm inspired by,\n * Msg in Elm.\n */\nconst Action = unionize({\n ViewChanged: ofType<{ inView: boolean }>(),\n BufferingEnded: {},\n // MAYBE: Load: {},\n LoadSuccess: {},\n LoadError: ofType<{ msg: string }>()\n})\n\ntype Action = UnionOf<typeof Action>\n\n/** Commands (Cmd) describe side-effects as functions that take the instance */\n// FUTURE: These should be tied to giving back a Msg / asynchronoulsy giving a Msg with conditions\ntype Cmd = (instance: LazyImageFull) => void\n\n/** The output from a reducer is the next state and maybe a command */\ntype ReducerResult = {\n nextState: LazyImageFullState\n cmd?: Cmd\n}\n\n///// Commands, things that perform side-effects /////\n/** Get a command that sets a buffering Promise */\nconst getBufferingCmd =\n (durationMs: number): Cmd =>\n (instance) => {\n // Make cancelable buffering Promise\n const bufferingPromise = makeCancelable(delayedPromise(durationMs))\n\n // Kick off promise chain\n bufferingPromise.promise\n .then(() => instance.update(Action.BufferingEnded()))\n .catch(\n (_err) => {}\n //console.log({ isCanceled: _reason.isCanceled })\n )\n\n // Side-effect; set the promise in the cache\n instance.promiseCache.buffering = bufferingPromise\n }\n\n/** Get a command that sets an image loading Promise */\nconst getLoadingCmd =\n (imageProps: ImageProps, experimentalDecode?: boolean): Cmd =>\n (instance) => {\n // Make cancelable loading Promise\n const loadingPromise = makeCancelable(\n loadImage(imageProps, experimentalDecode)\n )\n\n // Kick off request for Image and attach listeners for response\n loadingPromise.promise\n .then((_res) => instance.update(Action.LoadSuccess({})))\n .catch((err) => {\n // If the Loading Promise was canceled, it means we have stopped\n // loading due to unmount, rather than an error.\n if (!err.isCanceled) {\n //@ts-expect-error No need for changing structure\n instance.update(new Action.LoadError({ msg: 'LoadError' }))\n }\n })\n\n // Side-effect; set the promise in the cache\n instance.promiseCache.loading = loadingPromise\n }\n\n/** Command that cancels the buffering Promise */\nconst cancelBufferingCmd: Cmd = (instance) => {\n // Side-effect; cancel the promise in the cache\n // We know this exists if we are in a Buffering state\n instance.promiseCache.buffering?.cancel()\n}\n\n/**\n * Component that preloads the image once it is in the viewport,\n * and then swaps it in. Takes a render prop that allows to specify\n * what is rendered based on the loading state.\n */\nexport class LazyImageFull extends Component<\n LazyImageFullProps,\n LazyImageFullState\n> {\n static displayName = 'LazyImageFull'\n\n /** A central place to store promises.\n * A bit silly, but passing promises directly in the state\n * was giving me weird timing issues. This way we can keep\n * the promises in check, and pick them up from the respective methods.\n * FUTURE: Could pass the relevant key in Buffering and Loading, so\n * that at least we know where they are from a single source.\n */\n promiseCache: {\n [key: string]: CancelablePromise\n } = {}\n\n initialState = LazyImageFullState.NotAsked()\n\n /** Emit the next state based on actions.\n * This is the core of the component!\n */\n static reducer(\n action: Action,\n prevState: LazyImageFullState,\n props: LazyImageFullProps\n ): ReducerResult {\n return Action.match(action, {\n ViewChanged: ({ inView }) => {\n if (inView === true) {\n // If src is not specified, then there is nothing to preload; skip to Loaded state\n if (!props.src) {\n return { nextState: LazyImageFullState.LoadSuccess() } // Error wtf\n } else {\n // If in view, only load something if NotAsked, otherwise leave untouched\n return LazyImageFullState.match(prevState, {\n NotAsked: () => {\n // If debounce is specified, then start buffering\n if (props.debounceDurationMs) {\n return {\n nextState: LazyImageFullState.Buffering(),\n cmd: getBufferingCmd(props.debounceDurationMs)\n }\n } else {\n // If no debounce is specified, then start loading immediately\n return {\n nextState: LazyImageFullState.Loading(),\n cmd: getLoadingCmd(props, props.experimentalDecode)\n }\n }\n },\n // Do nothing in other states\n default: () => ({ nextState: prevState })\n })\n }\n } else {\n // If out of view, cancel if Buffering, otherwise leave untouched\n return LazyImageFullState.match(prevState, {\n Buffering: () => ({\n nextState: LazyImageFullState.NotAsked(),\n cmd: cancelBufferingCmd\n }),\n // Do nothing in other states\n default: () => ({ nextState: prevState })\n })\n }\n },\n // Buffering has ended/succeeded, kick off request for image\n BufferingEnded: () => ({\n nextState: LazyImageFullState.Loading(),\n cmd: getLoadingCmd(props, props.experimentalDecode)\n }),\n // Loading the image succeeded, simple\n LoadSuccess: () => ({ nextState: LazyImageFullState.LoadSuccess() }),\n //@ts-expect-error No need for changing structure\n LoadError: (e) => ({ nextState: new LazyImageFullState.LoadError(e) })\n })\n }\n\n constructor(props: LazyImageFullProps) {\n super(props)\n this.state = this.initialState\n\n // Bind methods\n this.update = this.update.bind(this)\n }\n\n update(action: Action) {\n // Get the next state and any effects\n const { nextState, cmd } = LazyImageFull.reducer(\n action,\n this.state,\n this.props\n )\n\n // Debugging\n if (this.props.debugActions) {\n if (process.env.NODE_ENV === 'production') {\n console.warn(\n 'You are running LazyImage with debugActions=\"true\" in production. This might have performance implications.'\n )\n }\n console.log({ action, prevState: this.state, nextState })\n }\n\n // Actually set the state, and kick off any effects after that\n this.setState(nextState, () => cmd && cmd(this))\n }\n\n override componentWillUnmount() {\n // Clear the Promise Cache\n if (this.promiseCache.loading) {\n // NOTE: This does not cancel the request, only the callback.\n // We we would need fetch() and an AbortHandler for that.\n this.promiseCache.loading.cancel()\n }\n if (this.promiseCache.buffering) {\n this.promiseCache.buffering.cancel()\n }\n this.promiseCache = {}\n }\n\n // Render function\n override render() {\n // This destructuring is silly\n const { children, loadEagerly, observerProps, ...imageProps } = this.props\n\n if (loadEagerly) {\n // If eager, skip the observer and view changing stuff; resolve the imageState as loaded.\n return children({\n // We know that the state tags and the enum match up\n imageState: LazyImageFullState.LoadSuccess().tag as ImageState,\n imageProps\n })\n } else {\n return (\n <InView\n rootMargin='50px 0px'\n // TODO: reconsider threshold\n threshold={0.01}\n {...observerProps}\n onChange={(inView: boolean) =>\n this.update(Action.ViewChanged({ inView }))\n }\n >\n {({ ref }: RenderProps) =>\n children({\n // We know that the state tags and the enum match up, apart\n // from Buffering not being exposed\n imageState:\n this.state.tag === 'Buffering'\n ? ImageState.Loading\n : (this.state.tag as ImageState),\n imageProps,\n ref\n })\n }\n </InView>\n )\n }\n }\n}\n\ninterface RenderProps {\n inView: boolean\n entry: IntersectionObserverEntry | undefined\n ref: React.RefObject<any> | ((node?: Element | null) => void)\n}\n\n///// Utilities /////\n\n/** Promise constructor for loading an image */\nconst loadImage = (\n { src, srcSet, alt, sizes }: ImageProps,\n experimentalDecode = false\n) =>\n new Promise((resolve, reject) => {\n const image = new Image()\n if (srcSet) {\n image.srcset = srcSet\n }\n if (alt) {\n image.alt = alt\n }\n if (sizes) {\n image.sizes = sizes\n }\n image.src = src\n\n /** @see: https://www.chromestatus.com/feature/5637156160667648 */\n if (experimentalDecode && 'decode' in image) {\n return image\n .decode()\n .then(() => resolve(image))\n .catch((err: any) => reject(err))\n }\n\n image.addEventListener('load', resolve)\n image.addEventListener('error', reject)\n })\n\n/** Promise that resolves after a specified number of ms */\nconst delayedPromise = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms))\n\ninterface CancelablePromise {\n promise: Promise<any>\n cancel: () => void\n}\n\n/** Make a Promise \"cancelable\".\n *\n * Rejects with {isCanceled: true} if canceled.\n *\n * The way this works is by wrapping it with internal hasCanceled_ state\n * and checking it before resolving.\n */\nconst makeCancelable = (promise: Promise<any>): CancelablePromise => {\n let hasCanceled_ = false\n\n const wrappedPromise = new Promise<any>((resolve, reject) => {\n void promise.then((val: any) =>\n hasCanceled_ ? reject({ isCanceled: true }) : resolve(val)\n )\n promise.catch((err: any) =>\n hasCanceled_ ? reject({ isCanceled: true }) : reject(err)\n )\n })\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled_ = true\n }\n }\n}\n","import React from 'react'\n\nimport { cs } from '../utils'\n\nconst qs = (params: Record<string, string>) => {\n return Object.keys(params)\n .map(\n (key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key]!)}`\n )\n .join('&')\n}\n\ntype ImageType = 'jpg' | 'webp'\n\nconst resolutions = [120, 320, 480, 640, 1280] as const\ntype VideoResolution = (typeof resolutions)[number]\n\nconst resolutionMap: Record<VideoResolution, string> = {\n 120: 'default',\n 320: 'mqdefault',\n 480: 'hqdefault',\n 640: 'sddefault',\n 1280: 'maxresdefault'\n // 2k, 4k, 8k images don't seem to be available\n // Source: https://longzero.com/articles/youtube-thumbnail-sizes-url/\n}\n\nconst resolutionSizes = resolutions\n .map((resolution) => `(max-width: ${resolution}px) ${resolution}px`)\n .join(', ')\n\nfunction getPosterUrl(\n id: string,\n resolution: VideoResolution = 480,\n type: ImageType = 'jpg'\n): string {\n if (type === 'webp') {\n return `https://i.ytimg.com/vi_webp/${id}/${resolutionMap[resolution]}.webp`\n }\n\n // Default to jpg\n return `https://i.ytimg.com/vi/${id}/${resolutionMap[resolution]}.jpg`\n}\n\nfunction generateSrcSet(id: string, type: ImageType = 'jpg'): string {\n return resolutions\n .map((resolution) => `${getPosterUrl(id, resolution, type)} ${resolution}w`)\n .join(', ')\n}\n\nexport function LiteYouTubeEmbed({\n id,\n defaultPlay = false,\n mute = false,\n lazyImage = false,\n iframeTitle = 'YouTube video',\n alt = 'Video preview',\n params = {},\n adLinksPreconnect = true,\n style,\n className\n}: {\n id: string\n defaultPlay?: boolean\n mute?: boolean\n lazyImage?: boolean\n iframeTitle?: string\n alt?: string\n params?: Record<string, string>\n adLinksPreconnect?: boolean\n style?: React.CSSProperties\n className?: string\n}) {\n const muteParam = mute || defaultPlay ? '1' : '0' // Default play must be muted\n const queryString = React.useMemo(\n () => qs({ autoplay: '1', mute: muteParam, ...params }),\n [muteParam, params]\n )\n\n const ytUrl = 'https://www.youtube-nocookie.com'\n const iframeSrc = `${ytUrl}/embed/${id}?${queryString}`\n\n const [isPreconnected, setIsPreconnected] = React.useState(false)\n const [iframeInitialized, setIframeInitialized] = React.useState(defaultPlay)\n const [isIframeLoaded, setIsIframeLoaded] = React.useState(false)\n\n const warmConnections = React.useCallback(() => {\n if (isPreconnected) return\n setIsPreconnected(true)\n }, [isPreconnected])\n\n const onLoadIframe = React.useCallback(() => {\n if (iframeInitialized) return\n setIframeInitialized(true)\n }, [iframeInitialized])\n\n const onIframeLoaded = React.useCallback(() => {\n setIsIframeLoaded(true)\n }, [])\n\n return (\n <>\n {/*\n 'it seems pretty unlikely for a browser to support preloading but not WebP images'\n Source: https://blog.laurenashpole.com/post/658079409151016960\n */}\n <link\n rel='preload'\n as='image'\n href={getPosterUrl(id)}\n imageSrcSet={generateSrcSet(id, 'webp')}\n imageSizes={resolutionSizes}\n />\n\n {isPreconnected && (\n <>\n {/* The iframe document and most of its subresources come from youtube.com */}\n <link rel='preconnect' href={ytUrl} />\n\n {/* The botguard script is fetched off from google.com */}\n <link rel='preconnect' href='https://www.google.com' />\n </>\n )}\n\n {isPreconnected && adLinksPreconnect && (\n <>\n {/* Not certain if these ad related domains are in the critical path.\n Could verify with domain-specific throttling.\n */}\n <link rel='preconnect' href='https://static.doubleclick.net' />\n <link rel='preconnect' href='https://googleads.g.doubleclick.net' />\n </>\n )}\n\n <div\n onClick={onLoadIframe}\n onPointerOver={warmConnections}\n className={cs(\n 'notion-yt-lite',\n isIframeLoaded && 'notion-yt-loaded',\n iframeInitialized && 'notion-yt-initialized',\n className\n )}\n style={style}\n >\n <picture>\n {/*\n Browsers which don't support srcSet will most likely not support webp too\n These browsers will then just get the default 480 size jpg\n */}\n {resolutions.map((resolution) => (\n <source\n key={resolution}\n srcSet={`${getPosterUrl(id, resolution, 'webp')} ${resolution}w`}\n media={`(max-width: ${resolution}px)`}\n type='image/webp'\n />\n ))}\n\n <img\n src={getPosterUrl(id)}\n className='notion-yt-thumbnail'\n loading={lazyImage ? 'lazy' : undefined}\n alt={alt}\n />\n </picture>\n\n <div className='notion-yt-playbtn' />\n\n {iframeInitialized && (\n <iframe\n width='560'\n height='315'\n frameBorder='0'\n allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture'\n allowFullScreen\n title={iframeTitle}\n src={iframeSrc}\n onLoad={onIframeLoaded}\n />\n )}\n </div>\n </>\n )\n}\n","import {\n type Block,\n type Decoration,\n type ExternalObjectInstance\n} from 'notion-types'\nimport { parsePageId } from 'notion-utils'\nimport React from 'react'\n\nimport { useNotionContext } from '../context'\nimport { formatDate, getHashFragmentValue } from '../utils'\nimport { EOI } from './eoi'\nimport { GracefulImage } from './graceful-image'\nimport { LinkMention, type LinkMentionData } from './link-mention'\nimport { PageTitle } from './page-title'\n\n/**\n * Renders a single piece of Notion text, including basic rich text formatting.\n *\n * These represent the innermost leaf nodes of a Notion subtree.\n *\n * TODO: I think this implementation would be more correct if the reduce just added\n * attributes to the final element's style.\n */\n\nexport function Text({\n value,\n block,\n linkProps,\n linkProtocol\n}: {\n value?: Decoration[]\n block: Block\n linkProps?: any\n linkProtocol?: string\n inline?: boolean // TODO: currently unused\n}) {\n const { components, recordMap, mapPageUrl, mapImageUrl, rootDomain } =\n useNotionContext()\n\n return (\n <React.Fragment>\n {value?.map(([text, decorations], index) => {\n // TODO: sometimes notion shows a max of N items to prevent overflow\n // if (trim && index > 18) {\n // return null\n // }\n\n if (!decorations) {\n if (text === ',') {\n return <span key={index} style={{ padding: '0.5em' }} />\n } else {\n return <React.Fragment key={index}>{text}</React.Fragment>\n }\n }\n\n const formatted = decorations.reduce(\n (element: React.ReactNode, decorator) => {\n switch (decorator[0]) {\n case 'p': {\n // link to an internal block (within the current workspace)\n const blockId = decorator[1]\n const linkedBlock = recordMap.block[blockId]?.value\n if (!linkedBlock) {\n console.log('\"p\" missing block', blockId)\n return null\n }\n\n // console.log('p', blockId)\n\n return (\n <components.PageLink\n className='notion-link'\n href={mapPageUrl(blockId)}\n >\n <PageTitle block={linkedBlock} />\n </components.PageLink>\n )\n }\n\n case '‣': {\n // link to an external block (outside of the current workspace)\n const linkType = decorator[1][0]\n const id = decorator[1][1]\n\n switch (linkType) {\n case 'u': {\n const user = recordMap.notion_user[id]?.value\n\n if (!user) {\n console.log('\"‣\" missing user', id)\n return null\n }\n\n const src = mapImageUrl(user.profile_photo, block)\n if (!src) return null\n\n const name = [user.given_name, user.family_name]\n .filter(Boolean)\n .join(' ')\n\n return (\n <GracefulImage\n className='notion-user'\n src={src}\n alt={name}\n />\n )\n }\n\n default: {\n const linkedBlock = recordMap.block[id]?.value\n\n if (!linkedBlock) {\n console.log('\"‣\" missing block', linkType, id)\n return null\n }\n\n return (\n <components.PageLink\n className='notion-link'\n href={mapPageUrl(id)}\n {...linkProps}\n target='_blank'\n rel='noopener noreferrer'\n >\n <PageTitle block={linkedBlock} />\n </components.PageLink>\n )\n }\n }\n }\n\n case 'h':\n return (\n <span className={`notion-${decorator[1]}`}>{element}</span>\n )\n\n case 'c':\n return <code className='notion-inline-code'>{element}</code>\n\n case 'b':\n return <b>{element}</b>\n\n case 'i':\n return <em>{element}</em>\n\n case 's':\n return <s>{element}</s>\n\n case '_':\n return (\n <span className='notion-inline-underscore'>{element}</span>\n )\n\n case 'e':\n return <components.Equation math={decorator[1]} inline />\n\n case 'm':\n // comment / discussion\n return element //still need to return the base element\n\n case 'a': {\n const v = decorator[1]\n const pathname = v.slice(1)\n const id = parsePageId(pathname, { uuid: true })\n\n if (\n (rootDomain && v.includes(rootDomain)) ||\n (id && v[0] === '/')\n ) {\n const href =\n rootDomain && v.includes(rootDomain)\n ? v\n : `${mapPageUrl(id!)}${getHashFragmentValue(v)}`\n\n return (\n <components.PageLink\n className='notion-link'\n href={href}\n {...linkProps}\n >\n {element}\n </components.PageLink>\n )\n } else {\n return (\n <components.Link\n className='notion-link'\n href={\n linkProtocol\n ? `${linkProtocol}:${decorator[1]}`\n : decorator[1]\n }\n {...linkProps}\n >\n {element}\n </components.Link>\n )\n }\n }\n\n case 'd': {\n const v = decorator[1]\n const type = v?.type\n\n if (type === 'date') {\n // Example: Jul 31, 2010\n const startDate = v.start_date\n\n return formatDate(startDate)\n } else if (type === 'datetime') {\n // Example: Jul 31, 2010 20:00\n const startDate = v.start_date\n const startTime = v.start_time\n\n return `${formatDate(startDate)} ${startTime}`\n } else if (type === 'daterange') {\n // Example: Jul 31, 2010 → Jul 31, 2020\n const startDate = v.start_date\n const endDate = v.end_date!\n\n return `${formatDate(startDate)} → ${formatDate(endDate)}`\n } else {\n return element\n }\n }\n\n case 'u': {\n const userId = decorator[1]\n const user = recordMap.notion_user[userId]?.value\n\n if (!user) {\n console.log('missing user', userId)\n return null\n }\n\n const src = mapImageUrl(user.profile_photo, block)\n if (!src) return null\n\n const name = [user.given_name, user.family_name]\n .filter(Boolean)\n .join(' ')\n\n return (\n <GracefulImage className='notion-user' src={src} alt={name} />\n )\n }\n\n case 'lm': {\n const metadata = decorator[1] as unknown as LinkMentionData\n return <LinkMention metadata={metadata} />\n }\n\n case 'eoi': {\n const blockId = decorator[1]\n const externalObjectInstance = recordMap.block[blockId]\n ?.value as ExternalObjectInstance\n\n return <EOI block={externalObjectInstance} inline={true} />\n }\n\n case 'si':\n return null\n\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.log('unsupported text format', decorator)\n }\n\n return element\n }\n },\n <>{text}</>\n )\n\n return <React.Fragment key={index}>{formatted}</React.Fragment>\n })}\n </React.Fragment>\n )\n}\n","import type React from 'react'\nimport { type Block } from 'notion-types'\n\nimport { useNotionContext } from '../context'\nimport SvgTypeGitHub from '../icons/type-github'\nimport { cs, formatNotionDateTime } from '../utils'\nimport { MentionPreviewCard } from './mention-preview-card'\n\n// External Object Instance\nexport function EOI({\n block,\n inline,\n className\n}: {\n block: Block\n inline?: boolean\n className?: string\n}) {\n const { components } = useNotionContext()\n const { original_url, attributes, domain } = block?.format || {}\n if (!original_url || !attributes) {\n return null\n }\n\n const title = attributes.find((attr: any) => attr.id === 'title')?.values[0]\n let owner = attributes.find((attr: any) => attr.id === 'owner')?.values[0]\n const lastUpdatedAt = attributes.find((attr: any) => attr.id === 'updated_at')\n ?.values[0]\n const lastUpdated = lastUpdatedAt ? formatNotionDateTime(lastUpdatedAt) : null\n let externalImage: React.ReactNode\n\n switch (domain) {\n case 'github.com':\n externalImage = <SvgTypeGitHub />\n if (owner) {\n const parts = owner.split('/')\n owner = parts.at(-1)\n }\n break\n\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.log(\n `Unsupported external_object_instance domain \"${domain}\"`,\n JSON.stringify(block, null, 2)\n )\n }\n\n return null\n }\n\n return (\n <components.Link\n target='_blank'\n rel='noopener noreferrer'\n href={original_url}\n className={cs(\n 'notion-external',\n inline ? 'notion-external-mention' : 'notion-external-block notion-row',\n className\n )}\n >\n {externalImage && (\n <div className='notion-external-image'>{externalImage}</div>\n )}\n\n <div className='notion-external-description'>\n <div className='notion-external-title'>{title}</div>\n {!inline && owner ? (\n <div className='notion-external-block-desc'>\n {owner}\n {lastUpdated && <span> • </span>}\n {lastUpdated && `Updated ${lastUpdated}`}\n </div>\n ) : null}\n {inline && (owner || lastUpdated) && (\n <MentionPreviewCard\n title={title}\n owner={owner}\n lastUpdated={lastUpdated}\n domain={domain}\n externalImage={externalImage}\n />\n )}\n </div>\n </components.Link>\n )\n}\n","import type React from 'react'\n\nfunction SvgTypeGitHub(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg viewBox='0 0 260 260' {...props}>\n <g>\n <path\n d='M128.00106,0 C57.3172926,0 0,57.3066942 0,128.00106 C0,184.555281 36.6761997,232.535542 87.534937,249.460899 C93.9320223,250.645779 96.280588,246.684165 96.280588,243.303333 C96.280588,240.251045 96.1618878,230.167899 96.106777,219.472176 C60.4967585,227.215235 52.9826207,204.369712 52.9826207,204.369712 C47.1599584,189.574598 38.770408,185.640538 38.770408,185.640538 C27.1568785,177.696113 39.6458206,177.859325 39.6458206,177.859325 C52.4993419,178.762293 59.267365,191.04987 59.267365,191.04987 C70.6837675,210.618423 89.2115753,204.961093 96.5158685,201.690482 C97.6647155,193.417512 100.981959,187.77078 104.642583,184.574357 C76.211799,181.33766 46.324819,170.362144 46.324819,121.315702 C46.324819,107.340889 51.3250588,95.9223682 59.5132437,86.9583937 C58.1842268,83.7344152 53.8029229,70.715562 60.7532354,53.0843636 C60.7532354,53.0843636 71.5019501,49.6441813 95.9626412,66.2049595 C106.172967,63.368876 117.123047,61.9465949 128.00106,61.8978432 C138.879073,61.9465949 149.837632,63.368876 160.067033,66.2049595 C184.49805,49.6441813 195.231926,53.0843636 195.231926,53.0843636 C202.199197,70.715562 197.815773,83.7344152 196.486756,86.9583937 C204.694018,95.9223682 209.660343,107.340889 209.660343,121.315702 C209.660343,170.478725 179.716133,181.303747 151.213281,184.472614 C155.80443,188.444828 159.895342,196.234518 159.895342,208.176593 C159.895342,225.303317 159.746968,239.087361 159.746968,243.303333 C159.746968,246.709601 162.05102,250.70089 168.53925,249.443941 C219.370432,232.499507 256,184.536204 256,128.00106 C256,57.3066942 198.691187,0 128.00106,0 Z M47.9405593,182.340212 C47.6586465,182.976105 46.6581745,183.166873 45.7467277,182.730227 C44.8183235,182.312656 44.2968914,181.445722 44.5978808,180.80771 C44.8734344,180.152739 45.876026,179.97045 46.8023103,180.409216 C47.7328342,180.826786 48.2627451,181.702199 47.9405593,182.340212 Z M54.2367892,187.958254 C53.6263318,188.524199 52.4329723,188.261363 51.6232682,187.366874 C50.7860088,186.474504 50.6291553,185.281144 51.2480912,184.70672 C51.8776254,184.140775 53.0349512,184.405731 53.8743302,185.298101 C54.7115892,186.201069 54.8748019,187.38595 54.2367892,187.958254 Z M58.5562413,195.146347 C57.7719732,195.691096 56.4895886,195.180261 55.6968417,194.042013 C54.9125733,192.903764 54.9125733,191.538713 55.713799,190.991845 C56.5086651,190.444977 57.7719732,190.936735 58.5753181,192.066505 C59.3574669,193.22383 59.3574669,194.58888 58.5562413,195.146347 Z M65.8613592,203.471174 C65.1597571,204.244846 63.6654083,204.03712 62.5716717,202.981538 C61.4524999,201.94927 61.1409122,200.484596 61.8446341,199.710926 C62.5547146,198.935137 64.0575422,199.15346 65.1597571,200.200564 C66.2704506,201.230712 66.6095936,202.705984 65.8613592,203.471174 Z M75.3025151,206.281542 C74.9930474,207.284134 73.553809,207.739857 72.1039724,207.313809 C70.6562556,206.875043 69.7087748,205.700761 70.0012857,204.687571 C70.302275,203.678621 71.7478721,203.20382 73.2083069,203.659543 C74.6539041,204.09619 75.6035048,205.261994 75.3025151,206.281542 Z M86.046947,207.473627 C86.0829806,208.529209 84.8535871,209.404622 83.3316829,209.4237 C81.8013,209.457614 80.563428,208.603398 80.5464708,207.564772 C80.5464708,206.498591 81.7483088,205.631657 83.2786917,205.606221 C84.8005962,205.576546 86.046947,206.424403 86.046947,207.473627 Z M96.6021471,207.069023 C96.7844366,208.099171 95.7267341,209.156872 94.215428,209.438785 C92.7295577,209.710099 91.3539086,209.074206 91.1652603,208.052538 C90.9808515,206.996955 92.0576306,205.939253 93.5413813,205.66582 C95.054807,205.402984 96.4092596,206.021919 96.6021471,207.069023 Z'\n fill='#161614'\n ></path>\n </g>\n </svg>\n )\n}\n\nexport default SvgTypeGitHub\n","import type React from 'react'\n\nfunction capitalizeFirstLetter(str?: string) {\n if (!str) return ''\n\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function MentionPreviewCard({\n owner,\n lastUpdated,\n externalImage,\n title,\n domain\n}: {\n owner?: string\n lastUpdated?: string | null\n title: string\n domain: string\n externalImage?: React.ReactNode\n}) {\n return (\n <div className='notion-external-subtitle'>\n {externalImage && (\n <div className='notion-preview-card-domain-warp'>\n <div className='notion-preview-card-logo'>{externalImage}</div>\n <div className='notion-preview-card-domain'>\n {capitalizeFirstLetter(domain.split('.')[0])}\n </div>\n </div>\n )}\n <div className='notion-preview-card-title'>{title}</div>\n {owner && (\n <div className='notion-external-subtitle-item'>\n <div className='notion-external-subtitle-item-name'>Owner</div>\n <span className='notion-external-subtitle-item-desc'>{owner}</span>\n </div>\n )}\n {lastUpdated && (\n <div className='notion-external-subtitle-item'>\n <div className='notion-external-subtitle-item-name'>Updated</div>\n <span className='notion-external-subtitle-item-desc'>\n {lastUpdated}\n </span>\n </div>\n )}\n {domain === 'github.com' && (\n <div className='notion-preview-card-github-shields'>\n <img\n src={`https://img.shields.io/github/stars/${owner}/${title}?logo=github`}\n alt=''\n />\n <img\n src={`https://img.shields.io/github/last-commit/${owner}/${title}`}\n alt=''\n />\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Img, type ImgProps } from 'react-image'\n\nimport { isBrowser } from '../utils'\n\nexport function GracefulImage(props: ImgProps) {\n if (isBrowser) {\n return <Img {...props} />\n } else {\n // @ts-expect-error (must use the appropriate subset of props for <img> if using SSR)\n return <img {...props} />\n }\n}\n","import React from 'react'\n\nexport type LinkMentionData = {\n href: string\n title: string\n icon_url: string\n description: string\n link_provider: string\n thumbnail_url: string\n}\n\nexport function LinkMention({ metadata }: { metadata: LinkMentionData }) {\n return (\n <span className='notion-link-mention'>\n <LinkMentionInline metadata={metadata} />\n <LinkMentionPreview metadata={metadata} />\n </span>\n )\n}\n\nfunction LinkMentionInline({ metadata }: { metadata: LinkMentionData }) {\n return (\n <a\n href={metadata.href}\n target='_blank'\n rel='noopener noreferrer'\n className='notion-link-mention-link'\n >\n <img\n className='notion-link-mention-icon'\n src={metadata.icon_url}\n alt={metadata.link_provider}\n />\n {metadata.link_provider && (\n <span className='notion-link-mention-provider'>\n {metadata.link_provider}\n </span>\n )}\n <span className='notion-link-mention-title'>{metadata.title}</span>\n </a>\n )\n}\n\nfunction LinkMentionPreview({ metadata }: { metadata: LinkMentionData }) {\n return (\n <div className='notion-link-mention-preview'>\n <article className='notion-link-mention-card'>\n <img\n className='notion-link-mention-preview-thumbnail'\n src={metadata.thumbnail_url}\n alt={metadata.title}\n referrerPolicy='same-origin'\n />\n <div className='notion-link-mention-preview-content'>\n <p className='notion-link-mention-preview-title'>{metadata.title}</p>\n <p className='notion-link-mention-preview-description'>\n {metadata.description}\n </p>\n <div className='notion-link-mention-preview-footer'>\n <img\n className='notion-link-mention-preview-icon'\n src={metadata.icon_url}\n alt={metadata.link_provider}\n referrerPolicy='same-origin'\n />\n <span className='notion-link-mention-preview-provider'>\n {metadata.link_provider}\n </span>\n </div>\n </div>\n </article>\n </div>\n )\n}\n","import { type Block, type Decoration } from 'notion-types'\nimport { getBlockTitle } from 'notion-utils'\nimport React from 'react'\n\nimport { useNotionContext } from '../context'\nimport { cs } from '../utils'\nimport { PageIcon } from './page-icon'\nimport { Text } from './text'\n\nexport function PageTitleImpl({\n block,\n className,\n defaultIcon,\n ...rest\n}: {\n block: Block\n className?: string\n defaultIcon?: string | null\n}) {\n const { recordMap } = useNotionContext()\n\n if (!block) return null\n\n if (\n block.type === 'collection_view_page' ||\n block.type === 'collection_view'\n ) {\n const title = getBlockTitle(block, recordMap)\n if (!title) {\n return null\n }\n\n const titleDecoration: Decoration[] = [[title]]\n\n return (\n <span className={cs('notion-page-title', className)} {...rest}>\n <PageIcon\n block={block}\n defaultIcon={defaultIcon}\n className='notion-page-title-icon'\n />\n\n <span className='notion-page-title-text'>\n <Text value={titleDecoration} block={block} />\n </span>\n </span>\n )\n }\n\n if (!block.properties?.title) {\n return null\n }\n\n return (\n <span className={cs('notion-page-title', className)} {...rest}>\n <PageIcon\n block={block}\n defaultIcon={defaultIcon}\n className='notion-page-title-icon'\n />\n\n <span className='notion-page-title-text'>\n <Text value={block.properties?.title} block={block} />\n </span>\n </span>\n )\n}\n\nexport const PageTitle = React.memo(PageTitleImpl)\n","import { type Block, type CalloutBlock, type PageBlock } from 'notion-types'\nimport { getBlockIcon, getBlockTitle } from 'notion-utils'\nimport React from 'react'\n\nimport { useNotionContext } from '../context'\nimport { DefaultPageIcon } from '../icons/default-page-icon'\nimport { cs, isUrl } from '../utils'\nimport { LazyImage } from './lazy-image'\n\nconst isIconBlock = (value: Block): value is PageBlock | CalloutBlock => {\n return (\n value.type === 'page' ||\n value.type === 'callout' ||\n value.type === 'collection_view' ||\n value.type === 'collection_view_page'\n )\n}\n\nexport function PageIconImpl({\n block,\n className,\n inline = true,\n hideDefaultIcon = false,\n defaultIcon\n}: {\n block: Block\n className?: string\n inline?: boolean\n hideDefaultIcon?: boolean\n defaultIcon?: string | null\n}) {\n const { mapImageUrl, recordMap, darkMode } = useNotionContext()\n let isImage = false\n let content: any = null\n\n if (isIconBlock(block)) {\n const icon = getBlockIcon(block, recordMap)?.trim() || defaultIcon\n const title = getBlockTitle(block, recordMap)\n\n if (icon && isUrl(icon)) {\n const url = mapImageUrl(icon, block)\n isImage = true\n\n content = (\n <LazyImage\n src={url}\n alt={title || 'page icon'}\n className={cs(className, 'notion-page-icon')}\n />\n )\n } else if (icon && icon.startsWith('/icons/')) {\n const url =\n 'https://www.notion.so' +\n icon +\n '?mode=' +\n (darkMode ? 'dark' : 'light')\n\n content = (\n <LazyImage\n src={url}\n alt={title || 'page icon'}\n className={cs(className, 'notion-page-icon')}\n />\n )\n } else if (!icon) {\n if (!hideDefaultIcon) {\n isImage = true\n content = (\n <DefaultPageIcon\n className={cs(className, 'notion-page-icon')}\n alt={title || 'page icon'}\n />\n )\n }\n } else {\n isImage = false\n content = (\n <span\n className={cs(className, 'notion-page-icon')}\n role='img'\n aria-label={icon}\n >\n {icon}\n </span>\n )\n }\n }\n\n if (!content) {\n return null\n }\n\n return (\n <div\n className={cs(\n inline ? 'notion-page-icon-inline' : 'notion-page-icon-hero',\n isImage ? 'notion-page-icon-image' : 'notion-page-icon-span'\n )}\n >\n {content}\n </div>\n )\n}\n\nexport const PageIcon = React.memo(PageIconImpl)\n","import React from 'react'\n\nexport function DefaultPageIcon(props: any) {\n const { className, ...rest } = props\n return (\n <svg className={className} {...rest} viewBox='0 0 30 30' width='16'>\n <path d='M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z'></path>\n </svg>\n )\n}\n","import type React from 'react'\n\nfunction SvgCheck(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg viewBox='0 0 14 14' {...props}>\n <path d='M5.5 12L14 3.5 12.5 2l-7 7-4-4.003L0 6.499z' />\n </svg>\n )\n}\n\nexport default SvgCheck\n","import type React from 'react'\n\nimport CheckIcon from '../icons/check'\n\nexport function Checkbox({\n isChecked\n}: {\n isChecked: boolean\n blockId?: string\n}) {\n let content = null\n\n if (isChecked) {\n content = (\n <div className='notion-property-checkbox-checked'>\n <CheckIcon />\n </div>\n )\n } else {\n content = <div className='notion-property-checkbox-unchecked' />\n }\n\n return (\n <span className='notion-property notion-property-checkbox'>{content}</span>\n )\n}\n","import React from 'react'\nimport isEqual from 'react-fast-compare'\n\nexport const wrapNextImage = (NextImage: any): React.FC<any> => {\n return React.memo(function ReactNotionXNextImage({\n src,\n alt,\n\n width,\n height,\n\n className,\n\n fill,\n\n ...rest\n }) {\n if (fill === 'undefined') {\n fill = !(width && height)\n }\n\n return (\n <NextImage\n className={className}\n src={src}\n alt={alt}\n width={!fill && width && height ? width : undefined}\n height={!fill && width && height ? height : undefined}\n fill={fill}\n {...rest}\n />\n )\n }, isEqual)\n}\n\nexport const wrapNextLegacyImage = (NextLegacyImage: any): React.FC<any> => {\n return React.memo(function ReactNotionXNextLegacyImage({\n src,\n alt,\n\n width,\n height,\n\n className,\n style,\n\n layout,\n\n ...rest\n }) {\n if (!layout) {\n layout = width && height ? 'intrinsic' : 'fill'\n }\n\n return (\n <NextLegacyImage\n className={className}\n src={src}\n alt={alt}\n width={layout === 'intrinsic' && width}\n height={layout === 'intrinsic' && height}\n objectFit={style?.objectFit}\n objectPosition={style?.objectPosition}\n layout={layout}\n {...rest}\n />\n )\n }, isEqual)\n}\n\nexport function wrapNextLink(NextLink: any) {\n return ({\n href,\n as,\n passHref,\n prefetch,\n replace,\n scroll,\n shallow,\n locale,\n ...linkProps\n }: any) => {\n return (\n <NextLink\n href={href}\n as={as}\n passHref={passHref}\n prefetch={prefetch}\n replace={replace}\n scroll={scroll}\n shallow={shallow}\n locale={locale}\n legacyBehavior\n >\n <a {...linkProps} />\n </NextLink>\n )\n }\n}\n","import React from 'react'\n\nimport { cs } from '../utils'\n\nexport function SearchIcon(props: any) {\n const { className, ...rest } = props\n return (\n <svg className={cs('notion-icon', className)} viewBox='0 0 17 17' {...rest}>\n <path d='M6.78027 13.6729C8.24805 13.6729 9.60156 13.1982 10.709 12.4072L14.875 16.5732C15.0684 16.7666 15.3232 16.8633 15.5957 16.8633C16.167 16.8633 16.5713 16.4238 16.5713 15.8613C16.5713 15.5977 16.4834 15.3516 16.29 15.1582L12.1504 11.0098C13.0205 9.86719 13.5391 8.45215 13.5391 6.91406C13.5391 3.19629 10.498 0.155273 6.78027 0.155273C3.0625 0.155273 0.0214844 3.19629 0.0214844 6.91406C0.0214844 10.6318 3.0625 13.6729 6.78027 13.6729ZM6.78027 12.2139C3.87988 12.2139 1.48047 9.81445 1.48047 6.91406C1.48047 4.01367 3.87988 1.61426 6.78027 1.61426C9.68066 1.61426 12.0801 4.01367 12.0801 6.91406C12.0801 9.81445 9.68066 12.2139 6.78027 12.2139Z'></path>\n </svg>\n )\n}\n","import type * as types from 'notion-types'\nimport throttle from 'lodash.throttle'\nimport { getBlockParentPage, getBlockTitle } from 'notion-utils'\nimport React from 'react'\n\nimport { NotionContextConsumer, NotionContextProvider } from '../context'\nimport { ClearIcon } from '../icons/clear-icon'\nimport { LoadingIcon } from '../icons/loading-icon'\nimport { SearchIcon } from '../icons/search-icon'\nimport { cs } from '../utils'\nimport { PageTitle } from './page-title'\n\nexport class SearchDialog extends React.Component<{\n isOpen: boolean\n rootBlockId: string\n onClose: () => void\n searchNotion: (params: types.SearchParams) => Promise<types.SearchResults>\n}> {\n constructor(props: {\n isOpen: boolean\n rootBlockId: string\n onClose: () => void\n searchNotion: (params: types.SearchParams) => Promise<types.SearchResults>\n }) {\n super(props)\n this._inputRef = React.createRef()\n }\n\n override state: {\n isLoading: boolean\n query: string\n searchResult: any | null\n searchError: types.APIError | null\n } = {\n isLoading: false,\n query: '',\n searchResult: null,\n searchError: null\n }\n\n _inputRef: any\n _search: any\n\n override componentDidMount() {\n this._search = throttle(this._searchImpl.bind(this), 1000)\n void this._warmupSearch()\n }\n\n override render() {\n const { isOpen, onClose } = this.props\n const { isLoading, query, searchResult, searchError } = this.state\n\n const hasQuery = !!query.trim()\n\n return (\n <NotionContextConsumer>\n {(ctx) => {\n const { components, defaultPageIcon, mapPageUrl } = ctx\n\n return (\n <components.Modal\n isOpen={isOpen}\n contentLabel='Search'\n className='notion-search'\n overlayClassName='notion-search-overlay'\n onRequestClose={onClose}\n onAfterOpen={this._onAfterOpen}\n >\n <div className='quickFindMenu'>\n <div className='searchBar'>\n <div className='inlineIcon'>\n {isLoading ? (\n <LoadingIcon className='loadingIcon' />\n ) : (\n <SearchIcon />\n )}\n </div>\n\n <input\n className='searchInput'\n placeholder='Search'\n value={query}\n ref={this._inputRef}\n onChange={this._onChangeQuery}\n />\n\n {query && (\n <div\n role='button'\n className='clearButton'\n onClick={this._onClearQuery}\n >\n <ClearIcon className='clearIcon' />\n </div>\n )}\n </div>\n\n {hasQuery && searchResult && (\n <>\n {searchResult.results.length ? (\n <NotionContextProvider\n {...ctx}\n // TODO\n recordMap={searchResult.recordMap}\n >\n <div className='resultsPane'>\n {searchResult.results.map((result: any) => (\n <components.PageLink\n key={result.id}\n className={cs('result', 'notion-page-link')}\n href={mapPageUrl(\n result.page.id,\n // TODO\n searchResult.recordMap\n )}\n >\n <PageTitle\n block={result.page}\n defaultIcon={defaultPageIcon}\n />\n\n {result.highlight?.html && (\n <div\n className='notion-search-result-highlight'\n dangerouslySetInnerHTML={{\n __html: result.highlight.html\n }}\n />\n )}\n </components.PageLink>\n ))}\n </div>\n\n <footer className='resultsFooter'>\n <div>\n <span className='resultsCount'>\n {searchResult.total}\n </span>\n\n {searchResult.total === 1 ? ' result' : ' results'}\n </div>\n </footer>\n </NotionContextProvider>\n ) : (\n <div className='noResultsPane'>\n <div className='noResults'>No results</div>\n <div className='noResultsDetail'>\n Try different search terms\n </div>\n </div>\n )}\n </>\n )}\n\n {hasQuery && !searchResult && searchError && (\n <div className='noResultsPane'>\n <div className='noResults'>Search error</div>\n </div>\n )}\n </div>\n </components.Modal>\n )\n }}\n </NotionContextConsumer>\n )\n }\n\n _onAfterOpen = () => {\n if (this._inputRef.current) {\n this._inputRef.current.focus()\n }\n }\n\n _onChangeQuery = (e: any) => {\n const query = e.target.value\n this.setState({ query })\n\n if (!query.trim()) {\n this.setState({ isLoading: false, searchResult: null, searchError: null })\n return\n } else {\n this._search()\n }\n }\n\n _onClearQuery = () => {\n this._onChangeQuery({ target: { value: '' } })\n }\n\n _warmupSearch = async () => {\n const { searchNotion, rootBlockId } = this.props\n\n // search is generally implemented as a serverless function wrapping the notion\n // private API, upon opening the search dialog, so we eagerly invoke an empty\n // search in order to warm up the serverless lambda\n await searchNotion({\n query: '',\n ancestorId: rootBlockId\n })\n }\n\n _searchImpl = async () => {\n const { searchNotion, rootBlockId } = this.props\n const { query } = this.state\n\n if (!query.trim()) {\n this.setState({ isLoading: false, searchResult: null, searchError: null })\n return\n }\n\n this.setState({ isLoading: true })\n const result: any = await searchNotion({\n query,\n ancestorId: rootBlockId\n })\n\n console.log('search', query, result)\n\n let searchResult: any = null // TODO\n let searchError: types.APIError | null = null\n\n if (result.error || result.errorId) {\n searchError = result\n } else {\n searchResult = { ...result }\n\n const results = searchResult.results\n .map((result: any) => {\n const block = searchResult.recordMap.block[result.id]?.value\n if (!block) return\n\n const title = getBlockTitle(block, searchResult.recordMap)\n if (!title) {\n return\n }\n\n result.title = title\n result.block = block\n result.recordMap = searchResult.recordMap\n result.page =\n getBlockParentPage(block, searchResult.recordMap, {\n inclusive: true\n }) || block\n\n if (!result.page.id) {\n return\n }\n\n if (result.highlight?.text) {\n result.highlight.html = result.highlight.text\n .replaceAll(/<gzknfouu>/gi, '<b>')\n .replaceAll(/<\\/gzknfouu>/gi, '</b>')\n }\n\n return result\n })\n .filter(Boolean)\n\n // dedupe results by page id\n const searchResultsMap = Object.fromEntries(\n results.map((result: any) => [result.page.id, result])\n )\n searchResult.results = Object.values(searchResultsMap)\n }\n\n if (this.state.query === query) {\n this.setState({ isLoading: false, searchResult, searchError })\n }\n }\n}\n","import React from 'react'\n\nimport { cs } from '../utils'\n\nexport function ClearIcon(props: any) {\n const { className, ...rest } = props\n return (\n <svg className={cs('notion-icon', className)} {...rest} viewBox='0 0 30 30'>\n <path d='M15,0C6.716,0,0,6.716,0,15s6.716,15,15,15s15-6.716,15-15S23.284,0,15,0z M22,20.6L20.6,22L15,16.4L9.4,22L8,20.6l5.6-5.6 L8,9.4L9.4,8l5.6,5.6L20.6,8L22,9.4L16.4,15L22,20.6z'></path>\n </svg>\n )\n}\n","import React from 'react'\n\nimport { cs } from '../utils'\n\nexport function LoadingIcon(props: any) {\n const { className, ...rest } = props\n return (\n <svg className={cs('notion-icon', className)} {...rest} viewBox='0 0 24 24'>\n <defs>\n <linearGradient\n x1='28.1542969%'\n y1='63.7402344%'\n x2='74.6289062%'\n y2='17.7832031%'\n id='linearGradient-1'\n >\n <stop stopColor='rgba(164, 164, 164, 1)' offset='0%' />\n <stop\n stopColor='rgba(164, 164, 164, 0)'\n stopOpacity='0'\n offset='100%'\n />\n </linearGradient>\n </defs>\n\n <g id='Page-1' stroke='none' strokeWidth='1' fill='none'>\n <g transform='translate(-236.000000, -286.000000)'>\n <g transform='translate(238.000000, 286.000000)'>\n <circle\n id='Oval-2'\n stroke='url(#linearGradient-1)'\n strokeWidth='4'\n cx='10'\n cy='12'\n r='10'\n />\n <path\n d='M10,2 C4.4771525,2 0,6.4771525 0,12'\n id='Oval-2'\n stroke='rgba(164, 164, 164, 1)'\n strokeWidth='4'\n />\n <rect\n id='Rectangle-1'\n fill='rgba(164, 164, 164, 1)'\n x='8'\n y='0'\n width='4'\n height='4'\n rx='8'\n />\n </g>\n </g>\n </g>\n </svg>\n )\n}\n","import mediumZoom from '@fisch0920/medium-zoom'\nimport { type ExtendedRecordMap } from 'notion-types'\nimport * as React from 'react'\n\nimport { Block } from './block'\nimport { NotionContextProvider, useNotionContext } from './context'\nimport {\n type MapImageUrlFn,\n type MapPageUrlFn,\n type NotionComponents,\n type SearchNotionFn\n} from './types'\n\nexport function NotionRenderer({\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 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 const zoom = React.useMemo(\n () =>\n !!globalThis.window &&\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 >\n <NotionBlockRenderer {...rest} />\n </NotionContextProvider>\n )\n}\n\nexport function NotionBlockRenderer({\n level = 0,\n blockId,\n ...props\n}: {\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}) {\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') {\n console.warn('missing block', blockId)\n }\n\n return null\n }\n\n return (\n <Block key={id} level={level} block={block} {...props}>\n {block?.content?.map((contentBlockId) => (\n <NotionBlockRenderer\n key={contentBlockId}\n blockId={contentBlockId}\n level={level + 1}\n {...props}\n />\n ))}\n </Block>\n )\n}\n\nfunction getMediumZoomMargin() {\n const width = window.innerWidth\n\n if (width < 500) {\n return 8\n } else if (width < 800) {\n return 20\n } else if (width < 1280) {\n return 30\n } else if (width < 1600) {\n return 40\n } else if (width < 1920) {\n return 48\n } else {\n return 72\n }\n}\n","import type * as types from 'notion-types'\nimport {\n getBlockCollectionId,\n getBlockIcon,\n getBlockParentPage,\n getPageTableOfContents,\n getTextContent,\n uuidToId\n} from 'notion-utils'\nimport React from 'react'\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 {\n cs,\n getListNestingLevel,\n getListNumber,\n getListStyle,\n isUrl\n} from './utils'\n\ninterface BlockProps {\n block: types.Block\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 function Block(props: BlockProps) {\n const ctx = useNotionContext()\n const {\n components,\n fullPage,\n darkMode,\n recordMap,\n mapPageUrl,\n mapImageUrl,\n showTableOfContents,\n minTableOfContentsItems,\n defaultPageIcon,\n defaultPageCover,\n defaultPageCoverPosition\n } = ctx\n\n const [activeSection, setActiveSection] = React.useState<string | null>(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) {\n return null\n }\n\n // ugly hack to make viewing raw collection views work properly\n // e.g., 6d886ca87ab94c21a16e3b82b43a57fb\n if (level === 0 && block.type === 'collection_view') {\n ;(block as any).type = 'collection_view_page'\n }\n\n const blockId = hideBlockId\n ? 'notion-block'\n : `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:\n recordMap.collection[\n getBlockCollectionId(block, recordMap)!\n ]?.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\n const pageIcon = getBlockIcon(block, recordMap) ?? defaultPageIcon\n const isPageIconUrl = pageIcon && isUrl(pageIcon)\n\n const toc = getPageTableOfContents(\n block as types.PageBlock,\n recordMap\n )\n\n const hasToc =\n showTableOfContents && toc.length >= minTableOfContentsItems\n const hasAside = !!((hasToc || pageAside) && !page_full_width)\n const hasPageCover = !!(pageCover || page_cover)\n\n return (\n <div\n className={cs(\n 'notion',\n 'notion-app',\n darkMode ? 'dark-mode' : 'light-mode',\n blockId,\n className\n )}\n >\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 <div className='notion-page-cover-wrapper'>\n <LazyImage\n src={mapImageUrl(page_cover!, block)}\n alt={getTextContent(properties?.title)}\n priority={true}\n className='notion-page-cover'\n style={pageCoverStyle}\n />\n </div>\n ))}\n\n <main\n className={cs(\n 'notion-page',\n hasPageCover\n ? 'notion-page-has-cover'\n : 'notion-page-no-cover',\n page_icon\n ? 'notion-page-has-icon'\n : 'notion-page-no-icon',\n isPageIconUrl\n ? 'notion-page-has-image-icon'\n : 'notion-page-has-text-icon',\n 'notion-full-page',\n page_full_width && 'notion-full-width',\n page_small_text && 'notion-small-text',\n bodyClassName\n )}\n >\n {page_icon && (\n <PageIcon\n block={block}\n defaultIcon={defaultPageIcon}\n inline={false}\n />\n )}\n\n {pageHeader}\n\n <h1 className='notion-title'>\n {pageTitle ?? (\n <Text value={properties?.title} block={block} />\n )}\n </h1>\n\n {(block.type === 'collection_view_page' ||\n (block.type === 'page' &&\n block.parent_table === 'collection')) && (\n <components.Collection block={block} ctx={ctx} />\n )}\n\n {block.type !== 'collection_view_page' && (\n <div\n className={cs(\n 'notion-page-content',\n hasAside && 'notion-page-content-has-aside',\n hasToc && 'notion-page-content-has-toc'\n )}\n >\n <article className='notion-page-content-inner'>\n {children}\n </article>\n\n {hasAside && (\n <PageAside\n toc={toc}\n activeSection={activeSection}\n setActiveSection={setActiveSection}\n hasToc={hasToc}\n hasAside={hasAside}\n pageAside={pageAside}\n />\n )}\n </div>\n )}\n\n {pageFooter}\n </main>\n\n {footer}\n </div>\n </div>\n </div>\n )\n } else {\n return (\n <main\n className={cs(\n 'notion',\n darkMode ? 'dark-mode' : 'light-mode',\n 'notion-page',\n page_full_width && 'notion-full-width',\n page_small_text && 'notion-small-text',\n blockId,\n className,\n bodyClassName\n )}\n >\n <div className='notion-viewport' />\n\n {pageHeader}\n\n {(block.type === 'collection_view_page' ||\n (block.type === 'page' &&\n block.parent_table === 'collection')) && (\n <components.Collection block={block} ctx={ctx} />\n )}\n\n {block.type !== 'collection_view_page' && children}\n\n {pageFooter}\n </main>\n )\n }\n } else {\n const blockColor = block.format?.block_color\n\n return (\n <components.PageLink\n className={cs(\n 'notion-page-link',\n blockColor && `notion-${blockColor}`,\n blockId\n )}\n href={mapPageUrl(block.id)}\n >\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 =\n 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 | undefined\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) {\n indentLevelClass = `notion-h-indent-${indentLevel}`\n }\n\n const isH1 = block.type === 'header'\n const isH2 = block.type === 'sub_header'\n const isH3 = block.type === 'sub_sub_header'\n\n const classNameStr = cs(\n isH1 && 'notion-h notion-h1',\n isH2 && 'notion-h notion-h2',\n isH3 && 'notion-h notion-h3',\n blockColor && `notion-${blockColor}`,\n indentLevelClass,\n blockId\n )\n\n const innerHeader = (\n <span>\n <div id={id} className='notion-header-anchor' />\n {!block.format?.toggleable && (\n <a className='notion-hash-link' href={`#${id}`} title={title}>\n <LinkIcon />\n </a>\n )}\n\n <span className='notion-h-title'>\n <Text value={block.properties.title} block={block} />\n </span>\n </span>\n )\n let headerBlock = null\n\n //page title takes the h1 so all header blocks are greater\n if (isH1) {\n headerBlock = (\n <h2 className={classNameStr} data-id={id}>\n {innerHeader}\n </h2>\n )\n } else if (isH2) {\n headerBlock = (\n <h3 className={classNameStr} data-id={id}>\n {innerHeader}\n </h3>\n )\n } else {\n headerBlock = (\n <h4 className={classNameStr} data-id={id}>\n {innerHeader}\n </h4>\n )\n }\n\n if (block.format?.toggleable) {\n return (\n <details className={cs('notion-toggle', blockId)}>\n <summary>{headerBlock}</summary>\n <div>{children}</div>\n </details>\n )\n } else {\n return headerBlock\n }\n }\n\n case 'divider':\n return <hr className={cs('notion-hr', blockId)} />\n\n case 'text': {\n if (!block.properties && !block.content?.length) {\n return <div className={cs('notion-blank', blockId)}> </div>\n }\n\n const blockColor = block.format?.block_color\n\n return (\n <div\n className={cs(\n 'notion-text',\n blockColor && `notion-${blockColor}`,\n blockId\n )}\n >\n {block.properties?.title && (\n <Text value={block.properties.title} block={block} />\n )}\n\n {children && <div className='notion-text-children'>{children}</div>}\n </div>\n )\n }\n\n case 'bulleted_list':\n // fallthrough\n case 'numbered_list': {\n const wrapList = (content: React.ReactNode, start?: number) =>\n block.type === 'bulleted_list' ? (\n <ul className={cs('notion-list', 'notion-list-disc', blockId)}>\n {content}\n </ul>\n ) : (\n <ol\n start={start}\n className={cs('notion-list', 'notion-list-numbered', blockId)}\n style={\n block.type === 'numbered_list'\n ? {\n listStyleType: getListStyle(\n getListNestingLevel(block.id, recordMap.block)\n )\n }\n : undefined\n }\n >\n {content}\n </ol>\n )\n\n let output: React.ReactNode | null = null\n const isTopLevel =\n block.type !== recordMap.block[block.parent_id]?.value?.type\n const start = getListNumber(block.id, recordMap.block)\n\n if (block.content) {\n const listItem = block.properties ? (\n <li>\n <Text value={block.properties.title} block={block} />\n </li>\n ) : null\n\n if (block.type === 'bulleted_list') {\n output = (\n <>\n {listItem}\n <ul className={cs('notion-list', 'notion-list-disc', blockId)}>\n {children}\n </ul>\n </>\n )\n } else {\n const nestingLevel = getListNestingLevel(block.id, recordMap.block)\n output = (\n <>\n {listItem}\n <ol\n className={cs('notion-list', 'notion-list-numbered', blockId)}\n style={{\n listStyleType: getListStyle(nestingLevel + 1)\n }}\n >\n {children}\n </ol>\n </>\n )\n }\n } else {\n output = block.properties ? (\n <li>\n <Text value={block.properties.title} block={block} />\n </li>\n ) : null\n }\n\n return isTopLevel ? wrapList(output, start) : output\n }\n\n case 'embed':\n return <components.Embed blockId={blockId} block={block} />\n case 'replit':\n // fallthrough\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 //check if this drive actually needs to be embeded ex. google sheets.\n if (block.format?.display_source) {\n return <AssetWrapper blockId={blockId} block={block} />\n }\n }\n\n return (\n <GoogleDrive\n block={block as types.GoogleDriveBlock}\n className={blockId}\n />\n )\n }\n\n case 'audio':\n return <Audio block={block as types.AudioBlock} className={blockId} />\n\n case 'file':\n return <File block={block as types.FileBlock} className={blockId} />\n\n case 'equation':\n return (\n <components.Equation\n block={block as types.EquationBlock}\n inline={false}\n className={blockId}\n />\n )\n\n case 'code':\n return <components.Code block={block as types.CodeBlock} />\n\n case 'column_list':\n return <div className={cs('notion-row', blockId)}>{children}</div>\n\n case 'column': {\n // note: notion uses 46px\n const spacerWidth = `min(32px, 4vw)`\n const ratio = block.format?.column_ratio || 0.5\n const parent = recordMap.block[block.parent_id]?.value\n const columns =\n parent?.content?.length || Math.max(2, Math.ceil(1.0 / ratio))\n\n const width = `calc((100% - (${\n columns - 1\n } * ${spacerWidth})) * ${ratio})`\n const style = { width }\n\n return (\n <>\n <div className={cs('notion-column', blockId)} style={style}>\n {children}\n </div>\n\n <div className='notion-spacer' />\n </>\n )\n }\n\n case 'quote': {\n if (!block.properties) return null\n\n const blockColor = block.format?.block_color\n\n return (\n <blockquote\n className={cs(\n 'notion-quote',\n blockColor && `notion-${blockColor}`,\n blockId\n )}\n >\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 (\n <components.Collection block={block} className={blockId} ctx={ctx} />\n )\n\n case 'callout':\n if (components.Callout) {\n return <components.Callout block={block} className={blockId} />\n } else {\n return (\n <div\n className={cs(\n 'notion-callout',\n block.format?.block_color &&\n `notion-${block.format?.block_color}_co`,\n blockId\n )}\n >\n <PageIcon block={block} hideDefaultIcon={true} />\n\n <div className='notion-callout-text'>\n <Text value={block.properties?.title} block={block} />\n {children}\n </div>\n </div>\n )\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) {\n title = getTextContent(link)\n }\n\n if (title) {\n if (title.startsWith('http')) {\n try {\n const url = new URL(title)\n title = url.hostname\n } catch {\n // ignore invalid links\n }\n }\n }\n\n return (\n <div className='notion-row'>\n <components.Link\n target='_blank'\n rel='noopener noreferrer'\n className={cs(\n 'notion-bookmark',\n block.format?.block_color && `notion-${block.format.block_color}`,\n blockId\n )}\n href={link[0][0]}\n >\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\n src={mapImageUrl(block.format?.bookmark_icon, block)}\n alt={title}\n />\n </div>\n )}\n\n <div className='notion-bookmark-link-text'>\n <Text value={link} block={block} />\n </div>\n </div>\n </div>\n\n {block.format?.bookmark_cover && (\n <div className='notion-bookmark-image'>\n <LazyImage\n src={mapImageUrl(block.format?.bookmark_cover, block)}\n alt={getTextContent(block.properties?.title)}\n style={{\n objectFit: 'cover'\n }}\n />\n </div>\n )}\n </components.Link>\n </div>\n )\n }\n\n case 'toggle':\n return (\n <details className={cs('notion-toggle', blockId)}>\n <summary>\n <Text value={block.properties?.title} block={block} />\n </summary>\n\n <div>{children}</div>\n </details>\n )\n\n case 'table_of_contents': {\n const page = getBlockParentPage(block, recordMap)\n if (!page) return null\n\n const toc = getPageTableOfContents(page, recordMap)\n const blockColor = block.format?.block_color\n\n return (\n <div\n className={cs(\n 'notion-table-of-contents',\n blockColor && `notion-${blockColor}`,\n blockId\n )}\n >\n {toc.map((tocItem) => (\n <a\n key={tocItem.id}\n href={`#${uuidToId(tocItem.id)}`}\n className='notion-table-of-contents-item'\n >\n <span\n className='notion-table-of-contents-item-body'\n style={{\n display: 'inline-block',\n marginLeft: tocItem.indentLevel * 24\n }}\n >\n {tocItem.text}\n </span>\n </a>\n ))}\n </div>\n )\n }\n\n case 'to_do': {\n const isChecked = block.properties?.checked?.[0]?.[0] === 'Yes'\n\n return (\n <div className={cs('notion-to-do', blockId)}>\n <div className='notion-to-do-item'>\n <components.Checkbox blockId={blockId} isChecked={isChecked} />\n\n <div\n className={cs(\n 'notion-to-do-body',\n isChecked && `notion-to-do-checked`\n )}\n >\n <Text value={block.properties?.title} block={block} />\n </div>\n </div>\n\n <div className='notion-to-do-children'>{children}</div>\n </div>\n )\n }\n\n case 'transclusion_container':\n return <div className={cs('notion-sync-block', blockId)}>{children}</div>\n\n case 'transclusion_reference':\n return <SyncPointerBlock {...props} level={level + 1} />\n\n case 'alias': {\n const blockPointerId = block?.format?.alias_pointer?.id\n const linkedBlock = recordMap.block[blockPointerId]?.value\n if (!linkedBlock) {\n console.log('\"alias\" missing block', blockPointerId)\n return null\n }\n\n return (\n <components.PageLink\n className={cs('notion-page-link', blockPointerId)}\n href={mapPageUrl(blockPointerId)}\n >\n <PageTitle block={linkedBlock} />\n </components.PageLink>\n )\n }\n\n case 'table':\n return (\n <table className={cs('notion-simple-table', blockId)}>\n <tbody>{children}</tbody>\n </table>\n )\n\n case 'table_row': {\n const tableBlock = recordMap.block[block.parent_id]\n ?.value as types.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 const hasRowHeader = tableBlock.format?.table_block_column_header === true\n const hasColumnHeader = tableBlock.format?.table_block_row_header === true\n\n const isHeaderRow = hasRowHeader && tableBlock.content?.[0] === block.id\n\n if (!tableBlock || !order) {\n return null\n }\n\n return (\n <tr\n className={cs(\n 'notion-simple-table-row',\n backgroundColor && `notion-${backgroundColor}`,\n isHeaderRow && 'notion-simple-table-header-row',\n blockId\n )}\n >\n {order.map((column, columnIndex) => {\n const color = formatMap?.[column]?.color\n\n const isHeaderColumn = hasColumnHeader && columnIndex === 0\n\n return (\n <td\n key={column}\n className={cs(\n color ? `notion-${color}` : '',\n isHeaderColumn && 'notion-simple-table-header-cell'\n )}\n style={{\n width: formatMap?.[column]?.width || 120\n }}\n >\n <div className='notion-simple-table-cell'>\n <Text\n value={block.properties?.[column] || [['ㅤ']]}\n block={block}\n />\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.log(\n 'Unsupported block type ' + (block as any).type,\n JSON.stringify(block, null, 2)\n )\n }\n\n return <div />\n }\n}\n","import type React from 'react'\nimport { type AudioBlock } from 'notion-types'\n\nimport { useNotionContext } from '../context'\nimport { cs } from '../utils'\n\nexport function Audio({\n block,\n className\n}: {\n block: AudioBlock\n className?: string\n}) {\n const { recordMap } = useNotionContext()\n\n let source =\n recordMap.signed_urls[block.id] || block.properties?.source?.[0]?.[0]\n\n if (!source) {\n return null\n }\n\n if (block.space_id) {\n const url = new URL(source)\n url.searchParams.set('spaceId', block.space_id)\n source = url.toString()\n }\n\n return (\n <div className={cs('notion-audio', className)}>\n <audio controls preload='none' src={source} />\n </div>\n )\n}\n","import type React from 'react'\nimport { type FileBlock } from 'notion-types'\n\nimport { useNotionContext } from '../context'\nimport { FileIcon } from '../icons/file-icon'\nimport { cs } from '../utils'\nimport { Text } from './text'\n\nexport function File({\n block,\n className\n}: {\n block: FileBlock\n className?: string\n}) {\n const { components, recordMap } = useNotionContext()\n\n let source =\n recordMap.signed_urls[block.id] || block.properties?.source?.[0]?.[0]\n\n if (!source) {\n return null\n }\n\n if (block.space_id) {\n const url = new URL(source)\n url.searchParams.set('spaceId', block.space_id)\n source = url.toString()\n }\n\n return (\n <div className={cs('notion-file', className)}>\n <components.Link\n className='notion-file-link'\n href={source}\n target='_blank'\n rel='noopener noreferrer'\n >\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 function FileIcon(props: any) {\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 type React from 'react'\nimport { type GoogleDriveBlock } from 'notion-types'\n\nimport { useNotionContext } from '../context'\nimport { cs } from '../utils'\nimport { GracefulImage } from './graceful-image'\n\nexport function GoogleDrive({\n block,\n className\n}: {\n block: GoogleDriveBlock\n className?: string\n}) {\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 {\n // ignore invalid urls for robustness\n }\n\n return (\n <div className={cs('notion-google-drive', className)}>\n <components.Link\n className='notion-google-drive-link'\n href={properties.url}\n target='_blank'\n rel='noopener noreferrer'\n >\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 && (\n <div className='notion-google-drive-body-title'>\n {properties.title}\n </div>\n )}\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 && (\n <div className='notion-google-drive-body-source-domain'>\n {domain}\n </div>\n )}\n </div>\n )}\n </div>\n </components.Link>\n </div>\n )\n}\n","import throttle from 'lodash.throttle'\nimport { type TableOfContentsEntry, uuidToId } from 'notion-utils'\nimport React from 'react'\n\nimport { cs } from '../utils'\n\nexport function PageAside({\n toc,\n activeSection,\n setActiveSection,\n pageAside,\n hasToc,\n hasAside,\n className\n}: {\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}) {\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 = null\n let currentSectionId = activeSection\n\n for (const section of sections) {\n if (!section || !(section instanceof Element)) continue\n\n if (!currentSectionId) {\n currentSectionId = (section as any).dataset.id\n }\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 as any).dataset.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) {\n return\n }\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) {\n return null\n }\n\n return (\n <aside className={cs('notion-aside', className)}>\n {hasToc && (\n <div className='notion-aside-table-of-contents'>\n <div className='notion-aside-table-of-contents-header'>\n Table of Contents\n </div>\n\n <nav className='notion-table-of-contents'>\n {toc.map((tocItem) => {\n const id = uuidToId(tocItem.id)\n\n return (\n <a\n key={id}\n href={`#${id}`}\n className={cs(\n 'notion-table-of-contents-item',\n `notion-table-of-contents-item-indent-level-${tocItem.indentLevel}`,\n activeSection === id &&\n 'notion-table-of-contents-active-item'\n )}\n >\n <span\n className='notion-table-of-contents-item-body'\n style={{\n display: 'inline-block',\n marginLeft: tocItem.indentLevel * 16\n }}\n >\n {tocItem.text}\n </span>\n </a>\n )\n })}\n </nav>\n </div>\n )}\n\n {pageAside}\n </aside>\n )\n}\n","import type React from 'react'\nimport {\n type Block as BlockType,\n type SyncPointerBlock as SyncPointerBlockType\n} from 'notion-types'\n\nimport { NotionBlockRenderer } from '../renderer'\n\nexport function SyncPointerBlock({\n block,\n level\n}: {\n block: BlockType\n level: number\n}) {\n if (!block) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('missing sync pointer block')\n }\n\n return null\n }\n\n const syncPointerBlock = block as SyncPointerBlockType\n const referencePointerId =\n syncPointerBlock?.format?.transclusion_reference_pointer?.id\n\n if (!referencePointerId) {\n return null\n }\n\n return (\n <NotionBlockRenderer\n key={referencePointerId}\n level={level}\n blockId={referencePointerId}\n />\n )\n}\n","import React from 'react'\n\nexport function LinkIcon(props: any) {\n const { className, ...rest } = props\n return (\n <svg\n className={className}\n {...rest}\n viewBox='0 0 16 16'\n width='16'\n height='16'\n >\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":"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","names":["result","throttle","React","React","parsePageId","jsx","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","getBlockTitle","React","React","jsx","jsx","React","jsx","jsxs","getBlockTitle","React","Fragment","jsx","React","jsx","parsePageId","jsx","jsx","React","jsx","jsx","React","jsx","getBlockTitle","React","jsx","jsx","jsxs","Fragment","jsx","jsxs","React","result","getBlockTitle","throttle","ctx","Fragment","jsx","jsxs","React","React","getBlockIcon","getBlockParentPage","getTextContent","uuidToId","React","jsx","jsx","jsx","jsxs","jsx","jsxs","import_lodash","React","jsx","jsxs","React","throttle","jsx","jsx","Fragment","jsx","jsxs","ctx","React","uuidToId","getBlockIcon","getTextContent","getBlockParentPage","tocItem","start","_a","_b","_c","jsx"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { CodeBlock } from 'notion-types';
|
|
3
|
+
|
|
4
|
+
declare function Code({ block, defaultLanguage, className }: {
|
|
5
|
+
block: CodeBlock;
|
|
6
|
+
defaultLanguage?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
}): react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { Code };
|