diff --git a/@fiction/admin/settings/ElAccountHeader.vue b/@fiction/admin/settings/ElAccountHeader.vue
index 4f8bbc432..531468f6c 100644
--- a/@fiction/admin/settings/ElAccountHeader.vue
+++ b/@fiction/admin/settings/ElAccountHeader.vue
@@ -3,8 +3,8 @@ import { dayjs, gravatarUrlSync, useService, vue } from '@fiction/core/index.js'
import ElModal from '@fiction/ui/ElModal.vue'
import { InputOption } from '@fiction/ui/index.js'
import ElForm from '@fiction/ui/inputs/ElForm.vue'
+import FormEngine from '@fiction/ui/inputs/FormEngine.vue'
import type { Card } from '@fiction/site/card'
-import ToolForm from '../tools/ToolForm.vue'
import ElHeader from './ElHeader.vue'
import type { FictionAdmin } from '..'
@@ -116,7 +116,7 @@ vue.onMounted(() => {
-
+
diff --git a/@fiction/admin/settings/ElOrgHeader.vue b/@fiction/admin/settings/ElOrgHeader.vue
index 449ce57b1..aa661d342 100644
--- a/@fiction/admin/settings/ElOrgHeader.vue
+++ b/@fiction/admin/settings/ElOrgHeader.vue
@@ -4,11 +4,11 @@ import { gravatarUrlSync } from '@fiction/core/index.js'
import ElAvatar from '@fiction/ui/common/ElAvatar.vue'
import ElModal from '@fiction/ui/ElModal.vue'
import ElForm from '@fiction/ui/inputs/ElForm.vue'
+import FormEngine from '@fiction/ui/inputs/FormEngine.vue'
import ElIndexGrid from '@fiction/ui/lists/ElIndexGrid.vue'
import type { ActionItem, IndexItem, Organization } from '@fiction/core/index.js'
import type { Card } from '@fiction/site/card'
import type { InputOption } from '@fiction/ui'
-import ToolForm from '../tools/ToolForm.vue'
import ElHeader from './ElHeader.vue'
import { newOrgOptions } from './index.js'
@@ -104,7 +104,7 @@ vue.onMounted(() => {
-
+
diff --git a/@fiction/admin/settings/SettingsTool.vue b/@fiction/admin/settings/SettingsTool.vue
index c1942840b..c2593e286 100644
--- a/@fiction/admin/settings/SettingsTool.vue
+++ b/@fiction/admin/settings/SettingsTool.vue
@@ -2,10 +2,10 @@
import { getNavComponentType, toLabel, toSlug, useService, vue } from '@fiction/core'
import ElPanel from '@fiction/ui/ElPanel.vue'
import ElForm from '@fiction/ui/inputs/ElForm.vue'
+import FormEngine from '@fiction/ui/inputs/FormEngine.vue'
import type { NavItem } from '@fiction/core'
import type { Card } from '@fiction/site/card'
import type { InputOption } from '@fiction/ui'
-import ToolForm from '../tools/ToolForm.vue'
import type { SettingsTool } from '..'
const props = defineProps({
@@ -100,7 +100,7 @@ async function navigate(v: NavItem) {
{{ currentPanel.title.value }}
-
, required: true },
@@ -92,7 +92,7 @@ const cls = vue.computed(() => {
:input-props="inputProps"
:options="opt.options.value || []"
:model-value="modelValue"
- :depth="1"
+ :depth="depth + 1"
:base-path="basePath"
:card
@update:model-value="emit('update:modelValue', $event)"
diff --git a/@fiction/cards/capture/index.ts b/@fiction/cards/capture/index.ts
index 69c4c199d..3de7734f5 100644
--- a/@fiction/cards/capture/index.ts
+++ b/@fiction/cards/capture/index.ts
@@ -43,7 +43,7 @@ const demoUserConfig = {
const options: InputOption[] = [
new InputOption({ key: 'presentationMode', label: 'Presentation Mode', input: 'InputSelect', list: ['inline', 'onScroll', 'onLoad'], description: 'Show the card inline with content as a popup on load, or when scrolling.' }),
standardOption.headers(),
- new InputOption({ key: 'media', label: 'Image', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'media', label: 'Image', input: 'InputMedia' }),
new InputOption({ key: 'dismissText', label: 'Dismiss Text', input: 'InputText', placeholder: 'No thanks', description: 'Dismisses modal in load and modal modes' }),
new InputOption({ key: 'buttonText', label: 'Button Text', input: 'InputText', placeholder: 'Subscribe', description: 'Text on the subscribe button' }),
new InputOption({ key: 'thanksText', label: 'Thanks Text', input: 'InputText', placeholder: 'Thanks for subscribing!', description: 'Text on the thank you message' }),
diff --git a/@fiction/cards/footer/index.ts b/@fiction/cards/footer/index.ts
index 84ad02a21..76cb30b7e 100644
--- a/@fiction/cards/footer/index.ts
+++ b/@fiction/cards/footer/index.ts
@@ -1,8 +1,8 @@
-import { standardOption } from '@fiction/cards/inputSets'
import { vue } from '@fiction/core'
import { CardTemplate } from '@fiction/site/card'
import { InputOption } from '@fiction/ui'
import { z } from 'zod'
+import { standardOption } from '../inputSets'
import { mediaSchema } from '../schemaSets'
const templateId = 'footer'
@@ -55,7 +55,7 @@ const schema = z.object({
export type UserConfig = z.infer
const options: InputOption[] = [
- new InputOption({ key: 'logo', label: 'Logo', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'logo', label: 'Logo', input: 'InputLogo' }),
new InputOption({ key: 'layout', label: 'Layout', input: 'InputSelect', list: layoutKeys }),
new InputOption({ key: 'tagline', label: 'Tagline', input: 'InputText', description: 'A catchy phrase or description of what you do.' }),
standardOption.navItems({ key: 'nav', maxDepth: 2, itemNames: ['Column', 'Nav Item', 'Sub Nav Item'] }),
@@ -71,7 +71,7 @@ const options: InputOption[] = [
new InputOption({ key: 'badges', label: 'Badges', description: 'Add certifications or other graphics to build your authority', input: 'InputList', props: { itemName: 'Badge' }, options: [
new InputOption({ key: 'name', label: 'Name', input: 'InputText' }),
new InputOption({ key: 'href', label: 'URL', input: 'InputText' }),
- new InputOption({ key: 'media', label: 'Media', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'media', label: 'Media', input: 'InputMedia' }),
new InputOption({ key: 'target', label: 'Target', input: 'InputSelect', list: ['_blank', '_self'] }),
] }),
] }),
diff --git a/@fiction/cards/hero/index.ts b/@fiction/cards/hero/index.ts
index ce69b1835..7300a6936 100644
--- a/@fiction/cards/hero/index.ts
+++ b/@fiction/cards/hero/index.ts
@@ -45,7 +45,7 @@ export const options: InputOption[] = [
standardOption.media({ key: 'splash', label: 'Splash Image' }),
new InputOption({ key: 'caption', input: 'InputText', label: 'Splash Caption' }),
new InputOption({ key: 'overlays', input: 'InputList', label: 'Overlays', options: [
- new InputOption({ key: 'media', label: 'Image', input: 'InputMediaDisplay', props: { formats: { url: true } } }),
+ new InputOption({ key: 'media', label: 'Image', input: 'InputMedia', props: { formats: { url: true } } }),
new InputOption({ key: 'opacity', label: 'Opacity', input: 'InputNumber' }),
new InputOption({ key: 'position', label: 'Position', input: 'InputSelect', list: ['top', 'bottom', 'left', 'right', 'center', 'bottomRight', 'topRight', 'bottomLeft', 'topLeft'] as const }),
new InputOption({ key: 'widthPercent', label: 'Width Percent', input: 'InputRange', props: { min: 10, max: 100 } }),
diff --git a/@fiction/cards/inputSets.ts b/@fiction/cards/inputSets.ts
index db14608a9..8402601e1 100644
--- a/@fiction/cards/inputSets.ts
+++ b/@fiction/cards/inputSets.ts
@@ -6,7 +6,7 @@ import type { InputOptionSettings } from '@fiction/ui/index.js'
type OptArgs = (Partial> & Record) | undefined
export const standardOption = {
- media: (_: OptArgs = {}) => new InputOption({ key: 'media', label: 'Image', input: 'InputMediaDisplay', props: { formats: _?.formats }, ..._ }),
+ media: (_: OptArgs = {}) => new InputOption({ key: 'media', label: 'Image', input: 'InputMedia', props: { formats: _?.formats }, ..._ }),
name: (_: OptArgs = {}) => new InputOption({ key: 'name', label: 'Text', input: 'InputText', ..._ }),
desc: (_: OptArgs = {}) => new InputOption({ key: 'desc', label: 'Description', input: 'InputTextarea', ..._ }),
icon: (_: OptArgs = {}) => new InputOption({ key: 'icon', label: 'Icon', input: 'InputSelect', ..._ }),
diff --git a/@fiction/cards/logos/index.ts b/@fiction/cards/logos/index.ts
index dae5b8ce5..7635f8641 100644
--- a/@fiction/cards/logos/index.ts
+++ b/@fiction/cards/logos/index.ts
@@ -27,7 +27,7 @@ const options: InputOption[] = [
new InputOption({ key: 'items', label: 'Items', input: 'InputList', options: [
new InputOption({ key: 'name', label: 'Name', input: 'InputText' }),
new InputOption({ key: 'href', label: 'Link', input: 'InputText' }),
- new InputOption({ key: 'media', label: 'Image URL', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'media', label: 'Image URL', input: 'InputMedia' }),
] }),
]
diff --git a/@fiction/cards/magazine/ElMagazine.vue b/@fiction/cards/magazine/ElMagazine.vue
index 5c8a1099b..f56cdfcba 100644
--- a/@fiction/cards/magazine/ElMagazine.vue
+++ b/@fiction/cards/magazine/ElMagazine.vue
@@ -52,7 +52,7 @@ async function loadGlobal() {
}
async function loadInline() {
- const ps = uc.value.posts?.items || []
+ const ps = uc.value.posts?.posts || []
postIndex.value = ps.map(p => new Post({ fictionPosts, ...p }))
if (routeSlug.value) {
@@ -63,7 +63,7 @@ async function loadInline() {
}
async function load() {
- if (uc.value.posts?.mode === 'inline') {
+ if (uc.value.posts?.format === 'local') {
await loadInline()
}
else {
diff --git a/@fiction/cards/magazine/index.ts b/@fiction/cards/magazine/index.ts
index e904fd566..d474c895e 100644
--- a/@fiction/cards/magazine/index.ts
+++ b/@fiction/cards/magazine/index.ts
@@ -15,13 +15,13 @@ const schema = z.object({
export type UserConfig = z.infer & SiteUserConfig
const options: InputOption[] = [
- new InputOption({ key: 'scheme.reverse', label: 'Reverse Color Scheme', input: 'InputCheckbox' }),
+ new InputOption({ key: 'posts', label: 'Posts', input: 'InputPosts' }),
]
async function getDefaultUserConfig(): Promise {
return {
standard: { spacing: { verticalSpacing: 'none' } },
- posts: { mode: 'global', limit: 12 },
+ posts: { format: 'global', limit: 12 },
}
}
@@ -29,8 +29,8 @@ async function getDemoUserConfig(args: { site?: Site }): Promise {
const c: UserConfig = {
standard: { spacing: { verticalSpacing: 'sm' } },
posts: {
- mode: 'inline',
- items: [
+ format: 'local',
+ posts: [
{
title: 'Revolutionizing UX: My Journey at Tech Giant',
subTitle: 'From Concept to Launch',
diff --git a/@fiction/cards/nav/index.ts b/@fiction/cards/nav/index.ts
index 9cc149658..b630e8c87 100644
--- a/@fiction/cards/nav/index.ts
+++ b/@fiction/cards/nav/index.ts
@@ -1,8 +1,8 @@
-import { standardOption } from '@fiction/cards/inputSets'
import { MediaTypographySchema, vue } from '@fiction/core'
import { CardTemplate } from '@fiction/site/card'
import { InputOption } from '@fiction/ui'
import { z } from 'zod'
+import { standardOption } from '../inputSets'
import { mediaSchema } from '../schemaSets'
const templateId = 'nav'
diff --git a/@fiction/cards/people/index.ts b/@fiction/cards/people/index.ts
index 471094126..e5ffd26e3 100644
--- a/@fiction/cards/people/index.ts
+++ b/@fiction/cards/people/index.ts
@@ -38,7 +38,7 @@ const options: InputOption[] = [
new InputOption({ key: 'name', input: 'InputText', label: 'Name' }),
new InputOption({ key: 'title', input: 'InputText', label: 'Title' }),
new InputOption({ key: 'desc', input: 'InputText', label: 'Description' }),
- new InputOption({ key: 'media', input: 'InputMediaDisplay', label: 'Media', props: { formats: { url: true } } }),
+ new InputOption({ key: 'media', input: 'InputMedia', label: 'Media', props: { formats: { url: true } } }),
new InputOption({ key: 'social', input: 'InputList', label: 'Social', options: [
new InputOption({ key: 'name', input: 'InputText', label: 'Name' }),
new InputOption({ key: 'href', input: 'InputText', label: 'Link' }),
diff --git a/@fiction/cards/quote/index.ts b/@fiction/cards/quote/index.ts
index c7e2d5050..7298b64c6 100644
--- a/@fiction/cards/quote/index.ts
+++ b/@fiction/cards/quote/index.ts
@@ -85,10 +85,10 @@ export const templates = [
new InputOption({ key: 'text', label: 'Quote Text', input: 'InputText' }),
new InputOption({ key: 'author.name', label: 'Author', input: 'InputText' }),
new InputOption({ key: 'author.title', label: 'Title', input: 'InputText' }),
- new InputOption({ key: 'author.image', label: 'Author Image', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'author.image', label: 'Author Image', input: 'InputMedia' }),
new InputOption({ key: 'author.href', label: 'Author Link', input: 'InputUrl' }),
new InputOption({ key: 'org.name', label: 'Organization', input: 'InputText' }),
- new InputOption({ key: 'org.image', label: 'Organization Image', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'org.image', label: 'Organization Image', input: 'InputMedia' }),
new InputOption({ key: 'org.href', label: 'Organization Link', input: 'InputUrl' }),
],
}),
diff --git a/@fiction/cards/story/index.ts b/@fiction/cards/story/index.ts
index ae6697260..9d170e216 100644
--- a/@fiction/cards/story/index.ts
+++ b/@fiction/cards/story/index.ts
@@ -25,7 +25,7 @@ const options: InputOption[] = [
new InputOption({ key: 'items', label: 'Tour Items', input: 'InputList', props: { itemName: 'paragraph' }, options: [
new InputOption({ key: 'title', label: 'Title', input: 'InputText' }),
new InputOption({ key: 'content', label: 'Content', input: 'InputText' }),
- new InputOption({ key: 'media', label: 'Media', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'media', label: 'Media', input: 'InputMedia' }),
new InputOption({ key: 'actions', label: 'Actions', input: 'InputList', options: [
new InputOption({ key: 'name', label: 'Button Label', input: 'InputText' }),
new InputOption({ key: 'href', label: 'Button Link', input: 'InputText' }),
diff --git a/@fiction/cards/test/tpl.unit.test.ts b/@fiction/cards/test/tpl.unit.test.ts
index 3732ad595..80e467394 100644
--- a/@fiction/cards/test/tpl.unit.test.ts
+++ b/@fiction/cards/test/tpl.unit.test.ts
@@ -23,9 +23,7 @@ describe('verify template settings config', async () => {
"hasDemo": false,
"isPublic": false,
"templateId": "wrap",
- "unusedSchema": {
- "fixedHeader": "boolean",
- },
+ "unusedSchema": {},
},
{
"hasDemo": false,
diff --git a/@fiction/cards/trek/index.ts b/@fiction/cards/trek/index.ts
index 18e83bd23..41e2213e3 100644
--- a/@fiction/cards/trek/index.ts
+++ b/@fiction/cards/trek/index.ts
@@ -25,7 +25,7 @@ const options: InputOption[] = [
new InputOption({ key: 'items', label: 'Tour Items', input: 'InputList', props: { itemName: 'Tour Item' }, options: [
new InputOption({ key: 'title', label: 'Title', input: 'InputText' }),
new InputOption({ key: 'content', label: 'Content', input: 'InputText' }),
- new InputOption({ key: 'media', label: 'Media', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'media', label: 'Media', input: 'InputMedia' }),
new InputOption({ key: 'actions', label: 'Actions', input: 'InputList', options: [
new InputOption({ key: 'name', label: 'Button Label', input: 'InputText' }),
new InputOption({ key: 'href', label: 'Button Link', input: 'InputText' }),
diff --git a/@fiction/core/plugin-email/templates/EmailStandard.vue b/@fiction/core/plugin-email/templates/EmailStandard.vue
index d5761fbfb..4cf4a0125 100644
--- a/@fiction/core/plugin-email/templates/EmailStandard.vue
+++ b/@fiction/core/plugin-email/templates/EmailStandard.vue
@@ -210,7 +210,7 @@ const markdownStyles = {
-
+
diff --git a/@fiction/core/schemas/schemas.ts b/@fiction/core/schemas/schemas.ts
index e978a5130..6c4669f8e 100644
--- a/@fiction/core/schemas/schemas.ts
+++ b/@fiction/core/schemas/schemas.ts
@@ -1,5 +1,6 @@
import { z } from 'zod'
import type { IconId } from '@fiction/ui/lib/systemIcons.js'
+import { OrFilterGroupSchema } from '../types/endpoint.js'
import { ColorScaleSchema, colorThemeUser, colorThemeWithInvert } from '../utils/colors.js'
import type { vue } from '../utils/libraries.js'
@@ -181,10 +182,24 @@ export const PostSchema = z.object({
authors: z.array(UserSchema).optional(),
})
+export const GlobalQuerySchema = z.object({
+ filters: z.array(OrFilterGroupSchema).optional(), // Array of OR filter groups
+ sortBy: z.string().optional(),
+ sortOrder: z.enum(['asc', 'desc']).optional(),
+ search: z.string().optional(),
+ dateRange: z.object({
+ start: z.date().optional(),
+ end: z.date().optional(),
+ }).optional(),
+})
+
+// Updated PostHandlingSchema
export const PostHandlingSchema = z.object({
- mode: z.enum(['global', 'inline']).optional(),
+ format: z.enum(['global', 'local']).default('local'),
limit: z.number().optional(),
- items: z.array(PostSchema).optional(),
+ posts: z.array(PostSchema).optional(),
+ query: GlobalQuerySchema.optional(),
})
export type PostObject = z.infer
+export type PostHandlingObject = z.infer
diff --git a/@fiction/core/types/endpoint.ts b/@fiction/core/types/endpoint.ts
index 12c814bc0..78349961e 100644
--- a/@fiction/core/types/endpoint.ts
+++ b/@fiction/core/types/endpoint.ts
@@ -3,14 +3,16 @@ import type express from 'express'
import type { ErrorCode } from '../utils/error.js'
import type { UserRoles } from './roles.js'
-export const DataFilterSchema = z.object({
+export const AndDataFilterSchema = z.object({
field: z.string(),
value: z.union([z.string(), z.number(), z.array(z.union([z.string(), z.number()]))]),
operator: z.enum(['=', '!=', '>', '<', '>=', '<=', 'like', 'not like', 'in', 'not in']),
})
+export const OrFilterGroupSchema = z.array(AndDataFilterSchema)
+
// sql where operators.value
-export type DataFilter = z.infer
+export type DataFilter = z.infer
export type IndexQuery = {
offset?: number
diff --git a/@fiction/plugins/plugin-send/admin/SidebarEmailEditor.vue b/@fiction/plugins/plugin-send/admin/SidebarEmailEditor.vue
index 9246d2f99..e3e483dda 100644
--- a/@fiction/plugins/plugin-send/admin/SidebarEmailEditor.vue
+++ b/@fiction/plugins/plugin-send/admin/SidebarEmailEditor.vue
@@ -1,12 +1,12 @@
-
+
diff --git a/@fiction/site/plugin-builder/tools/ToolCardEdit.vue b/@fiction/site/plugin-builder/tools/ToolCardEdit.vue
index e75028a10..8300fda01 100644
--- a/@fiction/site/plugin-builder/tools/ToolCardEdit.vue
+++ b/@fiction/site/plugin-builder/tools/ToolCardEdit.vue
@@ -1,8 +1,8 @@
@@ -82,7 +86,7 @@ async function save() {
title="Edit Page"
>
-
import ElTool from '@fiction/admin/tools/ElTool.vue'
-import ToolForm from '@fiction/admin/tools/ToolForm.vue'
import { toSlug, vue } from '@fiction/core'
import { InputOption } from '@fiction/ui'
import ElForm from '@fiction/ui/inputs/ElForm.vue'
import ElInput from '@fiction/ui/inputs/ElInput.vue'
+import FormEngine from '@fiction/ui/inputs/FormEngine.vue'
import type { AdminEditorController, EditorTool } from '@fiction/admin'
import { imageStyle } from '../../util'
import { saveSite, updateSite } from '../../utils/site'
@@ -116,7 +116,7 @@ const v = vue.computed({
v-bind="props"
>
-
import ElTool from '@fiction/admin/tools/ElTool.vue'
-import ToolForm from '@fiction/admin/tools/ToolForm.vue'
import { useService, vue } from '@fiction/core'
import { InputOption } from '@fiction/ui'
import XButton from '@fiction/ui/buttons/XButton.vue'
import ElModalConfirm from '@fiction/ui/ElModalConfirm.vue'
import ElForm from '@fiction/ui/inputs/ElForm.vue'
+import FormEngine from '@fiction/ui/inputs/FormEngine.vue'
import type { AdminEditorController, EditorTool } from '@fiction/admin'
import type { FictionApp } from '@fiction/core'
import { tableNames } from '../../tables'
@@ -89,7 +89,7 @@ const showConfirm = vue.ref(false)
v-bind="props"
>
-
+
diff --git a/@fiction/site/utils/test/schema.unit.test.ts b/@fiction/site/utils/test/schema.unit.test.ts
index d92944165..de68ded61 100644
--- a/@fiction/site/utils/test/schema.unit.test.ts
+++ b/@fiction/site/utils/test/schema.unit.test.ts
@@ -15,7 +15,7 @@ describe('schema tools', () => {
new InputOption({ key: 'grp', label: 'Group 1', input: 'group', options: [
new InputOption({ key: 'groupInput', label: 'subText', input: 'InputTextarea' }),
] }),
- new InputOption({ key: 'media', label: 'test', input: 'InputMediaDisplay' }),
+ new InputOption({ key: 'media', label: 'test', input: 'InputMedia' }),
]
const schema = z.object({
diff --git a/@fiction/ui/inputs/InputMediaDisplay.vue b/@fiction/ui/.ref/InputMediaDisplay.vue
similarity index 100%
rename from @fiction/ui/inputs/InputMediaDisplay.vue
rename to @fiction/ui/.ref/InputMediaDisplay.vue
diff --git a/@fiction/admin/tools/ElToolSep.vue b/@fiction/ui/inputs/ElToolSep.vue
similarity index 100%
rename from @fiction/admin/tools/ElToolSep.vue
rename to @fiction/ui/inputs/ElToolSep.vue
diff --git a/@fiction/ui/inputs/FormEngine.vue b/@fiction/ui/inputs/FormEngine.vue
new file mode 100644
index 000000000..08afa1f89
--- /dev/null
+++ b/@fiction/ui/inputs/FormEngine.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
diff --git a/@fiction/ui/inputs/InputPosts.vue b/@fiction/ui/inputs/InputPosts.vue
new file mode 100644
index 000000000..c11a56863
--- /dev/null
+++ b/@fiction/ui/inputs/InputPosts.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
diff --git a/@fiction/ui/inputs/index.ts b/@fiction/ui/inputs/index.ts
index e4f7f9055..3c91b116f 100644
--- a/@fiction/ui/inputs/index.ts
+++ b/@fiction/ui/inputs/index.ts
@@ -34,11 +34,11 @@ export const inputs = {
InputTextarea: { el: def(async () => import('./InputTextarea.vue')) },
InputWeight: { el: def(async () => import('./InputWeight.vue')) },
InputNumber: { el: def(async () => import('./InputNumber.vue')) },
+ InputPosts: { el: def(async () => import('./InputPosts.vue')), shape: [] },
InputLogo: { el: def(async () => import('./InputLogo.vue')), shape: ['url', 'format', 'html', 'el', 'typography.*', 'class', 'iconId'] },
InputIcon: { el: def(async () => import('./InputIcon.vue')), shape: ['url', 'format', 'html', 'iconId', 'el', 'class'] },
InputMedia: { el: def(async () => import('./InputMedia.vue')), shape: ['url', 'format', 'html', 'el', 'modify.*', 'iconId', 'class'] },
InputMediaUpload: { el: def(async () => import('./InputMediaUpload.vue')), shape: ['url'] },
- InputMediaDisplay: { el: def(async () => import('./InputMediaDisplay.vue')), shape: ['url', 'format', 'html', 'el', 'modify', 'modify.flip'] },
InputRanking: { el: def(async () => import('./InputRanking.vue')) },
InputMultipleChoice: { el: def(async () => import('./InputMultipleChoice.vue')) },
InputRating: { el: def(async () => import('./InputRating.vue')) },
diff --git a/@fiction/ui/inputs/test/TestInputsAll.vue b/@fiction/ui/inputs/test/TestInputsAll.vue
index 5fb3e270b..f5183f56a 100644
--- a/@fiction/ui/inputs/test/TestInputsAll.vue
+++ b/@fiction/ui/inputs/test/TestInputsAll.vue
@@ -104,8 +104,8 @@ function toggleDarkMode() {
:service="service"
:options="[
new InputOption({ label: 'Text', input: 'InputText', key: 'text' }),
- new InputOption({ label: 'Media Display', input: 'InputMediaDisplay', key: 'media' }),
- new InputOption({ label: 'Overlays', input: 'InputList', key: 'overlays', options: [new InputOption({ label: 'Media Display', input: 'InputMediaDisplay', key: 'media' })] })]"
+ new InputOption({ label: 'Media Display', input: 'InputMedia', key: 'media' }),
+ new InputOption({ label: 'Overlays', input: 'InputList', key: 'overlays', options: [new InputOption({ label: 'Media Display', input: 'InputMedia', key: 'media' })] })]"
/>