mechanica 1.0.21 → 1.0.23
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/bin/compile.js +1 -0
- package/dist/editor.js +4 -2
- package/dist/editor.js.map +1 -1
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/dist/{schemaAliases-BChQHL5h.js → schemaAliases-t4X-kaIk.js} +3 -104
- package/dist/schemaAliases-t4X-kaIk.js.map +1 -0
- package/dist/style.css +6 -0
- package/package.json +2 -1
- package/dist/schemaAliases-BChQHL5h.js.map +0 -1
package/dist/main.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { unfoldSchema, registerAlias } from "compact-json-schema";
|
|
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
|
+
import { p as passDefaultValue, r as registerAliases } from "./schemaAliases-t4X-kaIk.js";
|
|
4
5
|
const createRouter = (app, content, data) => {
|
|
5
6
|
var _a;
|
|
6
7
|
let baseUrl = ((_a = window.state) == null ? void 0 : _a.baseUrl) ?? "";
|
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 \"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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"}
|
|
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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"}
|
|
@@ -1,103 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
const registerAlias = (key, item) => {
|
|
3
|
-
aliases[key] = item;
|
|
4
|
-
};
|
|
5
|
-
const baseTypes = ["string", "boolean", "number", "integer", "bigint", "object", "array"];
|
|
6
|
-
const isBaseType = (key) => {
|
|
7
|
-
return baseTypes.some((item) => item === key || item + "?" === key || item + "??" === key);
|
|
8
|
-
};
|
|
9
|
-
const trimType = (type) => {
|
|
10
|
-
if (type.endsWith("??"))
|
|
11
|
-
return type.slice(0, -2);
|
|
12
|
-
if (type.endsWith("?"))
|
|
13
|
-
return type.slice(0, -1);
|
|
14
|
-
return type;
|
|
15
|
-
};
|
|
16
|
-
const parseObjectFields = (props, unfoldSchema2) => {
|
|
17
|
-
const required = [];
|
|
18
|
-
const properties = {};
|
|
19
|
-
for (let [key, value] of Object.entries(props)) {
|
|
20
|
-
if (Array.isArray(value)) {
|
|
21
|
-
required.push(key);
|
|
22
|
-
} else if (typeof value === "object") {
|
|
23
|
-
if (typeof value.type !== "string" || !value.type.endsWith("?")) {
|
|
24
|
-
required.push(key);
|
|
25
|
-
}
|
|
26
|
-
} else if (typeof value === "string") {
|
|
27
|
-
if (!value.endsWith("?")) {
|
|
28
|
-
required.push(key);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
properties[key] = unfoldSchema2(value);
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
properties,
|
|
35
|
-
required
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
const unfoldArray$1 = (schema2) => {
|
|
39
|
-
const isEnum = schema2.every((item) => typeof item === "string") && schema2.some((item) => !isBaseType(item));
|
|
40
|
-
if (isEnum) {
|
|
41
|
-
if (schema2.length === 1) {
|
|
42
|
-
return { type: "string", const: schema2[0] };
|
|
43
|
-
} else {
|
|
44
|
-
return { type: "string", enum: schema2 };
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
return {
|
|
48
|
-
oneOf: schema2.map((item) => unfoldSchema(item))
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const unfoldSchema = (schema2) => {
|
|
53
|
-
if (typeof schema2 === "string") {
|
|
54
|
-
const trimmedType = trimType(schema2);
|
|
55
|
-
if (trimmedType in aliases) {
|
|
56
|
-
if (schema2.endsWith("??")) {
|
|
57
|
-
return { ...unfoldSchema(aliases[trimmedType]), nullable: true };
|
|
58
|
-
}
|
|
59
|
-
return unfoldSchema(aliases[trimmedType]);
|
|
60
|
-
}
|
|
61
|
-
if (schema2.endsWith("??")) {
|
|
62
|
-
return { type: trimmedType, nullable: true };
|
|
63
|
-
}
|
|
64
|
-
return { type: trimmedType };
|
|
65
|
-
}
|
|
66
|
-
if (Array.isArray(schema2)) {
|
|
67
|
-
return unfoldArray$1(schema2);
|
|
68
|
-
}
|
|
69
|
-
if (typeof schema2 !== "object" || schema2 === null) {
|
|
70
|
-
throw new Error(`Schema type ${schema2} is not object`);
|
|
71
|
-
}
|
|
72
|
-
if (typeof schema2.type === "string") {
|
|
73
|
-
const { items, properties, type, ...otherProps } = schema2;
|
|
74
|
-
const trimmedType = trimType(type);
|
|
75
|
-
if (trimmedType === "array" && items) {
|
|
76
|
-
return {
|
|
77
|
-
type: "array",
|
|
78
|
-
nullable: type.endsWith("??") ? true : void 0,
|
|
79
|
-
...otherProps,
|
|
80
|
-
items: unfoldSchema(items)
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
if (trimmedType === "object" && properties) {
|
|
84
|
-
return {
|
|
85
|
-
type: "object",
|
|
86
|
-
nullable: type.endsWith("??") ? true : void 0,
|
|
87
|
-
...otherProps,
|
|
88
|
-
...parseObjectFields(properties, unfoldSchema)
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
...unfoldSchema(type),
|
|
93
|
-
...otherProps
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
type: "object",
|
|
98
|
-
...parseObjectFields(schema2, unfoldSchema)
|
|
99
|
-
};
|
|
100
|
-
};
|
|
1
|
+
import { registerAlias } from "compact-json-schema";
|
|
101
2
|
const defaultImageSrc = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSIjRjJGMkYyIiByeD0iOCIvPjxwYXRoIGZpbGw9IiM2RDZENkQiIGQ9Ik00MS42IDE5LjZIMjIuNEE0LjQgNC40IDAgMCAwIDE4IDI0djE2YTQuNCA0LjQgMCAwIDAgNC40IDQuNGgxOS4yQTQuNCA0LjQgMCAwIDAgNDYgNDBWMjRhNC40IDQuNCAwIDAgMC00LjQtNC40TTIyLjQgMjJoMTkuMmEyIDIgMCAwIDEgMiAydjEzLjEwNGwtNC4zNTItNC4zNTJhMS4xMiAxLjEyIDAgMCAwLS44OTYtLjM1MiAxLjI4IDEuMjggMCAwIDAtLjg4LjQzMmwtMi4wNjQgMi40OC03LjM2LTcuMzZhMS4xMiAxLjEyIDAgMCAwLS44NDgtLjM1MiAxLjI4IDEuMjggMCAwIDAtLjg4LjQzMmwtNS45MiA3LjA1NlYyNGEyIDIgMCAwIDEgMi0ybS0yIDE4di0xLjE2OGw2Ljg4LTguMjU2IDYuNTkyIDYuNTkyLTQuMDMyIDQuOEgyMi40YTIgMiAwIDAgMS0yLTEuOTY4bTIxLjIgMmgtOC42NGw1LjUyLTYuNjI0IDUuMDQgNS4wNEExLjk3IDEuOTcgMCAwIDEgNDEuNiA0MiIvPjwvc3ZnPg==";
|
|
102
3
|
const getDefaultValue = (schema) => {
|
|
103
4
|
if (schema.default) return schema.default;
|
|
@@ -150,11 +51,9 @@ const registerAliases = (registerCallback) => {
|
|
|
150
51
|
});
|
|
151
52
|
};
|
|
152
53
|
export {
|
|
153
|
-
registerAlias as a,
|
|
154
54
|
defaultImageSrc as d,
|
|
155
55
|
getDefaultValue as g,
|
|
156
56
|
passDefaultValue as p,
|
|
157
|
-
registerAliases as r
|
|
158
|
-
unfoldSchema as u
|
|
57
|
+
registerAliases as r
|
|
159
58
|
};
|
|
160
|
-
//# sourceMappingURL=schemaAliases-
|
|
59
|
+
//# sourceMappingURL=schemaAliases-t4X-kaIk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaAliases-t4X-kaIk.js","sources":["../../common/utils/passDefaultValue.ts","../../common/utils/schemaAliases.ts"],"sourcesContent":["// 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":";AAIO,MAAM,kBAAkB;AAExB,MAAM,kBAAkB,CAAC,WAAqB;AACnD,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,MAAI,OAAO,SAAU,QAAO;AAC5B,MAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAAS;AACzD,WAAO,EAAE,KAAK,iBAAiB,YAAY,gBAAA;AAAA,EAC7C;AACA,MAAI,OAAO,SAAS,YAAY,OAAO,WAAW,QAAQ;AACxD,WAAO,EAAE,KAAK,GAAA;AAAA,EAChB;AACA,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAW,QAAO;AAClE,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI,CAAC,OAAO,WAAY,QAAO,CAAA;AAC/B,WAAO,OAAO,YAAY,OAAO,QAAQ,OAAO,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;;AAChF,UAAI,GAAC,YAAO,aAAP,mBAAiB,SAAS,OAAM;AACnC,eAAO,CAAE,KAAK,MAAU;AAAA,MAC1B;AACA,aAAO,CAAE,KAAK,gBAAgB,KAAK,CAAC;AAAA,IACtC,CAAC,CAAC;AAAA,EACJ;AACA,MAAI,OAAO,SAAS,WAAW,OAAO,WAAW,YAAY;AAC3D,WAAO,CAAC,EAAE,MAAM,IAAI;AAAA,EACtB;AACA,MAAI,OAAO,SAAS,QAAS,QAAO,CAAA;AACpC,MAAI,OAAO,SAAS,UAAW,QAAO;AACtC,SAAO;AACT;AAGO,MAAM,mBAAmB,CAAC,OAAY,WAAgB;AAC3D,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,SAAS,YAAY,OAAO;AACrC,aAAS,OAAO,OAAO,YAAY;AACjC,UAAI,EAAE,OAAO,UAAU,CAAC,OAAO,SAAS,SAAS,GAAG,EAAG;AACvD,YAAM,GAAG,IAAI,iBAAiB,MAAM,GAAG,GAAG,OAAO,WAAW,GAAG,CAAC;AAAA,IAClE;AAAA,EACF;AACA,SAAO,SAAS,gBAAgB,MAAM;AACxC;ACzCO,MAAM,kBAAkB,CAAC,qBAAoD;AAClF,QAAMA,kBAAgB,oBAAoBC;AAC1CD,kBAAc,SAAS,EAAE,MAAM,UAAU,QAAQ,SAAS,YAAY,EAAE,KAAK,UAAU,YAAY,UAAA,GAAoB;AACvHA,kBAAc,QAAQ,EAAE,MAAM,UAAU,QAAQ,QAAQ,YAAY,EAAE,KAAK,SAAA,EAAS,CAAU;AAC9FA,kBAAc,SAAS,EAAE,MAAM,UAAU,QAAQ,SAAgB;AACjEA,kBAAc,aAAa,EAAE,MAAM,UAAU,QAAQ,aAAa,YAAY,EAAE,KAAK,UAAU,OAAO,UAAU,UAAU,UAAA,GAAoB;AAC9IA,kBAAc,eAAe,EAAE,MAAM,SAAS,QAAQ,eAAe,OAAO,UAAU;AACtFA,kBAAc,YAAY;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,EAAE,MAAM,UAAU,YAAY,EAAE,MAAM,UAAU,MAAM,WAAW,QAAQ,UAAA,EAAU;AAAA,EAAE,CACtF;AACV;"}
|
package/dist/style.css
CHANGED
|
@@ -204,6 +204,7 @@
|
|
|
204
204
|
gap: 8px;
|
|
205
205
|
display: flex;
|
|
206
206
|
z-index: 2;
|
|
207
|
+
flex-shrink: 0;
|
|
207
208
|
}
|
|
208
209
|
.v-tabs__tab {
|
|
209
210
|
background: none;
|
|
@@ -241,6 +242,7 @@
|
|
|
241
242
|
border-radius: 6px;
|
|
242
243
|
}.v-tabs-pages {
|
|
243
244
|
position: relative;
|
|
245
|
+
overflow: hidden;
|
|
244
246
|
}
|
|
245
247
|
.v-tabs-pages.transition-active {
|
|
246
248
|
overflow: hidden;
|
|
@@ -249,6 +251,10 @@
|
|
|
249
251
|
.v-tabs-pages__page {
|
|
250
252
|
inset: 0;
|
|
251
253
|
height: fit-content;
|
|
254
|
+
max-height: 100%;
|
|
255
|
+
box-sizing: border-box;
|
|
256
|
+
overflow-y: auto;
|
|
257
|
+
overflow-x: hidden;
|
|
252
258
|
}
|
|
253
259
|
.v-tabs-pages__page.slide-left-enter-active, .v-tabs-pages__page.slide-left-leave-active, .v-tabs-pages__page.slide-right-enter-active, .v-tabs-pages__page.slide-right-leave-active {
|
|
254
260
|
transition: transform 0.225s cubic-bezier(0.8, 0, 0.2, 1);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mechanica",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.23",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@babel/generator": "^7.26.3",
|
|
14
14
|
"@babel/parser": "^7.26.3",
|
|
15
|
+
"compact-json-schema": "^0.1.0",
|
|
15
16
|
"estree-walker": "^3.0.3"
|
|
16
17
|
},
|
|
17
18
|
"devDependencies": {
|
|
@@ -1 +0,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]}
|