diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore index 9ffd1aef9d..22d86c753b 100644 --- a/packages/docs/.gitignore +++ b/packages/docs/.gitignore @@ -7,3 +7,4 @@ node_modules .env dist page-config/getting-started/tree-shaking/tree-shaking.md +public/vuestic-out \ No newline at end of file diff --git a/packages/docs/components/Play.client.vue b/packages/docs/components/Play.client.vue new file mode 100644 index 0000000000..7b36cb244f --- /dev/null +++ b/packages/docs/components/Play.client.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/packages/docs/layouts/play.vue b/packages/docs/layouts/play.vue new file mode 100644 index 0000000000..5c13263783 --- /dev/null +++ b/packages/docs/layouts/play.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/packages/docs/modules/page-config/blocks/example/example-footer.vue b/packages/docs/modules/page-config/blocks/example/example-footer.vue index 40fefdb348..db2bf1f0d2 100644 --- a/packages/docs/modules/page-config/blocks/example/example-footer.vue +++ b/packages/docs/modules/page-config/blocks/example/example-footer.vue @@ -46,7 +46,51 @@ Open in GitHub + + + + + + + + +
import { computed, PropType, ref, Ref } from 'vue' -import { type CodeSandboxConfig, createCodeSandbox } from '@/composables/code-sandbox' +import { createCodeSandbox, type CodeSandboxConfig, } from '@/composables/code-sandbox' import { getWindow } from 'vuestic-ui/src/utils/ssr' -const query = '?query=file=/src/App.vue' - type ButtonStates = 'active' | 'error' | 'default' const props = defineProps({ @@ -142,15 +184,34 @@ const copy = async () => { setTimeout(() => { copyButtonState.value = 'default' }, 1500) } +const { init } = useToast() +const shareLink = computed(() => getWindow()?.location.origin + '/play' + sandboxState.value) +const copySandboxLink = async () => { + try { + await getWindow()?.navigator.clipboard.writeText(window.location.origin + '/play' + sandboxState.value) + init('Link copied to clipboard') + } catch (e: any) { + init('Permission failure!') + } + + setTimeout(() => { copyButtonState.value = 'default' }, 1500) +} + const buttonStates = { active: { text: 'Copied', icon: 'fa4-check' }, error: { text: 'Permission failure!', icon: 'fa4-times' }, default: { text: 'Copy code', icon: 'fa4-files-o' }, } const copyButton = computed(() => buttonStates[copyButtonState.value]) - +const query = '?query=file=/src/App.vue' const sandboxDefineUrl = computed(() => `https://codesandbox.io/api/v1/sandboxes/define${query}`) const sandboxParams = computed(() => createCodeSandbox(props.code, props.config)) + +const sandboxState = ref('') + +const doShowPlaygroundButton = computed(() => { + return !props.code.includes(' diff --git a/packages/docs/modules/page-config/blocks/example/index.vue b/packages/docs/modules/page-config/blocks/example/index.vue index 386cda64b1..a9d1788e98 100644 --- a/packages/docs/modules/page-config/blocks/example/index.vue +++ b/packages/docs/modules/page-config/blocks/example/index.vue @@ -93,6 +93,7 @@ const sourceComputed = computed(() => props.customCode?.source || props.source); :code="sourceComputed" :git-link="gitLink" :hide-show-code-button="forceShowCode || hideCode" + :config="codesandboxConfig" />