diff --git a/.github/renovate.json b/.github/renovate.json index a6f4e615c36..a33728a87e8 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -32,6 +32,7 @@ "rollback" ], "matchPackageNames": [ + "!@portabletext/block-tools", "!@portabletext/editor", "!@sanity/client", "!@sanity/tsdoc", @@ -41,6 +42,7 @@ { "matchDepTypes": ["dependencies"], "matchPackageNames": [ + "@portabletext/block-tools", "@portabletext/editor", "@sanity/bifur-client", "@sanity/client", @@ -60,6 +62,7 @@ { "description": "Ensure internal and important packages open a PRs right away, without waiting for manual approval", "matchPackageNames": [ + "@portabletext/block-tools", "@portabletext/editor", "@sanity/bifur-client", "@sanity/client", diff --git a/.prettierignore b/.prettierignore index b1313e31a3d..67d1b13653a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -25,7 +25,6 @@ /packages/@sanity/*/coverage /packages/@sanity/*/lib /packages/@sanity/*/node_modules -/packages/@sanity/block-tools/test/**/input.html /packages/@sanity/client/umd /packages/@sanity/cli/bin/sanity-cli.js /packages/@sanity/cli/templates diff --git a/dev/test-studio/package.json b/dev/test-studio/package.json index 1f066ad49f3..b8b94e3972b 100644 --- a/dev/test-studio/package.json +++ b/dev/test-studio/package.json @@ -16,10 +16,10 @@ "workshop:dev": "node -r esbuild-register scripts/workshop/dev.ts" }, "dependencies": { + "@portabletext/block-tools": "^1.0.2", "@portabletext/editor": "^1.21.5", "@portabletext/react": "^3.0.0", "@sanity/assist": "^3.0.2", - "@sanity/block-tools": "3.70.0", "@sanity/client": "^6.24.3", "@sanity/color": "^3.0.0", "@sanity/color-input": "^4.0.1", diff --git a/dev/test-studio/schema/standard/portableText/customMarkers/CustomContentInput.tsx b/dev/test-studio/schema/standard/portableText/customMarkers/CustomContentInput.tsx index c3f0be63278..d0cc0303c15 100644 --- a/dev/test-studio/schema/standard/portableText/customMarkers/CustomContentInput.tsx +++ b/dev/test-studio/schema/standard/portableText/customMarkers/CustomContentInput.tsx @@ -1,5 +1,5 @@ +import {htmlToBlocks} from '@portabletext/block-tools' import {type OnPasteFn, type PortableTextBlock} from '@portabletext/editor' -import {htmlToBlocks} from '@sanity/block-tools' import {useCallback, useMemo} from 'react' import {PortableTextInput, type PortableTextInputProps, type PortableTextMarker} from 'sanity' diff --git a/dev/tsconfig.dev.json b/dev/tsconfig.dev.json index 5e1ee610513..1436126e285 100644 --- a/dev/tsconfig.dev.json +++ b/dev/tsconfig.dev.json @@ -5,7 +5,6 @@ "rootDir": "..", "baseUrl": "..", "paths": { - "@sanity/block-tools": ["./packages/@sanity/block-tools/src/index.ts"], "@sanity/diff": ["./packages/@sanity/diff/src/index.ts"], "@sanity/cli": ["./packages/@sanity/cli/src/index.ts"], "@sanity/codegen": ["./packages/@sanity/codegen/src/_exports/index.ts"], diff --git a/examples/tsconfig.json b/examples/tsconfig.json index 5e1ee610513..1436126e285 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -5,7 +5,6 @@ "rootDir": "..", "baseUrl": "..", "paths": { - "@sanity/block-tools": ["./packages/@sanity/block-tools/src/index.ts"], "@sanity/diff": ["./packages/@sanity/diff/src/index.ts"], "@sanity/cli": ["./packages/@sanity/cli/src/index.ts"], "@sanity/codegen": ["./packages/@sanity/codegen/src/_exports/index.ts"], diff --git a/packages/@repo/dev-aliases/dev-aliases.cjs b/packages/@repo/dev-aliases/dev-aliases.cjs index 51d3a925e5a..8e599793ff4 100644 --- a/packages/@repo/dev-aliases/dev-aliases.cjs +++ b/packages/@repo/dev-aliases/dev-aliases.cjs @@ -17,7 +17,6 @@ const devAliases = { // NOTE: do not use regex in the module expressions, // because they will be escaped by the jest config - '@sanity/block-tools': '@sanity/block-tools/src', '@sanity/diff': '@sanity/diff/src', '@sanity/cli': '@sanity/cli/src', '@sanity/mutator': '@sanity/mutator/src', diff --git a/packages/@repo/test-exports/.depcheckrc.json b/packages/@repo/test-exports/.depcheckrc.json index 7be5e5048b1..5652e2749fe 100644 --- a/packages/@repo/test-exports/.depcheckrc.json +++ b/packages/@repo/test-exports/.depcheckrc.json @@ -1,7 +1,6 @@ { "ignores": [ "@repo/test-exports", - "@sanity/block-tools", "@sanity/cli", "@sanity/codegen", "@sanity/diff", diff --git a/packages/@repo/test-exports/package.json b/packages/@repo/test-exports/package.json index be67541317f..4e986dd9a4f 100644 --- a/packages/@repo/test-exports/package.json +++ b/packages/@repo/test-exports/package.json @@ -10,7 +10,6 @@ "test": "node --test" }, "dependencies": { - "@sanity/block-tools": "workspace:*", "@sanity/cli": "workspace:*", "@sanity/codegen": "workspace:*", "@sanity/diff": "workspace:*", diff --git a/packages/@sanity/block-tools/.depcheckrc.json b/packages/@sanity/block-tools/.depcheckrc.json deleted file mode 100644 index 4599f605fef..00000000000 --- a/packages/@sanity/block-tools/.depcheckrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ignores": ["@repo/tsconfig", "@sanity/pkg-utils", "react", "@vitest/coverage-v8"] -} diff --git a/packages/@sanity/block-tools/.eslintrc.cjs b/packages/@sanity/block-tools/.eslintrc.cjs deleted file mode 100644 index c9a446c5adf..00000000000 --- a/packages/@sanity/block-tools/.eslintrc.cjs +++ /dev/null @@ -1,9 +0,0 @@ -const path = require('node:path') - -const ROOT_PATH = path.resolve(__dirname, '../../..') - -module.exports = { - rules: { - 'import/no-extraneous-dependencies': ['error', {packageDir: [ROOT_PATH, __dirname]}], - }, -} diff --git a/packages/@sanity/block-tools/.gitignore b/packages/@sanity/block-tools/.gitignore deleted file mode 100644 index 626befc941e..00000000000 --- a/packages/@sanity/block-tools/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Logs -/logs -*.log - -# Coverage directory used by tools like istanbul -/coverage - -# Dependency directories -/node_modules - -# Compiled code -/lib -/dist diff --git a/packages/@sanity/block-tools/LICENSE b/packages/@sanity/block-tools/LICENSE deleted file mode 100644 index c5f080fd508..00000000000 --- a/packages/@sanity/block-tools/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 - 2024 Sanity.io - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/@sanity/block-tools/README.md b/packages/@sanity/block-tools/README.md deleted file mode 100644 index 1483d1566e2..00000000000 --- a/packages/@sanity/block-tools/README.md +++ /dev/null @@ -1,220 +0,0 @@ -# Sanity Block Tools - -> **⚠ This package is deprecated** -> -> Please note that this package is deprecated and has been replaced by [@portabletext/block-tools](https://www.npmjs.com/package/@portabletext/block-tools) - -Various tools for processing Sanity block content. Mostly used internally in the Studio code, but it got some nice functions (especially `htmlToBlocks`) which is handy when you are importing data from HTML into your dataset as block text. - -**NOTE:** To use `@sanity/block-tools` in a Node.js script, you will need to provide a `parseHtml` method - generally using `JSDOM`. [Read more](#jsdom-example). - -## Example - -Let's start with a complete example: - -```js -import {Schema} from '@sanity/schema' -import {htmlToBlocks, getBlockContentFeatures} from '@sanity/block-tools' - -// Start with compiling a schema we can work against -const defaultSchema = Schema.compile({ - name: 'myBlog', - types: [ - { - type: 'object', - name: 'blogPost', - fields: [ - { - title: 'Title', - type: 'string', - name: 'title', - }, - { - title: 'Body', - name: 'body', - type: 'array', - of: [{type: 'block'}], - }, - ], - }, - ], -}) - -// The compiled schema type for the content type that holds the block array -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field) => field.name === 'body').type - -// Convert HTML to block array -const blocks = htmlToBlocks('

Hello world!

', blockContentType) -// Outputs -// -// { -// _type: 'block', -// style: 'h1' -// children: [ -// { -// _type: 'span' -// text: 'Hello world!' -// } -// ] -// } - -// Get the feature-set of a blockContentType -const features = getBlockContentFeatures(blockContentType) -``` - -## Methods - -### `htmlToBlocks(html, blockContentType, options)` (html deserializer) - -This will deserialize the input html (string) into blocks. - -#### Params - -##### `html` - -The stringified version of the HTML you are importing - -##### `blockContentType` - -A compiled version of the block content schema type. - -The deserializer will respect the schema when deserializing the HTML elements to blocks. - -It only supports a subset of HTML tags. Any HTML tag not in the block-tools [whitelist](https://github.com/sanity-io/sanity/blob/243b4a5686a1293a8a977574a5cabc768ec01725/packages/%40sanity/block-tools/src/constants.ts#L24-L78) will be deserialized to normal blocks/spans. - -For instance, if the schema doesn't allow H2 styles, all H2 HTML elements will be output like this: - -```js -{ - _type: 'block', - style: 'normal' - children: [ - { - _type: 'span' - text: 'Hello world!' - } - ] -} -``` - -##### `options` (optional) - -###### `parseHtml` - -The HTML-deserialization is done by default by the browser's native DOMParser. -On the server side you can give the function `parseHtml` -that parses the html into a DOMParser compatible model / API. - -###### JSDOM example - -```js -const {JSDOM} = require('jsdom') -const {htmlToBlocks} = require('@sanity/block-tools') - -const blocks = htmlToBlocks('

Hello world!

', blockContentType, { - parseHtml: (html) => new JSDOM(html).window.document, -}) -``` - -##### `rules` - -You may add your own rules to deal with special HTML cases. - -```js -htmlToBlocks( - '
const foo = "bar"
', - blockContentType, - { - parseHtml: (html) => new JSDOM(html), - rules: [ - // Special rule for code blocks - { - deserialize(el, next, block) { - if (el.tagName.toLowerCase() != 'pre') { - return undefined - } - const code = el.children[0] - const childNodes = - code && code.tagName.toLowerCase() === 'code' ? code.childNodes : el.childNodes - let text = '' - childNodes.forEach((node) => { - text += node.textContent - }) - // Return this as an own block (via block helper function), instead of appending it to a default block's children - return block({ - _type: 'code', - language: 'javascript', - text: text, - }) - }, - }, - ], - }, -) -``` - -### `normalizeBlock(block, [options={}])` - -Normalize a block object structure to make sure it has what it needs. - -```js -import {normalizeBlock} from '@sanity/block-tools' -const partialBlock = { - _type: 'block', - children: [ - { - _type: 'span', - text: 'Foobar', - marks: ['strong', 'df324e2qwe'], - }, - ], -} -normalizeBlock(partialBlock, {allowedDecorators: ['strong']}) -``` - -Will produce - -``` -{ - _key: 'randomKey0', - _type: 'block', - children: [ - { - _key: 'randomKey00', - _type: 'span', - marks: ['strong'], - text: 'Foobar' - } - ], - markDefs: [] -} -``` - -### `getBlockContentFeatures(blockContentType)` - -Will return an object with the features enabled for the input block content type. - -```js -{ - annotations: [{title: 'Link', value: 'link'}], - decorators: [ - {title: 'Strong', value: 'strong'}, - {title: 'Emphasis', value: 'em'}, - {title: 'Code', value: 'code'}, - {title: 'Underline', value: 'underline'}, - {title: 'Strike', value: 'strike-through'} - ], - styles: [ - {title: 'Normal', value: 'normal'}, - {title: 'Heading 1', value: 'h1'}, - {title: 'H2', value: 'h2'}, - {title: 'H3', value: 'h3'}, - {title: 'H4', value: 'h4'}, - {title: 'H5', value: 'h5'}, - {title: 'H6', value: 'h6'}, - {title: 'Quote', value: 'blockquote'} - ] -} -``` diff --git a/packages/@sanity/block-tools/changelog.md b/packages/@sanity/block-tools/changelog.md deleted file mode 100644 index 53aadd4af1c..00000000000 --- a/packages/@sanity/block-tools/changelog.md +++ /dev/null @@ -1,11 +0,0 @@ -2018-12-13: BREAKING: Changed params for `htmlToBlocks` from `(html, options={blockContentType})` to `(html, blockContentType, options={}` as blockContentType is now required. - -2019-10-16: `normalizeBlock` now takes a second parameter `options`. You can send in `options.allowedDecorators` which are the allowed decorator names. If you send in this, `normalizeBlock` will remove any span marks that are neither a decorator or exists in `block.markDefs`. - -2020-02-13: NEW: `htmlToBlocks` will not normalize all the blocks (give them a \_key and merge sibling spans with same set of marks together) - -2020-09-03: BREAKING: removed deprecated editor specific methods `blocksToEditorValue` and `editorValueToBlock`. Please use an older version if you need these. - -2020-09-03: NEW: `htmlToBlocks` will now support hoisted block type names. - -2020-09-03: NEW: `normalizeBlock` now support naming your block type through `options.blockTypeName` diff --git a/packages/@sanity/block-tools/package.config.ts b/packages/@sanity/block-tools/package.config.ts deleted file mode 100644 index c43051dd053..00000000000 --- a/packages/@sanity/block-tools/package.config.ts +++ /dev/null @@ -1,4 +0,0 @@ -import baseConfig from '@repo/package.config' -import {defineConfig} from '@sanity/pkg-utils' - -export default defineConfig(baseConfig) diff --git a/packages/@sanity/block-tools/package.json b/packages/@sanity/block-tools/package.json deleted file mode 100644 index b72f2a335d2..00000000000 --- a/packages/@sanity/block-tools/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "@sanity/block-tools", - "version": "3.70.0", - "description": "Can format HTML, Slate JSON or Sanity block array into any other format.", - "keywords": [ - "sanity", - "cms", - "headless", - "realtime", - "content", - "block-tools" - ], - "homepage": "https://www.sanity.io/", - "bugs": { - "url": "https://github.com/sanity-io/sanity/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/sanity-io/sanity.git", - "directory": "packages/@sanity/block-tools" - }, - "license": "MIT", - "author": "Sanity.io ", - "sideEffects": false, - "exports": { - ".": { - "source": "./src/index.ts", - "import": "./lib/index.mjs", - "require": "./lib/index.js", - "default": "./lib/index.js" - }, - "./package.json": "./package.json" - }, - "main": "./lib/index.js", - "module": "./lib/index.esm.js", - "types": "./lib/index.d.ts", - "files": [ - "lib", - "src" - ], - "scripts": { - "build": "pkg-utils build --strict --check --clean", - "check:types": "tsc --project tsconfig.lib.json", - "clean": "rimraf lib", - "coverage": "NODE_ENV=test vitest --coverage", - "lint": "eslint --cache .", - "prepublishOnly": "turbo run build", - "test": "vitest run", - "watch": "pkg-utils watch" - }, - "dependencies": { - "@sanity/types": "3.70.0", - "get-random-values-esm": "1.0.2", - "lodash": "^4.17.21" - }, - "devDependencies": { - "@repo/package.config": "workspace:*", - "@repo/test-config": "workspace:*", - "@sanity/schema": "3.70.0", - "@types/jsdom": "^20.0.0", - "@types/lodash": "^4.17.7", - "@types/react": "^19.0.3", - "@vercel/stega": "0.1.2", - "@vitest/coverage-v8": "^2.1.8", - "jsdom": "^23.0.1", - "vitest": "^2.1.8" - }, - "peerDependencies": { - "@types/react": "18 || 19" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts deleted file mode 100644 index 8c0578069d1..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts +++ /dev/null @@ -1,345 +0,0 @@ -import { - type ArraySchemaType, - isPortableTextTextBlock, - type PortableTextTextBlock, -} from '@sanity/types' -import {vercelStegaClean} from '@vercel/stega' -import {isEqual} from 'lodash' - -import {DEFAULT_BLOCK} from '../constants' -import { - type BlockEnabledFeatures, - type HtmlParser, - type HtmlPreprocessorOptions, - type MinimalBlock, - type MinimalSpan, - type PlaceholderAnnotation, - type PlaceholderDecorator, - type TypedObject, -} from '../types' -import blockContentTypeFeatures from '../util/blockContentTypeFeatures' -import {resolveJsType} from '../util/resolveJsType' -import preprocessors from './preprocessors' - -/** - * A utility function to create the options needed for the various rule sets, - * based on the structure of the blockContentType - * - * @param blockContentType - Schema type for array containing _at least_ a block child type - * @returns - */ -export function createRuleOptions(blockContentType: ArraySchemaType): BlockEnabledFeatures { - const features = blockContentTypeFeatures(blockContentType) - const enabledBlockStyles = features.styles.map((item) => item.value || item.title) - const enabledSpanDecorators = features.decorators.map((item) => item.value || item.title) - const enabledBlockAnnotations = features.annotations.map((item) => item.value || item.title || '') - const enabledListTypes = features.lists.map((item) => item.value || item.title || '') - return { - enabledBlockStyles, - enabledSpanDecorators, - enabledBlockAnnotations, - enabledListTypes, - } -} - -/** - * Utility function that always return a lowerCase version of the element.tagName - * - * @param el - Element to get tag name for - * @returns Lowercase tagName for that element, or undefined if not an element - */ -export function tagName(el: HTMLElement | Node | null): string | undefined { - if (el && 'tagName' in el) { - return el.tagName.toLowerCase() - } - - return undefined -} - -// TODO: make this plugin-style -export function preprocess( - html: string, - parseHtml: HtmlParser, - options: HtmlPreprocessorOptions, -): Document { - const cleanHTML = vercelStegaClean(html) - const doc = parseHtml(normalizeHtmlBeforePreprocess(cleanHTML)) - preprocessors.forEach((processor) => { - processor(cleanHTML, doc, options) - }) - return doc -} - -function normalizeHtmlBeforePreprocess(html: string): string { - return html.trim() -} - -/** - * A default `parseHtml` function that returns the html using `DOMParser`. - * - * @returns HTML Parser based on `DOMParser` - */ -export function defaultParseHtml(): HtmlParser { - if (resolveJsType(DOMParser) === 'undefined') { - throw new Error( - 'The native `DOMParser` global which the `Html` deserializer uses by ' + - 'default is not present in this environment. ' + - 'You must supply the `options.parseHtml` function instead.', - ) - } - return (html) => { - return new DOMParser().parseFromString(html, 'text/html') - } -} - -export function flattenNestedBlocks(blocks: TypedObject[]): TypedObject[] { - let depth = 0 - const flattened: TypedObject[] = [] - const traverse = (nodes: TypedObject[]) => { - const toRemove: TypedObject[] = [] - nodes.forEach((node) => { - if (depth === 0) { - flattened.push(node) - } - if (isPortableTextTextBlock(node)) { - if (depth > 0) { - toRemove.push(node) - flattened.push(node) - } - depth++ - traverse(node.children) - } - if (node._type === '__block') { - toRemove.push(node) - flattened.push((node as any).block) - } - }) - toRemove.forEach((node) => { - nodes.splice(nodes.indexOf(node), 1) - }) - depth-- - } - traverse(blocks) - return flattened -} - -function nextSpan(block: PortableTextTextBlock, index: number) { - const next = block.children[index + 1] - return next && next._type === 'span' ? next : null -} - -function prevSpan(block: PortableTextTextBlock, index: number) { - const prev = block.children[index - 1] - return prev && prev._type === 'span' ? prev : null -} - -function isWhiteSpaceChar(text: string) { - return ['\xa0', ' '].includes(text) -} - -/** - * NOTE: _mutates_ passed blocks! - * - * @param blocks - Array of blocks to trim whitespace for - * @returns - */ -export function trimWhitespace(blocks: TypedObject[]): TypedObject[] { - blocks.forEach((block) => { - if (!isPortableTextTextBlock(block)) { - return - } - - // eslint-disable-next-line complexity - block.children.forEach((child, index) => { - if (!isMinimalSpan(child)) { - return - } - const nextChild = nextSpan(block, index) - const prevChild = prevSpan(block, index) - if (index === 0) { - child.text = child.text.replace(/^[^\S\n]+/g, '') - } - if (index === block.children.length - 1) { - child.text = child.text.replace(/[^\S\n]+$/g, '') - } - if ( - /\s/.test(child.text.slice(Math.max(0, child.text.length - 1))) && - nextChild && - isMinimalSpan(nextChild) && - /\s/.test(nextChild.text.slice(0, 1)) - ) { - child.text = child.text.replace(/[^\S\n]+$/g, '') - } - if ( - /\s/.test(child.text.slice(0, 1)) && - prevChild && - isMinimalSpan(prevChild) && - /\s/.test(prevChild.text.slice(Math.max(0, prevChild.text.length - 1))) - ) { - child.text = child.text.replace(/^[^\S\n]+/g, '') - } - if (!child.text) { - block.children.splice(index, 1) - } - if (prevChild && isEqual(prevChild.marks, child.marks) && isWhiteSpaceChar(child.text)) { - prevChild.text += ' ' - block.children.splice(index, 1) - } else if ( - nextChild && - isEqual(nextChild.marks, child.marks) && - isWhiteSpaceChar(child.text) - ) { - nextChild.text = ` ${nextChild.text}` - block.children.splice(index, 1) - } - }) - }) - - return blocks -} - -export function ensureRootIsBlocks(blocks: TypedObject[]): TypedObject[] { - return blocks.reduce((memo, node, i, original) => { - if (node._type === 'block') { - memo.push(node) - return memo - } - - if (node._type === '__block') { - memo.push((node as any).block) - return memo - } - - const lastBlock = memo[memo.length - 1] - if ( - i > 0 && - !isPortableTextTextBlock(original[i - 1]) && - isPortableTextTextBlock(lastBlock) - ) { - lastBlock.children.push(node) - return memo - } - - const block = { - ...DEFAULT_BLOCK, - children: [node], - } - - memo.push(block) - return memo - }, [] as TypedObject[]) -} - -export function isNodeList(node: unknown): node is NodeList { - return Object.prototype.toString.call(node) == '[object NodeList]' -} - -export function isMinimalSpan(node: TypedObject): node is MinimalSpan { - return node._type === 'span' -} - -export function isMinimalBlock(node: TypedObject): node is MinimalBlock { - return node._type === 'block' -} - -export function isPlaceholderDecorator(node: TypedObject): node is PlaceholderDecorator { - return node._type === '__decorator' -} - -export function isPlaceholderAnnotation(node: TypedObject): node is PlaceholderAnnotation { - return node._type === '__annotation' -} - -export function isElement(node: Node): node is Element { - return node.nodeType === 1 -} - -/** - * Helper to normalize whitespace to only 1 empty block between content nodes - * @param node - Root node to process - */ -export function normalizeWhitespace(rootNode: Node) { - let emptyBlockCount = 0 - let lastParent = null - const nodesToRemove: Node[] = [] - - for (let child = rootNode.firstChild; child; child = child.nextSibling) { - if (!isElement(child)) { - normalizeWhitespace(child) - emptyBlockCount = 0 - continue - } - - const elm = child as HTMLElement - - if (isWhitespaceBlock(elm)) { - if (lastParent && elm.parentElement === lastParent) { - emptyBlockCount++ - if (emptyBlockCount > 1) { - nodesToRemove.push(elm) - } - } else { - // Different parent, reset counter - emptyBlockCount = 1 - } - - lastParent = elm.parentElement - } else { - // Recurse into child nodes - normalizeWhitespace(child) - // Reset counter for siblings - emptyBlockCount = 0 - } - } - - // Remove marked nodes - nodesToRemove.forEach((node) => node.parentElement?.removeChild(node)) -} - -/** - * Helper to remove all whitespace nodes - * @param node - Root node to process - */ -export function removeAllWhitespace(rootNode: Node) { - const nodesToRemove: Node[] = [] - - function collectNodesToRemove(currentNode: Node) { - if (isElement(currentNode)) { - const elm = currentNode as HTMLElement - - // Handle
tags that is between

tags - if ( - tagName(elm) === 'br' && - (tagName(elm.nextElementSibling) === 'p' || tagName(elm.previousElementSibling) === 'p') - ) { - nodesToRemove.push(elm) - - return - } - - // Handle empty blocks - if ( - (tagName(elm) === 'p' || tagName(elm) === 'br') && - elm?.firstChild?.textContent?.trim() === '' - ) { - nodesToRemove.push(elm) - - return - } - - // Recursively process child nodes - for (let child = elm.firstChild; child; child = child.nextSibling) { - collectNodesToRemove(child) - } - } - } - - collectNodesToRemove(rootNode) - - // Remove the collected nodes - nodesToRemove.forEach((node) => node.parentElement?.removeChild(node)) -} - -function isWhitespaceBlock(elm: HTMLElement): boolean { - return ['p', 'br'].includes(tagName(elm) || '') && !elm.textContent?.trim() -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/index.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/index.ts deleted file mode 100644 index 4fcdf262a4f..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/index.ts +++ /dev/null @@ -1,275 +0,0 @@ -import { - type ArraySchemaType, - type PortableTextBlock, - type PortableTextObject, - type PortableTextTextBlock, -} from '@sanity/types' -import {flatten} from 'lodash' - -import { - type ArbitraryTypedObject, - type DeserializerRule, - type HtmlDeserializerOptions, - type PlaceholderAnnotation, - type PlaceholderDecorator, - type TypedObject, -} from '../types' -import {findBlockType} from '../util/findBlockType' -import {resolveJsType} from '../util/resolveJsType' -import { - createRuleOptions, - defaultParseHtml, - ensureRootIsBlocks, - flattenNestedBlocks, - isMinimalBlock, - isMinimalSpan, - isNodeList, - isPlaceholderAnnotation, - isPlaceholderDecorator, - preprocess, - tagName, - trimWhitespace, -} from './helpers' -import {createRules} from './rules' - -/** - * HTML Deserializer - * - */ -export default class HtmlDeserializer { - blockContentType: ArraySchemaType - rules: DeserializerRule[] - parseHtml: (html: string) => HTMLElement - _markDefs: PortableTextObject[] = [] - - /** - * Create a new serializer respecting a Sanity block content type's schema - * - * @param blockContentType - Schema type for array containing _at least_ a block child type - * @param options - Options for the deserialization process - */ - constructor(blockContentType: ArraySchemaType, options: HtmlDeserializerOptions = {}) { - const {rules = [], unstable_whitespaceOnPasteMode = 'preserve'} = options - if (!blockContentType) { - throw new Error("Parameter 'blockContentType' is required") - } - const standardRules = createRules(blockContentType, createRuleOptions(blockContentType)) - this.rules = [...rules, ...standardRules] - const parseHtml = options.parseHtml || defaultParseHtml() - this.blockContentType = blockContentType - this.parseHtml = (html) => { - const doc = preprocess(html, parseHtml, {unstable_whitespaceOnPasteMode}) - return doc.body - } - } - - /** - * Deserialize HTML. - * - * @param html - The HTML to deserialize, as a string - * @returns Array of blocks - either portable text blocks or other allowed blocks - */ - deserialize = (html: string): TypedObject[] => { - this._markDefs = [] - const {parseHtml} = this - const fragment = parseHtml(html) - const children = Array.from(fragment.childNodes) as HTMLElement[] - // Ensure that there are no blocks within blocks, and trim whitespace - const blocks = trimWhitespace( - flattenNestedBlocks(ensureRootIsBlocks(this.deserializeElements(children))), - ) - - if (this._markDefs.length > 0) { - blocks - .filter((block): block is PortableTextTextBlock => block._type === 'block') - .forEach((block) => { - block.markDefs = block.markDefs || [] - block.markDefs = block.markDefs.concat( - this._markDefs.filter((def) => { - return flatten(block.children.map((child) => child.marks || [])).includes(def._key) - }), - ) - }) - } - - // Set back the potentially hoisted block type - const type = this.blockContentType.of.find(findBlockType) - if (!type) { - return blocks - } - - return blocks.map((block) => { - if (block._type === 'block') { - block._type = type.name - } - return block - }) - } - - /** - * Deserialize an array of DOM elements. - * - * @param elements - Array of DOM elements to deserialize - * @returns - */ - deserializeElements = (elements: Node[] = []): TypedObject[] => { - let nodes: TypedObject[] = [] - elements.forEach((element) => { - nodes = nodes.concat(this.deserializeElement(element)) - }) - return nodes - } - - /** - * Deserialize a DOM element - * - * @param element - Deserialize a DOM element - * @returns - */ - deserializeElement = (element: Node): TypedObject | TypedObject[] => { - const next = (elements: Node | Node[] | NodeList): TypedObject | TypedObject[] | undefined => { - if (isNodeList(elements)) { - return this.deserializeElements(Array.from(elements)) - } - - if (Array.isArray(elements)) { - return this.deserializeElements(elements) - } - - if (!elements) { - return undefined - } - - return this.deserializeElement(elements) - } - - const block = (props: ArbitraryTypedObject) => { - return { - _type: '__block', - block: props, - } - } - - let node - for (let i = 0; i < this.rules.length; i++) { - const rule = this.rules[i] - if (!rule.deserialize) { - continue - } - - const ret = rule.deserialize(element, next, block) - const type = resolveJsType(ret) - - if (type !== 'array' && type !== 'object' && type !== 'null' && type !== 'undefined') { - throw new Error(`A rule returned an invalid deserialized representation: "${node}".`) - } - - if (ret === undefined) { - continue - } else if (ret === null) { - throw new Error('Deserializer rule returned `null`') - } else if (Array.isArray(ret)) { - node = ret - } else if (isPlaceholderDecorator(ret)) { - node = this.deserializeDecorator(ret) - } else if (isPlaceholderAnnotation(ret)) { - node = this.deserializeAnnotation(ret) - } else { - node = ret - } - - // Set list level on list item - if (ret && !Array.isArray(ret) && isMinimalBlock(ret) && 'listItem' in ret) { - let parent = element.parentNode?.parentNode - while (parent && tagName(parent) === 'li') { - parent = parent.parentNode?.parentNode - ret.level = ret.level ? ret.level + 1 : 1 - } - } - - // Set newlines on spans orginating from a block element within a blockquote - if (ret && !Array.isArray(ret) && isMinimalBlock(ret) && ret.style === 'blockquote') { - ret.children.forEach((child, index) => { - if (isMinimalSpan(child) && child.text === '\r') { - child.text = '\n\n' - if (index === 0 || index === ret.children.length - 1) { - ret.children.splice(index, 1) - } - } - }) - } - break - } - - return node || next(element.childNodes) || [] - } - - /** - * Deserialize a `__decorator` type - * (an internal made up type to process decorators exclusively) - * - * @param decorator - - * @returns array of ... - */ - deserializeDecorator = (decorator: PlaceholderDecorator): TypedObject[] => { - const {name} = decorator - const applyDecorator = (node: TypedObject) => { - if (isPlaceholderDecorator(node)) { - return this.deserializeDecorator(node) - } else if (isMinimalSpan(node)) { - node.marks = node.marks || [] - if (node.text.trim()) { - // Only apply marks if this is an actual text - node.marks.unshift(name) - } - } else if ('children' in node && Array.isArray((node as PortableTextBlock).children)) { - const block = node as any - block.children = block.children.map(applyDecorator) - } - return node - } - return decorator.children.reduce((children, node) => { - const ret = applyDecorator(node) - if (Array.isArray(ret)) { - return children.concat(ret) - } - children.push(ret) - return children - }, [] as TypedObject[]) - } - - /** - * Deserialize a `__annotation` object. - * (an internal made up type to process annotations exclusively) - * - * @param annotation - - * @returns Array of... - */ - deserializeAnnotation = (annotation: PlaceholderAnnotation): TypedObject[] => { - const {markDef} = annotation - this._markDefs.push(markDef) - const applyAnnotation = (node: TypedObject) => { - if (isPlaceholderAnnotation(node)) { - return this.deserializeAnnotation(node) - } else if (isMinimalSpan(node)) { - node.marks = node.marks || [] - if (node.text.trim()) { - // Only apply marks if this is an actual text - node.marks.unshift(markDef._key) - } - } else if ('children' in node && Array.isArray((node as PortableTextBlock).children)) { - const block = node as any - block.children = block.children.map(applyAnnotation) - } - return node - } - return annotation.children.reduce((children, node) => { - const ret = applyAnnotation(node) - if (Array.isArray(ret)) { - return children.concat(ret) - } - children.push(ret) - return children - }, [] as TypedObject[]) - } -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/gdocs.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/gdocs.ts deleted file mode 100644 index c62e5ecdb23..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/gdocs.ts +++ /dev/null @@ -1,75 +0,0 @@ -import {type HtmlPreprocessorOptions} from '../../types' -import {normalizeWhitespace, removeAllWhitespace, tagName} from '../helpers' -import {_XPathResult} from './xpathResult' - -export default (html: string, doc: Document, options: HtmlPreprocessorOptions): Document => { - const whitespaceOnPasteMode = options?.unstable_whitespaceOnPasteMode || 'preserve' - let gDocsRootOrSiblingNode = doc - .evaluate( - '//*[@id and contains(@id, "docs-internal-guid")]', - doc, - null, - _XPathResult.ORDERED_NODE_ITERATOR_TYPE, - null, - ) - .iterateNext() - - if (gDocsRootOrSiblingNode) { - const isWrappedRootTag = tagName(gDocsRootOrSiblingNode) === 'b' - - // If this document isn't wrapped in a 'b' tag, then assume all siblings live on the root level - if (!isWrappedRootTag) { - gDocsRootOrSiblingNode = doc.body - } - - switch (whitespaceOnPasteMode) { - case 'normalize': - // Keep only 1 empty block between content nodes - normalizeWhitespace(gDocsRootOrSiblingNode) - break - case 'remove': - // Remove all whitespace nodes - removeAllWhitespace(gDocsRootOrSiblingNode) - break - default: - break - } - - // Tag every child with attribute 'is-google-docs' so that the GDocs rule-set can - // work exclusivly on these children - const childNodes = doc.evaluate( - '//*', - doc, - null, - _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - null, - ) - - for (let i = childNodes.snapshotLength - 1; i >= 0; i--) { - const elm = childNodes.snapshotItem(i) as HTMLElement - elm?.setAttribute('data-is-google-docs', 'true') - - if ( - elm?.parentElement === gDocsRootOrSiblingNode || - (!isWrappedRootTag && elm.parentElement === doc.body) - ) { - elm?.setAttribute('data-is-root-node', 'true') - tagName(elm) - } - - // Handle checkmark lists - The first child of a list item is an image with a checkmark, and the serializer - // expects the first child to be the text node - if (tagName(elm) === 'li' && elm.firstChild && tagName(elm?.firstChild) === 'img') { - elm.removeChild(elm.firstChild) - } - } - - // Remove that 'b' which Google Docs wraps the HTML content in - if (isWrappedRootTag) { - doc.body.firstElementChild?.replaceWith(...Array.from(gDocsRootOrSiblingNode.childNodes)) - } - - return doc - } - return doc -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/html.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/html.ts deleted file mode 100644 index 9731191af3c..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/html.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {_XPathResult} from './xpathResult' - -// Remove this cruft from the document -const unwantedWordDocumentPaths = [ - '/html/text()', - '/html/head/text()', - '/html/body/text()', - '/html/body/ul/text()', - '/html/body/ol/text()', - '//comment()', - '//style', - '//xml', - '//script', - '//meta', - '//link', -] - -export default (html: string, doc: Document): Document => { - // Make sure text directly on the body is wrapped in spans. - // This mimics what the browser does before putting html on the clipboard, - // when used in a script context with JSDOM - const bodyTextNodes = doc.evaluate( - '/html/body/text()', - doc, - null, - _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - null, - ) - - for (let i = bodyTextNodes.snapshotLength - 1; i >= 0; i--) { - const node = bodyTextNodes.snapshotItem(i) as HTMLElement - const text = node.textContent || '' - if (text.replace(/[^\S\n]+$/g, '')) { - const newNode = doc.createElement('span') - newNode.appendChild(doc.createTextNode(text)) - node.parentNode?.replaceChild(newNode, node) - } else { - node.parentNode?.removeChild(node) - } - } - - const unwantedNodes = doc.evaluate( - unwantedWordDocumentPaths.join('|'), - doc, - null, - _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - null, - ) - for (let i = unwantedNodes.snapshotLength - 1; i >= 0; i--) { - const unwanted = unwantedNodes.snapshotItem(i) - if (!unwanted) { - continue - } - unwanted.parentNode?.removeChild(unwanted) - } - return doc -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/index.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/index.ts deleted file mode 100644 index 72480364b0d..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import preprocessGDocs from './gdocs' -import preprocessHTML from './html' -import preprocessNotion from './notion' -import preprocessWhitespace from './whitespace' -import preprocessWord from './word' - -export default [ - preprocessWhitespace, - preprocessNotion, - preprocessWord, - preprocessGDocs, - preprocessHTML, -] diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/notion.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/notion.ts deleted file mode 100644 index 639717ba332..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/notion.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {_XPathResult} from './xpathResult' - -export default (html: string, doc: Document): Document => { - const NOTION_REGEX = //g - - if (html.match(NOTION_REGEX)) { - // Tag every child with attribute 'is-notion' so that the Notion rule-set can - // work exclusivly on these children - const childNodes = doc.evaluate( - '//*', - doc, - null, - _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - null, - ) - - for (let i = childNodes.snapshotLength - 1; i >= 0; i--) { - const elm = childNodes.snapshotItem(i) as HTMLElement - elm?.setAttribute('data-is-notion', 'true') - } - - return doc - } - return doc -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/whitespace.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/whitespace.ts deleted file mode 100644 index 9e424e2bc08..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/whitespace.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {PRESERVE_WHITESPACE_TAGS} from '../../constants' -import {_XPathResult} from './xpathResult' - -export default (_: string, doc: Document): Document => { - // Recursively process all nodes. - function processNode(node: Node) { - // If this is a text node and not inside a tag where whitespace should be preserved, process it. - if ( - node.nodeType === _XPathResult.BOOLEAN_TYPE && - !PRESERVE_WHITESPACE_TAGS.includes(node.parentElement?.tagName.toLowerCase() || '') - ) { - node.textContent = - node.textContent - ?.replace(/\s\s+/g, ' ') // Remove multiple whitespace - .replace(/[\r\n]+/g, ' ') || '' // Replace newlines with spaces - } - // Otherwise, if this node has children, process them. - else { - for (let i = 0; i < node.childNodes.length; i++) { - processNode(node.childNodes[i]) - } - } - } - - // Process all nodes starting from the root. - processNode(doc.body) - - return doc -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/word.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/word.ts deleted file mode 100644 index 5fb3e4cba60..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/word.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {_XPathResult} from './xpathResult' - -const WORD_HTML_REGEX = /(class="?Mso|style=(?:"|')[^"]*?\bmso-|w:WordDocument||<\/font>)/ - -// xPaths for elements that will be removed from the document -const unwantedPaths = [ - '//o:p', - "//span[@style='mso-list:Ignore']", - "//span[@style='mso-list: Ignore']", -] - -// xPaths for elements that needs to be remapped into other tags -const mappedPaths = [ - "//p[@class='MsoTocHeading']", - "//p[@class='MsoTitle']", - "//p[@class='MsoToaHeading']", - "//p[@class='MsoSubtitle']", - "//span[@class='MsoSubtleEmphasis']", - "//span[@class='MsoIntenseEmphasis']", -] - -// Which HTML element(s) to map the elements matching mappedPaths into -const elementMap: Record = { - MsoTocHeading: ['h3'], - MsoTitle: ['h1'], - MsoToaHeading: ['h2'], - MsoSubtitle: ['h5'], - MsoSubtleEmphasis: ['span', 'em'], - MsoIntenseEmphasis: ['span', 'em', 'strong'], - // Remove cruft -} - -function isWordHtml(html: string) { - return WORD_HTML_REGEX.test(html) -} - -export default (html: string, doc: Document): Document => { - if (!isWordHtml(html)) { - return doc - } - - const unwantedNodes = doc.evaluate( - unwantedPaths.join('|'), - doc, - (prefix) => { - if (prefix === 'o') { - return 'urn:schemas-microsoft-com:office:office' - } - return null - }, - _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - null, - ) - - for (let i = unwantedNodes.snapshotLength - 1; i >= 0; i--) { - const unwanted = unwantedNodes.snapshotItem(i) - if (unwanted?.parentNode) { - unwanted.parentNode.removeChild(unwanted) - } - } - - // Transform mapped elements into what they should be mapped to - const mappedElements = doc.evaluate( - mappedPaths.join('|'), - doc, - null, - _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - null, - ) - for (let i = mappedElements.snapshotLength - 1; i >= 0; i--) { - const mappedElm = mappedElements.snapshotItem(i) as HTMLElement - const tags = elementMap[mappedElm.className] - const text = doc.createTextNode(mappedElm.textContent || '') - if (!tags) { - continue - } - - const parentElement = doc.createElement(tags[0]) - let parent = parentElement - let child = parentElement - tags.slice(1).forEach((tag) => { - child = doc.createElement(tag) - parent.appendChild(child) - parent = child - }) - child.appendChild(text) - mappedElm?.parentNode?.replaceChild(parentElement, mappedElm) - } - - return doc -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/xpathResult.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/xpathResult.ts deleted file mode 100644 index a20424f2aec..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/preprocessors/xpathResult.ts +++ /dev/null @@ -1,13 +0,0 @@ -// We need this here if run server side -export const _XPathResult = { - ANY_TYPE: 0, - NUMBER_TYPE: 1, - STRING_TYPE: 2, - BOOLEAN_TYPE: 3, - UNORDERED_NODE_ITERATOR_TYPE: 4, - ORDERED_NODE_ITERATOR_TYPE: 5, - UNORDERED_NODE_SNAPSHOT_TYPE: 6, - ORDERED_NODE_SNAPSHOT_TYPE: 7, - ANY_UNORDERED_NODE_TYPE: 8, - FIRST_ORDERED_NODE_TYPE: 9, -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/gdocs.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/rules/gdocs.ts deleted file mode 100644 index c750d1ff756..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/gdocs.ts +++ /dev/null @@ -1,179 +0,0 @@ -import {type ArraySchemaType} from '@sanity/types' - -import { - BLOCK_DEFAULT_STYLE, - DEFAULT_BLOCK, - DEFAULT_SPAN, - HTML_BLOCK_TAGS, - HTML_HEADER_TAGS, - HTML_LIST_CONTAINER_TAGS, -} from '../../constants' -import {type BlockEnabledFeatures, type DeserializerRule} from '../../types' -import {isElement, tagName} from '../helpers' - -const LIST_CONTAINER_TAGS = Object.keys(HTML_LIST_CONTAINER_TAGS) - -// font-style:italic seems like the most important rule for italic / emphasis in their html -function isEmphasis(el: Node): boolean { - const style = isElement(el) && el.getAttribute('style') - return /font-style\s*:\s*italic/.test(style || '') -} - -// font-weight:700 seems like the most important rule for bold in their html -function isStrong(el: Node): boolean { - const style = isElement(el) && el.getAttribute('style') - return /font-weight\s*:\s*700/.test(style || '') -} - -// text-decoration seems like the most important rule for underline in their html -function isUnderline(el: Node): boolean { - if (!isElement(el) || tagName(el.parentNode) === 'a') { - return false - } - - const style = isElement(el) && el.getAttribute('style') - - return /text-decoration\s*:\s*underline/.test(style || '') -} - -// text-decoration seems like the most important rule for strike-through in their html -// allows for line-through regex to be more lineient to allow for other text-decoration before or after -function isStrikethrough(el: Node): boolean { - const style = isElement(el) && el.getAttribute('style') - return /text-decoration\s*:\s*(?:.*line-through.*;)/.test(style || '') -} - -// Check for attribute given by the gdocs preprocessor -function isGoogleDocs(el: Node): boolean { - return isElement(el) && Boolean(el.getAttribute('data-is-google-docs')) -} - -function isRootNode(el: Node): boolean { - return isElement(el) && Boolean(el.getAttribute('data-is-root-node')) -} - -function getListItemStyle(el: Node): 'bullet' | 'number' | undefined { - const parentTag = tagName(el.parentNode) - if (parentTag && !LIST_CONTAINER_TAGS.includes(parentTag)) { - return undefined - } - return tagName(el.parentNode) === 'ul' ? 'bullet' : 'number' -} - -function getListItemLevel(el: Node): number { - let level = 0 - if (tagName(el) === 'li') { - let parentNode = el.parentNode - while (parentNode) { - const parentTag = tagName(parentNode) - if (parentTag && LIST_CONTAINER_TAGS.includes(parentTag)) { - level++ - } - parentNode = parentNode.parentNode - } - } else { - level = 1 - } - return level -} - -const blocks: Record = { - ...HTML_BLOCK_TAGS, - ...HTML_HEADER_TAGS, -} - -function getBlockStyle(el: Node, enabledBlockStyles: string[]): string { - const childTag = tagName(el.firstChild) - const block = childTag && blocks[childTag] - if (!block) { - return BLOCK_DEFAULT_STYLE - } - if (!enabledBlockStyles.includes(block.style)) { - return BLOCK_DEFAULT_STYLE - } - return block.style -} - -export default function createGDocsRules( - _blockContentType: ArraySchemaType, - options: BlockEnabledFeatures, -): DeserializerRule[] { - return [ - { - deserialize(el) { - if (isElement(el) && tagName(el) === 'span' && isGoogleDocs(el)) { - const span = { - ...DEFAULT_SPAN, - marks: [] as string[], - text: el.textContent, - } - if (isStrong(el)) { - span.marks.push('strong') - } - if (isUnderline(el)) { - span.marks.push('underline') - } - if (isStrikethrough(el)) { - span.marks.push('strike-through') - } - if (isEmphasis(el)) { - span.marks.push('em') - } - return span - } - return undefined - }, - }, - { - deserialize(el, next) { - if (tagName(el) === 'li' && isGoogleDocs(el)) { - return { - ...DEFAULT_BLOCK, - listItem: getListItemStyle(el), - level: getListItemLevel(el), - style: getBlockStyle(el, options.enabledBlockStyles), - children: next(el.firstChild?.childNodes || []), - } - } - return undefined - }, - }, - { - deserialize(el) { - if ( - tagName(el) === 'br' && - isGoogleDocs(el) && - isElement(el) && - el.classList.contains('apple-interchange-newline') - ) { - return { - ...DEFAULT_SPAN, - text: '', - } - } - - // BRs inside empty paragraphs - if ( - tagName(el) === 'br' && - isGoogleDocs(el) && - isElement(el) && - el?.parentNode?.textContent === '' - ) { - return { - ...DEFAULT_SPAN, - text: '', - } - } - - // BRs on the root - if (tagName(el) === 'br' && isGoogleDocs(el) && isElement(el) && isRootNode(el)) { - return { - ...DEFAULT_SPAN, - text: '', - } - } - return undefined - }, - }, - ] -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/html.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/rules/html.ts deleted file mode 100644 index 5ca3b959c10..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/html.ts +++ /dev/null @@ -1,250 +0,0 @@ -import {type ArraySchemaType} from '@sanity/types' - -import { - DEFAULT_BLOCK, - DEFAULT_SPAN, - HTML_BLOCK_TAGS, - HTML_DECORATOR_TAGS, - HTML_HEADER_TAGS, - HTML_LIST_CONTAINER_TAGS, - HTML_LIST_ITEM_TAGS, - HTML_SPAN_TAGS, - type PartialBlock, -} from '../../constants' -import {type BlockEnabledFeatures, type DeserializerRule} from '../../types' -import {randomKey} from '../../util/randomKey' -import {isElement, tagName} from '../helpers' - -export function resolveListItem( - listNodeTagName: string, - enabledListTypes: string[], -): string | undefined { - if (listNodeTagName === 'ul' && enabledListTypes.includes('bullet')) { - return 'bullet' - } - if (listNodeTagName === 'ol' && enabledListTypes.includes('number')) { - return 'number' - } - return undefined -} - -export default function createHTMLRules( - blockContentType: ArraySchemaType, - options: BlockEnabledFeatures, -): DeserializerRule[] { - return [ - // Text nodes - { - deserialize(el) { - if (tagName(el) === 'pre') { - return undefined - } - const isValidWhiteSpace = - el.nodeType === 3 && - (el.textContent || '').replace(/[\r\n]/g, ' ').replace(/\s\s+/g, ' ') === ' ' && - el.nextSibling && - el.nextSibling.nodeType !== 3 && - el.previousSibling && - el.previousSibling.nodeType !== 3 - const isValidText = - (isValidWhiteSpace || el.textContent !== ' ') && tagName(el.parentNode) !== 'body' - if (el.nodeName === '#text' && isValidText) { - return { - ...DEFAULT_SPAN, - marks: [], - text: (el.textContent || '').replace(/\s\s+/g, ' '), - } - } - return undefined - }, - }, // Pre element - { - deserialize(el) { - if (tagName(el) !== 'pre') { - return undefined - } - - const isCodeEnabled = options.enabledBlockStyles.includes('code') - - return { - _type: 'block', - style: 'normal', - markDefs: [], - children: [ - { - ...DEFAULT_SPAN, - marks: isCodeEnabled ? ['code'] : [], - text: el.textContent || '', - }, - ], - } - }, - }, // Blockquote element - { - deserialize(el, next) { - if (tagName(el) !== 'blockquote') { - return undefined - } - const blocks: Record = { - ...HTML_BLOCK_TAGS, - ...HTML_HEADER_TAGS, - } - delete blocks.blockquote - - const children: HTMLElement[] = [] - el.childNodes.forEach((node, index) => { - if ( - node.nodeType === 1 && - Object.keys(blocks).includes((node as Element).localName.toLowerCase()) - ) { - if (!el.ownerDocument) { - return - } - - const span = el.ownerDocument.createElement('span') - span.appendChild(el.ownerDocument.createTextNode('\r')) - node.childNodes.forEach((cn) => { - span.appendChild(cn.cloneNode(true)) - }) - if (index !== el.childNodes.length) { - span.appendChild(el.ownerDocument.createTextNode('\r')) - } - children.push(span) - } else { - children.push(node as HTMLElement) - } - }) - - return { - _type: 'block', - style: 'blockquote', - markDefs: [], - children: next(children), - } - }, - }, // Block elements - { - deserialize(el, next) { - const blocks: Record = { - ...HTML_BLOCK_TAGS, - ...HTML_HEADER_TAGS, - } - const tag = tagName(el) - let block = tag ? blocks[tag] : undefined - if (!block) { - return undefined - } - // Don't add blocks into list items - if (el.parentNode && tagName(el.parentNode) === 'li') { - return next(el.childNodes) - } - // If style is not supported, return a defaultBlockType - if (!options.enabledBlockStyles.includes(block.style)) { - block = DEFAULT_BLOCK - } - return { - ...block, - children: next(el.childNodes), - } - }, - }, // Ignore span tags - { - deserialize(el, next) { - const tag = tagName(el) - if (!tag || !(tag in HTML_SPAN_TAGS)) { - return undefined - } - return next(el.childNodes) - }, - }, // Ignore div tags - { - deserialize(el, next) { - const div = tagName(el) === 'div' - if (!div) { - return undefined - } - return next(el.childNodes) - }, - }, // Ignore list containers - { - deserialize(el, next) { - const tag = tagName(el) - if (!tag || !(tag in HTML_LIST_CONTAINER_TAGS)) { - return undefined - } - return next(el.childNodes) - }, - }, // Deal with br's - { - deserialize(el) { - if (tagName(el) === 'br') { - return { - ...DEFAULT_SPAN, - text: '\n', - } - } - return undefined - }, - }, // Deal with list items - { - deserialize(el, next, block) { - const tag = tagName(el) - const listItem = tag ? HTML_LIST_ITEM_TAGS[tag] : undefined - const parentTag = tagName(el.parentNode) || '' - if (!listItem || !el.parentNode || !HTML_LIST_CONTAINER_TAGS[parentTag]) { - return undefined - } - const enabledListItem = resolveListItem(parentTag, options.enabledListTypes) - // If the list item style is not supported, return a new default block - if (!enabledListItem) { - return block({_type: 'block', children: next(el.childNodes)}) - } - listItem.listItem = enabledListItem - return { - ...listItem, - children: next(el.childNodes), - } - }, - }, // Deal with decorators - this is a limited set of known html elements that we know how to deserialize - { - deserialize(el, next) { - const decorator = HTML_DECORATOR_TAGS[tagName(el) || ''] - if (!decorator || !options.enabledSpanDecorators.includes(decorator)) { - return undefined - } - return { - _type: '__decorator', - name: decorator, - children: next(el.childNodes), - } - }, - }, // Special case for hyperlinks, add annotation (if allowed by schema), - // If not supported just write out the link text and href in plain text. - { - deserialize(el, next) { - if (tagName(el) != 'a') { - return undefined - } - const linkEnabled = options.enabledBlockAnnotations.includes('link') - const href = isElement(el) && el.getAttribute('href') - if (!href) { - return next(el.childNodes) - } - let markDef - if (linkEnabled) { - markDef = { - _key: randomKey(12), - _type: 'link', - href: href, - } - return { - _type: '__annotation', - markDef: markDef, - children: next(el.childNodes), - } - } - return el.appendChild(el.ownerDocument.createTextNode(` (${href})`)) && next(el.childNodes) - }, - }, - ] -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/index.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/rules/index.ts deleted file mode 100644 index 5ceabdc7d53..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {type ArraySchemaType} from '@sanity/types' - -import {type BlockEnabledFeatures, type DeserializerRule} from '../../types' -import createGDocsRules from './gdocs' -import createHTMLRules from './html' -import createNotionRules from './notion' -import createWordRules from './word' - -export function createRules( - blockContentType: ArraySchemaType, - options: BlockEnabledFeatures, -): DeserializerRule[] { - return [ - ...createWordRules(), - ...createNotionRules(blockContentType), - ...createGDocsRules(blockContentType, options), - ...createHTMLRules(blockContentType, options), - ] -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/notion.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/rules/notion.ts deleted file mode 100644 index fac526e1081..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/notion.ts +++ /dev/null @@ -1,62 +0,0 @@ -import {type ArraySchemaType} from '@sanity/types' - -import {DEFAULT_SPAN, HTML_BLOCK_TAGS, HTML_HEADER_TAGS} from '../../constants' -import {type DeserializerRule} from '../../types' -import {isElement, tagName} from '../helpers' - -// font-style:italic seems like the most important rule for italic / emphasis in their html -function isEmphasis(el: Node): boolean { - const style = isElement(el) && el.getAttribute('style') - return /font-style:italic/.test(style || '') -} - -// font-weight:700 or 600 seems like the most important rule for bold in their html -function isStrong(el: Node): boolean { - const style = isElement(el) && el.getAttribute('style') - return /font-weight:700/.test(style || '') || /font-weight:600/.test(style || '') -} - -// text-decoration seems like the most important rule for underline in their html -function isUnderline(el: Node): boolean { - const style = isElement(el) && el.getAttribute('style') - return /text-decoration:underline/.test(style || '') -} - -// Check for attribute given by the Notion preprocessor -function isNotion(el: Node): boolean { - return isElement(el) && Boolean(el.getAttribute('data-is-notion')) -} - -const blocks: Record = { - ...HTML_BLOCK_TAGS, - ...HTML_HEADER_TAGS, -} - -export default function createNotionRules(_blockContentType: ArraySchemaType): DeserializerRule[] { - return [ - { - deserialize(el) { - // Notion normally exports semantic HTML. However, if you copy a single block, the formatting will be inline styles - // This handles a limited set of styles - if (isElement(el) && tagName(el) === 'span' && isNotion(el)) { - const span = { - ...DEFAULT_SPAN, - marks: [] as string[], - text: el.textContent, - } - if (isStrong(el)) { - span.marks.push('strong') - } - if (isUnderline(el)) { - span.marks.push('underline') - } - if (isEmphasis(el)) { - span.marks.push('em') - } - return span - } - return undefined - }, - }, - ] -} diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/word.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/rules/word.ts deleted file mode 100644 index fd80da743ba..00000000000 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/rules/word.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {BLOCK_DEFAULT_STYLE, DEFAULT_BLOCK} from '../../constants' -import {type DeserializerRule} from '../../types' -import {isElement, tagName} from '../helpers' - -function getListItemStyle(el: Node): string | undefined { - const style = isElement(el) && el.getAttribute('style') - if (!style) { - return undefined - } - - if (!style.match(/lfo\d+/)) { - return undefined - } - - return style.match('lfo1') ? 'bullet' : 'number' -} - -function getListItemLevel(el: Node): number | undefined { - const style = isElement(el) && el.getAttribute('style') - if (!style) { - return undefined - } - - const levelMatch = style.match(/level\d+/) - if (!levelMatch) { - return undefined - } - - const [level] = levelMatch[0].match(/\d/) || [] - const levelNum = level ? parseInt(level, 10) : 1 - return levelNum || 1 -} - -function isWordListElement(el: Node): boolean { - return isElement(el) && el.className - ? el.className === 'MsoListParagraphCxSpFirst' || - el.className === 'MsoListParagraphCxSpMiddle' || - el.className === 'MsoListParagraphCxSpLast' - : false -} - -export default function createWordRules(): DeserializerRule[] { - return [ - { - deserialize(el, next) { - if (tagName(el) === 'p' && isWordListElement(el)) { - return { - ...DEFAULT_BLOCK, - listItem: getListItemStyle(el), - level: getListItemLevel(el), - style: BLOCK_DEFAULT_STYLE, - children: next(el.childNodes), - } - } - return undefined - }, - }, - ] -} diff --git a/packages/@sanity/block-tools/src/constants.ts b/packages/@sanity/block-tools/src/constants.ts deleted file mode 100644 index e75803aaa38..00000000000 --- a/packages/@sanity/block-tools/src/constants.ts +++ /dev/null @@ -1,99 +0,0 @@ -import {uniq} from 'lodash' - -export interface PartialBlock { - _type: string - markDefs: string[] - style: string - level?: number - listItem?: string -} - -export const PRESERVE_WHITESPACE_TAGS = ['pre', 'textarea', 'code'] - -export const BLOCK_DEFAULT_STYLE = 'normal' - -export const DEFAULT_BLOCK: PartialBlock = Object.freeze({ - _type: 'block', - markDefs: [], - style: BLOCK_DEFAULT_STYLE, -}) - -export const DEFAULT_SPAN = Object.freeze({ - _type: 'span', - marks: [] as string[], -}) - -export const HTML_BLOCK_TAGS = { - p: DEFAULT_BLOCK, - blockquote: {...DEFAULT_BLOCK, style: 'blockquote'} as PartialBlock, -} - -export const HTML_SPAN_TAGS = { - span: {object: 'text'}, -} - -export const HTML_LIST_CONTAINER_TAGS: Record = { - ol: {object: null}, - ul: {object: null}, -} - -export const HTML_HEADER_TAGS: Record = { - h1: {...DEFAULT_BLOCK, style: 'h1'}, - h2: {...DEFAULT_BLOCK, style: 'h2'}, - h3: {...DEFAULT_BLOCK, style: 'h3'}, - h4: {...DEFAULT_BLOCK, style: 'h4'}, - h5: {...DEFAULT_BLOCK, style: 'h5'}, - h6: {...DEFAULT_BLOCK, style: 'h6'}, -} - -export const HTML_MISC_TAGS = { - br: {...DEFAULT_BLOCK, style: BLOCK_DEFAULT_STYLE} as PartialBlock, -} - -export const HTML_DECORATOR_TAGS: Record = { - b: 'strong', - strong: 'strong', - - i: 'em', - em: 'em', - - u: 'underline', - s: 'strike-through', - strike: 'strike-through', - del: 'strike-through', - - code: 'code', - sup: 'sup', - sub: 'sub', - ins: 'ins', - mark: 'mark', - small: 'small', -} - -export const HTML_LIST_ITEM_TAGS: Record = { - li: { - ...DEFAULT_BLOCK, - style: BLOCK_DEFAULT_STYLE, - level: 1, - listItem: 'bullet', - }, -} - -export const ELEMENT_MAP = { - ...HTML_BLOCK_TAGS, - ...HTML_SPAN_TAGS, - ...HTML_LIST_CONTAINER_TAGS, - ...HTML_LIST_ITEM_TAGS, - ...HTML_HEADER_TAGS, - ...HTML_MISC_TAGS, -} - -export const DEFAULT_SUPPORTED_STYLES = uniq( - Object.values(ELEMENT_MAP) - .filter((tag): tag is PartialBlock => 'style' in tag) - .map((tag) => tag.style), -) - -export const DEFAULT_SUPPORTED_DECORATORS = uniq(Object.values(HTML_DECORATOR_TAGS)) - -export const DEFAULT_SUPPORTED_ANNOTATIONS = ['link'] diff --git a/packages/@sanity/block-tools/src/index.ts b/packages/@sanity/block-tools/src/index.ts deleted file mode 100644 index 7624d6e8fec..00000000000 --- a/packages/@sanity/block-tools/src/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -import {type ArraySchemaType, type PortableTextTextBlock} from '@sanity/types' - -import HtmlDeserializer from './HtmlDeserializer' -import {type BlockContentFeatures, type HtmlDeserializerOptions, type TypedObject} from './types' -import blockContentTypeFeatures from './util/blockContentTypeFeatures' -import {normalizeBlock} from './util/normalizeBlock' - -/** - * Convert HTML to blocks respecting the block content type's schema - * - * @param html - The HTML to convert to blocks - * @param blockContentType - A compiled version of the schema type for the block content - * @param options - Options for deserializing HTML to blocks - * @returns Array of blocks - * @public - */ -export function htmlToBlocks( - html: string, - blockContentType: ArraySchemaType, - options: HtmlDeserializerOptions = {}, -): (TypedObject | PortableTextTextBlock)[] { - const deserializer = new HtmlDeserializer(blockContentType, options) - return deserializer.deserialize(html).map((block) => normalizeBlock(block)) -} - -/** - * Normalize and extract features of an schema type containing a block type - * - * @param blockContentType - Schema type for the block type - * @returns Returns the featureset of a compiled block content type. - * @public - */ -export function getBlockContentFeatures(blockContentType: ArraySchemaType): BlockContentFeatures { - return blockContentTypeFeatures(blockContentType) -} - -export {normalizeBlock} -export {randomKey} from './util/randomKey' -export type {BlockContentFeatures, HtmlDeserializerOptions, TypedObject} -export type { - ArbitraryTypedObject, - BlockEditorSchemaProps, - DeserializerRule, - HtmlParser, - ResolvedAnnotationType, -} from './types' -export type {BlockNormalizationOptions} from './util/normalizeBlock' diff --git a/packages/@sanity/block-tools/src/types.ts b/packages/@sanity/block-tools/src/types.ts deleted file mode 100644 index 7d6533a0038..00000000000 --- a/packages/@sanity/block-tools/src/types.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { - type ArraySchemaType, - type I18nTitledListValue, - type ObjectSchemaType, - type PortableTextObject, - type SpanSchemaType, - type TitledListValue, -} from '@sanity/types' -import {type ComponentType} from 'react' - -/** - * @public - */ -export interface BlockContentFeatures { - styles: TitledListValue[] - decorators: TitledListValue[] - annotations: ResolvedAnnotationType[] - lists: I18nTitledListValue[] - types: { - block: ArraySchemaType - span: SpanSchemaType - inlineObjects: ObjectSchemaType[] - blockObjects: ObjectSchemaType[] - } -} - -/** - * @beta - */ -export interface BlockEditorSchemaProps { - icon?: string | ComponentType - render?: ComponentType -} - -/** - * @public - */ -export interface ResolvedAnnotationType { - blockEditor?: BlockEditorSchemaProps - title: string | undefined - value: string - type: ObjectSchemaType - icon: ComponentType | undefined -} - -/** - * @public - */ -export interface TypedObject { - _type: string - _key?: string -} - -/** - * @public - */ -export interface ArbitraryTypedObject extends TypedObject { - [key: string]: unknown -} - -export interface MinimalSpan { - _type: 'span' - _key?: string - text: string - marks?: string[] -} - -export interface MinimalBlock extends TypedObject { - _type: 'block' - children: TypedObject[] - markDefs?: TypedObject[] - style?: string - level?: number - listItem?: string -} - -export interface PlaceholderDecorator { - _type: '__decorator' - name: string - children: TypedObject[] -} - -export interface PlaceholderAnnotation { - _type: '__annotation' - markDef: PortableTextObject - children: TypedObject[] -} - -/** - * @public - */ -export type HtmlParser = (html: string) => Document - -/** - * @public - */ -export type WhiteSpacePasteMode = 'preserve' | 'remove' | 'normalize' - -/** - * @public - */ -export interface HtmlDeserializerOptions { - rules?: DeserializerRule[] - parseHtml?: HtmlParser - unstable_whitespaceOnPasteMode?: WhiteSpacePasteMode -} - -/** - * @public - */ -export interface HtmlPreprocessorOptions { - unstable_whitespaceOnPasteMode?: WhiteSpacePasteMode -} - -/** - * @public - */ -export interface DeserializerRule { - deserialize: ( - el: Node, - next: (elements: Node | Node[] | NodeList) => TypedObject | TypedObject[] | undefined, - createBlock: (props: ArbitraryTypedObject) => { - _type: string - block: ArbitraryTypedObject - }, - ) => TypedObject | TypedObject[] | undefined -} - -/** - * @public - */ -export interface BlockEnabledFeatures { - enabledBlockStyles: string[] - enabledSpanDecorators: string[] - enabledListTypes: string[] - enabledBlockAnnotations: string[] -} diff --git a/packages/@sanity/block-tools/src/util/blockContentTypeFeatures.ts b/packages/@sanity/block-tools/src/util/blockContentTypeFeatures.ts deleted file mode 100644 index 262cb1bc3dc..00000000000 --- a/packages/@sanity/block-tools/src/util/blockContentTypeFeatures.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { - type ArraySchemaType, - type BlockSchemaType, - type EnumListProps, - type I18nTitledListValue, - isBlockChildrenObjectField, - isBlockListObjectField, - isBlockSchemaType, - isBlockStyleObjectField, - isObjectSchemaType, - isTitledListValue, - type ObjectSchemaType, - type SpanSchemaType, - type TitledListValue, -} from '@sanity/types' - -import {type BlockContentFeatures, type ResolvedAnnotationType} from '../types' -import {findBlockType} from './findBlockType' - -// Helper method for describing a blockContentType's feature set -export default function blockContentFeatures( - blockContentType: ArraySchemaType, -): BlockContentFeatures { - if (!blockContentType) { - throw new Error("Parameter 'blockContentType' required") - } - - const blockType = blockContentType.of.find(findBlockType) - if (!isBlockSchemaType(blockType)) { - throw new Error("'block' type is not defined in this schema (required).") - } - - const ofType = blockType.fields.find(isBlockChildrenObjectField)?.type?.of - if (!ofType) { - throw new Error('No `of` declaration found for blocks `children` field') - } - - const spanType = ofType.find((member): member is SpanSchemaType => member.name === 'span') - if (!spanType) { - throw new Error('No `span` type found in `block` schema type `children` definition') - } - - const inlineObjectTypes = ofType.filter( - (inlineType): inlineType is ObjectSchemaType => - inlineType.name !== 'span' && isObjectSchemaType(inlineType), - ) - - const blockObjectTypes = blockContentType.of.filter( - (memberType): memberType is ObjectSchemaType => - memberType.name !== blockType.name && isObjectSchemaType(memberType), - ) - - return { - styles: resolveEnabledStyles(blockType), - decorators: resolveEnabledDecorators(spanType), - annotations: resolveEnabledAnnotationTypes(spanType), - lists: resolveEnabledListItems(blockType), - types: { - block: blockContentType, - span: spanType, - inlineObjects: inlineObjectTypes, - blockObjects: blockObjectTypes, - }, - } -} - -function resolveEnabledStyles(blockType: BlockSchemaType): TitledListValue[] { - const styleField = blockType.fields.find(isBlockStyleObjectField) - if (!styleField) { - throw new Error("A field with name 'style' is not defined in the block type (required).") - } - - const textStyles = getTitledListValuesFromEnumListOptions(styleField.type.options) - if (textStyles.length === 0) { - throw new Error( - 'The style fields need at least one style ' + - "defined. I.e: {title: 'Normal', value: 'normal'}.", - ) - } - - return textStyles -} - -function resolveEnabledAnnotationTypes(spanType: SpanSchemaType): ResolvedAnnotationType[] { - return spanType.annotations.map((annotation) => ({ - title: annotation.title, - type: annotation, - value: annotation.name, - icon: annotation.icon, - })) -} - -function resolveEnabledDecorators(spanType: SpanSchemaType): TitledListValue[] { - return spanType.decorators -} - -function resolveEnabledListItems(blockType: BlockSchemaType): I18nTitledListValue[] { - const listField = blockType.fields.find(isBlockListObjectField) - if (!listField) { - throw new Error("A field with name 'list' is not defined in the block type (required).") - } - - const listItems = getTitledListValuesFromEnumListOptions(listField.type.options) - if (!listItems) { - throw new Error('The list field need at least to be an empty array') - } - - return listItems -} - -function getTitledListValuesFromEnumListOptions( - options: EnumListProps | undefined, -): I18nTitledListValue[] { - const list = options ? options.list : undefined - if (!Array.isArray(list)) { - return [] - } - - return list.map((item) => (isTitledListValue(item) ? item : {title: item, value: item})) -} diff --git a/packages/@sanity/block-tools/src/util/findBlockType.ts b/packages/@sanity/block-tools/src/util/findBlockType.ts deleted file mode 100644 index fadc563fbc9..00000000000 --- a/packages/@sanity/block-tools/src/util/findBlockType.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {type BlockSchemaType, type SchemaType} from '@sanity/types' - -export function findBlockType(type: SchemaType): type is BlockSchemaType { - if (type.type) { - return findBlockType(type.type) - } - - if (type.name === 'block') { - return true - } - - return false -} diff --git a/packages/@sanity/block-tools/src/util/normalizeBlock.ts b/packages/@sanity/block-tools/src/util/normalizeBlock.ts deleted file mode 100644 index 3cf4511504a..00000000000 --- a/packages/@sanity/block-tools/src/util/normalizeBlock.ts +++ /dev/null @@ -1,124 +0,0 @@ -import {isPortableTextSpan, type PortableTextSpan, type PortableTextTextBlock} from '@sanity/types' -import {isEqual} from 'lodash' - -import {type TypedObject} from '../types' -import {randomKey} from './randomKey' - -/** - * Block normalization options - * - * @public - */ -export interface BlockNormalizationOptions { - /** - * Decorator names that are allowed within portable text blocks, eg `em`, `strong` - */ - allowedDecorators?: string[] - - /** - * Name of the portable text block type, if not `block` - */ - blockTypeName?: string -} - -/** - * Normalizes a block by ensuring it has a `_key` property. If the block is a - * portable text block, additional normalization is applied: - * - * - Ensures it has `children` and `markDefs` properties - * - Ensures it has at least one child (adds an empty span if empty) - * - Joins sibling spans that has the same marks - * - Removes decorators that are not allowed according to the schema - * - Removes marks that have no annotation definition - * - * @param node - The block to normalize - * @param options - Options for normalization process. See {@link BlockNormalizationOptions} - * @returns Normalized block - * @public - */ -export function normalizeBlock( - node: TypedObject, - options: BlockNormalizationOptions = {}, -): Omit, '_key'> & { - _key: string -} { - if (node._type !== (options.blockTypeName || 'block')) { - return '_key' in node ? (node as TypedObject & {_key: string}) : {...node, _key: randomKey(12)} - } - - const block: Omit, 'style'> = { - _key: randomKey(12), - children: [], - markDefs: [], - ...node, - } - - const lastChild = block.children[block.children.length - 1] - if (!lastChild) { - // A block must at least have an empty span type child - block.children = [ - { - _type: 'span', - _key: `${block._key}${0}`, - text: '', - marks: [], - }, - ] - return block - } - - const usedMarkDefs: string[] = [] - const allowedDecorators = - options.allowedDecorators && Array.isArray(options.allowedDecorators) - ? options.allowedDecorators - : false - - block.children = block.children - .reduce( - (acc, child) => { - const previousChild = acc[acc.length - 1] - if ( - previousChild && - isPortableTextSpan(child) && - isPortableTextSpan(previousChild) && - isEqual(previousChild.marks, child.marks) - ) { - if (lastChild && lastChild === child && child.text === '' && block.children.length > 1) { - return acc - } - - previousChild.text += child.text - return acc - } - acc.push(child) - return acc - }, - [] as (TypedObject | PortableTextSpan)[], - ) - .map((child, index) => { - if (!child) { - throw new Error('missing child') - } - - child._key = `${block._key}${index}` - if (isPortableTextSpan(child)) { - if (!child.marks) { - child.marks = [] - } else if (allowedDecorators) { - child.marks = child.marks.filter((mark) => { - const isAllowed = allowedDecorators.includes(mark) - const isUsed = block.markDefs?.some((def) => def._key === mark) - return isAllowed || isUsed - }) - } - - usedMarkDefs.push(...child.marks) - } - - return child - }) - - // Remove leftover (unused) markDefs - block.markDefs = (block.markDefs || []).filter((markDef) => usedMarkDefs.includes(markDef._key)) - return block -} diff --git a/packages/@sanity/block-tools/src/util/randomKey.ts b/packages/@sanity/block-tools/src/util/randomKey.ts deleted file mode 100644 index 68f754403f0..00000000000 --- a/packages/@sanity/block-tools/src/util/randomKey.ts +++ /dev/null @@ -1,26 +0,0 @@ -import getRandomValues from 'get-random-values-esm' - -// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html -function whatwgRNG(length = 16) { - const rnds8 = new Uint8Array(length) - getRandomValues(rnds8) - return rnds8 -} - -const byteToHex: string[] = [] -for (let i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).slice(1) -} - -/** - * Generate a random key of the given length - * - * @param length - Length of string to generate - * @returns A string of the given length - * @public - */ -export function randomKey(length: number): string { - return whatwgRNG(length) - .reduce((str, n) => str + byteToHex[n], '') - .slice(0, length) -} diff --git a/packages/@sanity/block-tools/src/util/resolveJsType.ts b/packages/@sanity/block-tools/src/util/resolveJsType.ts deleted file mode 100644 index 66413cd033c..00000000000 --- a/packages/@sanity/block-tools/src/util/resolveJsType.ts +++ /dev/null @@ -1,44 +0,0 @@ -const toString = Object.prototype.toString - -// Copied from https://github.com/ForbesLindesay/type-of -// but inlined to have fine grained control -export function resolveJsType(val: unknown) { - switch (toString.call(val)) { - case '[object Function]': - return 'function' - case '[object Date]': - return 'date' - case '[object RegExp]': - return 'regexp' - case '[object Arguments]': - return 'arguments' - case '[object Array]': - return 'array' - case '[object String]': - return 'string' - default: - } - - if (val === null) { - return 'null' - } - - if (val === undefined) { - return 'undefined' - } - - if ( - val && - typeof val === 'object' && - 'nodeType' in val && - (val as {nodeType: unknown}).nodeType === 1 - ) { - return 'element' - } - - if (val === Object(val)) { - return 'object' - } - - return typeof val -} diff --git a/packages/@sanity/block-tools/test/.eslintrc b/packages/@sanity/block-tools/test/.eslintrc deleted file mode 100644 index 669660321d8..00000000000 --- a/packages/@sanity/block-tools/test/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "env": { - "node": true - }, - "rules": { - "no-sync": 0, - "max-nested-callbacks": ["error", 4] - } -} diff --git a/packages/@sanity/block-tools/test/fixtures/customFeatures.json b/packages/@sanity/block-tools/test/fixtures/customFeatures.json deleted file mode 100644 index 10d8a36f6c4..00000000000 --- a/packages/@sanity/block-tools/test/fixtures/customFeatures.json +++ /dev/null @@ -1,1431 +0,0 @@ -{ - "styles": [ - {"title": "Normal", "value": "normal"}, - {"title": "H1", "value": "h1"}, - {"title": "H2", "value": "h2"} - ], - "decorators": [ - {"title": "Strong", "value": "strong"}, - {"title": "Emphasis", "value": "em"} - ], - "annotations": [ - { - "title": "Author", - "type": { - "jsonType": "object", - "type": {"name": "reference", "title": "Reference", "type": null, "jsonType": "object"}, - "name": "author", - "title": "Author", - "to": [ - { - "jsonType": "object", - "type": { - "jsonType": "object", - "type": {"name": "document", "title": "Document", "type": null, "jsonType": "object"}, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - {"name": "name", "title": "Name", "by": [{"field": "name", "direction": "asc"}]} - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}} - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - {"name": "name", "title": "Name", "by": [{"field": "name", "direction": "asc"}]} - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}}, - "__experimental_search": [ - {"weight": 1, "path": ["_id"]}, - {"weight": 1, "path": ["_type"]}, - {"weight": 10, "path": ["name"]} - ] - } - ], - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": {"name": "boolean", "title": "Boolean", "type": null, "jsonType": "boolean"}, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - } - }, - { - "single": true, - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - } - ] - }, - "value": "author" - } - ], - "lists": [{"title": "Numbered", "value": "number"}], - "types": { - "block": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Body", - "of": [ - { - "type": { - "type": {"name": "block", "title": "Block", "type": null, "jsonType": "object"}, - "name": "customBlock", - "title": "Block", - "jsonType": "object", - "options": {}, - "fields": [ - { - "name": "children", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Content", - "of": [ - { - "type": {"name": "span", "title": "Span", "type": null, "jsonType": "object"}, - "name": "span", - "title": "Span", - "jsonType": "object", - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Marks", - "of": [ - { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "String", - "preview": {} - } - ] - } - }, - { - "name": "text", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Text", - "preview": {} - } - } - ], - "annotations": [ - { - "jsonType": "object", - "type": { - "name": "reference", - "title": "Reference", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "to": [ - { - "jsonType": "object", - "type": { - "jsonType": "object", - "type": { - "name": "document", - "title": "Document", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}} - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}}, - "__experimental_search": [ - {"weight": 1, "path": ["_id"]}, - {"weight": 1, "path": ["_type"]}, - {"weight": 10, "path": ["name"]} - ] - } - ], - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - } - }, - { - "single": true, - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - } - ] - } - ], - "decorators": [ - {"title": "Strong", "value": "strong"}, - {"title": "Emphasis", "value": "em"} - ], - "options": {}, - "marks": [], - "preview": {"select": {"text": "text", "marks": "marks"}} - } - ] - } - }, - { - "name": "style", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Style", - "options": { - "list": [ - {"title": "Normal", "value": "normal"}, - {"title": "H1", "value": "h1"}, - {"title": "H2", "value": "h2"} - ] - }, - "preview": {} - } - }, - { - "name": "list", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "List type", - "options": {"list": [{"title": "Numbered", "value": "number"}]}, - "preview": {} - } - }, - { - "name": "markDefs", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Mark definitions", - "of": [ - { - "jsonType": "object", - "type": { - "name": "reference", - "title": "Reference", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "to": [ - { - "jsonType": "object", - "type": { - "jsonType": "object", - "type": { - "name": "document", - "title": "Document", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}} - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}}, - "__experimental_search": [ - {"weight": 1, "path": ["_id"]}, - {"weight": 1, "path": ["_type"]}, - {"weight": 10, "path": ["name"]} - ] - } - ], - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - } - }, - { - "single": true, - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - } - ] - } - ] - } - } - ], - "preview": {"select": {}} - }, - "name": "customBlock", - "title": "Block", - "jsonType": "object", - "options": {}, - "fields": [ - { - "name": "children", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Content", - "of": [ - { - "type": {"name": "span", "title": "Span", "type": null, "jsonType": "object"}, - "name": "span", - "title": "Span", - "jsonType": "object", - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Marks", - "of": [ - { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "String", - "preview": {} - } - ] - } - }, - { - "name": "text", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Text", - "preview": {} - } - } - ], - "annotations": [ - { - "jsonType": "object", - "type": { - "name": "reference", - "title": "Reference", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "to": [ - { - "jsonType": "object", - "type": { - "jsonType": "object", - "type": { - "name": "document", - "title": "Document", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}} - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}}, - "__experimental_search": [ - {"weight": 1, "path": ["_id"]}, - {"weight": 1, "path": ["_type"]}, - {"weight": 10, "path": ["name"]} - ] - } - ], - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - } - }, - { - "single": true, - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - } - ] - } - ], - "decorators": [ - {"title": "Strong", "value": "strong"}, - {"title": "Emphasis", "value": "em"} - ], - "options": {}, - "marks": [], - "preview": {"select": {"text": "text", "marks": "marks"}} - } - ] - } - }, - { - "name": "style", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Style", - "options": { - "list": [ - {"title": "Normal", "value": "normal"}, - {"title": "H1", "value": "h1"}, - {"title": "H2", "value": "h2"} - ] - }, - "preview": {} - } - }, - { - "name": "list", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "List type", - "options": {"list": [{"title": "Numbered", "value": "number"}]}, - "preview": {} - } - }, - { - "name": "markDefs", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Mark definitions", - "of": [ - { - "jsonType": "object", - "type": { - "name": "reference", - "title": "Reference", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "to": [ - { - "jsonType": "object", - "type": { - "jsonType": "object", - "type": { - "name": "document", - "title": "Document", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}} - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - { - "name": "name", - "title": "Name", - "by": [{"field": "name", "direction": "asc"}] - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}}, - "__experimental_search": [ - {"weight": 1, "path": ["_id"]}, - {"weight": 1, "path": ["_type"]}, - {"weight": 10, "path": ["name"]} - ] - } - ], - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - } - }, - { - "single": true, - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - } - ] - } - ] - } - } - ], - "preview": {"select": {}} - } - ] - }, - "span": { - "type": {"name": "span", "title": "Span", "type": null, "jsonType": "object"}, - "name": "span", - "title": "Span", - "jsonType": "object", - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "type": {"name": "array", "type": null, "jsonType": "array", "of": []}, - "name": "array", - "title": "Marks", - "of": [ - { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "String", - "preview": {} - } - ] - } - }, - { - "name": "text", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Text", - "preview": {} - } - } - ], - "annotations": [ - { - "jsonType": "object", - "type": {"name": "reference", "title": "Reference", "type": null, "jsonType": "object"}, - "name": "author", - "title": "Author", - "to": [ - { - "jsonType": "object", - "type": { - "jsonType": "object", - "type": { - "name": "document", - "title": "Document", - "type": null, - "jsonType": "object" - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - {"name": "name", "title": "Name", "by": [{"field": "name", "direction": "asc"}]} - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}} - }, - "name": "author", - "title": "Author", - "fields": [ - { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - ], - "options": {}, - "orderings": [ - {"name": "name", "title": "Name", "by": [{"field": "name", "direction": "asc"}]} - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "name", - "type": { - "jsonType": "string", - "type": { - "name": "string", - "title": "String", - "type": null, - "jsonType": "string" - }, - "name": "string", - "title": "Name", - "preview": {} - } - } - } - ], - "groups": [], - "preview": {"select": {"title": "name"}}, - "__experimental_search": [ - {"weight": 1, "path": ["_id"]}, - {"weight": 1, "path": ["_type"]}, - {"weight": 10, "path": ["name"]} - ] - } - ], - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - ], - "fieldsets": [ - { - "single": true, - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "type": {"name": "string", "title": "String", "type": null, "jsonType": "string"}, - "name": "string", - "title": "Referenced document ID", - "preview": {} - } - } - }, - { - "single": true, - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "type": { - "name": "boolean", - "title": "Boolean", - "type": null, - "jsonType": "boolean" - }, - "name": "boolean", - "title": "Weak reference", - "preview": {} - } - } - } - ] - } - ], - "decorators": [ - {"title": "Strong", "value": "strong"}, - {"title": "Emphasis", "value": "em"} - ], - "options": {}, - "marks": [], - "preview": {"select": {"text": "text", "marks": "marks"}} - }, - "inlineObjects": [], - "blockObjects": [] - } -} diff --git a/packages/@sanity/block-tools/test/fixtures/customSchema.ts b/packages/@sanity/block-tools/test/fixtures/customSchema.ts deleted file mode 100644 index 691f883e4f5..00000000000 --- a/packages/@sanity/block-tools/test/fixtures/customSchema.ts +++ /dev/null @@ -1,65 +0,0 @@ -import {Schema} from '@sanity/schema' - -export default Schema.compile({ - name: 'withCustomBlockType', - types: [ - { - type: 'document', - name: 'author', - fields: [{type: 'string', name: 'name', title: 'Name'}], - }, - { - name: 'customBlock', - type: 'block', - // Only allow these styles - styles: [ - {title: 'Normal', value: 'normal'}, - {title: 'H1', value: 'h1'}, - {title: 'H2', value: 'h2'}, - ], - // Only allow numbered lists - lists: [{title: 'Numbered', value: 'number'}], - marks: { - // Only allow these decorators - decorators: [ - {title: 'Strong', value: 'strong'}, - {title: 'Emphasis', value: 'em'}, - {title: 'Code', value: 'code'}, - {title: 'Strike through', value: 'strike-through'}, - {title: 'Highlight', value: 'highlight'}, - {title: 'Subscript', value: 'sub'}, - {title: 'Superscript', value: 'sup'}, - {title: 'Mark', value: 'mark'}, - {title: 'Inserted', value: 'ins'}, - {title: 'Small', value: 'small'}, - ], - // Support annotating text with a reference to an author - annotations: [ - { - name: 'author', - title: 'Author', - type: 'reference', - to: {type: 'author'}, - }, - ], - }, - }, - { - type: 'object', - name: 'blogPost', - fields: [ - { - title: 'Title', - type: 'string', - name: 'title', - }, - { - title: 'Body', - name: 'body', - type: 'array', - of: [{type: 'customBlock'}], - }, - ], - }, - ], -}) diff --git a/packages/@sanity/block-tools/test/fixtures/defaultSchema.ts b/packages/@sanity/block-tools/test/fixtures/defaultSchema.ts deleted file mode 100644 index c524356716e..00000000000 --- a/packages/@sanity/block-tools/test/fixtures/defaultSchema.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {Schema} from '@sanity/schema' - -export default Schema.compile({ - name: 'withDefaultBlockType', - types: [ - { - type: 'object', - name: 'blogPost', - fields: [ - { - title: 'Title', - type: 'string', - name: 'title', - }, - { - title: 'Body', - name: 'body', - type: 'array', - of: [ - {type: 'block'}, - { - name: 'code', - type: 'object', - title: 'Code', - fields: [ - { - title: 'Code', - name: 'code', - type: 'text', - }, - { - name: 'language', - title: 'Language', - type: 'string', - }, - { - title: 'Highlighted lines', - name: 'highlightedLines', - type: 'array', - of: [ - { - type: 'number', - title: 'Highlighted line', - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], -}) diff --git a/packages/@sanity/block-tools/test/setup.ts b/packages/@sanity/block-tools/test/setup.ts deleted file mode 100644 index 00ca9304e74..00000000000 --- a/packages/@sanity/block-tools/test/setup.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {beforeEach, vi} from 'vitest' - -let mockTestKey = 0 - -vi.mock('../src/util/randomKey', () => { - return { - randomKey: vi.fn().mockImplementation(() => { - return `randomKey${mockTestKey++}` - }), - } -}) - -beforeEach(() => { - // eslint-disable-line import/unambiguous - mockTestKey = 0 -}) diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/input.html deleted file mode 100644 index 66e8b1c9878..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/input.html +++ /dev/null @@ -1,11 +0,0 @@ - - -

- I am a strong link - and I am a emphasized link -

-

- I am a totally different link -

- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/output.json deleted file mode 100644 index 7aa2a543754..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/annotations/output.json +++ /dev/null @@ -1,77 +0,0 @@ -[ - { - "_key": "randomKey3", - "_type": "block", - "children": [ - { - "_key": "randomKey30", - "_type": "span", - "marks": ["randomKey0"], - "text": "I am a " - }, - { - "_key": "randomKey31", - "_type": "span", - "marks": ["randomKey0", "strong"], - "text": "strong" - }, - { - "_key": "randomKey32", - "_type": "span", - "marks": ["randomKey0"], - "text": " link" - }, - { - "_key": "randomKey33", - "_type": "span", - "marks": [], - "text": " " - }, - { - "_key": "randomKey34", - "_type": "span", - "marks": ["em"], - "text": "and " - }, - { - "_key": "randomKey35", - "_type": "span", - "marks": ["em", "randomKey1"], - "text": "I am a emphasized link" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "http://test.com" - }, - { - "_key": "randomKey1", - "_type": "link", - "href": "http://foo.bar" - } - ], - "style": "normal" - }, - { - "_key": "randomKey4", - "_type": "block", - "children": [ - { - "_key": "randomKey40", - "_type": "span", - "marks": ["randomKey2"], - "text": "I am a totally different link" - } - ], - "markDefs": [ - { - "_key": "randomKey2", - "_type": "link", - "href": "http://another.com" - } - ], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/input.html deleted file mode 100644 index 21de61e7842..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/input.html +++ /dev/null @@ -1,12 +0,0 @@ - - -

Paragraph

-

H1

-

H2

-

H3

-

H4

-
H5
-
H6
-
Blockquote
- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/output.json deleted file mode 100644 index ad3c96458e0..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/blockTags/output.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "_key": "randomKey0", - "_type": "block", - "children": [ - { - "_key": "randomKey00", - "_type": "span", - "marks": [], - "text": "Paragraph" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey1", - "_type": "block", - "children": [ - { - "_key": "randomKey10", - "_type": "span", - "marks": [], - "text": "H1" - } - ], - "markDefs": [], - "style": "h1" - }, - { - "_key": "randomKey2", - "_type": "block", - "children": [ - { - "_key": "randomKey20", - "_type": "span", - "marks": [], - "text": "H2" - } - ], - "markDefs": [], - "style": "h2" - }, - { - "_key": "randomKey3", - "_type": "block", - "children": [ - { - "_key": "randomKey30", - "_type": "span", - "marks": [], - "text": "H3" - } - ], - "markDefs": [], - "style": "h3" - }, - { - "_key": "randomKey4", - "_type": "block", - "children": [ - { - "_key": "randomKey40", - "_type": "span", - "marks": [], - "text": "H4" - } - ], - "markDefs": [], - "style": "h4" - }, - { - "_key": "randomKey5", - "_type": "block", - "children": [ - { - "_key": "randomKey50", - "_type": "span", - "marks": [], - "text": "H5" - } - ], - "markDefs": [], - "style": "h5" - }, - { - "_key": "randomKey6", - "_type": "block", - "children": [ - { - "_key": "randomKey60", - "_type": "span", - "marks": [], - "text": "H6" - } - ], - "markDefs": [], - "style": "h6" - }, - { - "_key": "randomKey7", - "_type": "block", - "children": [ - { - "_key": "randomKey70", - "_type": "span", - "marks": [], - "text": "Blockquote" - } - ], - "markDefs": [], - "style": "blockquote" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/index.ts deleted file mode 100644 index aff674d40e0..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {isElement} from '../../../../src/HtmlDeserializer/helpers' -import {type DeserializerRule} from '../../../../src/types' -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const rules: DeserializerRule[] = [ - { - // Special case for code blocks (wrapped in pre and code tag) - deserialize(el, next, block) { - if (!isElement(el) || el.tagName.toLowerCase() !== 'pre') { - return undefined - } - const code = el.children[0] - const childNodes = - code && code.tagName.toLowerCase() === 'code' ? code.childNodes : el.childNodes - let text = '' - childNodes.forEach((node) => { - text += node.textContent - }) - return block({ - _type: 'code', - text: text, - }) - }, - }, -] - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - const options = { - ...commonOptions, - rules, - } - return blockTools.htmlToBlocks(html, blockContentType, options) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/input.html deleted file mode 100644 index f7cd2261e47..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/input.html +++ /dev/null @@ -1,6 +0,0 @@ - - - Hei -
const foo = 'bar'
- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/output.json deleted file mode 100644 index 7d4423e858e..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/codeBlock/output.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "_key": "randomKey0", - "_type": "block", - "children": [ - { - "_key": "randomKey00", - "_type": "span", - "marks": ["em"], - "text": "Hei" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey1", - "_type": "code", - "text": "const foo = 'bar'" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/input.html deleted file mode 100644 index 21f5048db67..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/input.html +++ /dev/null @@ -1,60 +0,0 @@ - - - -

Jeg er overskrift

- -

- Hei jeg er en paragraph.
Jeg har strong og bold og italic og emphasis og - greier og greier. -
Ja, og så - - < del> -
Ja, og så - - < strike> -
Ja, og så - - < s> -

-
-
- -
-
-
    -
  1. Og jeg er et nummer-liste-element
  2. -
  3. Det er faktisk jeg også
  4. -
-

- Hvis du ser her, så ser du at jeg er en lenke -

-
-
-
- Jeg er en blockquote -
- Og jeg er en blockquote i en blockquote. -
- Og jeg er en blockquote i en blockquote i en blockquote. -
-
-
-
-
Test test
-

Lala

-
- Test test -
Div i div
-
-

Lala

-
- Span på root - Span på root 2 - Span i span - - - - \ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/output.json deleted file mode 100644 index 9485f33f69b..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/complex/output.json +++ /dev/null @@ -1,388 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [], - "style": "h1", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Jeg er overskrift", - "_key": "randomKey10" - } - ], - "_key": "randomKey1" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Hei jeg er en paragraph.\nJeg har ", - "_key": "randomKey20" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "strong", - "_key": "randomKey21" - }, - { - "_type": "span", - "marks": [], - "text": " og ", - "_key": "randomKey22" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "bold", - "_key": "randomKey23" - }, - { - "_type": "span", - "marks": [], - "text": " og ", - "_key": "randomKey24" - }, - { - "_type": "span", - "marks": ["em"], - "text": "italic", - "_key": "randomKey25" - }, - { - "_type": "span", - "marks": [], - "text": " og ", - "_key": "randomKey26" - }, - { - "_type": "span", - "marks": ["em"], - "text": "emphasis", - "_key": "randomKey27" - }, - { - "_type": "span", - "marks": [], - "text": " og greier og greier.\nJa, og så", - "_key": "randomKey28" - }, - { - "_type": "span", - "marks": ["strike-through"], - "text": " < del>", - "_key": "randomKey29" - }, - { - "_type": "span", - "marks": [], - "text": "\nJa, og så", - "_key": "randomKey210" - }, - { - "_type": "span", - "marks": ["strike-through"], - "text": " < strike>", - "_key": "randomKey211" - }, - { - "_type": "span", - "marks": [], - "text": "\nJa, og så", - "_key": "randomKey212" - }, - { - "_type": "span", - "marks": ["strike-through"], - "text": " < s>", - "_key": "randomKey213" - } - ], - "_key": "randomKey2" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "\n\n", - "_key": "randomKey30" - } - ], - "_key": "randomKey3" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Og jeg er et bullet-liste-element", - "_key": "randomKey40" - } - ], - "_key": "randomKey4" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Det er ", - "_key": "randomKey50" - }, - { - "_type": "span", - "marks": ["em"], - "text": "faktisk", - "_key": "randomKey51" - }, - { - "_type": "span", - "marks": [], - "text": " jeg ", - "_key": "randomKey52" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "også", - "_key": "randomKey53" - } - ], - "_key": "randomKey5" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "\n\n", - "_key": "randomKey60" - } - ], - "_key": "randomKey6" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "number", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Og jeg er et nummer-liste-element", - "_key": "randomKey70" - } - ], - "_key": "randomKey7" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "number", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Det er ", - "_key": "randomKey80" - }, - { - "_type": "span", - "marks": ["em"], - "text": "faktisk", - "_key": "randomKey81" - }, - { - "_type": "span", - "marks": [], - "text": " jeg ", - "_key": "randomKey82" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "også", - "_key": "randomKey83" - } - ], - "_key": "randomKey8" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "http://www.google.com?q=link" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Hvis du ser her, så ", - "_key": "randomKey90" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "ser du at jeg er en lenke", - "_key": "randomKey91" - } - ], - "_key": "randomKey9" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "\n\n", - "_key": "randomKey100" - } - ], - "_key": "randomKey10" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "Jeg er en blockquote", - "_key": "randomKey110" - } - ], - "_key": "randomKey11" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "Og jeg er en blockquote i en blockquote.", - "_key": "randomKey120" - } - ], - "_key": "randomKey12" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "Og jeg er en blockquote i en blockquote i en blockquote.", - "_key": "randomKey130" - } - ], - "_key": "randomKey13" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Test test", - "_key": "randomKey140" - } - ], - "_key": "randomKey14" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lala", - "_key": "randomKey150" - } - ], - "_key": "randomKey15" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Test test Div i div", - "_key": "randomKey160" - } - ], - "_key": "randomKey16" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lala", - "_key": "randomKey170" - } - ], - "_key": "randomKey17" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Span på rootSpan på root 2 Span i span", - "_key": "randomKey180" - } - ], - "_key": "randomKey18" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/index.ts deleted file mode 100644 index 65c5814ebb3..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/index.ts +++ /dev/null @@ -1,74 +0,0 @@ -import {isElement} from '../../../../src/HtmlDeserializer/helpers' -import {type DeserializerRule} from '../../../../src/types' -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const rules: DeserializerRule[] = [ - // Map 'em' tags to 'strong' - { - deserialize(el, next) { - if (!isElement(el) || el.tagName.toLowerCase() !== 'em') { - return undefined - } - return { - _type: '__decorator', - name: 'strong', - children: next(el.childNodes), - } - }, - }, - { - // Special case for code blocks (wrapped in pre and code tag) - deserialize(el, next) { - if (!isElement(el) || el.tagName.toLowerCase() !== 'pre') { - return undefined - } - const code = el.children[0] - const childNodes = - code && code.tagName.toLowerCase() === 'code' ? code.childNodes : el.childNodes - let text = '' - childNodes.forEach((node) => { - text += node.textContent - }) - return { - _type: 'span', - marks: ['code'], - text: text, - } - }, - }, - { - deserialize(el, next) { - if (!isElement(el) || el.tagName.toLowerCase() !== 'img') { - return undefined - } - const result: any[] = [ - { - _type: 'image', - src: el.getAttribute('src'), - }, - ] - if ((el.parentNode as HTMLElement)?.tagName?.toLowerCase() === 'a') { - result.push({ - _type: 'span', - text: 'Image link', - }) - } - return result - }, - }, -] - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - const options = { - ...commonOptions, - rules, - } - return blockTools.htmlToBlocks(html, blockContentType, options) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/input.html deleted file mode 100644 index 1007fbae7b4..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/input.html +++ /dev/null @@ -1,11 +0,0 @@ - - - Hei -
const foo = 'bar'
-
-

Quote with emphasis

- Emphasis! -
-

Test image

- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/output.json deleted file mode 100644 index 374e8ec9ae1..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customRules/output.json +++ /dev/null @@ -1,79 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Hei", - "_key": "randomKey10" - }, - { - "_type": "span", - "marks": ["code"], - "text": "const foo = 'bar'", - "_key": "randomKey11" - } - ], - "_key": "randomKey1" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "Quote ", - "_key": "randomKey20" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "with emphasis", - "_key": "randomKey21" - }, - { - "_type": "span", - "marks": [], - "text": "\n\n", - "_key": "randomKey22" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "Emphasis!", - "_key": "randomKey23" - } - ], - "_key": "randomKey2" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "http://foo" - } - ], - "style": "normal", - "children": [ - { - "_type": "image", - "src": "http://image.gif", - "_key": "randomKey30" - }, - { - "_type": "span", - "text": "Image link", - "marks": ["randomKey0"], - "_key": "randomKey31" - } - ], - "_key": "randomKey3" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/index.ts deleted file mode 100644 index ea45373ad76..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import customSchema from '../../../fixtures/customSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = customSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/input.html deleted file mode 100644 index ecb5b0ce64a..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/input.html +++ /dev/null @@ -1,18 +0,0 @@ - - -
A heading that is not allowed
-

- Strong text but - this is also emphasized and - striked - and subbed - and supped - and inserted - and marked - and deleted - and shrunk - - -

- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/output.json deleted file mode 100644 index 9f53154b5e0..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/customSchema/output.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - { - "_type": "customBlock", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "A heading that is not allowed" - } - ], - "_key": "randomKey0" - }, - { - "_type": "customBlock", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Strong text but " - }, - { - "_type": "span", - "marks": ["strong", "em"], - "text": "this is also emphasized and " - }, - { - "_type": "span", - "marks": ["strong", "em", "strike-through"], - "text": "striked" - }, - { - "_type": "span", - "marks": [], - "text": " " - }, - { - "_type": "span", - "marks": ["strong", "em", "sub"], - "text": "and subbed" - }, - { - "_type": "span", - "marks": [], - "text": " " - }, - { - "_type": "span", - "marks": ["strong", "em", "sup"], - "text": "and supped" - }, - { - "_type": "span", - "marks": [], - "text": " " - }, - { - "_type": "span", - "marks": ["strong", "em", "ins"], - "text": "and inserted" - }, - { - "_type": "span", - "marks": [], - "text": " " - }, - { - "_type": "span", - "marks": ["strong", "em", "mark"], - "text": "and marked" - }, - { - "_type": "span", - "marks": [], - "text": " " - }, - { - "_type": "span", - "marks": ["strong", "em", "strike-through"], - "text": "and deleted" - }, - { - "_type": "span", - "marks": [], - "text": " " - }, - { - "_type": "span", - "marks": ["strong", "em", "small"], - "text": "and shrunk" - } - ], - "_key": "randomKey1" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/input.html deleted file mode 100644 index edb49197180..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/input.html +++ /dev/null @@ -1,12 +0,0 @@ - - -

- Strong text but - this is also emphasized and - striked - - - Just emphasized -

- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/output.json deleted file mode 100644 index b148f127f66..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/decorators/output.json +++ /dev/null @@ -1,40 +0,0 @@ -[ - { - "_key": "randomKey0", - "_type": "block", - "children": [ - { - "_key": "randomKey00", - "_type": "span", - "marks": ["strong"], - "text": "Strong text but " - }, - { - "_key": "randomKey01", - "_type": "span", - "marks": ["strong", "em"], - "text": "this is also emphasized and " - }, - { - "_key": "randomKey02", - "_type": "span", - "marks": ["strong", "em", "strike-through"], - "text": "striked" - }, - { - "_key": "randomKey03", - "_type": "span", - "marks": [], - "text": " " - }, - { - "_key": "randomKey04", - "_type": "span", - "marks": ["em"], - "text": "Just emphasized" - } - ], - "markDefs": [], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/input.html deleted file mode 100644 index 924ae8330b5..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/input.html +++ /dev/null @@ -1,34 +0,0 @@ -

- Asylsøkere, flyktninger og familiegjenforente har samme rett til helsetjenester som den øvrige befolkningen. Retten til helsehjelp for asylsøkere gjelder fra de kommer til Norge for å søke beskyttelse. Flyktninger og familiegjenforente har også fulle rettigheter til helsehjelp fra de ankommer landet. For definisjoner av asylsøker, flyktningen, familiegjenforent og person med avslag på søknad om beskyttelse se UDIs hjemmeside Ord og begreper.
-

- Rettighetene omfatter både somatisk og psykisk helsehjelp fra kommune- og spesialisthelsetjeneste, inkludert hjelp for rusmiddelproblemer, men voksne asylsøkere har ikke rett til omsorgstjenester fra kommunen. - Se forskrift om rett til helse- og omsorgstjenester til personer uten fast opphold i riket § 6 -

- Voksne asylsøkere med særskilte behov skal gis et tilrettelagt botilbud av UDI. Enkelte asylsøkere har imidlertid så store pleie- og omsorgsbehov at de ikke kan bo i asylmottak. For å sikre dem et forsvarlig botilbud, har UDI inngått rammeavtale om plass i private eller kommunale helse- og omsorgsinstitusjoner. -

- Alle barn under 18 år som oppholder seg i Norge har rett til både helse- og omsorgstjenester. -

- Personer med endelig avslag på søknaden om beskyttelse (asyl) og personer uten lovlig opphold i landet har rett til øyeblikkelig helsehjelp og helsehjelp som er helt nødvendig og ikke kan vente. -

Ansvar for å yte helsehjelp

- Kommunen har ansvaret for at de som oppholder seg i kommunen får helsehjelp. Asylsøkere har fulle rettigheter til helsehjelp fra kommunen. -

- Ved behov kan kommunene be om råd og støtte fra spesialisthelsetjenesten -

- Staten har det overordnede ansvaret for at befolkningen gis nødvendig spesialisthelsetjenester. De fire regionale helseforetakene skal sørge for at det tilbys spesialisthelsetjenester, som sykehustjenester, medisinske laboratorietjenester og radiologiske tjenester. -

- UDI har ansvar for at kommunen får melding om asylsøkere som oppholder seg i kommunen, slik at kommunen kan sørge for helsetjenestene de har krav på. -

- Fylkeskommunen skal etter lov om tannhelsetjenesten sørge for at nødvendig tannhelsehjelp er tilgjengelig for alle som bor eller midlertidig oppholder seg i fylket, herunder flyktninger, personer med opphold på humanitært grunnlag, asylsøkere som bor eller oppholder seg i asyl mottak og familiegjenforente. Rettighetene gjelder uavhengig av om asylsøkeren bor privat eller i asylmottak. Tannhelsetjenesten bør tilstrebe et godt samarbeid med lokale mottak. -
Foobar
-

- Ansvar for å sikre god informasjon og kommunikasjon -
-

Helsepersonell har ansvar for å vurdere behovet for å bestille kvalifisert tolk i møte med pasient med begrensede norskkunnskaper. Helsepersonell kan trenge tolk for å utøve informasjons- og veiledningsplikten. Samarbeid med kvalifisert tolk kan være en forutsetning for å sikre pasientens rett til blant annet å få forståelig informasjon og å kunne gi informert samtykke til helsehjelp, jf. blant annet pasient- og brukerrettighetsloven §§3-5 og 4-1. Familiemedlemmer bør ikke brukes som tolk. Barn skal aldri brukes som tolk. Unntak kan gjøres når det er nødvendig for å unngå tap av liv eller alvorlig helseskade, eller det er nødvendig i andre nødssituasjoner.

Se temasiden: Helsepersonells ansvar for god kommunikasjon via tolk

Se veileder om kommunikasjon via tolk for ledere og personell i helse- og omsorgstjenestene

Se Tolkeportalen/IMDI

Organisering av helsetjenestene i kommunen

- Kommunen står fritt i organiseringen av helsetjenestene, jf. helse- og omsorgstjenesteloven § 3-1. -

Det er viktig at pasientene informeres på en forståelig måte om fastlegeordningen, samtykke, taushetsplikt, rett og plikt som pasient, mv. Det bør gis god orientering om hvordan helsetjenesten er organisert og fungerer i Norge.

Helsetjenestene bør tilstrebe et godt samarbeid med det lokale mottaket slik at beboerne sikres nødvendig og forståelig informasjon om rettigheter og helsetjenestetilbud i Norge og lokalt.

Pasienter skal ha tilgang til legekonsultasjon uavhengig av om vedkommende har fått tildelt såkalt D-nummer. D-nummer er en forutsetning for å kunne stå på liste hos en fastlege, men manglende D-nummer må ikke hindre at pasient får konsultasjon med lege. Det er viktig å planlegge konsultasjoner med rom for å bruke tolk og tilstrekkelig med tid.

Helsedirektoratet anbefaler at kommunen sikrer tilgang til helsepersonell på asylmottaket.

Tverrfaglige helseteam

- Kommuner og helseforetak bør avsette fagressurser til å arbeide spesielt med likeverdige helsetjenester til asylsøker, flyktninger og familiegjenforente, og det bør etableres tverrfaglige fagmiljøer eller team som opparbeider seg kompetanse på feltet. Dette er ikke minst viktig med tanke på å styrke samarbeidet mellom primær- og spesialisthelsetjenesten. -

- Mange kommuner har gode erfaringer med tverrfaglige flyktningehelseteam, der deler av eller hele stillinger er øremerket arbeidet med asylsøkere og flyktninger eller generell migrasjonshelse. Dette gjør det lettere å få oversikt over arbeidsfeltet. Det er viktig at teamene er en integrert del av den samlede helse- og omsorgstjenesten i kommunen, slik at kompetansen som opparbeides ikke blir for personavhengig. -

Interkommunalt samarbeid

- Interkommunalt samarbeid kan for enkelte kommuner være hensiktsmessig. Mange kommuner samarbeider allerede om blant annet introduksjonsprogrammet, og samarbeid om helsetjenestetilbudet er en tilsvarende mulighet. -

Miljørettet helsevern

Miljørettet helsevern omfatter alle grupper i befolkningen, jamfør folkehelseloven og forskrift om miljørettet helsevern (lovdata.no).

Kommunen skal føre tilsyn slik at det er mulig å avdekke blant annet dårlig inneklima eller utilfredsstillende sikring i forhold til å hindre ulykker (jf. § 10 i forskrift om miljørettet helsevern). Dersom det avdekkes avvik må det iverksettes tiltak.

Utlendingsdirektoratet (UDI) inngår kontrakter med driftsoperatører om drift av asylmottak, der UDI spesifiserer i kontrakten hvilke krav som settes til driften av mottaket. Driftsoperatørene skal sikre at:

UDI har overordnet ansvar for å kontrollere at driftsoperatørene leverer det tilbudet de har forpliktet seg til i henhold til kontrakten. Driftsoperatørene står for organisering og drift av mottakene, og forutsettes å ha søkt råd hos lokale myndigheter når det gjelder forhold av helsemessig eller hygienisk betydning ved planlegging og etablering av mottak. Normalt vil UDI også innhente informasjon fra kommunen i forbindelse med kontraktsoppfølging. UDI kan pålegge driftsoperatør å forbedre eventuelle utilfredsstillende forhold.

Det er et krav om at driftsoperatør skal sende melding til kommunen før oppstart og ved vesentlige utvidelser eller endringer i virksomheten. (jf. § 14 i forskrift om miljørettet helsevern). Meldingen skal inneholde en kortfattet oversikt over positive og negative miljøforhold ved virksomheten som kan ha innvirkning på helsen. Se veileder i miljørettet helsevern.

Kommunen skal ha tilsyn med de faktorer i miljøet som kan ha innvirkning på helse og trivsel.

Dersom det foreligger forhold ved et asylmottak som er i strid med kravene til tilfredsstillende helsemessig drift, vil kommunen, eventuelt den instans som ivaretar kommunens oppgaver innen miljørettet helsevern, kunne gi pålegg til driftsoperatør etter folkehelseloven.

Eksempel på forhold som kan være av grunnleggende betydning for helse og sikkerhet ved asylmottak er:

Dersom det forekommer tilfeller av trusler og vold i mottak, vil det naturligvis påvirke den volds- eller trusselutsatte sin fysiske og psykiske helse, men kan også påvirke øvrige beboeres helsetilstand psykisk. Det påhviler kommunen å sikre helsefremmende og trygge miljøer også for personer bosatt i mottak.

diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/output.json deleted file mode 100644 index 4ca206c0069..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild1/output.json +++ /dev/null @@ -1,802 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://www.udi.no/ord-og-begreper/" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Asylsøkere, flyktninger og familiegjenforente har samme rett til helsetjenester som den øvrige befolkningen. Retten til helsehjelp for asylsøkere gjelder fra de kommer til Norge for å søke beskyttelse. Flyktninger og familiegjenforente har også fulle rettigheter til helsehjelp fra de ankommer landet. For definisjoner av asylsøker, flyktningen, familiegjenforent og person med avslag på søknad om beskyttelse se ", - "_key": "randomKey110" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "UDIs hjemmeside Ord og begreper", - "_key": "randomKey111" - }, - { - "_type": "span", - "marks": [], - "text": ".\n", - "_key": "randomKey112" - } - ], - "_key": "randomKey11" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey1", - "_type": "link", - "href": "https://lovdata.no/dokument/SF/forskrift/2011-12-16-1255" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Rettighetene omfatter både somatisk og psykisk helsehjelp fra kommune- og spesialisthelsetjeneste, inkludert hjelp for rusmiddelproblemer, men voksne asylsøkere har ikke rett til omsorgstjenester fra kommunen. ", - "_key": "randomKey120" - }, - { - "_type": "span", - "marks": ["randomKey1"], - "text": "Se forskrift om rett til helse- og omsorgstjenester til personer uten fast opphold i riket § 6", - "_key": "randomKey121" - } - ], - "_key": "randomKey12" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Voksne asylsøkere med særskilte behov skal gis et tilrettelagt botilbud av UDI. Enkelte asylsøkere har imidlertid så store pleie- og omsorgsbehov at de ikke kan bo i asylmottak. For å sikre dem et forsvarlig botilbud, har UDI inngått rammeavtale om plass i private eller kommunale helse- og omsorgsinstitusjoner.", - "_key": "randomKey130" - } - ], - "_key": "randomKey13" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Alle barn under 18 år som oppholder seg i Norge har rett til både helse- og omsorgstjenester.", - "_key": "randomKey140" - } - ], - "_key": "randomKey14" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Personer med endelig avslag på søknaden om beskyttelse (asyl) og personer uten lovlig opphold i landet har rett til øyeblikkelig helsehjelp og helsehjelp som er helt nødvendig og ikke kan vente.", - "_key": "randomKey150" - } - ], - "_key": "randomKey15" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Ansvar for å yte helsehjelp", - "_key": "randomKey160" - } - ], - "_key": "randomKey16" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Kommunen har ansvaret for at de som oppholder seg i kommunen får helsehjelp. Asylsøkere har fulle rettigheter til helsehjelp fra kommunen.", - "_key": "randomKey170" - } - ], - "_key": "randomKey17" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Ved behov kan kommunene be om råd og støtte fra spesialisthelsetjenesten", - "_key": "randomKey180" - } - ], - "_key": "randomKey18" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Staten har det overordnede ansvaret for at befolkningen gis nødvendig spesialisthelsetjenester. De fire regionale helseforetakene skal sørge for at det tilbys spesialisthelsetjenester, som sykehustjenester, medisinske laboratorietjenester og radiologiske tjenester.", - "_key": "randomKey190" - } - ], - "_key": "randomKey19" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "UDI har ansvar for at kommunen får melding om asylsøkere som oppholder seg i kommunen, slik at kommunen kan sørge for helsetjenestene de har krav på.", - "_key": "randomKey200" - } - ], - "_key": "randomKey20" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Fylkeskommunen skal etter lov om tannhelsetjenesten sørge for at nødvendig tannhelsehjelp er tilgjengelig for alle som bor eller midlertidig oppholder seg i fylket, herunder flyktninger, personer med opphold på humanitært grunnlag, asylsøkere som bor eller oppholder seg i asyl mottak og familiegjenforente. Rettighetene gjelder uavhengig av om asylsøkeren bor privat eller i asylmottak. Tannhelsetjenesten bør tilstrebe et godt samarbeid med lokale mottak.\n", - "_key": "randomKey210" - }, - { - "_type": "span", - "marks": ["em"], - "text": "Foobar", - "_key": "randomKey211" - } - ], - "_key": "randomKey21" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Ansvar for å sikre god informasjon og kommunikasjon\n", - "_key": "randomKey220" - } - ], - "_key": "randomKey22" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Helsepersonell har ansvar for å vurdere behovet for å bestille kvalifisert tolk i møte med pasient med begrensede norskkunnskaper. Helsepersonell kan trenge tolk for å utøve informasjons- og veiledningsplikten. Samarbeid med kvalifisert tolk kan være en forutsetning for å sikre pasientens rett til blant annet å få forståelig informasjon og å kunne gi informert samtykke til helsehjelp, jf. blant annet pasient- og brukerrettighetsloven §§3-5 og 4-1. Familiemedlemmer bør ikke brukes som tolk. Barn skal aldri brukes som tolk. Unntak kan gjøres når det er nødvendig for å unngå tap av liv eller alvorlig helseskade, eller det er nødvendig i andre nødssituasjoner.", - "_key": "randomKey230" - } - ], - "_key": "randomKey23" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey2", - "_type": "link", - "href": "https://helsedirektoratet.no/asylsokere-flyktninger-og-innvandrere/helsepersonells-ansvar-for-god-kommunikasjon-via-tolk" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["randomKey2"], - "text": "Se temasiden: Helsepersonells ansvar for god kommunikasjon via tolk", - "_key": "randomKey240" - } - ], - "_key": "randomKey24" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey3", - "_type": "link", - "href": "https://helsedirektoratet.no/retningslinjer/veileder-om-kommunikasjon-via-tolk-for-ledere-og-personell-i-helse-og-omsorgstjenestene" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["randomKey3"], - "text": "Se veileder om kommunikasjon via tolk for ledere og personell i helse- og omsorgstjenestene", - "_key": "randomKey250" - } - ], - "_key": "randomKey25" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey4", - "_type": "link", - "href": "https://www.tolkeportalen.no/" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["randomKey4"], - "text": "Se Tolkeportalen/IMDI", - "_key": "randomKey260" - } - ], - "_key": "randomKey26" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Organisering av helsetjenestene i kommunen", - "_key": "randomKey270" - } - ], - "_key": "randomKey27" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Kommunen står fritt i organiseringen av helsetjenestene, jf. helse- og omsorgstjenesteloven § 3-1.", - "_key": "randomKey280" - } - ], - "_key": "randomKey28" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Det er viktig at pasientene informeres på en forståelig måte om fastlegeordningen, samtykke, taushetsplikt, rett og plikt som pasient, mv. Det bør gis god orientering om hvordan helsetjenesten er organisert og fungerer i Norge.", - "_key": "randomKey290" - } - ], - "_key": "randomKey29" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Helsetjenestene bør tilstrebe et godt samarbeid med det lokale mottaket slik at beboerne sikres nødvendig og forståelig informasjon om rettigheter og helsetjenestetilbud i Norge og lokalt.", - "_key": "randomKey300" - } - ], - "_key": "randomKey30" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Pasienter skal ha tilgang til legekonsultasjon uavhengig av om vedkommende har fått tildelt såkalt D-nummer. D-nummer er en forutsetning for å kunne stå på liste hos en fastlege, men manglende D-nummer må ikke hindre at pasient får konsultasjon med lege. Det er viktig å planlegge konsultasjoner med rom for å bruke tolk og tilstrekkelig med tid.", - "_key": "randomKey310" - } - ], - "_key": "randomKey31" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Helsedirektoratet anbefaler at kommunen sikrer tilgang til helsepersonell på asylmottaket.\n", - "_key": "randomKey320" - } - ], - "_key": "randomKey32" - }, - { - "_type": "block", - "markDefs": [], - "style": "h3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Tverrfaglige helseteam", - "_key": "randomKey330" - } - ], - "_key": "randomKey33" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Kommuner og helseforetak bør avsette fagressurser til å arbeide spesielt med likeverdige helsetjenester til asylsøker, flyktninger og familiegjenforente, og det bør etableres tverrfaglige fagmiljøer eller team som opparbeider seg kompetanse på feltet. Dette er ikke minst viktig med tanke på å styrke samarbeidet mellom primær- og spesialisthelsetjenesten.", - "_key": "randomKey340" - } - ], - "_key": "randomKey34" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Mange kommuner har gode erfaringer med tverrfaglige flyktningehelseteam, der deler av eller hele stillinger er øremerket arbeidet med asylsøkere og flyktninger eller generell migrasjonshelse. Dette gjør det lettere å få oversikt over arbeidsfeltet. Det er viktig at teamene er en integrert del av den samlede helse- og omsorgstjenesten i kommunen, slik at kompetansen som opparbeides ikke blir for personavhengig.", - "_key": "randomKey350" - } - ], - "_key": "randomKey35" - }, - { - "_type": "block", - "markDefs": [], - "style": "h3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Interkommunalt samarbeid", - "_key": "randomKey360" - } - ], - "_key": "randomKey36" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Interkommunalt samarbeid kan for enkelte kommuner være hensiktsmessig. Mange kommuner samarbeider allerede om blant annet introduksjonsprogrammet, og samarbeid om helsetjenestetilbudet er en tilsvarende mulighet.\n", - "_key": "randomKey370" - } - ], - "_key": "randomKey37" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Miljørettet helsevern", - "_key": "randomKey380" - } - ], - "_key": "randomKey38" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey5", - "_type": "link", - "href": "https://lovdata.no/dokument/NL/lov/2011-06-24-29" - }, - { - "_key": "randomKey6", - "_type": "link", - "href": "https://lovdata.no/dokument/SF/forskrift/2003-04-25-486" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Miljørettet helsevern omfatter alle grupper i befolkningen, jamfør ", - "_key": "randomKey390" - }, - { - "_type": "span", - "marks": ["randomKey5"], - "text": "folkehelseloven", - "_key": "randomKey391" - }, - { - "_type": "span", - "marks": [], - "text": " og ", - "_key": "randomKey392" - }, - { - "_type": "span", - "marks": ["randomKey6"], - "text": "forskrift om miljørettet helsevern (lovdata.no)", - "_key": "randomKey393" - }, - { - "_type": "span", - "marks": [], - "text": ".", - "_key": "randomKey394" - } - ], - "_key": "randomKey39" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey7", - "_type": "link", - "href": "http://lovdata.no/forskrift/2003-04-25-486/§10" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Kommunen skal føre tilsyn slik at det er mulig å avdekke blant annet dårlig inneklima eller utilfredsstillende sikring i forhold til å hindre ulykker (", - "_key": "randomKey400" - }, - { - "_type": "span", - "marks": ["randomKey7"], - "text": "jf. § 10 i forskrift om miljørettet helsevern)", - "_key": "randomKey401" - }, - { - "_type": "span", - "marks": [], - "text": ". Dersom det avdekkes avvik må det iverksettes tiltak.", - "_key": "randomKey402" - } - ], - "_key": "randomKey40" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Utlendingsdirektoratet (UDI) inngår kontrakter med driftsoperatører om drift av asylmottak, der UDI spesifiserer i kontrakten hvilke krav som settes til driften av mottaket. Driftsoperatørene skal sikre at:", - "_key": "randomKey410" - } - ], - "_key": "randomKey41" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "mottakene holder en tilfredsstillende bygningsmessig standard", - "_key": "randomKey420" - } - ], - "_key": "randomKey42" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "at det fysiske og psykososiale miljøet er tilfredsstillende for beboernes helse", - "_key": "randomKey430" - } - ], - "_key": "randomKey43" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "øvrige bestemmelser om miljørettet helsevern oppfylles", - "_key": "randomKey440" - } - ], - "_key": "randomKey44" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey8", - "_type": "link", - "href": "https://lovdata.no/dokument/LTI/lov/2008-06-20-42/%C2%A79#§9" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey8"], - "text": "kravene til tilgjengelighet og universell utforming", - "_key": "randomKey450" - }, - { - "_type": "span", - "marks": [], - "text": " overholdes", - "_key": "randomKey451" - } - ], - "_key": "randomKey45" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "UDI har overordnet ansvar for å kontrollere at driftsoperatørene leverer det tilbudet de har forpliktet seg til i henhold til kontrakten. Driftsoperatørene står for organisering og drift av mottakene, og forutsettes å ha søkt råd hos lokale myndigheter når det gjelder forhold av helsemessig eller hygienisk betydning ved planlegging og etablering av mottak. Normalt vil UDI også innhente informasjon fra kommunen i forbindelse med kontraktsoppfølging. UDI kan pålegge driftsoperatør å forbedre eventuelle utilfredsstillende forhold.", - "_key": "randomKey460" - } - ], - "_key": "randomKey46" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey9", - "_type": "link", - "href": "http://lovdata.no/forskrift/2003-04-25-486/§14" - }, - { - "_key": "randomKey10", - "_type": "link", - "href": "https://helsedirektoratet.no/retningslinjer/veileder-i-miljorettet-helsevern" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Det er et krav om at driftsoperatør skal sende melding til kommunen før oppstart og ved vesentlige utvidelser eller endringer i virksomheten. (", - "_key": "randomKey470" - }, - { - "_type": "span", - "marks": ["randomKey9"], - "text": "jf. § 14 i forskrift om miljørettet helsevern", - "_key": "randomKey471" - }, - { - "_type": "span", - "marks": [], - "text": "). Meldingen skal inneholde en kortfattet oversikt over positive og negative miljøforhold ved virksomheten som kan ha innvirkning på helsen. ", - "_key": "randomKey472" - }, - { - "_type": "span", - "marks": ["randomKey10"], - "text": "Se veileder i miljørettet helsevern", - "_key": "randomKey473" - }, - { - "_type": "span", - "marks": [], - "text": ".", - "_key": "randomKey474" - } - ], - "_key": "randomKey47" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Kommunen skal ha tilsyn med de faktorer i miljøet som kan ha innvirkning på helse og trivsel.", - "_key": "randomKey480" - } - ], - "_key": "randomKey48" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Dersom det foreligger forhold ved et asylmottak som er i strid med kravene til tilfredsstillende helsemessig drift, vil kommunen, eventuelt den instans som ivaretar kommunens oppgaver innen miljørettet helsevern, kunne gi pålegg til driftsoperatør etter folkehelseloven.", - "_key": "randomKey490" - } - ], - "_key": "randomKey49" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Eksempel på forhold som kan være av grunnleggende betydning for helse og sikkerhet ved asylmottak er:", - "_key": "randomKey500" - } - ], - "_key": "randomKey50" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I rom for varig opphold (bl.a. soverom) må det finnes minst ett vindu eller dør som kan åpnes mot det fri.", - "_key": "randomKey510" - } - ], - "_key": "randomKey51" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Det skal finnes sanitærutstyr (dusjer, toaletter, håndvasker osv.) som er dimensjonert for det antall personer som har opphold på stedet.", - "_key": "randomKey520" - } - ], - "_key": "randomKey52" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Det må være etablert gode renholdsrutiner.", - "_key": "randomKey530" - } - ], - "_key": "randomKey53" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Virksomheten må kunne drives slik at skader, ulykker og smittsomme sykdommer forebygges.", - "_key": "randomKey540" - } - ], - "_key": "randomKey54" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Dersom det forekommer tilfeller av trusler og vold i mottak, vil det naturligvis påvirke den volds- eller trusselutsatte sin fysiske og psykiske helse, men kan også påvirke øvrige beboeres helsetilstand psykisk. Det påhviler kommunen å sikre helsefremmende og trygge miljøer også for personer bosatt i mottak.\n", - "_key": "randomKey550" - } - ], - "_key": "randomKey55" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/index.ts deleted file mode 100644 index faffc7cce8b..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {isElement} from '../../../../src/HtmlDeserializer/helpers' -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, { - ...commonOptions, - rules: [ - { - // Special case for code blocks (wrapped in pre and code tag) - deserialize(el, next, block) { - if (!isElement(el) || el.tagName.toLowerCase() !== 'pre') { - return undefined - } - const code = el.children[0] - const childNodes = - code && code.tagName.toLowerCase() === 'code' ? code.childNodes : el.childNodes - let text = '' - childNodes.forEach((node) => { - text += node.textContent - }) - return block({ - _type: 'code', - language: 'javascript', - code: text, - }) - }, - }, - ], - }) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/input.html deleted file mode 100644 index 480f214515b..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/input.html +++ /dev/null @@ -1,254 +0,0 @@ -

You might think you’re writing JSX:

- -
<marquee bgcolor="#ffa7c4">hi</marquee>
-	
- -

But really, you’re calling a function:

- -
React.createElement(
-		/* type */ 'marquee',
-		/* props */ { bgcolor: '#ffa7c4' },
-		/* children */ 'hi'
-	)
-	
- -

- And that function gives you back an object. We call this object a React element. It tells - React what to render next. Your components return a tree of them. -

- -
{
-		type: 'marquee',
-		props: {
-			bgcolor: '#ffa7c4',
-			children: 'hi',
-		},
-		key: null,
-		ref: null,
-		$$typeof: Symbol.for('react.element'), // 🧐 Who dis
-	}
-	
- -

- If you used React you might be familiar with type, props, - key, and ref fields. - But what is $$typeof? And why does it have a Symbol() as a - value? -

- -

- That’s another one of those things that you don’t need to know to use React, but that - will make you feel good when you do. There’s also some tips about security in this post that you - might want to know. Maybe one day you’ll write your own UI library and all of this will come in - handy. I certainly hope so. -

- -

- Before client-side UI libraries became common and added basic protection, it was common for app - code to construct HTML and insert it into the DOM: -

- -
const messageEl = document.getElementById('message');
-	messageEl.innerHTML = '<p>' + message.text + '</p>';
-	
- -

- That works fine, except when your message.text is something like - '<img src onerror="stealYourPassword()">'. - You don’t want things written by strangers to appear verbatim in your app’s rendered - HTML. -

- -

- (Fun fact: if you only do client-side rendering, a <script> tag here wouldn’t - let you run JavaScript. But - don’t let this - lull you into a false sense of security.) -

- -

- To protect against such attacks, you can use safe APIs like - document.createTextNode() or textContent that only deal with text. You - can also preemptively “escape” inputs by replacing potentially dangerous characters like - <, > and others in any user-provided text. -

- -

- Still, the cost of a mistake is high and it’s a hassle to remember it every time you interpolate a - user-written string into your output. - This is why modern libraries like React escape text content for strings by default: -

- -
<p>
-		{message.text}
-	</p>
-	
- -

- If message.text is a malicious string with an <img> or another - tag, it won’t turn into a real <img> tag. React will escape the content and - then insert it into the DOM. So instead of seeing the <img> tag you’ll - just see its markup. -

- -

- To render arbitrary HTML inside a React element, you have to write - dangerouslySetInnerHTML={{ __html: message.text }}. The fact that it’s clumsy to write is a feature. It’s meant to be - highly visible so that you can catch it in code reviews and codebase audits. -

- -

- Does it mean React is entirely safe from injection attacks? No. HTML and DOM - offer - plenty of attack surface - that is too difficult or slow for React or other UI libraries to mitigate against. Most of the - remaining attack vectors involve attributes. For example, if you render - <a href={user.website}>, beware of the user whose website is - 'javascript: stealYourPassword()'. Spreading user input like - <div {...userData}> is rare but also dangerous. -

- -

- React could provide more protection - over time but in many cases these are consequences of server issues that - should be fixed - there anyway. -

- -

- Still, escaping text content is a reasonable first line of defence that catches a lot of potential - attacks. Isn’t it nice to know that code like this is safe? -

- -
// Escaped automatically
-	<p>
-		{message.text}
-	</p>
-	
- -

- Well, that wasn’t always true either. And that’s where - $$typeof comes in. -

- -

React elements are plain objects by design:

- -
{
-		type: 'marquee',
-		props: {
-			bgcolor: '#ffa7c4',
-			children: 'hi',
-		},
-		key: null,
-		ref: null,
-		$$typeof: Symbol.for('react.element'),
-	}
-	
- -

- While normally you create them with React.createElement(), it is not required. There - are valid use cases for React to support plain element objects written like I just did above. Of - course, you probably wouldn’t want to write them like this — but this - can be useful for - an optimizing compiler, passing UI elements between workers, or for decoupling JSX from the React - package. -

- -

- However, - if your server has a hole that lets the user store an arbitrary JSON object while - the client code expects a string, this could become a problem: -

- -
// Server could have a hole that lets user store JSON
-	let expectedTextButGotJSON = {
-		type: 'div',
-		props: {
-			dangerouslySetInnerHTML: {
-				__html: '/* put your exploit here */'
-			},
-		},
-		// ...
-	};
-	let message = { text: expectedTextButGotJSON };
-
-	// Dangerous in React 0.13
-	<p>
-		{message.text}
-	</p>
-	
- -

- In that case, React 0.13 would be - vulnerable to an XSS attack. - To clarify, again, this attack depends on an existing server hole. Still, React - could do a better job of protecting people against it. And starting with React 0.14, it does. -

- -

- The fix in React 0.14 was to - tag every React element with a Symbol: -

- -
{
-		type: 'marquee',
-		props: {
-			bgcolor: '#ffa7c4',
-			children: 'hi',
-		},
-		key: null,
-		ref: null,
-		$$typeof: Symbol.for('react.element'),
-	}
-	
- -

- This works because you can’t just put Symbols in JSON. - So even if the server has a security hole and returns JSON instead of text, that JSON can’t - include Symbol.for('react.element'). - React will check element.$$typeof, and will refuse to process the element if it’s - missing or invalid. -

- -

- The nice thing about using Symbol.for() specifically is that - Symbols are global between environments like iframes and workers. So this fix - doesn’t prevent passing trusted elements between different parts of the app even in more exotic - conditions. Similarly, even if there are multiple copies of React on the page, they can still - “agree” on the valid $$typeof value. -

- -

- What about the browsers that - don’t support - Symbols? -

- -

- Alas, they don’t get this extra protection. React still includes the $$typeof field - on the element for consistency, but it’s - set to a number - — 0xeac7. -

- -

Why this number specifically? 0xeac7 kinda looks like “React”.

diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/output.json deleted file mode 100644 index a6a2c04895c..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild2/output.json +++ /dev/null @@ -1,1103 +0,0 @@ -[ - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "You might think you’re writing JSX:", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_type": "code", - "language": "javascript", - "code": "hi\n\t", - "_key": "randomKey10" - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "But really, you’re calling a function:", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_type": "code", - "language": "javascript", - "code": "React.createElement(\n\t\t/* type */ 'marquee',\n\t\t/* props */ { bgcolor: '#ffa7c4' },\n\t\t/* children */ 'hi'\n\t)\n\t", - "_key": "randomKey12" - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "marks": [], - "text": "And that function gives you back an object. We call this object a React ", - "_key": "randomKey130" - }, - { - "_type": "span", - "marks": ["em"], - "text": "element", - "_key": "randomKey131" - }, - { - "_type": "span", - "marks": [], - "text": ". It tells React what to render next. Your components return a tree of them.", - "_key": "randomKey132" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_type": "code", - "language": "javascript", - "code": "{\n\t\ttype: 'marquee',\n\t\tprops: {\n\t\t\tbgcolor: '#ffa7c4',\n\t\t\tchildren: 'hi',\n\t\t},\n\t\tkey: null,\n\t\tref: null,\n\t\t$$typeof: Symbol.for('react.element'), // 🧐 Who dis\n\t}\n\t", - "_key": "randomKey14" - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "marks": [], - "text": "If you used React you might be familiar with ", - "_key": "randomKey150" - }, - { - "_type": "span", - "marks": ["code"], - "text": "type", - "_key": "randomKey151" - }, - { - "_type": "span", - "marks": [], - "text": ", ", - "_key": "randomKey152" - }, - { - "_type": "span", - "marks": ["code"], - "text": "props", - "_key": "randomKey153" - }, - { - "_type": "span", - "marks": [], - "text": ", ", - "_key": "randomKey154" - }, - { - "_type": "span", - "marks": ["code"], - "text": "key", - "_key": "randomKey155" - }, - { - "_type": "span", - "marks": [], - "text": ", and ", - "_key": "randomKey156" - }, - { - "_type": "span", - "marks": ["code"], - "text": "ref", - "_key": "randomKey157" - }, - { - "_type": "span", - "marks": [], - "text": " fields. ", - "_key": "randomKey158" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "But what is ", - "_key": "randomKey159" - }, - { - "_type": "span", - "marks": ["strong", "code"], - "text": "$$typeof", - "_key": "randomKey1510" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "? And why does it have a ", - "_key": "randomKey1511" - }, - { - "_type": "span", - "marks": ["strong", "code"], - "text": "Symbol()", - "_key": "randomKey1512" - }, - { - "_type": "span", - "marks": ["strong"], - "text": " as a value?", - "_key": "randomKey1513" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "marks": [], - "text": "That’s another one of those things that you don’t ", - "_key": "randomKey160" - }, - { - "_type": "span", - "marks": ["em"], - "text": "need", - "_key": "randomKey161" - }, - { - "_type": "span", - "marks": [], - "text": " to know to use React, but that will make you feel good when you do. There’s also some tips about security in this post that you might want to know. Maybe one day you’ll write your own UI library and all of this will come in handy. I certainly hope so.", - "_key": "randomKey162" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Before client-side UI libraries became common and added basic protection, it was common for app code to construct HTML and insert it into the DOM:", - "_key": "randomKey170" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_type": "code", - "language": "javascript", - "code": "const messageEl = document.getElementById('message');\n\tmessageEl.innerHTML = '

' + message.text + '

';\n\t", - "_key": "randomKey18" - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "marks": [], - "text": "That works fine, except when your ", - "_key": "randomKey190" - }, - { - "_type": "span", - "marks": ["code"], - "text": "message.text", - "_key": "randomKey191" - }, - { - "_type": "span", - "marks": [], - "text": " is something like ", - "_key": "randomKey192" - }, - { - "_type": "span", - "marks": ["code"], - "text": "''", - "_key": "randomKey193" - }, - { - "_type": "span", - "marks": [], - "text": ". ", - "_key": "randomKey194" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "You don’t want things written by strangers to appear verbatim in your app’s rendered HTML.", - "_key": "randomKey195" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "marks": [], - "text": "(Fun fact: if you only do client-side rendering, a ", - "_key": "randomKey200" - }, - { - "_type": "span", - "marks": ["code"], - "text": " -
-
-
-
-

FASHION

-

How to make: Rebecca's Dream Magnum

-

For Rebecca Minkoff’s Fall 2016 New York Fashion Week show, Magnum and TRESemmé transformed MAGNUM New York into an elite backstage area celebrating high end style and pure indulgence. To mark this exciting collaboration in a fittingly decadent manner, TRESemmé and Magnum designed a one-of-a-kind Dream Magnum inspired by Rebecca’s new collection.

-
-
-
-
- - -
- - -
-
-
-
-
-
- -
- -
-
-
-Dream Magnum -
-
-
- -
-
-
-
-
-
-
-
-
- -
- - -
-
-
- -
-
-
    -
  • - - -
  • -
  • - - -
  • -
  • - - -
  • -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
- -
- -
-
-
-

TAGS

-
- -
-
-
-
-
-
-
-
-
- -
- - -
-
-
- - -
-
-
-
- - -
- -
-
-
- -
-
-
- live chat button -
-
-
-
- -
- - -
-
-
-
-
- \ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild3/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild3/output.json deleted file mode 100644 index 9f950fac9ed..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild3/output.json +++ /dev/null @@ -1,1577 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey390" - } - ], - "_key": "randomKey39" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "FASHION", - "_key": "randomKey400" - } - ], - "_key": "randomKey40" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey410", - "text": "", - "marks": [] - } - ], - "_key": "randomKey41" - }, - { - "_type": "block", - "markDefs": [], - "style": "h1", - "children": [ - { - "_type": "span", - "marks": [], - "text": "How to make: Rebecca's Dream Magnum", - "_key": "randomKey420" - } - ], - "_key": "randomKey42" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey430", - "text": "", - "marks": [] - } - ], - "_key": "randomKey43" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "For Rebecca Minkoff’s Fall 2016 New York Fashion Week show, Magnum and TRESemmé transformed MAGNUM New York into an elite backstage area celebrating high end style and pure indulgence. To mark this exciting collaboration in a fittingly decadent manner, TRESemmé and Magnum designed a one-of-a-kind Dream Magnum inspired by Rebecca’s new collection.\n", - "_key": "randomKey440" - } - ], - "_key": "randomKey44" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " Share this article", - "_key": "randomKey450" - } - ], - "_key": "randomKey45" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "javascript://" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Share to facebook Opens in new window", - "_key": "randomKey460" - } - ], - "_key": "randomKey46" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey470", - "text": "", - "marks": [] - } - ], - "_key": "randomKey47" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey1", - "_type": "link", - "href": "javascript://" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey1"], - "text": "Share to twitter Opens in new window", - "_key": "randomKey480" - } - ], - "_key": "randomKey48" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey490", - "text": "", - "marks": [] - } - ], - "_key": "randomKey49" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey2", - "_type": "link", - "href": "javascript://" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey2"], - "text": "Share to email Opens in new window", - "_key": "randomKey500" - } - ], - "_key": "randomKey50" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey510", - "text": "", - "marks": [] - } - ], - "_key": "randomKey51" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Add to favourites Added to favourites", - "_key": "randomKey520" - } - ], - "_key": "randomKey52" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey530" - } - ], - "_key": "randomKey53" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey54" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey550" - } - ], - "_key": "randomKey55" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey56" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey570" - } - ], - "_key": "randomKey57" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "01. ", - "_key": "randomKey580" - } - ], - "_key": "randomKey58" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey59" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "01.", - "_key": "randomKey600" - } - ], - "_key": "randomKey60" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Take a Magnum Classic and drizzle over luxurious Belgian dark chocolate.", - "_key": "randomKey610" - } - ], - "_key": "randomKey61" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey620", - "text": "", - "marks": [] - } - ], - "_key": "randomKey62" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "02. ", - "_key": "randomKey630" - } - ], - "_key": "randomKey63" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey64" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "02.", - "_key": "randomKey650" - } - ], - "_key": "randomKey65" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Accessorize with Rebecca’s inspired toppings: midnight black pearls, blush blossom curls, Greek yogurt buttons and Hawaiian black lava sea salt.", - "_key": "randomKey660" - } - ], - "_key": "randomKey66" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey670", - "text": "", - "marks": [] - } - ], - "_key": "randomKey67" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "03. ", - "_key": "randomKey680" - } - ], - "_key": "randomKey68" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey69" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "03.", - "_key": "randomKey700" - } - ], - "_key": "randomKey70" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Finish with an indulgent flourish of white chocolate sauce. Top it off with a dusting of edible gold flakes and a dab of decadent dark chocolate sauce.", - "_key": "randomKey710" - } - ], - "_key": "randomKey71" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " Share this article", - "_key": "randomKey720" - } - ], - "_key": "randomKey72" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey3", - "_type": "link", - "href": "javascript://" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey3"], - "text": "Share to facebook Opens in new window", - "_key": "randomKey730" - } - ], - "_key": "randomKey73" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey740", - "text": "", - "marks": [] - } - ], - "_key": "randomKey74" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey4", - "_type": "link", - "href": "javascript://" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey4"], - "text": "Share to twitter Opens in new window", - "_key": "randomKey750" - } - ], - "_key": "randomKey75" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey760", - "text": "", - "marks": [] - } - ], - "_key": "randomKey76" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey5", - "_type": "link", - "href": "javascript://" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey5"], - "text": "Share to email Opens in new window", - "_key": "randomKey770" - } - ], - "_key": "randomKey77" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey780", - "text": "", - "marks": [] - } - ], - "_key": "randomKey78" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Add to favourites Added to favourites", - "_key": "randomKey790" - } - ], - "_key": "randomKey79" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey800" - } - ], - "_key": "randomKey80" - }, - { - "_type": "block", - "markDefs": [], - "style": "h2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "TAGS", - "_key": "randomKey810" - } - ], - "_key": "randomKey81" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey820", - "text": "", - "marks": [] - } - ], - "_key": "randomKey82" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey6", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/search.html?Locale=en_gb&BrandName=magnumv2&stags=unilever%253Aice-cream%252Farticle%252Ftopic%252Ffashion&noesc" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey6"], - "text": "fashion", - "_key": "randomKey830" - } - ], - "_key": "randomKey83" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey840", - "text": "", - "marks": [] - } - ], - "_key": "randomKey84" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey7", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/search.html?Locale=en_gb&BrandName=magnumv2&stags=unilever%253Aice-cream%252Farticle%252Ftype%252Frecipe&noesc" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey7"], - "text": "recipe", - "_key": "randomKey850" - } - ], - "_key": "randomKey85" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey860" - } - ], - "_key": "randomKey86" - }, - { - "_type": "block", - "markDefs": [], - "style": "h2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "NEXT STORIES", - "_key": "randomKey870" - } - ], - "_key": "randomKey87" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey880", - "text": "", - "marks": [] - } - ], - "_key": "randomKey88" - }, - { - "_type": "block", - "markDefs": [], - "style": "h2", - "children": [ - { - "_type": "span", - "_key": "randomKey890", - "text": "", - "marks": [] - } - ], - "_key": "randomKey89" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ( 3 items )", - "_key": "randomKey900" - } - ], - "_key": "randomKey90" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey9", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/dream-magnum.html" - }, - { - "_key": "randomKey10", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/dream-magnum.html" - }, - { - "_key": "randomKey12", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/dream-magnum.html" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey9"], - "text": " FASHION ", - "_key": "randomKey910" - }, - { - "_type": "span", - "marks": ["randomKey10"], - "text": " The Dream Magnum Collection ", - "_key": "randomKey911" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey912" - }, - { - "_type": "span", - "marks": ["randomKey12"], - "text": "24/04/2018", - "_key": "randomKey913" - } - ], - "_key": "randomKey91" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey92" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey11", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/dream-magnum.html" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["randomKey11"], - "text": "Explore our gallery of Dream Magnums, customised by Pleasure Seekers everywhere.", - "_key": "randomKey930" - } - ], - "_key": "randomKey93" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey940", - "text": "", - "marks": [] - } - ], - "_key": "randomKey94" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey14", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/veronica-dream-magnum.html" - }, - { - "_key": "randomKey15", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/veronica-dream-magnum.html" - }, - { - "_key": "randomKey17", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/veronica-dream-magnum.html" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey14"], - "text": " FASHION ", - "_key": "randomKey950" - }, - { - "_type": "span", - "marks": ["randomKey15"], - "text": " Veronica's Dream Magnum ", - "_key": "randomKey951" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey952" - }, - { - "_type": "span", - "marks": ["randomKey17"], - "text": "27/04/2018", - "_key": "randomKey953" - } - ], - "_key": "randomKey95" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey96" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey16", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/veronica-dream-magnum.html" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["randomKey16"], - "text": "Fashionista Veronica Ferraro designs a Dream Magnum echoing her unique style", - "_key": "randomKey970" - } - ], - "_key": "randomKey97" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey980", - "text": "", - "marks": [] - } - ], - "_key": "randomKey98" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey19", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/food/kendall-dream-magnum.html" - }, - { - "_key": "randomKey20", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/food/kendall-dream-magnum.html" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey19"], - "text": " FOOD ", - "_key": "randomKey990" - }, - { - "_type": "span", - "marks": ["randomKey20"], - "text": " Kendall's Dream Magnum ", - "_key": "randomKey991" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey992" - } - ], - "_key": "randomKey99" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey100" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey21", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/food/kendall-dream-magnum.html" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["randomKey21"], - "text": "Kendall Jenner created her own Dream Magnum in the Magnum Lounge in Cannes", - "_key": "randomKey1010" - } - ], - "_key": "randomKey101" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1020" - } - ], - "_key": "randomKey102" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "PRODUCTS", - "_key": "randomKey1030" - } - ], - "_key": "randomKey103" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey1040", - "text": "", - "marks": [] - } - ], - "_key": "randomKey104" - }, - { - "_type": "block", - "markDefs": [], - "style": "h2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "SELECT YOUR INDULGENCE", - "_key": "randomKey1050" - } - ], - "_key": "randomKey105" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1060" - } - ], - "_key": "randomKey106" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey107" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey1080", - "text": "", - "marks": [] - } - ], - "_key": "randomKey108" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey23", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/products/icecream-classics/magnum-almond-ice-cream-4-x-100ml.html" - } - ], - "style": "h3", - "children": [ - { - "_type": "span", - "marks": ["randomKey23"], - "text": "Magnum Almond Ice Cream 4 x 100ml", - "_key": "randomKey1090" - } - ], - "_key": "randomKey109" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey24", - "_type": "link", - "href": "#" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " (230) ", - "_key": "randomKey1100" - }, - { - "_type": "span", - "marks": ["randomKey24"], - "text": " BACK TO TOP ", - "_key": "randomKey1101" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1102" - } - ], - "_key": "randomKey110" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "_key": "randomKey1110", - "text": "", - "marks": [] - } - ], - "_key": "randomKey111" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey112" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey1130", - "text": "", - "marks": [] - } - ], - "_key": "randomKey113" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1140" - } - ], - "_key": "randomKey114" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey26", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/signup.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey26"], - "text": "Sign up", - "_key": "randomKey1150" - } - ], - "_key": "randomKey115" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey27", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/FAQs.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey27"], - "text": "Frequently asked questions", - "_key": "randomKey1160" - } - ], - "_key": "randomKey116" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey28", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/contactus.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey28"], - "text": "Contact us", - "_key": "randomKey1170" - } - ], - "_key": "randomKey117" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey29", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/sitemap.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey29"], - "text": "Site map", - "_key": "randomKey1180" - } - ], - "_key": "randomKey118" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey30", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/countryselector.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey30"], - "text": "Change country", - "_key": "randomKey1190" - } - ], - "_key": "randomKey119" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey31", - "_type": "link", - "href": "https://www.unilevernotices.com/united-kingdom/english/privacy-notice/notice.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey31"], - "text": "Privacy policyOpens in new window", - "_key": "randomKey1200" - } - ], - "_key": "randomKey120" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey32", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/terms-and-conditions.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey32"], - "text": "T&C'sOpens in new window", - "_key": "randomKey1210" - } - ], - "_key": "randomKey121" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey33", - "_type": "link", - "href": "https://www.unilevernotices.com/united-kingdom/english/cookie-notice/notice.html" - } - ], - "style": "normal", - "level": 2, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey33"], - "text": "Cookie PolicyOpens in new window", - "_key": "randomKey1220" - } - ], - "_key": "randomKey122" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey1230", - "text": "", - "marks": [] - } - ], - "_key": "randomKey123" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Opens in new window", - "_key": "randomKey1240" - } - ], - "_key": "randomKey124" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey34", - "_type": "link", - "href": "https://www.magnumicecream.com/uk/stories/fashion/rebecca-minkoff-dream-magnum.html" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey34"], - "text": "English", - "_key": "randomKey1250" - } - ], - "_key": "randomKey125" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey1260", - "text": "", - "marks": [] - } - ], - "_key": "randomKey126" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey35", - "_type": "link", - "href": "http://www.facebook.com/magnumuk" - }, - { - "_key": "randomKey36", - "_type": "link", - "href": "http://www.twitter.com/magnumuk" - }, - { - "_key": "randomKey37", - "_type": "link", - "href": "http://www.instagram.com/magnum" - }, - { - "_key": "randomKey38", - "_type": "link", - "href": "http://www.youtube.com/mymagnum" - } - ], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": ["randomKey35"], - "text": "Opens in new window", - "_key": "randomKey1270" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1271" - }, - { - "_type": "span", - "marks": ["randomKey36"], - "text": "Opens in new window", - "_key": "randomKey1272" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1273" - }, - { - "_type": "span", - "marks": ["randomKey37"], - "text": "Opens in new window", - "_key": "randomKey1274" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey1275" - }, - { - "_type": "span", - "marks": ["randomKey38"], - "text": "Opens in new window", - "_key": "randomKey1276" - } - ], - "_key": "randomKey127" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey128" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey129" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey130" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey131" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "_key": "randomKey1320", - "text": "", - "marks": [] - } - ], - "_key": "randomKey132" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "© 2019 Copyright Unilever Opens in new window", - "_key": "randomKey1330" - } - ], - "_key": "randomKey133" - }, - { - "_type": "image", - "_sanityAsset": "image@", - "_key": "randomKey134" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": " X", - "_key": "randomKey1350" - } - ], - "_key": "randomKey135" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/input.html deleted file mode 100644 index b3a6b4f0624..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/input.html +++ /dev/null @@ -1,39 +0,0 @@ -

- Cornerstone's Adam Miller Recognized as a 2019 Best CEO for Women

- -​ -
- Global talent management and talent experience leader earns spot on Comparably's 2019 Best CEOs for Women list as ranked by female employees at the company
-
-SANTA MONICA, Calif. – June 26, 2019 – Cornerstone OnDemand (NASDAQ: CSOD), a global leader in cloud-based learning, talent management and talent experience software, today announced that culture and career monitoring website Comparably has named Cornerstone founder and CEO, Adam Miller, as one of the top 50 CEOs in the U.S. for female employees.
-
-Chosen among the CEOs of over 50,000 U.S. companies, the Comparably 2019 Best CEOs for Women list was derived from approval ratings provided by female employees who anonymously rated their employers between June 2018 and June 2019.
-
-""Cornerstone has consistently stood out as having one of the best company cultures,"" said Comparably CEO Jason Nazar. ""Adam Miller is known for being a dynamic leader who embraces diversity and inclusion, so it's no surprise that his female employees have rated him so highly on Comparably. He has helped make the company incredibly successful while fostering a positive environment for his entire team.""
-
-"Our success to date could not have been achieved without the determination and leadership of the women in the company," said Adam Miller, founder and CEO, Cornerstone. "At Cornerstone, we are committed to our mission of realizing the potential of our people and cultivating an environment where women can thrive. I am humbled by this recognition and honored to champion women in the workforce."
-
-The 2019 Best CEOs for Women award by Comparably follows prior industry acknowledgement for Cornerstone and its leadership under Adam Miller. Last year, Miller was recognized as a Best CEO for Diversity by Comparably, as well as Best CEO in HR Technology by European CEO. In 2017, he was named in The SaaS Report's list of Top CEOs and in Comparably's list of Best CEOs. He was also awarded the 2017 Best Practices Institute CEO Award and was honored with the 2017 HR Tech World UNLEASH Award.
-
-Additional Details -​ - -About Cornerstone
-Cornerstone was founded with a passion for empowering people through learning and a conviction that people should be your organization's greatest competitive advantage. Cornerstone is a global human capital management leader with a core belief that companies thrive when they help their employees to realize their potential. Putting this belief into practice, Cornerstone offers solutions to help companies strategically manage and continuously develop their talent throughout the entire employee lifecycle. Featuring comprehensive recruiting, personalized learning, development-driven performance management, and holistic HR planning, Cornerstone's human capital management platform is successfully used by more than 3,500 global clients of all sizes, spanning more than 42 million users across 192 countries and 43 languages. Learn more at www.cornerstoneondemand.com.
-
-About Comparably
-Comparably is a leading workplace culture and compensation site with a mission to make work more transparent and rewarding. Employees can access the platform's salary comparison tool, rate their companies and CEOs, and see what workplaces are really like through the lens of comprehensive and structured data based on gender, ethnicity, age, experience, department, location, education, and company size. With 10 million ratings from employees across 50,000 U.S. companies since its 2016 launch, Comparably has become one of the most trusted third party sites for workplace culture and a fast growing SaaS solution for employer branding. For more information on the platform, workplace culture studies, and salary reports go to www.comparably.com. For Comparably's annual Best Places to Work Awards, go to www.comparably.com/awards.
-
-
-Media Contact:
-Deaira Irons
-Cornerstone
-310-752-0164
-dirons@csod.com
diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/output.json deleted file mode 100644 index 5f63c25cdb4..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild4/output.json +++ /dev/null @@ -1,158 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [], - "style": "h1", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Cornerstone's Adam Miller Recognized as a 2019 Best CEO for Women", - "_key": "randomKey00" - } - ], - "_key": "randomKey0" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "​ ", - "_key": "randomKey10" - }, - { - "_type": "span", - "marks": ["em"], - "text": "Global talent management and talent experience leader earns spot on Comparably's 2019 Best CEOs for Women list as ranked by female employees at the company", - "_key": "randomKey11" - }, - { - "_type": "span", - "marks": [], - "text": "\n", - "_key": "randomKey12" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "SANTA MONICA, Calif. – June 26, 2019 – ", - "_key": "randomKey13" - }, - { - "_type": "span", - "marks": [], - "text": "Cornerstone OnDemand (NASDAQ: CSOD), a global leader in cloud-based learning, talent management and talent experience software, today announced that culture and career monitoring website Comparably has named Cornerstone founder and CEO, Adam Miller, as one of the top 50 CEOs in the U.S. for female employees.\n\nChosen among the CEOs of over 50,000 U.S. companies, the Comparably 2019 Best CEOs for Women list was derived from approval ratings provided by female employees who anonymously rated their employers between June 2018 and June 2019.\n\n\"\"Cornerstone has consistently stood out as having one of the best company cultures,\"\" said Comparably CEO Jason Nazar. \"\"Adam Miller is known for being a dynamic leader who embraces diversity and inclusion, so it's no surprise that his female employees have rated him so highly on Comparably. He has helped make the company incredibly successful while fostering a positive environment for his entire team.\"\"\n\n\"Our success to date could not have been achieved without the determination and leadership of the women in the company,\" said Adam Miller, founder and CEO, Cornerstone. \"At Cornerstone, we are committed to our mission of realizing the potential of our people and cultivating an environment where women can thrive. I am humbled by this recognition and honored to champion women in the workforce.\"\n\nThe 2019 Best CEOs for Women award by Comparably follows prior industry acknowledgement for Cornerstone and its leadership under Adam Miller. Last year, Miller was recognized as a Best CEO for Diversity by Comparably, as well as Best CEO in HR Technology by European CEO. In 2017, he was named in The SaaS Report's list of Top CEOs and in Comparably's list of Best CEOs. He was also awarded the 2017 Best Practices Institute CEO Award and was honored with the 2017 HR Tech World UNLEASH Award.\n\n", - "_key": "randomKey14" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "Additional Details", - "_key": "randomKey15" - }, - { - "_type": "span", - "marks": [], - "text": " ​", - "_key": "randomKey16" - } - ], - "_key": "randomKey1" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "To learn more about the selection criteria of Comparably's list, visit: https://www.comparably.com/blog/best-ceos-for-women-2019/", - "_key": "randomKey20" - } - ], - "_key": "randomKey2" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "To learn more about Cornerstone CEO Adam Miller, visit: https://www.cornerstoneondemand.com/company/executives/adam-miller", - "_key": "randomKey30" - } - ], - "_key": "randomKey3" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "level": 1, - "listItem": "bullet", - "children": [ - { - "_type": "span", - "marks": [], - "text": "To learn more about open positions at Cornerstone, visit: https://www.cornerstoneondemand.com/careers", - "_key": "randomKey40" - } - ], - "_key": "randomKey4" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "About Cornerstone", - "_key": "randomKey50" - }, - { - "_type": "span", - "marks": [], - "text": "\nCornerstone was founded with a passion for empowering people through learning and a conviction that people should be your organization's greatest competitive advantage. Cornerstone is a global human capital management leader with a core belief that companies thrive when they help their employees to realize their potential. Putting this belief into practice, Cornerstone offers solutions to help companies strategically manage and continuously develop their talent throughout the entire employee lifecycle. Featuring comprehensive recruiting, personalized learning, development-driven performance management, and holistic HR planning, Cornerstone's human capital management platform is successfully used by more than 3,500 global clients of all sizes, spanning more than 42 million users across 192 countries and 43 languages. Learn more at www.cornerstoneondemand.com.\n\n", - "_key": "randomKey51" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "About Comparably", - "_key": "randomKey52" - }, - { - "_type": "span", - "marks": [], - "text": "\nComparably is a leading workplace culture and compensation site with a mission to make work more transparent and rewarding. Employees can access the platform's salary comparison tool, rate their companies and CEOs, and see what workplaces are really like through the lens of comprehensive and structured data based on gender, ethnicity, age, experience, department, location, education, and company size. With 10 million ratings from employees across 50,000 U.S. companies since its 2016 launch, Comparably has become one of the most trusted third party sites for workplace culture and a fast growing SaaS solution for employer branding. For more information on the platform, workplace culture studies, and salary reports go to www.comparably.com. For Comparably's annual Best Places to Work Awards, go to www.comparably.com/awards.\n\n\n", - "_key": "randomKey53" - }, - { - "_type": "span", - "marks": ["strong"], - "text": "Media Contact:", - "_key": "randomKey54" - }, - { - "_type": "span", - "marks": [], - "text": "\nDeaira Irons\nCornerstone\n310-752-0164\ndirons@csod.com\n", - "_key": "randomKey55" - } - ], - "_key": "randomKey5" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/index.ts deleted file mode 100644 index 99c8c5a588a..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {JSDOM} from 'jsdom' - -import {isElement} from '../../../../src/HtmlDeserializer/helpers' -import {type DeserializerRule} from '../../../../src/types' -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - const findElement = (nodes: any, target: any) => - nodes.find((i: ChildNode) => i.nodeName.toLowerCase() === target) - - function getCtaBlock(ctaNodes: ChildNode[]) { - const title = findElement(ctaNodes, 'h2') - const intro = findElement(ctaNodes, 'div')?.childNodes[0] - const anchor = findElement(ctaNodes, 'a') - - return { - _type: 'promo', - title: title.textContent, - intro: blockTools.htmlToBlocks(intro.innerHTML, blockContentType, { - parseHtml: (_html: string) => new JSDOM(_html).window.document, - }), - link: { - _type: 'link', - url: anchor.href, - }, - } - } - - const rules: DeserializerRule[] = [ - { - deserialize(el, next, block) { - if (isElement(el) && el.tagName.toLowerCase() === 'cta') { - const items = Array.from(el.childNodes) - return block(getCtaBlock(items)) - } - return undefined - }, - }, - ] - const options = { - ...commonOptions, - rules, - } - return blockTools.htmlToBlocks(html, blockContentType, options) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/input.html deleted file mode 100644 index 0c5e446d320..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/input.html +++ /dev/null @@ -1,9 +0,0 @@ -

TRANSFORM is currently supporting over - 45 projects across 11 countries, - which have reached more than a million people so far.

- -

Unlocking the power of markets

- Drinking water -

- TRANSFORM brings together the public and private sectors to address the world's most pressing development challenges

- Visit the TRANSFORM website to discover more
diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/output.json deleted file mode 100644 index 466071a542b..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/fromTheWild5/output.json +++ /dev/null @@ -1,56 +0,0 @@ -[ - { - "_key": "randomKey2", - "_type": "block", - "children": [ - { - "_key": "randomKey20", - "_type": "span", - "marks": [], - "text": "TRANSFORM is currently supporting over " - }, - { - "_key": "randomKey21", - "_type": "span", - "marks": ["randomKey0"], - "text": "45 projects across 11 countries" - }, - { - "_key": "randomKey22", - "_type": "span", - "marks": [], - "text": ", which have reached more than a million people so far." - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://www.transform.global/modules/help/Market.aspx?id=6&appid=2" - } - ], - "style": "normal" - }, - { - "_key": "randomKey3", - "_type": "promo", - "intro": [ - { - "_key": "randomKey1", - "_type": "block", - "children": [ - { - "_key": "randomKey10", - "_type": "span", - "marks": [], - "text": "TRANSFORM brings together the public and private sectors to address the world's most pressing development challenges" - } - ], - "markDefs": [], - "style": "normal" - } - ], - "link": {"_type": "link", "url": "https://www.transform.global/Intro.aspx"}, - "title": "Unlocking the power of markets" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/index.ts deleted file mode 100644 index 860d2c0e0f3..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, { - ...commonOptions, - unstable_whitespaceOnPasteMode: 'normalize', - }) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/input.html deleted file mode 100644 index 2462fe4aae2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/input.html +++ /dev/null @@ -1 +0,0 @@ -

Lorem:

  • unchecked

    Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem

    • unchecked

      Lorem Lorem Lorem

  • unchecked

    Lorem

    • unchecked

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem Lorem Lorem Lorem











Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem:

Lorem Lorem: 12345

Lorem Lorem: Lorem Lorem Lorem Lorem


Lets also test

Bold

Italic

Underline


Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem

  • Lorem

  • Lorem Lorem

  • Lorem Lorem


Lorem

  • Lorem

  • Lorem


Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem: 1234


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem




Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/output.json deleted file mode 100644 index de1a06fd61d..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocs/output.json +++ /dev/null @@ -1,1326 +0,0 @@ -[ - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem:", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey30" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem", - "_key": "randomKey40" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey5", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey50" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey6", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey60" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey7", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey70" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey8", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey80" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey10", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey100" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey12", - "children": [ - { - "_type": "span", - "_key": "randomKey120", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey130" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey14", - "children": [ - { - "_type": "span", - "_key": "randomKey140", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey150" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "_key": "randomKey160", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey170" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey18", - "children": [ - { - "_type": "span", - "_key": "randomKey180", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem:", - "_key": "randomKey190" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey191" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey200" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey21", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem: ", - "_key": "randomKey210" - }, - { - "_type": "span", - "marks": [], - "text": "12345", - "_key": "randomKey211" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey22", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey220" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem", - "_key": "randomKey221" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey23", - "children": [ - { - "_type": "span", - "_key": "randomKey230", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey24", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lets also test", - "_key": "randomKey240" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey25", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Bold", - "_key": "randomKey250" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey26", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Italic", - "_key": "randomKey260" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey27", - "children": [ - { - "_type": "span", - "marks": ["underline"], - "text": "Underline", - "_key": "randomKey270" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey28", - "children": [ - { - "_type": "span", - "_key": "randomKey280", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey29", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem", - "_key": "randomKey290" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey30", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey300" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey31", - "children": [ - { - "_type": "span", - "_key": "randomKey310", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey32", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey320" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey33", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey330" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey34", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey340" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey35", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey350" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey36", - "children": [ - { - "_type": "span", - "_key": "randomKey360", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey37", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey370" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey38", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey380" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey39", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey390" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey40", - "children": [ - { - "_type": "span", - "_key": "randomKey400", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey41", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey410" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey42", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey420" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey43", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey430" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey44", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey440" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey45", - "children": [ - { - "_type": "span", - "_key": "randomKey450", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey46", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey460" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey47", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey470" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey48", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem", - "_key": "randomKey480" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey49", - "children": [ - { - "_type": "span", - "marks": ["strong", "em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey490" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey50", - "children": [ - { - "_type": "span", - "_key": "randomKey500", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey51", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem Lorem:", - "_key": "randomKey510" - }, - { - "_type": "span", - "marks": [], - "text": " 1234", - "_key": "randomKey511" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey52", - "children": [ - { - "_type": "span", - "_key": "randomKey520", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey53", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey530" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey54", - "children": [ - { - "_type": "span", - "_key": "randomKey540", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey55", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey550" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey56", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey560" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey57", - "children": [ - { - "_type": "span", - "_key": "randomKey570", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey58", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey580" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey59", - "children": [ - { - "_type": "span", - "_key": "randomKey590", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey60", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey600" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey61", - "children": [ - { - "_type": "span", - "_key": "randomKey610", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey62", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey620" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey63", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey630" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey64", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey640" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey65", - "children": [ - { - "_type": "span", - "_key": "randomKey650", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey66", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey660" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey67", - "children": [ - { - "_type": "span", - "_key": "randomKey670", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey68", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey680" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey69", - "children": [ - { - "_type": "span", - "_key": "randomKey690", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey70", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey700" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey71", - "children": [ - { - "_type": "span", - "_key": "randomKey710", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey72", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey720" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey73", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey730" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey74", - "children": [ - { - "_type": "span", - "_key": "randomKey740", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey75", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey750" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey76", - "children": [ - { - "_type": "span", - "_key": "randomKey760", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey77", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey770" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey78", - "children": [ - { - "_type": "span", - "_key": "randomKey780", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey79", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey790" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey80", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey800" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey81", - "children": [ - { - "_type": "span", - "_key": "randomKey810", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey82", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey820" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey83", - "children": [ - { - "_type": "span", - "_key": "randomKey830", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey84", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey840" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey85", - "children": [ - { - "_type": "span", - "_key": "randomKey850", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey86", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey860" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey87", - "children": [ - { - "_type": "span", - "_key": "randomKey870", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey88", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ", - "_key": "randomKey880" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Lorem Lorem", - "_key": "randomKey881" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey882" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://sanity.io" - } - ], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey89", - "children": [ - { - "_type": "span", - "marks": [], - "text": "\n", - "_key": "randomKey890" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/index.ts deleted file mode 100644 index 860d2c0e0f3..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, { - ...commonOptions, - unstable_whitespaceOnPasteMode: 'normalize', - }) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/input.html deleted file mode 100644 index b04e7007d69..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/input.html +++ /dev/null @@ -1 +0,0 @@ -

Lorem:

  • ikke avmerket

    Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • ikke avmerket

      Lorem

    • ikke avmerket

      Lorem Lorem Lorem

  • ikke avmerket

    Lorem

    • ikke avmerket

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • ikke avmerket

        Lorem Lorem Lorem Lorem Lorem Lorem

      • ikke avmerket

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • ikke avmerket

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • ikke avmerket

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • ikke avmerket

      Lorem Lorem Lorem Lorem











Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem:

Lorem Lorem: 12345

Lorem Lorem: Lorem Lorem Lorem Lorem


Lets also test

Bold

Italic

Underline


Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem

  • Lorem

  • Lorem Lorem

  • Lorem Lorem


Lorem

  • Lorem

  • Lorem


Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem: 1234


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem




Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/output.json deleted file mode 100644 index 8c4a3f9270c..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsFirefox/output.json +++ /dev/null @@ -1,1312 +0,0 @@ -[ - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem:", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey30" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem", - "_key": "randomKey40" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey5", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey50" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey6", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey60" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey7", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey70" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey8", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey80" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey10", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey100" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey12", - "children": [ - { - "_type": "span", - "_key": "randomKey120", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey130" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey14", - "children": [ - { - "_type": "span", - "_key": "randomKey140", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey150" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "_key": "randomKey160", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey170" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey18", - "children": [ - { - "_type": "span", - "_key": "randomKey180", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem:", - "_key": "randomKey190" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey191" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey200" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey21", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem: ", - "_key": "randomKey210" - }, - { - "_type": "span", - "marks": [], - "text": "12345", - "_key": "randomKey211" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey22", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey220" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem", - "_key": "randomKey221" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey23", - "children": [ - { - "_type": "span", - "_key": "randomKey230", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey24", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lets also test", - "_key": "randomKey240" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey25", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Bold", - "_key": "randomKey250" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey26", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Italic", - "_key": "randomKey260" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey27", - "children": [ - { - "_type": "span", - "marks": ["underline"], - "text": "Underline", - "_key": "randomKey270" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey28", - "children": [ - { - "_type": "span", - "_key": "randomKey280", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey29", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem", - "_key": "randomKey290" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey30", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey300" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey31", - "children": [ - { - "_type": "span", - "_key": "randomKey310", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey32", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey320" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey33", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey330" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey34", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey340" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey35", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey350" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey36", - "children": [ - { - "_type": "span", - "_key": "randomKey360", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey37", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey370" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey38", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey380" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey39", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey390" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey40", - "children": [ - { - "_type": "span", - "_key": "randomKey400", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey41", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey410" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey42", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey420" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey43", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey430" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey44", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey440" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey45", - "children": [ - { - "_type": "span", - "_key": "randomKey450", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey46", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey460" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey47", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey470" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey48", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem", - "_key": "randomKey480" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey49", - "children": [ - { - "_type": "span", - "marks": ["strong", "em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey490" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey50", - "children": [ - { - "_type": "span", - "_key": "randomKey500", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey51", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem Lorem:", - "_key": "randomKey510" - }, - { - "_type": "span", - "marks": [], - "text": " 1234", - "_key": "randomKey511" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey52", - "children": [ - { - "_type": "span", - "_key": "randomKey520", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey53", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey530" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey54", - "children": [ - { - "_type": "span", - "_key": "randomKey540", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey55", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey550" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey56", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey560" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey57", - "children": [ - { - "_type": "span", - "_key": "randomKey570", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey58", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey580" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey59", - "children": [ - { - "_type": "span", - "_key": "randomKey590", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey60", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey600" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey61", - "children": [ - { - "_type": "span", - "_key": "randomKey610", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey62", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey620" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey63", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey630" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey64", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey640" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey65", - "children": [ - { - "_type": "span", - "_key": "randomKey650", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey66", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey660" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey67", - "children": [ - { - "_type": "span", - "_key": "randomKey670", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey68", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey680" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey69", - "children": [ - { - "_type": "span", - "_key": "randomKey690", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey70", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey700" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey71", - "children": [ - { - "_type": "span", - "_key": "randomKey710", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey72", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey720" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey73", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey730" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey74", - "children": [ - { - "_type": "span", - "_key": "randomKey740", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey75", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey750" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey76", - "children": [ - { - "_type": "span", - "_key": "randomKey760", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey77", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey770" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey78", - "children": [ - { - "_type": "span", - "_key": "randomKey780", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey79", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey790" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey80", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey800" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey81", - "children": [ - { - "_type": "span", - "_key": "randomKey810", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey82", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey820" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey83", - "children": [ - { - "_type": "span", - "_key": "randomKey830", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey84", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey840" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey85", - "children": [ - { - "_type": "span", - "_key": "randomKey850", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey86", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey860" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey87", - "children": [ - { - "_type": "span", - "_key": "randomKey870", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey88", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ", - "_key": "randomKey880" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Lorem Lorem", - "_key": "randomKey881" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey882" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://sanity.io" - } - ], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/input.html deleted file mode 100644 index 2ab4d3abd2d..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/input.html +++ /dev/null @@ -1 +0,0 @@ -

Heading in bold

  • unchecked

    Level 1

    • unchecked

      Level 2

    • unchecked

      Level 2

    • checked

      Level 2

    • unchecked

      Level 2

  • unchecked

    Level 1

    • unchecked

      Level 2

    • checked

      Level 2

      • unchecked

        Level 3

      • unchecked

        Level 3

      • unchecked

        Level 3

  • unchecked

    Level 1

    • unchecked

      Level 2

  • unchecked

    Level 1

    • unchecked

      Level 2


Simple bullet list

  • Bullet list

  • Bullet list

  • Bullet list

    • Nested list

    • Nested

    • Nested

      • Nested 3rd level

  • Bullet list

\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/output.json deleted file mode 100644 index 1bac3ab4139..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsLists/output.json +++ /dev/null @@ -1,412 +0,0 @@ -[ - { - "_key": "randomKey0", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Heading in bold", - "_key": "randomKey00" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 1", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 2", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 2", - "_key": "randomKey30" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": ["strike-through"], - "text": "Level 2", - "_key": "randomKey40" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey5", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 2", - "_key": "randomKey50" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey6", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 1", - "_key": "randomKey60" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey7", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 2", - "_key": "randomKey70" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey8", - "children": [ - { - "_type": "span", - "marks": ["strike-through"], - "text": "Level 2", - "_key": "randomKey80" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 3", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey10", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 3", - "_key": "randomKey100" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 3", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey12", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 1", - "_key": "randomKey120" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 2", - "_key": "randomKey130" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey14", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 1", - "_key": "randomKey140" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Level 2", - "_key": "randomKey150" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "_key": "randomKey160", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Simple bullet list", - "_key": "randomKey170" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey18", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Bullet list", - "_key": "randomKey180" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Bullet list", - "_key": "randomKey190" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Bullet list", - "_key": "randomKey200" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey21", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Nested list", - "_key": "randomKey210" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey22", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Nested", - "_key": "randomKey220" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey23", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Nested", - "_key": "randomKey230" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey24", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Nested 3rd level", - "_key": "randomKey240" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey25", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Bullet list", - "_key": "randomKey250" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/index.ts deleted file mode 100644 index 860d2c0e0f3..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, { - ...commonOptions, - unstable_whitespaceOnPasteMode: 'normalize', - }) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/input.html deleted file mode 100644 index 0f064375abf..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/input.html +++ /dev/null @@ -1,2 +0,0 @@ - -

Normal strikethrough

Normal link

Link with strikethrough

\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/output.json deleted file mode 100644 index 503eb3f3eca..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsStrikethroughLink/output.json +++ /dev/null @@ -1,56 +0,0 @@ -[ - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": ["strike-through"], - "text": "Normal strikethrough", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Normal link", - "_key": "randomKey30" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "http://sanity.io" - } - ], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": ["randomKey1", "strike-through"], - "text": "Link with strikethrough", - "_key": "randomKey40" - } - ], - "markDefs": [ - { - "_key": "randomKey1", - "_type": "link", - "href": "http://sanity.io" - } - ], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/input.html deleted file mode 100644 index 2462fe4aae2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/input.html +++ /dev/null @@ -1 +0,0 @@ -

Lorem:

  • unchecked

    Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem

    • unchecked

      Lorem Lorem Lorem

  • unchecked

    Lorem

    • unchecked

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem Lorem Lorem Lorem











Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem:

Lorem Lorem: 12345

Lorem Lorem: Lorem Lorem Lorem Lorem


Lets also test

Bold

Italic

Underline


Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem

  • Lorem

  • Lorem Lorem

  • Lorem Lorem


Lorem

  • Lorem

  • Lorem


Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem: 1234


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem




Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/output.json deleted file mode 100644 index b079e782a49..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceNormalize/output.json +++ /dev/null @@ -1,1480 +0,0 @@ -[ - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem:", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey30" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem", - "_key": "randomKey40" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey5", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey50" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey6", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey60" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey7", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey70" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey8", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey80" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey10", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey100" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey12", - "children": [ - { - "_type": "span", - "_key": "randomKey120", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "_key": "randomKey130", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey14", - "children": [ - { - "_type": "span", - "_key": "randomKey140", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "_key": "randomKey150", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "_key": "randomKey160", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "_key": "randomKey170", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey18", - "children": [ - { - "_type": "span", - "_key": "randomKey180", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "_key": "randomKey190", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "_key": "randomKey200", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey21", - "children": [ - { - "_type": "span", - "_key": "randomKey210", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey22", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey220" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey23", - "children": [ - { - "_type": "span", - "_key": "randomKey230", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey24", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey240" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey25", - "children": [ - { - "_type": "span", - "_key": "randomKey250", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey26", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey260" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey27", - "children": [ - { - "_type": "span", - "_key": "randomKey270", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey28", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem:", - "_key": "randomKey280" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey281" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey29", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey290" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey30", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem: ", - "_key": "randomKey300" - }, - { - "_type": "span", - "marks": [], - "text": "12345", - "_key": "randomKey301" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey31", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey310" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem", - "_key": "randomKey311" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey32", - "children": [ - { - "_type": "span", - "_key": "randomKey320", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey33", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lets also test", - "_key": "randomKey330" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey34", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Bold", - "_key": "randomKey340" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey35", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Italic", - "_key": "randomKey350" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey36", - "children": [ - { - "_type": "span", - "marks": ["underline"], - "text": "Underline", - "_key": "randomKey360" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey37", - "children": [ - { - "_type": "span", - "_key": "randomKey370", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey38", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem", - "_key": "randomKey380" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey39", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey390" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey40", - "children": [ - { - "_type": "span", - "_key": "randomKey400", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey41", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey410" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey42", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey420" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey43", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey430" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey44", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey440" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey45", - "children": [ - { - "_type": "span", - "_key": "randomKey450", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey46", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey460" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey47", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey470" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey48", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey480" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey49", - "children": [ - { - "_type": "span", - "_key": "randomKey490", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey50", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey500" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey51", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey510" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey52", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey520" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey53", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey530" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey54", - "children": [ - { - "_type": "span", - "_key": "randomKey540", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey55", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey550" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey56", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey560" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey57", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem", - "_key": "randomKey570" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey58", - "children": [ - { - "_type": "span", - "marks": ["strong", "em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey580" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey59", - "children": [ - { - "_type": "span", - "_key": "randomKey590", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey60", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem Lorem:", - "_key": "randomKey600" - }, - { - "_type": "span", - "marks": [], - "text": " 1234", - "_key": "randomKey601" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey61", - "children": [ - { - "_type": "span", - "_key": "randomKey610", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey62", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey620" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey63", - "children": [ - { - "_type": "span", - "_key": "randomKey630", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey64", - "children": [ - { - "_type": "span", - "_key": "randomKey640", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey65", - "children": [ - { - "_type": "span", - "_key": "randomKey650", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey66", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey660" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey67", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey670" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey68", - "children": [ - { - "_type": "span", - "_key": "randomKey680", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey69", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey690" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey70", - "children": [ - { - "_type": "span", - "_key": "randomKey700", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey71", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey710" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey72", - "children": [ - { - "_type": "span", - "_key": "randomKey720", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey73", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey730" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey74", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey740" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey75", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey750" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey76", - "children": [ - { - "_type": "span", - "_key": "randomKey760", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey77", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey770" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey78", - "children": [ - { - "_type": "span", - "_key": "randomKey780", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey79", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey790" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey80", - "children": [ - { - "_type": "span", - "_key": "randomKey800", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey81", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey810" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey82", - "children": [ - { - "_type": "span", - "_key": "randomKey820", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey83", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey830" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey84", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey840" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey85", - "children": [ - { - "_type": "span", - "_key": "randomKey850", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey86", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey860" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey87", - "children": [ - { - "_type": "span", - "_key": "randomKey870", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey88", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey880" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey89", - "children": [ - { - "_type": "span", - "_key": "randomKey890", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey90", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey900" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey91", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey910" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey92", - "children": [ - { - "_type": "span", - "_key": "randomKey920", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey93", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey930" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey94", - "children": [ - { - "_type": "span", - "_key": "randomKey940", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey95", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey950" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey96", - "children": [ - { - "_type": "span", - "_key": "randomKey960", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey97", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey970" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey98", - "children": [ - { - "_type": "span", - "_key": "randomKey980", - "text": "", - "marks": [] - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey99", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ", - "_key": "randomKey990" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Lorem Lorem", - "_key": "randomKey991" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey992" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://sanity.io" - } - ], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey100", - "children": [ - { - "_type": "span", - "marks": [], - "text": "\n", - "_key": "randomKey1000" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/index.ts deleted file mode 100644 index dd295e97db1..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, { - ...commonOptions, - unstable_whitespaceOnPasteMode: 'remove', - }) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/input.html deleted file mode 100644 index 2462fe4aae2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/input.html +++ /dev/null @@ -1 +0,0 @@ -

Lorem:

  • unchecked

    Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem

    • unchecked

      Lorem Lorem Lorem

  • unchecked

    Lorem

    • unchecked

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • unchecked

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • unchecked

      Lorem Lorem Lorem Lorem











Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem:

Lorem Lorem: 12345

Lorem Lorem: Lorem Lorem Lorem Lorem


Lets also test

Bold

Italic

Underline


Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem

  • Lorem

  • Lorem Lorem

  • Lorem Lorem


Lorem

  • Lorem

  • Lorem


Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem: 1234


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem




Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/output.json deleted file mode 100644 index 6d01983823e..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemove/output.json +++ /dev/null @@ -1,948 +0,0 @@ -[ - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem:", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey30" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem", - "_key": "randomKey40" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey5", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey50" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey6", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey60" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey7", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey70" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey8", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey80" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey10", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey100" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey12", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey120" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey130" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey14", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey140" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem:", - "_key": "randomKey150" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey151" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey160" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem: ", - "_key": "randomKey170" - }, - { - "_type": "span", - "marks": [], - "text": "12345", - "_key": "randomKey171" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey18", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey180" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem", - "_key": "randomKey181" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lets also test", - "_key": "randomKey190" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Bold", - "_key": "randomKey200" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey21", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Italic", - "_key": "randomKey210" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey22", - "children": [ - { - "_type": "span", - "marks": ["underline"], - "text": "Underline", - "_key": "randomKey220" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey23", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem", - "_key": "randomKey230" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey24", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey240" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey25", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey250" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey26", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey260" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey27", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey270" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey28", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey280" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey29", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey290" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey30", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey300" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey31", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey310" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey32", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey320" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey33", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey330" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey34", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey340" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey35", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey350" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey36", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey360" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey37", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey370" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey38", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem", - "_key": "randomKey380" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey39", - "children": [ - { - "_type": "span", - "marks": ["strong", "em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey390" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey40", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem Lorem:", - "_key": "randomKey400" - }, - { - "_type": "span", - "marks": [], - "text": " 1234", - "_key": "randomKey401" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey41", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey410" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey42", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey420" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey43", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey430" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey44", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey440" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey45", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey450" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey46", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey460" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey47", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey470" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey48", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey480" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey49", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey490" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey50", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey500" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey51", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey510" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey52", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey520" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey53", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey530" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey54", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey540" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey55", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey550" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey56", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey560" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey57", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey570" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey58", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey580" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey59", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey590" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey60", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey600" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey61", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ", - "_key": "randomKey610" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Lorem Lorem", - "_key": "randomKey611" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey612" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://sanity.io" - } - ], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey62", - "children": [ - { - "_type": "span", - "marks": [], - "text": "\n", - "_key": "randomKey620" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/index.ts deleted file mode 100644 index dd295e97db1..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, { - ...commonOptions, - unstable_whitespaceOnPasteMode: 'remove', - }) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/input.html deleted file mode 100644 index 437085a52dc..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/input.html +++ /dev/null @@ -1 +0,0 @@ -

Lorem:

  • ikke avmerket

    Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • ikke avmerket

      Lorem

    • ikke avmerket

      Lorem Lorem Lorem

  • ikke avmerket

    Lorem

    • ikke avmerket

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • ikke avmerket

        Lorem Lorem Lorem Lorem Lorem Lorem

      • ikke avmerket

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

      • ikke avmerket

        Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • ikke avmerket

      Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

    • ikke avmerket

      Lorem Lorem Lorem Lorem











Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem:

Lorem Lorem: 12345

Lorem Lorem: Lorem Lorem Lorem Lorem


Lets also test

Bold

Italic

Underline


Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem

  • Lorem

  • Lorem Lorem

  • Lorem Lorem


Lorem

  • Lorem

  • Lorem


Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

  • Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem: 1234


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem




Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem


Lorem Lorem


Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem

\ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/output.json deleted file mode 100644 index 9981f8f0f36..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/gdocsWhitespaceRemoveFirefox/output.json +++ /dev/null @@ -1,934 +0,0 @@ -[ - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem:", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey2", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey20" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey3", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey30" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey4", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem", - "_key": "randomKey40" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey5", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey50" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey6", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey60" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey7", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey70" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey8", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey80" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey9", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey90" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 3 - }, - { - "_key": "randomKey10", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey100" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey11", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey110" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 2 - }, - { - "_key": "randomKey12", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey120" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey13", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey130" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey14", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey140" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey15", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem:", - "_key": "randomKey150" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey151" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey16", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey160" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey17", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem: ", - "_key": "randomKey170" - }, - { - "_type": "span", - "marks": [], - "text": "12345", - "_key": "randomKey171" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey18", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem:", - "_key": "randomKey180" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem", - "_key": "randomKey181" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey19", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lets also test", - "_key": "randomKey190" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey20", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Bold", - "_key": "randomKey200" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey21", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Italic", - "_key": "randomKey210" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey22", - "children": [ - { - "_type": "span", - "marks": ["underline"], - "text": "Underline", - "_key": "randomKey220" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey23", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem", - "_key": "randomKey230" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey24", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey240" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey25", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey250" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey26", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey260" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey27", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey270" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey28", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey280" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey29", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem", - "_key": "randomKey290" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey30", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey300" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey31", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem", - "_key": "randomKey310" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey32", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey320" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey33", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey330" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey34", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey340" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey35", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey350" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal", - "listItem": "bullet", - "level": 1 - }, - { - "_key": "randomKey36", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem", - "_key": "randomKey360" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey37", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey370" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey38", - "children": [ - { - "_type": "span", - "marks": ["em"], - "text": "Lorem Lorem", - "_key": "randomKey380" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey39", - "children": [ - { - "_type": "span", - "marks": ["strong", "em"], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey390" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey40", - "children": [ - { - "_type": "span", - "marks": ["strong"], - "text": "Lorem Lorem Lorem Lorem:", - "_key": "randomKey400" - }, - { - "_type": "span", - "marks": [], - "text": " 1234", - "_key": "randomKey401" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey41", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey410" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey42", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey420" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey43", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey430" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey44", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey440" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey45", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey450" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey46", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey460" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey47", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey470" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey48", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey480" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey49", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey490" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey50", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey500" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey51", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey510" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey52", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey520" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey53", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey530" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey54", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey540" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey55", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey550" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey56", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey560" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey57", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem", - "_key": "randomKey570" - } - ], - "markDefs": [], - "_type": "block", - "style": "h2" - }, - { - "_key": "randomKey58", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey580" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey59", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey590" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey60", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem", - "_key": "randomKey600" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey61", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ", - "_key": "randomKey610" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "Lorem Lorem", - "_key": "randomKey611" - }, - { - "_type": "span", - "marks": [], - "text": " Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem", - "_key": "randomKey612" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://sanity.io" - } - ], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/input.html deleted file mode 100644 index fe6de003d27..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/input.html +++ /dev/null @@ -1,231 +0,0 @@ - -
-
-
- - - - - - -
- - - -
- - -
- The preview API seems broken - - bug/major - -
- - #783 opened - 3 hours ago - by - kmelve - - - -
-
- -
-
-
-
-
-
- - -
-
-
- -
-
- - - - - - -
- - - -
- - -
- Elasticsearch broke - - ops - -
- - #782 opened - 5 hours ago - by - nicholasklem - - - -
-
- -
-
-
-
- - @nicholasklem - -
-
-
- -
-
-
-
- \ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/output.json deleted file mode 100644 index 861eeb04184..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/githubIssue/output.json +++ /dev/null @@ -1,130 +0,0 @@ -[ - { - "_key": "randomKey8", - "_type": "block", - "children": [ - { - "_key": "randomKey80", - "_type": "span", - "marks": ["randomKey0"], - "text": "The preview API seems broken" - }, - { - "_key": "randomKey81", - "_type": "span", - "marks": [], - "text": " " - }, - { - "_key": "randomKey82", - "_type": "span", - "marks": ["randomKey1"], - "text": "bug/major" - }, - { - "_key": "randomKey83", - "_type": "span", - "marks": [], - "text": " #783 opened 3 hours ago by " - }, - { - "_key": "randomKey84", - "_type": "span", - "marks": ["randomKey2"], - "text": "kmelve" - }, - { - "_key": "randomKey85", - "_type": "span", - "marks": [], - "text": " " - }, - { - "_key": "randomKey86", - "_type": "span", - "marks": ["randomKey3"], - "text": "2" - }, - { - "_key": "randomKey87", - "_type": "span", - "marks": [], - "text": " " - }, - { - "_key": "randomKey88", - "_type": "span", - "marks": ["randomKey4"], - "text": "Elasticsearch broke" - }, - { - "_key": "randomKey89", - "_type": "span", - "marks": [], - "text": " " - }, - { - "_key": "randomKey810", - "_type": "span", - "marks": ["randomKey5"], - "text": "ops" - }, - { - "_key": "randomKey811", - "_type": "span", - "marks": [], - "text": " #782 opened 5 hours ago by " - }, - { - "_key": "randomKey812", - "_type": "span", - "marks": ["randomKey6"], - "text": "nicholasklem" - }, - { - "_key": "randomKey813", - "_type": "span", - "marks": [], - "text": " " - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues/783" - }, - { - "_key": "randomKey1", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues?q=is%3Aissue+is%3Aopen+label%3Abug%2Fmajor" - }, - { - "_key": "randomKey2", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues?q=is%3Aissue+is%3Aopen+author%3Akmelve" - }, - { - "_key": "randomKey3", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues/783" - }, - { - "_key": "randomKey4", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues/782" - }, - { - "_key": "randomKey5", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues?q=is%3Aissue+is%3Aopen+label%3Aops" - }, - { - "_key": "randomKey6", - "_type": "link", - "href": "/sanity-io/sanity-priv/issues?q=is%3Aissue+is%3Aopen+author%3Anicholasklem" - } - ], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/index.test.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/index.test.ts deleted file mode 100644 index 65d9d6dab7d..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/index.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import assert from 'node:assert' -import fs from 'node:fs' -import path from 'node:path' - -import {JSDOM} from 'jsdom' -import {describe, it} from 'vitest' - -import * as blockTools from '../../../src' -import {type BlockTestFn} from './types' - -describe('HtmlDeserializer', () => { - const tests = fs.readdirSync(__dirname) - tests.forEach((test) => { - if (test[0] === '.' || path.extname(test).length > 0) { - return - } - it(test, async () => { - const dir = path.resolve(__dirname, test) - const input = fs.readFileSync(path.resolve(dir, 'input.html')).toString() - const expected = JSON.parse(fs.readFileSync(path.resolve(dir, 'output.json'), 'utf-8')) - // eslint-disable-next-line import/no-dynamic-require - const fn = (await import(path.resolve(dir))).default as BlockTestFn - const commonOptions = { - parseHtml: (html: string) => new JSDOM(html).window.document, - } - const output = fn(input, blockTools, commonOptions) - // fs.writeFileSync(path.resolve(dir, 'expected.json'), JSON.stringify(output, null, 2)) - // console.log(JSON.stringify(output, null, 2)) - assert.deepStrictEqual(output, expected) - }) - }) -}) diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/input.html deleted file mode 100644 index 7b2fa783bdb..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/input.html +++ /dev/null @@ -1,31 +0,0 @@ - - -
    -
  • - 1 a -
      -
    • - 2 a -
        -
      • 3 a
      • -
      • 3 b
      • -
      -
    • -
    • - 2 b -
    • -
    -
  • -
  • - 1 b -
  • -
  • - Link -
  • -
  • -

    p in li.

    -

    block children are still processed.

    -
  • -
- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/output.json deleted file mode 100644 index 40efd8c167c..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/lists/output.json +++ /dev/null @@ -1,148 +0,0 @@ -[ - { - "_key": "randomKey1", - "_type": "block", - "children": [ - { - "_key": "randomKey10", - "_type": "span", - "marks": [], - "text": "1 a" - } - ], - "level": 1, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey2", - "_type": "block", - "children": [ - { - "_key": "randomKey20", - "_type": "span", - "marks": [], - "text": "2 a" - } - ], - "level": 2, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey3", - "_type": "block", - "children": [ - { - "_key": "randomKey30", - "_type": "span", - "marks": [], - "text": "3 a" - } - ], - "level": 3, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey4", - "_type": "block", - "children": [ - { - "_key": "randomKey40", - "_type": "span", - "marks": [], - "text": "3 b" - } - ], - "level": 3, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey5", - "_type": "block", - "children": [ - { - "_key": "randomKey50", - "_type": "span", - "marks": [], - "text": "2 b" - } - ], - "level": 2, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey6", - "_type": "block", - "children": [ - { - "_key": "randomKey60", - "_type": "span", - "marks": [], - "text": "1 " - }, - { - "_key": "randomKey61", - "_type": "span", - "marks": ["strong"], - "text": "b" - } - ], - "level": 1, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey7", - "_type": "block", - "children": [ - { - "_key": "randomKey70", - "_type": "span", - "marks": ["randomKey0"], - "text": "Link" - } - ], - "level": 1, - "listItem": "bullet", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "/" - } - ], - "style": "normal" - }, - { - "_key": "randomKey8", - "_type": "block", - "children": [ - { - "_key": "randomKey80", - "_type": "span", - "marks": [], - "text": "p in li. block children are still " - }, - { - "_key": "randomKey81", - "_type": "span", - "marks": ["strong"], - "text": "processed." - } - ], - "level": 1, - "listItem": "bullet", - "markDefs": [], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/input.html deleted file mode 100644 index ae2084aee8f..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/input.html +++ /dev/null @@ -1,21 +0,0 @@ - - - -

Header

-
- I'm a quote. -
- And I'm a quote within a quote. -
- And I'm a quote within a quote within a quote. -
- And I'm a quote within a quote within a quote within a quote. -

I am a stupid paragraph within with a stupid link

-
-
-
-
-

Footer

- - - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/output.json deleted file mode 100644 index 9ed01f56fd8..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/nestedContainers/output.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Header", - "_key": "randomKey10" - } - ], - "_key": "randomKey1" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "I'm a quote.", - "_key": "randomKey20" - } - ], - "_key": "randomKey2" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "And I'm a quote within a quote.", - "_key": "randomKey30" - } - ], - "_key": "randomKey3" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [], - "children": [ - { - "_type": "span", - "marks": [], - "text": "And I'm a quote within a quote within a quote.", - "_key": "randomKey40" - } - ], - "_key": "randomKey4" - }, - { - "_type": "block", - "style": "blockquote", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "foo" - } - ], - "children": [ - { - "_type": "span", - "marks": [], - "text": "And I'm a quote within a quote within a quote within a quote.\n\nI am a stupid paragraph within with a stupid ", - "_key": "randomKey50" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "link", - "_key": "randomKey51" - } - ], - "_key": "randomKey5" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "Footer", - "_key": "randomKey60" - } - ], - "_key": "randomKey6" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/input.html deleted file mode 100644 index 4f2e4938ab8..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/input.html +++ /dev/null @@ -1,4 +0,0 @@ -

- This is markdown with code, strong, and emphasis. And - a link too! -

diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/output.json deleted file mode 100644 index beb3ca56c7f..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/simple/output.json +++ /dev/null @@ -1,70 +0,0 @@ -[ - { - "_key": "randomKey1", - "_type": "block", - "children": [ - { - "_key": "randomKey10", - "_type": "span", - "marks": [], - "text": "This is markdown with " - }, - { - "_key": "randomKey11", - "_type": "span", - "marks": ["code"], - "text": "code" - }, - { - "_key": "randomKey12", - "_type": "span", - "marks": [], - "text": ", " - }, - { - "_key": "randomKey13", - "_type": "span", - "marks": ["strong"], - "text": "strong" - }, - { - "_key": "randomKey14", - "_type": "span", - "marks": [], - "text": ", and " - }, - { - "_key": "randomKey15", - "_type": "span", - "marks": ["em"], - "text": "emphasis" - }, - { - "_key": "randomKey16", - "_type": "span", - "marks": [], - "text": ". And " - }, - { - "_key": "randomKey17", - "_type": "span", - "marks": ["randomKey0"], - "text": "a link" - }, - { - "_key": "randomKey18", - "_type": "span", - "marks": [], - "text": " too!" - } - ], - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "https://www.sanity.io" - } - ], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html deleted file mode 100644 index 42ef9a7477e..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html +++ /dev/null @@ -1 +0,0 @@ -This is a test of the Sanity Portable Text renderer. We will use a variety of content to test its capabilities. Here are some unicode characters: ☺️👍🏽🌍🌞🌚🌝🌛🌜🌙💫⭐️🌟✨⚡️☄️💥🔥🌪🌈☀️🌤⛅️🌥☁️🌦🌧⛈🌩🌨❄️☃️⛄️🌬💨💧💦☔️☂️🌊🌫. Now let's try some markdown formatting: ​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‍‌​‍‌​‌​‌‍‌‍​‌​‌‍‌‌​​‍​​​‌‍‌‌​‌​​​​​​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‍‌​‍‌​‌​‌‍‌‍​‌​‌‍‌‌​​‍​​​‌‍‌‌​‌​​​​​​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌bold text​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‌‌‌‍‌​‌‍​‌‌‍‌​‌‍‌‌‌‍‌‌‌‍‌​​‌‍‌‍​​‌‍​‌​​​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‌‌‌‍‌​‌‍​‌‌‍‌​‌‍‌‌‌‍‌‌‌‍‌​​‌‍‌‍​​‌‍​‌​​​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌, ​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍‌‍​​​‌​​​​​​‌​‌‌​‍​​​‍​​‍‌‍​‍‌‍‌‍‌‍‌‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍‌‍​​​‌​​​​​​‌​‌‌​‍​​​‍​​‍‌‍​‍‌‍‌‍‌‍‌‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌italic text​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​​​‍‌‍‌‍‌‍‌‍‌‍​‍​‌‌‍​‍‌‍​​‍‌​‌‌​‍​​‌​​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​​​‍‌‍‌‍‌‍‌‍‌‍​‍​‌‌‍​‍‌‍​​‍‌​‌‌​‍​​‌​​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌, ~~strikethrough~~, ​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‍‌‌‍‌‍‌‍​‍​​​‍​​‍​​‍‌‌‍‌‌​​‌​​‌‍‌‍‌‍‌‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‍‌‌‍‌‍‌‍​‍​​​‍​​‍​​‍‌‌‍‌‌​​‌​​‌‍‌‍‌‍‌‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌code​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​​​​​‌‍​‍​​‍​‌‌‌‍‌‌​​​‌‍‌‌​‍​​‌​​​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​​​​​‌‍​‍​​‍​‌‌‌‍‌‌​​​‌‍‌‌​‍​​‌​​​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌, > blockquote, - list item, 1. numbered list item, ​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‌​‌​​​‌​‍​​‌‌‍‌‍​​‍‌‍​​‌‌‌‍​​‌​​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​‌​‌​​​‌​‍​​‌‌‍‌‍​​‍‌‍​​‌‌‌‍​​‌​​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌link​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​​​‌‌‍​‌​‍‌​‍‌​​‌​​‍​‍‌​‌‌​​‍​​‌‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​​​‌‌‍​‌​‍‌​‍‌​​‌​​‍​‍‌​‌‌​​‍​​‌‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌, .​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍​‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍‌‍‌​​​‍‌‍​‌​‍​‌‍‌‍‌‍‌‌​‌‍‌‍​‍​​‌‌‍​‍‌‍‌‌​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌​‍‌‌​​‍‌​‌‍‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‌‍‍‌‌‍‌​​‌​‌​​‌​‌‍‌‍‌‌​​‍‌‍​​‍​‌‍​‌​‍‌‌‍​‌​​‌​‌‍​‍​​‍‌​‌​​‍​​‌‌​​‍​‍‌​‍​​‌‌‍‌‌​​‍​‍‌​​​‌‍​​​‍‌‍​‍​‌​‌‍‌​​‌​​​‍‌‍​​‍‌​‌​‌‍​‍​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌​‌‍‍‌‌‍‌‌​​‌‍​‌‍‌‌‌​​‍‌‍​‌‍‌‍​‌‍‍​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍​‍‌‍‌‍‌​‌‍‌​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍​​‌​‌‍​​‌‌‍‌‌​​‌​‍‌‌‍​‌‍‌‌​​‌‌‍​​‌‍‌‍​‍​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‍​‌‍‍​‌‍‍‌‌‍​‌‍‌​‌​‍‌‍‌‌‌‍‍​‍‌‌​‌‌‌​​‍‌‌‌‍‍‌‍‌‌‌‍‌​‍‌‌​​‌​‌​​‍‌‌​​‌​‌​​‍‌‌​​‍​​‍‌‍‌​​​‍‌‍​‌​‍​‌‍‌‍‌‍‌‌​‌‍‌‍​‍​​‌‌‍​‍‌‍‌‌​‌​‍‌‌​​‍​​‍​‍‌‌​‌‌‌​‌​​‍‍‌‌​‌‍‌‌‌‍​‌‌​​‍‌‍‌‍‍‌‌​‌​‌​‌​‍‌‍​‌‌‍‌‍‌‌​​‌​‍​‍‌‌ \ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json deleted file mode 100644 index f80567c7a3c..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "_key": "randomKey1", - "_type": "block", - "children": [ - { - "_key": "randomKey10", - "_type": "span", - "marks": [], - "text": "This is a test of the Sanity Portable Text renderer. We will use a variety of content to test its capabilities. Here are some unicode characters: ☺️👍🏽🌍🌞🌚🌝🌛🌜🌙💫⭐️🌟✨⚡️☄️💥🔥🌪🌈☀️🌤⛅️🌥☁️🌦🌧⛈🌩🌨❄️☃️⛄️🌬💨💧💦☔️☂️🌊🌫. Now let's try some markdown formatting: " - }, - {"_key": "randomKey11", "_type": "span", "marks": ["strong"], "text": "bold text"}, - {"_key": "randomKey12", "_type": "span", "marks": [], "text": ", "}, - {"_key": "randomKey13", "_type": "span", "marks": ["em"], "text": "italic text"}, - {"_key": "randomKey14", "_type": "span", "marks": [], "text": ", ~~strikethrough~~, "}, - {"_key": "randomKey15", "_type": "span", "marks": ["code"], "text": "code"}, - { - "_key": "randomKey16", - "_type": "span", - "marks": [], - "text": ", > blockquote, - list item, 1. numbered list item, " - }, - {"_key": "randomKey17", "_type": "span", "marks": ["randomKey0"], "text": "link"}, - {"_key": "randomKey18", "_type": "span", "marks": [], "text": ", ."} - ], - "markDefs": [{"_key": "randomKey0", "_type": "link", "href": "https://example.com/"}], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/types.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/types.ts deleted file mode 100644 index bd5e2a7abd7..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/types.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {type getBlockContentFeatures, type htmlToBlocks, type normalizeBlock} from '../../../src' -import {type TypedObject} from '../../../src/types' - -interface BlockContentFunctions { - getBlockContentFeatures: typeof getBlockContentFeatures - normalizeBlock: typeof normalizeBlock - htmlToBlocks: typeof htmlToBlocks -} - -export type BlockTestFn = ( - input: string, - blockTools: BlockContentFunctions, - commonOptions: {parseHtml: (html: string) => Document}, -) => TypedObject[] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/input.html deleted file mode 100644 index a575e385769..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/input.html +++ /dev/null @@ -1,10 +0,0 @@ -Jeg - har strong og bold og italic og emphasis og - greier og greier.  \ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/output.json deleted file mode 100644 index e850c64aa56..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace1/output.json +++ /dev/null @@ -1,64 +0,0 @@ -[ - { - "_key": "randomKey0", - "_type": "block", - "children": [ - { - "_key": "randomKey00", - "_type": "span", - "marks": [], - "text": "Jeg har " - }, - { - "_key": "randomKey01", - "_type": "span", - "marks": ["strong"], - "text": "strong" - }, - { - "_key": "randomKey02", - "_type": "span", - "marks": [], - "text": " og " - }, - { - "_key": "randomKey03", - "_type": "span", - "marks": ["strong"], - "text": "bold" - }, - { - "_key": "randomKey04", - "_type": "span", - "marks": [], - "text": " og " - }, - { - "_key": "randomKey05", - "_type": "span", - "marks": ["em"], - "text": "italic" - }, - { - "_key": "randomKey06", - "_type": "span", - "marks": [], - "text": " og " - }, - { - "_key": "randomKey07", - "_type": "span", - "marks": ["em"], - "text": "emphasis" - }, - { - "_key": "randomKey08", - "_type": "span", - "marks": [], - "text": " og greier og greier." - } - ], - "markDefs": [], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/input.html deleted file mode 100644 index f458a3d4d15..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/input.html +++ /dev/null @@ -1,13 +0,0 @@ - - -

I should not have any whitepace in the start, and none in the end

-

I should not have any whitepace in the start, and none in the end

-

I should not have any whitepace in the start, and none in the end I have one in the beginning but none in the end

-

I should not have any whitepace in the start, and one in the end I have none in the beginning and none in the end But I have one in the beginning

-

- I should have a space here: But none here.
-

-

I should have a space between these two links.

-

I should have a space between these two words.

- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/output.json deleted file mode 100644 index 1738bc2560e..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace2/output.json +++ /dev/null @@ -1,201 +0,0 @@ -[ - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should not have any whitepace in the start, and none in the end", - "_key": "randomKey40" - } - ], - "_key": "randomKey4" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should not have any whitepace in the start, and none in the end", - "_key": "randomKey50" - } - ], - "_key": "randomKey5" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should not have any whitepace in the start, and none in the end", - "_key": "randomKey60" - }, - { - "_type": "span", - "marks": ["em"], - "text": " I have one in the beginning but none in the end", - "_key": "randomKey61" - } - ], - "_key": "randomKey6" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey0", - "_type": "link", - "href": "#foo" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should not have any whitepace in the start, and one in the end ", - "_key": "randomKey70" - }, - { - "_type": "span", - "marks": ["randomKey0"], - "text": "I have none in the beginning and none in the end", - "_key": "randomKey71" - }, - { - "_type": "span", - "marks": [], - "text": " But I have one in the beginning", - "_key": "randomKey72" - } - ], - "_key": "randomKey7" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey1", - "_type": "link", - "href": "#lala" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should have a space here: ", - "_key": "randomKey80" - }, - { - "_type": "span", - "marks": ["randomKey1"], - "text": "But none here", - "_key": "randomKey81" - }, - { - "_type": "span", - "marks": [], - "text": ".\n", - "_key": "randomKey82" - } - ], - "_key": "randomKey8" - }, - { - "_type": "block", - "markDefs": [ - { - "_key": "randomKey2", - "_type": "link", - "href": "#lala" - }, - { - "_key": "randomKey3", - "_type": "link", - "href": "#lala" - } - ], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should have a space between ", - "_key": "randomKey90" - }, - { - "_type": "span", - "marks": ["randomKey2"], - "text": "these", - "_key": "randomKey91" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey92" - }, - { - "_type": "span", - "marks": ["randomKey3"], - "text": "two", - "_key": "randomKey93" - }, - { - "_type": "span", - "marks": [], - "text": " links.", - "_key": "randomKey94" - } - ], - "_key": "randomKey9" - }, - { - "_type": "block", - "markDefs": [], - "style": "normal", - "children": [ - { - "_type": "span", - "marks": [], - "text": "I should have a space between ", - "_key": "randomKey100" - }, - { - "_type": "span", - "marks": ["em"], - "text": "these", - "_key": "randomKey101" - }, - { - "_type": "span", - "marks": [], - "text": " ", - "_key": "randomKey102" - }, - { - "_type": "span", - "marks": ["em"], - "text": "two", - "_key": "randomKey103" - }, - { - "_type": "span", - "marks": [], - "text": " words.", - "_key": "randomKey104" - } - ], - "_key": "randomKey10" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/input.html deleted file mode 100644 index d1e640e25e5..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/input.html +++ /dev/null @@ -1,10 +0,0 @@ - - -

- This - is - a - test -

- - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/output.json deleted file mode 100644 index 50747998c9c..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespace3/output.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "_key": "randomKey0", - "_type": "block", - "children": [ - { - "_key": "randomKey00", - "_type": "span", - "marks": [], - "text": "This is a test" - } - ], - "markDefs": [], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/input.html deleted file mode 100644 index 106b4e2a2d6..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/input.html +++ /dev/null @@ -1,20 +0,0 @@ - - -
-      # 1. Clone the repository:
-      git clone ...
-      # 2. Navigate to the client directory:
-      cd ...
-      # 3. Create a new Python virtual environment:
-      python3 -m venv ...
-    
- - - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/output.json deleted file mode 100644 index 21af6d907a6..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/whitespaceInPreTags/output.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "_key": "randomKey0", - "children": [ - { - "_type": "span", - "marks": [], - "text": "# 1. Clone the repository:\n git clone ...\n # 2. Navigate to the client directory:\n cd ...\n # 3. Create a new Python virtual environment:\n python3 -m venv ...\n", - "_key": "randomKey00" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - }, - { - "_key": "randomKey1", - "children": [ - { - "_type": "span", - "marks": [], - "text": "# 1. Clone the repository: git clone ... # 2. Navigate to the client directory: cd ... # 3. Create a new Python virtual environment: python3 -m venv ...", - "_key": "randomKey10" - } - ], - "markDefs": [], - "_type": "block", - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/index.ts deleted file mode 100644 index 71cd6c8b5f2..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import defaultSchema from '../../../fixtures/defaultSchema' -import {type BlockTestFn} from '../types' - -const blockContentType = defaultSchema - .get('blogPost') - .fields.find((field: any) => field.name === 'body').type - -const testFn: BlockTestFn = (html, blockTools, commonOptions) => { - return blockTools.htmlToBlocks(html, blockContentType, commonOptions) -} - -export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/input.html deleted file mode 100644 index 9f73addb167..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/input.html +++ /dev/null @@ -1,811 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -

Keywords

- -

Natural resource -management, oil, minerals, resource curse, commodity trading, corruption, national -oil companies, state-owned enterprises, extractive revenue misappropriation.

- -

 

- -

About the authors

- -

Olivier Longchamp -is in charge of tax policy and international finance at Public Eye. Nathalie -Perrot is a legal advisor. She previously worked for Public Eye as a project -manager.

- -

 

- -

About Public Eye

- -

Created in 1968 and -now with 25,000 members, Public Eye (formerly the Berne Declaration) is an -independent Swiss NGO that uses a mixture of research, advocacy, and -campaigning to fight for human rights and justice around the world, especially in -poorer countries where Switzerland and its companies are involved. Public Eye -has worked on Switzerland’s commodity trading sector since 2011.

- -

 

- -

Acknowledgements

- -

We would like to -thank the following people for providing information and constructive comments -on earlier drafts of this paper: Alexandra Gillies, Aaron Sayne and Joe -Williams (NRGI); Laure Brillaud (TI); Werner Thut (SDC); Marc Guéniat, Silvie -Lang, Andreas Missbach, Urs Rybi, Lyssandra Sears, and Valentino Viredaz -(Public Eye). Kendra Dupuy and Aled Williams (U4-CMI).

- - - - - diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/output.json deleted file mode 100644 index 27e2d117813..00000000000 --- a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/word/output.json +++ /dev/null @@ -1,156 +0,0 @@ -[ - { - "_key": "randomKey0", - "_type": "block", - "children": [ - { - "_key": "randomKey00", - "_type": "span", - "marks": ["strong"], - "text": "Keywords" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey1", - "_type": "block", - "children": [ - { - "_key": "randomKey10", - "_type": "span", - "marks": [], - "text": "Natural resource management, oil, minerals, resource curse, commodity trading, corruption, national oil companies, state-owned enterprises, extractive revenue misappropriation." - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey2", - "_type": "block", - "children": [ - { - "_key": "randomKey20", - "_type": "span", - "marks": [], - "text": "" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey3", - "_type": "block", - "children": [ - { - "_key": "randomKey30", - "_type": "span", - "marks": ["strong"], - "text": "About the authors" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey4", - "_type": "block", - "children": [ - { - "_key": "randomKey40", - "_type": "span", - "marks": [], - "text": "Olivier Longchamp is in charge of tax policy and international finance at Public Eye. Nathalie Perrot is a legal advisor. She previously worked for Public Eye as a project manager." - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey5", - "_type": "block", - "children": [ - { - "_key": "randomKey50", - "_type": "span", - "marks": [], - "text": "" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey6", - "_type": "block", - "children": [ - { - "_key": "randomKey60", - "_type": "span", - "marks": ["strong"], - "text": "About Public Eye" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey7", - "_type": "block", - "children": [ - { - "_key": "randomKey70", - "_type": "span", - "marks": [], - "text": "Created in 1968 and now with 25,000 members, Public Eye (formerly the Berne Declaration) is an independent Swiss NGO that uses a mixture of research, advocacy, and campaigning to fight for human rights and justice around the world, especially in poorer countries where Switzerland and its companies are involved. Public Eye has worked on Switzerland’s commodity trading sector since 2011." - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey8", - "_type": "block", - "children": [ - { - "_key": "randomKey80", - "_type": "span", - "marks": [], - "text": "" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey9", - "_type": "block", - "children": [ - { - "_key": "randomKey90", - "_type": "span", - "marks": ["strong"], - "text": "Acknowledgements" - } - ], - "markDefs": [], - "style": "normal" - }, - { - "_key": "randomKey10", - "_type": "block", - "children": [ - { - "_key": "randomKey100", - "_type": "span", - "marks": [], - "text": "We would like to thank the following people for providing information and constructive comments on earlier drafts of this paper: Alexandra Gillies, Aaron Sayne and Joe Williams (NRGI); Laure Brillaud (TI); Werner Thut (SDC); Marc Guéniat, Silvie Lang, Andreas Missbach, Urs Rybi, Lyssandra Sears, and Valentino Viredaz (Public Eye). Kendra Dupuy and Aled Williams (U4-CMI)." - } - ], - "markDefs": [], - "style": "normal" - } -] diff --git a/packages/@sanity/block-tools/test/tests/util/__snapshots__/blockContentTypeFeatures.test.ts.snap b/packages/@sanity/block-tools/test/tests/util/__snapshots__/blockContentTypeFeatures.test.ts.snap deleted file mode 100644 index b12612a1ea5..00000000000 --- a/packages/@sanity/block-tools/test/tests/util/__snapshots__/blockContentTypeFeatures.test.ts.snap +++ /dev/null @@ -1,3577 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`blockContentTypeFeatures > will give a sane feature set for the default schema 1`] = ` -{ - "annotations": [ - { - "icon": undefined, - "title": "Link", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - "single": true, - }, - ], - "groups": [], - "i18nTitleKey": "inputs.portable-text.annotation.link", - "jsonType": "object", - "name": "link", - "options": { - "modal": { - "type": "popover", - }, - }, - "orderings": [], - "preview": { - "prepare": [Function], - "select": { - "href": "href", - }, - }, - "title": "Link", - "type": { - "jsonType": "object", - "name": "object", - "title": "Object", - "type": null, - }, - }, - "value": "link", - }, - ], - "decorators": [ - { - "i18nTitleKey": "inputs.portable-text.decorator.strong", - "title": "Strong", - "value": "strong", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.emphasis", - "title": "Italic", - "value": "em", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.code", - "title": "Code", - "value": "code", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.underline", - "title": "Underline", - "value": "underline", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.strike-through", - "title": "Strike", - "value": "strike-through", - }, - ], - "lists": [ - { - "i18nTitleKey": "inputs.portable-text.list-type.bullet", - "title": "Bulleted list", - "value": "bullet", - }, - { - "i18nTitleKey": "inputs.portable-text.list-type.number", - "title": "Numbered list", - "value": "number", - }, - ], - "styles": [ - { - "i18nTitleKey": "inputs.portable-text.style.normal", - "title": "Normal", - "value": "normal", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h1", - "title": "Heading 1", - "value": "h1", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h2", - "title": "Heading 2", - "value": "h2", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h3", - "title": "Heading 3", - "value": "h3", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h4", - "title": "Heading 4", - "value": "h4", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h5", - "title": "Heading 5", - "value": "h5", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h6", - "title": "Heading 6", - "value": "h6", - }, - { - "i18nTitleKey": "inputs.portable-text.style.quote", - "title": "Quote", - "value": "blockquote", - }, - ], - "types": { - "block": { - "jsonType": "array", - "name": "array", - "of": [ - { - "fields": [ - { - "name": "children", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "annotations": [ - { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - "single": true, - }, - ], - "groups": [], - "i18nTitleKey": "inputs.portable-text.annotation.link", - "jsonType": "object", - "name": "link", - "options": { - "modal": { - "type": "popover", - }, - }, - "orderings": [], - "preview": { - "prepare": [Function], - "select": { - "href": "href", - }, - }, - "title": "Link", - "type": { - "jsonType": "object", - "name": "object", - "title": "Object", - "type": null, - }, - }, - ], - "decorators": [ - { - "i18nTitleKey": "inputs.portable-text.decorator.strong", - "title": "Strong", - "value": "strong", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.emphasis", - "title": "Italic", - "value": "em", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.code", - "title": "Code", - "value": "code", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.underline", - "title": "Underline", - "value": "underline", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.strike-through", - "title": "Strike", - "value": "strike-through", - }, - ], - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "String", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - ], - "title": "Marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "text", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Text", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "marks": [], - "name": "span", - "options": {}, - "preview": { - "prepare": [Function], - "select": { - "marks": "marks", - "text": "text", - }, - }, - "title": "Span", - "type": { - "jsonType": "object", - "name": "span", - "title": "Span", - "type": null, - }, - }, - ], - "title": "Content", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "style", - "type": { - "jsonType": "string", - "name": "string", - "options": { - "list": [ - { - "i18nTitleKey": "inputs.portable-text.style.normal", - "title": "Normal", - "value": "normal", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h1", - "title": "Heading 1", - "value": "h1", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h2", - "title": "Heading 2", - "value": "h2", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h3", - "title": "Heading 3", - "value": "h3", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h4", - "title": "Heading 4", - "value": "h4", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h5", - "title": "Heading 5", - "value": "h5", - }, - { - "i18nTitleKey": "inputs.portable-text.style.h6", - "title": "Heading 6", - "value": "h6", - }, - { - "i18nTitleKey": "inputs.portable-text.style.quote", - "title": "Quote", - "value": "blockquote", - }, - ], - }, - "preview": { - "prepare": [Function], - }, - "title": "Style", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "listItem", - "type": { - "jsonType": "string", - "name": "string", - "options": { - "list": [ - { - "i18nTitleKey": "inputs.portable-text.list-type.bullet", - "title": "Bulleted list", - "value": "bullet", - }, - { - "i18nTitleKey": "inputs.portable-text.list-type.number", - "title": "Numbered list", - "value": "number", - }, - ], - }, - "preview": { - "prepare": [Function], - }, - "title": "List type", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "markDefs", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - "single": true, - }, - ], - "groups": [], - "i18nTitleKey": "inputs.portable-text.annotation.link", - "jsonType": "object", - "name": "link", - "options": { - "modal": { - "type": "popover", - }, - }, - "orderings": [], - "preview": { - "prepare": [Function], - "select": { - "href": "href", - }, - }, - "title": "Link", - "type": { - "jsonType": "object", - "name": "object", - "title": "Object", - "type": null, - }, - }, - ], - "title": "Mark definitions", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "level", - "type": { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Indentation", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "name": "block", - "options": {}, - "preview": { - "prepare": [Function], - "select": {}, - }, - "title": "Block", - "type": { - "jsonType": "object", - "name": "block", - "title": "Block", - "type": null, - }, - }, - { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "code", - "type": { - "jsonType": "string", - "name": "text", - "preview": { - "prepare": [Function], - }, - "title": "Code", - "type": { - "jsonType": "string", - "name": "text", - "title": "Text", - "type": null, - }, - }, - }, - { - "fieldset": undefined, - "group": undefined, - "name": "language", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Language", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "fieldset": undefined, - "group": undefined, - "name": "highlightedLines", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Highlighted line", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - ], - "title": "Highlighted lines", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "code", - "type": { - "jsonType": "string", - "name": "text", - "preview": { - "prepare": [Function], - }, - "title": "Code", - "type": { - "jsonType": "string", - "name": "text", - "title": "Text", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "language", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Language", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "highlightedLines", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Highlighted line", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - ], - "title": "Highlighted lines", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "code", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "language", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.language", - "ns": "studio", - }, - }, - "name": "language", - "title": "Language", - }, - ], - "preview": { - "select": { - "title": "language", - }, - }, - "title": "Code", - "type": { - "jsonType": "object", - "name": "object", - "title": "Object", - "type": null, - }, - }, - ], - "title": "Body", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - "blockObjects": [ - { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "code", - "type": { - "jsonType": "string", - "name": "text", - "preview": { - "prepare": [Function], - }, - "title": "Code", - "type": { - "jsonType": "string", - "name": "text", - "title": "Text", - "type": null, - }, - }, - }, - { - "fieldset": undefined, - "group": undefined, - "name": "language", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Language", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "fieldset": undefined, - "group": undefined, - "name": "highlightedLines", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Highlighted line", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - ], - "title": "Highlighted lines", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "code", - "type": { - "jsonType": "string", - "name": "text", - "preview": { - "prepare": [Function], - }, - "title": "Code", - "type": { - "jsonType": "string", - "name": "text", - "title": "Text", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "language", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Language", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "highlightedLines", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Highlighted line", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - ], - "title": "Highlighted lines", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "code", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "language", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.language", - "ns": "studio", - }, - }, - "name": "language", - "title": "Language", - }, - ], - "preview": { - "select": { - "title": "language", - }, - }, - "title": "Code", - "type": { - "jsonType": "object", - "name": "object", - "title": "Object", - "type": null, - }, - }, - ], - "inlineObjects": [], - "span": { - "annotations": [ - { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "href", - "type": { - "description": "A valid web, email, phone, or relative link.", - "jsonType": "string", - "name": "url", - "preview": { - "prepare": [Function], - }, - "title": "Link", - "type": { - "jsonType": "string", - "name": "url", - "title": "Url", - "type": null, - }, - "validation": [Function], - }, - }, - "single": true, - }, - ], - "groups": [], - "i18nTitleKey": "inputs.portable-text.annotation.link", - "jsonType": "object", - "name": "link", - "options": { - "modal": { - "type": "popover", - }, - }, - "orderings": [], - "preview": { - "prepare": [Function], - "select": { - "href": "href", - }, - }, - "title": "Link", - "type": { - "jsonType": "object", - "name": "object", - "title": "Object", - "type": null, - }, - }, - ], - "decorators": [ - { - "i18nTitleKey": "inputs.portable-text.decorator.strong", - "title": "Strong", - "value": "strong", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.emphasis", - "title": "Italic", - "value": "em", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.code", - "title": "Code", - "value": "code", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.underline", - "title": "Underline", - "value": "underline", - }, - { - "i18nTitleKey": "inputs.portable-text.decorator.strike-through", - "title": "Strike", - "value": "strike-through", - }, - ], - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "String", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - ], - "title": "Marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "text", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Text", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "marks": [], - "name": "span", - "options": {}, - "preview": { - "prepare": [Function], - "select": { - "marks": "marks", - "text": "text", - }, - }, - "title": "Span", - "type": { - "jsonType": "object", - "name": "span", - "title": "Span", - "type": null, - }, - }, - }, -} -`; - -exports[`blockContentTypeFeatures > will give spesific features for a custom schema 1`] = ` -{ - "annotations": [ - { - "icon": undefined, - "title": "Author", - "type": { - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "jsonType": "object", - "name": "author", - "title": "Author", - "to": [ - { - "__experimental_search": [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "jsonType": "object", - "name": "document", - "title": "Document", - "type": null, - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - }, - ], - "type": { - "jsonType": "object", - "name": "reference", - "title": "Reference", - "type": null, - }, - }, - "value": "author", - }, - ], - "decorators": [ - { - "title": "Strong", - "value": "strong", - }, - { - "title": "Emphasis", - "value": "em", - }, - { - "title": "Code", - "value": "code", - }, - { - "title": "Strike through", - "value": "strike-through", - }, - { - "title": "Highlight", - "value": "highlight", - }, - { - "title": "Subscript", - "value": "sub", - }, - { - "title": "Superscript", - "value": "sup", - }, - { - "title": "Mark", - "value": "mark", - }, - { - "title": "Inserted", - "value": "ins", - }, - { - "title": "Small", - "value": "small", - }, - ], - "lists": [ - { - "title": "Numbered", - "value": "number", - }, - ], - "styles": [ - { - "title": "Normal", - "value": "normal", - }, - { - "title": "H1", - "value": "h1", - }, - { - "title": "H2", - "value": "h2", - }, - ], - "types": { - "block": { - "jsonType": "array", - "name": "array", - "of": [ - { - "fields": [ - { - "name": "children", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "annotations": [ - { - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "jsonType": "object", - "name": "author", - "title": "Author", - "to": [ - { - "__experimental_search": [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "jsonType": "object", - "name": "document", - "title": "Document", - "type": null, - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - }, - ], - "type": { - "jsonType": "object", - "name": "reference", - "title": "Reference", - "type": null, - }, - }, - ], - "decorators": [ - { - "title": "Strong", - "value": "strong", - }, - { - "title": "Emphasis", - "value": "em", - }, - { - "title": "Code", - "value": "code", - }, - { - "title": "Strike through", - "value": "strike-through", - }, - { - "title": "Highlight", - "value": "highlight", - }, - { - "title": "Subscript", - "value": "sub", - }, - { - "title": "Superscript", - "value": "sup", - }, - { - "title": "Mark", - "value": "mark", - }, - { - "title": "Inserted", - "value": "ins", - }, - { - "title": "Small", - "value": "small", - }, - ], - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "String", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - ], - "title": "Marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "text", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Text", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "marks": [], - "name": "span", - "options": {}, - "preview": { - "prepare": [Function], - "select": { - "marks": "marks", - "text": "text", - }, - }, - "title": "Span", - "type": { - "jsonType": "object", - "name": "span", - "title": "Span", - "type": null, - }, - }, - ], - "title": "Content", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "style", - "type": { - "jsonType": "string", - "name": "string", - "options": { - "list": [ - { - "title": "Normal", - "value": "normal", - }, - { - "title": "H1", - "value": "h1", - }, - { - "title": "H2", - "value": "h2", - }, - ], - }, - "preview": { - "prepare": [Function], - }, - "title": "Style", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "listItem", - "type": { - "jsonType": "string", - "name": "string", - "options": { - "list": [ - { - "title": "Numbered", - "value": "number", - }, - ], - }, - "preview": { - "prepare": [Function], - }, - "title": "List type", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "markDefs", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "jsonType": "object", - "name": "author", - "title": "Author", - "to": [ - { - "__experimental_search": [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "jsonType": "object", - "name": "document", - "title": "Document", - "type": null, - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - ], - "type": { - "jsonType": "object", - "name": "reference", - "title": "Reference", - "type": null, - }, - }, - ], - "title": "Mark definitions", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "level", - "type": { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Indentation", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "name": "customBlock", - "options": {}, - "preview": { - "prepare": [Function], - "select": {}, - }, - "title": "Block", - "type": { - "fields": [ - { - "name": "children", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "annotations": [ - { - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "jsonType": "object", - "name": "author", - "title": "Author", - "to": [ - { - "__experimental_search": [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "jsonType": "object", - "name": "document", - "title": "Document", - "type": null, - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - }, - ], - "type": { - "jsonType": "object", - "name": "reference", - "title": "Reference", - "type": null, - }, - }, - ], - "decorators": [ - { - "title": "Strong", - "value": "strong", - }, - { - "title": "Emphasis", - "value": "em", - }, - { - "title": "Code", - "value": "code", - }, - { - "title": "Strike through", - "value": "strike-through", - }, - { - "title": "Highlight", - "value": "highlight", - }, - { - "title": "Subscript", - "value": "sub", - }, - { - "title": "Superscript", - "value": "sup", - }, - { - "title": "Mark", - "value": "mark", - }, - { - "title": "Inserted", - "value": "ins", - }, - { - "title": "Small", - "value": "small", - }, - ], - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "String", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - ], - "title": "Marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "text", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Text", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "marks": [], - "name": "span", - "options": {}, - "preview": { - "prepare": [Function], - "select": { - "marks": "marks", - "text": "text", - }, - }, - "title": "Span", - "type": { - "jsonType": "object", - "name": "span", - "title": "Span", - "type": null, - }, - }, - ], - "title": "Content", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "style", - "type": { - "jsonType": "string", - "name": "string", - "options": { - "list": [ - { - "title": "Normal", - "value": "normal", - }, - { - "title": "H1", - "value": "h1", - }, - { - "title": "H2", - "value": "h2", - }, - ], - }, - "preview": { - "prepare": [Function], - }, - "title": "Style", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "listItem", - "type": { - "jsonType": "string", - "name": "string", - "options": { - "list": [ - { - "title": "Numbered", - "value": "number", - }, - ], - }, - "preview": { - "prepare": [Function], - }, - "title": "List type", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "markDefs", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "jsonType": "object", - "name": "author", - "title": "Author", - "to": [ - { - "__experimental_search": [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "jsonType": "object", - "name": "document", - "title": "Document", - "type": null, - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - ], - "type": { - "jsonType": "object", - "name": "reference", - "title": "Reference", - "type": null, - }, - }, - ], - "title": "Mark definitions", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "level", - "type": { - "jsonType": "number", - "name": "number", - "preview": { - "prepare": [Function], - }, - "title": "Indentation", - "type": { - "jsonType": "number", - "name": "number", - "title": "Number", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "name": "customBlock", - "options": {}, - "preview": { - "prepare": [Function], - "select": {}, - }, - "title": "Block", - "type": { - "jsonType": "object", - "name": "block", - "title": "Block", - "type": null, - }, - }, - }, - ], - "title": "Body", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - "blockObjects": [], - "inlineObjects": [], - "span": { - "annotations": [ - { - "fields": [ - { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "name": "_ref", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Referenced document ID", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - { - "field": { - "name": "_weak", - "type": { - "jsonType": "boolean", - "name": "boolean", - "preview": { - "prepare": [Function], - }, - "title": "Weak reference", - "type": { - "jsonType": "boolean", - "name": "boolean", - "title": "Boolean", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "jsonType": "object", - "name": "author", - "title": "Author", - "to": [ - { - "__experimental_search": [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "fields": [ - { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "fieldsets": [ - { - "field": { - "fieldset": undefined, - "group": undefined, - "name": "name", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Name", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - "single": true, - }, - ], - "groups": [], - "jsonType": "object", - "name": "author", - "options": {}, - "orderings": [ - { - "by": [ - { - "direction": "asc", - "field": "name", - }, - ], - "i18n": { - "title": { - "key": "default-orderings.name", - "ns": "studio", - }, - }, - "name": "name", - "title": "Name", - }, - ], - "preview": { - "select": { - "title": "name", - }, - }, - "title": "Author", - "type": { - "jsonType": "object", - "name": "document", - "title": "Document", - "type": null, - }, - Symbol(__cachedStringFields_4): [ - { - "path": [ - "_id", - ], - "weight": 1, - }, - { - "path": [ - "_type", - ], - "weight": 1, - }, - { - "path": [ - "name", - ], - "weight": 10, - }, - ], - }, - }, - ], - "type": { - "jsonType": "object", - "name": "reference", - "title": "Reference", - "type": null, - }, - }, - ], - "decorators": [ - { - "title": "Strong", - "value": "strong", - }, - { - "title": "Emphasis", - "value": "em", - }, - { - "title": "Code", - "value": "code", - }, - { - "title": "Strike through", - "value": "strike-through", - }, - { - "title": "Highlight", - "value": "highlight", - }, - { - "title": "Subscript", - "value": "sub", - }, - { - "title": "Superscript", - "value": "sup", - }, - { - "title": "Mark", - "value": "mark", - }, - { - "title": "Inserted", - "value": "ins", - }, - { - "title": "Small", - "value": "small", - }, - ], - "fields": [ - { - "name": "marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [ - { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "String", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - ], - "title": "Marks", - "type": { - "jsonType": "array", - "name": "array", - "of": [], - "type": null, - }, - }, - }, - { - "name": "text", - "type": { - "jsonType": "string", - "name": "string", - "preview": { - "prepare": [Function], - }, - "title": "Text", - "type": { - "jsonType": "string", - "name": "string", - "title": "String", - "type": null, - }, - }, - }, - ], - "jsonType": "object", - "marks": [], - "name": "span", - "options": {}, - "preview": { - "prepare": [Function], - "select": { - "marks": "marks", - "text": "text", - }, - }, - "title": "Span", - "type": { - "jsonType": "object", - "name": "span", - "title": "Span", - "type": null, - }, - }, - }, -} -`; diff --git a/packages/@sanity/block-tools/test/tests/util/blockContentTypeFeatures.test.ts b/packages/@sanity/block-tools/test/tests/util/blockContentTypeFeatures.test.ts deleted file mode 100644 index bad0ef8f691..00000000000 --- a/packages/@sanity/block-tools/test/tests/util/blockContentTypeFeatures.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {type ObjectSchemaType} from '@sanity/types' -import {describe, expect, it} from 'vitest' - -import blockContentTypeFeatures from '../../../src/util/blockContentTypeFeatures' -import customSchema from '../../fixtures/customSchema' -import defaultSchema from '../../fixtures/defaultSchema' - -describe('blockContentTypeFeatures', () => { - it('will give a sane feature set for the default schema', () => { - const blockContentType = (defaultSchema.get('blogPost') as ObjectSchemaType).fields.find( - (field) => field.name === 'body', - )?.type - - if (!blockContentType || blockContentType.jsonType !== 'array') { - throw new Error('Failed to find type') - } - - expect(blockContentTypeFeatures(blockContentType)).toMatchSnapshot() - }) - - it('will give spesific features for a custom schema', () => { - const blockContentType = (customSchema.get('blogPost') as ObjectSchemaType).fields.find( - (field) => field.name === 'body', - )?.type - - if (!blockContentType || blockContentType.jsonType !== 'array') { - throw new Error('Failed to find type') - } - expect(blockContentTypeFeatures(blockContentType)).toMatchSnapshot() - }) -}) diff --git a/packages/@sanity/block-tools/test/tests/util/normalizeBlock.test.ts b/packages/@sanity/block-tools/test/tests/util/normalizeBlock.test.ts deleted file mode 100644 index 954b47e9bc5..00000000000 --- a/packages/@sanity/block-tools/test/tests/util/normalizeBlock.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import assert from 'node:assert' - -import {describe, it} from 'vitest' - -import {normalizeBlock} from '../../../src/util/normalizeBlock' - -describe('normalizeBlock', () => { - it('will normalize a block', () => { - const block = { - _type: 'block', - markDefs: [ - { - _key: '123123', - something: 'bogus', - }, - ], - children: [ - { - _type: 'span', - text: 'Foobar', - marks: ['lala'], - }, - ], - } - assert.deepStrictEqual(normalizeBlock(block), { - _key: 'randomKey0', - _type: 'block', - children: [ - { - _key: 'randomKey00', - _type: 'span', - marks: ['lala'], - text: 'Foobar', - }, - ], - markDefs: [], - }) - assert.deepEqual(normalizeBlock(block, {allowedDecorators: ['strong']}), { - _key: 'randomKey1', - _type: 'block', - children: [ - { - _key: 'randomKey10', - _type: 'span', - marks: [], - text: 'Foobar', - }, - ], - markDefs: [], - }) - }) -}) diff --git a/packages/@sanity/block-tools/tsconfig.json b/packages/@sanity/block-tools/tsconfig.json deleted file mode 100644 index e01ddd8602e..00000000000 --- a/packages/@sanity/block-tools/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "@repo/tsconfig/base.json", - "include": [ - "./src", - "./test", - "./node_modules/@sanity/types/src", - "./node_modules/@sanity/schema/src", - "./node_modules/@sanity/schema/typings", - "./node_modules/@sanity/util/src" - ], - "compilerOptions": { - "rootDir": ".", - "paths": { - "@sanity/schema/*": ["./node_modules/@sanity/schema/src/_exports/*"], - "@sanity/schema": ["./node_modules/@sanity/schema/src/_exports/index.ts"], - "@sanity/types": ["./node_modules/@sanity/types/src"], - "@sanity/util/*": ["./node_modules/@sanity/util/src/_exports/*"], - "@sanity/util": ["./node_modules/@sanity/util/src/_exports/index.ts"] - } - } -} diff --git a/packages/@sanity/block-tools/tsconfig.lib.json b/packages/@sanity/block-tools/tsconfig.lib.json deleted file mode 100644 index 66149ff3da1..00000000000 --- a/packages/@sanity/block-tools/tsconfig.lib.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "@repo/tsconfig/build.json", - "include": ["./src"], - "exclude": [ - "./src/**/__fixtures__", - "./src/**/__mocks__", - "./src/**/__workshop__", - "./src/**/*.test.ts", - "./src/**/*.test.tsx" - ], - "compilerOptions": { - "rootDir": ".", - "outDir": "./lib" - } -} diff --git a/packages/@sanity/block-tools/tsdoc.json b/packages/@sanity/block-tools/tsdoc.json deleted file mode 100644 index 0700c7d44a6..00000000000 --- a/packages/@sanity/block-tools/tsdoc.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", - "tagDefinitions": [ - { - "tagName": "@hidden", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@todo", - "syntaxKind": "block", - "allowMultiple": true - } - ], - "supportForTags": { - "@hidden": true, - "@beta": true, - "@internal": true, - "@public": true, - "@experimental": true, - "@see": true, - "@link": true, - "@example": true, - "@deprecated": true, - "@alpha": true, - "@param": true, - "@returns": true, - "@remarks": true, - "@throws": true, - "@defaultValue": true, - "@todo": true - } -} diff --git a/packages/@sanity/block-tools/vitest.config.mts b/packages/@sanity/block-tools/vitest.config.mts deleted file mode 100644 index 38b35dc7aec..00000000000 --- a/packages/@sanity/block-tools/vitest.config.mts +++ /dev/null @@ -1,8 +0,0 @@ -import {defineConfig} from '@repo/test-config/vitest' - -export default defineConfig({ - test: { - environment: 'node', - setupFiles: ['./test/setup.ts'], - }, -}) diff --git a/packages/@sanity/cli/src/actions/versions/findSanityModuleVersions.ts b/packages/@sanity/cli/src/actions/versions/findSanityModuleVersions.ts index 300ed7557fa..c3c3496e6bd 100644 --- a/packages/@sanity/cli/src/actions/versions/findSanityModuleVersions.ts +++ b/packages/@sanity/cli/src/actions/versions/findSanityModuleVersions.ts @@ -21,7 +21,6 @@ import {getLocalVersion} from '../../util/getLocalVersion' const PACKAGES_TO_EXCLUDE = [ '@sanity/block-content-to-html', '@sanity/block-content-to-react', - '@sanity/block-tools', '@sanity/client', ] diff --git a/packages/@sanity/vision/.depcheckrc.json b/packages/@sanity/vision/.depcheckrc.json index 70d5baa8468..b4d8fd07db9 100644 --- a/packages/@sanity/vision/.depcheckrc.json +++ b/packages/@sanity/vision/.depcheckrc.json @@ -11,7 +11,6 @@ "@sanity/diff", "@sanity/codegen", "@sanity/schema", - "@sanity/block-tools", "vite", "react-compiler-runtime" ] diff --git a/packages/@sanity/vision/package.json b/packages/@sanity/vision/package.json index fb6c0c2b02d..ec66672dd1b 100644 --- a/packages/@sanity/vision/package.json +++ b/packages/@sanity/vision/package.json @@ -74,7 +74,6 @@ }, "devDependencies": { "@repo/package.config": "workspace:*", - "@sanity/block-tools": "workspace:*", "@sanity/cli": "workspace:*", "@sanity/client": "^6.24.3", "@sanity/codegen": "workspace:*", diff --git a/packages/@sanity/vision/tsconfig.json b/packages/@sanity/vision/tsconfig.json index f4b34894ae9..e3c03d2ed3c 100644 --- a/packages/@sanity/vision/tsconfig.json +++ b/packages/@sanity/vision/tsconfig.json @@ -2,7 +2,6 @@ "extends": "@repo/tsconfig/base.json", "include": [ "./src", - "./node_modules/@sanity/block-tools/src", "./node_modules/@sanity/diff/src", "./node_modules/@sanity/cli/src", "./node_modules/@sanity/cli/typings/*.d.ts", @@ -21,7 +20,6 @@ "compilerOptions": { "rootDir": ".", "paths": { - "@sanity/block-tools": ["./node_modules/@sanity/block-tools/src/index.ts"], "@sanity/diff": ["./node_modules/@sanity/diff/src/index.ts"], "@sanity/cli": ["./node_modules/@sanity/cli/src/index.ts"], "@sanity/codegen": ["./node_modules/@sanity/codegen/src/_exports/index.ts"], diff --git a/packages/sanity/.depcheckrc.json b/packages/sanity/.depcheckrc.json index b5163f26ffa..e109865c37e 100644 --- a/packages/sanity/.depcheckrc.json +++ b/packages/sanity/.depcheckrc.json @@ -1,6 +1,5 @@ { "ignores": [ - "@portabletext/block-tools", "@repo/tsconfig", "@sanity/pkg-utils", "globby", diff --git a/packages/sanity/package.json b/packages/sanity/package.json index 490e31bf64c..240b475054d 100644 --- a/packages/sanity/package.json +++ b/packages/sanity/package.json @@ -159,7 +159,6 @@ "@rexxars/react-json-inspector": "^9.0.1", "@sanity/asset-utils": "^2.0.6", "@sanity/bifur-client": "^0.4.1", - "@sanity/block-tools": "3.70.0", "@sanity/cli": "3.70.0", "@sanity/client": "^6.24.3", "@sanity/color": "^3.0.0", diff --git a/packages/sanity/src/core/form/inputs/PortableText/callbacks/insertCallback.ts b/packages/sanity/src/core/form/inputs/PortableText/callbacks/insertCallback.ts index c074264e1ac..dc90b88bc84 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/callbacks/insertCallback.ts +++ b/packages/sanity/src/core/form/inputs/PortableText/callbacks/insertCallback.ts @@ -1,4 +1,4 @@ -import {normalizeBlock} from '@sanity/block-tools' +import {normalizeBlock} from '@portabletext/block-tools' import {type PortableTextBlock} from '@sanity/types' import {insert, PatchEvent} from '../../../patch' diff --git a/packages/sanity/src/core/form/inputs/PortableText/callbacks/setCallback.ts b/packages/sanity/src/core/form/inputs/PortableText/callbacks/setCallback.ts index 68952d4286c..d354ef5b6a4 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/callbacks/setCallback.ts +++ b/packages/sanity/src/core/form/inputs/PortableText/callbacks/setCallback.ts @@ -1,4 +1,4 @@ -import {normalizeBlock} from '@sanity/block-tools' +import {normalizeBlock} from '@portabletext/block-tools' import {type PortableTextBlock} from '@sanity/types' import {PatchEvent, set} from '../../../patch' diff --git a/packages/sanity/tsconfig.json b/packages/sanity/tsconfig.json index f829659852f..5c78bccb880 100644 --- a/packages/sanity/tsconfig.json +++ b/packages/sanity/tsconfig.json @@ -7,7 +7,6 @@ "./src", "./test", "./typings", - "./node_modules/@sanity/block-tools/src", "./node_modules/@sanity/diff/src", "./node_modules/@sanity/cli/src", "./node_modules/@sanity/cli/typings/deepSortObject.d.ts", @@ -23,7 +22,6 @@ "exclude": ["./node_modules/@sanity/codegen/src/typescript/__tests__"], "compilerOptions": { "paths": { - "@sanity/block-tools": ["./node_modules/@sanity/block-tools/src/index.ts"], "@sanity/diff": ["./node_modules/@sanity/diff/src/index.ts"], "@sanity/cli": ["./node_modules/@sanity/cli/src/index.ts"], "@sanity/codegen": ["./node_modules/@sanity/codegen/src/_exports/index.ts"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 971cd3f30c0..59ab9aa6bc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -414,6 +414,9 @@ importers: dev/test-studio: dependencies: + '@portabletext/block-tools': + specifier: ^1.0.2 + version: 1.0.2(@sanity/types@packages+@sanity+types)(@types/react@19.0.6) '@portabletext/editor': specifier: ^1.21.5 version: 1.21.5(@sanity/schema@packages+@sanity+schema)(@sanity/types@packages+@sanity+types)(@types/react@19.0.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rxjs@7.8.1) @@ -423,9 +426,6 @@ importers: '@sanity/assist': specifier: ^3.0.2 version: 3.1.0(@emotion/is-prop-valid@1.3.1)(@sanity/mutator@packages+@sanity+mutator)(react-dom@19.0.0(react@19.0.0))(react-is@19.0.0-rc.1)(react@19.0.0)(sanity@packages+sanity)(styled-components@6.1.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) - '@sanity/block-tools': - specifier: 3.70.0 - version: link:../../packages/@sanity/block-tools '@sanity/client': specifier: ^6.24.3 version: 6.24.3(debug@4.4.0) @@ -652,9 +652,6 @@ importers: packages/@repo/test-exports: dependencies: - '@sanity/block-tools': - specifier: workspace:* - version: link:../../@sanity/block-tools '@sanity/cli': specifier: workspace:* version: link:../../@sanity/cli @@ -698,49 +695,6 @@ importers: packages/@repo/tsconfig: {} - packages/@sanity/block-tools: - dependencies: - '@sanity/types': - specifier: 3.70.0 - version: link:../types - get-random-values-esm: - specifier: 1.0.2 - version: 1.0.2 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - devDependencies: - '@repo/package.config': - specifier: workspace:* - version: link:../../@repo/package.config - '@repo/test-config': - specifier: workspace:* - version: link:../../@repo/test-config - '@sanity/schema': - specifier: 3.70.0 - version: link:../schema - '@types/jsdom': - specifier: ^20.0.0 - version: 20.0.1 - '@types/lodash': - specifier: ^4.17.7 - version: 4.17.13 - '@types/react': - specifier: ^19.0.3 - version: 19.0.6 - '@vercel/stega': - specifier: 0.1.2 - version: 0.1.2 - '@vitest/coverage-v8': - specifier: ^2.1.8 - version: 2.1.8(vitest@2.1.8(@types/node@22.10.2)(jsdom@23.2.0)(terser@5.37.0)) - jsdom: - specifier: ^23.0.1 - version: 23.2.0 - vitest: - specifier: ^2.1.8 - version: 2.1.8(@types/node@22.10.2)(jsdom@23.2.0)(terser@5.37.0) - packages/@sanity/cli: dependencies: '@babel/traverse': @@ -1310,9 +1264,6 @@ importers: '@repo/package.config': specifier: workspace:* version: link:../../@repo/package.config - '@sanity/block-tools': - specifier: workspace:* - version: link:../block-tools '@sanity/cli': specifier: workspace:* version: link:../cli @@ -1406,9 +1357,6 @@ importers: '@sanity/bifur-client': specifier: ^0.4.1 version: 0.4.1 - '@sanity/block-tools': - specifier: 3.70.0 - version: link:../@sanity/block-tools '@sanity/cli': specifier: 3.70.0 version: link:../@sanity/cli @@ -2625,9 +2573,6 @@ packages: resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} @@ -3695,10 +3640,6 @@ packages: '@isaacs/string-locale-compare@1.1.0': resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5480,15 +5421,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/coverage-v8@2.1.8': - resolution: {integrity: sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==} - peerDependencies: - '@vitest/browser': 2.1.8 - vitest: 2.1.8 - peerDependenciesMeta: - '@vitest/browser': - optional: true - '@vitest/expect@2.1.8': resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} @@ -7999,9 +7931,6 @@ packages: html-entities@2.5.2: resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} @@ -8519,22 +8448,6 @@ packages: isomorphic-fetch@3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - iterator.prototype@1.1.4: resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==} engines: {node: '>= 0.4'} @@ -8887,9 +8800,6 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} - make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} @@ -11268,10 +11178,6 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} @@ -13008,8 +12914,6 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@0.2.3': {} - '@clack/core@0.3.5': dependencies: picocolors: 1.1.1 @@ -13832,8 +13736,6 @@ snapshots: '@isaacs/string-locale-compare@1.1.0': {} - '@istanbuljs/schema@0.1.3': {} - '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 @@ -16463,24 +16365,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@22.10.2)(jsdom@23.2.0)(terser@5.37.0))': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.4.0(supports-color@9.4.0) - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.17 - magicast: 0.3.5 - std-env: 3.8.0 - test-exclude: 7.0.1 - tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@22.10.2)(jsdom@23.2.0)(terser@5.37.0) - transitivePeerDependencies: - - supports-color - '@vitest/expect@2.1.8': dependencies: '@vitest/spy': 2.1.8 @@ -19554,8 +19438,6 @@ snapshots: html-entities@2.5.2: {} - html-escaper@2.0.2: {} - html-parse-stringify@3.0.1: dependencies: void-elements: 3.1.0 @@ -20037,27 +19919,6 @@ snapshots: transitivePeerDependencies: - encoding - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0(supports-color@9.4.0) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.4: dependencies: define-data-property: 1.1.4 @@ -20545,12 +20406,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magicast@0.3.5: - dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 - source-map-js: 1.2.1 - make-dir@1.3.0: dependencies: pify: 3.0.0 @@ -23402,12 +23257,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - text-decoder@1.2.3: dependencies: b4a: 1.6.7 diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 5af46985aac..c547447131e 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -2,7 +2,6 @@ import {defineWorkspace} from 'vitest/config' export default defineWorkspace([ 'packages/@sanity/migrate', - 'packages/@sanity/block-tools', 'packages/@sanity/cli', 'packages/@sanity/codegen', 'packages/@sanity/mutator',