import { readFileSync } from 'node:fs' import { afterEach, describe, expect, it } from 'vitest' const stylesheet = readFileSync('src/styles.css', 'utf8') const tailwindListReset = ` ol, ul, menu { list-style: none; margin: 0; padding: 0; } ` function getComputedLists() { const lists = [...document.querySelectorAll('.note-markdown ol, .note-markdown ul')] return lists.map((list) => ({ tagName: list.tagName, style: window.getComputedStyle(list), })) } describe('reading-view Markdown list styles', () => { afterEach(() => { document.head.querySelector('[data-test-reading-view-styles]')?.remove() document.body.innerHTML = '' }) it('restores markers and indentation after the Tailwind list reset', () => { const style = document.createElement('style') style.dataset.testReadingViewStyles = 'true' style.textContent = `${tailwindListReset}\n${stylesheet.replace(/^@import[^;]+;\s*/, '')}` document.head.append(style) document.body.innerHTML = `
  1. First ordered item
  2. Second ordered item
    • Nested unordered item
` const lists = getComputedLists() const orderedLists = lists.filter(({ tagName }) => tagName === 'OL') const unorderedLists = lists.filter(({ tagName }) => tagName === 'UL') expect(orderedLists).toHaveLength(2) expect(unorderedLists).toHaveLength(2) expect(orderedLists.every(({ style }) => style.listStyleType === 'decimal')).toBe(true) expect(unorderedLists.every(({ style }) => style.listStyleType === 'disc')).toBe(true) expect(lists.every(({ style }) => style.paddingLeft === '22px')).toBe(true) expect(lists.every(({ style }) => style.marginTop === '16px' && style.marginBottom === '16px')).toBe(true) }) })