@composy/layout-vue 0.0.1

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.
Files changed (109) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +21 -0
  3. package/README.md +75 -0
  4. package/dist/index.css +2383 -0
  5. package/dist/index.js +2665 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.min.css +1 -0
  8. package/dist/index.min.js +1 -0
  9. package/es/components/LGrid.d.ts +3 -0
  10. package/es/components/LGrid.d.ts.map +1 -0
  11. package/es/components/LGrid.js +91 -0
  12. package/es/components/LGrid.js.map +1 -0
  13. package/es/components/LGridItem.d.ts +52 -0
  14. package/es/components/LGridItem.d.ts.map +1 -0
  15. package/es/components/LGridItem.js +52 -0
  16. package/es/components/LGridItem.js.map +1 -0
  17. package/es/components/LLayoutEditor.d.ts +49 -0
  18. package/es/components/LLayoutEditor.d.ts.map +1 -0
  19. package/es/components/LLayoutEditor.js +81 -0
  20. package/es/components/LLayoutEditor.js.map +1 -0
  21. package/es/components/LLayoutWorkspace.js +17 -0
  22. package/es/components/LLayoutWorkspace.js.map +1 -0
  23. package/es/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js +2217 -0
  24. package/es/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js.map +1 -0
  25. package/es/components/LMaterialDragSource.d.ts +55 -0
  26. package/es/components/LMaterialDragSource.d.ts.map +1 -0
  27. package/es/components/LMaterialDragSource.js +92 -0
  28. package/es/components/LMaterialDragSource.js.map +1 -0
  29. package/es/components/LMaterialRenderer.d.ts +63 -0
  30. package/es/components/LMaterialRenderer.d.ts.map +1 -0
  31. package/es/components/LMaterialRenderer.js +48 -0
  32. package/es/components/LMaterialRenderer.js.map +1 -0
  33. package/es/components/LMetricCard.d.ts +29 -0
  34. package/es/components/LMetricCard.d.ts.map +1 -0
  35. package/es/components/LMetricCard.js +39 -0
  36. package/es/components/LMetricCard.js.map +1 -0
  37. package/es/components/LTrendCard.d.ts +17 -0
  38. package/es/components/LTrendCard.d.ts.map +1 -0
  39. package/es/components/LTrendCard.js +36 -0
  40. package/es/components/LTrendCard.js.map +1 -0
  41. package/es/components/index.d.ts +10 -0
  42. package/es/components/index.d.ts.map +1 -0
  43. package/es/components/index.js +19 -0
  44. package/es/components/material-renderer.d.ts +26 -0
  45. package/es/components/material-renderer.d.ts.map +1 -0
  46. package/es/components/material-renderer.js +96 -0
  47. package/es/components/material-renderer.js.map +1 -0
  48. package/es/composables/index.d.ts +2 -0
  49. package/es/composables/index.d.ts.map +1 -0
  50. package/es/composables/index.js +12 -0
  51. package/es/composables/useLayoutEditor.d.ts +3 -0
  52. package/es/composables/useLayoutEditor.d.ts.map +1 -0
  53. package/es/composables/useLayoutEditor.js +22 -0
  54. package/es/composables/useLayoutEditor.js.map +1 -0
  55. package/es/index.d.ts +7 -0
  56. package/es/index.d.ts.map +1 -0
  57. package/es/index.js +22 -0
  58. package/es/style/css.js +1 -0
  59. package/es/style/index.js +1 -0
  60. package/es/style/index.less +1 -0
  61. package/es/style/workspace.css +2370 -0
  62. package/es/types.d.ts +26 -0
  63. package/es/types.d.ts.map +1 -0
  64. package/es/types.js +10 -0
  65. package/lib/components/LGrid.cjs +92 -0
  66. package/lib/components/LGrid.cjs.map +1 -0
  67. package/lib/components/LGrid.d.ts +3 -0
  68. package/lib/components/LGridItem.cjs +53 -0
  69. package/lib/components/LGridItem.cjs.map +1 -0
  70. package/lib/components/LGridItem.d.ts +52 -0
  71. package/lib/components/LLayoutEditor.cjs +82 -0
  72. package/lib/components/LLayoutEditor.cjs.map +1 -0
  73. package/lib/components/LLayoutEditor.d.ts +49 -0
  74. package/lib/components/LLayoutWorkspace.cjs +21 -0
  75. package/lib/components/LLayoutWorkspace.cjs.map +1 -0
  76. package/lib/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs +2217 -0
  77. package/lib/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  78. package/lib/components/LMaterialDragSource.cjs +93 -0
  79. package/lib/components/LMaterialDragSource.cjs.map +1 -0
  80. package/lib/components/LMaterialDragSource.d.ts +55 -0
  81. package/lib/components/LMaterialRenderer.cjs +49 -0
  82. package/lib/components/LMaterialRenderer.cjs.map +1 -0
  83. package/lib/components/LMaterialRenderer.d.ts +63 -0
  84. package/lib/components/LMetricCard.cjs +40 -0
  85. package/lib/components/LMetricCard.cjs.map +1 -0
  86. package/lib/components/LMetricCard.d.ts +29 -0
  87. package/lib/components/LTrendCard.cjs +37 -0
  88. package/lib/components/LTrendCard.cjs.map +1 -0
  89. package/lib/components/LTrendCard.d.ts +17 -0
  90. package/lib/components/index.cjs +27 -0
  91. package/lib/components/index.d.ts +10 -0
  92. package/lib/components/material-renderer.cjs +99 -0
  93. package/lib/components/material-renderer.cjs.map +1 -0
  94. package/lib/components/material-renderer.d.ts +26 -0
  95. package/lib/composables/index.cjs +13 -0
  96. package/lib/composables/index.d.ts +2 -0
  97. package/lib/composables/useLayoutEditor.cjs +23 -0
  98. package/lib/composables/useLayoutEditor.cjs.map +1 -0
  99. package/lib/composables/useLayoutEditor.d.ts +3 -0
  100. package/lib/index.cjs +29 -0
  101. package/lib/index.d.ts +7 -0
  102. package/lib/package.json +3 -0
  103. package/lib/style/css.js +1 -0
  104. package/lib/style/index.css +2 -0
  105. package/lib/style/index.js +1 -0
  106. package/lib/style/workspace.css +2378 -0
  107. package/lib/types.cjs +11 -0
  108. package/lib/types.d.ts +26 -0
  109. package/package.json +117 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs","names":[],"sources":["../../src/components/LLayoutWorkspace.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { GridStack } from 'gridstack'\nimport 'gridstack/dist/gridstack.min.css'\nimport '../style/workspace.css'\nimport { createElement as createLucideElement, icons } from 'lucide'\nimport {\n ChartNoAxesColumnIncreasing,\n ChartSpline,\n ChevronDown,\n Copy,\n CopyCheck,\n Code2,\n Download,\n Eye,\n Filter,\n Hand,\n Grid2X2,\n Lock,\n Maximize2,\n Moon,\n Monitor,\n Move,\n MousePointer2,\n PanelsTopLeft,\n Pencil,\n Plus,\n ArrowLeftRight,\n ArrowUpDown,\n Redo2,\n RotateCcw,\n Scan,\n Search,\n Smartphone,\n Sun,\n Tablet,\n Trash2,\n Undo2,\n Unlock,\n X,\n ZoomIn,\n ZoomOut,\n} from 'lucide-vue-next'\nimport {\n createLayoutDocument,\n createMaterialRegistry,\n responsiveWebBreakpoints,\n} from '@composy/layout-core'\nimport type {\n LayoutDocument,\n LayoutNode,\n MaterialDefinition,\n MaterialRegistry,\n} from '@composy/layout-core'\nimport { createLayoutEditor } from '@composy/layout-editor'\nimport type { LayoutEditor } from '@composy/layout-editor'\nimport { compileLayout } from '@composy/layout-compiler'\nimport { createGridStackEditorEngine } from '@composy/layout-gridstack'\nimport { createLayoutRuntime } from '@composy/layout-runtime'\nimport type { LayoutRuntime } from '@composy/layout-runtime'\nimport { LGrid } from './LGrid'\nimport { LMaterialRenderer } from './LMaterialRenderer'\nimport { LMetricCard } from './LMetricCard'\nimport { LTrendCard } from './LTrendCard'\n\ntype DemoRoute = 'editor' | 'vanilla' | 'runtime' | 'vue'\ntype DevelopmentFramework = 'webcomponent' | 'vue'\ntype CanvasOrientation = 'portrait' | 'landscape'\n\ninterface LayoutWorkspaceProps {\n document?: LayoutDocument\n materials?: MaterialRegistry | readonly MaterialDefinition[]\n theme?: 'light' | 'dark'\n}\n\nconst workspaceProps = defineProps<LayoutWorkspaceProps>()\nconst workspaceEmit = defineEmits<{\n (event: 'update:document', document: LayoutDocument): void\n (event: 'change', document: LayoutDocument): void\n}>()\n\nconst routes: Array<{ id: DemoRoute; label: string; description: string }> = [\n { id: 'editor', label: '编辑', description: '可视化编辑工作区' },\n { id: 'vanilla', label: '原生', description: '原生运行时渲染' },\n {\n id: 'runtime',\n label: '预览',\n description: '网格布局运行时预览',\n },\n { id: 'vue', label: '组件', description: '组件适配器' },\n]\n\nconst breakpointIcons = {\n desktop: Monitor,\n tablet: Tablet,\n mobile: Smartphone,\n}\n\nconst routeIcons = {\n editor: Grid2X2,\n vanilla: Code2,\n runtime: Eye,\n vue: PanelsTopLeft,\n}\n\nconst developmentFrameworks: Array<{\n id: DevelopmentFramework\n label: string\n description: string\n icon: typeof Code2\n}> = [\n {\n id: 'webcomponent',\n label: '原生',\n description: '原生 Web Component 物料',\n icon: Code2,\n },\n {\n id: 'vue',\n label: 'Vue 3',\n description: 'Vue 3 组件物料',\n icon: PanelsTopLeft,\n },\n]\n\nfunction developmentFrameworkLabel(framework: DevelopmentFramework): string {\n if (framework === 'webcomponent') return '原生'\n return 'Vue 3'\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(\n /[&<>'\"]/g,\n character =>\n ({\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n \"'\": '&#39;',\n '\"': '&quot;',\n })[character] ?? character\n )\n}\n\nfunction itemTitle(item: LayoutNode): string {\n return String(item.props?.title ?? item.id)\n}\n\nfunction materialLabel(type: string): string {\n return materials.get(type)?.title ?? materials.get(type)?.label ?? type\n}\n\nfunction formatMarkup(value: string): string {\n const tokens = value.replace(/></g, '>\\n<').split('\\n')\n let depth = 0\n return tokens\n .map(token => {\n const line = token.trim()\n if (!line) return ''\n if (line.startsWith('</')) depth = Math.max(0, depth - 1)\n const formatted = `${' '.repeat(depth)}${line}`\n if (\n line.startsWith('<') &&\n !line.startsWith('</') &&\n !line.startsWith('<!') &&\n !line.startsWith('<?') &&\n !line.endsWith('/>') &&\n !/^<(?:area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\\b/i.test(\n line\n )\n )\n depth += 1\n return formatted\n })\n .filter(Boolean)\n .join('\\n')\n}\n\nfunction formatCss(value: string): string {\n let depth = 0\n return value\n .replace(/\\s*\\{\\s*/g, ' {\\n')\n .replace(/\\s*;\\s*/g, ';\\n')\n .replace(/\\s*}\\s*/g, '\\n}\\n')\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .map(line => {\n if (line.startsWith('}')) depth = Math.max(0, depth - 1)\n const formatted = `${' '.repeat(depth)}${line}`\n if (line.endsWith('{')) depth += 1\n return formatted\n })\n .join('\\n')\n}\n\nfunction breakpointLabel(id: string): string {\n return id === 'desktop' ? '桌面' : id === 'tablet' ? '平板' : '手机'\n}\n\nfunction lucideMarkup(name: keyof typeof icons): string {\n if (typeof document === 'undefined') return ''\n const element = createLucideElement(icons[name])\n element.setAttribute('width', '13')\n element.setAttribute('height', '13')\n element.setAttribute('stroke-width', '1.9')\n element.setAttribute('aria-hidden', 'true')\n return element.outerHTML\n}\n\nfunction renderCardMarkup(\n item: LayoutNode,\n options: { interactive?: boolean } = {}\n): string {\n const type = materialLabel(item.type)\n const title = escapeHtml(itemTitle(item))\n const value = item.props?.value\n const valueMarkup =\n value === undefined\n ? `<span class=\"layout-card__chart\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i><i></i></span>`\n : `<strong class=\"layout-card__value\">${escapeHtml(new Intl.NumberFormat('zh-CN').format(Number(value)))}</strong>`\n return `<article class=\"layout-card\" data-layout-card data-layout-type=\"${escapeHtml(item.type)}\">\n ${\n options.interactive\n ? `<div class=\"layout-card__actions\" data-layout-actions>\n <button class=\"layout-card__action\" type=\"button\" data-layout-action=\"copy\" aria-disabled=\"false\" aria-label=\"复制物料\" title=\"复制物料\">${lucideMarkup('Copy')}</button>\n <button class=\"layout-card__action\" type=\"button\" data-layout-action=\"delete\" aria-disabled=\"false\" aria-label=\"删除物料\" title=\"删除物料\">${lucideMarkup('Trash2')}</button>\n <button class=\"layout-card__action\" type=\"button\" data-layout-action=\"lock\" aria-disabled=\"false\" aria-label=\"${item.state?.locked ? '解锁物料' : '锁定物料'}\" title=\"${item.state?.locked ? '解锁物料' : '锁定物料'}\">${lucideMarkup(item.state?.locked ? 'Unlock' : 'Lock')}</button>\n </div>`\n : ''\n }\n <div class=\"layout-card__meta\"><span class=\"layout-card__type\">${escapeHtml(type)}</span><span class=\"layout-card__status\">已配置</span></div>\n <h3 class=\"layout-card__title\">${title}</h3>\n ${valueMarkup}\n <div class=\"layout-card__footer\"><span>实时数据</span><span class=\"layout-card__spark\">趋势稳定</span></div>\n </article>`\n}\n\nfunction renderExportMaterialMarkup(item: LayoutNode): string {\n const descriptor = materials.get(item.type)?.renderers?.webcomponent\n const tagName = descriptor?.tagName\n if (!tagName || !/^[a-z][a-z0-9.-]*$/i.test(tagName))\n return renderCardMarkup(item)\n const attributes = Object.entries(item.props ?? {})\n .filter(([, value]) => value !== undefined && value !== null)\n .filter(\n ([, value]) => typeof value !== 'object' && typeof value !== 'function'\n )\n .map(\n ([key, value]) =>\n `${key.replace(/[^a-zA-Z0-9:_.-]/g, '-')}=\"${escapeHtml(String(value))}\"`\n )\n .join(' ')\n return `<${tagName}${attributes ? ` ${attributes}` : ''}></${tagName}>`\n}\n\ntype WorkspaceMaterialElement = HTMLElement & {\n materialProps?: Record<string, unknown>\n}\n\nfunction ensureWorkspaceMaterialElement(tagName: string, type: string): void {\n if (\n typeof customElements === 'undefined' ||\n !/^[a-z][a-z0-9.-]*$/i.test(tagName) ||\n customElements.get(tagName)\n )\n return\n\n class LayoutMaterialElement extends HTMLElement {\n private props: Record<string, unknown> = {}\n\n static get observedAttributes(): string[] {\n return ['title', 'value']\n }\n\n set materialProps(value: Record<string, unknown> | undefined) {\n this.props = { ...(value ?? {}) }\n this.render()\n }\n\n connectedCallback(): void {\n this.render()\n }\n\n attributeChangedCallback(): void {\n if (!Object.keys(this.props).length) this.render()\n }\n\n private attributeProps(): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const attribute of Array.from(this.attributes)) {\n if (attribute.name === 'class' || attribute.name === 'style') continue\n result[attribute.name] =\n attribute.name === 'value' &&\n attribute.value !== '' &&\n !Number.isNaN(Number(attribute.value))\n ? Number(attribute.value)\n : attribute.value\n }\n return result\n }\n\n private render(): void {\n const props = Object.keys(this.props).length\n ? this.props\n : this.attributeProps()\n this.style.display = 'block'\n this.style.width = '100%'\n this.style.height = '100%'\n this.innerHTML = renderCardMarkup({\n id: `native-${type}`,\n type,\n layout: {},\n props: props as LayoutNode['props'],\n })\n }\n }\n\n customElements.define(tagName, LayoutMaterialElement)\n}\n\nfunction setNativeRuntimeCard(shell: HTMLElement, item: LayoutNode): void {\n const descriptor = materials.get(item.type)?.renderers?.webcomponent\n const tagName = descriptor?.tagName\n shell.className = 'layout-item-shell'\n shell.dataset.layoutType = item.type\n shell.dataset.materialRenderer = 'webcomponent'\n if (!tagName || !/^[a-z][a-z0-9.-]*$/i.test(tagName)) {\n shell.innerHTML = renderCardMarkup(item)\n return\n }\n ensureWorkspaceMaterialElement(tagName, item.type)\n const element = shell.ownerDocument.createElement(\n tagName\n ) as WorkspaceMaterialElement\n element.materialProps = { ...(item.props ?? {}) }\n shell.replaceChildren(element)\n}\n\nfunction setRuntimeCard(shell: HTMLElement, item: LayoutNode): void {\n if (activeDevelopmentFramework.value === 'webcomponent') {\n setNativeRuntimeCard(shell, item)\n return\n }\n shell.className = 'layout-item-shell'\n shell.dataset.layoutType = item.type\n shell.dataset.materialRenderer = 'vue'\n shell.innerHTML = renderCardMarkup(item)\n}\n\nfunction parseRoute(value: string): DemoRoute {\n const id = value.replace(/^#\\/?/, '') as DemoRoute\n return routes.some(route => route.id === id) ? id : 'editor'\n}\n\nconst builtinMaterials: MaterialDefinition[] = [\n {\n type: 'metric',\n order: 1,\n title: '数据指标',\n category: 'data',\n categoryLabel: '数据组件',\n description: '数值与摘要',\n keywords: ['指标', '数值', 'KPI'],\n tags: ['数据', '卡片'],\n defaultLayout: { w: 4, h: 8 },\n size: {\n default: { w: 4, h: 8 },\n min: { w: 2, h: 4 },\n max: { w: 12, h: 20 },\n step: { w: 1, h: 1 },\n },\n constraints: { movable: true, resizable: true },\n defaults: { title: '新建指标', value: 0 },\n renderers: {\n html: { kind: 'html', tagName: 'article' },\n webcomponent: { kind: 'webcomponent', tagName: 'ldesign-metric-card' },\n vue: {\n kind: 'vue',\n package: '@composy/layout-vue',\n exportName: 'LMetricCard',\n component: LMetricCard,\n },\n },\n },\n {\n type: 'chart',\n order: 2,\n title: '趋势图表',\n category: 'visual',\n categoryLabel: '可视化组件',\n description: '变化与走向',\n keywords: ['趋势', '图表', '分析'],\n tags: ['可视化', '卡片'],\n defaultLayout: { w: 4, h: 10 },\n size: {\n default: { w: 4, h: 10 },\n min: { w: 3, h: 6 },\n max: { w: 12, h: 24 },\n step: { w: 1, h: 1 },\n },\n constraints: { movable: true, resizable: true },\n defaults: { title: '营收趋势' },\n renderers: {\n html: { kind: 'html', tagName: 'article' },\n webcomponent: { kind: 'webcomponent', tagName: 'ldesign-trend-card' },\n vue: {\n kind: 'vue',\n package: '@composy/layout-vue',\n exportName: 'LTrendCard',\n component: LTrendCard,\n },\n },\n },\n]\nfunction resolveWorkspaceMaterials(\n input: MaterialRegistry | readonly MaterialDefinition[] | undefined\n): MaterialRegistry {\n if (!input) return createMaterialRegistry(builtinMaterials)\n if (!Array.isArray(input)) return input as MaterialRegistry\n return createMaterialRegistry(input as readonly MaterialDefinition[])\n}\n\nconst materials = resolveWorkspaceMaterials(workspaceProps.materials)\nconst initial =\n workspaceProps.document ??\n createLayoutDocument({\n id: 'layout-alpha-demo',\n breakpoints: responsiveWebBreakpoints.map(item => ({ ...item })),\n defaultBreakpointId: 'desktop',\n items: [\n {\n id: 'sales',\n type: 'metric',\n props: { title: '月度销售额', value: 12840 },\n layout: {\n desktop: { x: 0, y: 0, w: 4, h: 10 },\n tablet: { x: 0, y: 0, w: 4, h: 10 },\n mobile: { x: 0, y: 0, w: 4, h: 8 },\n },\n },\n {\n id: 'orders',\n type: 'metric',\n props: { title: '待处理订单', value: 86 },\n layout: {\n desktop: { x: 4, y: 0, w: 4, h: 10 },\n tablet: { x: 4, y: 0, w: 4, h: 10 },\n mobile: { x: 0, y: 8, w: 4, h: 8 },\n },\n },\n {\n id: 'revenue',\n type: 'chart',\n props: { title: '营收预测' },\n layout: {\n desktop: { x: 8, y: 0, w: 4, h: 18 },\n tablet: { x: 0, y: 10, w: 8, h: 14 },\n mobile: { x: 0, y: 16, w: 4, h: 12 },\n },\n },\n ],\n })\nconst editorGrid = ref<HTMLElement>()\nconst canvasViewport = ref<HTMLElement>()\nconst runtimePreview = ref<HTMLElement>()\nconst vanillaRuntime = ref<HTMLElement>()\nconst previewDialogRuntime = ref<HTMLElement>()\nconst materialQuery = ref('')\nconst activeMaterialCategory = ref<string>()\nconst activeDevelopmentFramework = ref<DevelopmentFramework>('vue')\nconst materialElements = new Map<string, HTMLElement>()\nconst materialSourceDisposers = new Map<string, () => void>()\nconst materialCategories = computed(() => materials.getCategories())\nconst activeMaterialCategoryLabel = computed(() => {\n if (!activeMaterialCategory.value) return '全部分类'\n return (\n materialCategories.value.find(\n category => category.id === activeMaterialCategory.value\n )?.label ?? '全部分类'\n )\n})\nconst activeDevelopmentFrameworkLabel = computed(() =>\n developmentFrameworkLabel(activeDevelopmentFramework.value)\n)\nconst materialCategoryFilter = computed({\n get: () => activeMaterialCategory.value ?? '',\n set: value => {\n activeMaterialCategory.value = value || undefined\n },\n})\nconst hasMaterialFilters = computed(\n () =>\n Boolean(materialQuery.value.trim()) || Boolean(activeMaterialCategory.value)\n)\nconst visibleMaterials = computed(() =>\n materials.search({\n query: materialQuery.value,\n category: activeMaterialCategory.value,\n framework: activeDevelopmentFramework.value,\n })\n)\nconst layout = ref(structuredClone(initial) as LayoutDocument)\nconst selected = ref<string>()\nconst selectedIds = ref<string[]>([])\nconst activeBreakpoint = ref('desktop')\nconst canvasOrientation = ref<CanvasOrientation>('landscape')\nconst deviceMenuOpen = ref(false)\nconst categoryMenuOpen = ref(false)\nconst developmentModeMenuOpen = ref(false)\nconst copied = ref(false)\nconst previewMode = ref(false)\nconst previewDialogOpen = ref(false)\nconst materialCodeDialog = ref<MaterialDefinition>()\nconst materialCodeCopied = ref(false)\nconst activeRoute = ref<DemoRoute>('editor')\nconst theme = ref<'light' | 'dark'>(workspaceProps.theme ?? 'light')\nconst canvasZoom = ref(1)\nconst canvasPan = ref({ x: 0, y: 0 })\nconst canvasTool = ref<'select' | 'pan'>('select')\nconst canvasPanning = ref(false)\nconst canvasSpacePressed = ref(false)\nconst canvasPanOrigin = ref({ x: 0, y: 0, panX: 0, panY: 0 })\nlet editor: LayoutEditor | undefined\nlet vanillaRuntimeInstance: LayoutRuntime | undefined\nlet previewDialogRuntimeInstance: LayoutRuntime | undefined\nlet previousGridStackRenderCallback: typeof GridStack.renderCB | undefined\nlet interactionPreviewFrame: number | undefined\nconst disposers: Array<() => void> = []\n// The playground snapshot is intentionally reactive: committed editor changes\n// arrive through `document:change`, while transient drag/resize previews arrive\n// through `syncInteractionPreview`. Reading the non-reactive editor variable\n// here would let the computed stop tracking `layout` after the first commit.\nconst currentDocument = computed(() => layout.value)\nconst canvasSize = computed(() => {\n const dimensions: Record<\n string,\n {\n landscape: { width: number; height: number }\n portrait: { width: number; height: number }\n }\n > = {\n desktop: {\n landscape: { width: 1200, height: 760 },\n portrait: { width: 760, height: 1200 },\n },\n tablet: {\n landscape: { width: 1024, height: 768 },\n portrait: { width: 768, height: 1024 },\n },\n mobile: {\n landscape: { width: 844, height: 390 },\n portrait: { width: 390, height: 844 },\n },\n }\n return (\n dimensions[activeBreakpoint.value]?.[canvasOrientation.value] ?? {\n width: 1200,\n height: 760,\n }\n )\n})\nconst activeBreakpointIcon = computed(\n () =>\n breakpointIcons[activeBreakpoint.value as keyof typeof breakpointIcons] ??\n Monitor\n)\nconst exported = computed(() => JSON.stringify(currentDocument.value, null, 2))\nconst compiledResult = computed(() =>\n compileLayout(currentDocument.value, {\n target: 'html-css',\n breakpointId: activeBreakpoint.value,\n materials,\n materialCompiler: {\n supports: () => true,\n compile: item => renderExportMaterialMarkup(item),\n },\n })\n)\nconst compiled = computed(() => formatCss(compiledResult.value.css ?? ''))\nconst htmlSource = computed(() => {\n const result = compiledResult.value\n return `<style>\\n${compiled.value}\\n</style>\\n\\n${formatMarkup(result.html ?? '')}`\n})\nconst legacyVueSource = computed(\n () => `<script setup lang=\"ts\">\nimport { LGrid } from '@composy/layout-vue'\nimport type { LayoutDocument } from '@composy/layout-core'\n\nconst layoutDocument: LayoutDocument = ${JSON.stringify(currentDocument.value, null, 2)}\n<${'/'}script>\n\n<template>\n <LGrid :document=\"layoutDocument\" breakpoint=\"${activeBreakpoint.value}\">\n <template #item=\"{ item }\">\n <article class=\"layout-card\">\n <div class=\"layout-card__meta\">\n <span class=\"layout-card__type\">{{ item.type === 'metric' ? '数据指标' : '趋势图表' }}</span>\n <span class=\"layout-card__status\">已配置</span>\n </div>\n <h3 class=\"layout-card__title\">{{ item.props.title }}</h3>\n <strong v-if=\"item.props.value !== undefined\" class=\"layout-card__value\">\n {{ Number(item.props.value).toLocaleString('zh-CN') }}\n </strong>\n <span v-else class=\"layout-card__chart\" aria-hidden=\"true\">\n\n <i v-for=\"bar in 5\" :key=\"bar\" />\n </span>\n <div class=\"layout-card__footer\"><span>实时数据</span><span class=\"layout-card__spark\">趋势稳定</span></div>\n </article>\n </template>\n </LGrid>\n</template>`\n)\nconst legacyReactSource = computed(\n () => `import { Grid } from '@composy/layout-react'\nimport type { LayoutDocument } from '@composy/layout-core'\n\nconst layoutDocument: LayoutDocument = ${JSON.stringify(currentDocument.value, null, 2)}\n\nexport function LayoutPreview() {\n return (\n <Grid document={layoutDocument} breakpoint=\"${activeBreakpoint.value}\">\n {({ item }) => (\n <article className=\"layout-card\">\n <div className=\"layout-card__meta\">\n <span className=\"layout-card__type\">{item.type === 'metric' ? '数据指标' : '趋势图表'}</span>\n <span className=\"layout-card__status\">已配置</span>\n </div>\n <h3 className=\"layout-card__title\">{String(item.props.title)}</h3>\n {item.props.value !== undefined ? (\n <strong className=\"layout-card__value\">{Number(item.props.value).toLocaleString('zh-CN')}</strong>\n ) : (\n <span className=\"layout-card__chart\" aria-hidden=\"true\">{[1, 2, 3, 4, 5].map(bar => <i key={bar} />)}</span>\n )}\n <div className=\"layout-card__footer\"><span>实时数据</span><span className=\"layout-card__spark\">趋势稳定</span></div>\n </article>\n )}\n </Grid>\n )\n}`\n)\nconst generatedVueSource = computed(() => {\n const imports = new Map<string, string[]>()\n const bindings: string[] = []\n const usedLocals = new Set<string>(['LGrid'])\n for (const material of materials.getAll()) {\n const renderer = material.renderers?.vue\n if (!renderer?.package || !renderer.exportName) continue\n const exportName = renderer.exportName.trim()\n if (!/^[A-Za-z_$][\\w$]*$/.test(exportName)) continue\n let localName = exportName\n let suffix = 2\n while (usedLocals.has(localName)) localName = `${exportName}${suffix++}`\n usedLocals.add(localName)\n const packageImports = imports.get(renderer.package) ?? []\n packageImports.push(\n localName === exportName ? exportName : `${exportName} as ${localName}`\n )\n imports.set(renderer.package, packageImports)\n bindings.push(` ${JSON.stringify(material.type)}: ${localName}`)\n }\n const importLines = [\n \"import { LGrid } from '@composy/layout-vue'\",\n ...[...imports.entries()].map(\n ([packageName, exports]) =>\n `import { ${exports.join(', ')} } from '${packageName}'`\n ),\n ].join('\\n')\n const componentMap = bindings.length\n ? `const materialComponents = {\\n${bindings.join(',\\n')}\\n} as const`\n : 'const materialComponents: Record<string, never> = {}'\n return `<script setup lang=\"ts\">\n${importLines}\nimport type { LayoutDocument } from '@composy/layout-core'\n\nconst layoutDocument: LayoutDocument = ${JSON.stringify(currentDocument.value, null, 2)}\nconst breakpoint = '${activeBreakpoint.value}'\n${componentMap}\n<${'/'}script>\n\n<template>\n <LGrid :document=\"layoutDocument\" :breakpoint=\"breakpoint\">\n <template #item=\"{ item }\">\n <component\n :is=\"materialComponents[item.type as keyof typeof materialComponents]\"\n v-bind=\"item.props\"\n />\n </template>\n </LGrid>\n</template>\n\n<style scoped>\n/* LGrid renders the ldesign-layout-grid CSS Grid container. */\n${compiled.value}\n</style>`\n})\nconst generatedReactSource = computed(() =>\n `import type { LayoutDocument, LayoutNode } from '@composy/layout-core'\n\nconst layoutDocument: LayoutDocument = ${JSON.stringify(currentDocument.value, null, 2)}\nconst breakpoint = '${activeBreakpoint.value}'\nconst itemClass = (item: LayoutNode) => \\`ldesign-layout-item-\\${item.id.replace(/[^a-zA-Z0-9_-]/g, '-') }\\`\n\nexport function LayoutPreview() {\n return (\n <section className=\"ldesign-layout-grid\">\n {layoutDocument.items.map(item => (\n <article key={item.id} className={\\`\\${itemClass(item)} layout-card\\`}>\n <div className=\"layout-card__meta\"><span className=\"layout-card__type\">{item.type === 'metric' ? '数据指标' : '趋势图表'}</span><span className=\"layout-card__status\">已配置</span></div>\n <h3 className=\"layout-card__title\">{String(item.props.title)}</h3>\n {item.props.value !== undefined ? <strong className=\"layout-card__value\">{Number(item.props.value).toLocaleString('zh-CN')}</strong> : <span className=\"layout-card__chart\" aria-hidden=\"true\">{[1, 2, 3, 4, 5].map(bar => <i key={bar} />)}</span>}\n <div className=\"layout-card__footer\"><span>实时数据</span><span className=\"layout-card__spark\">趋势稳定</span></div>\n </article>\n ))}\n </section>\n )\n}\n\n/* CSS Grid styles are emitted separately by the compiler. */`\n .replace(\n /<span className=\"layout-card__type\">[\\s\\S]*?<\\/span>/g,\n '<span className=\"layout-card__type\">{item.type}</span>'\n )\n .replace(\n /<span className=\"layout-card__status\">[\\s\\S]*?<\\/span>/g,\n '<span className=\"layout-card__status\">&#x5df2;&#x914d;&#x7f6e;</span>'\n )\n .replace(\n /<div className=\"layout-card__footer\">[\\s\\S]*?<\\/div>/g,\n '<div className=\"layout-card__footer\"><span>&#x5b9e;&#x65f6;&#x6570;&#x636e;</span><span className=\"layout-card__spark\">&#x7a33;&#x5b9a;</span></div>'\n )\n)\nconst activeCode = computed(() =>\n activeDevelopmentFramework.value === 'vue'\n ? generatedVueSource.value\n : htmlSource.value\n)\nconst activeCodeLabel = computed(() =>\n activeDevelopmentFramework.value === 'vue' ? 'Vue组件代码' : '原生代码'\n)\nconst activeCodeExtension = computed(() =>\n activeDevelopmentFramework.value === 'vue' ? 'vue' : 'html'\n)\n\nfunction materialCodeProps(\n material: MaterialDefinition\n): Record<string, unknown> {\n return {\n ...(material.defaults ?? {}),\n }\n}\n\nfunction materialVueCode(material: MaterialDefinition): string {\n const renderer = material.renderers?.vue\n const exportedName = renderer?.exportName?.trim()\n const componentName =\n (exportedName && /^[A-Za-z_$][\\w$]*$/.test(exportedName)\n ? exportedName\n : undefined) ??\n (renderer?.component as { name?: string } | undefined)?.name ??\n material.type.replace(/[^A-Za-z0-9_$]/g, '')\n const importLine =\n renderer?.package && exportedName && /^[A-Za-z_$][\\w$]*$/.test(exportedName)\n ? `import { ${componentName} } from '${renderer.package}'`\n : `// Vue 组件由物料注册表提供:${componentName}`\n const props = materialCodeProps(material)\n const bindings = Object.entries(props)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => ` :${key}='${JSON.stringify(value)}'`)\n .join('\\n')\n return `<script setup lang=\"ts\">\n${importLine}\n<\\/script>\n\n<!-- 注册表物料:${material.type} -->\n<template>\n <${componentName}${bindings ? `\\n${bindings}\\n ` : ''}/>\n</template>`\n}\n\nfunction materialWebComponentCode(material: MaterialDefinition): string {\n const renderer = material.renderers?.webcomponent\n const tagName =\n renderer?.tagName ?? `ldesign-${material.type.replace(/[^a-z0-9-]/gi, '-')}`\n const attributes = Object.entries(materialCodeProps(material))\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=\"${String(value).replace(/\"/g, '&quot;')}\"`)\n .join('\\n ')\n return `<!-- 注册表物料:${material.type} -->\n<!-- Web Component 标签:${tagName} -->\n<${tagName}${attributes ? `\\n ${attributes}` : ''}></${tagName}>`\n}\n\nconst materialCode = computed(() => {\n const material = materialCodeDialog.value\n if (!material) return ''\n return activeDevelopmentFramework.value === 'vue'\n ? materialVueCode(material)\n : materialWebComponentCode(material)\n})\nconst highlightedMaterialCode = computed(() =>\n highlightCode(materialCode.value)\n)\nconst materialCodeLineCount = computed(\n () => materialCode.value.split('\\n').length\n)\n\nfunction highlightCode(value: string): string {\n const fragments: string[] = []\n const stash = (value: string, className: string) => {\n const index =\n fragments.push(`<span class=\"code-token-${className}\">${value}</span>`) -\n 1\n return `__LDS_TOKEN_${index}__`\n }\n let code = escapeHtml(value)\n code = code.replace(/(&quot;.*?&quot;|&#39;.*?&#39;|`.*?`)/g, match =>\n stash(match, 'string')\n )\n code = code.replace(/(\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?\\*\\/)/g, match =>\n stash(match, 'comment')\n )\n code = code.replace(\n /(^|[;{\\n]\\s*)([A-Za-z_$][\\w$-]*)(?=\\s*:)/g,\n (_, prefix, name) => `${prefix}${stash(name, 'property')}`\n )\n code = code.replace(\n /\\b(import|from|const|let|function|return|export|as|type|class|extends|new|true|false|null|undefined)\\b/g,\n match =>\n stash(\n match,\n /^(true|false|null|undefined)$/.test(match) ? 'constant' : 'keyword'\n )\n )\n code = code.replace(/(&lt;\\/?[A-Za-z][^&]*?&gt;)/g, match =>\n stash(match, 'tag')\n )\n let previous = ''\n while (previous !== code && /__LDS_TOKEN_\\d+__/.test(code)) {\n previous = code\n code = code.replace(\n /__LDS_TOKEN_(\\d+)__/g,\n (_, index) => fragments[Number(index)] ?? ''\n )\n }\n return code\n}\nconst highlightedCode = computed(() => highlightCode(activeCode.value))\nconst activeCodeLineCount = computed(() => activeCode.value.split('\\n').length)\nconst canvasSceneStyle = computed(() => ({\n width: `${canvasSize.value.width}px`,\n minHeight: `${canvasSize.value.height}px`,\n '--canvas-height': `${canvasSize.value.height}px`,\n '--canvas-grid-height': `${Math.max(180, canvasSize.value.height)}px`,\n transform: `translate3d(${canvasPan.value.x}px, ${canvasPan.value.y}px, 0) scale(${canvasZoom.value})`,\n}))\nconst canvasZoomLabel = computed(() => `${Math.round(canvasZoom.value * 100)}%`)\nconst selectedItem = computed(() =>\n layout.value.items.find(item => item.id === selected.value)\n)\nconst selectedLocked = computed(() =>\n Boolean(selectedItem.value?.state?.locked)\n)\nconst selectedMovable = computed(\n () => selectedItem.value?.constraints?.movable !== false\n)\nconst selectedResizable = computed(\n () => selectedItem.value?.constraints?.resizable !== false\n)\n\nfunction add(type: string) {\n if (!editor) return\n const node = editor.addItem({ type })\n editor.updateItem(node.id, item => {\n for (const bp of Object.values(item.layout)) bp.y = 30\n return item\n })\n editor.select(node.id)\n}\n\nfunction materialProps(type: string): string {\n return JSON.stringify(materials.get(type)?.defaults ?? {})\n}\n\nfunction openMaterialCode(type: string): void {\n const material = materials.get(type)\n if (!material) return\n materialCodeDialog.value = material\n materialCodeCopied.value = false\n closeFilterMenus()\n}\n\nfunction closeMaterialCode(): void {\n materialCodeDialog.value = undefined\n materialCodeCopied.value = false\n}\n\nasync function copyMaterialCode(): Promise<void> {\n if (!materialCode.value || typeof navigator === 'undefined') return\n try {\n await navigator.clipboard.writeText(materialCode.value)\n materialCodeCopied.value = true\n window.setTimeout(() => {\n materialCodeCopied.value = false\n }, 1500)\n } catch {\n materialCodeCopied.value = false\n }\n}\n\nfunction handleMaterialClick(type: string): void {\n add(type)\n}\n\nfunction toggleFilterMenu(menu: 'category' | 'device'): void {\n categoryMenuOpen.value = menu === 'category' ? !categoryMenuOpen.value : false\n deviceMenuOpen.value = menu === 'device' ? !deviceMenuOpen.value : false\n developmentModeMenuOpen.value = false\n}\n\nfunction toggleDevelopmentModeMenu(): void {\n developmentModeMenuOpen.value = !developmentModeMenuOpen.value\n categoryMenuOpen.value = false\n deviceMenuOpen.value = false\n}\n\nfunction closeFilterMenus(): void {\n categoryMenuOpen.value = false\n deviceMenuOpen.value = false\n developmentModeMenuOpen.value = false\n}\n\nfunction handleFilterMenuKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape') return\n if (\n !categoryMenuOpen.value &&\n !developmentModeMenuOpen.value &&\n !deviceMenuOpen.value\n )\n return\n closeFilterMenus()\n ;(event.target as HTMLElement | null)?.blur()\n}\n\nfunction handleFilterOutsidePointerdown(event: PointerEvent): void {\n const target = event.target\n if (!(target instanceof Element)) return\n if (target.closest('[data-layout-filter-menu]')) return\n closeFilterMenus()\n}\n\nfunction selectMaterialCategory(category: string): void {\n materialCategoryFilter.value = category\n closeFilterMenus()\n}\n\nfunction selectDevelopmentFramework(framework: DevelopmentFramework): void {\n activeDevelopmentFramework.value = framework\n if (typeof window !== 'undefined')\n window.localStorage.setItem('layout-development-framework', framework)\n closeFilterMenus()\n nextTick(() => {\n syncVanillaRuntime()\n syncPreviewDialogRuntime()\n if (previewMode.value && editor) {\n editor.setMode('edit')\n nextTick(() => editor?.setMode('preview'))\n }\n })\n}\n\nfunction resetMaterialFilters(): void {\n materialQuery.value = ''\n activeMaterialCategory.value = undefined\n closeFilterMenus()\n}\n\nfunction materialIcon(type: string) {\n return type === 'chart' ? ChartSpline : ChartNoAxesColumnIncreasing\n}\n\nfunction setMaterialElement(type: string, value: unknown): void {\n if (value instanceof HTMLElement) materialElements.set(type, value)\n else materialElements.delete(type)\n}\n\nfunction syncMaterialSources(): void {\n if (!editor) return\n const visibleTypes = new Set(\n visibleMaterials.value.map(material => material.type)\n )\n for (const material of visibleMaterials.value) {\n const element = materialElements.get(material.type)\n if (!element || materialSourceDisposers.has(material.type)) continue\n const size = material.defaultLayout ?? material.size?.default\n const dispose = editor.registerExternalDragSource({\n element,\n type: material.type,\n props: { ...(material.defaults ?? {}) },\n placement: { x: 0, y: 0, w: size?.w ?? 1, h: size?.h ?? 1 },\n })\n materialSourceDisposers.set(material.type, dispose)\n }\n\n for (const [type, dispose] of materialSourceDisposers) {\n if (!visibleTypes.has(type)) {\n dispose()\n materialSourceDisposers.delete(type)\n }\n }\n}\n\nwatch([materialQuery, activeMaterialCategory, activeDevelopmentFramework], () =>\n nextTick(syncMaterialSources)\n)\nfunction removeSelected() {\n editor?.handleKeyboard({ key: 'Delete' })\n}\nfunction toggleSelectedLock() {\n if (!editor || !selected.value) return\n if (selectedLocked.value) editor.unlockItem(selected.value)\n else editor.lockItem(selected.value)\n}\nfunction toggleSelectedConstraint(key: 'movable' | 'resizable') {\n if (!editor || !selected.value) return\n editor.updateItem(selected.value, item => {\n item.constraints = {\n ...(item.constraints ?? {}),\n [key]: item.constraints?.[key] === false,\n }\n return item\n })\n}\nfunction undo() {\n editor?.undo()\n}\nfunction redo() {\n editor?.redo()\n}\nfunction togglePreview() {\n const nextMode = previewMode.value ? 'edit' : 'preview'\n editor?.setMode(nextMode)\n // Keep the address bar in sync with the visible mode. This also makes a\n // later hash assignment to the same route observable to the router.\n navigate(nextMode === 'preview' ? 'runtime' : 'editor')\n}\n\nfunction openPreviewDialog(): void {\n previewDialogOpen.value = true\n nextTick(syncPreviewDialogRuntime)\n}\n\nfunction closePreviewDialog(): void {\n previewDialogOpen.value = false\n previewDialogRuntimeInstance?.destroy()\n previewDialogRuntimeInstance = undefined\n}\n\nfunction syncPreviewDialogRuntime(): void {\n if (\n activeDevelopmentFramework.value !== 'webcomponent' ||\n !previewDialogOpen.value ||\n !previewDialogRuntime.value\n ) {\n previewDialogRuntimeInstance?.destroy()\n previewDialogRuntimeInstance = undefined\n return\n }\n const runtimeDocument = editor?.exportRuntimeDocument() ?? layout.value\n if (!previewDialogRuntimeInstance) {\n previewDialogRuntimeInstance = createLayoutRuntime({\n container: previewDialogRuntime.value,\n document: runtimeDocument,\n materials,\n observeResize: false,\n renderItem: ({ shell, item }) => {\n const render = () => setNativeRuntimeCard(shell, item)\n render()\n return { update: render }\n },\n })\n previewDialogRuntimeInstance.mount()\n } else previewDialogRuntimeInstance.update(runtimeDocument)\n previewDialogRuntimeInstance.setBreakpoint(activeBreakpoint.value)\n}\n\nwatch(\n [previewDialogOpen, activeDevelopmentFramework, activeBreakpoint, layout],\n () => nextTick(syncPreviewDialogRuntime)\n)\n\nfunction syncVanillaRuntime() {\n if (\n activeDevelopmentFramework.value !== 'webcomponent' ||\n activeRoute.value !== 'vanilla' ||\n !vanillaRuntime.value ||\n !editor\n ) {\n vanillaRuntimeInstance?.destroy()\n vanillaRuntimeInstance = undefined\n return\n }\n const document = editor.exportRuntimeDocument()\n if (!vanillaRuntimeInstance) {\n vanillaRuntimeInstance = createLayoutRuntime({\n container: vanillaRuntime.value,\n document,\n materials,\n observeResize: false,\n renderItem: ({ shell, item }) => {\n const render = () => {\n setRuntimeCard(shell, item)\n }\n render()\n return { update: render }\n },\n })\n vanillaRuntimeInstance.mount()\n } else vanillaRuntimeInstance.update(document)\n vanillaRuntimeInstance.setBreakpoint(activeBreakpoint.value)\n}\n\nfunction navigate(route: DemoRoute) {\n activeRoute.value = route\n if (typeof window !== 'undefined') window.location.hash = `/${route}`\n if (route === 'runtime') {\n // Re-enter preview through edit when necessary so a stale GridStack DOM\n // cannot remain mounted after switching routes repeatedly.\n if (editor?.getMode() === 'preview') editor.setMode('edit')\n editor?.setMode('preview')\n const clearEditorWidgets = () => {\n if (activeRoute.value !== 'runtime') return\n editorGrid.value\n ?.querySelectorAll<HTMLElement>('.grid-stack-item')\n .forEach(element => element.remove())\n }\n clearEditorWidgets()\n nextTick(clearEditorWidgets)\n } else if (previewMode.value) editor?.setMode('edit')\n nextTick(syncVanillaRuntime)\n}\nfunction select(id: string) {\n editor?.select(id)\n}\nfunction changeBreakpoint(id: string) {\n activeBreakpoint.value = id\n canvasOrientation.value = id === 'mobile' ? 'portrait' : 'landscape'\n editor?.setBreakpoint(id)\n vanillaRuntimeInstance?.setBreakpoint(id)\n deviceMenuOpen.value = false\n}\n\nfunction selectBreakpoint(id: string): void {\n changeBreakpoint(id)\n}\n\nfunction toggleCanvasOrientation(): void {\n canvasOrientation.value =\n canvasOrientation.value === 'portrait' ? 'landscape' : 'portrait'\n}\n\nfunction clampCanvasZoom(value: number): number {\n return Math.min(2, Math.max(0.5, Math.round(value * 20) / 20))\n}\n\nfunction setCanvasZoom(value: number, anchor?: { x: number; y: number }) {\n const viewport = canvasViewport.value\n const previousZoom = canvasZoom.value\n const nextZoom = clampCanvasZoom(value)\n if (!viewport || previousZoom === nextZoom) return\n const rect = viewport.getBoundingClientRect()\n const anchorX = anchor?.x ?? rect.left + rect.width / 2\n const anchorY = anchor?.y ?? rect.top + rect.height / 2\n const localX = (anchorX - rect.left - canvasPan.value.x) / previousZoom\n const localY = (anchorY - rect.top - canvasPan.value.y) / previousZoom\n canvasZoom.value = nextZoom\n canvasPan.value = {\n x: anchorX - rect.left - localX * nextZoom,\n y: anchorY - rect.top - localY * nextZoom,\n }\n}\n\nfunction zoomCanvas(direction: 1 | -1) {\n setCanvasZoom(canvasZoom.value + direction * 0.1)\n}\n\nfunction resetCanvasView() {\n canvasZoom.value = 1\n canvasPan.value = { x: 0, y: 0 }\n}\n\nfunction resetCanvasPan() {\n canvasPan.value = { x: 0, y: 0 }\n}\n\nfunction toggleTheme() {\n theme.value = theme.value === 'light' ? 'dark' : 'light'\n if (typeof window !== 'undefined')\n window.localStorage.setItem('layout-theme', theme.value)\n}\n\nfunction handleCanvasWheel(event: WheelEvent) {\n event.preventDefault()\n const direction = event.deltaY < 0 ? 1 : -1\n setCanvasZoom(canvasZoom.value + direction * 0.08, {\n x: event.clientX,\n y: event.clientY,\n })\n}\n\nfunction handleCanvasPointerDown(event: PointerEvent) {\n const shouldPan =\n canvasTool.value === 'pan' || canvasSpacePressed.value || event.button === 1\n if (!shouldPan || event.button === 2) return\n event.preventDefault()\n event.stopPropagation()\n const target = event.currentTarget as HTMLElement\n target.setPointerCapture?.(event.pointerId)\n canvasPanning.value = true\n canvasPanOrigin.value = {\n x: event.clientX,\n y: event.clientY,\n panX: canvasPan.value.x,\n panY: canvasPan.value.y,\n }\n}\n\nfunction handleCanvasPointerMove(event: PointerEvent) {\n if (!canvasPanning.value) return\n const origin = canvasPanOrigin.value\n canvasPan.value = {\n x: origin.panX + event.clientX - origin.x,\n y: origin.panY + event.clientY - origin.y,\n }\n}\n\nfunction finishCanvasPan(event?: PointerEvent) {\n if (!canvasPanning.value) return\n canvasPanning.value = false\n if (event) {\n const target = event.currentTarget as HTMLElement\n target.releasePointerCapture?.(event.pointerId)\n }\n}\n\nfunction handleCanvasKeydown(event: KeyboardEvent) {\n if (event.code === 'Space') canvasSpacePressed.value = true\n}\n\nfunction handleCanvasKeyup(event: KeyboardEvent) {\n if (event.code === 'Space') canvasSpacePressed.value = false\n}\n\nfunction handleWorkspaceKeydown(event: KeyboardEvent): void {\n if (!editor || event.defaultPrevented) return\n const root = editorGrid.value?.closest<HTMLElement>('[data-layout-workspace]')\n if (!root || !(event.target instanceof Node) || !root.contains(event.target))\n return\n const key = event.key.toLowerCase()\n const isLayoutShortcut =\n (event.ctrlKey || event.metaKey) && ['c', 'v', 'x', 'd'].includes(key)\n if (!isLayoutShortcut && !['delete', 'backspace'].includes(key)) return\n editor.handleKeyboard({\n key: event.key,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n altKey: event.altKey,\n preventDefault: () => event.preventDefault(),\n })\n}\n\nasync function copyActiveCode() {\n const value = activeCode.value\n try {\n if (navigator.clipboard?.writeText)\n await navigator.clipboard.writeText(value)\n else {\n const textarea = document.createElement('textarea')\n\n textarea.value = value\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n textarea.remove()\n }\n copied.value = true\n window.setTimeout(() => {\n copied.value = false\n }, 1600)\n } catch {\n copied.value = false\n }\n}\n\nfunction downloadActiveCode() {\n const blob = new Blob([activeCode.value], {\n type: 'text/plain;charset=utf-8',\n })\n const url = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = `layout-${activeDevelopmentFramework.value}.${activeCodeExtension.value}`\n anchor.click()\n URL.revokeObjectURL(url)\n}\n\nfunction handleEditorGridAction(event: MouseEvent | PointerEvent): void {\n const target = event.target\n if (!(target instanceof Element)) return\n const action = target.closest<HTMLElement>('[data-layout-action]')\n const widget = target.closest<HTMLElement>('.grid-stack-item')\n if (!action || !widget || action.dataset.layoutActionPointer === 'true') {\n if (action?.dataset.layoutActionPointer === 'true')\n delete action.dataset.layoutActionPointer\n return\n }\n if (event.type === 'pointerdown') {\n action.dataset.layoutActionPointer = 'true'\n event.preventDefault()\n }\n const id =\n widget.getAttribute('gs-id') ?? widget.getAttribute('data-layout-item-id')\n if (!id || !editor) return\n editor.select(id)\n const kind = action.dataset.layoutAction\n if (kind === 'copy') editor.copySelection()\n else if (kind === 'delete') editor.removeItem(id)\n else if (kind === 'lock') {\n if (layout.value.items.find(item => item.id === id)?.state?.locked)\n editor.unlockItem(id)\n else editor.lockItem(id)\n }\n}\n\nfunction syncSelection() {\n const root = editorGrid.value\n if (!root) return\n root.querySelectorAll<HTMLElement>('.grid-stack-item').forEach(item => {\n const id =\n item.getAttribute('gs-id') ??\n item.getAttribute('data-layout-item-id') ??\n ''\n const node = layout.value.items.find(candidate => candidate.id === id)\n const active = selectedIds.value.includes(id)\n item.classList.toggle('is-selected', active)\n item.tabIndex = 0\n item.setAttribute('role', 'button')\n if (node)\n item.setAttribute(\n 'aria-label',\n `${itemTitle(node)},${materialLabel(node.type)}`\n )\n item.setAttribute('aria-pressed', String(active))\n item.setAttribute('aria-selected', String(active))\n item.setAttribute('aria-disabled', String(Boolean(node?.state?.locked)))\n })\n}\n\nfunction syncInteractionPreview(): void {\n if (interactionPreviewFrame !== undefined) return\n const flush = () => {\n interactionPreviewFrame = undefined\n if (!editor) return\n layout.value = editor.exportRuntimeDocument()\n queueMicrotask(syncSelection)\n }\n if (typeof window === 'undefined') flush()\n else interactionPreviewFrame = window.requestAnimationFrame(flush)\n}\n\nonMounted(() => {\n if (typeof window !== 'undefined') {\n const savedTheme = window.localStorage.getItem('layout-theme')\n if (savedTheme === 'light' || savedTheme === 'dark')\n theme.value = savedTheme\n const savedFramework = window.localStorage.getItem(\n 'layout-development-framework'\n )\n if (savedFramework === 'webcomponent' || savedFramework === 'vue') {\n activeDevelopmentFramework.value = savedFramework\n }\n }\n if (!editorGrid.value) return\n previousGridStackRenderCallback = GridStack.renderCB\n GridStack.renderCB = (element, widget) => {\n if (element && widget?.content !== undefined)\n element.innerHTML = String(widget.content)\n }\n const engine = createGridStackEditorEngine({\n container: editorGrid.value,\n gridOptions: { acceptWidgets: true, animate: false },\n createGrid: options => GridStack.init(options, editorGrid.value!)!,\n renderItem: ({ item }) => renderCardMarkup(item, { interactive: true }),\n })\n editor = createLayoutEditor({\n document: initial,\n engine,\n materials,\n preview: runtimePreview.value\n ? {\n container: runtimePreview.value,\n renderItem: ({ shell, item }) => {\n const render = () => {\n setRuntimeCard(shell, item)\n }\n render()\n return { update: render }\n },\n }\n : undefined,\n })\n editor.on('document:change', event => {\n layout.value = event.document\n workspaceEmit('update:document', event.document)\n workspaceEmit('change', event.document)\n queueMicrotask(syncSelection)\n syncVanillaRuntime()\n })\n editor.on('interaction:move', syncInteractionPreview)\n editor.on('interaction:resize', syncInteractionPreview)\n editor.on('selection:change', event => {\n selected.value = event.primaryId\n selectedIds.value = [...event.selectedIds]\n syncSelection()\n })\n editor.on('mode:change', event => {\n previewMode.value = event.mode === 'preview'\n if (event.mode === 'preview' && activeRoute.value !== 'runtime')\n activeRoute.value = 'runtime'\n if (event.mode === 'edit' && activeRoute.value === 'runtime')\n activeRoute.value = 'editor'\n nextTick(syncVanillaRuntime)\n })\n editor.mount()\n editorGrid.value.addEventListener('pointerdown', handleEditorGridAction, true)\n editorGrid.value.addEventListener('click', handleEditorGridAction, true)\n disposers.push(() =>\n editorGrid.value?.removeEventListener(\n 'pointerdown',\n handleEditorGridAction,\n true\n )\n )\n disposers.push(() =>\n editorGrid.value?.removeEventListener('click', handleEditorGridAction, true)\n )\n nextTick(syncMaterialSources)\n syncSelection()\n if (typeof window !== 'undefined') {\n activeRoute.value = parseRoute(window.location.hash)\n const onHashChange = () => {\n const next = parseRoute(window.location.hash)\n if (next !== activeRoute.value) navigate(next)\n else if (next === 'runtime' && editor?.getMode() !== 'preview')\n editor.setMode('preview')\n else if (next !== 'runtime' && editor?.getMode() === 'preview')\n editor.setMode('edit')\n }\n window.addEventListener('hashchange', onHashChange)\n disposers.push(() => window.removeEventListener('hashchange', onHashChange))\n window.addEventListener('keydown', handleCanvasKeydown)\n window.addEventListener('keyup', handleCanvasKeyup)\n window.addEventListener('keydown', handleWorkspaceKeydown)\n document.addEventListener('pointerdown', handleFilterOutsidePointerdown)\n document.addEventListener('keydown', handleFilterMenuKeydown)\n disposers.push(() =>\n window.removeEventListener('keydown', handleCanvasKeydown)\n )\n disposers.push(() => window.removeEventListener('keyup', handleCanvasKeyup))\n disposers.push(() =>\n window.removeEventListener('keydown', handleWorkspaceKeydown)\n )\n disposers.push(() =>\n document.removeEventListener(\n 'pointerdown',\n handleFilterOutsidePointerdown\n )\n )\n disposers.push(() =>\n document.removeEventListener('keydown', handleFilterMenuKeydown)\n )\n }\n if (activeRoute.value === 'runtime') editor.setMode('preview')\n syncVanillaRuntime()\n})\n\nonBeforeUnmount(() => {\n if (interactionPreviewFrame !== undefined && typeof window !== 'undefined')\n window.cancelAnimationFrame(interactionPreviewFrame)\n interactionPreviewFrame = undefined\n materialSourceDisposers.forEach(dispose => dispose())\n materialSourceDisposers.clear()\n disposers.splice(0).forEach(dispose => dispose())\n vanillaRuntimeInstance?.destroy()\n vanillaRuntimeInstance = undefined\n previewDialogRuntimeInstance?.destroy()\n previewDialogRuntimeInstance = undefined\n editor?.destroy()\n if (previousGridStackRenderCallback) {\n GridStack.renderCB = previousGridStackRenderCallback\n previousGridStackRenderCallback = undefined\n }\n})\n</script>\n\n<template>\n <main\n class=\"layout-demo\"\n data-layout-workspace\n :data-theme=\"theme\"\n :data-development-framework=\"activeDevelopmentFramework\"\n >\n <header class=\"topbar\">\n <div class=\"brand\">\n <span class=\"brand-mark\" aria-hidden=\"true\">\n <Grid2X2 :size=\"18\" :stroke-width=\"1.8\" />\n </span>\n <div class=\"brand-copy\">\n <strong>布局工作台</strong><span>所见即所得 · 网格布局</span>\n </div>\n <div\n class=\"development-mode custom-select\"\n :class=\"{ 'is-open': developmentModeMenuOpen }\"\n data-layout-filter-menu\n @pointerdown.stop\n >\n <button\n class=\"custom-select__trigger\"\n type=\"button\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"developmentModeMenuOpen\"\n aria-label=\"开发框架\"\n :title=\"`当前开发框架:${activeDevelopmentFrameworkLabel}`\"\n @click.stop=\"toggleDevelopmentModeMenu\"\n >\n <component\n :is=\"\n developmentFrameworks.find(\n framework => framework.id === activeDevelopmentFramework\n )?.icon ?? PanelsTopLeft\n \"\n :size=\"14\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n <span>{{ activeDevelopmentFrameworkLabel }}</span>\n <ChevronDown :size=\"12\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <div\n v-if=\"developmentModeMenuOpen\"\n class=\"custom-select__menu development-mode__menu\"\n role=\"listbox\"\n >\n <button\n v-for=\"framework in developmentFrameworks\"\n :key=\"framework.id\"\n class=\"custom-select__option\"\n type=\"button\"\n :aria-selected=\"activeDevelopmentFramework === framework.id\"\n @click=\"selectDevelopmentFramework(framework.id)\"\n >\n <component\n :is=\"framework.icon\"\n :size=\"14\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n <span>\n <strong>{{ framework.label }}</strong>\n <small>{{ framework.description }}</small>\n </span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"topbar-center\" aria-hidden=\"true\" style=\"display: none\">\n <nav class=\"route-tabs\" aria-label=\"工作区模式\">\n <button\n v-for=\"demoRoute in routes\"\n :key=\"demoRoute.id\"\n type=\"button\"\n :aria-current=\"activeRoute === demoRoute.id ? 'page' : undefined\"\n :aria-label=\"`${demoRoute.label}模式`\"\n :title=\"demoRoute.description\"\n @click=\"navigate(demoRoute.id)\"\n >\n <component\n :is=\"routeIcons[demoRoute.id]\"\n class=\"route-icon\"\n :size=\"15\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n <span>{{ demoRoute.label }}</span>\n </button>\n </nav>\n <div class=\"breakpoint-tabs\" aria-label=\"画布尺寸\">\n <button\n v-for=\"breakpoint in layout.breakpoints\"\n :key=\"breakpoint.id\"\n class=\"breakpoint-tab\"\n type=\"button\"\n :aria-pressed=\"activeBreakpoint === breakpoint.id\"\n :aria-label=\"`切换到${breakpointLabel(breakpoint.id)}画布`\"\n :title=\"`${breakpointLabel(breakpoint.id)}画布`\"\n @click=\"changeBreakpoint(breakpoint.id)\"\n >\n <component\n :is=\"\n breakpointIcons[\n breakpoint.id as keyof typeof breakpointIcons\n ] ?? Monitor\n \"\n :size=\"14\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n <span>{{ breakpointLabel(breakpoint.id) }}</span>\n </button>\n <button\n class=\"breakpoint-download-button\"\n v-if=\"false\"\n type=\"button\"\n aria-label=\"涓嬭浇褰撳墠浠g爜\"\n title=\"涓嬭浇褰撳墠浠g爜\"\n @click=\"downloadActiveCode\"\n >\n <Download :size=\"15\" :stroke-width=\"1.8\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n <div class=\"actions\">\n <button\n class=\"icon-button\"\n type=\"button\"\n aria-label=\"撤销\"\n title=\"撤销\"\n :disabled=\"!editor?.canUndo()\"\n @click=\"undo\"\n >\n <Undo2 :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"icon-button\"\n type=\"button\"\n aria-label=\"重做\"\n title=\"重做\"\n :disabled=\"!editor?.canRedo()\"\n @click=\"redo\"\n >\n <Redo2 :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"icon-button\"\n type=\"button\"\n aria-label=\"删除选中组件\"\n title=\"删除选中组件\"\n :disabled=\"!selected\"\n @click=\"removeSelected\"\n >\n <Trash2 :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"icon-button\"\n type=\"button\"\n :aria-label=\"selectedLocked ? '解锁选中组件' : '锁定选中组件'\"\n :title=\"selectedLocked ? '解锁选中组件' : '锁定选中组件'\"\n :disabled=\"!selected\"\n @click=\"toggleSelectedLock\"\n >\n <component\n :is=\"selectedLocked ? Unlock : Lock\"\n :size=\"16\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n </button>\n <button\n class=\"icon-button\"\n type=\"button\"\n :aria-label=\"selectedMovable ? '禁止移动' : '允许移动'\"\n :title=\"selectedMovable ? '禁止移动' : '允许移动'\"\n :disabled=\"!selected || selectedLocked\"\n @click=\"toggleSelectedConstraint('movable')\"\n >\n <Move :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"icon-button\"\n type=\"button\"\n :aria-label=\"selectedResizable ? '禁止调整大小' : '允许调整大小'\"\n :title=\"selectedResizable ? '禁止调整大小' : '允许调整大小'\"\n :disabled=\"!selected || selectedLocked\"\n @click=\"toggleSelectedConstraint('resizable')\"\n >\n <Maximize2 :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"icon-button theme-button\"\n type=\"button\"\n :aria-label=\"theme === 'dark' ? '切换到亮色主题' : '切换到暗色主题'\"\n :title=\"theme === 'dark' ? '切换到亮色主题' : '切换到暗色主题'\"\n @click=\"toggleTheme\"\n >\n <component\n :is=\"theme === 'dark' ? Sun : Moon\"\n :size=\"16\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n </button>\n <button\n class=\"preview-open-button\"\n type=\"button\"\n aria-label=\"打开实时预览\"\n title=\"打开实时预览\"\n @click=\"openPreviewDialog\"\n >\n <Eye :size=\"15\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n <span>实时预览</span>\n </button>\n <button\n class=\"mode-button\"\n type=\"button\"\n :aria-pressed=\"previewMode\"\n :aria-label=\"previewMode ? '返回编辑模式' : '进入预览模式'\"\n :title=\"previewMode ? '返回编辑模式' : '进入预览模式'\"\n @click=\"togglePreview\"\n >\n <component\n :is=\"previewMode ? Pencil : Eye\"\n :size=\"16\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n <span>{{ previewMode ? '编辑' : '预览' }}</span>\n </button>\n </div>\n </header>\n <section class=\"workspace\">\n <aside\n class=\"materials panel-scroll\"\n data-layout-panel=\"materials\"\n aria-label=\"物料面板\"\n >\n <div class=\"panel-heading\">\n <div>\n <span class=\"eyebrow\">工作区</span>\n <h2>物料</h2>\n </div>\n <span class=\"panel-count\">{{ materials.getAll().length }}</span>\n </div>\n <div class=\"material-toolbar\">\n <label class=\"material-search\">\n <Search :size=\"15\" :stroke-width=\"1.8\" aria-hidden=\"true\" />\n <input\n v-model=\"materialQuery\"\n type=\"search\"\n placeholder=\"搜索物料\"\n aria-label=\"搜索物料\"\n />\n </label>\n <div\n class=\"material-filter-row\"\n data-layout-filter-menu\n @keydown.esc.stop.prevent=\"handleFilterMenuKeydown\"\n >\n <div\n class=\"material-select custom-select\"\n :class=\"{ 'is-open': categoryMenuOpen }\"\n @pointerdown.stop\n >\n <button\n class=\"custom-select__trigger\"\n type=\"button\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"categoryMenuOpen\"\n aria-label=\"物料分类\"\n :title=\"`物料分类:${activeMaterialCategoryLabel}`\"\n @click.stop=\"toggleFilterMenu('category')\"\n >\n <Filter :size=\"13\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n <span>{{ activeMaterialCategoryLabel }}</span>\n <ChevronDown\n :size=\"12\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n </button>\n <div\n v-if=\"categoryMenuOpen\"\n class=\"custom-select__menu\"\n role=\"listbox\"\n >\n <button\n class=\"custom-select__option\"\n type=\"button\"\n :aria-selected=\"!materialCategoryFilter\"\n @click=\"selectMaterialCategory('')\"\n >\n 全部分类\n </button>\n <button\n v-for=\"category in materialCategories\"\n :key=\"category.id\"\n class=\"custom-select__option\"\n type=\"button\"\n :aria-selected=\"materialCategoryFilter === category.id\"\n @click=\"selectMaterialCategory(category.id)\"\n >\n {{ category.label }}\n </button>\n </div>\n </div>\n <button\n v-if=\"hasMaterialFilters\"\n class=\"material-filter-reset\"\n type=\"button\"\n aria-label=\"清除物料筛选\"\n title=\"清除筛选\"\n @click=\"resetMaterialFilters\"\n >\n <X :size=\"13\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"material-result-summary\">\n <span\n >{{ visibleMaterials.length }} /\n {{ materials.getAll().length }} 个物料</span\n >\n <span v-if=\"hasMaterialFilters\">已筛选</span>\n </div>\n </div>\n <div v-if=\"!visibleMaterials.length\" class=\"material-empty\">\n <Search :size=\"17\" :stroke-width=\"1.7\" aria-hidden=\"true\" />\n <strong>没有匹配的物料</strong>\n <span>试试更换关键词或分类</span>\n <button\n v-if=\"hasMaterialFilters\"\n type=\"button\"\n @click=\"resetMaterialFilters\"\n >\n 清除筛选\n </button>\n </div>\n <div\n v-for=\"material in visibleMaterials\"\n :key=\"material.type\"\n :ref=\"element => setMaterialElement(material.type, element)\"\n class=\"material-source grid-stack-item\"\n role=\"button\"\n tabindex=\"0\"\n :data-material-type=\"material.type\"\n :data-layout-material=\"material.type\"\n :data-layout-props=\"materialProps(material.type)\"\n :aria-label=\"`添加${material.title ?? material.label ?? material.type}`\"\n @click=\"handleMaterialClick(material.type)\"\n @keydown.enter=\"add(material.type)\"\n @keydown.space.prevent=\"add(material.type)\"\n >\n <span class=\"material-icon material-icon--metric\" aria-hidden=\"true\">\n <component\n :is=\"materialIcon(material.type)\"\n :size=\"18\"\n :stroke-width=\"1.8\"\n />\n </span>\n <span class=\"material-copy\">\n <strong>{{\n material.title ?? material.label ?? material.type\n }}</strong>\n <small>{{\n material.description ?? material.categoryLabel ?? '布局组件'\n }}</small>\n </span>\n <span class=\"material-card-meta\">\n <span class=\"material-size\"\n >{{ material.defaultLayout?.w ?? material.size?.default.w ?? 1 }}\n ×\n {{\n material.defaultLayout?.h ?? material.size?.default.h ?? 1\n }}</span\n >\n <span class=\"material-renderer-badges\">\n <span\n class=\"material-renderer-badge\"\n :class=\"{\n 'material-renderer-badge--vue':\n activeDevelopmentFramework === 'vue',\n }\"\n :title=\"`当前开发目标:${activeDevelopmentFrameworkLabel}`\"\n >\n <component\n :is=\"\n activeDevelopmentFramework === 'vue' ? PanelsTopLeft : Code2\n \"\n :size=\"11\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n <span>{{ activeDevelopmentFrameworkLabel }}</span>\n </span>\n </span>\n </span>\n <span class=\"material-card-actions\">\n <button\n class=\"material-code-button\"\n type=\"button\"\n aria-label=\"查看当前物料代码\"\n title=\"查看当前物料代码\"\n @pointerdown.stop\n @click.stop=\"openMaterialCode(material.type)\"\n >\n <Code2 :size=\"14\" :stroke-width=\"1.8\" aria-hidden=\"true\" />\n </button>\n <span class=\"material-add\" aria-hidden=\"true\">\n <Plus :size=\"16\" :stroke-width=\"1.8\" />\n </span>\n </span>\n </div>\n <div\n v-if=\"false\"\n data-legacy-source=\"metric\"\n class=\"material-source grid-stack-item\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"添加数据指标\"\n @click=\"handleMaterialClick('metric')\"\n @keydown.enter=\"add('metric')\"\n @keydown.space.prevent=\"add('metric')\"\n >\n <span class=\"material-icon material-icon--metric\" aria-hidden=\"true\">\n <ChartNoAxesColumnIncreasing :size=\"18\" :stroke-width=\"1.8\" />\n </span>\n <span><strong>数据指标</strong><small>数值与摘要</small></span>\n <span class=\"material-add\" aria-hidden=\"true\">\n <Plus :size=\"16\" :stroke-width=\"1.8\" />\n </span>\n </div>\n <div\n v-if=\"false\"\n data-legacy-source=\"chart\"\n class=\"material-source grid-stack-item\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"添加趋势图表\"\n @click=\"handleMaterialClick('chart')\"\n @keydown.enter=\"add('chart')\"\n @keydown.space.prevent=\"add('chart')\"\n >\n <span class=\"material-icon material-icon--chart\" aria-hidden=\"true\">\n <ChartSpline :size=\"18\" :stroke-width=\"1.8\" />\n </span>\n <span><strong>趋势图表</strong><small>变化与走向</small></span>\n <span class=\"material-add\" aria-hidden=\"true\">\n <Plus :size=\"16\" :stroke-width=\"1.8\" />\n </span>\n </div>\n </aside>\n <section\n class=\"canvas panel-scroll\"\n data-layout-panel=\"canvas\"\n aria-label=\"布局画布\"\n >\n <div class=\"canvas-toolbar\" aria-label=\"画布操作\">\n <div\n class=\"canvas-device-control custom-select\"\n :class=\"{ 'is-open': deviceMenuOpen }\"\n @pointerdown.stop\n >\n <button\n class=\"custom-select__trigger\"\n type=\"button\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"deviceMenuOpen\"\n aria-label=\"设备画布\"\n @click.stop=\"toggleFilterMenu('device')\"\n >\n <component\n :is=\"activeBreakpointIcon\"\n :size=\"13\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n <span>{{ breakpointLabel(activeBreakpoint) }}</span>\n <ChevronDown :size=\"12\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <div\n v-if=\"deviceMenuOpen\"\n class=\"custom-select__menu\"\n role=\"listbox\"\n >\n <button\n v-for=\"breakpoint in layout.breakpoints\"\n :key=\"breakpoint.id\"\n class=\"custom-select__option\"\n type=\"button\"\n :aria-selected=\"activeBreakpoint === breakpoint.id\"\n :aria-label=\"\n breakpointLabel(breakpoint.id) +\n ' / ' +\n breakpoint.columns +\n ' 列'\n \"\n @click=\"selectBreakpoint(breakpoint.id)\"\n >\n <component\n :is=\"\n breakpointIcons[\n breakpoint.id as keyof typeof breakpointIcons\n ] ?? Monitor\n \"\n :size=\"13\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n <span>{{ breakpointLabel(breakpoint.id) }}</span>\n <span class=\"custom-select__option-meta\"\n >{{ breakpoint.columns }} 列</span\n >\n </button>\n </div>\n </div>\n <button\n class=\"orientation-button\"\n type=\"button\"\n :aria-label=\"\n canvasOrientation === 'portrait' ? '切换为横屏' : '切换为竖屏'\n \"\n :title=\"\n canvasOrientation === 'portrait' ? '切换为横屏' : '切换为竖屏'\n \"\n @click=\"toggleCanvasOrientation\"\n >\n <component\n :is=\"\n canvasOrientation === 'portrait' ? ArrowLeftRight : ArrowUpDown\n \"\n :size=\"14\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n </button>\n <span class=\"canvas-toolbar__device-divider\" aria-hidden=\"true\" />\n <div class=\"canvas-toolbar__group\">\n <button\n class=\"canvas-tool-button\"\n type=\"button\"\n :class=\"{ active: canvasTool === 'select' }\"\n aria-label=\"选择组件\"\n title=\"选择组件\"\n @click=\"canvasTool = 'select'\"\n >\n <MousePointer2\n :size=\"15\"\n :stroke-width=\"1.9\"\n aria-hidden=\"true\"\n />\n </button>\n <button\n class=\"canvas-tool-button\"\n type=\"button\"\n :class=\"{ active: canvasTool === 'pan' }\"\n aria-label=\"移动画布\"\n title=\"移动画布(也可按住空格拖动)\"\n @click=\"canvasTool = canvasTool === 'pan' ? 'select' : 'pan'\"\n >\n <Hand :size=\"15\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"canvas-toolbar__divider\" aria-hidden=\"true\" />\n <button\n class=\"canvas-tool-button\"\n type=\"button\"\n aria-label=\"缩小画布\"\n title=\"缩小画布\"\n @click=\"zoomCanvas(-1)\"\n >\n <ZoomOut :size=\"15\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <span class=\"canvas-zoom-label\" aria-live=\"polite\">{{\n canvasZoomLabel\n }}</span>\n <button\n class=\"canvas-tool-button\"\n type=\"button\"\n aria-label=\"放大画布\"\n title=\"放大画布\"\n @click=\"zoomCanvas(1)\"\n >\n <ZoomIn :size=\"15\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"canvas-tool-button\"\n type=\"button\"\n aria-label=\"适配画布\"\n title=\"适配画布\"\n @click=\"resetCanvasView\"\n >\n <Scan :size=\"15\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n <button\n class=\"canvas-tool-button\"\n type=\"button\"\n aria-label=\"重置画布位置\"\n title=\"重置画布位置\"\n @click=\"resetCanvasPan\"\n >\n <RotateCcw :size=\"15\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n </div>\n <div\n ref=\"canvasViewport\"\n class=\"canvas-viewport\"\n :class=\"{\n 'is-panning': canvasPanning,\n 'is-pan-tool': canvasTool === 'pan',\n }\"\n @wheel=\"handleCanvasWheel\"\n @pointerdown.capture=\"handleCanvasPointerDown\"\n @pointermove=\"handleCanvasPointerMove\"\n @pointerup=\"finishCanvasPan\"\n @pointercancel=\"finishCanvasPan\"\n >\n <div\n class=\"canvas-scene\"\n :class=\"`is-${canvasOrientation}`\"\n :data-canvas-width=\"canvasSize.width\"\n :data-canvas-height=\"canvasSize.height\"\n :data-canvas-orientation=\"canvasOrientation\"\n :style=\"canvasSceneStyle\"\n >\n <section\n class=\"editor-stage\"\n aria-label=\"可视化编辑画布\"\n v-show=\"activeRoute === 'editor' && !previewMode\"\n >\n <header class=\"stage-header\">\n <div>\n <span class=\"stage-kicker\">编辑模式</span>\n <h2>拖拽布局</h2>\n </div>\n <span class=\"stage-badge\"\n ><i aria-hidden=\"true\" />{{\n breakpointLabel(activeBreakpoint)\n }}</span\n >\n </header>\n <div\n ref=\"editorGrid\"\n class=\"grid-stack layout-editor-grid\"\n role=\"grid\"\n aria-label=\"网格布局编辑器\"\n aria-multiselectable=\"true\"\n />\n </section>\n <section\n class=\"preview-stage\"\n aria-label=\"组件预览画布\"\n v-show=\"activeRoute === 'vue'\"\n >\n <header class=\"stage-header\">\n <div>\n <span class=\"stage-kicker\">预览模式</span>\n <h2>组件渲染</h2>\n </div>\n <span class=\"stage-badge\"\n ><i aria-hidden=\"true\" />同步布局</span\n >\n </header>\n <LGrid\n :document=\"layout\"\n :breakpoint=\"activeBreakpoint\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n >\n <template #item=\"{ item }\">\n <button\n class=\"widget layout-item-shell layout-item-shell--interactive\"\n type=\"button\"\n :aria-label=\"`${itemTitle(item)},${materialLabel(item.type)}`\"\n :class=\"{ selected: selected === item.id }\"\n @click=\"select(item.id)\"\n >\n <LMaterialRenderer\n :item=\"item\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n v-bind=\"item.props\"\n />\n </button>\n </template>\n </LGrid>\n </section>\n <section\n class=\"runtime-preview-stage\"\n :data-preview-framework=\"activeDevelopmentFramework\"\n aria-label=\"运行时预览画布\"\n v-show=\"activeRoute === 'runtime' && previewMode\"\n >\n <header class=\"stage-header\">\n <div>\n <span class=\"stage-kicker\">预览模式</span>\n <h2>运行时预览</h2>\n </div>\n <span class=\"stage-badge\"\n ><i aria-hidden=\"true\" />{{\n activeDevelopmentFrameworkLabel\n }}\n · 只读</span\n >\n </header>\n <LGrid\n v-if=\"activeDevelopmentFramework === 'vue'\"\n :document=\"layout\"\n :breakpoint=\"activeBreakpoint\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n >\n <template #item=\"{ item }\">\n <LMaterialRenderer\n :item=\"item\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n class=\"preview-dialog__card\"\n v-bind=\"item.props\"\n />\n </template>\n </LGrid>\n <div\n ref=\"runtimePreview\"\n class=\"runtime-preview-grid\"\n v-show=\"activeDevelopmentFramework === 'webcomponent'\"\n data-preview-renderer=\"webcomponent\"\n />\n </section>\n <section\n class=\"vanilla-runtime-stage\"\n :data-preview-framework=\"activeDevelopmentFramework\"\n aria-label=\"原生运行时画布\"\n v-show=\"activeRoute === 'vanilla'\"\n >\n <header class=\"stage-header\">\n <div>\n <span class=\"stage-kicker\">预览模式</span>\n <h2>原生运行时</h2>\n </div>\n <span class=\"stage-badge\"\n ><i aria-hidden=\"true\" />{{\n activeDevelopmentFrameworkLabel\n }}\n · 只读</span\n >\n </header>\n <LGrid\n v-if=\"activeDevelopmentFramework === 'vue'\"\n :document=\"layout\"\n :breakpoint=\"activeBreakpoint\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n >\n <template #item=\"{ item }\">\n <LMaterialRenderer\n :item=\"item\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n class=\"preview-dialog__card\"\n v-bind=\"item.props\"\n />\n </template>\n </LGrid>\n <div\n ref=\"vanillaRuntime\"\n class=\"runtime-preview-grid\"\n v-show=\"activeDevelopmentFramework === 'webcomponent'\"\n data-preview-renderer=\"webcomponent\"\n />\n </section>\n </div>\n </div>\n </section>\n <aside\n class=\"inspectors panel-scroll\"\n data-layout-panel=\"inspector\"\n aria-label=\"代码检查面板\"\n >\n <div class=\"inspector-heading\">\n <div>\n <span class=\"eyebrow\">实时输出</span>\n <h2>{{ activeCodeLabel }}</h2>\n </div>\n <button\n class=\"copy-code-button\"\n type=\"button\"\n :aria-label=\"copied ? '代码已复制' : '复制当前代码'\"\n :title=\"copied ? '代码已复制' : '复制当前代码'\"\n @click=\"copyActiveCode\"\n >\n <component\n :is=\"copied ? CopyCheck : Copy\"\n :size=\"15\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n </button>\n <button\n class=\"download-code-button\"\n type=\"button\"\n aria-label=\"下载当前代码\"\n title=\"下载当前代码\"\n @click=\"downloadActiveCode\"\n >\n <Download :size=\"15\" :stroke-width=\"1.8\" aria-hidden=\"true\" />\n </button>\n </div>\n <pre\n class=\"code-block\"\n data-code-output\n ><code v-html=\"highlightedCode\" /></pre>\n <div class=\"code-status\">\n <span class=\"code-status__dot\" aria-hidden=\"true\" />\n <span\n >已根据当前布局、{{ breakpointLabel(activeBreakpoint) }}断点实时生成\n · 共 {{ activeCodeLineCount }} 行,可滚动查看完整输出</span\n >\n </div>\n </aside>\n </section>\n <Transition name=\"preview-dialog\">\n <div\n v-if=\"previewDialogOpen\"\n class=\"preview-dialog\"\n :data-preview-framework=\"activeDevelopmentFramework\"\n :data-theme=\"theme\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"layout-preview-title\"\n >\n <button\n class=\"preview-dialog__backdrop\"\n type=\"button\"\n aria-label=\"关闭实时预览\"\n @click=\"closePreviewDialog\"\n />\n <section class=\"preview-dialog__panel\">\n <header class=\"preview-dialog__header\">\n <div>\n <span class=\"stage-kicker\">真实渲染</span>\n <h2 id=\"layout-preview-title\">实时预览</h2>\n </div>\n <div class=\"preview-dialog__header-meta\">\n <span class=\"stage-badge\"\n ><i aria-hidden=\"true\" />{{\n breakpointLabel(activeBreakpoint)\n }}</span\n >\n <button\n class=\"icon-button\"\n type=\"button\"\n aria-label=\"关闭实时预览\"\n title=\"关闭实时预览\"\n @click=\"closePreviewDialog\"\n >\n <X :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n </div>\n </header>\n <div class=\"preview-dialog__body\">\n <div class=\"preview-dialog__canvas\">\n <LGrid\n v-if=\"activeDevelopmentFramework === 'vue'\"\n :document=\"layout\"\n :breakpoint=\"activeBreakpoint\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n >\n <template #item=\"{ item }\">\n <LMaterialRenderer\n :item=\"item\"\n :materials=\"materials\"\n :target=\"activeDevelopmentFramework\"\n class=\"preview-dialog__card\"\n v-bind=\"item.props\"\n />\n </template>\n </LGrid>\n <div\n v-else\n ref=\"previewDialogRuntime\"\n class=\"runtime-preview-grid preview-dialog__runtime-grid\"\n data-preview-renderer=\"webcomponent\"\n />\n </div>\n </div>\n <footer class=\"preview-dialog__footer\">\n <span>此处展示当前布局的真实 CSS Grid 渲染结果</span>\n <button\n class=\"preview-dialog__close-button\"\n type=\"button\"\n @click=\"closePreviewDialog\"\n >\n 关闭预览\n </button>\n </footer>\n </section>\n </div>\n </Transition>\n <Transition name=\"preview-dialog\">\n <div\n v-if=\"materialCodeDialog\"\n class=\"preview-dialog material-code-dialog\"\n data-material-code-dialog=\"true\"\n :data-material-code-framework=\"activeDevelopmentFramework\"\n :data-material-code-type=\"materialCodeDialog.type\"\n :data-theme=\"theme\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"material-code-title\"\n >\n <button\n class=\"preview-dialog__backdrop\"\n type=\"button\"\n aria-label=\"关闭物料代码\"\n @click=\"closeMaterialCode\"\n />\n <section class=\"preview-dialog__panel material-code-dialog__panel\">\n <header class=\"preview-dialog__header\">\n <div>\n <span class=\"stage-kicker\">注册表物料</span>\n <h2 id=\"material-code-title\">\n {{\n materialCodeDialog.title ??\n materialCodeDialog.label ??\n materialCodeDialog.type\n }}\n </h2>\n <p class=\"material-code-dialog__subtitle\">\n {{\n activeDevelopmentFramework === 'vue'\n ? 'Vue 3 真实组件用法'\n : '原生 Web Component 标签用法'\n }}\n </p>\n </div>\n <div class=\"preview-dialog__header-meta\">\n <span class=\"stage-badge\"\n ><i aria-hidden=\"true\" />{{\n activeDevelopmentFrameworkLabel\n }}</span\n >\n <button\n class=\"icon-button\"\n type=\"button\"\n aria-label=\"关闭物料代码\"\n title=\"关闭物料代码\"\n @click=\"closeMaterialCode\"\n >\n <X :size=\"16\" :stroke-width=\"1.9\" aria-hidden=\"true\" />\n </button>\n </div>\n </header>\n <div class=\"preview-dialog__body material-code-dialog__body\">\n <pre\n class=\"code-block material-code-dialog__code\"\n ><code v-html=\"highlightedMaterialCode\" /></pre>\n </div>\n <footer class=\"preview-dialog__footer\">\n <span\n >来自当前注册表的\n {{\n activeDevelopmentFramework === 'vue'\n ? '组件导出'\n : '自定义元素标签'\n }},共 {{ materialCodeLineCount }} 行</span\n >\n <div class=\"material-code-dialog__actions\">\n <button\n class=\"copy-code-button\"\n type=\"button\"\n :aria-label=\"materialCodeCopied ? '代码已复制' : '复制物料代码'\"\n :title=\"materialCodeCopied ? '代码已复制' : '复制物料代码'\"\n @click=\"copyMaterialCode\"\n >\n <component\n :is=\"materialCodeCopied ? CopyCheck : Copy\"\n :size=\"15\"\n :stroke-width=\"1.8\"\n aria-hidden=\"true\"\n />\n </button>\n <button\n class=\"preview-dialog__close-button\"\n type=\"button\"\n @click=\"closeMaterialCode\"\n >\n 关闭\n </button>\n </div>\n </footer>\n </section>\n </div>\n </Transition>\n </main>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/layout-vue v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:47:09 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
11
+ let vue = require("vue");
12
+ //#region src/components/LMaterialDragSource.ts
13
+ const LMaterialDragSource = (0, vue.defineComponent)({
14
+ name: "LMaterialDragSource",
15
+ props: {
16
+ /** Backwards-compatible shorthand when no full material definition is supplied. */
17
+ type: {
18
+ type: String,
19
+ default: void 0
20
+ },
21
+ material: {
22
+ type: Object,
23
+ default: void 0
24
+ },
25
+ props: {
26
+ type: Object,
27
+ default: () => ({})
28
+ },
29
+ placement: {
30
+ type: Object,
31
+ default: void 0
32
+ },
33
+ editor: {
34
+ type: Object,
35
+ required: true
36
+ }
37
+ },
38
+ setup(props, { slots }) {
39
+ let unregister = () => {};
40
+ let element;
41
+ const definition = props.material;
42
+ const materialType = definition?.type ?? props.type;
43
+ if (!materialType) throw new Error("LMaterialDragSource requires type or material.");
44
+ const materialProps = {
45
+ ...definition?.defaults ?? {},
46
+ ...props.props
47
+ };
48
+ const input = () => ({
49
+ type: materialType,
50
+ props: materialProps,
51
+ placement: {
52
+ x: props.placement?.x ?? 0,
53
+ y: props.placement?.y ?? 0,
54
+ w: props.placement?.w ?? definition?.defaultLayout?.w ?? definition?.size?.default.w ?? 1,
55
+ h: props.placement?.h ?? definition?.defaultLayout?.h ?? definition?.size?.default.h ?? 1
56
+ }
57
+ });
58
+ const start = (event) => {
59
+ props.editor.beginExternalDrag({
60
+ ...input(),
61
+ element: event.currentTarget,
62
+ dataTransfer: event.dataTransfer ?? void 0
63
+ });
64
+ };
65
+ const end = () => props.editor.endExternalDrag();
66
+ (0, vue.onMounted)(() => {
67
+ if (element) unregister = props.editor.registerExternalDragSource({
68
+ ...input(),
69
+ element
70
+ });
71
+ if (typeof document !== "undefined") document.addEventListener("dragend", end);
72
+ });
73
+ (0, vue.onBeforeUnmount)(() => {
74
+ unregister();
75
+ if (typeof document !== "undefined") document.removeEventListener("dragend", end);
76
+ });
77
+ return () => (0, vue.h)("div", {
78
+ ref: (value) => {
79
+ element = value;
80
+ },
81
+ class: "ldesign-layout-material-drag-source grid-stack-item",
82
+ "data-material-type": materialType,
83
+ "data-material-category": definition?.category,
84
+ "data-material-title": definition?.title ?? definition?.label,
85
+ "aria-label": `\u6DFB\u52A0${definition?.title ?? definition?.label ?? materialType}`,
86
+ onDragstart: start
87
+ }, slots.default?.() ?? definition?.title ?? definition?.label ?? materialType);
88
+ }
89
+ });
90
+ //#endregion
91
+ exports.LMaterialDragSource = LMaterialDragSource;
92
+ /*! End of @composy/layout-vue | Powered by @composy/builder */
93
+ //# sourceMappingURL=LMaterialDragSource.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMaterialDragSource.cjs","names":[],"sources":["../../src/components/LMaterialDragSource.ts"],"sourcesContent":["import { defineComponent, h, onBeforeUnmount, onMounted } from 'vue'\nimport type { LayoutPlacement, MaterialDefinition } from '@composy/layout-core'\nimport type { LayoutEditor } from '@composy/layout-editor'\n\nexport const LMaterialDragSource = defineComponent({\n name: 'LMaterialDragSource',\n props: {\n /** Backwards-compatible shorthand when no full material definition is supplied. */\n type: { type: String, default: undefined },\n material: { type: Object as () => MaterialDefinition, default: undefined },\n props: { type: Object, default: () => ({}) },\n placement: {\n type: Object as () => Partial<LayoutPlacement>,\n default: undefined,\n },\n editor: { type: Object as () => LayoutEditor, required: true },\n },\n setup(props, { slots }) {\n let unregister = () => {}\n let element: HTMLElement | undefined\n const definition = props.material\n const materialType = definition?.type ?? props.type\n if (!materialType)\n throw new Error('LMaterialDragSource requires type or material.')\n const materialProps = {\n ...(definition?.defaults ?? {}),\n ...(props.props as Record<string, unknown>),\n }\n const input = () => ({\n type: materialType,\n props: materialProps,\n placement: {\n x: props.placement?.x ?? 0,\n y: props.placement?.y ?? 0,\n w:\n props.placement?.w ??\n definition?.defaultLayout?.w ??\n definition?.size?.default.w ??\n 1,\n h:\n props.placement?.h ??\n definition?.defaultLayout?.h ??\n definition?.size?.default.h ??\n 1,\n },\n })\n const start = (event: DragEvent) => {\n props.editor.beginExternalDrag({\n ...input(),\n element: event.currentTarget as HTMLElement,\n dataTransfer: event.dataTransfer ?? undefined,\n })\n }\n const end = () => props.editor.endExternalDrag()\n onMounted(() => {\n if (element)\n unregister = props.editor.registerExternalDragSource({\n ...input(),\n element,\n })\n if (typeof document !== 'undefined')\n document.addEventListener('dragend', end)\n })\n onBeforeUnmount(() => {\n unregister()\n if (typeof document !== 'undefined')\n document.removeEventListener('dragend', end)\n })\n return () =>\n h(\n 'div',\n {\n ref: (value: unknown) => {\n element = value as HTMLElement\n },\n class: 'ldesign-layout-material-drag-source grid-stack-item',\n 'data-material-type': materialType,\n 'data-material-category': definition?.category,\n 'data-material-title': definition?.title ?? definition?.label,\n 'aria-label': `添加${definition?.title ?? definition?.label ?? materialType}`,\n onDragstart: start,\n },\n slots.default?.() ??\n definition?.title ??\n definition?.label ??\n materialType\n )\n },\n})\n"],"mappings":";;;;;;;;;;;;AAIO,MAAM,uBAAA,GAAA,IAAA,gBAAA,CAAsC;CACjD,MAAM;CACN,OAAO;;EAEL,MAAM;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EACzC,UAAU;GAAE,MAAM;GAAoC,SAAS,KAAA;EAAU;EACzE,OAAO;GAAE,MAAM;GAAQ,gBAAgB,CAAC;EAAG;EAC3C,WAAW;GACT,MAAM;GACN,SAAS,KAAA;EACX;EACA,QAAQ;GAAE,MAAM;GAA8B,UAAU;EAAK;CAC/D;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,IAAI,mBAAmB,CAAC;EACxB,IAAI;EACJ,MAAM,aAAa,MAAM;EACzB,MAAM,eAAe,YAAY,QAAQ,MAAM;EAC/C,IAAI,CAAC,cACH,MAAM,IAAI,MAAM,gDAAgD;EAClE,MAAM,gBAAgB;GACpB,GAAI,YAAY,YAAY,CAAC;GAC7B,GAAI,MAAM;EACZ;EACA,MAAM,eAAe;GACnB,MAAM;GACN,OAAO;GACP,WAAW;IACT,GAAG,MAAM,WAAW,KAAK;IACzB,GAAG,MAAM,WAAW,KAAK;IACzB,GACE,MAAM,WAAW,KACjB,YAAY,eAAe,KAC3B,YAAY,MAAM,QAAQ,KAC1B;IACF,GACE,MAAM,WAAW,KACjB,YAAY,eAAe,KAC3B,YAAY,MAAM,QAAQ,KAC1B;GACJ;EACF;EACA,MAAM,SAAS,UAAqB;GAClC,MAAM,OAAO,kBAAkB;IAC7B,GAAG,MAAM;IACT,SAAS,MAAM;IACf,cAAc,MAAM,gBAAgB,KAAA;GACtC,CAAC;EACH;EACA,MAAM,YAAY,MAAM,OAAO,gBAAgB;EAC/C,CAAA,GAAA,IAAA,UAAA,OAAgB;GACd,IAAI,SACF,aAAa,MAAM,OAAO,2BAA2B;IACnD,GAAG,MAAM;IACT;GACF,CAAC;GACH,IAAI,OAAO,aAAa,aACtB,SAAS,iBAAiB,WAAW,GAAG;EAC5C,CAAC;EACD,CAAA,GAAA,IAAA,gBAAA,OAAsB;GACpB,WAAW;GACX,IAAI,OAAO,aAAa,aACtB,SAAS,oBAAoB,WAAW,GAAG;EAC/C,CAAC;EACD,cAAA,GAAA,IAAA,EAAA,CAEI,OACA;GACE,MAAM,UAAmB;IACvB,UAAU;GACZ;GACA,OAAO;GACP,sBAAsB;GACtB,0BAA0B,YAAY;GACtC,uBAAuB,YAAY,SAAS,YAAY;GACxD,cAAc,eAAK,YAAY,SAAS,YAAY,SAAS;GAC7D,aAAa;EACf,GACA,MAAM,UAAU,KACd,YAAY,SACZ,YAAY,SACZ,YACJ;CACJ;AACF,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { LayoutPlacement, MaterialDefinition } from '@composy/layout-core';
2
+ import type { LayoutEditor } from '@composy/layout-editor';
3
+ export declare const LMaterialDragSource: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ /** Backwards-compatible shorthand when no full material definition is supplied. */
5
+ type: {
6
+ type: StringConstructor;
7
+ default: any;
8
+ };
9
+ material: {
10
+ type: () => MaterialDefinition;
11
+ default: any;
12
+ };
13
+ props: {
14
+ type: ObjectConstructor;
15
+ default: () => {};
16
+ };
17
+ placement: {
18
+ type: () => Partial<LayoutPlacement>;
19
+ default: any;
20
+ };
21
+ editor: {
22
+ type: () => LayoutEditor;
23
+ required: true;
24
+ };
25
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
26
+ [key: string]: any;
27
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
28
+ /** Backwards-compatible shorthand when no full material definition is supplied. */
29
+ type: {
30
+ type: StringConstructor;
31
+ default: any;
32
+ };
33
+ material: {
34
+ type: () => MaterialDefinition;
35
+ default: any;
36
+ };
37
+ props: {
38
+ type: ObjectConstructor;
39
+ default: () => {};
40
+ };
41
+ placement: {
42
+ type: () => Partial<LayoutPlacement>;
43
+ default: any;
44
+ };
45
+ editor: {
46
+ type: () => LayoutEditor;
47
+ required: true;
48
+ };
49
+ }>> & Readonly<{}>, {
50
+ props: Record<string, any>;
51
+ type: string;
52
+ placement: Partial<LayoutPlacement>;
53
+ material: MaterialDefinition<import("@composy/layout-core").JsonRecord>;
54
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
55
+ //# sourceMappingURL=LMaterialDragSource.d.ts.map
@@ -0,0 +1,49 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/layout-vue v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:47:09 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
11
+ const require_material_renderer = require("./material-renderer.cjs");
12
+ let vue = require("vue");
13
+ //#region src/components/LMaterialRenderer.ts
14
+ const LMaterialRenderer = (0, vue.defineComponent)({
15
+ name: "LMaterialRenderer",
16
+ props: {
17
+ item: {
18
+ type: Object,
19
+ required: true
20
+ },
21
+ materials: {
22
+ type: [Object, Array],
23
+ default: void 0
24
+ },
25
+ target: {
26
+ type: String,
27
+ default: "vue"
28
+ },
29
+ placement: {
30
+ type: Object,
31
+ default: void 0
32
+ },
33
+ breakpointId: {
34
+ type: String,
35
+ default: "desktop"
36
+ }
37
+ },
38
+ setup(props, { attrs }) {
39
+ return () => {
40
+ const rendered = require_material_renderer.renderMaterialForTarget(props.materials, props.item, props.target, props.placement, props.breakpointId);
41
+ if (!rendered) return null;
42
+ return (0, vue.h)(rendered, attrs);
43
+ };
44
+ }
45
+ });
46
+ //#endregion
47
+ exports.LMaterialRenderer = LMaterialRenderer;
48
+ /*! End of @composy/layout-vue | Powered by @composy/builder */
49
+ //# sourceMappingURL=LMaterialRenderer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMaterialRenderer.cjs","names":[],"sources":["../../src/components/LMaterialRenderer.ts"],"sourcesContent":["import { defineComponent, h, type PropType } from 'vue'\nimport type { LayoutNode, LayoutPlacement } from '@composy/layout-core'\nimport {\n renderMaterialForTarget,\n type LayoutRenderTarget,\n type VueMaterialSource,\n} from './material-renderer'\n\n/**\n * A target-aware renderer for one registered layout material.\n *\n * `LGrid` owns the placement shell; this component owns the renderer lookup.\n * Consumers can therefore use the same item renderer in an editor, a preview,\n * a modal or their own grid implementation without duplicating framework\n * branching logic.\n */\nexport const LMaterialRenderer = defineComponent({\n name: 'LMaterialRenderer',\n props: {\n item: { type: Object as PropType<LayoutNode>, required: true },\n materials: {\n type: [Object, Array] as PropType<VueMaterialSource>,\n default: undefined,\n },\n target: {\n type: String as PropType<LayoutRenderTarget>,\n default: 'vue',\n },\n placement: {\n type: Object as PropType<LayoutPlacement>,\n default: undefined,\n },\n breakpointId: { type: String, default: 'desktop' },\n },\n setup(props, { attrs }) {\n return () => {\n const rendered = renderMaterialForTarget(\n props.materials,\n props.item,\n props.target,\n props.placement,\n props.breakpointId\n )\n if (!rendered) return null\n return h(rendered, attrs)\n }\n },\n})\n\nexport type { LayoutRenderTarget }\n"],"mappings":";;;;;;;;;;;;;AAgBO,MAAM,qBAAA,GAAA,IAAA,gBAAA,CAAoC;CAC/C,MAAM;CACN,OAAO;EACL,MAAM;GAAE,MAAM;GAAgC,UAAU;EAAK;EAC7D,WAAW;GACT,MAAM,CAAC,QAAQ,KAAK;GACpB,SAAS,KAAA;EACX;EACA,QAAQ;GACN,MAAM;GACN,SAAS;EACX;EACA,WAAW;GACT,MAAM;GACN,SAAS,KAAA;EACX;EACA,cAAc;GAAE,MAAM;GAAQ,SAAS;EAAU;CACnD;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,aAAa;GACX,MAAM,WAAW,0BAAA,wBACf,MAAM,WACN,MAAM,MACN,MAAM,QACN,MAAM,WACN,MAAM,YACR;GACA,IAAI,CAAC,UAAU,OAAO;GACtB,QAAA,GAAA,IAAA,EAAA,CAAS,UAAU,KAAK;EAC1B;CACF;AACF,CAAC"}