<script setup lang="ts">
import { useStorage } from '@vueuse/core';
import { useThemeVars } from 'naive-ui';
import { RouterLink, useRoute } from 'vue-router';
import MenuIconItem from './MenuIconItem.vue';
import type { Tool, ToolCategory } from '@/tools/tools.types';

const props = withDefaults(defineProps<{ toolsByCategory?: ToolCategory[] }>(), { toolsByCategory: () => [] });
const { toolsByCategory } = toRefs(props);
const route = useRoute();

const makeLabel = (tool: Tool) => () => h(RouterLink, { to: tool.path }, { default: () => tool.name });
const makeIcon = (tool: Tool) => () => h(MenuIconItem, { tool });

const collapsedCategories = useStorage<Record<string, boolean>>(
  'menu-tool-option:collapsed-categories',
  {},
  undefined,
  {
    deep: true,
    serializer: {
      read: v => (v ? JSON.parse(v) : null),
      write: v => JSON.stringify(v),
    },
  },
);

function toggleCategoryCollapse({ name }: { name: string }) {
  collapsedCategories.value[name] = !collapsedCategories.value[name];
}

const menuOptions = computed(() =>
  toolsByCategory.value.map(({ name, components }) => ({
    name,
    isCollapsed: collapsedCategories.value[name],
    tools: components.map(tool => ({
      label: makeLabel(tool),
      icon: makeIcon(tool),
      key: tool.path,
    })),
  })),
);

const themeVars = useThemeVars();
</script>

<template>
  <div v-for="{ name, tools, isCollapsed } of menuOptions" :key="name">
    <div ml-6px mt-12px flex cursor-pointer items-center op-60 @click="toggleCategoryCollapse({ name })">
      <span :class="{ 'rotate-0': isCollapsed, 'rotate-90': !isCollapsed }" text-16px lh-1 op-50 transition-transform>
        <icon-mdi-chevron-right />
      </span>

      <span ml-8px text-13px>
        {{ name }}
      </span>
    </div>

    <n-collapse-transition :show="!isCollapsed">
      <div class="menu-wrapper">
        <div class="toggle-bar" @click="toggleCategoryCollapse({ name })" />

        <n-menu
          class="menu"
          :value="route.path"
          :collapsed-width="64"
          :collapsed-icon-size="22"
          :options="tools"
          :indent="8"
          :default-expand-all="true"
        />
      </div>
    </n-collapse-transition>
  </div>
</template>

<style scoped lang="less">
.menu-wrapper {
  display: flex;
  flex-direction: row;
  .menu {
    flex: 1;
    margin-bottom: 5px;

    ::v-deep(.n-menu-item-content::before) {
      left: 0;
      right: 13px;
    }
  }

  .toggle-bar {
    width: 24px;
    opacity: 0.1;
    transition: opacity ease 0.2s;
    position: relative;
    cursor: pointer;

    &::before {
      width: 2px;
      height: 100%;
      content: ' ';
      background-color: v-bind('themeVars.textColor3');
      border-radius: 2px;
      position: absolute;
      top: 0;
      left: 14px;
    }

    &:hover {
      opacity: 0.5;
    }
  }
}
</style>
on>
<option value='db22'>db22</option>
<option value='debugging-mdx-memory'>debugging-mdx-memory</option>
<option value='deno-test'>deno-test</option>
<option value='densities-handling'>densities-handling</option>
<option value='disable-telemetry'>disable-telemetry</option>
<option value='docs/netlify-adapter-site-requirement'>docs/netlify-adapter-site-requirement</option>
<option value='draft/content-collections-file'>draft/content-collections-file</option>
<option value='draft/script-style-bleed'>draft/script-style-bleed</option>
<option value='examples/basics'>examples/basics</option>
<option value='examples/blog'>examples/blog</option>
<option value='examples/component'>examples/component</option>
<option value='examples/container-with-vitest'>examples/container-with-vitest</option>
<option value='examples/framework-alpine'>examples/framework-alpine</option>
<option value='examples/framework-lit'>examples/framework-lit</option>
<option value='examples/framework-multiple'>examples/framework-multiple</option>
<option value='examples/framework-preact'>examples/framework-preact</option>
<option value='examples/framework-react'>examples/framework-react</option>
<option value='examples/framework-solid'>examples/framework-solid</option>
<option value='examples/framework-svelte'>examples/framework-svelte</option>
<option value='examples/framework-vue'>examples/framework-vue</option>
<option value='examples/hackernews'>examples/hackernews</option>
<option value='examples/integration'>examples/integration</option>
<option value='examples/minimal'>examples/minimal</option>
<option value='examples/portfolio'>examples/portfolio</option>
<option value='examples/ssr'>examples/ssr</option>
<option value='examples/starlog'>examples/starlog</option>
<option value='examples/toolbar-app'>examples/toolbar-app</option>
<option value='examples/with-markdoc'>examples/with-markdoc</option>
<option value='examples/with-mdx'>examples/with-mdx</option>
<option value='examples/with-nanostores'>examples/with-nanostores</option>
<option value='examples/with-tailwindcss'>examples/with-tailwindcss</option>
<option value='examples/with-vitest'>examples/with-vitest</option>
<option value='experiment-routes'>experiment-routes</option>
<option value='experiment/markdown-components'>experiment/markdown-components</option>
<option value='expr-before'>expr-before</option>
<option value='fallback-default-fade'>fallback-default-fade</option>
<option value='feat/action-on-result'>feat/action-on-result</option>
<option value='feat/action-success'>feat/action-success</option>
<option value='feat/all-fragments'>feat/all-fragments</option>
<option value='feat/astro-add'>feat/astro-add</option>
<option value='feat/astro-client'>feat/astro-client</option>
<option value='feat/astro-jsx'>feat/astro-jsx</option>
<option value='feat/astro-v-config'>feat/astro-v-config</option>
<option value='feat/autogenerated-tsconfig'>feat/autogenerated-tsconfig</option>
<option value='feat/better-data-types'>feat/better-data-types</option>
<option value='feat/better-table-type'>feat/better-table-type</option>
<option value='feat/break-out-seed-returning'>feat/break-out-seed-returning</option>
<option value='feat/cache-module-graph'>feat/cache-module-graph</option>
<option value='feat/ci-next'>feat/ci-next</option>
<option value='feat/cli'>feat/cli</option>
<option value='feat/codemod'>feat/codemod</option>
<option value='feat/config-log-level'>feat/config-log-level</option>
<option value='feat/container'>feat/container</option>
<option value='feat/context'>feat/context</option>
<option value='feat/create-astro-replace-component-selector-with-astro-add'>feat/create-astro-replace-component-selector-with-astro-add</option>
<option value='feat/create-astro-ui'>feat/create-astro-ui</option>
<option value='feat/csr'>feat/csr</option>
<option value='feat/data-improvements'>feat/data-improvements</option>
<option value='feat/data-with-set'>feat/data-with-set</option>
<option value='feat/db-action'>feat/db-action</option>
<option value='feat/db-relations'>feat/db-relations</option>
<option value='feat/define-data'>feat/define-data</option>
<option value='feat/devtools'>feat/devtools</option>
<option value='feat/dynamic-client-directives'>feat/dynamic-client-directives</option>
<option value='feat/editor'>feat/editor</option>
<option value='feat/experimental-jsx'>feat/experimental-jsx</option>
<option value='feat/expose-action-api-context'>feat/expose-action-api-context</option>
<option value='feat/expose-frontmatter-to-build-done-hook'>feat/expose-frontmatter-to-build-done-hook</option>
<option value='feat/fetch-cache'>feat/fetch-cache</option>
<option value='feat/flow-components'>feat/flow-components</option>
<option value='feat/fonts-granular-preload'>feat/fonts-granular-preload</option>
<option value='feat/fonts-retrieve-data'>feat/fonts-retrieve-data</option>
<option value='feat/foreign-key-migrations'>feat/foreign-key-migrations</option>
<option value='feat/foreign-keys'>feat/foreign-keys</option>
<option value='feat/html-pages'>feat/html-pages</option>
<option value='feat/image-placeholders'>feat/image-placeholders</option>
<option value='feat/improve-custom-element-detection'>feat/improve-custom-element-detection</option>
<option value='feat/incremental-build'>feat/incremental-build</option>
<option value='feat/indexes'>feat/indexes</option>
<option value='feat/integration-kit'>feat/integration-kit</option>
<option value='feat/jsx-transform'>feat/jsx-transform</option>
<option value='feat/legacy-markdown-flag'>feat/legacy-markdown-flag</option>
<option value='feat/markdoc-embeds'>feat/markdoc-embeds</option>
<option value='feat/markdown-components'>feat/markdown-components</option>
<option value='feat/mdx-js-injection'>feat/mdx-js-injection</option>
<option value='feat/mdx-plugin-export'>feat/mdx-plugin-export</option>
<option value='feat/minify-html'>feat/minify-html</option>
<option value='feat/next-get-env'>feat/next-get-env</option>
<option value='feat/og'>feat/og</option>
<option value='feat/ooo-streaming'>feat/ooo-streaming</option>
<option value='feat/pragma'>feat/pragma</option>
<option value='feat/preview'>feat/preview</option>
<option value='feat/react-19'>feat/react-19</option>
<option value='feat/react-19-actions'>feat/react-19-actions</option>
<option value='feat/redirect-on-html-backup'>feat/redirect-on-html-backup</option>
<option value='feat/references'>feat/references</option>
<option value='feat/remote-flag'>feat/remote-flag</option>
<option value='feat/remove-astro-image-backup'>feat/remove-astro-image-backup</option>
<option value='feat/remove-studio'>feat/remove-studio</option>
<option value='feat/render-with-queue'>feat/render-with-queue</option>
<option value='feat/reroute-ssr'>feat/reroute-ssr</option>
<option value='feat/resolve-entrypoint'>feat/resolve-entrypoint</option>
<option value='feat/router'>feat/router</option>
<option value='feat/router-ii'>feat/router-ii</option>
<option value='feat/seo-components'>feat/seo-components</option>
<option value='feat/skip-sync-flag'>feat/skip-sync-flag</option>
<option value='feat/spa'>feat/spa</option>
<option value='feat/spa-ii'>feat/spa-ii</option>
<option value='feat/squoosh'>feat/squoosh</option>
<option value='feat/standard-schema'>feat/standard-schema</option>
<option value='feat/storage-studio'>feat/storage-studio</option>
<option value='feat/streaming-rendering'>feat/streaming-rendering</option>
<option value='feat/style-obj'>feat/style-obj</option>
<option value='feat/test-utils'>feat/test-utils</option>
<option value='feat/xray-improvements'>feat/xray-improvements</option>
<option value='fetch-astro-pages-mvp'>fetch-astro-pages-mvp</option>
<option value='fix-408'>fix-408</option>
<option value='fix-all-pages-key'>fix-all-pages-key</option>
<option value='fix-beta-ref'>fix-beta-ref</option>
<option value='fix-create-ref'>fix-create-ref</option>
<option value='fix-netlify-edge'>fix-netlify-edge</option>
<option value='fix-next-basics'>fix-next-basics</option>
<option value='fix-nullish-slot-name'>fix-nullish-slot-name</option>
<option value='fix-s-island-fallback' selected='selected'>fix-s-island-fallback</option>
<option value='fix-vite-asset'>fix-vite-asset</option>
<option value='fix/actions-cookies'>fix/actions-cookies</option>
<option value='fix/actions-pending-timeout'>fix/actions-pending-timeout</option>
<option value='fix/assets-types'>fix/assets-types</option>
<option value='fix/astro-config-refresh'>fix/astro-config-refresh</option>
<option value='fix/astro-html-escape-bug'>fix/astro-html-escape-bug</option>
<option value='fix/build-subpaths'>fix/build-subpaths</option>
<option value='fix/client-only-component-css'>fix/client-only-component-css</option>
<option value='fix/client-scripts-windows'>fix/client-scripts-windows</option>
<option value='fix/config-migration-defaults'>fix/config-migration-defaults</option>
<option value='fix/container-directives'>fix/container-directives</option>
<option value='fix/dates'>fix/dates</option>
<option value='fix/db-integration-with-missing-config'>fix/db-integration-with-missing-config</option>
<option value='fix/devtoolbar-data-unset'>fix/devtoolbar-data-unset</option>
<option value='fix/empty-slots'>fix/empty-slots</option>
<option value='fix/filepath-layer'>fix/filepath-layer</option>
<option value='fix/frontmatter-file-url'>fix/frontmatter-file-url</option>
<option value='fix/head-propagation'>fix/head-propagation</option>
<option value='fix/hmr-css-deps'>fix/hmr-css-deps</option>
<option value='fix/import-ts-errors'>fix/import-ts-errors</option>
<option value='fix/main-build-failure'>fix/main-build-failure</option>
<option value='fix/map-file-404-logs'>fix/map-file-404-logs</option>
<option value='fix/mdx-named-slots'>fix/mdx-named-slots</option>
<option value='fix/middleware-import'>fix/middleware-import</option>
<option value='fix/multi-images'>fix/multi-images</option>
<option value='fix/nested-get-collection-call'>fix/nested-get-collection-call</option>
<option value='fix/preact-package-build-failure'>fix/preact-package-build-failure</option>
<option value='fix/primary-key-optional'>fix/primary-key-optional</option>
<option value='fix/regex-flags'>fix/regex-flags</option>
<option value='fix/server-headers'>fix/server-headers</option>
<option value='fix/stable-renderer-order'>fix/stable-renderer-order</option>
<option value='fix/transaction-type'>fix/transaction-type</option>
<option value='fix/vue-nested'>fix/vue-nested</option>
<option value='fix/webapi-dev'>fix/webapi-dev</option>
<option value='fork/markdoc-poc-with-md-support'>fork/markdoc-poc-with-md-support</option>
<option value='fork/markdoc-poc-with-parser'>fork/markdoc-poc-with-parser</option>
<option value='format-imports-run'>format-imports-run</option>
<option value='formatting'>formatting</option>
<option value='forward-button'>forward-button</option>
<option value='framework-agnostic-astro-components'>framework-agnostic-astro-components</option>
<option value='fryuni/db-pluggable-backend'>fryuni/db-pluggable-backend</option>
<option value='fryuni/test-route-setup-hook'>fryuni/test-route-setup-hook</option>
<option value='fryuni/tracing-hooks'>fryuni/tracing-hooks</option>
<option value='hippotastic/legitimate-bat'>hippotastic/legitimate-bat</option>
<option value='hoisted-script-ts'>hoisted-script-ts</option>
<option value='host-ssr-example-2'>host-ssr-example-2</option>
<option value='hostfornode'>hostfornode</option>
<option value='image-non-node'>image-non-node</option>
<option value='improve-base-handling'>improve-base-handling</option>
<option value='inline-hoisted-scripts-now'>inline-hoisted-scripts-now</option>
<option value='jn.convert-assertions-to-query-params'>jn.convert-assertions-to-query-params</option>
<option value='latest'>latest</option>
<option value='live-loaders'>live-loaders</option>
<option value='main'>main</option>
<option value='mandar1jn/ci-repo-check'>mandar1jn/ci-repo-check</option>
<option value='markdoc-embed-prototyping'>markdoc-embed-prototyping</option>
<option value='markdown'>markdown</option>
<option value='markdown-poc'>markdown-poc</option>
<option value='mdx-path'>mdx-path</option>
<option value='mk/render-slot-template-backup'>mk/render-slot-template-backup</option>
<option value='move-default-md-code-component'>move-default-md-code-component</option>
<option value='mt/lit-DSD'>mt/lit-DSD</option>
<option value='mt/lit-regen'>mt/lit-regen</option>
<option value='mt/parse-DSD'>mt/parse-DSD</option>
<option value='mt/router_refactoring'>mt/router_refactoring</option>
<option value='nate/new-blog-template'>nate/new-blog-template</option>
<option value='netlify-1'>netlify-1</option>
<option value='netlify-preview'>netlify-preview</option>
<option value='new-adapter-api'>new-adapter-api</option>
<option value='next'>next</option>
<option value='next-render'>next-render</option>
<option value='no-more-vite-postprocess'>no-more-vite-postprocess</option>
<option value='no-more-vite-postprocess2'>no-more-vite-postprocess2</option>
<option value='old-build'>old-build</option>
<option value='plt-1006/unified-and-mdx'>plt-1006/unified-and-mdx</option>
<option value='plt-1768-trailing-slash-object'>plt-1768-trailing-slash-object</option>
<option value='preact-shared-signals'>preact-shared-signals</option>
<option value='process-env-override'>process-env-override</option>
<option value='progress-log'>progress-log</option>
<option value='re-export-drivers'>re-export-drivers</option>
<option value='react-fast-refresh'>react-fast-refresh</option>
<option value='redirects-priority2'>redirects-priority2</option>
<option value='redirects-ssg-object'>redirects-ssg-object</option>
<option value='refactor-how-client-directives-work'>refactor-how-client-directives-work</option>
<option value='refactor/image-internals'>refactor/image-internals</option>
<option value='refactor/markdoc-renderer'>refactor/markdoc-renderer</option>
<option value='refactor/rendere-queue'>refactor/rendere-queue</option>
<option value='refactor/sitemap'>refactor/sitemap</option>
<option value='refactor/ssr-size'>refactor/ssr-size</option>
<option value='release/0.17'>release/0.17</option>
<option value='release/0.18'>release/0.18</option>
<option value='remote-cdn-link'>remote-cdn-link</option>
<option value='remove-fs-abstraction'>remove-fs-abstraction</option>
<option value='remove-start'>remove-start</option>
<option value='restart-on-lock'>restart-on-lock</option>
<option value='revert-13008-renovate/all-minor-patch'>revert-13008-renovate/all-minor-patch</option>
<option value='revert-lockfile'>revert-lockfile</option>
<option value='route-manifest-adapter'>route-manifest-adapter</option>
<option value='sarah11918-image-errors'>sarah11918-image-errors</option>
<option value='sarah11918-patch-2'>sarah11918-patch-2</option>
<option value='sb-tests2'>sb-tests2</option>
<option value='seroval'>seroval</option>
<option value='server-islands-children'>server-islands-children</option>
<option value='session-docs'>session-docs</option>
<option value='single-file-build-2'>single-file-build-2</option>
<option value='slash-404-hint'>slash-404-hint</option>
<option value='slot-bug-1'>slot-bug-1</option>
<option value='solid-ecosystem-pkg'>solid-ecosystem-pkg</option>
<option value='spike/app-setup'>spike/app-setup</option>
<option value='spike/autonav'>spike/autonav</option>
<option value='spike/codehike'>spike/codehike</option>
<option value='spike/context'>spike/context</option>
<option value='spike/csr'>spike/csr</option>
<option value='spike/default-content'>spike/default-content</option>
<option value='spike/incremental'>spike/incremental</option>
<option value='spike/incremental-ii'>spike/incremental-ii</option>
<option value='spike/markdown-wasm'>spike/markdown-wasm</option>
<option value='spike/render'>spike/render</option>
<option value='spike/streaming'>spike/streaming</option>
<option value='spike/svg'>spike/svg</option>
<option value='sqlite-test'>sqlite-test</option>
<option value='squeal'>squeal</option>
<option value='ssr-redirect'>ssr-redirect</option>
<option value='stream-buffer'>stream-buffer</option>
<option value='streaming'>streaming</option>
<option value='telemetry-audit-1'>telemetry-audit-1</option>
<option value='test/new-integrations-demo'>test/new-integrations-demo</option>
<option value='test/new-ssr-demo'>test/new-ssr-demo</option>
<option value='top-level-exports-integrations'>top-level-exports-integrations</option>
<option value='ts-in-hoisted-script'>ts-in-hoisted-script</option>
<option value='ts-no-err'>ts-no-err</option>
<option value='upd-vite-vendored'>upd-vite-vendored</option>
<option value='upgrade-deps'>upgrade-deps</option>
<option value='v1-beta'>v1-beta</option>
<option value='vercel-test'>vercel-test</option>
<option value='vite-fork'>vite-fork</option>
<option value='vscode-astro-global'>vscode-astro-global</option>
<option value='vt-follow-redirects'>vt-follow-redirects</option>
<option value='warn-exp-flag'>warn-exp-flag</option>
<option value='win'>win</option>
<option value='windows-tests-beta'>windows-tests-beta</option>
<option value='wip-assets'>wip-assets</option>
<option value='wip-component-api-2'>wip-component-api-2</option>
<option value='wip-docs-components'>wip-docs-components</option>
<option value='wip-docs-reference-gen'>wip-docs-reference-gen</option>
<option value='wip-fetch-cache'>wip-fetch-cache</option>
<option value='wip-fun-flags'>wip-fun-flags</option>
<option value='wip-icons'>wip-icons</option>
<option value='wip-logging'>wip-logging</option>
<option value='wip-logging-saved'>wip-logging-saved</option>
<option value='wip-mdc'>wip-mdc</option>
<option value='wip-mdx-to-astro-js'>wip-mdx-to-astro-js</option>
<option value='wip-preview-command-integrations'>wip-preview-command-integrations</option>
<option value='wip-setup-content'>wip-setup-content</option>
<option value='wip-smoke'>wip-smoke</option>
<option value='wip-speed-up-markdown'>wip-speed-up-markdown</option>
<option value='wip-stage'>wip-stage</option>
<option value='wip/react-19-test'>wip/react-19-test</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>Unnamed repository; edit this file 'description' to name the repository.</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/ansg191/astro/about/?h=fix-s-island-fallback'>about</a><a href='/ansg191/astro/?h=fix-s-island-fallback'>summary</a><a href='/ansg191/astro/refs/?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2'>refs</a><a class='active' href='/ansg191/astro/log/packages/astro/components?h=fix-s-island-fallback&amp;follow=1'>log</a><a href='/ansg191/astro/tree/packages/astro/components?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2'>tree</a><a href='/ansg191/astro/commit/packages/astro/components?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;follow=1'>commit</a><a href='/ansg191/astro/diff/packages/astro/components?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;follow=1'>diff</a></td><td class='form'><form class='right' method='get' action='/ansg191/astro/log/packages/astro/components'>
<input type='hidden' name='h' value='fix-s-island-fallback'/><input type='hidden' name='id' value='b95cd1951229bca1ecf53d4b487d97e4dccfeaf2'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/ansg191/astro/log/?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;follow=1'>root</a>/<a href='/ansg191/astro/log/packages?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;follow=1'>packages</a>/<a href='/ansg191/astro/log/packages/astro?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;follow=1'>astro</a>/<a href='/ansg191/astro/log/packages/astro/components?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;follow=1'>components</a> (<a href='/ansg191/astro/log/packages/astro/components?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2'>unfollow</a>)</div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/ansg191/astro/log/packages/astro/components?h=fix-s-island-fallback&amp;id=b95cd1951229bca1ecf53d4b487d97e4dccfeaf2&amp;showmsg=1&amp;follow=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td><span title='2022-02-07 08:23:25 -0500'>2022-02-07</span></td><td><a href='/ansg191/astro/commit/yarn.lock?h=fix-s-island-fallback&amp;id=5872ec3d9cdc9554e82c467435c25e1fc1f9bb8a&amp;follow=1'>[ci] update lockfile (#2543)</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>1</td><td><span class='deletions'>-171</span>/<span class='insertions'>+178</span></td></tr>
<tr><td><span title='2022-02-07 08:23:01 -0500'>2022-02-07</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/core/logger.ts?h=fix-s-island-fallback&amp;id=b066628693d9d9a526b3e8ab2a2d493aad38a722&amp;follow=1'>improve debug logs (#2537)</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>3</td><td><span class='deletions'>-4</span>/<span class='insertions'>+19</span></td></tr>
<tr><td><span title='2022-02-07 12:02:01 +0000'>2022-02-07</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=f9a9ef394b424f604a4bc7a179282536ac1fc65f&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-02-06 13:46:59 -0800'>2022-02-06</span></td><td><a href='/ansg191/astro/commit/yarn.lock?h=fix-s-island-fallback&amp;id=785af44d15720bb3efaf980642e914a991facca2&amp;follow=1'>[ci] update lockfile (#2527)</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>1</td><td><span class='deletions'>-208</span>/<span class='insertions'>+238</span></td></tr>
<tr><td><span title='2022-02-06 12:03:55 +0000'>2022-02-06</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=c729a692bf8d41f60a343b9a1eb242e9538b5b05&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-02-05 12:03:13 +0000'>2022-02-05</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=015b276a4230f00a86e91aa9dc433bd704ae4a71&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-02-04 23:39:12 +0000'>2022-02-04</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/runtime/server/index.ts?h=fix-s-island-fallback&amp;id=539e4d55d808dccd73b213f6eda3afeec95e6dae&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/0ddf46bee0fb93b8d73cb82456ee5b28?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> natemoo-re
</td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+3</span></td></tr>
<tr><td><span title='2022-02-04 17:38:14 -0600'>2022-02-04</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/runtime/server/index.ts?h=fix-s-island-fallback&amp;id=16d532fe1772a2c0880beda0f49883efb2469e44&amp;follow=1'>fix: HTML/SVG boolean attributes (#2538)</a></td><td><img src='//www.gravatar.com/avatar/0ddf46bee0fb93b8d73cb82456ee5b28?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Nate Moore
</td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+21</span></td></tr>
<tr><td><span title='2022-02-04 18:51:12 +0000'>2022-02-04</span></td><td><a href='/ansg191/astro/commit/docs/src/pages/en/guides/markdown-content.md?h=fix-s-island-fallback&amp;id=939886ff471c936d46759927bc4b35e362b42dc6&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/fedbf2bad69e90b269e5caba47a0e897?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> matthewp
</td><td>1</td><td><span class='deletions'>-4</span>/<span class='insertions'>+2</span></td></tr>
<tr><td><span title='2022-02-04 13:49:50 -0500'>2022-02-04</span></td><td><a href='/ansg191/astro/commit/yarn.lock?h=fix-s-island-fallback&amp;id=cfeaa9414acdecec6f5d66ee0e33fe4fde574eee&amp;follow=1'>fix: import local plugins into markdown (#2534)</a></td><td><img src='//www.gravatar.com/avatar/1d54ea6076477a62a666940080b8c1cd?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Juan Martín Seery
</td><td>9</td><td><span class='deletions'>-22</span>/<span class='insertions'>+41</span></td></tr>
<tr><td><span title='2022-02-04 12:02:14 +0000'>2022-02-04</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=8f9b1cbc8bf76455efa96ab591d6293aa8a43964&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-02-03 16:41:48 -0500'>2022-02-03</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/vite-plugin-astro/hmr.ts?h=fix-s-island-fallback&amp;id=b210fd008b9253f0c755c21e157cd7fb069c8445&amp;follow=1'>Append to list of HMR modules, don't override (#2532)</a></td><td><img src='//www.gravatar.com/avatar/4394f414f0d4a043ad5e8fa261fa2953?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Matthew Phillips
</td><td>2</td><td><span class='deletions'>-1</span>/<span class='insertions'>+6</span></td></tr>
<tr><td><span title='2022-02-03 13:40:40 -0800'>2022-02-03</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/core/dev/index.ts?h=fix-s-island-fallback&amp;id=ef1d81effd4e0c420c6eb2e5e500cfaac3106ea8&amp;follow=1'>add back dev server host support (#2531)</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>2</td><td><span class='deletions'>-1</span>/<span class='insertions'>+14</span></td></tr>
<tr><td><span title='2022-02-03 12:16:08 -0800'>2022-02-03</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/vite-plugin-build-html/index.ts?h=fix-s-island-fallback&amp;id=069e497a74ffbba644916980b1873ebbf01bfbd5&amp;follow=1'>simplify status code regex</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>2</td><td><span class='deletions'>-87</span>/<span class='insertions'>+4</span></td></tr>
<tr><td><span title='2022-02-03 12:12:06 -0800'>2022-02-03</span></td><td><a href='/ansg191/astro/commit/packages/astro/README.md?h=fix-s-island-fallback&amp;id=eb29cd5d339c09d78ecb858bd47a51fea2720453&amp;follow=1'>Adding StackUp Digital to the list of sponsors (#2521)</a></td><td><img src='//www.gravatar.com/avatar/55ce0398620312807701ded1e3ba6a95?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Astroalex
</td><td>3</td><td><span class='deletions'>-0</span>/<span class='insertions'>+10</span></td></tr>
<tr><td><span title='2022-02-03 12:02:05 +0000'>2022-02-03</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=e041a7de9d1dbc08ebfce22b6f51aabe160b9acb&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-02-03 05:40:29 +0000'>2022-02-03</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/vite-plugin-build-html/index.ts?h=fix-s-island-fallback&amp;id=10d97b60b89540aca32efe315734391152dd059b&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>2</td><td><span class='deletions'>-3</span>/<span class='insertions'>+85</span></td></tr>
<tr><td><span title='2022-02-02 21:39:18 -0800'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/vite-plugin-build-html/index.ts?h=fix-s-island-fallback&amp;id=ed4969d1132c9e7d59382b3d40acf350106f3a38&amp;follow=1'>Handles all http error code file names the same as 404 files. (#2525)</a></td><td><img src='//www.gravatar.com/avatar/7fa2bc6b0798f2ec81f0c97578d24754?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Zade Viggers
</td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+7</span></td></tr>
<tr><td><span title='2022-02-02 21:27:11 -0800'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/core/build/index.ts?h=fix-s-island-fallback&amp;id=81238bf77d9d2234b23b58b1c770022e4765b3b3&amp;follow=1'>fix(sitemap): remove debug if sitemap disabled (#2514)</a></td><td><img src='//www.gravatar.com/avatar/a4c3983e17d963ffa63905d75784ea26?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Mark Pinero
</td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td><span title='2022-02-02 16:59:57 -0500'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/yarn.lock?h=fix-s-island-fallback&amp;id=ade996c885e34355b6e6e0343de6f262b25b9604&amp;follow=1'>[ci] update lockfile (#2515)</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>1</td><td><span class='deletions'>-276</span>/<span class='insertions'>+279</span></td></tr>
<tr><td><span title='2022-02-02 17:13:03 +0000'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/packages/astro/CHANGELOG.md?h=fix-s-island-fallback&amp;id=8b7ba730041421cb36432eeb866664542ec4b0be&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/fedbf2bad69e90b269e5caba47a0e897?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> matthewp
</td><td>1</td><td><span class='deletions'>-8</span>/<span class='insertions'>+8</span></td></tr>
<tr><td><span title='2022-02-02 12:11:57 -0500'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/packages/astro/package.json?h=fix-s-island-fallback&amp;id=e49f581bc23d3c115f61d4ad9830ebb8f792921f&amp;follow=1'>[ci] release (next) (#2523)</a><span class='decoration'><a class='tag-annotated-deco' href='/ansg191/astro/tag/?h=astro@0.23.0-next.1'>astro@0.23.0-next.1</a></span></td><td><img src='//www.gravatar.com/avatar/af2ab225b7c0eec44a8d0eba6b5c869a?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> github-actions[bot]
</td><td>28</td><td><span class='deletions'>-34</span>/<span class='insertions'>+41</span></td></tr>
<tr><td><span title='2022-02-02 16:36:23 +0000'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/vite-plugin-astro/hmr.ts?h=fix-s-island-fallback&amp;id=eecc996d7e578f8fe1bf1f77a943684cfee943e3&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/fedbf2bad69e90b269e5caba47a0e897?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> matthewp
</td><td>2</td><td><span class='deletions'>-17</span>/<span class='insertions'>+29</span></td></tr>
<tr><td><span title='2022-02-02 11:35:13 -0500'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/vite-plugin-astro/index.ts?h=fix-s-island-fallback&amp;id=3e8844fa871fa477026375db6d921beb4b23b0dc&amp;follow=1'>Fix support for scss in static build (#2522)</a></td><td><img src='//www.gravatar.com/avatar/4394f414f0d4a043ad5e8fa261fa2953?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Matthew Phillips
</td><td>6</td><td><span class='deletions'>-20</span>/<span class='insertions'>+114</span></td></tr>
<tr><td><span title='2022-02-02 12:02:00 +0000'>2022-02-02</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=9e9567c25797eaca7255a9d8a546354dc06f8e82&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-02-01 13:54:03 +0000'>2022-02-01</span></td><td><a href='/ansg191/astro/commit/packages/markdown/remark/CHANGELOG.md?h=fix-s-island-fallback&amp;id=ee7e1ce61ab34580093007ed3828fea3bca343a9&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/fedbf2bad69e90b269e5caba47a0e897?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> matthewp
</td><td>2</td><td><span class='deletions'>-12</span>/<span class='insertions'>+12</span></td></tr>
<tr><td><span title='2022-02-01 08:52:57 -0500'>2022-02-01</span></td><td><a href='/ansg191/astro/commit/packages/markdown/remark/package.json?h=fix-s-island-fallback&amp;id=dd1a14a2eb23ba9e3ccc1e51ecbd36a65f34a2a2&amp;follow=1'>[ci] release (next) (#2492)</a><span class='decoration'><a class='tag-annotated-deco' href='/ansg191/astro/tag/?h=astro@0.23.0-next.0'>astro@0.23.0-next.0</a><a class='tag-annotated-deco' href='/ansg191/astro/tag/?h=@astrojs/test-static-build-pkg@0.0.2'>@astrojs/test-static-build-pkg@0.0.2</a><a class='tag-annotated-deco' href='/ansg191/astro/tag/?h=@astrojs/markdown-remark@0.6.1-next.0'>@astrojs/markdown-remark@0.6.1-next.0</a></span></td><td><img src='//www.gravatar.com/avatar/af2ab225b7c0eec44a8d0eba6b5c869a?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> github-actions[bot]
</td><td>31</td><td><span class='deletions'>-43</span>/<span class='insertions'>+93</span></td></tr>
<tr><td><span title='2022-02-01 12:02:14 +0000'>2022-02-01</span></td><td><a href='/ansg191/astro/commit/scripts/stats/stats.csv?h=fix-s-island-fallback&amp;id=bc8c114dcc61eaf6b5e13b379e33bf57e384977e&amp;follow=1'>[ci] collect stats</a></td><td><img src='//www.gravatar.com/avatar/d992ca8d4b18ac36e0a6e5f2fdeb063f?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> FredKSchott
</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-01-31 20:29:53 -0800'>2022-01-31</span></td><td><a href='/ansg191/astro/commit/.github/workflows/main.yml?h=fix-s-island-fallback&amp;id=c370aa45780d3baefe9e07908824ae04021019b6&amp;follow=1'>update congratsbot format again</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-01-31 20:28:20 -0800'>2022-01-31</span></td><td><a href='/ansg191/astro/commit/.github/workflows/main.yml?h=fix-s-island-fallback&amp;id=ed4d9828a75ff6c0ed09e3e7cdb85e4168d2b2b6&amp;follow=1'>update congratsbot again</a></td><td><img src='//www.gravatar.com/avatar/184a1f14c759795b94ae1d01b23cc9c7?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Schott
</td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2022-01-31 17:36:25 -0600'>2022-01-31</span></td><td><a href='/ansg191/astro/commit/assets/social/banner.svg?h=fix-s-island-fallback&amp;id=7af5abb55c244e4b039aa76b690c890b24e651e4&amp;follow=1'>Remove SVG animation on GitHub/NPM (#2512)</a></td><td><img src='//www.gravatar.com/avatar/0ddf46bee0fb93b8d73cb82456ee5b28?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Nate Moore
</td><td>1</td><td><span class='deletions'>-21</span>/<span class='insertions'>+0</span></td></tr>
<tr><td><span title='2022-01-31 22:15:39 +0000'>2022-01-31</span></td><td><a href='/ansg191/astro/commit/packages/astro/src/runtime/server/index.ts?h=fix-s-island-fallback&amp;id=f3b35023fdf02e23936ba10040fe5b0b80beaefe&amp;follow=1'>[ci] yarn format</a></td><td><img src='//www.gravatar.com/avatar/0ddf46bee0fb93b8d73cb82456ee5b28?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> natemoo-re
</td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+6</span></td></tr>
<tr><td><span title='2022-01-31 16:14:07 -0600'>2022-01-31</span></td><td><a href='/ansg191/astro/commit/yarn.lock?h=fix-s-island-fallback&amp;id=6fe1b0279fce5a7a0e90ff79746ea0b641da3e21&amp;follow=1'>Add Shiki as an alternative to Prism (#2497)</a></td><td><img src='//www.gravatar.com/avatar/1d54ea6076477a62a666940080b8c1cd?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Juan Martín Seery
</td><td>26</td><td><span class='deletions'>-9</span>/<span class='insertions'>+356</span></td></tr>
<tr><td><span title='2022-01-31 16:13:22 -0600'>2022-01-31</span></td><td><a href='/ansg191/astro/commit/yarn.lock?h=fix-s-island-fallback&amp;id=618a16f59d4037cff1665110f0ed111a96a96437&amp;follow=1'>Deprecate unescaped HTML inside of expressions (#2489)</a></td><td><img src='//www.gravatar.com/avatar/0ddf46bee0fb93b8d73cb82456ee5b28?s=13&amp;d=retro' width='13' height='13' alt='Gravatar' /> Nate Moore
</td><td>9</td><td><span class='deletions'>-31</span>/<span class='insertions'>+74</span></td></tr>
