diff --git a/.build/check-html.ts b/.build/check-html.ts index 0568c77e0..f96b2512f 100644 --- a/.build/check-html.ts +++ b/.build/check-html.ts @@ -137,9 +137,15 @@ const crawl = async (browser: Browser, base: string, paths: string[]) => { const path = queue.shift()! const page: Page = await context.newPage() const report: PageReport = { url: path, errors: [], warnings: [] } - page.on('pageerror', (e) => report.errors.push(`script error: ${String(e).slice(0, 160)}`)) + // A page can send the browser off the site, like changelog.html does. What + // it lands on is someone else's, so nothing it logs, throws or contains is + // ours to report. + const onSite = () => page.url().startsWith(base) + page.on('pageerror', (e) => { + if (onSite()) report.errors.push(`script error: ${String(e).slice(0, 160)}`) + }) page.on('console', (m) => { - if (m.type() !== 'error') return + if (m.type() !== 'error' || !onSite()) return const text = m.text() if (!CONSOLE_IGNORE.some((re) => re.test(text))) report.warnings.push(`console: ${text.slice(0, 160)}`) }) @@ -150,15 +156,17 @@ const crawl = async (browser: Browser, base: string, paths: string[]) => { try { await page.goto(base + path, { waitUntil: 'load', timeout: 60_000 }) await page.waitForTimeout(500) - const r = (await page.evaluate(INSPECT)) as Inspection - for (const id of r.duplicateIds) if (!VENDOR_ID_PREFIXES.some((p) => id.startsWith(p))) report.errors.push(`duplicate id "${id}"`) - for (const t of r.missingTargets) report.errors.push(`no element for ${t}`) - for (const n of r.nested) report.errors.push(`nested interactive: ${n}`) - for (const src of r.imgNoAlt) report.warnings.push(`img without alt: ${src}`) - for (const html of r.unnamed) report.warnings.push(`no accessible name: ${html}`) - for (const href of r.links) { - const key = href.split(/[?#]/)[0]! - if (!links.has(key)) links.set(key, path) + if (onSite()) { + const r = (await page.evaluate(INSPECT)) as Inspection + for (const id of r.duplicateIds) if (!VENDOR_ID_PREFIXES.some((p) => id.startsWith(p))) report.errors.push(`duplicate id "${id}"`) + for (const t of r.missingTargets) report.errors.push(`no element for ${t}`) + for (const n of r.nested) report.errors.push(`nested interactive: ${n}`) + for (const src of r.imgNoAlt) report.warnings.push(`img without alt: ${src}`) + for (const html of r.unnamed) report.warnings.push(`no accessible name: ${html}`) + for (const href of r.links) { + const key = href.split(/[?#]/)[0]! + if (!links.has(key)) links.set(key, path) + } } } catch (e) { report.errors.push(`navigation: ${String(e).slice(0, 160)}`) diff --git a/.build/release-notes.ts b/.build/release-notes.ts index e12468435..da3a796c3 100644 --- a/.build/release-notes.ts +++ b/.build/release-notes.ts @@ -31,7 +31,11 @@ const { version } = JSON.parse(readFileSync(join(repoRoot, 'core', 'package.json // The `## ` block of a changelog, without its heading. const versionBlock = (changelog: string): string => { const lines = changelog.split('\n') - const start = lines.findIndex((line) => line.trim() === `## ${version}`) + // `## 1.5.0`, or `## 1.5.0 - 2026-09-05` once the date has been stamped on it. + const start = lines.findIndex((line) => { + const heading = line.trim() + return heading === `## ${version}` || heading.startsWith(`## ${version} - `) + }) if (start === -1) return '' const rest = lines.slice(start + 1) diff --git a/.build/stamp-changelog-dates.ts b/.build/stamp-changelog-dates.ts new file mode 100644 index 000000000..4b5446aec --- /dev/null +++ b/.build/stamp-changelog-dates.ts @@ -0,0 +1,44 @@ +#!/usr/bin/env node +// Adds the release date to the heading `changeset version` has just written, so +// every entry in a changelog reads `## 1.5.0 - 2026-09-05`. +// +// The date is the day the version pull request was last regenerated, which the +// bot redoes on every push to dev. It can therefore be a day or two before the +// release when nothing lands in between. +// +// Run: pnpm run stamp-changelog-dates (part of `pnpm run version`) + +import { existsSync, readFileSync, writeFileSync } from 'node:fs' +import { join, dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) +const repoRoot = join(__dirname, '..') + +const packages = ['core', 'preview', 'docs'] + +interface PackageJson { + version: string +} + +const today = new Date().toISOString().slice(0, 10) +const stamped: string[] = [] + +for (const name of packages) { + const changelog = join(repoRoot, name, 'CHANGELOG.md') + if (!existsSync(changelog)) continue + + const { version } = JSON.parse(readFileSync(join(repoRoot, name, 'package.json'), 'utf8')) as PackageJson + const content = readFileSync(changelog, 'utf8') + + // Only a heading without a date, so running this twice changes nothing. + const lines = content.split('\n') + const index = lines.findIndex((line) => line.trim() === `## ${version}`) + if (index === -1) continue + + lines[index] = `## ${version} - ${today}` + writeFileSync(changelog, lines.join('\n')) + stamped.push(`${name}/CHANGELOG.md: ## ${version} - ${today}`) +} + +console.log(stamped.length > 0 ? stamped.join('\n') : 'Nothing to stamp.') diff --git a/.changeset/changelog-page-redirect.md b/.changeset/changelog-page-redirect.md new file mode 100644 index 000000000..e0f8a923e --- /dev/null +++ b/.changeset/changelog-page-redirect.md @@ -0,0 +1,5 @@ +--- +"@tabler/preview": patch +--- + +Updated the changelog page to redirect to tabler.io/changelog instead of rendering `CHANGELOG.md`. diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 8c3cfe935..3805077cb 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -1,6 +1,6 @@ # @tabler/core -## 1.4.0 +## 1.4.0 - 2025-07-13 ### Minor Changes @@ -19,19 +19,19 @@ - 666a296: Fix list group item hoverable only with `.list-group-hoverable` class - cfd4cb6: Fix `.pagination-link` hover styles to non-active items -## 1.3.2 +## 1.3.2 - 2025-05-19 ### Patch Changes - 446c34e: Fix README file in core package -## 1.3.1 +## 1.3.1 - 2025-05-19 ### Patch Changes - a7f73d7: Fix README file in core package -## 1.3.0 +## 1.3.0 - 2025-05-19 ### Minor Changes @@ -61,7 +61,7 @@ - e675389: Fix missing border-radius to `.card-header-tabs` - 9007e73: Fix FAQ accordion structure -## 1.2.0 +## 1.2.0 - 2025-04-16 ### Minor Changes @@ -96,13 +96,13 @@ - 6d6d1bd: Add responsive font size for form controls on mobile devices - 6c566cf: Add new advanced table example -## 1.1.1 +## 1.1.1 - 2025-03-01 ### Patch Changes - f29c911: Fix Documentation structure -## 1.1.0 +## 1.1.0 - 2025-03-01 ### Minor Changes @@ -255,14 +255,14 @@ - 94b83d4: Add support for changeset tool for more efficient and organized code changes - c51ff28: Fix colors in date range datepicker -## `1.0.0-beta24` - 2025-01-11 +## 1.0.0-beta24 - 2025-01-11 - Enhanced documentation. - Updated illustrations and improved SVG handling in HTML. - Updated copyright year in LICENSE file to 2025. - Added marketing pages plugin. -## `1.0.0-beta23` - 2025-01-07 +## 1.0.0-beta23 - 2025-01-07 - Documentation improvements. - Added countup functionality and updated documentation example. @@ -299,7 +299,7 @@ - Fixed icon issues. - Fixed URL in documentation. -## `1.0.0-beta22` - 2025-01-02 +## 1.0.0-beta22 - 2025-01-02 - Fixed `@charset` CSS declaration in bundle. - Fixed cells with inline icons. @@ -322,7 +322,7 @@ - Read changelog from `CHANGELOG.md` file. - Initialized VS Code configuration. -## `1.0.0-beta21` - 2024-09-8 +## 1.0.0-beta21 - 2024-09-08 - Updated dependencies. - Updated Tabler Icons to v3.14.0 and the import script. @@ -359,7 +359,7 @@ - Improved heights, scrolls, and layouts in Docs examples. - Fixed flags display in preview. -## `1.0.0-beta20` - 2023-08-24 +## 1.0.0-beta20 - 2023-08-24 - Update `bootstrap` to v5.3.1 - Add new `Chat` component @@ -385,7 +385,7 @@ - `Dockerfile` fix - Switch from `npm` to `pnpm` for faster package installation -## `1.0.0-beta19` - 2023-05-15 +## 1.0.0-beta19 - 2023-05-15 - Add customizable Star Ratings component using `star-rating.js` library (#1571) - Add new "Filled" section to Icons page (#1574) @@ -393,7 +393,7 @@ - Fix text color in dark version of navbar (#1569) - Changelog update -## `1.0.0-beta18` - 2023-05-14 +## 1.0.0-beta18 - 2023-05-14 - new page: Cookie banner - Unify dark mode with latest Bootstrap API and improve dark mode elements (#1561) @@ -416,7 +416,7 @@ - Dark mode lite colors improvement - Fix non full width selects (#1392) -## `1.0.0-beta17` - 2023-01-28 +## 1.0.0-beta17 - 2023-01-28 - update `bootstrap` to v5.3.0 - update icons to v2.1.2 @@ -438,7 +438,7 @@ - move `@tabler/icons` to `dev-dependencies` - fix #1370: avatar stacked list is not stacked anymore -## `1.0.0-beta16` - 2022-11-12 +## 1.0.0-beta16 - 2022-11-12 - new `Photogrid` page - `Steps` component improvements @@ -452,7 +452,7 @@ - homepage navbar fix - fix #1262 - `.bg-opacity-xx` class is not functioning properly -## `1.0.0-beta15` - 2022-11-01 +## 1.0.0-beta15 - 2022-11-01 - new `badges` page - `` styling @@ -469,12 +469,12 @@ - `btn-actions` fixes - replace `$text-muted` to css variable -## `1.0.0-beta14` - 2022-10-21 +## 1.0.0-beta14 - 2022-10-21 - fix active items in dark mode - update Jekyll to newest version -## `1.0.0-beta13` - 2022-10-18 +## 1.0.0-beta13 - 2022-10-18 - update Bootstrap to 5.2.1, update dependencies - new `tracking` component @@ -504,7 +504,7 @@ - fix #1275 - remove last border-right on progress bar - fix #1261 - broken offcanvas bg -## `1.0.0-beta12` - 2022-09-19 +## 1.0.0-beta12 - 2022-09-19 - new "Job listing" page - new "Sign in with cover" page @@ -529,7 +529,7 @@ - fix form elements demo page radio buttons - replace `gulp-minify` with `gulp-terser` -## `1.0.0-beta11` - 2022-07-05 +## 1.0.0-beta11 - 2022-08-05 - new `Dropzone` component - new `Lightbox` component @@ -544,7 +544,7 @@ - fix: #1125 incorrect chart display in the mobile version - update Bootstrap to 5.2.0 -## `1.0.0-beta10` - 2022-04-29 +## 1.0.0-beta10 - 2022-04-29 - new `datatable` component - update Tabler Icons to v1.67 @@ -553,7 +553,7 @@ - replace !important modifier with more specific selectors (#1100) - new `FAQ` page -## `1.0.0-beta9` - 2022-02-26 +## 1.0.0-beta9 - 2022-02-26 - fix: #1061 - list group item colors in light and dark modes - new `tasks` dashboard @@ -566,7 +566,7 @@ - add `font-display: swap;` to improve font loading - new `Boxed` layout -## `1.0.0-beta8` - 2022-02-05 +## 1.0.0-beta8 - 2022-02-05 - update dependencies - new vector maps demos @@ -575,7 +575,7 @@ - replace `badge` with `status-dot` in `navbar-notifications.html` - map tooltip fixes -## `1.0.0-beta7` - 2022-02-05 +## 1.0.0-beta7 - 2022-02-05 - fix: #1019 - project-overview.html link not working - fix: #1010 - card with bottom tabs has incorrect border radius @@ -588,7 +588,7 @@ - RTL stylesheet fixes - new card action demos -## `1.0.0-beta6` - 2022-01-18 +## 1.0.0-beta6 - 2022-01-18 - pricing cards fix - fix bug `fw-...`, `.fs-...` is missed (#987) @@ -601,7 +601,7 @@ - fix #959 - `node-sass` does not properly compile nested media queries - update package dependencies to newest version -## `1.0.0-beta5` - 2021-12-07 +## 1.0.0-beta5 - 2021-12-07 **Tabler has finally lived to see dark mode! 🌝🌚** @@ -618,7 +618,7 @@ - colors unify - add `tom-select` and remove `choices.js` -## `1.0.0-beta4` - 2021-10-24 +## 1.0.0-beta4 - 2021-10-24 - upgrade required node.js version to 14 - upgrade Bootstrap to 5.1 @@ -626,14 +626,14 @@ - fix #775 - litepicker not initializing - fix `nouislider` import in dev -## `1.0.0-beta3` - 2021-05-08 +## 1.0.0-beta3 - 2021-05-08 - upgrade Bootstrap to 5.0 - upgrade dependencies - change `$border-radius-pill` variable - badge vertical align fix -## `1.0.0-beta2` - 2021-03-29 +## 1.0.0-beta2 - 2021-03-29 - update dependencies - `li` marker fix @@ -646,7 +646,7 @@ - charts label fixes - charts docs -## `1.0.0-beta` - 2021-02-17 +## 1.0.0-beta - 2021-02-17 **Initial beta release of Tabler v1.0! Lots more coming soon though 😁** diff --git a/package.json b/package.json index e043a4f4b..b3702afec 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "test": "turbo test", "test:watch": "turbo test:watch", "test:coverage": "turbo test:coverage", - "version": "changeset version", + "version": "changeset version && pnpm run stamp-changelog-dates", + "stamp-changelog-dates": "tsx .build/stamp-changelog-dates.ts", "publish": "changeset publish", "format:md": "tsx .build/reformat-mdx.mts", "html-diff": "tsx .build/html-diff.ts check", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1657d7b79..693b2ae10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -328,9 +328,6 @@ importers: '@tabler/core': specifier: workspace:* version: link:../core - markdown-it: - specifier: ^15.0.1 - version: 15.0.1 shiki: specifier: ^4.4.3 version: 4.4.3 @@ -2404,9 +2401,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - argparse@3.0.1: - resolution: {integrity: sha512-nM4mHF/KM1v59ZNKX7zfusQz5wUAxR511YG8Vo6TyiV4aqhu++rbJW4v04xsWhpSsHFj66flT8P7znVpyO20xQ==} - aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -2861,10 +2855,6 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - entities@8.0.0: - resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} - engines: {node: '>=20.19.0'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -3624,9 +3614,6 @@ packages: linkify-it@5.0.2: resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - linkify-it@6.1.0: - resolution: {integrity: sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==} - list.js@2.3.1: resolution: {integrity: sha512-jnmm7DYpKtH3DxtO1E2VNCC9Gp7Wrp/FWA2JxQrZUhVJ2RCQBd57pCN6W5w6jpsfWZV0PCAbTX2NOPgyFeeZZg==} engines: {node: ^6.0 || ^8.0 || ^10.0 || ^12.0 || >=14} @@ -3681,10 +3668,6 @@ packages: resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} hasBin: true - markdown-it@15.0.1: - resolution: {integrity: sha512-9/7gE95FNPkfUWrjJIoHZza2iLmuJlPD0UNMxPi7bxUrbCR525YZY0r+zyfes0dZI5ZZ/uNIXUJca0pJvtw41g==} - hasBin: true - markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -3764,9 +3747,6 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - mdurl@2.1.0: - resolution: {integrity: sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==} - meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -4905,9 +4885,6 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - uc.micro@3.0.0: - resolution: {integrity: sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==} - ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -7275,8 +7252,6 @@ snapshots: argparse@2.0.1: {} - argparse@3.0.1: {} - aria-query@5.3.2: {} array-iterate@2.0.1: {} @@ -7874,8 +7849,6 @@ snapshots: entities@6.0.1: {} - entities@8.0.0: {} - env-paths@2.2.1: {} error-ex@1.3.4: @@ -8714,10 +8687,6 @@ snapshots: dependencies: uc.micro: 2.1.0 - linkify-it@6.1.0: - dependencies: - uc.micro: 3.0.0 - list.js@2.3.1: dependencies: string-natural-compare: 2.0.3 @@ -8773,15 +8742,6 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 - markdown-it@15.0.1: - dependencies: - argparse: 3.0.1 - entities: 8.0.0 - linkify-it: 6.1.0 - mdurl: 2.1.0 - punycode.js: 2.3.1 - uc.micro: 3.0.0 - markdown-table@3.0.4: {} markdownlint-cli@0.49.1(supports-color@5.5.0): @@ -9109,8 +9069,6 @@ snapshots: mdurl@2.0.0: {} - mdurl@2.1.0: {} - meow@13.2.0: {} merge-stream@2.0.0: {} @@ -10674,8 +10632,6 @@ snapshots: uc.micro@2.1.0: {} - uc.micro@3.0.0: {} - ufo@1.6.4: {} ultrahtml@1.7.0: {} diff --git a/preview/pages/changelog.astro b/preview/pages/changelog.astro index e18d2ffc9..e518cf8d4 100644 --- a/preview/pages/changelog.astro +++ b/preview/pages/changelog.astro @@ -1,11 +1,8 @@ --- -import ProseLayout from '@shared/layouts/ProseLayout.astro' -import { renderMarkdown } from '@shared/lib/render-markdown' -import changelog from '../../core/CHANGELOG.md?raw' - -const changelogHtml = renderMarkdown(changelog) +// The changelog lives on the website now. The page stays so that the menu link, +// old bookmarks and the copy in the downloadable package all keep working. +import RedirectLayout from '@shared/layouts/RedirectLayout.astro' +import site from '@shared/data/site.json' --- - - - + diff --git a/shared/data/site.json b/shared/data/site.json index 3fb016f40..c944ebbaa 100644 --- a/shared/data/site.json +++ b/shared/data/site.json @@ -10,7 +10,7 @@ "opencollectiveUrl": "https://opencollective.com/tabler", "xUrl": "https://x.com/tabler_io", "linkedinUrl": "https://www.linkedin.com/company/tabler-io", - "changelogUrl": "https://github.com/tabler/tabler/releases", + "changelogUrl": "https://tabler.io/changelog", "previewUrl": "https://preview.tabler.io", "docsUrl": "https://docs.tabler.io", "mapboxKey": "pk.eyJ1IjoidGFibGVyIiwiYSI6ImNscHh3dnhndjB2M3QycW85bGd0NXRmZ3YifQ.9LfHPsNoEXQH-xzz-81Ffw", diff --git a/shared/lib/render-markdown.test.ts b/shared/lib/render-markdown.test.ts deleted file mode 100644 index 250eac823..000000000 --- a/shared/lib/render-markdown.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { renderMarkdown } from './render-markdown' - -describe('renderMarkdown', () => { - it('renders markdown to html', () => { - expect(renderMarkdown('some **bold** text')).toBe('

some bold text

\n') - }) - - it('passes raw html through (html: true)', () => { - expect(renderMarkdown('
y
')).toContain('
y
') - }) - - it('does not treat indented lines as code blocks (code rule disabled)', () => { - expect(renderMarkdown(' indented line')).not.toContain('
')
-  })
-})
diff --git a/shared/lib/render-markdown.ts b/shared/lib/render-markdown.ts
deleted file mode 100644
index 8b75c28f6..000000000
--- a/shared/lib/render-markdown.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// Renders markdown to HTML with markdown-it (html: true, indented code blocks off).
-
-// @ts-ignore -- markdown-it ships no type declarations and @types/markdown-it
-// is intentionally not added (build-time helper only).
-import MarkdownIt from 'markdown-it'
-
-const md = new MarkdownIt({ html: true })
-
-md.disable('code')
-
-/** Render a markdown string to HTML. */
-export function renderMarkdown(src: string): string {
-  return md.render(src)
-}
diff --git a/shared/package.json b/shared/package.json
index f6d0de928..034a892cb 100644
--- a/shared/package.json
+++ b/shared/package.json
@@ -11,8 +11,7 @@
 	},
 	"dependencies": {
 		"shiki": "^4.4.3",
-		"@tabler/core": "workspace:*",
-		"markdown-it": "^15.0.1"
+		"@tabler/core": "workspace:*"
 	},
 	"devDependencies": {
 		"@astrojs/check": "^0.9.4",