<script setup lang="ts">
// explicit import to bypass client import protection
import BreaksServer from '../components/BreaksServer.client'
// ensure treeshake-client-only module remove these imports without breaking
import TestGlobal from '../components/global/TestGlobal.vue'
// direct import of .client components should be treeshaken
import { FunctionalComponent, LazyClientOnlyScript } from '#components'

onMounted(() => import('~/components/BreaksServer.client'))
onBeforeMount(() => import('~/components/BreaksServer.client'))
onBeforeUpdate(() => import('~/components/BreaksServer.client'))
onRenderTracked(() => import('~/components/BreaksServer.client'))
onRenderTriggered(() => import('~/components/BreaksServer.client'))
onActivated(() => import('~/components/BreaksServer.client'))
onDeactivated(() => import('~/components/BreaksServer.client'))
onBeforeUnmount(() => import('~/components/BreaksServer.client'))
</script>

<template>
  <div>
    This page should not crash when rendered.
    <ClientOnly class="something">
      <span>rendered client-side</span>
      <BreaksServer />
      <BreaksServer>Some slot content</BreaksServer>
    </ClientOnly>
    This should render.
    <div>
      <ClientOnly class="another">
        <span>rendered client-side</span>
        <BreaksServer />
      </ClientOnly>
    </div>
    <div>
      <LazyClientOnly>
        <div class="red">
          i'm red
        </div>
        <div>
          <BreaksServer />
          <FunctionalComponent />
          <TestGlobal />
        </div>
        <template #fallback>
          <div>fallback for ClientOnly</div>
        </template>
      </LazyClientOnly>
      <LazyClientOnlyScript>
        <template #test>
          <BreaksServer />
          <div id="client-side">
            This should be rendered client-side
          </div>
        </template>
        <template #fallback>
          <FunctionalComponent />
          <!-- this should be treeshaken on .client -->
          <BreaksServer />
        </template>
      </LazyClientOnlyScript>
      <div class="blue">
        i'm blue
      </div>
    </div>
  </div>
</template>

<style scoped>
.red {
  color: rgb(255, 0, 0);
}
.blue {
  color: rgb(0, 0, 255);
}
</style>