@flowgram-vue/panel-manager-plugin 0.2.0
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/LICENSE +22 -0
- package/dist/index.cjs +757 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +187 -0
- package/dist/index.js +746 -0
- package/dist/index.js.map +1 -0
- package/package.json +58 -0
- package/src/components/panel-layer/css.ts +68 -0
- package/src/components/panel-layer/docked-panel-layer.ts +28 -0
- package/src/components/panel-layer/index.ts +7 -0
- package/src/components/panel-layer/panel-layer.ts +59 -0
- package/src/components/panel-layer/panel.ts +167 -0
- package/src/components/resize-bar/index.ts +109 -0
- package/src/composables/use-global-css.ts +30 -0
- package/src/composables/use-panel-manager.ts +10 -0
- package/src/composables/use-panel.ts +32 -0
- package/src/contexts.ts +10 -0
- package/src/create-panel-manager-plugin.ts +51 -0
- package/src/env.d.ts +10 -0
- package/src/index.ts +20 -0
- package/src/services/index.ts +9 -0
- package/src/services/panel-config.ts +58 -0
- package/src/services/panel-factory.ts +138 -0
- package/src/services/panel-layer.ts +77 -0
- package/src/services/panel-manager.ts +132 -0
- package/src/services/panel-restore.ts +25 -0
- package/src/types.ts +34 -0
- package/src/utils.ts +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/panel-restore.ts","../src/components/resize-bar/index.ts","../src/services/panel-config.ts","../src/utils.ts","../src/services/panel-factory.ts","../src/services/panel-manager.ts","../src/composables/use-global-css.ts","../src/composables/use-panel-manager.ts","../src/contexts.ts","../src/composables/use-panel.ts","../src/components/panel-layer/panel.ts","../src/components/panel-layer/css.ts","../src/components/panel-layer/panel-layer.ts","../src/components/panel-layer/docked-panel-layer.ts","../src/services/panel-layer.ts","../src/create-panel-manager-plugin.ts"],"names":["injectable","defineComponent","ref","onBeforeUnmount","h","nanoid","createStore","inject","PanelManager","Emitter","onMounted","useService","shallowRef","shallow","computed","clsx","provide","PanelLayer","Layer","domUtils","Disposable","PlaygroundVueContainerKey","PlaygroundVueRefKey","Playground","Teleport","PluginContext","PlaygroundContainerFactory","definePluginCreator"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\n\nexport const PanelRestore = Symbol('PanelRestore');\nexport interface PanelRestore {\n store: (k: string, v: any) => void;\n restore: <T>(k: string) => T | undefined;\n}\n\n@injectable()\nexport class PanelRestoreImpl implements PanelRestore {\n map = new Map<string, any>();\n\n store(k: string, v: any) {\n this.map.set(k, v);\n }\n\n restore<T>(k: string): T | undefined {\n return this.map.get(k) as T;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, onBeforeUnmount, ref, type PropType, type VNode } from 'vue';\n\nexport interface ResizeBarProps {\n size: number;\n direction?: 'vertical' | 'horizontal';\n onResize: (w: number) => void;\n}\n\nconst ResizeBarInner = defineComponent({\n name: 'ResizeBar',\n props: {\n size: { type: Number, required: true },\n direction: { type: String as PropType<'vertical' | 'horizontal'>, default: undefined },\n onResize: { type: Function as PropType<(w: number) => void>, required: true },\n },\n setup(props) {\n const currentPoint = ref<number | null>(null);\n const isDragging = ref(false);\n const isHovered = ref(false);\n const isVertical = () => props.direction === 'vertical';\n\n const onMouseMove = (e: MouseEvent) => {\n const delta = currentPoint.value! - (isVertical() ? e.clientX : e.clientY);\n props.onResize(props.size + delta);\n };\n\n const onMouseUp = () => {\n currentPoint.value = null;\n document.body.removeEventListener('mouseup', onMouseUp);\n document.body.removeEventListener('mousemove', onMouseMove);\n isDragging.value = false;\n };\n\n onBeforeUnmount(() => {\n document.body.removeEventListener('mouseup', onMouseUp);\n document.body.removeEventListener('mousemove', onMouseMove);\n });\n\n return () =>\n h(\n 'div',\n {\n onMousedown: (e: MouseEvent) => {\n currentPoint.value = isVertical() ? e.clientX : e.clientY;\n e.stopPropagation();\n e.preventDefault();\n isDragging.value = true;\n document.body.addEventListener('mouseup', onMouseUp);\n document.body.addEventListener('mousemove', onMouseMove);\n },\n onMouseenter: () => {\n isHovered.value = true;\n },\n onMouseleave: () => {\n isHovered.value = false;\n },\n style: {\n position: 'absolute',\n top: '0',\n left: '0',\n zIndex: 999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'auto',\n ...(isVertical()\n ? {\n cursor: 'ew-resize',\n height: '100%',\n marginLeft: '-5px',\n width: '10px',\n }\n : {\n cursor: 'ns-resize',\n width: '100%',\n marginTop: '-5px',\n height: '10px',\n }),\n },\n },\n [\n h('div', {\n style: {\n ...(isVertical()\n ? {\n width: '3px',\n height: '100%',\n }\n : {\n height: '3px',\n width: '100%',\n }),\n backgroundColor:\n isDragging.value || isHovered.value ? 'var(--g-playground-line)' : 'transparent',\n },\n }),\n ]\n );\n },\n});\n\nexport function ResizeBar(props: ResizeBarProps): VNode {\n return h(ResizeBarInner, props);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { VNode } from 'vue';\nimport { PluginContext } from '@flowgram-vue/core';\n\nimport type { PanelFactory, PanelConfig } from '../types';\nimport { ResizeBar } from '../components/resize-bar';\nimport type { PanelLayerProps } from '../components/panel-layer';\n\nexport interface PanelManagerConfig {\n factories: PanelFactory<any>[];\n right: PanelConfig;\n bottom: PanelConfig;\n dockedRight: PanelConfig;\n dockedBottom: PanelConfig;\n /** Resizable, and multi-panel options mutually exclusive */\n autoResize: boolean;\n layerProps: PanelLayerProps;\n resizeBarRender: ({\n size,\n }: {\n size: number;\n direction?: 'vertical' | 'horizontal';\n onResize: (size: number) => void;\n }) => VNode | null;\n getPopupContainer: (ctx: PluginContext) => HTMLElement; // default playground.node.parentElement\n}\n\nexport const PanelManagerConfig = Symbol('PanelManagerConfig');\n\nexport const defineConfig = (config: Partial<PanelManagerConfig>) => {\n const defaultConfig: PanelManagerConfig = {\n right: {\n max: 1,\n },\n bottom: {\n max: 1,\n },\n dockedRight: {\n max: 1,\n },\n dockedBottom: {\n max: 1,\n },\n factories: [],\n autoResize: true,\n layerProps: {},\n resizeBarRender: ResizeBar,\n getPopupContainer: (ctx: PluginContext) => ctx.playground.node.parentNode as HTMLElement,\n };\n return {\n ...defaultConfig,\n ...config,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const merge = <T>(...objs: Partial<T>[]) => {\n const result: any = {};\n\n for (const obj of objs) {\n if (!obj || typeof obj !== 'object') continue;\n\n for (const key of Object.keys(obj)) {\n const value = (obj as any)[key];\n\n if (result[key] === undefined) {\n result[key] = value;\n }\n }\n }\n\n return result as T;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { createStore, StoreApi } from 'zustand/vanilla';\nimport { nanoid } from 'nanoid';\nimport { inject, injectable } from 'inversify';\nimport type { VNode } from 'vue';\n\nimport type { PanelFactory, PanelEntityConfig, Area } from '../types';\nimport { PanelRestore } from './panel-restore';\nimport { PanelManagerConfig } from './panel-config';\nimport { merge } from '../utils';\n\nexport const PanelEntityFactory = Symbol('PanelEntityFactory');\nexport type PanelEntityFactory = (options: {\n factory: PanelEntityFactoryConstant;\n config: PanelEntityConfigConstant;\n}) => PanelEntity;\n\nexport const PanelEntityFactoryConstant = Symbol('PanelEntityFactoryConstant');\nexport type PanelEntityFactoryConstant = PanelFactory<any>;\nexport const PanelEntityConfigConstant = Symbol('PanelEntityConfigConstant');\nexport type PanelEntityConfigConstant = PanelEntityConfig<any> & {\n area: Area;\n};\n\nconst PANEL_SIZE_DEFAULT = 400;\n\nexport interface PanelEntityState {\n size: number;\n fullscreen: boolean;\n visible: boolean;\n}\n\n@injectable()\nexport class PanelEntity {\n @inject(PanelRestore) restore: PanelRestore;\n\n /** 面板工厂 */\n @inject(PanelEntityFactoryConstant) public factory: PanelEntityFactoryConstant;\n\n @inject(PanelEntityConfigConstant) public config: PanelEntityConfigConstant;\n\n @inject(PanelManagerConfig) readonly globalConfig: PanelManagerConfig;\n\n private initialized = false;\n\n /** 实例唯一标识 */\n id: string = nanoid();\n\n /** 渲染缓存 */\n node: VNode | null = null;\n\n store: StoreApi<PanelEntityState>;\n\n get area() {\n return this.config.area;\n }\n\n get mode() {\n return this.config.area.startsWith('docked') ? 'docked' : 'floating';\n }\n\n get key() {\n return this.factory.key;\n }\n\n get renderer() {\n if (!this.node) {\n this.node = this.factory.render(this.config.props);\n }\n return this.node;\n }\n\n get fullscreen() {\n return this.store.getState().fullscreen;\n }\n\n set fullscreen(next: boolean) {\n this.store.setState({ fullscreen: next });\n }\n\n get resizable() {\n if (this.fullscreen) {\n return false;\n }\n return this.factory.resize !== undefined ? this.factory.resize : this.globalConfig.autoResize;\n }\n\n get keepDOM() {\n return this.factory.keepDOM;\n }\n\n get visible() {\n return this.store.getState().visible;\n }\n\n set visible(next: boolean) {\n this.store.setState({ visible: next });\n }\n\n get layer() {\n return document.querySelector(\n this.mode ? '.gedit-flow-panel-layer-wrap-docked' : '.gedit-flow-panel-layer-wrap-floating'\n );\n }\n\n init() {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n const cache = this.restore.restore<PanelEntityState>(this.key);\n\n const initialState = merge<PanelEntityState>(\n {\n size: this.config.defaultSize,\n fullscreen: this.config.fullscreen,\n },\n cache ? cache : {},\n {\n size: this.factory.defaultSize || PANEL_SIZE_DEFAULT,\n fullscreen: this.factory.fullscreen || false,\n ...(this.factory.keepDOM ? { visible: true } : {}),\n }\n );\n\n this.store = createStore<PanelEntityState>(() => initialState);\n }\n\n mergeState() {}\n\n dispose() {\n this.restore.store(this.key, this.store.getState());\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable, inject } from 'inversify';\nimport { Emitter } from '@flowgram-vue/utils';\n\nimport { PanelManagerConfig } from './panel-config';\nimport type { Area, PanelEntityConfig, PanelFactory } from '../types';\nimport { PanelEntity, PanelEntityFactory } from './panel-factory';\n\n@injectable()\nexport class PanelManager {\n @inject(PanelManagerConfig) readonly config: PanelManagerConfig;\n\n @inject(PanelEntityFactory) readonly createPanel: PanelEntityFactory;\n\n readonly panelRegistry = new Map<string, PanelFactory<any>>();\n\n private panels = new Map<string, PanelEntity>();\n\n private onPanelsChangeEvent = new Emitter<void>();\n\n public onPanelsChange = this.onPanelsChangeEvent.event;\n\n init() {\n this.config.factories.forEach((factory) => this.register(factory));\n }\n\n /** registry panel factory */\n register<T extends any>(factory: PanelFactory<T>) {\n this.panelRegistry.set(factory.key, factory);\n }\n\n /** open panel */\n public open(key: string, area: Area = 'right', options?: PanelEntityConfig) {\n const factory = this.panelRegistry.get(key);\n if (!factory) {\n return;\n }\n\n const sameKeyPanels = this.getPanels(area).filter((p) => p.key === key);\n\n if (factory.keepDOM && sameKeyPanels.length) {\n const [panel] = sameKeyPanels;\n // move to last\n this.panels.delete(panel.id);\n this.panels.set(panel.id, panel);\n panel.visible = true;\n } else {\n if (!factory.allowDuplicates && sameKeyPanels.length) {\n sameKeyPanels.forEach((p) => this.remove(p.id));\n }\n const panel = this.createPanel({\n factory,\n config: {\n area,\n ...options,\n },\n });\n\n this.panels.set(panel.id, panel);\n }\n\n this.trim(area);\n this.onPanelsChangeEvent.fire();\n }\n\n /** close panel */\n public close(key?: string) {\n const panels = this.getPanels();\n const closedPanels = key ? panels.filter((p) => p.key === key) : panels;\n closedPanels.forEach((panel) => {\n this.remove(panel.id);\n });\n this.onPanelsChangeEvent.fire();\n }\n\n private trim(area: Area) {\n /** 1. general panel; 2. keepDOM visible panel */\n const panels = this.getPanels(area).filter((p) => !p.keepDOM || p.visible);\n const areaConfig = this.getAreaConfig(area);\n while (panels.length > areaConfig.max) {\n const removed = panels.shift();\n if (removed) {\n this.remove(removed.id);\n }\n }\n }\n\n private remove(id: string) {\n const panel = this.panels.get(id);\n if (!panel) {\n return;\n }\n if (panel.keepDOM) {\n panel.visible = false;\n } else {\n panel.dispose();\n this.panels.delete(id);\n }\n }\n\n getPanels(area?: Area) {\n const panels: PanelEntity[] = [];\n this.panels.forEach((panel) => {\n if (!area || panel.area === area) {\n panels.push(panel);\n }\n });\n return panels;\n }\n\n getAreaConfig(area: Area) {\n switch (area) {\n case 'docked-bottom':\n return this.config.dockedBottom;\n case 'docked-right':\n return this.config.dockedRight;\n case 'bottom':\n return this.config.bottom;\n case 'right':\n default:\n return this.config.right;\n }\n }\n\n dispose() {\n this.onPanelsChangeEvent.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount, onMounted } from 'vue';\n\ninterface UseGlobalCSSOptions {\n cssText: string;\n id: string;\n cleanup?: boolean;\n}\n\nexport const useGlobalCSS = ({ cssText, id, cleanup }: UseGlobalCSSOptions) => {\n onMounted(() => {\n if (typeof document === 'undefined') return;\n\n if (document.getElementById(id)) return;\n\n const style = document.createElement('style');\n style.id = id;\n style.textContent = cssText;\n document.head.appendChild(style);\n });\n\n onBeforeUnmount(() => {\n const existing = document.getElementById(id);\n if (existing && cleanup) existing.remove();\n });\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useService } from '@flowgram-vue/core';\n\nimport { PanelManager } from '../services/panel-manager';\n\nexport const usePanelManager = () => useService<PanelManager>(PanelManager);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { InjectionKey } from 'vue';\n\nimport type { PanelEntity } from './services/panel-factory';\n\nexport const PanelContextKey: InjectionKey<PanelEntity> = Symbol('PanelContext');\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, onBeforeUnmount, shallowRef, type ShallowRef } from 'vue';\nimport type { StoreApi } from 'zustand';\nimport { shallow } from 'zustand/shallow';\n\nimport { PanelEntity, PanelEntityState } from '../services/panel-factory';\nimport { PanelContextKey } from '../contexts';\n\nexport const usePanel = (): PanelEntity => {\n const panel = inject(PanelContextKey);\n if (!panel) {\n throw new Error('usePanel must be used within a PanelContext provider');\n }\n return panel;\n};\n\nexport const usePanelStore = <T>(selector: (s: PanelEntityState) => T): ShallowRef<T> => {\n const panel = usePanel();\n const selected = shallowRef(selector(panel.store.getState()));\n const unsubscribe = (panel.store as StoreApi<PanelEntityState>).subscribe((state) => {\n const next = selector(state);\n if (!shallow(selected.value, next)) {\n selected.value = next;\n }\n });\n onBeforeUnmount(unsubscribe);\n return selected;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n type PropType,\n} from 'vue';\nimport clsx from 'clsx';\n\nimport type { Area } from '../../types';\nimport type { PanelEntity } from '../../services/panel-factory';\nimport { usePanelManager } from '../../composables/use-panel-manager';\nimport { usePanelStore } from '../../composables/use-panel';\nimport { PanelContextKey } from '../../contexts';\n\nconst PanelItem = defineComponent({\n name: 'PanelItem',\n props: {\n panel: { type: Object as PropType<PanelEntity>, required: true },\n hidden: { type: Boolean, default: false },\n },\n setup(props) {\n const panelManager = usePanelManager();\n const elRef = ref<HTMLDivElement | null>(null);\n const isHorizontal = computed(() => ['right', 'docked-right'].includes(props.panel.area));\n const storeState = usePanelStore((s) => ({\n size: s.size,\n fullscreen: s.fullscreen,\n }));\n const layerSize = ref(storeState.value.size);\n\n const currentSize = computed(() =>\n storeState.value.fullscreen ? layerSize.value : storeState.value.size\n );\n const sizeStyle = computed(() =>\n isHorizontal.value ? { width: `${currentSize.value}px` } : { height: `${currentSize.value}px` }\n );\n\n const handleResize = (next: number) => {\n let nextSize = next;\n if (typeof props.panel.factory.maxSize === 'number' && nextSize > props.panel.factory.maxSize) {\n nextSize = props.panel.factory.maxSize;\n } else if (\n typeof props.panel.factory.minSize === 'number' &&\n nextSize < props.panel.factory.minSize\n ) {\n nextSize = props.panel.factory.minSize;\n }\n props.panel.store.setState({ size: nextSize });\n };\n\n onMounted(() => {\n if (elRef.value && !storeState.value.fullscreen) {\n const { width, height } = elRef.value.getBoundingClientRect();\n const realSize = isHorizontal.value ? width : height;\n props.panel.store.setState({ size: realSize });\n }\n });\n\n let observer: ResizeObserver | undefined;\n const syncObserver = () => {\n observer?.disconnect();\n observer = undefined;\n if (!storeState.value.fullscreen) {\n return;\n }\n const layer = props.panel.layer;\n if (!layer) {\n return;\n }\n observer = new ResizeObserver(([entry]) => {\n const { width, height } = entry.contentRect;\n layerSize.value = isHorizontal.value ? width : height;\n });\n observer.observe(layer);\n };\n\n onMounted(syncObserver);\n onBeforeUnmount(() => observer?.disconnect());\n\n return () => {\n void storeState.value.fullscreen;\n syncObserver();\n const resizeBar = props.panel.resizable\n ? panelManager.config.resizeBarRender({\n size: storeState.value.size,\n direction: isHorizontal.value ? 'vertical' : 'horizontal',\n onResize: handleResize,\n })\n : null;\n return h(\n 'div',\n {\n class: clsx(\n 'gedit-flow-panel-wrap',\n isHorizontal.value ? 'panel-horizontal' : 'panel-vertical'\n ),\n ref: elRef,\n style: {\n display: props.hidden ? 'none' : 'block',\n ...props.panel.factory.style,\n ...props.panel.config.style,\n ...sizeStyle.value,\n },\n },\n [resizeBar, props.panel.renderer]\n );\n };\n },\n});\n\nconst PanelContextWrap = defineComponent({\n name: 'PanelContextWrap',\n props: {\n panel: { type: Object as PropType<PanelEntity>, required: true },\n hidden: { type: Boolean, default: false },\n },\n setup(props) {\n provide(PanelContextKey, props.panel);\n return () => h(PanelItem as any, { panel: props.panel, hidden: props.hidden });\n },\n});\n\nexport const PanelArea = defineComponent({\n name: 'PanelArea',\n props: {\n area: { type: String as PropType<Area>, required: true },\n },\n setup(props) {\n const panelManager = usePanelManager();\n const panels = ref(panelManager.getPanels(props.area));\n let pending: ReturnType<typeof setTimeout> | undefined;\n\n const dispose = panelManager.onPanelsChange(() => {\n if (pending) {\n clearTimeout(pending);\n }\n pending = setTimeout(() => {\n panels.value = panelManager.getPanels(props.area);\n }, 0);\n });\n\n onBeforeUnmount(() => {\n if (pending) {\n clearTimeout(pending);\n }\n dispose.dispose();\n });\n\n return () =>\n panels.value.map((panel) =>\n h(PanelContextWrap as any, {\n key: panel.id,\n panel,\n hidden: !!(panel.keepDOM && !panel.visible),\n })\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const globalCSS = `\n .gedit-flow-panel-layer-wrap * {\n box-sizing: border-box;\n }\n .gedit-flow-panel-layer-wrap {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n .gedit-flow-panel-layer-wrap-docked {\n\n }\n .gedit-flow-panel-layer-wrap-floating {\n pointer-events: none;\n }\n\n .gedit-flow-panel-left-area {\n width: 100%;\n min-width: 0;\n flex-grow: 0;\n flex-shrink: 1;\n display: flex;\n flex-direction: column;\n }\n .gedit-flow-panel-right-area {\n height: 100%;\n flex-grow: 1;\n flex-shrink: 0;\n min-width: 0;\n display: flex;\n max-width: 100%;\n }\n\n .gedit-flow-panel-main-area {\n position: relative;\n overflow: hidden;\n flex-grow: 0;\n flex-shrink: 1;\n width: 100%;\n height: 100%;\n }\n .gedit-flow-panel-bottom-area {\n flex-grow: 1;\n flex-shrink: 0;\n width: 100%;\n min-height: 0;\n }\n .gedit-flow-panel-wrap {\n pointer-events: auto;\n overflow: auto;\n position: relative;\n }\n .gedit-flow-panel-wrap.panel-horizontal {\n height: 100%;\n }\n .gedit-flow-panel-wrap.panel-vertical {\n width: 100%;\n }\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, type CSSProperties, type PropType, type VNode } from 'vue';\nimport clsx from 'clsx';\n\nimport { useGlobalCSS } from '../../composables/use-global-css';\nimport { PanelArea } from './panel';\nimport { globalCSS } from './css';\n\nexport interface PanelLayerProps {\n /** 模式:悬浮|挤压 */\n mode?: 'floating' | 'docked';\n className?: string;\n style?: CSSProperties;\n children?: VNode | VNode[];\n}\n\nexport const PanelLayer = defineComponent({\n name: 'PanelLayer',\n props: {\n mode: { type: String as PropType<'floating' | 'docked'>, default: 'floating' },\n className: { type: String, default: undefined },\n style: { type: Object as PropType<CSSProperties>, default: undefined },\n },\n setup(props, { slots }) {\n useGlobalCSS({\n cssText: globalCSS,\n id: 'flow-panel-layer-css',\n });\n\n return () =>\n h(\n 'div',\n {\n class: clsx(\n 'gedit-flow-panel-layer-wrap',\n props.mode === 'docked' && 'gedit-flow-panel-layer-wrap-docked',\n props.mode === 'floating' && 'gedit-flow-panel-layer-wrap-floating',\n props.className\n ),\n style: props.style,\n },\n [\n h('div', { class: 'gedit-flow-panel-left-area' }, [\n h('div', { class: 'gedit-flow-panel-main-area' }, slots.default?.()),\n h('div', { class: 'gedit-flow-panel-bottom-area' }, [\n h(PanelArea, { area: props.mode === 'docked' ? 'docked-bottom' : 'bottom' }),\n ]),\n ]),\n h('div', { class: 'gedit-flow-panel-right-area' }, [\n h(PanelArea, { area: props.mode === 'docked' ? 'docked-right' : 'right' }),\n ]),\n ]\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, type CSSProperties } from 'vue';\n\nimport { PanelLayer, type PanelLayerProps } from './panel-layer';\n\nexport type DockedPanelLayerProps = Omit<PanelLayerProps, 'mode'>;\n\nexport const DockedPanelLayer = defineComponent({\n name: 'DockedPanelLayer',\n setup(_props: DockedPanelLayerProps, { attrs, slots }) {\n return () =>\n h(\n PanelLayer,\n {\n mode: 'docked',\n className: attrs.className as string | undefined,\n style: attrs.style as CSSProperties | undefined,\n },\n {\n default: () => slots.default?.(),\n }\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, provide, Teleport, type VNode } from 'vue';\nimport { injectable, inject } from 'inversify';\nimport { domUtils, Disposable } from '@flowgram-vue/utils';\nimport {\n Layer,\n Playground,\n PlaygroundContainerFactory,\n PlaygroundVueContainerKey,\n PlaygroundVueRefKey,\n PluginContext,\n} from '@flowgram-vue/core';\n\nimport { PanelLayer as PanelLayerComp } from '../components/panel-layer';\nimport { PanelManagerConfig } from './panel-config';\n\n@injectable()\nexport class PanelLayer extends Layer {\n @inject(PanelManagerConfig) private readonly panelConfig: PanelManagerConfig;\n\n @inject(PluginContext) private readonly pluginContext: PluginContext;\n\n @inject(PlaygroundContainerFactory)\n private readonly playgroundContainer: PlaygroundContainerFactory;\n\n readonly panelRoot = domUtils.createDivWithClass('gedit-flow-panel-layer');\n\n layout: VNode | null = null;\n\n onReady(): void {\n this.panelConfig.getPopupContainer(this.pluginContext).appendChild(this.panelRoot);\n this.toDispose.push(\n Disposable.create(() => {\n this.panelRoot.remove();\n })\n );\n const commonStyle = {\n pointerEvents: 'none',\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n zIndex: 100,\n };\n domUtils.setStyle(this.panelRoot, commonStyle);\n }\n\n render(): VNode {\n if (!this.layout) {\n const { children, ...layoutProps } = this.panelConfig.layerProps;\n const playgroundContainer = this.playgroundContainer;\n const panelRoot = this.panelRoot;\n const LayerProvide = defineComponent({\n name: 'PanelLayerProvide',\n setup() {\n provide(PlaygroundVueContainerKey, playgroundContainer as any);\n try {\n provide(PlaygroundVueRefKey, playgroundContainer.get(Playground));\n } catch {\n // ignore\n }\n return () =>\n h(Teleport, { to: panelRoot }, [\n h(PanelLayerComp, layoutProps as any, () => children as any),\n ]);\n },\n });\n this.layout = h(LayerProvide);\n }\n return this.layout;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { definePluginCreator } from '@flowgram-vue/core';\n\nimport {\n PanelEntityFactory,\n PanelEntity,\n PanelEntityFactoryConstant,\n PanelEntityConfigConstant,\n} from './services/panel-factory';\nimport { defineConfig } from './services/panel-config';\nimport {\n PanelManager,\n PanelManagerConfig,\n PanelLayer,\n PanelRestore,\n PanelRestoreImpl,\n} from './services';\n\nexport const createPanelManagerPlugin = definePluginCreator<Partial<PanelManagerConfig>>({\n onBind: ({ bind }, opt) => {\n bind(PanelManager).to(PanelManager).inSingletonScope();\n bind(PanelRestore).to(PanelRestoreImpl).inSingletonScope();\n bind(PanelManagerConfig).toConstantValue(defineConfig(opt));\n bind(PanelEntityFactory).toFactory(\n (context) =>\n ({\n factory,\n config,\n }: {\n factory: PanelEntityFactoryConstant;\n config: PanelEntityConfigConstant;\n }) => {\n const container = context.container.createChild();\n container.bind(PanelEntityFactoryConstant).toConstantValue(factory);\n container.bind(PanelEntityConfigConstant).toConstantValue(config);\n const panel = container.resolve(PanelEntity);\n panel.init();\n return panel;\n }\n );\n },\n onInit(ctx) {\n ctx.playground.registerLayer(PanelLayer);\n const panelManager = ctx.container.get<PanelManager>(PanelManager);\n panelManager.init();\n },\n});\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import * as _flowgram_vue_core from '@flowgram-vue/core';
|
|
2
|
+
import { PluginContext } from '@flowgram-vue/core';
|
|
3
|
+
import * as vue from 'vue';
|
|
4
|
+
import { CSSProperties, VNode } from 'vue';
|
|
5
|
+
import * as _flowgram_vue_utils from '@flowgram-vue/utils';
|
|
6
|
+
import { StoreApi } from 'zustand/vanilla';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
10
|
+
* SPDX-License-Identifier: MIT
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
type Area = 'right' | 'bottom' | 'docked-right' | 'docked-bottom';
|
|
14
|
+
interface PanelConfig {
|
|
15
|
+
/** max panel */
|
|
16
|
+
max: number;
|
|
17
|
+
}
|
|
18
|
+
interface PanelFactory<T extends any> {
|
|
19
|
+
key: string;
|
|
20
|
+
defaultSize: number;
|
|
21
|
+
fullscreen?: boolean;
|
|
22
|
+
maxSize?: number;
|
|
23
|
+
minSize?: number;
|
|
24
|
+
style?: CSSProperties;
|
|
25
|
+
/** Allows multiple panels with the same key to be rendered simultaneously */
|
|
26
|
+
allowDuplicates?: boolean;
|
|
27
|
+
resize?: boolean;
|
|
28
|
+
keepDOM?: boolean;
|
|
29
|
+
render: (props: T) => VNode | null;
|
|
30
|
+
}
|
|
31
|
+
interface PanelEntityConfig<T extends any = any> {
|
|
32
|
+
defaultSize?: number;
|
|
33
|
+
fullscreen?: boolean;
|
|
34
|
+
style?: CSSProperties;
|
|
35
|
+
props?: T;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface PanelLayerProps {
|
|
39
|
+
/** 模式:悬浮|挤压 */
|
|
40
|
+
mode?: 'floating' | 'docked';
|
|
41
|
+
className?: string;
|
|
42
|
+
style?: CSSProperties;
|
|
43
|
+
children?: VNode | VNode[];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type DockedPanelLayerProps = Omit<PanelLayerProps, 'mode'>;
|
|
47
|
+
declare const DockedPanelLayer: vue.DefineComponent<{
|
|
48
|
+
style?: CSSProperties | undefined;
|
|
49
|
+
className?: string | undefined;
|
|
50
|
+
children?: (vue.VNode | vue.VNode[]) | undefined;
|
|
51
|
+
}, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
52
|
+
[key: string]: any;
|
|
53
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<{
|
|
54
|
+
style?: CSSProperties | undefined;
|
|
55
|
+
className?: string | undefined;
|
|
56
|
+
children?: (vue.VNode | vue.VNode[]) | undefined;
|
|
57
|
+
}> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
61
|
+
* SPDX-License-Identifier: MIT
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
interface PanelManagerConfig {
|
|
65
|
+
factories: PanelFactory<any>[];
|
|
66
|
+
right: PanelConfig;
|
|
67
|
+
bottom: PanelConfig;
|
|
68
|
+
dockedRight: PanelConfig;
|
|
69
|
+
dockedBottom: PanelConfig;
|
|
70
|
+
/** Resizable, and multi-panel options mutually exclusive */
|
|
71
|
+
autoResize: boolean;
|
|
72
|
+
layerProps: PanelLayerProps;
|
|
73
|
+
resizeBarRender: ({ size, }: {
|
|
74
|
+
size: number;
|
|
75
|
+
direction?: 'vertical' | 'horizontal';
|
|
76
|
+
onResize: (size: number) => void;
|
|
77
|
+
}) => VNode | null;
|
|
78
|
+
getPopupContainer: (ctx: PluginContext) => HTMLElement;
|
|
79
|
+
}
|
|
80
|
+
declare const PanelManagerConfig: unique symbol;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
84
|
+
* SPDX-License-Identifier: MIT
|
|
85
|
+
*/
|
|
86
|
+
declare const PanelRestore: unique symbol;
|
|
87
|
+
interface PanelRestore {
|
|
88
|
+
store: (k: string, v: any) => void;
|
|
89
|
+
restore: <T>(k: string) => T | undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
declare const PanelEntityFactory: unique symbol;
|
|
93
|
+
type PanelEntityFactory = (options: {
|
|
94
|
+
factory: PanelEntityFactoryConstant;
|
|
95
|
+
config: PanelEntityConfigConstant;
|
|
96
|
+
}) => PanelEntity;
|
|
97
|
+
declare const PanelEntityFactoryConstant: unique symbol;
|
|
98
|
+
type PanelEntityFactoryConstant = PanelFactory<any>;
|
|
99
|
+
declare const PanelEntityConfigConstant: unique symbol;
|
|
100
|
+
type PanelEntityConfigConstant = PanelEntityConfig<any> & {
|
|
101
|
+
area: Area;
|
|
102
|
+
};
|
|
103
|
+
interface PanelEntityState {
|
|
104
|
+
size: number;
|
|
105
|
+
fullscreen: boolean;
|
|
106
|
+
visible: boolean;
|
|
107
|
+
}
|
|
108
|
+
declare class PanelEntity {
|
|
109
|
+
restore: PanelRestore;
|
|
110
|
+
/** 面板工厂 */
|
|
111
|
+
factory: PanelEntityFactoryConstant;
|
|
112
|
+
config: PanelEntityConfigConstant;
|
|
113
|
+
readonly globalConfig: PanelManagerConfig;
|
|
114
|
+
private initialized;
|
|
115
|
+
/** 实例唯一标识 */
|
|
116
|
+
id: string;
|
|
117
|
+
/** 渲染缓存 */
|
|
118
|
+
node: VNode | null;
|
|
119
|
+
store: StoreApi<PanelEntityState>;
|
|
120
|
+
get area(): Area;
|
|
121
|
+
get mode(): "docked" | "floating";
|
|
122
|
+
get key(): string;
|
|
123
|
+
get renderer(): VNode<vue.RendererNode, vue.RendererElement, {
|
|
124
|
+
[key: string]: any;
|
|
125
|
+
}> | null;
|
|
126
|
+
get fullscreen(): boolean;
|
|
127
|
+
set fullscreen(next: boolean);
|
|
128
|
+
get resizable(): boolean;
|
|
129
|
+
get keepDOM(): boolean | undefined;
|
|
130
|
+
get visible(): boolean;
|
|
131
|
+
set visible(next: boolean);
|
|
132
|
+
get layer(): Element | null;
|
|
133
|
+
init(): void;
|
|
134
|
+
mergeState(): void;
|
|
135
|
+
dispose(): void;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
declare class PanelManager {
|
|
139
|
+
readonly config: PanelManagerConfig;
|
|
140
|
+
readonly createPanel: PanelEntityFactory;
|
|
141
|
+
readonly panelRegistry: Map<string, PanelFactory<any>>;
|
|
142
|
+
private panels;
|
|
143
|
+
private onPanelsChangeEvent;
|
|
144
|
+
onPanelsChange: _flowgram_vue_utils.Event<void>;
|
|
145
|
+
init(): void;
|
|
146
|
+
/** registry panel factory */
|
|
147
|
+
register<T extends any>(factory: PanelFactory<T>): void;
|
|
148
|
+
/** open panel */
|
|
149
|
+
open(key: string, area?: Area, options?: PanelEntityConfig): void;
|
|
150
|
+
/** close panel */
|
|
151
|
+
close(key?: string): void;
|
|
152
|
+
private trim;
|
|
153
|
+
private remove;
|
|
154
|
+
getPanels(area?: Area): PanelEntity[];
|
|
155
|
+
getAreaConfig(area: Area): PanelConfig;
|
|
156
|
+
dispose(): void;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
declare const createPanelManagerPlugin: _flowgram_vue_core.PluginCreator<Partial<PanelManagerConfig>>;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
163
|
+
* SPDX-License-Identifier: MIT
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
declare const usePanelManager: () => PanelManager;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
170
|
+
* SPDX-License-Identifier: MIT
|
|
171
|
+
*/
|
|
172
|
+
|
|
173
|
+
declare const usePanel: () => PanelEntity;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
177
|
+
* SPDX-License-Identifier: MIT
|
|
178
|
+
*/
|
|
179
|
+
|
|
180
|
+
interface ResizeBarProps {
|
|
181
|
+
size: number;
|
|
182
|
+
direction?: 'vertical' | 'horizontal';
|
|
183
|
+
onResize: (w: number) => void;
|
|
184
|
+
}
|
|
185
|
+
declare function ResizeBar(props: ResizeBarProps): VNode;
|
|
186
|
+
|
|
187
|
+
export { type Area, DockedPanelLayer, type DockedPanelLayerProps, type PanelFactory, PanelManager, PanelManagerConfig, PanelRestore, ResizeBar, createPanelManagerPlugin, usePanel, usePanelManager };
|