mechanica 1.0.20 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.d.ts CHANGED
@@ -188,6 +188,7 @@ declare module 'compact-json-schema' {
188
188
  title: string;
189
189
  external: boolean;
190
190
  };
191
+ "multiselect": Array<string>;
191
192
  "richText": Array<{
192
193
  text: string;
193
194
  type?: string;
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- import { p as passDefaultValue, u as unfoldSchema, r as registerAliases, a as registerAlias } from "./schemaAliases-stftBqNS.js";
1
+ import { p as passDefaultValue, u as unfoldSchema, r as registerAliases, a as registerAlias } from "./schemaAliases-BChQHL5h.js";
2
2
  import { inject, shallowReactive, nextTick, shallowRef, h, isReactive, defineComponent, useSlots, computed, reactive, onServerPrefetch } from "vue";
3
3
  import { blocksMap } from "virtual:builder-blocks";
4
4
  const createRouter = (app, content, data) => {
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":["../src/useRouter.ts","../src/createMechanica.ts","../src/renderBlocks.ts","../src/components/Content.ts","../src/defineData.ts","../src/components/RouterLink.ts","../src/components/SmartLink.ts","../src/utils/cn.ts","../src/useQuery.ts","../src/index.ts"],"sourcesContent":["import { App, inject, nextTick, shallowReactive, ShallowRef } from \"vue\"\r\nimport { State } from \"../../common/types\"\r\nimport { MechanicaState } from \"./createMechanica\"\r\n\r\ntype PageData = {\r\n title: string\r\n}\r\n\r\nexport const createRouter = (app: App<any>, content: ShallowRef<State[\"content\"]>, data: State[\"data\"]) => {\r\n\r\n let baseUrl: string = (window as any).state?.baseUrl ?? \"\"\r\n if (baseUrl.endsWith('/')) {\r\n baseUrl = baseUrl.slice(0, -1)\r\n }\r\n const pagesMap = new Map<string, State & PageData>()\r\n const promisesMap = new Map<string, Promise<any>>()\r\n\r\n const normalizePath = (path: string) => {\r\n let newPath = baseUrl + path\r\n if (newPath.endsWith('/') && newPath !== '/') newPath = newPath.slice(0, -1)\r\n\r\n return newPath\r\n }\r\n const removeBasePath = (path: string) => {\r\n if (baseUrl === '') return path\r\n if (path.startsWith(baseUrl)) return path.slice(baseUrl.length)\r\n return path\r\n }\r\n\r\n const currentRoute = shallowReactive({ path: normalizePath(removeBasePath(document.location.pathname)) })\r\n\r\n const isNeedToRevalidatePage = (path: string) => {\r\n return !pagesMap.has(path)\r\n }\r\n\r\n const fetchPage = (normalizedPath: string) => {\r\n if (!isNeedToRevalidatePage(normalizedPath)) return\r\n const existingPromise = promisesMap.get(normalizedPath)\r\n if (existingPromise) return existingPromise\r\n\r\n const exec = async () => {\r\n const resp = await fetch(normalizedPath).then(resp => resp.text())\r\n\r\n const _state = resp.match(/window\\.state=({.+})/)?.[1]\r\n const state = _state && JSON.parse(_state)\r\n\r\n state.title = resp.match(/<title>(.+)<\\/title>/)?.[1]\r\n\r\n pagesMap.set(normalizedPath, state)\r\n }\r\n const promise = exec()\r\n promisesMap.set(normalizedPath, promise)\r\n promise.finally(() => promisesMap.delete(normalizedPath))\r\n return promise\r\n }\r\n\r\n const openPage = async (normalizedPath: string) => {\r\n await fetchPage(normalizedPath);\r\n const state = pagesMap.get(normalizedPath)!;\r\n\r\n Object.assign(window, { state })\r\n const { content: newContent, data: newData } = state\r\n \r\n for (let [ key, value ] of Object.entries(newData)) {\r\n for (let _key in data[key]) {\r\n if (_key in value) continue\r\n delete data[key][_key]\r\n }\r\n Object.assign(data[key], value)\r\n }\r\n \r\n content.value = newContent\r\n currentRoute.path = normalizedPath\r\n if (import.meta.env.DEV) {\r\n const event = new Event(\"openpage\")\r\n Object.assign(event, { data: { content: content.value, data: data, dev: { currentPath: normalizedPath } } })\r\n window.document.dispatchEvent(event)\r\n }\r\n\r\n // TODO: Scroll to element with ID\r\n nextTick(() => {\r\n window.scrollTo(0, 0)\r\n })\r\n }\r\n\r\n const push = async (path: string) => {\r\n const normalizedPath = normalizePath(path)\r\n\r\n history.pushState({}, \"\", normalizedPath)\r\n await openPage(normalizedPath)\r\n }\r\n\r\n const onPopState = () => {\r\n openPage(document.location.pathname ?? '/')\r\n }\r\n\r\n if (!import.meta.env.SSR) {\r\n window.addEventListener(\"popstate\", onPopState)\r\n \r\n app.onUnmount(() => {\r\n window.removeEventListener(\"popstate\", onPopState)\r\n })\r\n }\r\n\r\n return {\r\n push,\r\n normalizePath,\r\n currentRoute\r\n }\r\n}\r\n\r\nexport const useRouter = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router\r\n}\r\n\r\nexport const useRoute = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router.currentRoute\r\n}","import type { State } from \"../../common/types\";\r\nimport { Plugin, ShallowRef, shallowRef } from \"vue\";\r\nimport { createRouter } from \"./useRouter\";\r\n\r\nexport type MechanicaState = {\r\n content: ShallowRef<State[\"content\"]>,\r\n data: State[\"data\"]\r\n router: ReturnType<typeof createRouter>\r\n}\r\n\r\nexport const createMechanica = (): Plugin => {\r\n\r\n return {\r\n install(app) {\r\n const content = shallowRef(import.meta.env.DEV? []: (window as any).state.content)\r\n const data = (window as any).state.data\r\n const router = createRouter(app, content, data)\r\n\r\n const mechanicaPlugin = {\r\n content,\r\n data,\r\n router\r\n }\r\n app.provide(\"mechanica\", mechanicaPlugin)\r\n\r\n if (!import.meta.env.SSR) {\r\n // @ts-ignore\r\n if (window.__MECHANICA_STATE__ === null) {\r\n // @ts-ignore\r\n window.__MECHANICA_STATE__ = mechanicaPlugin\r\n }\r\n }\r\n\r\n if (import.meta.env.SSR) {\r\n (app as any).updateProps = (state: State) => {\r\n mechanicaPlugin.content.value = state.content\r\n Object.assign(mechanicaPlugin.data, state.data)\r\n mechanicaPlugin.router = createRouter(app, mechanicaPlugin.content.value, mechanicaPlugin.data)\r\n }\r\n }\r\n\r\n app.onUnmount(() => {\r\n \r\n })\r\n }\r\n }\r\n}","import { h, VNode } from \"vue\"\r\nimport { blocksMap } from 'virtual:builder-blocks'\r\n\r\nexport const renderBlocks = (state: any[], baseKey?: string): (VNode | null)[] => {\r\n\r\n return state.map((item, index) => {\r\n if (item.vnode) {\r\n return item.vnode\r\n }\r\n\r\n const block = blocksMap.get(item.blockId)\r\n if (!block) return null\r\n\r\n const content = { ...item.data, key: baseKey? baseKey+index: item.id }\r\n\r\n if (!item.children) {\r\n return h(block, content)\r\n } \r\n\r\n let children: Record<string, any> = {}\r\n const slotsData = Array.isArray(item.children)? { default: item.children }: item.children\r\n\r\n for (let key in slotsData) {\r\n children[key] = () => renderBlocks(slotsData[key])\r\n }\r\n\r\n return h(block, content, children)\r\n })\r\n}\r\n","import { inject } from \"vue\"\r\nimport { renderBlocks } from \"../renderBlocks\"\r\nimport { MechanicaState } from \"../createMechanica\"\r\n\r\nconst Content = {\r\n props: [],\r\n setup () {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return () => renderBlocks(mechanica.content.value)\r\n }\r\n}\r\n\r\nexport default Content","import { SchemaItem, SchemaType, unfoldSchema } from \"compact-json-schema\";\r\nimport { inject, isReactive, shallowReactive } from \"vue\";\r\nimport { MechanicaState } from \"./createMechanica\";\r\nimport { passDefaultValue } from \"../../common/utils/passDefaultValue\";\r\n\r\ndeclare global {\r\n var _dataEntries: any[]\r\n var _registerData: (setings: any) => void\r\n}\r\n\r\nif (import.meta.env.SSR) {\r\n if (!globalThis._dataEntries) {\r\n globalThis._dataEntries = []\r\n }\r\n globalThis._registerData = (settings) => globalThis._dataEntries.push(settings)\r\n}\r\n\r\ntype Settings<S extends string, T extends SchemaItem> = {\r\n id: S,\r\n title?: string,\r\n order?: number,\r\n props: T\r\n}\r\n\r\nexport type DataHook<S extends string, T extends SchemaItem> = {\r\n (): SchemaType<T>\r\n id: S\r\n}\r\n\r\nexport const defineData = <S extends string, T extends SchemaItem>(settings: Settings<S, T>): DataHook<S, T> => {\r\n\r\n if (import.meta.env.SSR || import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerData(settings)\r\n }\r\n\r\n const fn = (): SchemaType<T> => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n \r\n if (import.meta.env.DEV) {\r\n mechanica.data[settings.id] = passDefaultValue(mechanica.data[settings.id], unfoldSchema(settings.props))\r\n }\r\n\r\n const data = mechanica.data[settings.id]\r\n if (import.meta.env.SSR) {\r\n return data\r\n }\r\n \r\n if (!isReactive(data)) {\r\n const reactiveData = shallowReactive(data)\r\n mechanica.data[settings.id] = reactiveData\r\n return reactiveData\r\n }\r\n return data\r\n }\r\n\r\n fn.id = settings.id\r\n fn.toJSON = function() { return { id: this.id } }\r\n return fn\r\n}","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { useRouter } from '../useRouter'\r\n\r\nexport const RouterLink = defineComponent({\r\n name: 'RouterLink',\r\n props: {\r\n to: {\r\n type: String,\r\n required: true\r\n },\r\n activeClass: {\r\n type: String,\r\n default: undefined\r\n },\r\n ariaCurrentValue: {\r\n type: String,\r\n default: undefined\r\n }\r\n },\r\n setup(props) {\r\n const router = useRouter()\r\n const slots = useSlots()\r\n\r\n const onClick = (e: MouseEvent) => {\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n if (e.button !== undefined && e.button !== 0) return\r\n if (e.currentTarget) {\r\n // @ts-expect-error getAttribute существует\r\n const target = e.currentTarget.getAttribute('target')\r\n if (/\\b_blank\\b/i.test(target)) return\r\n }\r\n\r\n e.preventDefault()\r\n router.push(props.to)\r\n }\r\n\r\n const linkProps = computed(() => {\r\n const obj: Record<string, any> = {\r\n href: router.normalizePath(props.to),\r\n onClick\r\n }\r\n\r\n if (props.to === router.currentRoute.path) {\r\n obj.class = props.activeClass ?? 'router-link-active'\r\n if (props.ariaCurrentValue) {\r\n obj['aria-current'] = props.ariaCurrentValue\r\n }\r\n }\r\n\r\n return obj\r\n })\r\n\r\n return () =>\r\n h('a', linkProps.value, slots.default ? slots.default() : [])\r\n }\r\n})\r\n","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { RouterLink } from './RouterLink'\r\n\r\nexport const SmartLink = defineComponent({\r\n name: 'SmartLink',\r\n props: {\r\n url: { type: String, required: true },\r\n title: { type: String, default: undefined },\r\n external: { type: Boolean, default: false },\r\n openNewTab: { type: Boolean, default: false },\r\n activeClass: { type: String, default: undefined },\r\n ariaCurrentValue: { type: String, default: undefined }\r\n },\r\n setup(props) {\r\n const slots = useSlots()\r\n\r\n const bindProps = computed(() => {\r\n const { url, external, openNewTab, ...otherProps } = props\r\n // если external → <a>, иначе → <RouterLink>\r\n const obj = props.external\r\n ? { href: url }\r\n : { to: url, ...otherProps }\r\n\r\n if (openNewTab) {\r\n Object.assign(obj, { target: '_blank' })\r\n }\r\n return obj\r\n })\r\n\r\n return () =>\r\n h(\r\n props.external ? 'a' : RouterLink,\r\n bindProps.value as any,\r\n slots.default ? slots.default() : props.title\r\n )\r\n }\r\n})\r\n","/** Tool for fast create class\r\n * ```ts\r\n * cn({ aligment: 'left' }) -> 'aligment-left'\r\n * cn({ active: true }) -> 'active'\r\n * ```\r\n * */\r\nexport const cn = (props: Record<string, boolean | string>) => {\r\n\r\n const classes = []\r\n\r\n for (let [ key, value ] of Object.entries(props)) {\r\n if (!value && typeof value !== 'number') continue\r\n if (value === true) {\r\n classes.push(key)\r\n } else {\r\n classes.push(`${key}-${value}`)\r\n }\r\n }\r\n\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Pick keys from object\r\n * ```\r\n * pick({ a: \"foo\", b: \"bar\" }, \"a\") -> { a: \"foo\" }\r\n * ```\r\n */\r\nexport const pick = <T extends object, K extends (keyof T)[]>(obj: T, ...args: K) => {\r\n return Object.fromEntries(Object.entries(obj).filter(entry => args.includes(entry[0] as keyof T))) as Pick<T, K[number]>\r\n}\r\n","import { onServerPrefetch, reactive } from \"vue\"\r\nimport { DataHook } from \"./defineData\"\r\n\r\nif (import.meta.env.SSR) {\r\n // @ts-ignore\r\n globalThis._queryEntries = []\r\n // @ts-ignore\r\n globalThis._registerQuery = (key) => _queryEntries.push(key)\r\n}\r\nif (import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerQuery = async (key, value) => {\r\n const resp = await fetch(`/@mechanica/query?q=${encodeURIComponent(key)}`)\r\n const obj = await resp.json()\r\n if (Array.isArray(obj)) {\r\n value.length = 0\r\n value.push(...obj)\r\n }\r\n }\r\n}\r\n\r\ntype PageFilter<T extends readonly DataHook<any, any>[]> = {\r\n folderName?: string\r\n folderId?: number\r\n data: T\r\n}\r\n\r\nexport function useQuery<const T extends readonly DataHook<any, any>[]>(\r\n type: \"getPages\",\r\n filter?: PageFilter<T>\r\n): ({ path: string } & {[K in T[number] as K[\"id\"]]: ReturnType<K> })[];\r\n\r\nexport function useQuery (type: \"fetch\", options: RequestInit & { url: string }): any\r\nexport function useQuery (type: \"getPages\" | \"fetch\", options?: any): any {\r\n\r\n const key = type + \".\" + JSON.stringify(options ?? {})\r\n \r\n if (import.meta.env.SSR) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n onServerPrefetch(async () => {\r\n // @ts-ignore\r\n const data = await globalThis.getQuery(key)\r\n if (Array.isArray(value)) {\r\n value.length = 0\r\n value.push(...data)\r\n }\r\n })\r\n return value\r\n } else if (import.meta.env.DEV) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n // @ts-ignore\r\n globalThis._registerQuery(key, value)\r\n return value\r\n }\r\n\r\n return (window as any).state.query?.[key] ?? (type === 'fetch'? {}: [])\r\n}","import { registerAlias, type SchemaItem, type SchemaType } from 'compact-json-schema'\r\n\r\nexport type { Page } from './types'\r\nexport { createMechanica } from './createMechanica'\r\nexport { default as Content } from './components/Content'\r\nexport { defineData } from './defineData'\r\nexport { RouterLink } from './components/RouterLink'\r\nexport { SmartLink } from './components/SmartLink'\r\nexport { useRouter } from './useRouter'\r\nexport { cn, pick } from './utils/cn'\r\nexport { useQuery } from './useQuery'\r\nimport { registerAliases } from '../../common/utils/schemaAliases'\r\nexport {}\r\n\r\ndeclare global {\r\n type ComponentInfo<T extends SchemaItem> = {\r\n id?: string,\r\n name?: string,\r\n order?: number,\r\n group?: string,\r\n props?: T\r\n }\r\n\r\n var defineBlock: <T extends SchemaItem = {}>(input: ComponentInfo<T>) => SchemaType<T>\r\n}\r\n\r\ndeclare module 'compact-json-schema' {\r\n export interface SchemaTypesMap {\r\n \"image\": { src: string, previewSrc?: string },\r\n \"file\": { src: string },\r\n \"color\": string,\r\n \"smartLink\": { url: string, title: string, external: boolean }\r\n \"richText\": Array<{ text: string, type?: string, styles?: Array<{ start: number, end: number, style: string }> }>\r\n }\r\n}\r\n\r\nif (import.meta.env.DEV || import.meta.env.SSR) {\r\n registerAliases(registerAlias)\r\n}\r\n"],"names":["resp","_a"],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sources":["../src/useRouter.ts","../src/createMechanica.ts","../src/renderBlocks.ts","../src/components/Content.ts","../src/defineData.ts","../src/components/RouterLink.ts","../src/components/SmartLink.ts","../src/utils/cn.ts","../src/useQuery.ts","../src/index.ts"],"sourcesContent":["import { App, inject, nextTick, shallowReactive, ShallowRef } from \"vue\"\r\nimport { State } from \"../../common/types\"\r\nimport { MechanicaState } from \"./createMechanica\"\r\n\r\ntype PageData = {\r\n title: string\r\n}\r\n\r\nexport const createRouter = (app: App<any>, content: ShallowRef<State[\"content\"]>, data: State[\"data\"]) => {\r\n\r\n let baseUrl: string = (window as any).state?.baseUrl ?? \"\"\r\n if (baseUrl.endsWith('/')) {\r\n baseUrl = baseUrl.slice(0, -1)\r\n }\r\n const pagesMap = new Map<string, State & PageData>()\r\n const promisesMap = new Map<string, Promise<any>>()\r\n\r\n const normalizePath = (path: string) => {\r\n let newPath = baseUrl + path\r\n if (newPath.endsWith('/') && newPath !== '/') newPath = newPath.slice(0, -1)\r\n\r\n return newPath\r\n }\r\n const removeBasePath = (path: string) => {\r\n if (baseUrl === '') return path\r\n if (path.startsWith(baseUrl)) return path.slice(baseUrl.length)\r\n return path\r\n }\r\n\r\n const currentRoute = shallowReactive({ path: normalizePath(removeBasePath(document.location.pathname)) })\r\n\r\n const isNeedToRevalidatePage = (path: string) => {\r\n return !pagesMap.has(path)\r\n }\r\n\r\n const fetchPage = (normalizedPath: string) => {\r\n if (!isNeedToRevalidatePage(normalizedPath)) return\r\n const existingPromise = promisesMap.get(normalizedPath)\r\n if (existingPromise) return existingPromise\r\n\r\n const exec = async () => {\r\n const resp = await fetch(normalizedPath).then(resp => resp.text())\r\n\r\n const _state = resp.match(/window\\.state=({.+})/)?.[1]\r\n const state = _state && JSON.parse(_state)\r\n\r\n state.title = resp.match(/<title>(.+)<\\/title>/)?.[1]\r\n\r\n pagesMap.set(normalizedPath, state)\r\n }\r\n const promise = exec()\r\n promisesMap.set(normalizedPath, promise)\r\n promise.finally(() => promisesMap.delete(normalizedPath))\r\n return promise\r\n }\r\n\r\n const openPage = async (normalizedPath: string) => {\r\n await fetchPage(normalizedPath);\r\n const state = pagesMap.get(normalizedPath)!;\r\n\r\n Object.assign(window, { state })\r\n const { content: newContent, data: newData } = state\r\n \r\n for (let [ key, value ] of Object.entries(newData)) {\r\n for (let _key in data[key]) {\r\n if (_key in value) continue\r\n delete data[key][_key]\r\n }\r\n Object.assign(data[key], value)\r\n }\r\n \r\n content.value = newContent\r\n currentRoute.path = normalizedPath\r\n if (import.meta.env.DEV) {\r\n const event = new Event(\"openpage\")\r\n Object.assign(event, { data: { content: content.value, data: data, dev: { currentPath: normalizedPath } } })\r\n window.document.dispatchEvent(event)\r\n }\r\n\r\n // TODO: Scroll to element with ID\r\n nextTick(() => {\r\n window.scrollTo(0, 0)\r\n })\r\n }\r\n\r\n const push = async (path: string) => {\r\n const normalizedPath = normalizePath(path)\r\n\r\n history.pushState({}, \"\", normalizedPath)\r\n await openPage(normalizedPath)\r\n }\r\n\r\n const onPopState = () => {\r\n openPage(document.location.pathname ?? '/')\r\n }\r\n\r\n if (!import.meta.env.SSR) {\r\n window.addEventListener(\"popstate\", onPopState)\r\n \r\n app.onUnmount(() => {\r\n window.removeEventListener(\"popstate\", onPopState)\r\n })\r\n }\r\n\r\n return {\r\n push,\r\n normalizePath,\r\n currentRoute\r\n }\r\n}\r\n\r\nexport const useRouter = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router\r\n}\r\n\r\nexport const useRoute = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router.currentRoute\r\n}","import type { State } from \"../../common/types\";\r\nimport { Plugin, ShallowRef, shallowRef } from \"vue\";\r\nimport { createRouter } from \"./useRouter\";\r\n\r\nexport type MechanicaState = {\r\n content: ShallowRef<State[\"content\"]>,\r\n data: State[\"data\"]\r\n router: ReturnType<typeof createRouter>\r\n}\r\n\r\nexport const createMechanica = (): Plugin => {\r\n\r\n return {\r\n install(app) {\r\n const content = shallowRef(import.meta.env.DEV? []: (window as any).state.content)\r\n const data = (window as any).state.data\r\n const router = createRouter(app, content, data)\r\n\r\n const mechanicaPlugin = {\r\n content,\r\n data,\r\n router\r\n }\r\n app.provide(\"mechanica\", mechanicaPlugin)\r\n\r\n if (!import.meta.env.SSR) {\r\n // @ts-ignore\r\n if (window.__MECHANICA_STATE__ === null) {\r\n // @ts-ignore\r\n window.__MECHANICA_STATE__ = mechanicaPlugin\r\n }\r\n }\r\n\r\n if (import.meta.env.SSR) {\r\n (app as any).updateProps = (state: State) => {\r\n mechanicaPlugin.content.value = state.content\r\n Object.assign(mechanicaPlugin.data, state.data)\r\n mechanicaPlugin.router = createRouter(app, mechanicaPlugin.content.value, mechanicaPlugin.data)\r\n }\r\n }\r\n\r\n app.onUnmount(() => {\r\n \r\n })\r\n }\r\n }\r\n}","import { h, VNode } from \"vue\"\r\nimport { blocksMap } from 'virtual:builder-blocks'\r\n\r\nexport const renderBlocks = (state: any[], baseKey?: string): (VNode | null)[] => {\r\n\r\n return state.map((item, index) => {\r\n if (item.vnode) {\r\n return item.vnode\r\n }\r\n\r\n const block = blocksMap.get(item.blockId)\r\n if (!block) return null\r\n\r\n const content = { ...item.data, key: baseKey? baseKey+index: item.id }\r\n\r\n if (!item.children) {\r\n return h(block, content)\r\n } \r\n\r\n let children: Record<string, any> = {}\r\n const slotsData = Array.isArray(item.children)? { default: item.children }: item.children\r\n\r\n for (let key in slotsData) {\r\n children[key] = () => renderBlocks(slotsData[key])\r\n }\r\n\r\n return h(block, content, children)\r\n })\r\n}\r\n","import { inject } from \"vue\"\r\nimport { renderBlocks } from \"../renderBlocks\"\r\nimport { MechanicaState } from \"../createMechanica\"\r\n\r\nconst Content = {\r\n props: [],\r\n setup () {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return () => renderBlocks(mechanica.content.value)\r\n }\r\n}\r\n\r\nexport default Content","import { SchemaItem, SchemaType, unfoldSchema } from \"compact-json-schema\";\r\nimport { inject, isReactive, shallowReactive } from \"vue\";\r\nimport { MechanicaState } from \"./createMechanica\";\r\nimport { passDefaultValue } from \"../../common/utils/passDefaultValue\";\r\n\r\ndeclare global {\r\n var _dataEntries: any[]\r\n var _registerData: (setings: any) => void\r\n}\r\n\r\nif (import.meta.env.SSR) {\r\n if (!globalThis._dataEntries) {\r\n globalThis._dataEntries = []\r\n }\r\n globalThis._registerData = (settings) => globalThis._dataEntries.push(settings)\r\n}\r\n\r\ntype Settings<S extends string, T extends SchemaItem> = {\r\n id: S,\r\n title?: string,\r\n order?: number,\r\n props: T\r\n}\r\n\r\nexport type DataHook<S extends string, T extends SchemaItem> = {\r\n (): SchemaType<T>\r\n id: S\r\n}\r\n\r\nexport const defineData = <S extends string, T extends SchemaItem>(settings: Settings<S, T>): DataHook<S, T> => {\r\n\r\n if (import.meta.env.SSR || import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerData(settings)\r\n }\r\n\r\n const fn = (): SchemaType<T> => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n \r\n if (import.meta.env.DEV) {\r\n mechanica.data[settings.id] = passDefaultValue(mechanica.data[settings.id], unfoldSchema(settings.props))\r\n }\r\n\r\n const data = mechanica.data[settings.id]\r\n if (import.meta.env.SSR) {\r\n return data\r\n }\r\n \r\n if (!isReactive(data)) {\r\n const reactiveData = shallowReactive(data)\r\n mechanica.data[settings.id] = reactiveData\r\n return reactiveData\r\n }\r\n return data\r\n }\r\n\r\n fn.id = settings.id\r\n fn.toJSON = function() { return { id: this.id } }\r\n return fn\r\n}","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { useRouter } from '../useRouter'\r\n\r\nexport const RouterLink = defineComponent({\r\n name: 'RouterLink',\r\n props: {\r\n to: {\r\n type: String,\r\n required: true\r\n },\r\n activeClass: {\r\n type: String,\r\n default: undefined\r\n },\r\n ariaCurrentValue: {\r\n type: String,\r\n default: undefined\r\n }\r\n },\r\n setup(props) {\r\n const router = useRouter()\r\n const slots = useSlots()\r\n\r\n const onClick = (e: MouseEvent) => {\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n if (e.button !== undefined && e.button !== 0) return\r\n if (e.currentTarget) {\r\n // @ts-expect-error getAttribute существует\r\n const target = e.currentTarget.getAttribute('target')\r\n if (/\\b_blank\\b/i.test(target)) return\r\n }\r\n\r\n e.preventDefault()\r\n router.push(props.to)\r\n }\r\n\r\n const linkProps = computed(() => {\r\n const obj: Record<string, any> = {\r\n href: router.normalizePath(props.to),\r\n onClick\r\n }\r\n\r\n if (props.to === router.currentRoute.path) {\r\n obj.class = props.activeClass ?? 'router-link-active'\r\n if (props.ariaCurrentValue) {\r\n obj['aria-current'] = props.ariaCurrentValue\r\n }\r\n }\r\n\r\n return obj\r\n })\r\n\r\n return () =>\r\n h('a', linkProps.value, slots.default ? slots.default() : [])\r\n }\r\n})\r\n","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { RouterLink } from './RouterLink'\r\n\r\nexport const SmartLink = defineComponent({\r\n name: 'SmartLink',\r\n props: {\r\n url: { type: String, required: true },\r\n title: { type: String, default: undefined },\r\n external: { type: Boolean, default: false },\r\n openNewTab: { type: Boolean, default: false },\r\n activeClass: { type: String, default: undefined },\r\n ariaCurrentValue: { type: String, default: undefined }\r\n },\r\n setup(props) {\r\n const slots = useSlots()\r\n\r\n const bindProps = computed(() => {\r\n const { url, external, openNewTab, ...otherProps } = props\r\n // если external → <a>, иначе → <RouterLink>\r\n const obj = props.external\r\n ? { href: url }\r\n : { to: url, ...otherProps }\r\n\r\n if (openNewTab) {\r\n Object.assign(obj, { target: '_blank' })\r\n }\r\n return obj\r\n })\r\n\r\n return () =>\r\n h(\r\n props.external ? 'a' : RouterLink,\r\n bindProps.value as any,\r\n slots.default ? slots.default() : props.title\r\n )\r\n }\r\n})\r\n","/** Tool for fast create class\r\n * ```ts\r\n * cn({ aligment: 'left' }) -> 'aligment-left'\r\n * cn({ active: true }) -> 'active'\r\n * ```\r\n * */\r\nexport const cn = (props: Record<string, boolean | string>) => {\r\n\r\n const classes = []\r\n\r\n for (let [ key, value ] of Object.entries(props)) {\r\n if (!value && typeof value !== 'number') continue\r\n if (value === true) {\r\n classes.push(key)\r\n } else {\r\n classes.push(`${key}-${value}`)\r\n }\r\n }\r\n\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Pick keys from object\r\n * ```\r\n * pick({ a: \"foo\", b: \"bar\" }, \"a\") -> { a: \"foo\" }\r\n * ```\r\n */\r\nexport const pick = <T extends object, K extends (keyof T)[]>(obj: T, ...args: K) => {\r\n return Object.fromEntries(Object.entries(obj).filter(entry => args.includes(entry[0] as keyof T))) as Pick<T, K[number]>\r\n}\r\n","import { onServerPrefetch, reactive } from \"vue\"\r\nimport { DataHook } from \"./defineData\"\r\n\r\nif (import.meta.env.SSR) {\r\n // @ts-ignore\r\n globalThis._queryEntries = []\r\n // @ts-ignore\r\n globalThis._registerQuery = (key) => _queryEntries.push(key)\r\n}\r\nif (import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerQuery = async (key, value) => {\r\n const resp = await fetch(`/@mechanica/query?q=${encodeURIComponent(key)}`)\r\n const obj = await resp.json()\r\n if (Array.isArray(obj)) {\r\n value.length = 0\r\n value.push(...obj)\r\n }\r\n }\r\n}\r\n\r\ntype PageFilter<T extends readonly DataHook<any, any>[]> = {\r\n folderName?: string\r\n folderId?: number\r\n data: T\r\n}\r\n\r\nexport function useQuery<const T extends readonly DataHook<any, any>[]>(\r\n type: \"getPages\",\r\n filter?: PageFilter<T>\r\n): ({ path: string } & {[K in T[number] as K[\"id\"]]: ReturnType<K> })[];\r\n\r\nexport function useQuery (type: \"fetch\", options: RequestInit & { url: string }): any\r\nexport function useQuery (type: \"getPages\" | \"fetch\", options?: any): any {\r\n\r\n const key = type + \".\" + JSON.stringify(options ?? {})\r\n \r\n if (import.meta.env.SSR) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n onServerPrefetch(async () => {\r\n // @ts-ignore\r\n const data = await globalThis.getQuery(key)\r\n if (Array.isArray(value)) {\r\n value.length = 0\r\n value.push(...data)\r\n }\r\n })\r\n return value\r\n } else if (import.meta.env.DEV) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n // @ts-ignore\r\n globalThis._registerQuery(key, value)\r\n return value\r\n }\r\n\r\n return (window as any).state.query?.[key] ?? (type === 'fetch'? {}: [])\r\n}","import { registerAlias, type SchemaItem, type SchemaType } from 'compact-json-schema'\r\n\r\nexport type { Page } from './types'\r\nexport { createMechanica } from './createMechanica'\r\nexport { default as Content } from './components/Content'\r\nexport { defineData } from './defineData'\r\nexport { RouterLink } from './components/RouterLink'\r\nexport { SmartLink } from './components/SmartLink'\r\nexport { useRouter } from './useRouter'\r\nexport { cn, pick } from './utils/cn'\r\nexport { useQuery } from './useQuery'\r\nimport { registerAliases } from '../../common/utils/schemaAliases'\r\nexport {}\r\n\r\ndeclare global {\r\n type ComponentInfo<T extends SchemaItem> = {\r\n id?: string,\r\n name?: string,\r\n order?: number,\r\n group?: string,\r\n props?: T\r\n }\r\n\r\n var defineBlock: <T extends SchemaItem = {}>(input: ComponentInfo<T>) => SchemaType<T>\r\n}\r\n\r\ndeclare module 'compact-json-schema' {\r\n export interface SchemaTypesMap {\r\n \"image\": { src: string, previewSrc?: string },\r\n \"file\": { src: string },\r\n \"color\": string,\r\n \"smartLink\": { url: string, title: string, external: boolean },\r\n \"multiselect\": Array<string>,\r\n \"richText\": Array<{ text: string, type?: string, styles?: Array<{ start: number, end: number, style: string }> }>\r\n }\r\n}\r\n\r\nif (import.meta.env.DEV || import.meta.env.SSR) {\r\n registerAliases(registerAlias)\r\n}\r\n"],"names":["resp","_a"],"mappings":"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"}
@@ -142,6 +142,7 @@ const registerAliases = (registerCallback) => {
142
142
  registerAlias$1("file", { type: "object", format: "file", properties: { src: "string" } });
143
143
  registerAlias$1("color", { type: "string", format: "color" });
144
144
  registerAlias$1("smartLink", { type: "object", format: "smartLink", properties: { url: "string", title: "string", external: "boolean" } });
145
+ registerAlias$1("multiselect", { type: "array", format: "multiselect", items: "string" });
145
146
  registerAlias$1("richText", {
146
147
  type: "array",
147
148
  format: "richText",
@@ -156,4 +157,4 @@ export {
156
157
  registerAliases as r,
157
158
  unfoldSchema as u
158
159
  };
159
- //# sourceMappingURL=schemaAliases-stftBqNS.js.map
160
+ //# sourceMappingURL=schemaAliases-BChQHL5h.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemaAliases-stftBqNS.js","sources":["../../../node_modules/compact-json-schema/dist/index.js","../../common/utils/passDefaultValue.ts","../../common/utils/schemaAliases.ts"],"sourcesContent":["const aliases = {};\nconst registerAlias = (key, item) => {\n aliases[key] = item;\n};\nconst baseTypes = [\"string\", \"boolean\", \"number\", \"integer\", \"bigint\", \"object\", \"array\"];\nconst isBaseType = (key) => {\n return baseTypes.some((item) => item === key || item + \"?\" === key || item + \"??\" === key);\n};\nconst trimType = (type) => {\n if (type.endsWith(\"??\"))\n return type.slice(0, -2);\n if (type.endsWith(\"?\"))\n return type.slice(0, -1);\n return type;\n};\nconst parseObjectFields = (props, unfoldSchema2) => {\n const required = [];\n const properties = {};\n for (let [key, value] of Object.entries(props)) {\n if (Array.isArray(value)) {\n required.push(key);\n } else if (typeof value === \"object\") {\n if (typeof value.type !== \"string\" || !value.type.endsWith(\"?\")) {\n required.push(key);\n }\n } else if (typeof value === \"string\") {\n if (!value.endsWith(\"?\")) {\n required.push(key);\n }\n }\n properties[key] = unfoldSchema2(value);\n }\n return {\n properties,\n required\n };\n};\nconst unfoldArray$1 = (schema2) => {\n const isEnum = schema2.every((item) => typeof item === \"string\") && schema2.some((item) => !isBaseType(item));\n if (isEnum) {\n if (schema2.length === 1) {\n return { type: \"string\", const: schema2[0] };\n } else {\n return { type: \"string\", enum: schema2 };\n }\n } else {\n return {\n oneOf: schema2.map((item) => unfoldSchema(item))\n };\n }\n};\nconst unfoldSchema = (schema2) => {\n if (typeof schema2 === \"string\") {\n const trimmedType = trimType(schema2);\n if (trimmedType in aliases) {\n if (schema2.endsWith(\"??\")) {\n return { ...unfoldSchema(aliases[trimmedType]), nullable: true };\n }\n return unfoldSchema(aliases[trimmedType]);\n }\n if (schema2.endsWith(\"??\")) {\n return { type: trimmedType, nullable: true };\n }\n return { type: trimmedType };\n }\n if (Array.isArray(schema2)) {\n return unfoldArray$1(schema2);\n }\n if (typeof schema2 !== \"object\" || schema2 === null) {\n throw new Error(`Schema type ${schema2} is not object`);\n }\n if (typeof schema2.type === \"string\") {\n const { items, properties, type, ...otherProps } = schema2;\n const trimmedType = trimType(type);\n if (trimmedType === \"array\" && items) {\n return {\n type: \"array\",\n nullable: type.endsWith(\"??\") ? true : void 0,\n ...otherProps,\n items: unfoldSchema(items)\n };\n }\n if (trimmedType === \"object\" && properties) {\n return {\n type: \"object\",\n nullable: type.endsWith(\"??\") ? true : void 0,\n ...otherProps,\n ...parseObjectFields(properties, unfoldSchema)\n };\n }\n return {\n ...unfoldSchema(type),\n ...otherProps\n };\n }\n return {\n type: \"object\",\n ...parseObjectFields(schema2, unfoldSchema)\n };\n};\nconst schemaNames = [\"body\", \"params\", \"querystring\", \"headers\"];\nconst combineSchema = (schemas) => {\n return Object.fromEntries(\n Object.entries(schemas).map(([key, value]) => [key, unfoldSchema(value)])\n );\n};\nfunction sc(...args) {\n if (args.length === 1 && typeof args[0] === \"object\") {\n const hasOnlySchemaNames = Object.keys(args[0]).reduce((res, item) => res && schemaNames.includes(item), true);\n if (hasOnlySchemaNames) {\n return { schema: combineSchema(args[0]) };\n }\n }\n const lastType = typeof args[args.length - 1] === \"string\" ? args[args.length - 1] : null;\n const keys = [\"params\", \"body\", \"querystring\"].slice(0, args.length - (lastType ? 2 : 0));\n if (lastType) {\n keys.push(lastType === \"query\" ? \"querystring\" : lastType);\n }\n return {\n schema: Object.fromEntries(\n keys.map((key, index) => [key, args[index] === null ? null : unfoldSchema(args[index])]).filter((entry) => entry[1] !== null)\n )\n };\n}\nlet typeMap = {};\nconst provideTypeBoxMap = (map) => {\n typeMap = map;\n};\nconst unfoldArray = (schema2) => {\n const isEnum = schema2.every((item) => typeof item === \"string\") && schema2.some((item) => !isBaseType(item));\n if (isEnum) {\n if (schema2.length === 1) {\n return typeMap[\"literal\"](schema2[0]);\n } else {\n return typeMap[\"union\"](schema2.map((str) => typeMap[\"literal\"](str)));\n }\n } else {\n return typeMap[\"union\"](schema2.map((item) => unfoldTypeBoxSchema(item)));\n }\n};\nconst wrapNull = (obj, isNullable) => {\n if (isNullable) {\n return typeMap[\"union\"]([obj, typeMap[\"null\"]()]);\n } else {\n return obj;\n }\n};\nconst unfoldTypeBoxSchema = (schema2, options) => {\n if (typeof schema2 === \"string\") {\n const trimmedType = trimType(schema2);\n if (trimmedType in aliases) {\n const aliasSchema = unfoldTypeBoxSchema(aliases[trimmedType]);\n if (schema2.endsWith(\"??\")) {\n return typeMap[\"union\"]([aliasSchema, typeMap[\"null\"]()]);\n }\n return aliasSchema;\n }\n const baseSchema = typeMap[trimmedType](options);\n if (schema2.endsWith(\"??\")) {\n return typeMap[\"union\"]([baseSchema, typeMap[\"null\"]()]);\n }\n return baseSchema;\n }\n if (Array.isArray(schema2)) {\n return unfoldArray(schema2);\n }\n if (typeof schema2 !== \"object\" || schema2 === null) {\n throw new Error(`Schema type ${schema2} is not object`);\n }\n if (typeof schema2.type === \"string\") {\n const isNullable = schema2.type.endsWith(\"??\");\n const trimmedType = trimType(schema2.type);\n if (trimmedType === \"array\" && \"items\" in schema2) {\n const { type, items, ...otherProps } = schema2;\n return wrapNull(typeMap[\"array\"](unfoldTypeBoxSchema(items), otherProps), isNullable);\n } else if (trimmedType === \"object\" && \"properties\" in schema2) {\n const { type, properties: properties2, ...otherProps } = schema2;\n const { properties: parsedProps, required: required2 } = parseObjectFields(properties2, unfoldTypeBoxSchema);\n for (let key in parsedProps) {\n if (!required2.includes(key)) {\n parsedProps[key] = typeMap[\"optional\"](parsedProps[key]);\n }\n }\n return wrapNull(typeMap[\"object\"](parsedProps, otherProps), isNullable);\n } else if (trimmedType === \"string\" && \"enum\" in schema2) {\n const { type, enum: _enum, ...otherProps } = schema2;\n const arr = _enum.map((str) => typeMap[\"literal\"](str));\n if (isNullable) {\n arr.push(typeMap[\"null\"]);\n }\n return typeMap[\"union\"](arr, otherProps);\n } else {\n const { type, ...otherProps } = schema2;\n return unfoldTypeBoxSchema(schema2.type, otherProps);\n }\n }\n const { properties, required } = parseObjectFields(schema2, unfoldTypeBoxSchema);\n for (let key in properties) {\n if (!required.includes(key)) {\n properties[key] = typeMap[\"optional\"](properties[key]);\n }\n }\n return typeMap[\"object\"](properties);\n};\nconst schema = (obj) => obj;\nexport {\n combineSchema,\n provideTypeBoxMap,\n registerAlias,\n sc,\n schema,\n unfoldSchema,\n unfoldTypeBoxSchema\n};\n//# sourceMappingURL=index.js.map\n","// import defaultImageSrc from '../assets/image-blob.png'\r\n\r\n// export { defaultImageSrc }\r\n\r\nexport const defaultImageSrc = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSIjRjJGMkYyIiByeD0iOCIvPjxwYXRoIGZpbGw9IiM2RDZENkQiIGQ9Ik00MS42IDE5LjZIMjIuNEE0LjQgNC40IDAgMCAwIDE4IDI0djE2YTQuNCA0LjQgMCAwIDAgNC40IDQuNGgxOS4yQTQuNCA0LjQgMCAwIDAgNDYgNDBWMjRhNC40IDQuNCAwIDAgMC00LjQtNC40TTIyLjQgMjJoMTkuMmEyIDIgMCAwIDEgMiAydjEzLjEwNGwtNC4zNTItNC4zNTJhMS4xMiAxLjEyIDAgMCAwLS44OTYtLjM1MiAxLjI4IDEuMjggMCAwIDAtLjg4LjQzMmwtMi4wNjQgMi40OC03LjM2LTcuMzZhMS4xMiAxLjEyIDAgMCAwLS44NDgtLjM1MiAxLjI4IDEuMjggMCAwIDAtLjg4LjQzMmwtNS45MiA3LjA1NlYyNGEyIDIgMCAwIDEgMi0ybS0yIDE4di0xLjE2OGw2Ljg4LTguMjU2IDYuNTkyIDYuNTkyLTQuMDMyIDQuOEgyMi40YTIgMiAwIDAgMS0yLTEuOTY4bTIxLjIgMmgtOC42NGw1LjUyLTYuNjI0IDUuMDQgNS4wNEExLjk3IDEuOTcgMCAwIDEgNDEuNiA0MiIvPjwvc3ZnPg==\"\r\n\r\nexport const getDefaultValue = (schema: any): any => {\r\n if (schema.default) return schema.default\r\n if (schema.nullable) return null\r\n if (schema.type === 'object' && schema.format === 'image') {\r\n return { src: defaultImageSrc, previewSrc: defaultImageSrc }\r\n }\r\n if (schema.type === 'object' && schema.format === 'file') {\r\n return { src: \"\" }\r\n }\r\n if (schema.type === 'number' || schema.type === 'integer') return 0\r\n if (schema.type === 'object') {\r\n if (!schema.properties) return {}\r\n return Object.fromEntries(Object.entries(schema.properties).map(([key, value]) => {\r\n if (!schema.required?.includes(key)) {\r\n return [ key, undefined ]\r\n }\r\n return [ key, getDefaultValue(value)]\r\n }))\r\n }\r\n if (schema.type === \"array\" && schema.format === \"richText\") {\r\n return [{ text: \"\" }]\r\n }\r\n if (schema.type === 'array') return []\r\n if (schema.type === 'boolean') return false\r\n return \"\"\r\n}\r\n\r\n\r\nexport const passDefaultValue = (state: any, schema: any) => {\r\n if (!schema) return state\r\n if (schema.type === 'object' && state) {\r\n for (let key in schema.properties) {\r\n if (!(key in state) && !schema.required.includes(key)) continue\r\n state[key] = passDefaultValue(state[key], schema.properties[key])\r\n }\r\n }\r\n return state ?? getDefaultValue(schema)\r\n}","import { registerAlias as registerAliasOriginal } from \"compact-json-schema\"\r\n\r\nexport const registerAliases = (registerCallback?: typeof registerAliasOriginal) => {\r\n const registerAlias = registerCallback ?? registerAliasOriginal\r\n registerAlias(\"image\", { type: \"object\", format: \"image\", properties: { src: \"string\", previewSrc: \"string?\" } } as any)\r\n registerAlias(\"file\", { type: \"object\", format: \"file\", properties: { src: \"string\" } } as any)\r\n registerAlias(\"color\", { type: \"string\", format: \"color\" } as any)\r\n registerAlias(\"smartLink\", { type: \"object\", format: \"smartLink\", properties: { url: \"string\", title: \"string\", external: \"boolean\" } } as any)\r\n registerAlias(\"richText\", {\r\n type: \"array\", \r\n format: \"richText\", \r\n items: { type: \"object\", properties: { text: \"string\", type: \"string?\", styles: \"object?\" } } \r\n } as any)\r\n}"],"names":["registerAlias","registerAliasOriginal"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"schemaAliases-BChQHL5h.js","sources":["../../../node_modules/compact-json-schema/dist/index.js","../../common/utils/passDefaultValue.ts","../../common/utils/schemaAliases.ts"],"sourcesContent":["const aliases = {};\nconst registerAlias = (key, item) => {\n aliases[key] = item;\n};\nconst baseTypes = [\"string\", \"boolean\", \"number\", \"integer\", \"bigint\", \"object\", \"array\"];\nconst isBaseType = (key) => {\n return baseTypes.some((item) => item === key || item + \"?\" === key || item + \"??\" === key);\n};\nconst trimType = (type) => {\n if (type.endsWith(\"??\"))\n return type.slice(0, -2);\n if (type.endsWith(\"?\"))\n return type.slice(0, -1);\n return type;\n};\nconst parseObjectFields = (props, unfoldSchema2) => {\n const required = [];\n const properties = {};\n for (let [key, value] of Object.entries(props)) {\n if (Array.isArray(value)) {\n required.push(key);\n } else if (typeof value === \"object\") {\n if (typeof value.type !== \"string\" || !value.type.endsWith(\"?\")) {\n required.push(key);\n }\n } else if (typeof value === \"string\") {\n if (!value.endsWith(\"?\")) {\n required.push(key);\n }\n }\n properties[key] = unfoldSchema2(value);\n }\n return {\n properties,\n required\n };\n};\nconst unfoldArray$1 = (schema2) => {\n const isEnum = schema2.every((item) => typeof item === \"string\") && schema2.some((item) => !isBaseType(item));\n if (isEnum) {\n if (schema2.length === 1) {\n return { type: \"string\", const: schema2[0] };\n } else {\n return { type: \"string\", enum: schema2 };\n }\n } else {\n return {\n oneOf: schema2.map((item) => unfoldSchema(item))\n };\n }\n};\nconst unfoldSchema = (schema2) => {\n if (typeof schema2 === \"string\") {\n const trimmedType = trimType(schema2);\n if (trimmedType in aliases) {\n if (schema2.endsWith(\"??\")) {\n return { ...unfoldSchema(aliases[trimmedType]), nullable: true };\n }\n return unfoldSchema(aliases[trimmedType]);\n }\n if (schema2.endsWith(\"??\")) {\n return { type: trimmedType, nullable: true };\n }\n return { type: trimmedType };\n }\n if (Array.isArray(schema2)) {\n return unfoldArray$1(schema2);\n }\n if (typeof schema2 !== \"object\" || schema2 === null) {\n throw new Error(`Schema type ${schema2} is not object`);\n }\n if (typeof schema2.type === \"string\") {\n const { items, properties, type, ...otherProps } = schema2;\n const trimmedType = trimType(type);\n if (trimmedType === \"array\" && items) {\n return {\n type: \"array\",\n nullable: type.endsWith(\"??\") ? true : void 0,\n ...otherProps,\n items: unfoldSchema(items)\n };\n }\n if (trimmedType === \"object\" && properties) {\n return {\n type: \"object\",\n nullable: type.endsWith(\"??\") ? true : void 0,\n ...otherProps,\n ...parseObjectFields(properties, unfoldSchema)\n };\n }\n return {\n ...unfoldSchema(type),\n ...otherProps\n };\n }\n return {\n type: \"object\",\n ...parseObjectFields(schema2, unfoldSchema)\n };\n};\nconst schemaNames = [\"body\", \"params\", \"querystring\", \"headers\"];\nconst combineSchema = (schemas) => {\n return Object.fromEntries(\n Object.entries(schemas).map(([key, value]) => [key, unfoldSchema(value)])\n );\n};\nfunction sc(...args) {\n if (args.length === 1 && typeof args[0] === \"object\") {\n const hasOnlySchemaNames = Object.keys(args[0]).reduce((res, item) => res && schemaNames.includes(item), true);\n if (hasOnlySchemaNames) {\n return { schema: combineSchema(args[0]) };\n }\n }\n const lastType = typeof args[args.length - 1] === \"string\" ? args[args.length - 1] : null;\n const keys = [\"params\", \"body\", \"querystring\"].slice(0, args.length - (lastType ? 2 : 0));\n if (lastType) {\n keys.push(lastType === \"query\" ? \"querystring\" : lastType);\n }\n return {\n schema: Object.fromEntries(\n keys.map((key, index) => [key, args[index] === null ? null : unfoldSchema(args[index])]).filter((entry) => entry[1] !== null)\n )\n };\n}\nlet typeMap = {};\nconst provideTypeBoxMap = (map) => {\n typeMap = map;\n};\nconst unfoldArray = (schema2) => {\n const isEnum = schema2.every((item) => typeof item === \"string\") && schema2.some((item) => !isBaseType(item));\n if (isEnum) {\n if (schema2.length === 1) {\n return typeMap[\"literal\"](schema2[0]);\n } else {\n return typeMap[\"union\"](schema2.map((str) => typeMap[\"literal\"](str)));\n }\n } else {\n return typeMap[\"union\"](schema2.map((item) => unfoldTypeBoxSchema(item)));\n }\n};\nconst wrapNull = (obj, isNullable) => {\n if (isNullable) {\n return typeMap[\"union\"]([obj, typeMap[\"null\"]()]);\n } else {\n return obj;\n }\n};\nconst unfoldTypeBoxSchema = (schema2, options) => {\n if (typeof schema2 === \"string\") {\n const trimmedType = trimType(schema2);\n if (trimmedType in aliases) {\n const aliasSchema = unfoldTypeBoxSchema(aliases[trimmedType]);\n if (schema2.endsWith(\"??\")) {\n return typeMap[\"union\"]([aliasSchema, typeMap[\"null\"]()]);\n }\n return aliasSchema;\n }\n const baseSchema = typeMap[trimmedType](options);\n if (schema2.endsWith(\"??\")) {\n return typeMap[\"union\"]([baseSchema, typeMap[\"null\"]()]);\n }\n return baseSchema;\n }\n if (Array.isArray(schema2)) {\n return unfoldArray(schema2);\n }\n if (typeof schema2 !== \"object\" || schema2 === null) {\n throw new Error(`Schema type ${schema2} is not object`);\n }\n if (typeof schema2.type === \"string\") {\n const isNullable = schema2.type.endsWith(\"??\");\n const trimmedType = trimType(schema2.type);\n if (trimmedType === \"array\" && \"items\" in schema2) {\n const { type, items, ...otherProps } = schema2;\n return wrapNull(typeMap[\"array\"](unfoldTypeBoxSchema(items), otherProps), isNullable);\n } else if (trimmedType === \"object\" && \"properties\" in schema2) {\n const { type, properties: properties2, ...otherProps } = schema2;\n const { properties: parsedProps, required: required2 } = parseObjectFields(properties2, unfoldTypeBoxSchema);\n for (let key in parsedProps) {\n if (!required2.includes(key)) {\n parsedProps[key] = typeMap[\"optional\"](parsedProps[key]);\n }\n }\n return wrapNull(typeMap[\"object\"](parsedProps, otherProps), isNullable);\n } else if (trimmedType === \"string\" && \"enum\" in schema2) {\n const { type, enum: _enum, ...otherProps } = schema2;\n const arr = _enum.map((str) => typeMap[\"literal\"](str));\n if (isNullable) {\n arr.push(typeMap[\"null\"]);\n }\n return typeMap[\"union\"](arr, otherProps);\n } else {\n const { type, ...otherProps } = schema2;\n return unfoldTypeBoxSchema(schema2.type, otherProps);\n }\n }\n const { properties, required } = parseObjectFields(schema2, unfoldTypeBoxSchema);\n for (let key in properties) {\n if (!required.includes(key)) {\n properties[key] = typeMap[\"optional\"](properties[key]);\n }\n }\n return typeMap[\"object\"](properties);\n};\nconst schema = (obj) => obj;\nexport {\n combineSchema,\n provideTypeBoxMap,\n registerAlias,\n sc,\n schema,\n unfoldSchema,\n unfoldTypeBoxSchema\n};\n//# sourceMappingURL=index.js.map\n","// import defaultImageSrc from '../assets/image-blob.png'\r\n\r\n// export { defaultImageSrc }\r\n\r\nexport const defaultImageSrc = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSIjRjJGMkYyIiByeD0iOCIvPjxwYXRoIGZpbGw9IiM2RDZENkQiIGQ9Ik00MS42IDE5LjZIMjIuNEE0LjQgNC40IDAgMCAwIDE4IDI0djE2YTQuNCA0LjQgMCAwIDAgNC40IDQuNGgxOS4yQTQuNCA0LjQgMCAwIDAgNDYgNDBWMjRhNC40IDQuNCAwIDAgMC00LjQtNC40TTIyLjQgMjJoMTkuMmEyIDIgMCAwIDEgMiAydjEzLjEwNGwtNC4zNTItNC4zNTJhMS4xMiAxLjEyIDAgMCAwLS44OTYtLjM1MiAxLjI4IDEuMjggMCAwIDAtLjg4LjQzMmwtMi4wNjQgMi40OC03LjM2LTcuMzZhMS4xMiAxLjEyIDAgMCAwLS44NDgtLjM1MiAxLjI4IDEuMjggMCAwIDAtLjg4LjQzMmwtNS45MiA3LjA1NlYyNGEyIDIgMCAwIDEgMi0ybS0yIDE4di0xLjE2OGw2Ljg4LTguMjU2IDYuNTkyIDYuNTkyLTQuMDMyIDQuOEgyMi40YTIgMiAwIDAgMS0yLTEuOTY4bTIxLjIgMmgtOC42NGw1LjUyLTYuNjI0IDUuMDQgNS4wNEExLjk3IDEuOTcgMCAwIDEgNDEuNiA0MiIvPjwvc3ZnPg==\"\r\n\r\nexport const getDefaultValue = (schema: any): any => {\r\n if (schema.default) return schema.default\r\n if (schema.nullable) return null\r\n if (schema.type === 'object' && schema.format === 'image') {\r\n return { src: defaultImageSrc, previewSrc: defaultImageSrc }\r\n }\r\n if (schema.type === 'object' && schema.format === 'file') {\r\n return { src: \"\" }\r\n }\r\n if (schema.type === 'number' || schema.type === 'integer') return 0\r\n if (schema.type === 'object') {\r\n if (!schema.properties) return {}\r\n return Object.fromEntries(Object.entries(schema.properties).map(([key, value]) => {\r\n if (!schema.required?.includes(key)) {\r\n return [ key, undefined ]\r\n }\r\n return [ key, getDefaultValue(value)]\r\n }))\r\n }\r\n if (schema.type === \"array\" && schema.format === \"richText\") {\r\n return [{ text: \"\" }]\r\n }\r\n if (schema.type === 'array') return []\r\n if (schema.type === 'boolean') return false\r\n return \"\"\r\n}\r\n\r\n\r\nexport const passDefaultValue = (state: any, schema: any) => {\r\n if (!schema) return state\r\n if (schema.type === 'object' && state) {\r\n for (let key in schema.properties) {\r\n if (!(key in state) && !schema.required.includes(key)) continue\r\n state[key] = passDefaultValue(state[key], schema.properties[key])\r\n }\r\n }\r\n return state ?? getDefaultValue(schema)\r\n}","import { registerAlias as registerAliasOriginal } from \"compact-json-schema\"\r\n\r\nexport const registerAliases = (registerCallback?: typeof registerAliasOriginal) => {\r\n const registerAlias = registerCallback ?? registerAliasOriginal\r\n registerAlias(\"image\", { type: \"object\", format: \"image\", properties: { src: \"string\", previewSrc: \"string?\" } } as any)\r\n registerAlias(\"file\", { type: \"object\", format: \"file\", properties: { src: \"string\" } } as any)\r\n registerAlias(\"color\", { type: \"string\", format: \"color\" } as any)\r\n registerAlias(\"smartLink\", { type: \"object\", format: \"smartLink\", properties: { url: \"string\", title: \"string\", external: \"boolean\" } } as any)\r\n registerAlias(\"multiselect\", { type: \"array\", format: \"multiselect\", items: \"string\" })\r\n registerAlias(\"richText\", {\r\n type: \"array\", \r\n format: \"richText\", \r\n items: { type: \"object\", properties: { text: \"string\", type: \"string?\", styles: \"object?\" } } \r\n } as any)\r\n}"],"names":["registerAlias","registerAliasOriginal"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/style.css CHANGED
@@ -987,6 +987,73 @@
987
987
  .v-file-uploader__delete-button svg {
988
988
  width: 10px;
989
989
  height: 10px;
990
+ }.v-multiselect .v-form-control__outline {
991
+ height: 40px;
992
+ }
993
+ .v-multiselect__activator {
994
+ background: none;
995
+ border: none;
996
+ display: flex;
997
+ align-items: center;
998
+ padding: 0 12px;
999
+ width: 100%;
1000
+ color: var(--text-color);
1001
+ text-align: left;
1002
+ cursor: pointer;
1003
+ outline: none;
1004
+ }
1005
+ .v-multiselect__activator > div {
1006
+ flex: 1 1 auto;
1007
+ }
1008
+ .v-multiselect__activator svg {
1009
+ margin-right: -2px;
1010
+ color: var(--icon-color);
1011
+ width: 12px;
1012
+ pointer-events: none;
1013
+ }
1014
+ .v-multiselect__activator.opened svg {
1015
+ transform: rotate(180deg);
1016
+ }
1017
+ .v-multiselect__placeholder {
1018
+ color: var(--text-secondary-color);
1019
+ }
1020
+ .v-multiselect__actions {
1021
+ position: absolute;
1022
+ right: 28px;
1023
+ bottom: 9px;
1024
+ display: flex;
1025
+ align-items: center;
1026
+ gap: 2px;
1027
+ height: 20px;
1028
+ }
1029
+ .v-multiselect__delete-button svg {
1030
+ width: 10px;
1031
+ height: 10px;
1032
+ }
1033
+ .v-multiselect__menu {
1034
+ display: flex;
1035
+ flex-direction: column;
1036
+ padding: 6px;
1037
+ }
1038
+ .v-multiselect__item {
1039
+ display: flex;
1040
+ align-items: center;
1041
+ gap: 8px;
1042
+ padding: 6px 8px;
1043
+ cursor: pointer;
1044
+ border-radius: 6px;
1045
+ }
1046
+ .v-multiselect__item:hover {
1047
+ background-color: var(--hover-color);
1048
+ }
1049
+ .group-title {
1050
+ padding: 4px 8px 0;
1051
+ font-size: 13px;
1052
+ color: var(--text-secondary-color);
1053
+ }
1054
+ .v-multiselect__divider {
1055
+ border-bottom: 1px solid var(--border-color);
1056
+ margin: 4px 8px;
990
1057
  }.json-editor__object {
991
1058
  display: flex;
992
1059
  flex-direction: column;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mechanica",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "type": "module",