@shepai/cli 1.106.3 → 1.106.4-pr327.f3fea88
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/apis/json-schema/FeatureFlags.yaml +5 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +4 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +3 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +11 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +5 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/schemas/spec.schema.js +6 -1
- package/dist/src/presentation/web/app/api/chat/stream/route.d.ts +14 -0
- package/dist/src/presentation/web/app/api/chat/stream/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/chat/stream/route.js +153 -0
- package/dist/src/presentation/web/app/chat/page.d.ts +4 -0
- package/dist/src/presentation/web/app/chat/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/chat/page.js +11 -0
- package/dist/src/presentation/web/components/features/chat/chat-empty-state.d.ts +6 -0
- package/dist/src/presentation/web/components/features/chat/chat-empty-state.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-empty-state.js +14 -0
- package/dist/src/presentation/web/components/features/chat/chat-empty-state.stories.d.ts +7 -0
- package/dist/src/presentation/web/components/features/chat/chat-empty-state.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-empty-state.stories.js +15 -0
- package/dist/src/presentation/web/components/features/chat/chat-header.d.ts +7 -0
- package/dist/src/presentation/web/components/features/chat/chat-header.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-header.js +10 -0
- package/dist/src/presentation/web/components/features/chat/chat-header.stories.d.ts +8 -0
- package/dist/src/presentation/web/components/features/chat/chat-header.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-header.stories.js +20 -0
- package/dist/src/presentation/web/components/features/chat/chat-page-client.d.ts +2 -0
- package/dist/src/presentation/web/components/features/chat/chat-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-page-client.js +50 -0
- package/dist/src/presentation/web/components/features/chat/chat-page-client.stories.d.ts +7 -0
- package/dist/src/presentation/web/components/features/chat/chat-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-page-client.stories.js +15 -0
- package/dist/src/presentation/web/components/features/chat/chat-view.d.ts +24 -0
- package/dist/src/presentation/web/components/features/chat/chat-view.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-view.js +17 -0
- package/dist/src/presentation/web/components/features/chat/chat-view.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/features/chat/chat-view.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-view.stories.js +149 -0
- package/dist/src/presentation/web/components/features/chat/index.d.ts +5 -0
- package/dist/src/presentation/web/components/features/chat/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/index.js +4 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/avatar.d.ts +12 -0
- package/dist/src/presentation/web/components/ui/avatar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/avatar.js +23 -0
- package/dist/src/presentation/web/components/ui/chat-container.d.ts +17 -0
- package/dist/src/presentation/web/components/ui/chat-container.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/chat-container.js +14 -0
- package/dist/src/presentation/web/components/ui/code-block.d.ts +17 -0
- package/dist/src/presentation/web/components/ui/code-block.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/code-block.js +29 -0
- package/dist/src/presentation/web/components/ui/loader.d.ts +60 -0
- package/dist/src/presentation/web/components/ui/loader.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/loader.js +190 -0
- package/dist/src/presentation/web/components/ui/markdown.d.ts +12 -0
- package/dist/src/presentation/web/components/ui/markdown.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/markdown.js +50 -0
- package/dist/src/presentation/web/components/ui/message.d.ts +35 -0
- package/dist/src/presentation/web/components/ui/message.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/message.js +18 -0
- package/dist/src/presentation/web/components/ui/prompt-input.d.ts +30 -0
- package/dist/src/presentation/web/components/ui/prompt-input.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/prompt-input.js +98 -0
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +6 -1
- package/dist/src/presentation/web/hooks/use-chat.d.ts +57 -0
- package/dist/src/presentation/web/hooks/use-chat.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-chat.js +217 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +7 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +2 -0
- package/web/.next/build-manifest.json +7 -7
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/routes-manifest.json +12 -0
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/agent-events/route.js +1 -2
- package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
- package/web/.next/server/app/api/chat/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/chat/stream/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/chat/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/chat/stream/route.js +6 -0
- package/web/.next/server/app/api/chat/stream/route.js.map +5 -0
- package/web/.next/server/app/api/chat/stream/route.js.nft.json +1 -0
- package/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/feature-logs/route.js +1 -1
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/chat/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/chat/page/build-manifest.json +18 -0
- package/web/.next/server/app/chat/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/chat/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/chat/page/server-reference-manifest.json +20 -0
- package/web/.next/server/app/chat/page.js +17 -0
- package/web/.next/server/app/chat/page.js.map +5 -0
- package/web/.next/server/app/chat/page.js.nft.json +1 -0
- package/web/.next/server/app/chat/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/settings/page/build-manifest.json +5 -5
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/build-manifest.json +5 -5
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js +4 -4
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +5 -5
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +5 -5
- package/web/.next/server/app/version/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +2 -0
- package/web/.next/server/chunks/403f9_next_567de315._.js +1 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_chat_stream_route_actions_ea265361.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__91d44424._.js → [root-of-the-server]__52c318d1._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__57104a4c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__7d63f9a4._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__99c20fe5._.js +5 -0
- package/web/.next/server/chunks/[root-of-the-server]__99c20fe5._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a1c7c02a._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__db04ed44._.js → [root-of-the-server]__a5879003._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__aae14de3._.js +6 -0
- package/web/.next/server/chunks/[root-of-the-server]__aae14de3._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_31ea46d3._.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +4 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13482941._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13482941._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f1931f8._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f1931f8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__248ee887._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__26d31159._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__26d31159._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2a6f3e3f._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2a6f3e3f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6803b571._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6803b571._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__845a9d2a._.js → [root-of-the-server]__753f42eb._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__753f42eb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__99857356._.js +61 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__99857356._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9b8f6941._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9b8f6941._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b062b383._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1f9b7ad3._.js → _15dc3761._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1f9b7ad3._.js.map → _15dc3761._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_25eb2abf._.js +4 -0
- package/web/.next/server/chunks/ssr/_25eb2abf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_273d4632._.js +1 -1
- package/web/.next/server/chunks/ssr/_34ba40e0._.js +3 -0
- package/web/.next/server/chunks/ssr/_34ba40e0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_4093a637._.js +5 -0
- package/web/.next/server/chunks/ssr/_4093a637._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_6a2e8373._.js +3 -0
- package/web/.next/server/chunks/ssr/_6a2e8373._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_7ba5f9bd._.js +9 -0
- package/web/.next/server/chunks/ssr/_7ba5f9bd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +2 -2
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_906e9cde._.js +3 -0
- package/web/.next/server/chunks/ssr/_906e9cde._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
- package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_b407679c._.js +3 -0
- package/web/.next/server/chunks/ssr/_b407679c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d7c4fb01._.js +7 -0
- package/web/.next/server/chunks/ssr/_d7c4fb01._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_eb8add9f._.js +4 -0
- package/web/.next/server/chunks/ssr/_eb8add9f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f5316e67._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +3 -0
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +5 -5
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +38 -31
- package/web/.next/static/chunks/0000a3bd9d33363e.js +1 -0
- package/web/.next/static/chunks/{29c29800f5a2acc6.js → 0146cc63e09aa1fc.js} +1 -1
- package/web/.next/static/chunks/01c44c0f52e94d13.js +1 -0
- package/web/.next/static/chunks/025972c91961cb4f.js +1 -0
- package/web/.next/static/chunks/04077bc8814ebb95.js +1 -0
- package/web/.next/static/chunks/040f765faf202f21.js +1 -0
- package/web/.next/static/chunks/0452bf6331941e3f.js +1 -0
- package/web/.next/static/chunks/04abfd0d3656c990.js +1 -0
- package/web/.next/static/chunks/04ba2061ab93d4b4.js +1 -0
- package/web/.next/static/chunks/053a7b986353ec4b.js +1 -0
- package/web/.next/static/chunks/06f273bdc5828685.js +1 -0
- package/web/.next/static/chunks/0749a5b512d6df6b.js +1 -0
- package/web/.next/static/chunks/07720f62d0494cff.js +1 -0
- package/web/.next/static/chunks/07b3a3fe5ed6806c.js +1 -0
- package/web/.next/static/chunks/07ed2655f92b082d.js +1 -0
- package/web/.next/static/chunks/0820c893f5292ab6.js +1 -0
- package/web/.next/static/chunks/08fb03f101641646.js +1 -0
- package/web/.next/static/chunks/0992e1494eb73f73.js +1 -0
- package/web/.next/static/chunks/{b2b65ee0666a829a.js → 0b0f65124c9e6e98.js} +1 -1
- package/web/.next/static/chunks/0b64f70d18b592a9.js +1 -0
- package/web/.next/static/chunks/0b925ca1a402d3cd.js +1 -0
- package/web/.next/static/chunks/0c4d93176dc739f0.js +1 -0
- package/web/.next/static/chunks/0c65283281ae11be.js +1 -0
- package/web/.next/static/chunks/0c82301271695b04.js +1 -0
- package/web/.next/static/chunks/0d6db841c33ab4f1.js +1 -0
- package/web/.next/static/chunks/0d813d73dacd9b43.js +1 -0
- package/web/.next/static/chunks/0dcf159fb9a610e4.js +1 -0
- package/web/.next/static/chunks/0e7dfad45e402b87.js +1 -0
- package/web/.next/static/chunks/0e827c7f60ca4551.js +1 -0
- package/web/.next/static/chunks/0f619c5c402fb9f4.js +1 -0
- package/web/.next/static/chunks/0f83f16fa24fd5d7.js +1 -0
- package/web/.next/static/chunks/0feedea346fd5fbe.js +1 -0
- package/web/.next/static/chunks/12dbfd5ed203fd8c.js +1 -0
- package/web/.next/static/chunks/13ab63bcbd1b9d73.js +1 -0
- package/web/.next/static/chunks/14e6e069b833483c.js +1 -0
- package/web/.next/static/chunks/15049e8c70931a5c.js +1 -0
- package/web/.next/static/chunks/15e9e6d3526dba19.js +1 -0
- package/web/.next/static/chunks/1675a99c138a8dff.js +1 -0
- package/web/.next/static/chunks/18257a988399c500.js +1 -0
- package/web/.next/static/chunks/18b8b7c0f43653ed.js +1 -0
- package/web/.next/static/chunks/1903ea0fc4a1c66a.js +1 -0
- package/web/.next/static/chunks/1a9763ce5ba22b57.js +1 -0
- package/web/.next/static/chunks/1c5a18c436c08be5.js +1 -0
- package/web/.next/static/chunks/1d95a3b4ad425e84.js +1 -0
- package/web/.next/static/chunks/1e88753738d86281.js +1 -0
- package/web/.next/static/chunks/1f5b06b26b55f61e.js +1 -0
- package/web/.next/static/chunks/20e893034947cff0.js +1 -0
- package/web/.next/static/chunks/2199bd4a3f61c371.js +1 -0
- package/web/.next/static/chunks/21f6010e9d824e2b.js +1 -0
- package/web/.next/static/chunks/2277de4cd5d76ea0.js +1 -0
- package/web/.next/static/chunks/23874b32b27bc398.js +1 -0
- package/web/.next/static/chunks/242af1b1794692bb.js +1 -0
- package/web/.next/static/chunks/24ff7613e7640548.js +1 -0
- package/web/.next/static/chunks/255b89458bc45261.js +1 -0
- package/web/.next/static/chunks/256f95ef70dd81c3.js +1 -0
- package/web/.next/static/chunks/2612e5560f8ba2c2.js +1 -0
- package/web/.next/static/chunks/26cc1fb330a4c4ef.js +1 -0
- package/web/.next/static/chunks/2796913db81fa3a0.js +1 -0
- package/web/.next/static/chunks/2a0985b01345546d.js +1 -0
- package/web/.next/static/chunks/2a13aed05cd157cb.js +1 -0
- package/web/.next/static/chunks/2a65cbda6248ac45.js +1 -0
- package/web/.next/static/chunks/2a9e798066780ccb.js +1 -0
- package/web/.next/static/chunks/2aecaa7075dff32c.js +1 -0
- package/web/.next/static/chunks/2aff3eb00311b5ff.js +1 -0
- package/web/.next/static/chunks/2b601943d3e94e5b.js +1 -0
- package/web/.next/static/chunks/2ce5939b18e1a21e.js +1 -0
- package/web/.next/static/chunks/2d204a2a777b935d.js +1 -0
- package/web/.next/static/chunks/2d64b4ffcaccace0.js +1 -0
- package/web/.next/static/chunks/2d890ccc3bdefafa.js +1 -0
- package/web/.next/static/chunks/2e25aca5b7400f56.js +1 -0
- package/web/.next/static/chunks/2ed750fa9ff05fb4.js +1 -0
- package/web/.next/static/chunks/2f1a7ab193aa56ab.js +1 -0
- package/web/.next/static/chunks/2fc0965d77242987.js +1 -0
- package/web/.next/static/chunks/3054fd6667aee1d2.js +1 -0
- package/web/.next/static/chunks/305ea36a55b1b01d.js +1 -0
- package/web/.next/static/chunks/31345772bfb5b56d.js +1 -0
- package/web/.next/static/chunks/31e19c87048a2dd2.js +1 -0
- package/web/.next/static/chunks/32a5dff7a1424ce7.js +1 -0
- package/web/.next/static/chunks/3320db3c4bd922dd.js +1 -0
- package/web/.next/static/chunks/338b409bcf9c5da6.js +1 -0
- package/web/.next/static/chunks/33f71ecfbcc40eb8.js +1 -0
- package/web/.next/static/chunks/35bc063ce1c82d62.js +1 -0
- package/web/.next/static/chunks/366630af12ceb9aa.js +1 -0
- package/web/.next/static/chunks/36a02bc96e797be1.js +1 -0
- package/web/.next/static/chunks/3857a5a593f557b6.js +1 -0
- package/web/.next/static/chunks/38f38199611b387a.js +1 -0
- package/web/.next/static/chunks/39fd8dea78ce33a1.js +1 -0
- package/web/.next/static/chunks/3a9753d40e045b8f.js +1 -0
- package/web/.next/static/chunks/3ae3c50c728eab31.js +11 -0
- package/web/.next/static/chunks/3b811f725088f5ec.js +1 -0
- package/web/.next/static/chunks/3d0086082ce28745.js +1 -0
- package/web/.next/static/chunks/3daba4c77e106a0b.js +1 -0
- package/web/.next/static/chunks/3eeb840a2075bfde.js +1 -0
- package/web/.next/static/chunks/3f2585c9332265e2.js +1 -0
- package/web/.next/static/chunks/3f701f917196c596.js +1 -0
- package/web/.next/static/chunks/4028b1961891bd0b.js +1 -0
- package/web/.next/static/chunks/40962df79d5b9308.js +1 -0
- package/web/.next/static/chunks/40bdb6b0b6b24b30.js +1 -0
- package/web/.next/static/chunks/419f2849c47d15b0.js +1 -0
- package/web/.next/static/chunks/4301b2746001957f.js +1 -0
- package/web/.next/static/chunks/458a6ec844531967.js +1 -0
- package/web/.next/static/chunks/45ae42a60c5885ba.js +1 -0
- package/web/.next/static/chunks/45d55f26409a62e9.js +1 -0
- package/web/.next/static/chunks/469057391d9b81af.js +1 -0
- package/web/.next/static/chunks/46af0d08db9ec138.js +1 -0
- package/web/.next/static/chunks/47dd15642d568b90.js +1 -0
- package/web/.next/static/chunks/4be33773114cd302.js +1 -0
- package/web/.next/static/chunks/4c3eff62cda82668.js +1 -0
- package/web/.next/static/chunks/4c592610236f630f.js +4 -0
- package/web/.next/static/chunks/4cc404bcff34a71f.js +1 -0
- package/web/.next/static/chunks/4d44c49ec4cdd79f.js +1 -0
- package/web/.next/static/chunks/4f0c36555d75e5fe.js +1 -0
- package/web/.next/static/chunks/554aadda059a8430.js +1 -0
- package/web/.next/static/chunks/55c4d9d2fddbead4.js +1 -0
- package/web/.next/static/chunks/55dc4e8d31455c2d.js +1 -0
- package/web/.next/static/chunks/5737640b5eb3844c.js +1 -0
- package/web/.next/static/chunks/5874c94c33f9b7b0.js +1 -0
- package/web/.next/static/chunks/58d9b3be51fd5de0.js +1 -0
- package/web/.next/static/chunks/5a4e2f295be16022.js +1 -0
- package/web/.next/static/chunks/5bc3c8f3a6aca6fa.js +1 -0
- package/web/.next/static/chunks/5c3c605bb590e3e7.js +1 -0
- package/web/.next/static/chunks/5c955aad7e021e56.js +1 -0
- package/web/.next/static/chunks/5cb21622c5e5747e.js +1 -0
- package/web/.next/static/chunks/5cdf0942d4f7ed5f.js +1 -0
- package/web/.next/static/chunks/5d4a3f9a24a357ab.js +1 -0
- package/web/.next/static/chunks/5d97d16f083409e9.js +1 -0
- package/web/.next/static/chunks/60f3d869542bf677.js +1 -0
- package/web/.next/static/chunks/62224eae737b4521.js +1 -0
- package/web/.next/static/chunks/6539d0757f0cfc29.js +1 -0
- package/web/.next/static/chunks/65a238abdcb11bcd.js +1 -0
- package/web/.next/static/chunks/65b76ab700c2a9d0.js +1 -0
- package/web/.next/static/chunks/660ad72a4adcb7fc.js +1 -0
- package/web/.next/static/chunks/664c671566a249f4.js +1 -0
- package/web/.next/static/chunks/66bbfced65db425f.js +1 -0
- package/web/.next/static/chunks/68b6eedefa12f8c7.js +1 -0
- package/web/.next/static/chunks/68fa8559029f9f41.js +1 -0
- package/web/.next/static/chunks/6947ab623933a779.js +1 -0
- package/web/.next/static/chunks/6e9f2a1a17352af0.js +1 -0
- package/web/.next/static/chunks/6ee18bbefc401436.js +1 -0
- package/web/.next/static/chunks/6f83a2cba6850e4a.js +1 -0
- package/web/.next/static/chunks/6fb42a88b84aa22b.js +1 -0
- package/web/.next/static/chunks/6ffd8d481eb5e86a.js +1 -0
- package/web/.next/static/chunks/70ebb562067defff.js +1 -0
- package/web/.next/static/chunks/719ffd0d25696861.js +1 -0
- package/web/.next/static/chunks/71bbf75ff7ac7d1c.js +1 -0
- package/web/.next/static/chunks/72452c79bb483893.js +1 -0
- package/web/.next/static/chunks/{0102ce60a2a42fab.js → 73512dcafc035901.js} +1 -1
- package/web/.next/static/chunks/737b452d10950f75.js +1 -0
- package/web/.next/static/chunks/73c9849a26d56eaf.js +1 -0
- package/web/.next/static/chunks/742ddcbde2de0a5f.js +1 -0
- package/web/.next/static/chunks/75f20501876081ae.js +1 -0
- package/web/.next/static/chunks/771904aa3f2b5890.js +1 -0
- package/web/.next/static/chunks/78140b3927f34ee1.js +1 -0
- package/web/.next/static/chunks/78c2221a0e9ac3e0.js +1 -0
- package/web/.next/static/chunks/7a16988476a29ae1.js +1 -0
- package/web/.next/static/chunks/7aebb2852b03cf3b.js +1 -0
- package/web/.next/static/chunks/{d4ee1f8f03cee0aa.js → 7b3bad34a11293ef.js} +1 -1
- package/web/.next/static/chunks/7cada01735a2de18.js +1 -0
- package/web/.next/static/chunks/7cd5e13ac856cf73.js +1 -0
- package/web/.next/static/chunks/7d0c918f6da54095.js +1 -0
- package/web/.next/static/chunks/7e55ce83f10514a3.js +1 -0
- package/web/.next/static/chunks/7e70c7df8d1224f0.js +1 -0
- package/web/.next/static/chunks/7f3161de6996c05f.js +1 -0
- package/web/.next/static/chunks/806207333fba56e3.js +1 -0
- package/web/.next/static/chunks/825f5a75a38db3ec.js +1 -0
- package/web/.next/static/chunks/82df15d2af5efffe.js +1 -0
- package/web/.next/static/chunks/83397d71344d405d.js +1 -0
- package/web/.next/static/chunks/8478b108a35675bb.js +1 -0
- package/web/.next/static/chunks/84b6fde40fe98bbc.js +1 -0
- package/web/.next/static/chunks/8525e0fed6102ee4.js +1 -0
- package/web/.next/static/chunks/858a571e17cbe069.js +1 -0
- package/web/.next/static/chunks/8599414ffd4e15f5.js +1 -0
- package/web/.next/static/chunks/85da8b6aabbfc33c.js +1 -0
- package/web/.next/static/chunks/8866422156b74976.js +1 -0
- package/web/.next/static/chunks/8884218357d06e4c.js +1 -0
- package/web/.next/static/chunks/890e85bcb002030f.js +1 -0
- package/web/.next/static/chunks/8a6482e4289bd485.js +1 -0
- package/web/.next/static/chunks/8b34938e48e56746.js +1 -0
- package/web/.next/static/chunks/8bc16f2ee0ac282b.js +1 -0
- package/web/.next/static/chunks/8c05e7493172a40a.js +1 -0
- package/web/.next/static/chunks/8c16bb1814e36e5d.js +1 -0
- package/web/.next/static/chunks/8d9c6ac44d75942c.js +1 -0
- package/web/.next/static/chunks/8e2d9292729601b9.js +1 -0
- package/web/.next/static/chunks/8ed313638226f782.js +1 -0
- package/web/.next/static/chunks/{cfe4dc9904fcfddb.js → 8f4b01641dd98daa.js} +1 -1
- package/web/.next/static/chunks/8f98e5a8f241fe53.js +1 -0
- package/web/.next/static/chunks/8fc154c5edda0beb.js +1 -0
- package/web/.next/static/chunks/8fe2d5b09bf432b8.js +1 -0
- package/web/.next/static/chunks/8fe35ce71e4ad05b.js +1 -0
- package/web/.next/static/chunks/9067d4871d0c903f.js +1 -0
- package/web/.next/static/chunks/92d091aa318b78fb.js +1 -0
- package/web/.next/static/chunks/93af57e60f3a66ba.js +1 -0
- package/web/.next/static/chunks/93dd149a0766adcc.js +1 -0
- package/web/.next/static/chunks/957474fa08a22115.js +1 -0
- package/web/.next/static/chunks/95b925bb74686af7.js +1 -0
- package/web/.next/static/chunks/96158847987b2403.js +1 -0
- package/web/.next/static/chunks/975c124d34c8c6a8.js +1 -0
- package/web/.next/static/chunks/97bf3636621b58c7.js +1 -0
- package/web/.next/static/chunks/97e9c48e0abc9a50.js +1 -0
- package/web/.next/static/chunks/{fe70e73feb07bcfd.js → 98c68c9ea7a9e597.js} +1 -1
- package/web/.next/static/chunks/99052b059a0075f9.js +1 -0
- package/web/.next/static/chunks/99de3f6268e262a3.js +1 -0
- package/web/.next/static/chunks/99e12f466e3868ca.js +1 -0
- package/web/.next/static/chunks/9ba434534d00d922.js +1 -0
- package/web/.next/static/chunks/9d3cb38ab5fb405b.js +1 -0
- package/web/.next/static/chunks/9d5adb23e0187d9c.js +1 -0
- package/web/.next/static/chunks/9d8444f3f16a0998.js +1 -0
- package/web/.next/static/chunks/9dd2a16ac3fea1f1.js +1 -0
- package/web/.next/static/chunks/9e66ab37fd08bc66.js +1 -0
- package/web/.next/static/chunks/a09fa49dbf0f3636.js +1 -0
- package/web/.next/static/chunks/a2000986cd87a131.js +1 -0
- package/web/.next/static/chunks/a31fd9cfaa7a3158.js +1 -0
- package/web/.next/static/chunks/a38e1790e76ded6c.js +1 -0
- package/web/.next/static/chunks/a662e9340d282c55.js +1 -0
- package/web/.next/static/chunks/a77c0a719a2cc920.js +1 -0
- package/web/.next/static/chunks/a7f8cdb6749f9bdd.js +1 -0
- package/web/.next/static/chunks/a8a4fdbbcb3a5998.js +1 -0
- package/web/.next/static/chunks/a8f26eabe8187392.js +1 -0
- package/web/.next/static/chunks/a954d978d5e9781e.js +1 -0
- package/web/.next/static/chunks/a977e04dad1a77c7.js +1 -0
- package/web/.next/static/chunks/abd77592929f00d5.js +1 -0
- package/web/.next/static/chunks/ac53962c1a4765c7.js +1 -0
- package/web/.next/static/chunks/ade5ee5b3412436e.js +1 -0
- package/web/.next/static/chunks/ae84e9326b9e9200.js +2 -0
- package/web/.next/static/chunks/b0810838151379a2.js +1 -0
- package/web/.next/static/chunks/b1106224fbc2f015.js +1 -0
- package/web/.next/static/chunks/b13329875853d9a5.js +1 -0
- package/web/.next/static/chunks/b1460995e7a388b9.css +1 -0
- package/web/.next/static/chunks/b2b08e8fb70210c7.js +1 -0
- package/web/.next/static/chunks/b2f0e49369262eea.js +1 -0
- package/web/.next/static/chunks/b46abe587d05f58c.js +1 -0
- package/web/.next/static/chunks/b555154c60b9d90c.js +1 -0
- package/web/.next/static/chunks/b61982efe6f7e40e.js +1 -0
- package/web/.next/static/chunks/b6972d679174ce65.js +1 -0
- package/web/.next/static/chunks/b6ae34a5c2627d04.js +1 -0
- package/web/.next/static/chunks/bae57337da9a2d34.js +1 -0
- package/web/.next/static/chunks/bba2ccf4fd7849e1.js +1 -0
- package/web/.next/static/chunks/bc21e40585b8dcf4.js +1 -0
- package/web/.next/static/chunks/bd0cd7805b800eab.js +1 -0
- package/web/.next/static/chunks/bf13e9bc0390b21d.js +59 -0
- package/web/.next/static/chunks/bfec0c4899344791.js +1 -0
- package/web/.next/static/chunks/c1a40361928a6f90.js +1 -0
- package/web/.next/static/chunks/c1f34786f0d6908c.js +2 -0
- package/web/.next/static/chunks/c1fa94e9df162cb2.js +1 -0
- package/web/.next/static/chunks/c260a37325b283d3.js +1 -0
- package/web/.next/static/chunks/c3abb9ed0d089656.js +1 -0
- package/web/.next/static/chunks/c49a32e2d002dd91.js +1 -0
- package/web/.next/static/chunks/c564bdda2d517997.js +1 -0
- package/web/.next/static/chunks/c5c7a925445f4d05.js +1 -0
- package/web/.next/static/chunks/c7e793951b20a67f.js +1 -0
- package/web/.next/static/chunks/c86d4c471f194ad0.js +1 -0
- package/web/.next/static/chunks/c8d2cd372806e8b4.js +1 -0
- package/web/.next/static/chunks/c932b41ef3a40647.js +1 -0
- package/web/.next/static/chunks/c95abf23ce28b320.js +1 -0
- package/web/.next/static/chunks/c9d225b49db0980e.js +1 -0
- package/web/.next/static/chunks/c9e3afa09e76a4b2.js +1 -0
- package/web/.next/static/chunks/c9ef2470073e11cb.js +1 -0
- package/web/.next/static/chunks/ca201ae288dba155.js +1 -0
- package/web/.next/static/chunks/ca6196a863fc258d.js +1 -0
- package/web/.next/static/chunks/cac3a64966a112f7.js +1 -0
- package/web/.next/static/chunks/cb1e02415930189c.js +1 -0
- package/web/.next/static/chunks/cb412c095989545d.js +1 -0
- package/web/.next/static/chunks/cba332976e88a351.js +1 -0
- package/web/.next/static/chunks/cbf0c6470851a2f0.js +1 -0
- package/web/.next/static/chunks/cc60420e9bf53d96.js +1 -0
- package/web/.next/static/chunks/cc9054c5e6e1c706.js +1 -0
- package/web/.next/static/chunks/cd3bf2c5469b9646.js +1 -0
- package/web/.next/static/chunks/cdd7964a31b63d66.js +1 -0
- package/web/.next/static/chunks/cdd7f91e23b5ea49.js +1 -0
- package/web/.next/static/chunks/ce6a2fd4485c50c7.js +1 -0
- package/web/.next/static/chunks/d04de4be30ab78ca.js +3 -0
- package/web/.next/static/chunks/d0be65e7d38590b6.js +1 -0
- package/web/.next/static/chunks/d128b5501807e6f0.js +1 -0
- package/web/.next/static/chunks/d2124558f2b71c54.js +1 -0
- package/web/.next/static/chunks/d21a7ac5bcd538a3.js +1 -0
- package/web/.next/static/chunks/d35123b0dc2e2702.js +1 -0
- package/web/.next/static/chunks/d3ff3d218c7ad329.js +1 -0
- package/web/.next/static/chunks/d47def0da790a783.js +1 -0
- package/web/.next/static/chunks/d56169a6ceb14d27.js +1 -0
- package/web/.next/static/chunks/d5f1eede831e271a.js +1 -0
- package/web/.next/static/chunks/d62ba6ca7b41e179.js +1 -0
- package/web/.next/static/chunks/d6e74c394e816b3a.js +1 -0
- package/web/.next/static/chunks/d700d036b0dd9d28.js +1 -0
- package/web/.next/static/chunks/d7922dc82b3d8177.js +1 -0
- package/web/.next/static/chunks/d79a28dee31b3e43.js +1 -0
- package/web/.next/static/chunks/d88d6c7dd4fb3eb0.js +1 -0
- package/web/.next/static/chunks/d95b6e4c9a832b75.js +1 -0
- package/web/.next/static/chunks/dac044a4e6d8e3d4.js +1 -0
- package/web/.next/static/chunks/db873305cb622122.js +1 -0
- package/web/.next/static/chunks/dba11645cc1ddde8.js +1 -0
- package/web/.next/static/chunks/dbfb2921fe1fbe42.js +1 -0
- package/web/.next/static/chunks/dc75258a3914ab28.js +1 -0
- package/web/.next/static/chunks/ddbb7e6d2aa7940f.js +1 -0
- package/web/.next/static/chunks/ddcfb6c08594ccb7.js +1 -0
- package/web/.next/static/chunks/de82d83003608b30.js +1 -0
- package/web/.next/static/chunks/debe9e537fa1dd5c.js +1 -0
- package/web/.next/static/chunks/e0e2881173c1b4ea.js +1 -0
- package/web/.next/static/chunks/e16538f1db410909.js +1 -0
- package/web/.next/static/chunks/e1dcb6b88dd2cbfb.js +1 -0
- package/web/.next/static/chunks/e1ec2aeadbc3e43e.js +1 -0
- package/web/.next/static/chunks/e4967b0e84ca5a95.js +1 -0
- package/web/.next/static/chunks/e4c653eb9557c225.js +1 -0
- package/web/.next/static/chunks/e51516e366109a4d.js +1 -0
- package/web/.next/static/chunks/e759235b76258903.js +1 -0
- package/web/.next/static/chunks/e75c5376799db08c.js +1 -0
- package/web/.next/static/chunks/e8341f198526730e.js +1 -0
- package/web/.next/static/chunks/e8d014f4a5df5f4b.js +1 -0
- package/web/.next/static/chunks/eab21ff64827175b.js +1 -0
- package/web/.next/static/chunks/eaf5638419fe834d.js +1 -0
- package/web/.next/static/chunks/eb49387d22b57020.js +1 -0
- package/web/.next/static/chunks/ebb7e6387076d1f2.js +1 -0
- package/web/.next/static/chunks/ecf9bd4e51bc22b2.js +1 -0
- package/web/.next/static/chunks/ed5f5eaaba3fe86e.js +1 -0
- package/web/.next/static/chunks/ee3792dfe67952fc.js +1 -0
- package/web/.next/static/chunks/ee96f625d002bb6f.js +1 -0
- package/web/.next/static/chunks/f01c407dc77e32e6.js +1 -0
- package/web/.next/static/chunks/f05e324248b7eefa.js +1 -0
- package/web/.next/static/chunks/f116adff993e4e78.js +1 -0
- package/web/.next/static/chunks/f48a6189ac11bc51.js +1 -0
- package/web/.next/static/chunks/f57a12cf8a7fa100.js +1 -0
- package/web/.next/static/chunks/f6bf8273ddaca996.js +1 -0
- package/web/.next/static/chunks/f7313a12522304e8.js +1 -0
- package/web/.next/static/chunks/f7938fccffa01b89.js +1 -0
- package/web/.next/static/chunks/f7b685bb0cb377c2.js +1 -0
- package/web/.next/static/chunks/f7e499a9733db05b.js +1 -0
- package/web/.next/static/chunks/fa113f988d09306b.js +1 -0
- package/web/.next/static/chunks/fc1587c1e44444d4.js +1 -0
- package/web/.next/static/chunks/fcb420148a0cf38e.js +1 -0
- package/web/.next/static/chunks/fd6bbc9c53b0101e.js +1 -0
- package/web/.next/static/chunks/fef1f3b5114b8d2d.js +1 -0
- package/web/.next/static/chunks/{b1eadf24106c53ce.js → ff20a3511ab6687b.js} +1 -1
- package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-19fdba76a6171f31.js} +1 -1
- package/web/package.json +6 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +0 -6
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_025a2fa0._.js +0 -4
- package/web/.next/server/chunks/ssr/_025a2fa0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1bb131c4._.js +0 -3
- package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3a4c94e3._.js +0 -3
- package/web/.next/server/chunks/ssr/_3a4c94e3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_8afac0ca._.js +0 -3
- package/web/.next/server/chunks/ssr/_8afac0ca._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9ac70f88._.js +0 -5
- package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a68d7e1c._.js +0 -9
- package/web/.next/server/chunks/ssr/_a68d7e1c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b5fc318a._.js +0 -3
- package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e6f2da4f._.js +0 -7
- package/web/.next/server/chunks/ssr/_e6f2da4f._.js.map +0 -1
- package/web/.next/static/chunks/07b853e29af1e5f2.js +0 -1
- package/web/.next/static/chunks/3bb35e0689e8b6b7.js +0 -1
- package/web/.next/static/chunks/52b56677c842e45f.js +0 -3
- package/web/.next/static/chunks/77ae4e64052864f9.js +0 -2
- package/web/.next/static/chunks/79474459eb409359.js +0 -1
- package/web/.next/static/chunks/84a181ff3270fd9f.js +0 -1
- package/web/.next/static/chunks/8c0f3126502dea0a.js +0 -11
- package/web/.next/static/chunks/8c3a1b4dd386fb21.js +0 -1
- package/web/.next/static/chunks/c750d771701b9b97.js +0 -1
- package/web/.next/static/chunks/d4d8f0a137bd2eb4.js +0 -4
- package/web/.next/static/chunks/db122a6247f69104.css +0 -1
- package/web/.next/static/chunks/ea320f314a210a70.js +0 -2
- package/web/.next/static/chunks/ed3a602003bcb31b.js +0 -1
- /package/web/.next/server/chunks/{ssr/[root-of-the-server]__52485955._.js.map → 744ca_web__next-internal_server_app_api_chat_stream_route_actions_ea265361.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__91d44424._.js.map → [root-of-the-server]__52c318d1._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__db04ed44._.js.map → [root-of-the-server]__a5879003._.js.map} +0 -0
- /package/web/.next/static/{uT0QQwg2cbMo46NG69Bky → OiQDaxgdMUYHZ4ZGZWNWt}/_buildManifest.js +0 -0
- /package/web/.next/static/{uT0QQwg2cbMo46NG69Bky → OiQDaxgdMUYHZ4ZGZWNWt}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{uT0QQwg2cbMo46NG69Bky → OiQDaxgdMUYHZ4ZGZWNWt}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/presentation/web/hooks/use-chat.ts","../../../../../../../src/presentation/web/components/ui/chat-container.tsx","../../../../../../../node_modules/.pnpm/use-stick-to-bottom%401.1.3_react%4019.2.4/node_modules/use-stick-to-bottom/dist/StickToBottom.js","../../../../../../../node_modules/.pnpm/use-stick-to-bottom%401.1.3_react%4019.2.4/node_modules/use-stick-to-bottom/dist/useStickToBottom.js","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-use-is-hydrated%400.1.0_%40types%2Breact%4019.2.10_react%4019.2.4/node_modules/%40radix-ui/react-use-is-hydrated/dist/index.mjs","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-avatar%401.1.10_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.10__%40types%2Breac_95f7cb5c471abfe51e3c7f6361f7aaa4/node_modules/%40radix-ui/react-avatar/dist/index.mjs","../../../../../../../src/presentation/web/components/ui/avatar.tsx","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/defaults.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/rules.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/helpers.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/Tokenizer.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/Lexer.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/Renderer.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/TextRenderer.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/Parser.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/Hooks.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/Instance.ts","../../../../../../../node_modules/.pnpm/marked%4017.0.4/node_modules/marked/src/marked.ts","../../../../../../../node_modules/.pnpm/escape-string-regexp%405.0.0/node_modules/escape-string-regexp/index.js","../../../../../../../node_modules/.pnpm/mdast-util-find-and-replace%403.0.2/node_modules/mdast-util-find-and-replace/lib/index.js","../../../../../../../node_modules/.pnpm/mdast-util-newline-to-break%402.0.0/node_modules/mdast-util-newline-to-break/lib/index.js","../../../../../../../node_modules/.pnpm/remark-breaks%404.0.0/node_modules/remark-breaks/lib/index.js","../../../../../../../node_modules/.pnpm/ccount%402.0.1/node_modules/ccount/index.js","../../../../../../../node_modules/.pnpm/mdast-util-gfm-autolink-literal%402.0.1/node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../../../../../../../node_modules/.pnpm/mdast-util-gfm-footnote%402.1.0/node_modules/mdast-util-gfm-footnote/lib/index.js","../../../../../../../node_modules/.pnpm/mdast-util-gfm-strikethrough%402.0.0/node_modules/mdast-util-gfm-strikethrough/lib/index.js","../../../../../../../node_modules/.pnpm/markdown-table%403.0.4/node_modules/markdown-table/index.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/break.js","../../../../../../../node_modules/.pnpm/longest-streak%403.1.0/node_modules/longest-streak/index.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/code.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/definition.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/heading.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/html.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/image.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/link.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/list.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../../../../../../../node_modules/.pnpm/mdast-util-phrasing%404.1.0/node_modules/mdast-util-phrasing/lib/index.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/root.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/strong.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/text.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../../../../../../../node_modules/.pnpm/mdast-util-to-markdown%402.1.2/node_modules/mdast-util-to-markdown/lib/handle/index.js","../../../../../../../node_modules/.pnpm/mdast-util-gfm-table%402.0.0/node_modules/mdast-util-gfm-table/lib/index.js","../../../../../../../node_modules/.pnpm/mdast-util-gfm-task-list-item%402.0.0/node_modules/mdast-util-gfm-task-list-item/lib/index.js","../../../../../../../node_modules/.pnpm/mdast-util-gfm%403.1.0/node_modules/mdast-util-gfm/lib/index.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm%403.0.0/node_modules/micromark-extension-gfm/index.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-autolink-literal%402.1.0/node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-footnote%402.1.0/node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-strikethrough%402.1.0/node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-table%402.1.1/node_modules/micromark-extension-gfm-table/lib/edit-map.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-table%402.1.1/node_modules/micromark-extension-gfm-table/lib/infer.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-table%402.1.1/node_modules/micromark-extension-gfm-table/lib/syntax.js","../../../../../../../node_modules/.pnpm/micromark-extension-gfm-task-list-item%402.1.0/node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../../../../../../../node_modules/.pnpm/remark-gfm%404.0.1/node_modules/remark-gfm/lib/index.js","../../../../../../../src/presentation/web/components/ui/code-block.tsx","../../../../../../../src/presentation/web/components/ui/markdown.tsx","../../../../../../../src/presentation/web/components/ui/message.tsx","../../../../../../../src/presentation/web/components/ui/prompt-input.tsx","../../../../../../../src/presentation/web/components/ui/loader.tsx","../../../../../../../src/presentation/web/components/features/chat/chat-empty-state.tsx","../../../../../../../src/presentation/web/components/features/chat/chat-header.tsx","../../../../../../../src/presentation/web/components/features/chat/chat-view.tsx","../../../../../../../src/presentation/web/components/features/chat/chat-page-client.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useReducer, useRef } from 'react';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type ChatMessageRole = 'user' | 'assistant';\nexport type ChatMessageStatus = 'sending' | 'streaming' | 'complete' | 'error';\nexport type ChatStatus = 'idle' | 'sending' | 'streaming' | 'error';\n\nexport interface ChatMessage {\n id: string;\n role: ChatMessageRole;\n content: string;\n timestamp: Date;\n status: ChatMessageStatus;\n}\n\n/* ------------------------------------------------------------------ */\n/* Reducer actions */\n/* ------------------------------------------------------------------ */\n\ntype ChatAction =\n | { type: 'add_user_message'; message: ChatMessage }\n | { type: 'start_streaming' }\n | { type: 'stream_token'; content: string }\n | { type: 'complete_streaming'; sessionId?: string }\n | { type: 'set_error'; error: string }\n | { type: 'clear_messages' };\n\nexport interface ChatState {\n messages: ChatMessage[];\n status: ChatStatus;\n error: string | null;\n sessionId: string | null;\n}\n\nexport const initialChatState: ChatState = {\n messages: [],\n status: 'idle',\n error: null,\n sessionId: null,\n};\n\n/* ------------------------------------------------------------------ */\n/* Reducer */\n/* ------------------------------------------------------------------ */\n\nexport function chatReducer(state: ChatState, action: ChatAction): ChatState {\n switch (action.type) {\n case 'add_user_message':\n return {\n ...state,\n messages: [...state.messages, action.message],\n status: 'sending',\n error: null,\n };\n\n case 'start_streaming': {\n const assistantMessage: ChatMessage = {\n id: crypto.randomUUID(),\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n status: 'streaming',\n };\n return {\n ...state,\n messages: [...state.messages, assistantMessage],\n status: 'streaming',\n };\n }\n\n case 'stream_token': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last?.role === 'assistant') {\n msgs[msgs.length - 1] = { ...last, content: last.content + action.content };\n }\n return { ...state, messages: msgs };\n }\n\n case 'complete_streaming': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last?.role === 'assistant') {\n msgs[msgs.length - 1] = { ...last, status: 'complete' };\n }\n return {\n ...state,\n messages: msgs,\n status: 'idle',\n sessionId: action.sessionId ?? state.sessionId,\n };\n }\n\n case 'set_error': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last?.role === 'assistant' && last.status === 'streaming') {\n msgs[msgs.length - 1] = { ...last, status: 'error' };\n }\n return {\n ...state,\n messages: msgs,\n status: 'error',\n error: action.error,\n };\n }\n\n case 'clear_messages':\n return { ...initialChatState };\n\n default:\n return state;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* SSE stream parser */\n/* ------------------------------------------------------------------ */\n\nexport interface ParsedSSEEvent {\n type: 'progress' | 'result' | 'error';\n content: string;\n sessionId?: string;\n timestamp?: string;\n}\n\n/**\n * Parse SSE-formatted chunks from a ReadableStream.\n * Yields parsed events as they arrive.\n */\nexport async function* parseSSEStream(\n reader: ReadableStreamDefaultReader<Uint8Array>\n): AsyncIterable<ParsedSSEEvent> {\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // Split on double newline (SSE event boundary)\n const parts = buffer.split('\\n\\n');\n // Last part may be incomplete — keep it in the buffer\n buffer = parts.pop() ?? '';\n\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed || trimmed.startsWith(':')) continue; // Skip empty lines and comments (heartbeats)\n\n // Extract data lines\n const dataLines: string[] = [];\n for (const line of trimmed.split('\\n')) {\n if (line.startsWith('data: ')) {\n dataLines.push(line.slice(6));\n }\n }\n\n if (dataLines.length === 0) continue;\n\n try {\n const parsed = JSON.parse(dataLines.join('\\n')) as ParsedSSEEvent;\n yield parsed;\n } catch {\n // Non-JSON data — skip\n }\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Hook */\n/* ------------------------------------------------------------------ */\n\nexport interface UseChatResult {\n messages: ChatMessage[];\n status: ChatStatus;\n error: string | null;\n sendMessage: (content: string) => Promise<void>;\n retry: () => Promise<void>;\n clearChat: () => void;\n}\n\nexport function useChat(): UseChatResult {\n const [state, dispatch] = useReducer(chatReducer, initialChatState);\n const abortControllerRef = useRef<AbortController | null>(null);\n const lastUserMessageRef = useRef<string | null>(null);\n\n const streamResponse = useCallback(async (message: string, sessionId: string | null) => {\n // Cancel any in-flight request\n abortControllerRef.current?.abort();\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n dispatch({ type: 'start_streaming' });\n\n try {\n const response = await fetch('/api/chat/stream', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message, sessionId }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Request failed');\n dispatch({ type: 'set_error', error: errorText });\n return;\n }\n\n if (!response.body) {\n dispatch({ type: 'set_error', error: 'No response body' });\n return;\n }\n\n const reader = response.body.getReader();\n\n try {\n for await (const event of parseSSEStream(reader)) {\n if (controller.signal.aborted) break;\n\n switch (event.type) {\n case 'progress':\n dispatch({ type: 'stream_token', content: event.content });\n break;\n case 'result':\n dispatch({ type: 'complete_streaming', sessionId: event.sessionId });\n return;\n case 'error':\n dispatch({ type: 'set_error', error: event.content });\n return;\n }\n }\n\n // Stream ended without a result event — treat as complete\n dispatch({ type: 'complete_streaming' });\n } finally {\n reader.releaseLock();\n }\n } catch (err: unknown) {\n if (controller.signal.aborted) return;\n const errorMessage = err instanceof Error ? err.message : 'An unexpected error occurred';\n dispatch({ type: 'set_error', error: errorMessage });\n }\n }, []);\n\n const sendMessage = useCallback(\n async (content: string) => {\n const trimmed = content.trim();\n if (!trimmed) return;\n if (state.status === 'sending' || state.status === 'streaming') return;\n\n lastUserMessageRef.current = trimmed;\n\n const userMessage: ChatMessage = {\n id: crypto.randomUUID(),\n role: 'user',\n content: trimmed,\n timestamp: new Date(),\n status: 'complete',\n };\n\n dispatch({ type: 'add_user_message', message: userMessage });\n await streamResponse(trimmed, state.sessionId);\n },\n [state.status, state.sessionId, streamResponse]\n );\n\n const retry = useCallback(async () => {\n const lastMessage = lastUserMessageRef.current;\n if (!lastMessage) return;\n\n // Remove the last assistant message if it errored\n dispatch({ type: 'clear_messages' });\n\n const userMessage: ChatMessage = {\n id: crypto.randomUUID(),\n role: 'user',\n content: lastMessage,\n timestamp: new Date(),\n status: 'complete',\n };\n\n dispatch({ type: 'add_user_message', message: userMessage });\n await streamResponse(lastMessage, state.sessionId);\n }, [state.sessionId, streamResponse]);\n\n const clearChat = useCallback(() => {\n abortControllerRef.current?.abort();\n lastUserMessageRef.current = null;\n dispatch({ type: 'clear_messages' });\n }, []);\n\n return {\n messages: state.messages,\n status: state.status,\n error: state.error,\n sendMessage,\n retry,\n clearChat,\n };\n}\n","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { StickToBottom } from 'use-stick-to-bottom';\n\nexport type ChatContainerRootProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerContentProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerScrollAnchorProps = {\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction ChatContainerRoot({ children, className, ...props }: ChatContainerRootProps) {\n return (\n <StickToBottom\n className={cn('flex overflow-y-auto', className)}\n resize=\"smooth\"\n initial=\"instant\"\n role=\"log\"\n {...props}\n >\n {children}\n </StickToBottom>\n );\n}\n\nfunction ChatContainerContent({ children, className, ...props }: ChatContainerContentProps) {\n return (\n <StickToBottom.Content className={cn('flex w-full flex-col', className)} {...props}>\n {children}\n </StickToBottom.Content>\n );\n}\n\nfunction ChatContainerScrollAnchor({ className, ...props }: ChatContainerScrollAnchorProps) {\n return (\n <div\n className={cn('h-px w-full shrink-0 scroll-mt-4', className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n}\n\nexport { ChatContainerRoot, ChatContainerContent, ChatContainerScrollAnchor };\n","/*!---------------------------------------------------------------------------------------------\n * Copyright (c) StackBlitz. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { createContext, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, } from \"react\";\nimport { useStickToBottom, } from \"./useStickToBottom.js\";\nconst StickToBottomContext = createContext(null);\nconst useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\nexport function StickToBottom({ instance, children, resize, initial, mass, damping, stiffness, targetScrollTop: currentTargetScrollTop, contextRef, ...props }) {\n const customTargetScrollTop = useRef(null);\n const targetScrollTop = React.useCallback((target, elements) => {\n const get = context?.targetScrollTop ?? currentTargetScrollTop;\n return get?.(target, elements) ?? target;\n }, [currentTargetScrollTop]);\n const defaultInstance = useStickToBottom({\n mass,\n damping,\n stiffness,\n resize,\n initial,\n targetScrollTop,\n });\n const { scrollRef, contentRef, scrollToBottom, stopScroll, isAtBottom, escapedFromLock, state, } = instance ?? defaultInstance;\n const context = useMemo(() => ({\n scrollToBottom,\n stopScroll,\n scrollRef,\n isAtBottom,\n escapedFromLock,\n contentRef,\n state,\n get targetScrollTop() {\n return customTargetScrollTop.current;\n },\n set targetScrollTop(targetScrollTop) {\n customTargetScrollTop.current = targetScrollTop;\n },\n }), [\n scrollToBottom,\n isAtBottom,\n contentRef,\n scrollRef,\n stopScroll,\n escapedFromLock,\n state,\n ]);\n useImperativeHandle(contextRef, () => context, [context]);\n useIsomorphicLayoutEffect(() => {\n if (!scrollRef.current) {\n return;\n }\n if (getComputedStyle(scrollRef.current).overflow === \"visible\") {\n scrollRef.current.style.overflow = \"auto\";\n }\n }, []);\n return (React.createElement(StickToBottomContext.Provider, { value: context },\n React.createElement(\"div\", { ...props }, typeof children === \"function\" ? children(context) : children)));\n}\n(function (StickToBottom) {\n function Content({ children, scrollClassName, ...props }) {\n const context = useStickToBottomContext();\n return (React.createElement(\"div\", { ref: context.scrollRef, style: {\n height: \"100%\",\n width: \"100%\",\n scrollbarGutter: \"stable both-edges\",\n }, className: scrollClassName },\n React.createElement(\"div\", { ...props, ref: context.contentRef }, typeof children === \"function\" ? children(context) : children)));\n }\n StickToBottom.Content = Content;\n})(StickToBottom || (StickToBottom = {}));\n/**\n * Use this hook inside a <StickToBottom> component to gain access to whether the component is at the bottom of the scrollable area.\n */\nexport function useStickToBottomContext() {\n const context = useContext(StickToBottomContext);\n if (!context) {\n throw new Error(\"use-stick-to-bottom component context must be used within a StickToBottom component\");\n }\n return context;\n}\n","/*!---------------------------------------------------------------------------------------------\n * Copyright (c) StackBlitz. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { useCallback, useMemo, useRef, useState, } from \"react\";\nconst DEFAULT_SPRING_ANIMATION = {\n /**\n * A value from 0 to 1, on how much to damp the animation.\n * 0 means no damping, 1 means full damping.\n *\n * @default 0.7\n */\n damping: 0.7,\n /**\n * The stiffness of how fast/slow the animation gets up to speed.\n *\n * @default 0.05\n */\n stiffness: 0.05,\n /**\n * The inertial mass associated with the animation.\n * Higher numbers make the animation slower.\n *\n * @default 1.25\n */\n mass: 1.25,\n};\nconst STICK_TO_BOTTOM_OFFSET_PX = 70;\nconst SIXTY_FPS_INTERVAL_MS = 1000 / 60;\nconst RETAIN_ANIMATION_DURATION_MS = 350;\nlet mouseDown = false;\nglobalThis.document?.addEventListener(\"mousedown\", () => {\n mouseDown = true;\n});\nglobalThis.document?.addEventListener(\"mouseup\", () => {\n mouseDown = false;\n});\nglobalThis.document?.addEventListener(\"click\", () => {\n mouseDown = false;\n});\nexport const useStickToBottom = (options = {}) => {\n const [escapedFromLock, updateEscapedFromLock] = useState(false);\n const [isAtBottom, updateIsAtBottom] = useState(options.initial !== false);\n const [isNearBottom, setIsNearBottom] = useState(false);\n const optionsRef = useRef(null);\n optionsRef.current = options;\n const isSelecting = useCallback(() => {\n if (!mouseDown) {\n return false;\n }\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) {\n return false;\n }\n const range = selection.getRangeAt(0);\n return (range.commonAncestorContainer.contains(scrollRef.current) ||\n scrollRef.current?.contains(range.commonAncestorContainer));\n }, []);\n const setIsAtBottom = useCallback((isAtBottom) => {\n state.isAtBottom = isAtBottom;\n updateIsAtBottom(isAtBottom);\n }, []);\n const setEscapedFromLock = useCallback((escapedFromLock) => {\n state.escapedFromLock = escapedFromLock;\n updateEscapedFromLock(escapedFromLock);\n }, []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n const state = useMemo(() => {\n let lastCalculation;\n return {\n escapedFromLock,\n isAtBottom,\n resizeDifference: 0,\n accumulated: 0,\n velocity: 0,\n listeners: new Set(),\n get scrollTop() {\n return scrollRef.current?.scrollTop ?? 0;\n },\n set scrollTop(scrollTop) {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollTop;\n state.ignoreScrollToTop = scrollRef.current.scrollTop;\n }\n },\n get targetScrollTop() {\n if (!scrollRef.current || !contentRef.current) {\n return 0;\n }\n return (scrollRef.current.scrollHeight - 1 - scrollRef.current.clientHeight);\n },\n get calculatedTargetScrollTop() {\n if (!scrollRef.current || !contentRef.current) {\n return 0;\n }\n const { targetScrollTop } = this;\n if (!options.targetScrollTop) {\n return targetScrollTop;\n }\n if (lastCalculation?.targetScrollTop === targetScrollTop) {\n return lastCalculation.calculatedScrollTop;\n }\n const calculatedScrollTop = Math.max(Math.min(options.targetScrollTop(targetScrollTop, {\n scrollElement: scrollRef.current,\n contentElement: contentRef.current,\n }), targetScrollTop), 0);\n lastCalculation = { targetScrollTop, calculatedScrollTop };\n requestAnimationFrame(() => {\n lastCalculation = undefined;\n });\n return calculatedScrollTop;\n },\n get scrollDifference() {\n return this.calculatedTargetScrollTop - this.scrollTop;\n },\n get isNearBottom() {\n return this.scrollDifference <= STICK_TO_BOTTOM_OFFSET_PX;\n },\n };\n }, []);\n const scrollToBottom = useCallback((scrollOptions = {}) => {\n if (typeof scrollOptions === \"string\") {\n scrollOptions = { animation: scrollOptions };\n }\n if (!scrollOptions.preserveScrollPosition) {\n setIsAtBottom(true);\n }\n const waitElapsed = Date.now() + (Number(scrollOptions.wait) || 0);\n const behavior = mergeAnimations(optionsRef.current, scrollOptions.animation);\n const { ignoreEscapes = false } = scrollOptions;\n let durationElapsed;\n let startTarget = state.calculatedTargetScrollTop;\n if (scrollOptions.duration instanceof Promise) {\n scrollOptions.duration.finally(() => {\n durationElapsed = Date.now();\n });\n }\n else {\n durationElapsed = waitElapsed + (scrollOptions.duration ?? 0);\n }\n const next = async () => {\n const promise = new Promise(requestAnimationFrame).then(() => {\n if (!state.isAtBottom) {\n state.animation = undefined;\n return false;\n }\n const { scrollTop } = state;\n const tick = performance.now();\n const tickDelta = (tick - (state.lastTick ?? tick)) / SIXTY_FPS_INTERVAL_MS;\n state.animation || (state.animation = { behavior, promise, ignoreEscapes });\n if (state.animation.behavior === behavior) {\n state.lastTick = tick;\n }\n if (isSelecting()) {\n return next();\n }\n if (waitElapsed > Date.now()) {\n return next();\n }\n if (scrollTop < Math.min(startTarget, state.calculatedTargetScrollTop)) {\n if (state.animation?.behavior === behavior) {\n if (behavior === \"instant\") {\n state.scrollTop = state.calculatedTargetScrollTop;\n return next();\n }\n state.velocity =\n (behavior.damping * state.velocity +\n behavior.stiffness * state.scrollDifference) /\n behavior.mass;\n state.accumulated += state.velocity * tickDelta;\n state.scrollTop += state.accumulated;\n if (state.scrollTop !== scrollTop) {\n state.accumulated = 0;\n }\n }\n return next();\n }\n if (durationElapsed > Date.now()) {\n startTarget = state.calculatedTargetScrollTop;\n return next();\n }\n state.animation = undefined;\n /**\n * If we're still below the target, then queue\n * up another scroll to the bottom with the last\n * requested animatino.\n */\n if (state.scrollTop < state.calculatedTargetScrollTop) {\n return scrollToBottom({\n animation: mergeAnimations(optionsRef.current, optionsRef.current.resize),\n ignoreEscapes,\n duration: Math.max(0, durationElapsed - Date.now()) || undefined,\n });\n }\n return state.isAtBottom;\n });\n return promise.then((isAtBottom) => {\n requestAnimationFrame(() => {\n if (!state.animation) {\n state.lastTick = undefined;\n state.velocity = 0;\n }\n });\n return isAtBottom;\n });\n };\n if (scrollOptions.wait !== true) {\n state.animation = undefined;\n }\n if (state.animation?.behavior === behavior) {\n return state.animation.promise;\n }\n return next();\n }, [setIsAtBottom, isSelecting, state]);\n const stopScroll = useCallback(() => {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }, [setEscapedFromLock, setIsAtBottom]);\n const handleScroll = useCallback(({ target }) => {\n if (target !== scrollRef.current) {\n return;\n }\n const { scrollTop, ignoreScrollToTop } = state;\n let { lastScrollTop = scrollTop } = state;\n state.lastScrollTop = scrollTop;\n state.ignoreScrollToTop = undefined;\n if (ignoreScrollToTop && ignoreScrollToTop > scrollTop) {\n /**\n * When the user scrolls up while the animation plays, the `scrollTop` may\n * not come in separate events; if this happens, to make sure `isScrollingUp`\n * is correct, set the lastScrollTop to the ignored event.\n */\n lastScrollTop = ignoreScrollToTop;\n }\n setIsNearBottom(state.isNearBottom);\n /**\n * Scroll events may come before a ResizeObserver event,\n * so in order to ignore resize events correctly we use a\n * timeout.\n *\n * @see https://github.com/WICG/resize-observer/issues/25#issuecomment-248757228\n */\n setTimeout(() => {\n /**\n * When theres a resize difference ignore the resize event.\n */\n if (state.resizeDifference || scrollTop === ignoreScrollToTop) {\n return;\n }\n if (isSelecting()) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n return;\n }\n const isScrollingDown = scrollTop > lastScrollTop;\n const isScrollingUp = scrollTop < lastScrollTop;\n if (state.animation?.ignoreEscapes) {\n state.scrollTop = lastScrollTop;\n return;\n }\n if (isScrollingUp) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }\n if (isScrollingDown) {\n setEscapedFromLock(false);\n }\n if (!state.escapedFromLock && state.isNearBottom) {\n setIsAtBottom(true);\n }\n }, 1);\n }, [setEscapedFromLock, setIsAtBottom, isSelecting, state]);\n const handleWheel = useCallback(({ target, deltaY }) => {\n let element = target;\n while (![\"scroll\", \"auto\"].includes(getComputedStyle(element).overflow)) {\n if (!element.parentElement) {\n return;\n }\n element = element.parentElement;\n }\n /**\n * The browser may cancel the scrolling from the mouse wheel\n * if we update it from the animation in meantime.\n * To prevent this, always escape when the wheel is scrolled up.\n */\n if (element === scrollRef.current &&\n deltaY < 0 &&\n scrollRef.current.scrollHeight > scrollRef.current.clientHeight &&\n !state.animation?.ignoreEscapes) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }\n }, [setEscapedFromLock, setIsAtBottom, state]);\n const scrollRef = useRefCallback((scroll) => {\n scrollRef.current?.removeEventListener(\"scroll\", handleScroll);\n scrollRef.current?.removeEventListener(\"wheel\", handleWheel);\n scroll?.addEventListener(\"scroll\", handleScroll, { passive: true });\n scroll?.addEventListener(\"wheel\", handleWheel, { passive: true });\n }, []);\n const contentRef = useRefCallback((content) => {\n state.resizeObserver?.disconnect();\n if (!content) {\n return;\n }\n let previousHeight;\n state.resizeObserver = new ResizeObserver(([entry]) => {\n const { height } = entry.contentRect;\n const difference = height - (previousHeight ?? height);\n state.resizeDifference = difference;\n /**\n * Sometimes the browser can overscroll past the target,\n * so check for this and adjust appropriately.\n */\n if (state.scrollTop > state.targetScrollTop) {\n state.scrollTop = state.targetScrollTop;\n }\n setIsNearBottom(state.isNearBottom);\n if (difference >= 0) {\n /**\n * If it's a positive resize, scroll to the bottom when\n * we're already at the bottom.\n */\n const animation = mergeAnimations(optionsRef.current, previousHeight\n ? optionsRef.current.resize\n : optionsRef.current.initial);\n scrollToBottom({\n animation,\n wait: true,\n preserveScrollPosition: true,\n duration: animation === \"instant\" ? undefined : RETAIN_ANIMATION_DURATION_MS,\n });\n }\n else {\n /**\n * Else if it's a negative resize, check if we're near the bottom\n * if we are want to un-escape from the lock, because the resize\n * could have caused the container to be at the bottom.\n */\n if (state.isNearBottom) {\n setEscapedFromLock(false);\n setIsAtBottom(true);\n }\n }\n previousHeight = height;\n /**\n * Reset the resize difference after the scroll event\n * has fired. Requires a rAF to wait for the scroll event,\n * and a setTimeout to wait for the other timeout we have in\n * resizeObserver in case the scroll event happens after the\n * resize event.\n */\n requestAnimationFrame(() => {\n setTimeout(() => {\n if (state.resizeDifference === difference) {\n state.resizeDifference = 0;\n }\n }, 1);\n });\n });\n state.resizeObserver?.observe(content);\n }, []);\n return {\n contentRef,\n scrollRef,\n scrollToBottom,\n stopScroll,\n isAtBottom: isAtBottom || isNearBottom,\n isNearBottom,\n escapedFromLock,\n state,\n };\n};\nfunction useRefCallback(callback, deps) {\n // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n const result = useCallback((ref) => {\n result.current = ref;\n return callback(ref);\n }, deps);\n return result;\n}\nconst animationCache = new Map();\nfunction mergeAnimations(...animations) {\n const result = { ...DEFAULT_SPRING_ANIMATION };\n let instant = false;\n for (const animation of animations) {\n if (animation === \"instant\") {\n instant = true;\n continue;\n }\n if (typeof animation !== \"object\") {\n continue;\n }\n instant = false;\n result.damping = animation.damping ?? result.damping;\n result.stiffness = animation.stiffness ?? result.stiffness;\n result.mass = animation.mass ?? result.mass;\n }\n const key = JSON.stringify(result);\n if (!animationCache.has(key)) {\n animationCache.set(key, Object.freeze(result));\n }\n return instant ? \"instant\" : animationCache.get(key);\n}\n","// src/use-is-hydrated.tsx\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nfunction useIsHydrated() {\n return useSyncExternalStore(\n subscribe,\n () => true,\n () => false\n );\n}\nfunction subscribe() {\n return () => {\n };\n}\nexport {\n useIsHydrated\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useIsHydrated } from \"@radix-ui/react-use-is-hydrated\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n onImageLoadingStatusChange: setImageLoadingStatus,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }\n);\nAvatar.displayName = AVATAR_NAME;\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {\n }, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src, imageProps);\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n useLayoutEffect(() => {\n if (imageLoadingStatus !== \"idle\") {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }\n);\nAvatarImage.displayName = IMAGE_NAME;\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }\n);\nAvatarFallback.displayName = FALLBACK_NAME;\nfunction resolveLoadingStatus(image, src) {\n if (!image) {\n return \"idle\";\n }\n if (!src) {\n return \"error\";\n }\n if (image.src !== src) {\n image.src = src;\n }\n return image.complete && image.naturalWidth > 0 ? \"loaded\" : \"loading\";\n}\nfunction useImageLoadingStatus(src, { referrerPolicy, crossOrigin }) {\n const isHydrated = useIsHydrated();\n const imageRef = React.useRef(null);\n const image = (() => {\n if (!isHydrated) return null;\n if (!imageRef.current) {\n imageRef.current = new window.Image();\n }\n return imageRef.current;\n })();\n const [loadingStatus, setLoadingStatus] = React.useState(\n () => resolveLoadingStatus(image, src)\n );\n useLayoutEffect(() => {\n setLoadingStatus(resolveLoadingStatus(image, src));\n }, [image, src]);\n useLayoutEffect(() => {\n const updateStatus = (status) => () => {\n setLoadingStatus(status);\n };\n if (!image) return;\n const handleLoad = updateStatus(\"loaded\");\n const handleError = updateStatus(\"error\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n if (typeof crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n };\n }, [image, crossOrigin, referrerPolicy]);\n return loadingStatus;\n}\nvar Root = Avatar;\nvar Image = AvatarImage;\nvar Fallback = AvatarFallback;\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Fallback,\n Image,\n Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Avatar({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg';\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('aspect-square size-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n 'group/avatar-group *:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount };\n","import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nconst supportsLookbehind = (() => {\ntry {\n // eslint-disable-next-line prefer-regex-literals\n return !!new RegExp('(?<=1)(?<!1)');\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n blockquoteBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}>`),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// GFM allows * and _ inside strikethrough\nconst _punctuationGfmDel = /(?![*_])[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmDel = /(?![*_])[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmDel = /(?:[^\\s\\p{P}\\p{S}]|[*_])/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n .replace(/punct/g, _punctuationGfmDel)\n .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmDel)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmDel)\n .replace(/punct/g, _punctuationGfmDel)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n delLDelim: noopTest,\n delRDelim: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n delLDelim,\n delRDelim,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n","import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n let col = indent;\n let expanded = '';\n for (const char of line) {\n if (char === '\\t') {\n const added = 4 - (col % 4);\n expanded += ' '.repeat(added);\n col += added;\n } else {\n expanded += char;\n col++;\n }\n }\n\n return expanded;\n}\n","import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n expandTabs,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of blockquote\n if (blockquoteBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n blankLine = !nextLine.trim();\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n if (item.task) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n if (item.tokens[0]?.type === 'text' || item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].raw = item.tokens[0].raw.replace(this.rules.other.listReplaceTask, '');\n item.tokens[0].text = item.tokens[0].text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n let match = this.rules.inline.delLDelim.exec(src);\n if (!match) return;\n\n const nextChar = match[1] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength;\n\n const endReg = this.rules.inline.delRDelim;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue;\n\n rLength = [...rDelim].length;\n\n if (rLength !== lLength) continue;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters\n rLength = Math.min(rLength, rLength + delimTotal);\n // char length can be >1 for unicode characters\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create del token - only single ~ or double ~~ supported\n const text = raw.slice(lLength, -lLength);\n return {\n type: 'del',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escapeHtmlEntities(langString)\n + '\">'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escapeHtmlEntities(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n if (title) {\n out += ` title=\"${escapeHtmlEntities(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n }\n}\n","import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escapeHtmlEntities(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array<string>`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor<Root, 'text'>} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array<Nodes> | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array<Parents>} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array<Nodes>} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array<PhrasingContent>} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n */\n\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/**\n * Turn normal line endings into hard breaks.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @returns {undefined}\n * Nothing.\n */\nexport function newlineToBreak(tree) {\n findAndReplace(tree, [/\\r?\\n|\\r/g, replace])\n}\n\n/**\n * Replace line endings.\n *\n * @type {ReplaceFunction}\n */\nfunction replace() {\n return {type: 'break'}\n}\n","/**\n * @typedef {import('mdast').Root} Root\n */\n\nimport {newlineToBreak} from 'mdast-util-newline-to-break'\n\n/**\n * Support hard breaks without needing spaces or escapes (turns enters into\n * `<br>`s).\n *\n * @returns\n * Transform.\n */\nexport default function remarkBreaks() {\n /**\n * Transform.\n *\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n newlineToBreak(tree)\n }\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","/**\n * @import {\n * CompileContext,\n * Extension as FromMarkdownExtension,\n * Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n * Handle as ToMarkdownHandle,\n * Map,\n * Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {after: ']', before: value})\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n // To do: next major: change default.\n let firstLineBlank = false\n\n if (options && options.firstLineBlank) {\n firstLineBlank = true\n }\n\n return {\n handlers: {footnoteDefinition, footnoteReference},\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {before: value, after: ']'})\n )\n subexit()\n\n value += tracker.move(']:')\n\n if (node.children && node.children.length > 0) {\n tracker.shift(4)\n\n value += tracker.move(\n (firstLineBlank ? '\\n' : ' ') +\n state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n )\n }\n\n exit()\n\n return value\n }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩❤️👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩❤️👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table\n * Table data (matrix of strings).\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array<number>} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array<Array<string>>} Cells per row. */\n const cellMatrix = []\n /** @type {Array<Array<number>>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array<number>} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array<string>} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array<string>} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See <https://github.com/orgs/syntax-tree/discussions/60> for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array<Array<string>>} matrix\n * @param {Array<string | null | undefined> | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<Array<string>>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<string>} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // <https://github.com/github/cmark-gfm/issues/279>\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // <https://github.com/github/cmark-gfm/issues/278>.\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array<Event>} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > <https://github.com/github/cmark-gfm/issues/240>\n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array<Event>} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array<Change>}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array<Event>} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array<Event>} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array<Jump>} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array<Array<Event>>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array<Event>} events\n// * @param {Array<Jump>} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array<Align>}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array<Align>} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array<Event>} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor<Root>} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","'use client';\n\nimport { cn } from '@/lib/utils';\nimport React, { useEffect, useState } from 'react';\nimport { codeToHtml } from 'shiki';\n\nexport type CodeBlockProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlock({ children, className, ...props }: CodeBlockProps) {\n return (\n <div\n className={cn(\n 'not-prose flex w-full flex-col overflow-clip border',\n 'border-border bg-card text-card-foreground rounded-xl',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type CodeBlockCodeProps = {\n code: string;\n language?: string;\n theme?: string;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlockCode({\n code,\n language = 'tsx',\n theme = 'github-light',\n className,\n ...props\n}: CodeBlockCodeProps) {\n const [highlightedHtml, setHighlightedHtml] = useState<string | null>(null);\n\n useEffect(() => {\n async function highlight() {\n if (!code) {\n setHighlightedHtml('<pre><code></code></pre>');\n return;\n }\n\n const html = await codeToHtml(code, { lang: language, theme });\n setHighlightedHtml(html);\n }\n highlight();\n }, [code, language, theme]);\n\n const classNames = cn('w-full overflow-x-auto text-[13px] [&>pre]:px-4 [&>pre]:py-4', className);\n\n // SSR fallback: render plain code if not hydrated yet\n return highlightedHtml ? (\n <div className={classNames} dangerouslySetInnerHTML={{ __html: highlightedHtml }} {...props} />\n ) : (\n <div className={classNames} {...props}>\n <pre>\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n\nexport type CodeBlockGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CodeBlockGroup({ children, className, ...props }: CodeBlockGroupProps) {\n return (\n <div className={cn('flex items-center justify-between', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { CodeBlockGroup, CodeBlockCode, CodeBlock };\n","import { cn } from '@/lib/utils';\nimport { marked } from 'marked';\nimport React, { memo, useId, useMemo } from 'react';\nimport ReactMarkdown, { type Components } from 'react-markdown';\nimport remarkBreaks from 'remark-breaks';\nimport remarkGfm from 'remark-gfm';\nimport { CodeBlock, CodeBlockCode } from './code-block';\n\nexport interface MarkdownProps {\n children: string;\n id?: string;\n className?: string;\n components?: Partial<Components>;\n}\n\nfunction parseMarkdownIntoBlocks(markdown: string): string[] {\n const tokens = marked.lexer(markdown);\n return tokens.map((token) => token.raw);\n}\n\nfunction extractLanguage(className?: string): string {\n if (!className) return 'plaintext';\n const match = className.match(/language-(\\w+)/);\n return match ? match[1] : 'plaintext';\n}\n\nconst INITIAL_COMPONENTS: Partial<Components> = {\n code: function CodeComponent({ className, children, ...props }) {\n const isInline =\n !props.node?.position?.start.line ||\n props.node?.position?.start.line === props.node?.position?.end.line;\n\n if (isInline) {\n return (\n <span\n className={cn('bg-primary-foreground rounded-sm px-1 font-mono text-sm', className)}\n {...props}\n >\n {children}\n </span>\n );\n }\n\n const language = extractLanguage(className);\n\n return (\n <CodeBlock className={className}>\n <CodeBlockCode code={children as string} language={language} />\n </CodeBlock>\n );\n },\n pre: function PreComponent({ children }) {\n // Strip the <pre> wrapper — code blocks are rendered by CodeBlock\n return children as React.ReactElement;\n },\n};\n\nconst MemoizedMarkdownBlock = memo(\n function MarkdownBlock({\n content,\n components = INITIAL_COMPONENTS,\n }: {\n content: string;\n components?: Partial<Components>;\n }) {\n return (\n <ReactMarkdown remarkPlugins={[remarkGfm, remarkBreaks]} components={components}>\n {content}\n </ReactMarkdown>\n );\n },\n function propsAreEqual(prevProps, nextProps) {\n return prevProps.content === nextProps.content;\n }\n);\n\nMemoizedMarkdownBlock.displayName = 'MemoizedMarkdownBlock';\n\nfunction MarkdownComponent({\n children,\n id,\n className,\n components = INITIAL_COMPONENTS,\n}: MarkdownProps) {\n const generatedId = useId();\n const blockId = id ?? generatedId;\n const blocks = useMemo(() => parseMarkdownIntoBlocks(children), [children]);\n\n return (\n <div className={className}>\n {blocks.map((block, index) => (\n <MemoizedMarkdownBlock\n // eslint-disable-next-line react/no-array-index-key -- blocks are positional, no stable key\n key={`${blockId}-block-${index}`}\n content={block}\n components={components}\n />\n ))}\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = 'Markdown';\n\nexport { Markdown };\n","import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { Markdown } from './markdown';\n\nexport type MessageProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst Message = ({ children, className, ...props }: MessageProps) => (\n <div className={cn('flex gap-3', className)} {...props}>\n {children}\n </div>\n);\n\nexport interface MessageAvatarProps {\n src: string;\n alt: string;\n fallback?: string;\n delayMs?: number;\n className?: string;\n}\n\nconst MessageAvatar = ({ src, alt, fallback, delayMs, className }: MessageAvatarProps) => {\n return (\n <Avatar className={cn('h-8 w-8 shrink-0', className)}>\n <AvatarImage src={src} alt={alt} />\n {fallback ? <AvatarFallback delayMs={delayMs}>{fallback}</AvatarFallback> : null}\n </Avatar>\n );\n};\n\nexport type MessageContentProps = {\n children: React.ReactNode;\n markdown?: boolean;\n className?: string;\n} & React.ComponentProps<typeof Markdown> &\n React.HTMLProps<HTMLDivElement>;\n\nconst MessageContent = ({\n children,\n markdown = false,\n className,\n ...props\n}: MessageContentProps) => {\n const classNames = cn(\n 'rounded-lg p-2 text-foreground bg-secondary prose break-words whitespace-normal',\n className\n );\n\n return markdown ? (\n <Markdown className={classNames} {...props}>\n {children as string}\n </Markdown>\n ) : (\n <div className={classNames} {...props}>\n {children}\n </div>\n );\n};\n\nexport type MessageActionsProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst MessageActions = ({ children, className, ...props }: MessageActionsProps) => (\n <div className={cn('text-muted-foreground flex items-center gap-2', className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: 'top' | 'bottom' | 'left' | 'right';\n} & React.ComponentProps<typeof Tooltip>;\n\nconst MessageAction = ({\n tooltip,\n children,\n className,\n side = 'top',\n ...props\n}: MessageActionProps) => {\n return (\n <TooltipProvider>\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className={className}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport { Message, MessageAvatar, MessageContent, MessageActions, MessageAction };\n","'use client';\n\nimport { Textarea } from '@/components/ui/textarea';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport React, { createContext, useContext, useLayoutEffect, useRef, useState } from 'react';\n\ninterface PromptInputContextType {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n}\n\nconst PromptInputContext = createContext<PromptInputContextType>({\n isLoading: false,\n value: '',\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n textareaRef: React.createRef<HTMLTextAreaElement>(),\n});\n\nfunction usePromptInput() {\n return useContext(PromptInputContext);\n}\n\nexport type PromptInputProps = {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n} & React.ComponentProps<'div'>;\n\nfunction PromptInput({\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onClick,\n ...props\n}: PromptInputProps) {\n const [internalValue, setInternalValue] = useState(value ?? '');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n const handleClick: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (!disabled) textareaRef.current?.focus();\n onClick?.(e);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n textareaRef,\n }}\n >\n <div\n onClick={handleClick}\n className={cn(\n 'border-input bg-background cursor-text rounded-3xl border p-2 shadow-xs',\n disabled && 'cursor-not-allowed opacity-60',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport type PromptInputTextareaProps = {\n disableAutosize?: boolean;\n ref?: React.Ref<HTMLTextAreaElement>;\n} & Omit<React.ComponentProps<typeof Textarea>, 'ref'>;\n\nfunction PromptInputTextarea({\n className,\n onKeyDown,\n disableAutosize = false,\n ref: externalRef,\n ...props\n}: PromptInputTextareaProps) {\n const { value, setValue, maxHeight, onSubmit, disabled, textareaRef } = usePromptInput();\n\n const adjustHeight = (el: HTMLTextAreaElement | null) => {\n if (!el || disableAutosize) return;\n\n el.style.height = 'auto';\n\n if (typeof maxHeight === 'number') {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n };\n\n const handleRef = (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n if (typeof externalRef === 'function') {\n externalRef(el);\n } else if (externalRef && typeof externalRef === 'object') {\n (externalRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = el;\n }\n adjustHeight(el);\n };\n\n useLayoutEffect(() => {\n if (!textareaRef.current || disableAutosize) return;\n\n const el = textareaRef.current;\n el.style.height = 'auto';\n\n if (typeof maxHeight === 'number') {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, maxHeight, disableAutosize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n adjustHeight(e.target);\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={handleRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n className={cn(\n 'text-primary min-h-[44px] w-full resize-none border-none bg-transparent shadow-none outline-none focus-visible:ring-0 focus-visible:ring-offset-0',\n className\n )}\n rows={1}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport type PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction PromptInputActions({ children, className, ...props }: PromptInputActionsProps) {\n return (\n <div className={cn('flex items-center gap-2', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PromptInputActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: 'top' | 'bottom' | 'left' | 'right';\n} & React.ComponentProps<typeof Tooltip>;\n\nfunction PromptInputAction({\n tooltip,\n children,\n className,\n side = 'top',\n ...props\n}: PromptInputActionProps) {\n const { disabled } = usePromptInput();\n\n return (\n <Tooltip {...props}>\n <TooltipTrigger asChild disabled={disabled} onClick={(event) => event.stopPropagation()}>\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport { PromptInput, PromptInputTextarea, PromptInputActions, PromptInputAction };\n","/* eslint-disable react/no-array-index-key */\n'use client';\n\nimport { cn } from '@/lib/utils';\nimport React from 'react';\n\nexport interface LoaderProps {\n variant?:\n | 'circular'\n | 'classic'\n | 'pulse'\n | 'pulse-dot'\n | 'dots'\n | 'typing'\n | 'wave'\n | 'bars'\n | 'terminal'\n | 'text-blink'\n | 'text-shimmer'\n | 'loading-dots';\n size?: 'sm' | 'md' | 'lg';\n text?: string;\n className?: string;\n}\n\nexport function CircularLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const sizeClasses = {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n };\n\n return (\n <div\n className={cn(\n 'border-primary animate-spin rounded-full border-2 border-t-transparent',\n sizeClasses[size],\n className\n )}\n >\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function ClassicLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const sizeClasses = {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n };\n\n const barSizes = {\n sm: { height: '6px', width: '1.5px' },\n md: { height: '8px', width: '2px' },\n lg: { height: '10px', width: '2.5px' },\n };\n\n return (\n <div className={cn('relative', sizeClasses[size], className)}>\n <div className=\"absolute h-full w-full\">\n {[...Array(12)].map((_, i) => (\n <div\n key={i}\n className=\"bg-primary absolute animate-[spinner-fade_1.2s_linear_infinite] rounded-full\"\n style={{\n top: '0',\n left: '50%',\n marginLeft: size === 'sm' ? '-0.75px' : size === 'lg' ? '-1.25px' : '-1px',\n transformOrigin: `${size === 'sm' ? '0.75px' : size === 'lg' ? '1.25px' : '1px'} ${size === 'sm' ? '10px' : size === 'lg' ? '14px' : '12px'}`,\n transform: `rotate(${i * 30}deg)`,\n opacity: 0,\n animationDelay: `${i * 0.1}s`,\n height: barSizes[size].height,\n width: barSizes[size].width,\n }}\n />\n ))}\n </div>\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function PulseLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const sizeClasses = {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n };\n\n return (\n <div className={cn('relative', sizeClasses[size], className)}>\n <div className=\"border-primary absolute inset-0 animate-[thin-pulse_1.5s_ease-in-out_infinite] rounded-full border-2\" />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function PulseDotLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const sizeClasses = {\n sm: 'size-1',\n md: 'size-2',\n lg: 'size-3',\n };\n\n return (\n <div\n className={cn(\n 'bg-primary animate-[pulse-dot_1.2s_ease-in-out_infinite] rounded-full',\n sizeClasses[size],\n className\n )}\n >\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function DotsLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const dotSizes = {\n sm: 'h-1.5 w-1.5',\n md: 'h-2 w-2',\n lg: 'h-2.5 w-2.5',\n };\n\n const containerSizes = {\n sm: 'h-4',\n md: 'h-5',\n lg: 'h-6',\n };\n\n return (\n <div className={cn('flex items-center space-x-1', containerSizes[size], className)}>\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-primary animate-[bounce-dots_1.4s_ease-in-out_infinite] rounded-full',\n dotSizes[size]\n )}\n style={{\n animationDelay: `${i * 160}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TypingLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const dotSizes = {\n sm: 'h-1 w-1',\n md: 'h-1.5 w-1.5',\n lg: 'h-2 w-2',\n };\n\n const containerSizes = {\n sm: 'h-4',\n md: 'h-5',\n lg: 'h-6',\n };\n\n return (\n <div className={cn('flex items-center space-x-1', containerSizes[size], className)}>\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn('bg-primary animate-[typing_1s_infinite] rounded-full', dotSizes[size])}\n style={{\n animationDelay: `${i * 250}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function WaveLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const barWidths = {\n sm: 'w-0.5',\n md: 'w-0.5',\n lg: 'w-1',\n };\n\n const containerSizes = {\n sm: 'h-4',\n md: 'h-5',\n lg: 'h-6',\n };\n\n const heights = {\n sm: ['6px', '9px', '12px', '9px', '6px'],\n md: ['8px', '12px', '16px', '12px', '8px'],\n lg: ['10px', '15px', '20px', '15px', '10px'],\n };\n\n return (\n <div className={cn('flex items-center gap-0.5', containerSizes[size], className)}>\n {[...Array(5)].map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-primary animate-[wave_1s_ease-in-out_infinite] rounded-full',\n barWidths[size]\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n height: heights[size][i],\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function BarsLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const barWidths = {\n sm: 'w-1',\n md: 'w-1.5',\n lg: 'w-2',\n };\n\n const containerSizes = {\n sm: 'h-4 gap-1',\n md: 'h-5 gap-1.5',\n lg: 'h-6 gap-2',\n };\n\n return (\n <div className={cn('flex', containerSizes[size], className)}>\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-primary h-full animate-[wave-bars_1.2s_ease-in-out_infinite]',\n barWidths[size]\n )}\n style={{\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TerminalLoader({\n className,\n size = 'md',\n}: {\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const cursorSizes = {\n sm: 'h-3 w-1.5',\n md: 'h-4 w-2',\n lg: 'h-5 w-2.5',\n };\n\n const textSizes = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n const containerSizes = {\n sm: 'h-4',\n md: 'h-5',\n lg: 'h-6',\n };\n\n return (\n <div className={cn('flex items-center space-x-1', containerSizes[size], className)}>\n <span className={cn('text-primary font-mono', textSizes[size])}>{'>'}</span>\n <div className={cn('bg-primary animate-[blink_1s_step-end_infinite]', cursorSizes[size])} />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TextBlinkLoader({\n text = 'Thinking',\n className,\n size = 'md',\n}: {\n text?: string;\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const textSizes = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n return (\n <div\n className={cn(\n 'animate-[text-blink_2s_ease-in-out_infinite] font-medium',\n textSizes[size],\n className\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextShimmerLoader({\n text = 'Thinking',\n className,\n size = 'md',\n}: {\n text?: string;\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const textSizes = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n return (\n <div\n className={cn(\n 'bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]',\n 'bg-size-[200%_auto] bg-clip-text font-medium text-transparent',\n 'animate-[shimmer_4s_infinite_linear]',\n textSizes[size],\n className\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextDotsLoader({\n className,\n text = 'Thinking',\n size = 'md',\n}: {\n className?: string;\n text?: string;\n size?: 'sm' | 'md' | 'lg';\n}) {\n const textSizes = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n return (\n <div className={cn('inline-flex items-center', className)}>\n <span className={cn('text-primary font-medium', textSizes[size])}>{text}</span>\n <span className=\"inline-flex\">\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.2s]\">.</span>\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.4s]\">.</span>\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.6s]\">.</span>\n </span>\n </div>\n );\n}\n\nfunction Loader({ variant = 'circular', size = 'md', text, className }: LoaderProps) {\n switch (variant) {\n case 'circular':\n return <CircularLoader size={size} className={className} />;\n case 'classic':\n return <ClassicLoader size={size} className={className} />;\n case 'pulse':\n return <PulseLoader size={size} className={className} />;\n case 'pulse-dot':\n return <PulseDotLoader size={size} className={className} />;\n case 'dots':\n return <DotsLoader size={size} className={className} />;\n case 'typing':\n return <TypingLoader size={size} className={className} />;\n case 'wave':\n return <WaveLoader size={size} className={className} />;\n case 'bars':\n return <BarsLoader size={size} className={className} />;\n case 'terminal':\n return <TerminalLoader size={size} className={className} />;\n case 'text-blink':\n return <TextBlinkLoader text={text} size={size} className={className} />;\n case 'text-shimmer':\n return <TextShimmerLoader text={text} size={size} className={className} />;\n case 'loading-dots':\n return <TextDotsLoader text={text} size={size} className={className} />;\n default:\n return <CircularLoader size={size} className={className} />;\n }\n}\n\nexport { Loader };\n","'use client';\n\nimport { MessageSquare } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nconst SUGGESTIONS = [\n 'What features are in progress?',\n 'Help me plan a new feature',\n 'Explain the project architecture',\n 'What should I work on next?',\n] as const;\n\nexport interface ChatEmptyStateProps {\n onSuggestionClick?: (suggestion: string) => void;\n className?: string;\n}\n\nexport function ChatEmptyState({ onSuggestionClick, className }: ChatEmptyStateProps) {\n return (\n <div className={cn('flex flex-1 flex-col items-center justify-center gap-6 p-6', className)}>\n <div className=\"flex flex-col items-center gap-3\">\n <div className=\"bg-muted flex h-12 w-12 items-center justify-center rounded-full\">\n <MessageSquare className=\"text-muted-foreground h-6 w-6\" />\n </div>\n <h2 className=\"text-xl font-semibold tracking-tight\">Chat with Shep</h2>\n <p className=\"text-muted-foreground max-w-sm text-center text-sm\">\n Ask me anything about your project\n </p>\n </div>\n <div className=\"flex flex-wrap justify-center gap-2\">\n {SUGGESTIONS.map((suggestion) => (\n <Button\n key={suggestion}\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onSuggestionClick?.(suggestion)}\n >\n {suggestion}\n </Button>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { Trash2 } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '@/components/ui/alert-dialog';\nimport { Loader } from '@/components/ui/loader';\nimport { cn } from '@/lib/utils';\n\nexport interface ChatHeaderProps {\n onClear?: () => void;\n isStreaming?: boolean;\n className?: string;\n}\n\nexport function ChatHeader({ onClear, isStreaming = false, className }: ChatHeaderProps) {\n return (\n <div className={cn('flex items-center justify-between border-b px-4 py-2', className)}>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-sm font-semibold\">Chat</h1>\n {isStreaming ? <Loader variant=\"typing\" size=\"sm\" /> : null}\n </div>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Clear conversation\">\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent size=\"sm\">\n <AlertDialogHeader>\n <AlertDialogTitle>Clear conversation?</AlertDialogTitle>\n <AlertDialogDescription>\n This will remove all messages. This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction variant=\"destructive\" onClick={onClear}>\n Clear\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","'use client';\n\nimport { AlertCircle, RotateCcw, Send } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n} from '@/components/ui/chat-container';\nimport { Message, MessageAvatar, MessageContent } from '@/components/ui/message';\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from '@/components/ui/prompt-input';\nimport { Loader } from '@/components/ui/loader';\nimport { ChatEmptyState } from './chat-empty-state';\nimport { ChatHeader } from './chat-header';\nimport { cn } from '@/lib/utils';\n\nexport type ChatMessageStatus = 'sending' | 'streaming' | 'complete' | 'error';\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n status?: ChatMessageStatus;\n}\n\nexport interface ChatViewProps {\n messages: ChatMessage[];\n input: string;\n onInputChange: (value: string) => void;\n onSubmit: () => void;\n onSuggestionClick?: (suggestion: string) => void;\n onClear?: () => void;\n onRetry?: () => void;\n isStreaming?: boolean;\n disabled?: boolean;\n error?: string | null;\n inputRef?: React.RefObject<HTMLTextAreaElement | null>;\n className?: string;\n}\n\nexport function ChatView({\n messages,\n input,\n onInputChange,\n onSubmit,\n onSuggestionClick,\n onClear,\n onRetry,\n isStreaming = false,\n disabled = false,\n error,\n inputRef,\n className,\n}: ChatViewProps) {\n const isEmpty = messages.length === 0;\n const lastMessage = messages[messages.length - 1];\n const showThinking =\n isStreaming && lastMessage?.role === 'user' && lastMessage?.status !== 'error';\n\n return (\n <div className={cn('flex h-full flex-col', className)}>\n <ChatHeader onClear={onClear} isStreaming={isStreaming} />\n\n {isEmpty ? (\n <ChatEmptyState onSuggestionClick={onSuggestionClick} />\n ) : (\n <ChatContainerRoot className=\"flex-1\" aria-label=\"Chat messages\">\n <ChatContainerContent className=\"gap-4 p-4\">\n <div aria-live=\"polite\" aria-atomic=\"false\" className=\"contents\">\n {messages.map((message) => (\n <Message\n key={message.id}\n className={message.role === 'user' ? 'flex-row-reverse' : ''}\n role=\"article\"\n aria-label={`${message.role === 'user' ? 'You' : 'Shep'}: ${message.content.slice(0, 80)}`}\n >\n <MessageAvatar\n src={message.role === 'assistant' ? '/shep-avatar.svg' : ''}\n alt={message.role === 'assistant' ? 'Shep' : 'You'}\n fallback={message.role === 'assistant' ? 'S' : 'U'}\n />\n <div className=\"flex max-w-[80%] flex-col gap-1\">\n <MessageContent\n markdown={message.role === 'assistant'}\n className={cn(\n message.role === 'user' && 'bg-primary text-primary-foreground'\n )}\n >\n {message.content}\n </MessageContent>\n {message.status === 'error' && onRetry ? (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={onRetry}\n className=\"self-start\"\n aria-label=\"Retry sending message\"\n >\n <RotateCcw className=\"mr-1 h-3 w-3\" />\n Retry\n </Button>\n ) : null}\n </div>\n </Message>\n ))}\n </div>\n {showThinking ? (\n <Message role=\"article\" aria-label=\"Shep is thinking\">\n <MessageAvatar src=\"/shep-avatar.svg\" alt=\"Shep\" fallback=\"S\" />\n <div className=\"bg-secondary flex items-center rounded-lg p-3\">\n <Loader variant=\"typing\" size=\"sm\" />\n </div>\n </Message>\n ) : null}\n {error && !isStreaming ? (\n <div\n className=\"border-destructive bg-destructive/10 mx-auto flex max-w-md items-center gap-2 rounded-md border px-3 py-2 text-sm\"\n role=\"alert\"\n >\n <AlertCircle className=\"text-destructive h-4 w-4 shrink-0\" />\n <span className=\"text-destructive flex-1\">{error}</span>\n {onRetry ? (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={onRetry}\n aria-label=\"Retry last message\"\n >\n <RotateCcw className=\"mr-1 h-3 w-3\" />\n Retry\n </Button>\n ) : null}\n </div>\n ) : null}\n <ChatContainerScrollAnchor />\n </ChatContainerContent>\n </ChatContainerRoot>\n )}\n\n <div className=\"border-t p-4\">\n <PromptInput\n value={input}\n onValueChange={onInputChange}\n onSubmit={onSubmit}\n isLoading={isStreaming}\n disabled={disabled}\n >\n <PromptInputTextarea\n placeholder=\"Type a message...\"\n aria-label=\"Chat message input\"\n ref={inputRef}\n />\n <PromptInputActions className=\"justify-end px-2 pb-2\">\n <PromptInputAction tooltip=\"Send message\">\n <Button\n variant=\"default\"\n size=\"icon-sm\"\n disabled={!input.trim() || isStreaming || disabled}\n onClick={onSubmit}\n aria-label=\"Send message\"\n >\n <Send className=\"h-4 w-4\" />\n </Button>\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { toast } from 'sonner';\nimport { useChat } from '@/hooks/use-chat';\nimport { ChatView } from './chat-view';\n\nexport function ChatPageClient() {\n const { messages, status, error, sendMessage, retry, clearChat } = useChat();\n const [input, setInput] = useState('');\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const prevStatusRef = useRef(status);\n\n const isStreaming = status === 'sending' || status === 'streaming';\n\n // Auto-focus input on mount\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n // Re-focus input after streaming completes or on error\n useEffect(() => {\n const prevStatus = prevStatusRef.current;\n prevStatusRef.current = status;\n\n if (\n (prevStatus === 'streaming' || prevStatus === 'sending') &&\n (status === 'idle' || status === 'error')\n ) {\n inputRef.current?.focus();\n }\n }, [status]);\n\n // Show toast on error\n useEffect(() => {\n if (error) {\n toast.error('Chat error', { description: error });\n }\n }, [error]);\n\n const handleSubmit = useCallback(() => {\n const trimmed = input.trim();\n if (!trimmed || isStreaming) return;\n\n void sendMessage(trimmed);\n setInput('');\n }, [input, isStreaming, sendMessage]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n if (isStreaming) return;\n void sendMessage(suggestion);\n },\n [isStreaming, sendMessage]\n );\n\n const handleClear = useCallback(() => {\n clearChat();\n setInput('');\n inputRef.current?.focus();\n }, [clearChat]);\n\n return (\n <ChatView\n messages={messages}\n input={input}\n onInputChange={setInput}\n onSubmit={handleSubmit}\n onSuggestionClick={handleSuggestionClick}\n onClear={handleClear}\n onRetry={retry}\n isStreaming={isStreaming}\n error={error}\n inputRef={inputRef}\n />\n );\n}\n"],"names":["_getDefaults","_defaults","changeDefaults","newDefaults","noopTest","edit","regex","opt","source","obj","name","val","valSource","other","supportsLookbehind","bull","indent","newline","blockCode","fences","hr","heading","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","blockText","_blockLabel","def","list","_tag","_comment","html","paragraph","blockquote","blockNormal","gfmTable","blockGfm","blockPedantic","escape","inlineCode","br","inlineText","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","_punctuationOrSpaceGfmStrongEm","_notPunctuationOrSpaceGfmStrongEm","_punctuationGfmDel","_punctuationOrSpaceGfmDel","_notPunctuationOrSpaceGfmDel","blockSkip","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","delLDelim","delRDelimCore","delRDelim","anyPunctuation","autolink","_inlineComment","tag","_inlineLabel","link","reflink","nolink","reflinkSearch","_caseInsensitiveProtocol","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","escapeReplacements","getEscapeReplacement","ch","escapeHtmlEntities","encode","cleanUrl","href","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","i","rtrim","c","invert","l","suffLen","currChar","findClosingBracket","b","level","expandTabs","line","col","expanded","char","added","outputLink","cap","raw","lexer","rules","title","text","token","indentCodeCompensation","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","_Tokenizer","options","src","trimmed","lines","tokens","inBlockquote","currentLines","currentRaw","currentText","top","lastToken","oldToken","newText","newToken","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","nextLine","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","blockquoteBeginRegex","rawLine","nextLineWithoutTabs","lastItem","item","taskRaw","checkboxToken","spacers","t","hasMultipleLineBreaks","headers","aligns","rows","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_Lexer","__Lexer","next","lastParagraphClipped","extTokenizer","cutSrc","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","lang","langString","code","depth","ordered","start","body","j","type","startAttr","checked","header","k","content","cleanHref","out","_TextRenderer","_Parser","__Parser","anyToken","genericToken","ret","renderer","_Hooks","markdown","Marked","args","callback","values","tableToken","listToken","childTokens","extensions","pack","opts","ext","prevRenderer","extLevel","prop","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooks","hooksProp","hooksFunc","prevHook","arg","walkTokens","packWalktokens","blockType","origOpt","throwError","processedSrc","processedTokens","e","silent","async","msg","markedInstance","marked","setOptions","use","parseInline","parse","parser"],"mappings":"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","ignoreList":[2,3,4,5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76]}
|