mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-28 19:00:35 +01:00
docs(app): handle prose components (#3030)
Co-authored-by: Benjamin Canac <canacb1@gmail.com>
This commit is contained in:
@@ -151,4 +151,6 @@ html[data-module="ui-pro"] .ui-only,
|
|||||||
html[data-module="ui"] .ui-pro-only {
|
html[data-module="ui"] .ui-pro-only {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Safelist (do not remove): [&>div]:*:my-0 [&>div]:*:w-full */
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ const castMap: Record<string, Cast> = {
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
pro?: boolean
|
pro?: boolean
|
||||||
|
prose?: boolean
|
||||||
prefix?: string
|
prefix?: string
|
||||||
/** Override the slug taken from the route */
|
/** Override the slug taken from the route */
|
||||||
slug?: string
|
slug?: string
|
||||||
@@ -91,6 +92,10 @@ const component = defineAsyncComponent(() => {
|
|||||||
return import(`#ui-pro/components/${props.prefix}/${upperFirst(camelName)}.vue`)
|
return import(`#ui-pro/components/${props.prefix}/${upperFirst(camelName)}.vue`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (props.prose) {
|
||||||
|
return import(`#ui-pro/components/prose/${upperFirst(camelName)}.vue`)
|
||||||
|
}
|
||||||
|
|
||||||
return import(`#ui-pro/components/${upperFirst(camelName)}.vue`)
|
return import(`#ui-pro/components/${upperFirst(camelName)}.vue`)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,7 +126,7 @@ function setComponentProp(name: string, value: any) {
|
|||||||
set(componentProps, name, value)
|
set(componentProps, name, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
const componentTheme = ((props.pro ? themePro : theme) as any)[camelName]
|
const componentTheme = ((props.pro ? props.prose ? themePro.prose : themePro : theme) as any)[camelName]
|
||||||
const meta = await fetchComponentMeta(name as any)
|
const meta = await fetchComponentMeta(name as any)
|
||||||
|
|
||||||
function mapKeys(obj: object, parentKey = ''): any {
|
function mapKeys(obj: object, parentKey = ''): any {
|
||||||
@@ -169,6 +174,30 @@ const options = computed(() => {
|
|||||||
const code = computed(() => {
|
const code = computed(() => {
|
||||||
let code = ''
|
let code = ''
|
||||||
|
|
||||||
|
if (props.prose) {
|
||||||
|
code += `\`\`\`mdc
|
||||||
|
::${camelName}`
|
||||||
|
|
||||||
|
const proseProps = Object.entries(componentProps).map(([key, value]) => {
|
||||||
|
if (value === undefined || value === null || value === '' || props.hide?.includes(key)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${key}="${value}"`
|
||||||
|
}).filter(Boolean).join(' ')
|
||||||
|
|
||||||
|
if (proseProps.length) {
|
||||||
|
code += `{${proseProps}}`
|
||||||
|
}
|
||||||
|
|
||||||
|
code += `
|
||||||
|
${props.slots?.default}
|
||||||
|
::
|
||||||
|
\`\`\``
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
|
||||||
if (props.collapse) {
|
if (props.collapse) {
|
||||||
code += `::code-collapse
|
code += `::code-collapse
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { upperFirst, camelCase } from 'scule'
|
import { upperFirst, camelCase } from 'scule'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
prose?: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const camelName = camelCase(route.params.slug?.[route.params.slug.length - 1] ?? '')
|
const camelName = camelCase(route.params.slug?.[route.params.slug.length - 1] ?? '')
|
||||||
const name = `U${upperFirst(camelName)}`
|
const name = props.prose ? `Prose${upperFirst(camelName)}` : `U${upperFirst(camelName)}`
|
||||||
|
|
||||||
const meta = await fetchComponentMeta(name as any)
|
const meta = await fetchComponentMeta(name as any)
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ const props = withDefaults(defineProps<{
|
|||||||
name?: string
|
name?: string
|
||||||
ignore?: string[]
|
ignore?: string[]
|
||||||
pro?: boolean
|
pro?: boolean
|
||||||
|
prose?: boolean
|
||||||
}>(), {
|
}>(), {
|
||||||
ignore: () => [
|
ignore: () => [
|
||||||
'activeClass',
|
'activeClass',
|
||||||
@@ -34,9 +35,9 @@ const props = withDefaults(defineProps<{
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const camelName = camelCase(props.name ?? route.params.slug?.[route.params.slug.length - 1] ?? '')
|
const camelName = camelCase(props.name ?? route.params.slug?.[route.params.slug.length - 1] ?? '')
|
||||||
const componentName = `U${upperFirst(camelName)}`
|
const componentName = props.prose ? `Prose${upperFirst(camelName)}` : `U${upperFirst(camelName)}`
|
||||||
|
|
||||||
const componentTheme = ((props.pro ? themePro : theme) as any)[camelName]
|
const componentTheme = ((props.pro ? props.prose ? themePro.prose : themePro : theme) as any)[camelName]
|
||||||
const meta = await fetchComponentMeta(componentName as any)
|
const meta = await fetchComponentMeta(componentName as any)
|
||||||
|
|
||||||
const metaProps: ComputedRef<ComponentMeta['props']> = computed(() => {
|
const metaProps: ComputedRef<ComponentMeta['props']> = computed(() => {
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { upperFirst, camelCase } from 'scule'
|
import { upperFirst, camelCase } from 'scule'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
prose?: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const camelName = camelCase(route.params.slug?.[route.params.slug.length - 1] ?? '')
|
const camelName = camelCase(route.params.slug?.[route.params.slug.length - 1] ?? '')
|
||||||
const name = `U${upperFirst(camelName)}`
|
const name = props.prose ? `Prose${upperFirst(camelName)}` : `U${upperFirst(camelName)}`
|
||||||
|
|
||||||
const meta = await fetchComponentMeta(name as any)
|
const meta = await fetchComponentMeta(name as any)
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -6,18 +6,23 @@ import * as themePro from '#build/ui-pro'
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
pro?: boolean
|
pro?: boolean
|
||||||
|
prose?: boolean
|
||||||
|
slug?: string
|
||||||
|
extra?: string[]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const { framework } = useSharedData()
|
const { framework } = useSharedData()
|
||||||
|
|
||||||
const name = camelCase(route.params.slug?.[route.params.slug.length - 1] ?? '')
|
const name = camelCase(props.slug ?? route.params.slug?.[route.params.slug.length - 1] ?? '')
|
||||||
|
|
||||||
const strippedCompoundVariants = ref(false)
|
const strippedCompoundVariants = ref(false)
|
||||||
|
|
||||||
|
const computedTheme = computed(() => props.pro ? props.prose ? themePro.prose : themePro : theme)
|
||||||
|
|
||||||
const strippedTheme = computed(() => {
|
const strippedTheme = computed(() => {
|
||||||
const strippedTheme = {
|
const strippedTheme = {
|
||||||
...((props.pro ? themePro : theme) as any)[name]
|
...(computedTheme.value as any)[name]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strippedTheme?.compoundVariants) {
|
if (strippedTheme?.compoundVariants) {
|
||||||
@@ -54,10 +59,21 @@ const strippedTheme = computed(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const component = computed(() => {
|
const component = computed(() => {
|
||||||
|
const baseKey = props.pro ? 'uiPro' : 'ui'
|
||||||
|
|
||||||
|
const content = props.prose
|
||||||
|
? { prose: { [name]: strippedTheme.value } }
|
||||||
|
: { [name]: strippedTheme.value }
|
||||||
|
|
||||||
|
if (props.extra?.length) {
|
||||||
|
props.extra.forEach((extra) => {
|
||||||
|
const target = props.prose ? content.prose! : content
|
||||||
|
target[extra as keyof typeof target] = computedTheme.value[extra as keyof typeof computedTheme.value]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
[props.pro ? 'uiPro' : 'ui']: {
|
[baseKey]: content
|
||||||
[name]: strippedTheme.value
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user