@lofcz/platejs-list 52.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +24 -0
- package/README.md +13 -0
- package/dist/index-BnhNqFus.d.ts +289 -0
- package/dist/index-BnhNqFus.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/react/index.d.ts +64 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +182 -0
- package/dist/react/index.js.map +1 -0
- package/dist/src-Dvsp2AeZ.js +803 -0
- package/dist/src-Dvsp2AeZ.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-Dvsp2AeZ.js","names":["ListStyleType","ArabicIndic","Armenian","Bengali","Cambodian","Circle","CjkDecimal","CjkEarthlyBranch","CjkHeavenlyStem","Decimal","DecimalLeadingZero","Devanagari","Disc","DisclosureClosed","DisclosureOpen","EthiopicNumeric","Georgian","Gujarati","Gurmukhi","Hebrew","Hiragana","HiraganaIroha","Inherit","Initial","JapaneseFormal","JapaneseInformal","Kannada","Katakana","KatakanaIroha","Khmer","KoreanHangulFormal","KoreanHanjaFormal","KoreanHanjaInformal","Lao","LowerAlpha","LowerArmenian","LowerGreek","LowerLatin","LowerRoman","Malayalam","Mongolian","Myanmar","None","Oriya","Persian","SimpChineseFormal","SimpChineseInformal","Square","Tamil","Telugu","Thai","Tibetan","TradChineseFormal","TradChineseInformal","UpperAlpha","UpperArmenian","UpperLatin","UpperRoman","const","ULIST_STYLE_TYPES","Editor","NodeEntry","KEYS","ListStyleType","areEqListStyleType","_editor","entries","listStyleType","Disc","eqListStyleType","entry","block","listTodo","Object","hasOwn","listChecked","listType","Editor","ElementEntryOf","ElementOf","NodeEntry","isDefined","KEYS","NodeApi","PathApi","getListChildren","E","editor","entry","N","children","node","path","parentIndent","indent","listType","currentPath","nextPath","next","nextNode","get","nextIndent","push","Editor","ElementEntryOf","ElementOf","NodeEntry","isDefined","KEYS","getListChildren","expandListItemsWithChildren","E","editor","entries","N","expandedEntries","processedIds","Set","forEach","entry","node","has","id","push","add","isListItem","listType","indent","children","childEntry","Editor","EditorAboveOptions","ElementOf","NodeEntry","isDefined","KEYS","getListAbove","E","editor","options","Omit","N","api","above","match","node","listType","Editor","ElementEntryOf","ElementOf","ElementOrTextOf","NodeEntry","TNode","isDefined","KEYS","GetSiblingListOptions","E","breakOnEqIndentNeqListStyleType","breakOnListRestart","breakOnLowerIndent","breakQuery","siblingNode","currentNode","getNextEntry","entry","N","getPreviousEntry","eqIndent","query","getSiblingList","_editor","node","path","getSiblingEntry","nextEntry","nextNode","nextPath","indent","nextIndent","listRestart","listType","valid","Editor","ElementEntryOf","ElementOf","NodeEntry","NodeApi","PathApi","GetSiblingListOptions","getSiblingList","getNextList","E","editor","entry","options","Partial","N","getNextEntry","currPath","nextPath","next","nextNode","get","getPreviousEntry","undefined","Editor","ElementEntryOf","ElementOf","NodeEntry","NodeApi","PathApi","GetSiblingListOptions","getSiblingList","getPreviousList","E","editor","entry","options","Partial","N","getPreviousEntry","currPath","prevPath","previous","prevNode","get","getNextEntry","undefined","Editor","ElementEntryOf","ElementOf","NodeEntry","TElement","KEYS","GetSiblingListOptions","getNextList","getPreviousList","GetListSiblingsOptions","E","Partial","N","current","next","previous","getListSiblings","editor","entry","options","siblings","node","listType","Object","hasOwn","listChecked","iterEntry","prevEntry","push","nextEntry","ElementOf","NodeEntry","SlateEditor","TElement","KEYS","ListStyleType","GetListSiblingsOptions","getListSiblings","getSiblingListStyleType","editor","E","entry","indent","options","siblingEntry","siblings","breakOnEqIndentNeqListStyleType","current","eqIndent","length","listType","TElement","ULIST_STYLE_TYPES","isOrderedList","element","listStyleType","includes","SlateEditor","KEYS","someList","editor","type","selection","api","some","match","n","isHasProperty","Object","hasOwn","listChecked","list","listType","Array","isArray","includes","SlateEditor","KEYS","someTodoList","editor","api","some","at","selection","match","n","list","listType","isHasProperty","Object","hasOwn","listChecked","type","listTodo","Editor","NodeEntry","isDefined","KEYS","normalizeListNotIndented","editor","node","path","indent","listType","listStart","tf","unsetNodes","at","Editor","ElementEntryOf","ElementOf","NodeEntry","isDefined","KEYS","GetSiblingListOptions","getPreviousList","getListExpectedListStart","entry","prevEntry","node","prevNode","restart","listRestart","restartPolite","listRestartPolite","prevListStart","listStart","normalizeListStart","E","editor","options","Partial","N","tf","withoutNormalizing","path","listStyleType","listType","expectedListStart","unsetNodes","at","setNodes","OverrideEditor","TElement","isDefined","KEYS","BaseListConfig","withInsertBreakList","editor","tf","insertBreak","transforms","nodeEntry","api","above","node","path","listType","listTodo","isExpanded","isEnd","selection","focus","withoutNormalizing","newEntry","setNodes","checked","at","SlateEditor","TLocation","setIndent","KEYS","ListStyleType","ListOptions","at","listRestart","listRestartPolite","listStyleType","indentList","editor","Disc","options","offset","setNodesProps","listType","indentTodo","listChecked","SlateEditor","setIndent","KEYS","ListOptions","outdentList","editor","options","offset","unsetNodesProps","listType","listChecked","Editor","Path","KEYS","ListStyleType","setListNode","editor","at","indent","listStyleType","Disc","newIndent","tf","setNodes","listType","setIndentTodoNode","listTodo","listChecked","Editor","NodeEntry","KEYS","ListStyleType","setIndentTodoNode","setListNode","setListNodes","editor","entries","listStyleType","Disc","tf","withoutNormalizing","forEach","entry","node","path","indent","listType","Object","hasOwn","listChecked","unsetNodes","at","Editor","ElementEntryOf","ElementOf","KEYS","GetSiblingListOptions","getListSiblings","ListStyleType","setIndentTodoNode","setListNode","setListSiblingNodes","E","editor","entry","getSiblingListOptions","listStyleType","Disc","N","tf","withoutNormalizing","siblings","forEach","node","path","listTodo","unsetNodes","listType","at","indent","listChecked","Editor","NodeEntry","KEYS","ListStyleType","ListOptions","indentList","indentTodo","toggleListSet","editor","node","_path","listStyleType","Disc","options","Object","hasOwn","listChecked","listType","Editor","NodeEntry","KEYS","ListStyleType","outdentList","toggleListUnset","editor","node","path","listStyleType","Disc","listTodo","Object","hasOwn","listChecked","tf","unsetNodes","at","listType","ElementEntryOf","ElementOf","SlateEditor","TElement","getInjectMatch","KEYS","ListOptions","BaseListPlugin","GetSiblingListOptions","getListAbove","getPreviousList","areEqListStyleType","setListNodes","setListSiblingNodes","toggleListSet","toggleListUnset","toggleList","E","editor","options","getSiblingListOptions","N","listRestart","listRestartPolite","listStyleType","setList","_getSiblingListOptions","getOptions","api","isCollapsed","entry","block","isExpanded","match","getPlugin","key","list","_entries","nodes","entries","eqListStyleType","tf","withoutNormalizing","forEach","node","path","indent","unsetNodes","listType","at","setNodes","listChecked","restartValue","isRestart","atStart","start","selection","isFirst","prop","NodeEntry","SlateEditor","KEYS","toggleListByPath","editor","node","path","listStyleType","tf","setNodes","indent","listChecked","listType","type","p","at","toggleListByPathUnSet","unsetNodes","OverrideEditor","TElement","BaseListConfig","normalizeListNotIndented","normalizeListStart","withNormalizeList","editor","getOptions","tf","normalizeNode","transforms","node","path","normalized","withoutNormalizing","getSiblingListOptions","NodeEntry","OverrideEditor","Path","TElement","TNode","KEYS","PathApi","BaseListConfig","withInsertBreakList","normalizeListStart","getNextList","getPreviousList","outdentList","ListStyleType","withNormalizeList","withList","ctx","editor","getOptions","tf","apply","resetBlock","transforms","options","api","block","listType","operation","getSiblingListOptions","type","listStyleType","node","includes","prevNodeEntry","path","breakOnEqIndentNeqListStyleType","eqIndent","prevListStyleType","LowerAlpha","LowerRoman","UpperAlpha","UpperRoman","properties","listRestart","listRestartPolite","affectedPaths","push","previous","newPath","next","isListItem","forEach","affectedPath","entry","normalized","breakOnLowerIndent","React","SlateRenderElementProps","PluginConfig","TElement","TListElement","createTSlatePlugin","isDefined","isHtmlBlockElement","KEYS","postCleanHtml","traverseHtmlElements","GetSiblingListOptions","ListStyleType","isOrderedList","withList","BaseListConfig","getSiblingListOptions","getListStyleType","element","HTMLElement","BaseListPlugin","key","list","inject","plugins","html","parser","transformData","data","document","DOMParser","parseFromString","body","lisWithNestedLists","li","Element","nestedLists","tagName","Array","from","children","forEach","child","push","length","nestedList","remove","parentNode","insertBefore","nextSibling","htmlElement","childNodes","liChildren","Node","nodeType","ELEMENT_NODE","childElement","replaceChildren","ariaLevel","getAttribute","dataset","indent","parent","parentElement","String","listStyleType","style","listParent","closest","parentListStyleType","innerHTML","targetPlugins","p","options","parsers","deserializer","isElement","rules","validNodeName","parse","editor","getOptions","dataIndent","Number","dataListStyleType","undefined","type","getType","render","belowNodes","props","break","empty","splitReset","delete","start","merge","removeEmpty","match","node","listType","overrideEditor","List","$","_c","listStart","t0","margin","padding","position","t1","t2"],"sources":["../src/lib/types.ts","../src/lib/queries/areEqListStyleType.ts","../src/lib/queries/getListChildren.ts","../src/lib/queries/expandListItemsWithChildren.ts","../src/lib/queries/getListAbove.ts","../src/lib/queries/getSiblingList.ts","../src/lib/queries/getNextList.ts","../src/lib/queries/getPreviousList.ts","../src/lib/queries/getListSiblings.ts","../src/lib/queries/getSiblingListStyleType.ts","../src/lib/queries/isOrderedList.ts","../src/lib/queries/someList.ts","../src/lib/queries/someTodoList.ts","../src/lib/normalizers/normalizeListNotIndented.ts","../src/lib/normalizers/normalizeListStart.ts","../src/lib/normalizers/withInsertBreakList.ts","../src/lib/transforms/indentList.ts","../src/lib/transforms/outdentList.ts","../src/lib/transforms/setListNode.ts","../src/lib/transforms/setListNodes.ts","../src/lib/transforms/setListSiblingNodes.ts","../src/lib/transforms/toggleListSet.ts","../src/lib/transforms/toggleListUnset.ts","../src/lib/transforms/toggleList.ts","../src/lib/transforms/toggleListByPath.ts","../src/lib/withNormalizeList.ts","../src/lib/withList.ts","../src/lib/BaseListPlugin.tsx"],"sourcesContent":["export const ListStyleType = {\n ArabicIndic: 'arabic-indic',\n Armenian: 'armenian',\n Bengali: 'bengali',\n Cambodian: 'cambodian',\n Circle: 'circle',\n CjkDecimal: 'cjk-decimal',\n CjkEarthlyBranch: 'cjk-earthly-branch',\n CjkHeavenlyStem: 'cjk-heavenly-stem',\n Decimal: 'decimal',\n DecimalLeadingZero: 'decimal-leading-zero',\n Devanagari: 'devanagari',\n Disc: 'disc',\n DisclosureClosed: 'disclosure-closed',\n DisclosureOpen: 'disclosure-open',\n EthiopicNumeric: 'ethiopic-numeric',\n Georgian: 'georgian',\n Gujarati: 'gujarati',\n Gurmukhi: 'gurmukhi',\n Hebrew: 'hebrew',\n Hiragana: 'hiragana',\n HiraganaIroha: 'hiragana-iroha',\n Inherit: 'inherit',\n Initial: 'initial',\n JapaneseFormal: 'japanese-formal',\n JapaneseInformal: 'japanese-informal',\n Kannada: 'kannada',\n Katakana: 'katakana',\n KatakanaIroha: 'katakana-iroha',\n Khmer: 'khmer',\n KoreanHangulFormal: 'korean-hangul-formal',\n KoreanHanjaFormal: 'korean-hanja-formal',\n KoreanHanjaInformal: 'korean-hanja-informal',\n Lao: 'lao',\n LowerAlpha: 'lower-alpha',\n LowerArmenian: 'lower-armenian',\n LowerGreek: 'lower-greek',\n LowerLatin: 'lower-latin',\n LowerRoman: 'lower-roman',\n Malayalam: 'malayalam',\n Mongolian: 'mongolian',\n Myanmar: 'myanmar',\n None: 'none',\n Oriya: 'oriya',\n Persian: 'persian',\n SimpChineseFormal: 'simp-chinese-formal',\n SimpChineseInformal: 'simp-chinese-informal',\n Square: 'square',\n Tamil: 'tamil',\n Telugu: 'telugu',\n Thai: 'thai',\n Tibetan: 'tibetan',\n TradChineseFormal: 'trad-chinese-formal',\n TradChineseInformal: 'trad-chinese-informal',\n UpperAlpha: 'upper-alpha',\n UpperArmenian: 'upper-armenian',\n UpperLatin: 'upper-latin',\n UpperRoman: 'upper-roman',\n} as const;\n\nexport type ListStyleType = (typeof ListStyleType)[keyof typeof ListStyleType];\n\nexport const ULIST_STYLE_TYPES = [\n ListStyleType.Disc,\n ListStyleType.Circle,\n ListStyleType.Square,\n ListStyleType.DisclosureOpen,\n ListStyleType.DisclosureClosed,\n] as const;\n","import type { Editor, NodeEntry } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport { ListStyleType } from '../types';\n\nexport const areEqListStyleType = (\n _editor: Editor,\n entries: NodeEntry[],\n {\n listStyleType = ListStyleType.Disc,\n }: {\n listStyleType?: string;\n }\n) => {\n let eqListStyleType = true;\n\n for (const entry of entries) {\n const [block] = entry;\n\n if (listStyleType === KEYS.listTodo) {\n if (!Object.hasOwn(block, KEYS.listChecked)) {\n eqListStyleType = false;\n\n break;\n }\n\n continue;\n }\n if (!block[KEYS.listType] || block[KEYS.listType] !== listStyleType) {\n eqListStyleType = false;\n\n break;\n }\n }\n\n return eqListStyleType;\n};\n","import type { Editor, ElementEntryOf, ElementOf, NodeEntry } from 'platejs';\n\nimport { isDefined, KEYS, NodeApi, PathApi } from 'platejs';\n\n/**\n * Get all list items that are children of the current list item (have bigger\n * indent). Stops when encountering an item with equal or lower indent.\n */\nexport const getListChildren = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n editor: E,\n entry: ElementEntryOf<E>\n): NodeEntry<N>[] => {\n const children: NodeEntry<N>[] = [];\n const [node, path] = entry;\n\n const parentIndent = (node as any)[KEYS.indent] as number;\n\n // If no indent or not a list item, return empty\n if (!isDefined(parentIndent) || !isDefined((node as any)[KEYS.listType])) {\n return children;\n }\n\n let currentPath = path;\n\n while (true) {\n const nextPath = PathApi.next(currentPath);\n if (!nextPath) break;\n\n const nextNode = NodeApi.get<N>(editor, nextPath);\n if (!nextNode) break;\n\n const nextIndent = (nextNode as any)[KEYS.indent] as number;\n\n // Stop if we hit a non-list item or item with equal/lower indent\n if (\n !isDefined(nextIndent) ||\n !isDefined((nextNode as any)[KEYS.listType])\n ) {\n break;\n }\n\n if (nextIndent <= parentIndent) {\n break;\n }\n\n // This is a child item (bigger indent)\n children.push([nextNode, nextPath]);\n currentPath = nextPath;\n }\n\n return children;\n};\n","import type { Editor, ElementEntryOf, ElementOf, NodeEntry } from 'platejs';\n\nimport { isDefined, KEYS } from 'platejs';\n\nimport { getListChildren } from './getListChildren';\n\n/**\n * Expands a list of blocks to include list item children. For each list item in\n * the input, adds all its children (items with bigger indent). Non-list blocks\n * are kept as-is. Requires id to be set on the blocks.\n *\n * @returns Array of block entries with list items expanded to include their\n * children\n */\nexport const expandListItemsWithChildren = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n editor: E,\n entries: ElementEntryOf<E>[]\n): NodeEntry<N>[] => {\n const expandedEntries: NodeEntry<N>[] = [];\n const processedIds = new Set<string>();\n\n entries.forEach((entry) => {\n const [node] = entry;\n\n // Skip if already processed\n if (processedIds.has(node.id as string)) return;\n\n expandedEntries.push(entry as NodeEntry<N>);\n processedIds.add(node.id as string);\n\n // Check if it's a list item\n const isListItem =\n isDefined((node as any)[KEYS.listType]) &&\n isDefined((node as any)[KEYS.indent]);\n\n if (isListItem) {\n // Get all children (items with bigger indent)\n const children = getListChildren<N, E>(editor, entry);\n\n // Add children that aren't already in the selection\n children.forEach((childEntry) => {\n if (!processedIds.has(childEntry[0].id as string)) {\n expandedEntries.push(childEntry);\n processedIds.add(childEntry[0].id as string);\n }\n });\n }\n });\n\n return expandedEntries;\n};\n","import {\n type Editor,\n type EditorAboveOptions,\n type ElementOf,\n type NodeEntry,\n isDefined,\n KEYS,\n} from 'platejs';\n\nexport const getListAbove = <N extends ElementOf<E>, E extends Editor = Editor>(\n editor: E,\n options?: Omit<EditorAboveOptions, 'match'>\n): NodeEntry<N> | undefined =>\n editor.api.above({\n ...options,\n match: (node) => isDefined(node[KEYS.listType]),\n });\n","import {\n type Editor,\n type ElementEntryOf,\n type ElementOf,\n type ElementOrTextOf,\n type NodeEntry,\n type TNode,\n isDefined,\n KEYS,\n} from 'platejs';\n\nexport type GetSiblingListOptions<\n N extends ElementOf<E>,\n E extends Editor = Editor,\n> = {\n breakOnEqIndentNeqListStyleType?: boolean;\n breakOnListRestart?: boolean;\n breakOnLowerIndent?: boolean;\n breakQuery?: (siblingNode: TNode, currentNode: TNode) => boolean | undefined;\n getNextEntry?: (\n entry: NodeEntry<ElementOrTextOf<E>>\n ) => NodeEntry<N> | undefined;\n getPreviousEntry?: (\n entry: NodeEntry<ElementOrTextOf<E>>\n ) => NodeEntry<N> | undefined;\n /** Query to break lookup */\n eqIndent?: boolean;\n /** Query to validate lookup. If false, check the next sibling. */\n query?: (siblingNode: TNode, currentNode: TNode) => boolean | undefined;\n};\n\n/**\n * Get the next sibling indent list node. Default query: the sibling node should\n * have the same listStyleType.\n */\nexport const getSiblingList = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n _editor: E,\n [node, path]: ElementEntryOf<E>,\n {\n breakOnEqIndentNeqListStyleType = true,\n breakOnListRestart = false,\n breakOnLowerIndent = true,\n breakQuery,\n eqIndent = true,\n getNextEntry,\n getPreviousEntry,\n query,\n }: GetSiblingListOptions<N, E>\n): NodeEntry<N> | undefined => {\n if (!getPreviousEntry && !getNextEntry) return;\n\n const getSiblingEntry = getNextEntry ?? getPreviousEntry!;\n\n let nextEntry = getSiblingEntry([node, path]);\n\n while (true) {\n if (!nextEntry) return;\n\n const [nextNode, nextPath] = nextEntry;\n\n const indent = (node as any)[KEYS.indent] as number;\n const nextIndent = (nextNode as any)[KEYS.indent] as number;\n\n if (breakQuery?.(nextNode, node)) return;\n if (!isDefined(nextIndent)) return;\n if (breakOnListRestart) {\n if (getPreviousEntry && (node as any)[KEYS.listRestart]) {\n return;\n }\n if (getNextEntry && (nextNode as any)[KEYS.listRestart]) {\n return;\n }\n }\n if (breakOnLowerIndent && nextIndent < indent) return;\n if (\n breakOnEqIndentNeqListStyleType &&\n nextIndent === indent &&\n (nextNode as any)[KEYS.listType] !== (node as any)[KEYS.listType]\n )\n return;\n\n let valid = !query || query(nextNode, node);\n\n if (valid) {\n valid = !eqIndent || nextIndent === indent;\n\n if (valid) return [nextNode, nextPath];\n }\n\n nextEntry = getSiblingEntry(nextEntry);\n }\n};\n","import {\n type Editor,\n type ElementEntryOf,\n type ElementOf,\n type NodeEntry,\n NodeApi,\n PathApi,\n} from 'platejs';\n\nimport { type GetSiblingListOptions, getSiblingList } from './getSiblingList';\n\n/** Get the next indent list. */\nexport const getNextList = <N extends ElementOf<E>, E extends Editor = Editor>(\n editor: E,\n entry: ElementEntryOf<E>,\n options?: Partial<GetSiblingListOptions<N, E>>\n): NodeEntry<N> | undefined =>\n getSiblingList(editor, entry, {\n getNextEntry: ([, currPath]) => {\n const nextPath = PathApi.next(currPath);\n const nextNode = NodeApi.get<N>(editor, nextPath);\n\n if (!nextNode) return;\n\n return [nextNode, nextPath];\n },\n ...options,\n getPreviousEntry: undefined,\n });\n","import {\n type Editor,\n type ElementEntryOf,\n type ElementOf,\n type NodeEntry,\n NodeApi,\n PathApi,\n} from 'platejs';\n\nimport { type GetSiblingListOptions, getSiblingList } from './getSiblingList';\n\n/** Get the previous indent list node. */\nexport const getPreviousList = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n editor: E,\n entry: ElementEntryOf<E>,\n options?: Partial<GetSiblingListOptions<N, E>>\n): NodeEntry<N> | undefined =>\n getSiblingList(editor, entry, {\n getPreviousEntry: ([, currPath]) => {\n const prevPath = PathApi.previous(currPath);\n\n if (!prevPath) return;\n\n const prevNode = NodeApi.get<N>(editor, prevPath);\n\n if (!prevNode) return;\n\n return [prevNode, prevPath];\n },\n ...options,\n getNextEntry: undefined,\n });\n","import type {\n Editor,\n ElementEntryOf,\n ElementOf,\n NodeEntry,\n TElement,\n} from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport type { GetSiblingListOptions } from './getSiblingList';\n\nimport { getNextList } from './getNextList';\nimport { getPreviousList } from './getPreviousList';\n\nexport interface GetListSiblingsOptions<\n N extends ElementOf<E>,\n E extends Editor = Editor,\n> extends Partial<GetSiblingListOptions<N, E>> {\n current?: boolean;\n next?: boolean;\n previous?: boolean;\n}\n\nexport const getListSiblings = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n editor: E,\n entry: ElementEntryOf<E>,\n {\n current = true,\n next = true,\n previous = true,\n ...options\n }: GetListSiblingsOptions<N, E> = {}\n) => {\n const siblings: NodeEntry[] = [];\n\n const node = entry[0] as TElement;\n\n if (!node[KEYS.listType] && !Object.hasOwn(node, KEYS.listChecked)) {\n return siblings;\n }\n\n let iterEntry = entry;\n\n if (previous) {\n while (true) {\n const prevEntry = getPreviousList<N, E>(editor, iterEntry, options);\n\n if (!prevEntry) break;\n\n siblings.push(prevEntry);\n\n iterEntry = prevEntry;\n }\n }\n if (current) {\n siblings.push(entry);\n }\n if (next) {\n iterEntry = entry;\n\n while (true) {\n const nextEntry = getNextList(editor, iterEntry, options);\n\n if (!nextEntry) break;\n\n siblings.push(nextEntry);\n\n iterEntry = nextEntry;\n }\n }\n\n return siblings;\n};\n","import type { ElementOf, NodeEntry, SlateEditor, TElement } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport type { ListStyleType } from '../types';\n\nimport { type GetListSiblingsOptions, getListSiblings } from './index';\n\n/**\n * Get the first sibling list style type at the given indent. If none, return\n * the entry list style type.\n */\nexport const getSiblingListStyleType = <E extends SlateEditor>(\n editor: E,\n {\n entry,\n indent,\n ...options\n }: {\n entry: NodeEntry<TElement>;\n indent: number;\n } & GetListSiblingsOptions<ElementOf<E>, E>\n) => {\n const siblingEntry: NodeEntry<TElement> = [{ ...entry[0], indent }, entry[1]];\n\n const siblings = getListSiblings(editor, siblingEntry as any, {\n breakOnEqIndentNeqListStyleType: false,\n current: false,\n eqIndent: true,\n ...options,\n });\n\n return (\n siblings.length > 0\n ? siblings[0][0][KEYS.listType]\n : entry[0][KEYS.listType]\n ) as ListStyleType;\n};\n","import type { TElement } from 'platejs';\n\nimport { ULIST_STYLE_TYPES } from '../types';\n\nexport function isOrderedList(element: TElement) {\n return (\n !!element.listStyleType &&\n !ULIST_STYLE_TYPES.includes(element.listStyleType as any)\n );\n}\n","import type { SlateEditor } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nexport const someList = (editor: SlateEditor, type: string[] | string) =>\n !!editor.selection &&\n editor.api.some({\n match: (n: any) => {\n const isHasProperty = Object.hasOwn(n, KEYS.listChecked);\n\n if (isHasProperty) {\n return false;\n }\n\n const list = n[KEYS.listType];\n\n return Array.isArray(type) ? type.includes(list) : list === type;\n },\n });\n","import type { SlateEditor } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nexport const someTodoList = (editor: SlateEditor) =>\n editor.api.some({\n at: editor.selection!,\n match: (n) => {\n const list = n[KEYS.listType];\n const isHasProperty = Object.hasOwn(n, KEYS.listChecked);\n\n return n.type === 'p' && isHasProperty && list === KEYS.listTodo;\n },\n });\n","import { type Editor, type NodeEntry, isDefined, KEYS } from 'platejs';\n\n/** Unset listStyle, listStart if KEYS.indent is not defined. */\nexport const normalizeListNotIndented = (\n editor: Editor,\n [node, path]: NodeEntry\n) => {\n if (\n !isDefined(node[KEYS.indent]) &&\n (node[KEYS.listType] || node[KEYS.listStart])\n ) {\n editor.tf.unsetNodes([KEYS.listType, KEYS.listStart], {\n at: path,\n });\n\n return true;\n }\n};\n","import {\n type Editor,\n type ElementEntryOf,\n type ElementOf,\n type NodeEntry,\n isDefined,\n KEYS,\n} from 'platejs';\n\nimport type { GetSiblingListOptions } from '../queries/getSiblingList';\n\nimport { getPreviousList } from '../queries/getPreviousList';\n\nexport const getListExpectedListStart = (\n entry: NodeEntry,\n prevEntry?: NodeEntry\n): number => {\n const [node] = entry;\n const [prevNode] = prevEntry ?? [null];\n\n const restart = (node[KEYS.listRestart] as number | null) ?? null;\n const restartPolite = (node[KEYS.listRestartPolite] as number | null) ?? null;\n\n if (restart) {\n return restart;\n }\n\n if (restartPolite && !prevNode) {\n return restartPolite;\n }\n\n if (prevNode) {\n const prevListStart = (prevNode[KEYS.listStart] as number) ?? 1;\n return prevListStart + 1;\n }\n\n return 1;\n};\n\nexport const normalizeListStart = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n editor: E,\n entry: ElementEntryOf<E>,\n options?: Partial<GetSiblingListOptions<N, E>>\n) =>\n editor.tf.withoutNormalizing(() => {\n const [node, path] = entry;\n const listStyleType = (node as any)[KEYS.listType];\n const listStart = node[KEYS.listStart] as number | undefined;\n\n if (!listStyleType) return;\n\n const prevEntry = getPreviousList(editor, entry, options);\n const expectedListStart = getListExpectedListStart(entry, prevEntry);\n\n if (isDefined(listStart) && expectedListStart === 1) {\n editor.tf.unsetNodes(KEYS.listStart, { at: path });\n\n return true;\n }\n\n if (listStart !== expectedListStart && expectedListStart > 1) {\n editor.tf.setNodes({ [KEYS.listStart]: expectedListStart }, { at: path });\n\n return true;\n }\n\n return false;\n });\n","import { type OverrideEditor, type TElement, isDefined, KEYS } from 'platejs';\n\nimport type { BaseListConfig } from '../BaseListPlugin';\n\nexport const withInsertBreakList: OverrideEditor<BaseListConfig> = ({\n editor,\n tf: { insertBreak },\n}) => ({\n transforms: {\n insertBreak() {\n const nodeEntry = editor.api.above();\n\n if (!nodeEntry) return insertBreak();\n\n const [node, path] = nodeEntry;\n\n if (\n !isDefined(node[KEYS.listType]) ||\n node[KEYS.listType] !== KEYS.listTodo ||\n editor.api.isExpanded() ||\n !editor.api.isEnd(editor.selection?.focus, path)\n ) {\n return insertBreak();\n }\n\n editor.tf.withoutNormalizing(() => {\n insertBreak();\n\n const newEntry = editor.api.above<TElement>();\n\n if (newEntry) {\n editor.tf.setNodes(\n {\n checked: false,\n },\n { at: newEntry[1] }\n );\n }\n });\n },\n },\n});\n","import type { SlateEditor, TLocation } from 'platejs';\n\nimport { setIndent } from '@platejs/indent';\nimport { KEYS } from 'platejs';\n\nimport { ListStyleType } from '../types';\n\nexport type ListOptions = {\n at?: TLocation;\n listRestart?: number;\n listRestartPolite?: number;\n listStyleType?: ListStyleType | string;\n};\n\n/** Increase the indentation of the selected blocks. */\nexport const indentList = (\n editor: SlateEditor,\n { listStyleType = ListStyleType.Disc, ...options }: ListOptions = {}\n) => {\n setIndent(editor, {\n offset: 1,\n setNodesProps: () => ({\n [KEYS.listType]: listStyleType,\n }),\n ...options,\n });\n};\n\nexport const indentTodo = (\n editor: SlateEditor,\n { listStyleType = ListStyleType.Disc, ...options }: ListOptions = {}\n) => {\n setIndent(editor, {\n offset: 1,\n setNodesProps: () => ({\n [KEYS.listChecked]: false,\n [KEYS.listType]: listStyleType,\n }),\n ...options,\n });\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { setIndent } from '@platejs/indent';\nimport { KEYS } from 'platejs';\n\nimport type { ListOptions } from './indentList';\n\n/** Decrease the indentation of the selected blocks. */\nexport const outdentList = (editor: SlateEditor, options: ListOptions = {}) => {\n setIndent(editor, {\n offset: -1,\n unsetNodesProps: [KEYS.listType, KEYS.listChecked],\n ...options,\n });\n};\n","import type { Editor, Path } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport { ListStyleType } from '../types';\n\nexport const setListNode = (\n editor: Editor,\n {\n at,\n indent = 0,\n listStyleType = ListStyleType.Disc,\n }: {\n at: Path;\n indent?: number;\n listStyleType?: string;\n }\n) => {\n const newIndent = indent || indent + 1;\n\n editor.tf.setNodes(\n {\n [KEYS.indent]: newIndent,\n [KEYS.listType]: listStyleType,\n },\n { at }\n );\n};\n\nexport const setIndentTodoNode = (\n editor: Editor,\n {\n at,\n indent = 0,\n listStyleType = KEYS.listTodo,\n }: {\n at: Path;\n indent?: number;\n listStyleType?: string;\n }\n) => {\n const newIndent = indent || indent + 1;\n\n editor.tf.setNodes(\n {\n [KEYS.indent]: newIndent,\n [KEYS.listChecked]: false,\n [KEYS.listType]: listStyleType,\n },\n { at }\n );\n};\n","import type { Editor, NodeEntry } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport { ListStyleType } from '../types';\nimport { setIndentTodoNode, setListNode } from './setListNode';\n\n/**\n * Set indent list to the given entries. Add indent if listStyleType was not\n * defined.\n */\nexport const setListNodes = (\n editor: Editor,\n entries: NodeEntry[],\n {\n listStyleType = ListStyleType.Disc,\n }: {\n listStyleType?: string;\n }\n) => {\n editor.tf.withoutNormalizing(() => {\n entries.forEach((entry) => {\n const [node, path] = entry;\n\n let indent = (node[KEYS.indent] as number) ?? 0;\n indent =\n node[KEYS.listType] || Object.hasOwn(node, KEYS.listChecked)\n ? indent\n : indent + 1;\n\n if (listStyleType === 'todo') {\n editor.tf.unsetNodes(KEYS.listType, { at: path });\n setIndentTodoNode(editor, {\n at: path,\n indent,\n listStyleType,\n });\n\n return;\n }\n\n editor.tf.unsetNodes(KEYS.listChecked, { at: path });\n setListNode(editor, {\n at: path,\n indent,\n listStyleType,\n });\n });\n });\n};\n","import type { Editor, ElementEntryOf, ElementOf } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport type { GetSiblingListOptions } from '../queries/getSiblingList';\n\nimport { getListSiblings } from '../queries/getListSiblings';\nimport { ListStyleType } from '../types';\nimport { setIndentTodoNode, setListNode } from './setListNode';\n\n/** Set indent list to entry + siblings. */\nexport const setListSiblingNodes = <\n N extends ElementOf<E>,\n E extends Editor = Editor,\n>(\n editor: E,\n entry: ElementEntryOf<E>,\n {\n getSiblingListOptions,\n listStyleType = ListStyleType.Disc,\n }: {\n getSiblingListOptions?: GetSiblingListOptions<N, E>;\n listStyleType?: string;\n }\n) => {\n editor.tf.withoutNormalizing(() => {\n const siblings = getListSiblings(editor, entry, getSiblingListOptions);\n\n siblings.forEach(([node, path]) => {\n if (listStyleType === KEYS.listTodo) {\n editor.tf.unsetNodes(KEYS.listType, { at: path });\n setIndentTodoNode(editor, {\n at: path,\n indent: node[KEYS.indent] as number,\n listStyleType,\n });\n } else {\n editor.tf.unsetNodes(KEYS.listChecked, { at: path });\n setListNode(editor, {\n at: path,\n indent: node[KEYS.indent] as number,\n listStyleType,\n });\n }\n });\n });\n};\n","import type { Editor, NodeEntry } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport { ListStyleType } from '../types';\nimport { type ListOptions, indentList, indentTodo } from './indentList';\n\n/** Set indent list if not set. */\nexport const toggleListSet = (\n editor: Editor,\n [node, _path]: NodeEntry,\n { listStyleType = ListStyleType.Disc, ...options }: ListOptions\n) => {\n if (Object.hasOwn(node, KEYS.listChecked) || node[KEYS.listType]) return;\n if (listStyleType === 'todo') {\n indentTodo(editor as any, {\n listStyleType,\n ...options,\n });\n } else {\n indentList(editor as any, {\n listStyleType,\n ...options,\n });\n }\n\n return true;\n};\n","import type { Editor, NodeEntry } from 'platejs';\n\nimport { KEYS } from 'platejs';\n\nimport { ListStyleType } from '../types';\nimport { outdentList } from './outdentList';\n\n/** Unset list style type if already set. */\nexport const toggleListUnset = (\n editor: Editor,\n [node, path]: NodeEntry,\n {\n listStyleType = ListStyleType.Disc,\n }: {\n listStyleType?: string;\n }\n) => {\n if (\n listStyleType === KEYS.listTodo &&\n Object.hasOwn(node, KEYS.listChecked)\n ) {\n editor.tf.unsetNodes(KEYS.listChecked, { at: path });\n outdentList(editor as any, { listStyleType });\n\n return true;\n }\n if (listStyleType === node[KEYS.listType]) {\n editor.tf.unsetNodes([KEYS.listType], {\n at: path,\n });\n\n outdentList(editor as any, { listStyleType });\n\n return true;\n }\n};\n","import type { ElementEntryOf, ElementOf, SlateEditor, TElement } from 'platejs';\n\nimport { getInjectMatch, KEYS } from 'platejs';\n\nimport type { ListOptions } from './indentList';\n\nimport { BaseListPlugin } from '../BaseListPlugin';\nimport {\n type GetSiblingListOptions,\n getListAbove,\n getPreviousList,\n} from '../queries';\nimport { areEqListStyleType } from '../queries/areEqListStyleType';\nimport { setListNodes } from './setListNodes';\nimport { setListSiblingNodes } from './setListSiblingNodes';\nimport { toggleListSet } from './toggleListSet';\nimport { toggleListUnset } from './toggleListUnset';\n\n/** Toggle indent list. */\nexport const toggleList = <\n N extends ElementOf<E>,\n E extends SlateEditor = SlateEditor,\n>(\n editor: E,\n options: ListOptions,\n getSiblingListOptions?: GetSiblingListOptions<N, E>\n) => {\n const { listRestart, listRestartPolite, listStyleType } = options;\n\n /**\n * True - One or more blocks were converted to lists or changed such that they\n * remain lists.\n *\n * False - One or more list blocks were unset.\n *\n * Null - No action was taken.\n */\n const setList = ((): boolean | null => {\n const { getSiblingListOptions: _getSiblingListOptions } =\n editor.getOptions(BaseListPlugin);\n\n if (editor.api.isCollapsed()) {\n const entry = editor.api.block<TElement>();\n\n if (!entry) return null;\n if (toggleListSet(editor, entry, options)) {\n return true;\n }\n if (toggleListUnset(editor, entry, { listStyleType })) {\n return false;\n }\n\n setListSiblingNodes(editor, entry as ElementEntryOf<E>, {\n getSiblingListOptions: {\n ..._getSiblingListOptions,\n ...getSiblingListOptions,\n } as GetSiblingListOptions<ElementOf<E>, E>,\n listStyleType,\n });\n\n return true;\n }\n if (editor.api.isExpanded()) {\n const match = getInjectMatch(\n editor,\n editor.getPlugin({ key: KEYS.list })\n );\n const _entries = editor.api.nodes<TElement>({ block: true, match });\n const entries = [..._entries];\n\n const eqListStyleType = areEqListStyleType(editor, entries, {\n listStyleType,\n });\n\n if (eqListStyleType) {\n editor.tf.withoutNormalizing(() => {\n entries.forEach((entry) => {\n const [node, path] = entry;\n\n const indent = node[KEYS.indent] as number;\n\n editor.tf.unsetNodes(KEYS.listType, { at: path });\n\n if (indent > 1) {\n editor.tf.setNodes({ [KEYS.indent]: indent - 1 }, { at: path });\n } else {\n editor.tf.unsetNodes([KEYS.indent, KEYS.listChecked], {\n at: path,\n });\n }\n // setListNode(editor, {\n // listStyleType,\n // indent: node[KEYS.indent],\n // at: path,\n // });\n });\n });\n\n return false;\n }\n\n setListNodes(editor, entries, { listStyleType });\n return true;\n }\n\n return null;\n })();\n\n // Apply listRestart or listRestartPolite if applicable\n const restartValue = listRestart || listRestartPolite;\n const isRestart = !!listRestart;\n\n if (setList && restartValue) {\n const atStart = editor.api.start(editor.selection!);\n const entry = getListAbove(editor, { at: atStart });\n if (!entry) return;\n\n const isFirst = !getPreviousList(editor, entry);\n\n /**\n * Only apply listRestartPolite if this is the first item and restartValue >\n * 1.\n */\n if (!isRestart && (!isFirst || restartValue <= 0)) return;\n\n // If restartValue is 1, only apply listRestart if this is not the first\n if (isRestart && restartValue === 1 && isFirst) return;\n\n const prop = isRestart ? KEYS.listRestart : KEYS.listRestartPolite;\n\n editor.tf.setNodes({ [prop]: restartValue }, { at: entry[1] });\n }\n};\n","import { type NodeEntry, type SlateEditor, KEYS } from 'platejs';\n\nexport const toggleListByPath = (\n editor: SlateEditor,\n [node, path]: NodeEntry,\n listStyleType: string\n) => {\n editor.tf.setNodes(\n {\n [KEYS.indent]: node.indent ?? 1,\n // TODO: normalized if not todo remove this property.\n [KEYS.listChecked]: false,\n [KEYS.listType]: listStyleType,\n type: KEYS.p,\n },\n {\n at: path,\n }\n );\n};\n\nexport const toggleListByPathUnSet = (\n editor: SlateEditor,\n [, path]: NodeEntry\n) =>\n editor.tf.unsetNodes([KEYS.listType, KEYS.indent, KEYS.listChecked], {\n at: path,\n });\n","import type { OverrideEditor, TElement } from 'platejs';\n\nimport type { BaseListConfig } from './BaseListPlugin';\n\nimport { normalizeListNotIndented } from './normalizers/normalizeListNotIndented';\nimport { normalizeListStart } from './normalizers/normalizeListStart';\n\nexport const withNormalizeList: OverrideEditor<BaseListConfig> = ({\n editor,\n getOptions,\n tf: { normalizeNode },\n}) => ({\n transforms: {\n normalizeNode([node, path]) {\n const normalized = editor.tf.withoutNormalizing(() => {\n if (normalizeListNotIndented(editor, [node, path])) return true;\n if (\n normalizeListStart(\n editor,\n [node as TElement, path],\n getOptions().getSiblingListOptions\n )\n )\n return true;\n });\n\n if (normalized) return;\n\n return normalizeNode([node, path]);\n },\n },\n});\n","import {\n type NodeEntry,\n type OverrideEditor,\n type Path,\n type TElement,\n type TNode,\n KEYS,\n PathApi,\n} from 'platejs';\n\nimport type { BaseListConfig } from './BaseListPlugin';\n\nimport { withInsertBreakList } from './normalizers';\nimport { normalizeListStart } from './normalizers/normalizeListStart';\nimport { getNextList } from './queries/getNextList';\nimport { getPreviousList } from './queries/getPreviousList';\nimport { outdentList } from './transforms';\nimport { ListStyleType } from './types';\nimport { withNormalizeList } from './withNormalizeList';\n\nexport const withList: OverrideEditor<BaseListConfig> = (ctx) => {\n const {\n editor,\n getOptions,\n tf: { apply, resetBlock },\n } = ctx;\n\n return {\n transforms: {\n resetBlock(options) {\n if (editor.api.block(options)?.[0]?.[KEYS.listType]) {\n outdentList(editor);\n return;\n }\n\n return resetBlock(options);\n },\n ...withNormalizeList(ctx).transforms,\n // ...withDeleteBackwardList(ctx).transforms,\n ...withInsertBreakList(ctx).transforms,\n apply(operation) {\n const { getSiblingListOptions } = getOptions();\n\n /**\n * If there is a previous indent list, the inserted indent list style\n * type should be the same. Only for lower-roman and upper-roman as it\n * overlaps with lower-alpha and upper-alpha.\n */\n if (operation.type === 'insert_node') {\n const listStyleType = operation.node[KEYS.listType];\n\n if (\n listStyleType &&\n ['lower-roman', 'upper-roman'].includes(\n listStyleType as ListStyleType\n )\n ) {\n const prevNodeEntry = getPreviousList<TElement>(\n editor,\n [operation.node as TElement, operation.path],\n {\n breakOnEqIndentNeqListStyleType: false,\n eqIndent: false,\n ...getSiblingListOptions,\n }\n );\n\n if (prevNodeEntry) {\n const prevListStyleType = prevNodeEntry[0][KEYS.listType];\n\n if (\n prevListStyleType === ListStyleType.LowerAlpha &&\n listStyleType === ListStyleType.LowerRoman\n ) {\n operation.node[KEYS.listType] = ListStyleType.LowerAlpha;\n } else if (\n prevListStyleType === ListStyleType.UpperAlpha &&\n listStyleType === ListStyleType.UpperRoman\n ) {\n operation.node[KEYS.listType] = ListStyleType.UpperAlpha;\n }\n }\n }\n }\n\n /**\n * When inserting a line break, remove listRestart and listRestartPolite\n * from the new list item.\n */\n if (\n operation.type === 'split_node' &&\n (operation.properties as any)[KEYS.listType]\n ) {\n delete (operation.properties as any)[KEYS.listRestart];\n delete (operation.properties as any)[KEYS.listRestartPolite];\n\n // (operation.properties as any)[KEYS.listRestart] = undefined;\n // (operation.properties as any)[KEYS.listRestartPolite] = undefined;\n }\n\n apply(operation);\n\n // Normalize all list items affected by the operation\n const affectedPaths: Path[] = [];\n\n switch (operation.type) {\n case 'insert_node':\n case 'remove_node':\n case 'set_node': {\n affectedPaths.push(operation.path);\n break;\n }\n case 'merge_node': {\n affectedPaths.push(PathApi.previous(operation.path)!);\n break;\n }\n case 'move_node': {\n affectedPaths.push(operation.path, operation.newPath);\n break;\n }\n case 'split_node': {\n affectedPaths.push(operation.path, PathApi.next(operation.path));\n break;\n }\n }\n\n const isListItem = (node: TNode) => KEYS.listType in node;\n\n affectedPaths.forEach((affectedPath) => {\n let entry = editor.api.node(affectedPath);\n if (!entry) return;\n\n /**\n * Even if the affected node isn't a list item, the subsequent node\n * might be, in which case we want to normalize that node instead.\n */\n if (!isListItem(entry[0])) {\n entry = editor.api.node(PathApi.next(affectedPath));\n }\n\n // Normalize the entire list from the affected node onwards\n while (entry && isListItem(entry[0])) {\n const normalized = normalizeListStart<TElement>(\n editor,\n entry as NodeEntry<TElement>,\n getSiblingListOptions\n );\n\n /**\n * Break early since the subsequent list items will already have\n * been normalized by the `apply` that modified the current node.\n */\n if (normalized) break;\n\n entry = getNextList<TElement>(\n editor,\n entry as NodeEntry<TElement>,\n {\n ...getSiblingListOptions,\n breakOnEqIndentNeqListStyleType: false,\n breakOnLowerIndent: false,\n eqIndent: false,\n }\n );\n }\n });\n },\n },\n };\n};\n","import React from 'react';\n\nimport type { SlateRenderElementProps } from 'platejs/static';\n\nimport {\n type PluginConfig,\n type TElement,\n type TListElement,\n createTSlatePlugin,\n isDefined,\n isHtmlBlockElement,\n KEYS,\n postCleanHtml,\n traverseHtmlElements,\n} from 'platejs';\n\nimport type { GetSiblingListOptions } from './queries/getSiblingList';\nimport type { ListStyleType } from './types';\n\nimport { isOrderedList } from './queries';\nimport { withList } from './withList';\n\n/**\n * All list items are normalized to have a listStart prop indicating their\n * position in the list (unless listStart would be 1, in which case it is\n * omitted).\n *\n * ListRestart causes listStart to restart from the given number, regardless of\n * any previous listStart.\n *\n * ListRestartPolite acts like listRestart, except it only takes effect for list\n * items at the start of a list. When not at the start of a list, this prop is\n * ignored, although it is not removed and may take effect in the future.\n */\n\nexport type BaseListConfig = PluginConfig<\n 'list',\n {\n getSiblingListOptions?: GetSiblingListOptions<TElement>;\n /** Map html element to list style type. */\n getListStyleType?: (element: HTMLElement) => ListStyleType;\n }\n>;\n\nexport const BaseListPlugin = createTSlatePlugin<BaseListConfig>({\n key: KEYS.list,\n inject: {\n plugins: {\n [KEYS.html]: {\n parser: {\n transformData: ({ data }) => {\n const document = new DOMParser().parseFromString(data, 'text/html');\n const { body } = document;\n\n // First pass: flatten nested UL/OL that are inside LI elements\n // We need to move them to be siblings of their parent LI\n const lisWithNestedLists: {\n li: Element;\n nestedLists: Element[];\n }[] = [];\n\n traverseHtmlElements(body, (element) => {\n if (element.tagName === 'LI') {\n const nestedLists: Element[] = [];\n // Find nested UL/OL elements\n Array.from(element.children).forEach((child) => {\n if (child.tagName === 'UL' || child.tagName === 'OL') {\n nestedLists.push(child);\n }\n });\n\n if (nestedLists.length > 0) {\n lisWithNestedLists.push({ li: element, nestedLists });\n }\n }\n return true;\n });\n\n // Move nested lists to be after their parent LI\n lisWithNestedLists.forEach(({ li, nestedLists }) => {\n nestedLists.forEach((nestedList) => {\n // Remove the nested list from inside the LI\n nestedList.remove();\n // Insert it after the LI in the parent container\n if (li.parentNode) {\n li.parentNode.insertBefore(nestedList, li.nextSibling);\n }\n });\n });\n\n // Second pass: process LI elements (now without nested lists inside them)\n traverseHtmlElements(body, (element) => {\n if (element.tagName === 'LI') {\n const htmlElement = element as HTMLElement;\n const { childNodes } = element;\n\n // Process li children and flatten block elements\n const liChildren: Node[] = [];\n\n childNodes.forEach((child) => {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const childElement = child as Element;\n if (isHtmlBlockElement(childElement)) {\n // Replace block elements (e.g. p) with their children\n liChildren.push(...childElement.childNodes);\n return;\n }\n }\n liChildren.push(child);\n });\n\n element.replaceChildren(...liChildren);\n\n // Check for aria-level first (Google Docs uses this)\n const ariaLevel = element.getAttribute('aria-level');\n\n if (ariaLevel) {\n // aria-level takes precedence\n htmlElement.dataset.indent = ariaLevel;\n } else {\n // Calculate indent level based on nested UL/OL parents\n let indent = 0;\n let parent = element.parentElement;\n while (parent && parent !== body) {\n if (parent.tagName === 'UL' || parent.tagName === 'OL') {\n indent++;\n }\n parent = parent.parentElement;\n }\n\n // Set indent level as data attribute\n if (indent > 0) {\n htmlElement.dataset.indent = String(indent);\n }\n }\n\n // Set list style type from inline style or parent list type\n const listStyleType = htmlElement.style.listStyleType;\n if (listStyleType) {\n htmlElement.dataset.listStyleType = listStyleType;\n } else {\n // Fallback to parent list type\n const listParent = element.closest('ul, ol');\n if (listParent) {\n const parentListStyleType = (listParent as HTMLElement)\n .style.listStyleType;\n if (parentListStyleType) {\n htmlElement.dataset.listStyleType = parentListStyleType;\n } else if (listParent.tagName === 'UL') {\n htmlElement.dataset.listStyleType = 'disc';\n } else if (listParent.tagName === 'OL') {\n htmlElement.dataset.listStyleType = 'decimal';\n }\n }\n }\n\n return false;\n }\n\n return true;\n });\n\n return postCleanHtml(body.innerHTML);\n },\n },\n },\n },\n targetPlugins: [KEYS.p],\n },\n options: {\n getListStyleType: (element) => element.style.listStyleType as ListStyleType,\n },\n parsers: {\n html: {\n deserializer: {\n isElement: true,\n rules: [\n {\n validNodeName: 'LI',\n },\n ],\n parse: ({ editor, element, getOptions }) => {\n // Get indent from data-indent or aria-level (gdoc)\n const dataIndent = element.dataset.indent;\n const ariaLevel = element.getAttribute('aria-level');\n const indent = dataIndent ? Number(dataIndent) : Number(ariaLevel);\n\n // Get list style type from data attribute or use default\n const dataListStyleType = element.dataset.listStyleType;\n const listStyleType =\n dataListStyleType || getOptions().getListStyleType?.(element);\n\n return {\n indent: indent || undefined,\n listStyleType: listStyleType || undefined,\n type: editor.getType(KEYS.p),\n };\n },\n },\n },\n },\n render: {\n belowNodes: (props) => {\n if (!props.element.listStyleType) return;\n\n return (props) => <List {...(props as SlateRenderElementProps)} />;\n },\n },\n rules: {\n break: {\n empty: 'reset',\n splitReset: false,\n },\n delete: {\n start: 'reset',\n },\n merge: {\n removeEmpty: false,\n },\n match: ({ node }) => isDefined(node[KEYS.listType]),\n },\n}).overrideEditor(withList);\n\nfunction List(props: SlateRenderElementProps) {\n const { listStart, listStyleType } = props.element as TListElement;\n const List = isOrderedList(props.element) ? 'ol' : 'ul';\n\n return (\n <List\n style={{ listStyleType, margin: 0, padding: 0, position: 'relative' }}\n start={listStart}\n >\n <li>{props.children}</li>\n </List>\n );\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lofcz/platejs-list",
|
|
3
|
+
"version": "52.0.11",
|
|
4
|
+
"description": "List plugin for Plate",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"plate",
|
|
7
|
+
"plugin",
|
|
8
|
+
"slate"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://platejs.org",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/udecode/plate/issues"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/lofcz/plate.git",
|
|
17
|
+
"directory": "packages/list"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"exports": {
|
|
22
|
+
".": "./dist/index.js",
|
|
23
|
+
"./react": "./dist/react/index.js",
|
|
24
|
+
"./package.json": "./package.json"
|
|
25
|
+
},
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"files": [
|
|
29
|
+
"dist/**/*"
|
|
30
|
+
],
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"clsx": "^2.1.1",
|
|
33
|
+
"lodash": "^4.17.23",
|
|
34
|
+
"react-compiler-runtime": "^1.0.0",
|
|
35
|
+
"@platejs/indent": "npm:@lofcz/platejs-indent@52.0.11"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@plate/scripts": "1.0.0"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"platejs": ">=52.0.11",
|
|
42
|
+
"react": ">=18.0.0",
|
|
43
|
+
"react-dom": ">=18.0.0"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"type": "module",
|
|
49
|
+
"module": "./dist/index.js",
|
|
50
|
+
"scripts": {
|
|
51
|
+
"brl": "plate-pkg p:brl",
|
|
52
|
+
"build": "plate-pkg p:build",
|
|
53
|
+
"build:watch": "plate-pkg p:build:watch",
|
|
54
|
+
"clean": "plate-pkg p:clean",
|
|
55
|
+
"lint": "plate-pkg p:lint",
|
|
56
|
+
"lint:fix": "plate-pkg p:lint:fix",
|
|
57
|
+
"test": "plate-pkg p:test",
|
|
58
|
+
"test:watch": "plate-pkg p:test:watch",
|
|
59
|
+
"typecheck": "plate-pkg p:typecheck"
|
|
60
|
+
}
|
|
61
|
+
}
|