{
  "version": 3,
  "sources": ["../../src/document/components/chrome/debugbar/useFindNodeById.ts", "../../src/document/components/chrome/debugbar/treeView/TreeView.tsx", "../../src/document/components/chrome/debugbar/treeView/NodeSelectionContext.ts", "../../src/document/components/chrome/debugbar/crdt/useStoredCrdtRowFilter.ts", "../../src/document/components/chrome/debugbar/treeView/PropertyPanel.tsx", "../../src/document/components/chrome/debugbar/treeView/CachePanelSection.tsx", "../../src/document/components/chrome/debugbar/treeView/PropertyPanel.styles.ts", "../../src/document/components/chrome/debugbar/treeView/PropertyRow.tsx", "../../src/document/components/chrome/debugbar/treeView/IconCollapse.tsx", "../../src/document/components/chrome/debugbar/treeView/IconCopy.tsx", "../../src/document/components/chrome/debugbar/treeView/ModuleIdentifierValue.tsx", "../../src/document/components/chrome/debugbar/treeView/NodeTypeTag.tsx", "../../src/document/components/chrome/debugbar/treeView/NodeRefValue.tsx", "../../src/document/components/chrome/debugbar/treeView/ObjectChildren.tsx", "../../src/document/components/chrome/debugbar/treeView/PreviewButton.tsx", "../../src/document/components/chrome/debugbar/treeView/IconEye.tsx", "../../src/document/components/chrome/debugbar/treeView/nodeUtils.ts", "../../src/document/components/chrome/debugbar/treeView/propertyUtils.ts", "../../src/document/components/chrome/debugbar/treeView/resolveNodeRef.ts", "../../src/document/components/chrome/debugbar/treeView/IconInfoCircle.tsx", "../../src/document/components/chrome/debugbar/treeView/IconScope.tsx", "../../src/document/components/chrome/debugbar/treeView/IconSortAlpha.tsx", "../../src/document/components/chrome/debugbar/treeView/IconSortGrouped.tsx", "../../src/document/components/chrome/debugbar/treeView/nodeInfo.ts", "../../src/document/components/chrome/debugbar/treeView/ResizeHandle.tsx", "../../src/document/components/chrome/debugbar/treeView/ResizeHandle.styles.ts", "../../src/document/components/chrome/debugbar/treeView/SyncSelectionButton.styles.ts", "../../src/document/components/chrome/debugbar/treeView/SyncSelectionIcon.tsx", "../../src/document/components/chrome/debugbar/treeView/SyncSelectionButton.tsx", "../../src/document/components/chrome/debugbar/treeView/TreeView.styles.ts", "../../src/document/components/chrome/debugbar/treeView/filters/Filters.tsx", "../../src/document/components/chrome/debugbar/treeView/filters/Filters.styles.ts", "../../src/document/components/chrome/debugbar/treeView/rootChildrenSorting.ts", "../../src/document/components/chrome/debugbar/treeView/filters/treeFilter.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/ColumnView.tsx", "../../src/document/components/chrome/debugbar/treeView/viewModes/Column.styles.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/Column.tsx", "../../src/document/components/chrome/debugbar/treeView/VirtualizedList.tsx", "../../src/document/components/chrome/debugbar/treeView/viewModes/ColumnRow.tsx", "../../src/document/components/chrome/debugbar/treeView/TreeBadge.styles.ts", "../../src/document/components/chrome/debugbar/treeView/TreeBadge.tsx", "../../src/document/components/chrome/debugbar/treeView/useNodeContextMenu.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/ColumnRow.styles.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/ColumnView.styles.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/columnUtils.ts", "../../src/document/components/chrome/debugbar/treeView/IconCollapseAll.tsx", "../../src/document/components/chrome/debugbar/treeView/TreeNodeRow.tsx", "../../src/document/components/chrome/debugbar/treeView/TreeNodeRow.styles.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/IndentedTreeView.styles.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/IndentedTreeView.tsx", "../../src/document/components/chrome/debugbar/treeView/viewModes/ViewModeToggle.styles.ts", "../../src/document/components/chrome/debugbar/treeView/viewModes/ViewModeToggle.tsx", "../../src/document/models/CanvasTree/nodes/utils/collectMinimalHiddenAncestorSet.ts"],
  "sourcesContent": ["import { showCanvasNode } from \"document/components/utils/showCanvasNode.ts\"\nimport engine from \"document/engine.ts\"\nimport React, { useCallback } from \"react\"\n\nexport function useFindNodeById() {\n\tconst [isLoading, setIsLoading] = React.useState(false)\n\n\tconst findNodeById = useCallback(async (id: string) => {\n\t\tlet node = engine.tree.getNode(id)\n\t\tif (!node) {\n\t\t\t// The node might be in a scope that hasn\u2019t been loaded yet. Force-load the whole project.\n\t\t\tconst loader = engine.tree.getService(\"loader\")\n\t\t\tif (loader && loader.numberOfScopesToLoad() > 0) {\n\t\t\t\tsetIsLoading(true)\n\t\t\t\tloader.prioritizeLoadingAllData({\n\t\t\t\t\toperationInBackground: false,\n\t\t\t\t\toperationName: \"debugbar_find_node_by_id\",\n\t\t\t\t})\n\t\t\t\tawait loader.afterAllDataLoaded()\n\t\t\t\tsetIsLoading(false)\n\t\t\t}\n\t\t\tnode = engine.tree.getNode(id)\n\t\t}\n\n\t\tif (!node) {\n\t\t\talert(`Node with ID \u201C${id}\u201D not found.`)\n\t\t\treturn\n\t\t}\n\n\t\tshowCanvasNode(engine, node)\n\n\t\t// biome-ignore lint/suspicious/noConsole: it's an intentional log\n\t\tconsole.log(`Node with ID ${id}:`, engine.tree.getNode(id))\n\t}, [])\n\n\treturn { isLoading, findNodeById } as const\n}\n", "import { isCommandKeyPressed } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { showCanvasNode } from \"document/components/utils/showCanvasNode.ts\"\nimport type { DataTree } from \"document/crdt/data-tree/DataTree.ts\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasTree } from \"document/models/CanvasTree/CanvasTree.ts\"\nimport { type CanvasNode, isScopeNode } from \"document/models/CanvasTree/index.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { useLocalStorageState } from \"../useLocalStorageState.tsx\"\nimport { NodeSelectionContext } from \"./NodeSelectionContext.ts\"\nimport { PropertyPanel } from \"./PropertyPanel.tsx\"\nimport { ResizeHandle } from \"./ResizeHandle.tsx\"\nimport { SyncSelectionButton } from \"./SyncSelectionButton.tsx\"\nimport * as styles from \"./TreeView.styles.ts\"\nimport { Filters } from \"./filters/Filters.tsx\"\nimport type { TreeFilter } from \"./filters/treeFilter.ts\"\nimport { buildMatchList, buildVisibleSet } from \"./filters/treeFilter.ts\"\nimport { PAGE_SIZE, canNavigateToNode, ensureVisibleLimitsForPath, findPathToNode } from \"./nodeUtils.ts\"\nimport { ColumnView } from \"./viewModes/ColumnView.tsx\"\nimport { IndentedTreeView } from \"./viewModes/IndentedTreeView.tsx\"\nimport { type ViewMode, ViewModeToggle } from \"./viewModes/ViewModeToggle.tsx\"\n\nlet _treeViewSelectedNodeId: string | null = null\n\nexport function getTreeViewSelectedNodeId(): string | null {\n\treturn _treeViewSelectedNodeId\n}\n\nexport class TreeState {\n\tprivate canvasTreeProxy?: CanvasTree\n\n\tconstructor(\n\t\tprivate canvasTree: CanvasTree,\n\t\tprivate dataTree?: DataTree,\n\t) {\n\t\tif (this.dataTree) {\n\t\t\tthis.canvasTreeProxy = this.dataTree.getCanvasTreeProxy()\n\t\t}\n\t}\n\n\tget tree() {\n\t\treturn this.canvasTreeProxy ?? this.canvasTree\n\t}\n\n\tonlyInDataTree<T extends CanvasNode>(node: T): boolean {\n\t\tif (!this.dataTree) return false\n\t\tif (!this.canvasTree.has(node.id) && this.dataTree.isDataNode(node)) return true\n\n\t\t// Is is a partially loaded scope?\n\t\t// Technically these are in the CanvasTree but without loaded children,\n\t\t// so we want to treat them as data-only.\n\t\tconst nodeInCanvasTree = this.canvasTree.get(node.id)\n\t\treturn isScopeNode(nodeInCanvasTree) && !nodeInCanvasTree.isLoaded()\n\t}\n}\n\ninterface Props {\n\tsetActiveSection: (section: string) => void\n}\n\nexport function TreeView({ setActiveSection }: Props) {\n\t// DebugBar passes an 'update' prop to this component,\n\t// but we don't need it, and don't want to re-render\n\t// every time it changes.\n\treturn <TreeViewInner setActiveSection={setActiveSection} />\n}\n\nconst MAX_HISTORY = 50\nconst PROPERTY_PANEL_MIN_PERCENT = 20\nconst PROPERTY_PANEL_MAX_PERCENT = 80\n\nfunction clampPropertyPanelPercent(value: number): number {\n\treturn Math.min(PROPERTY_PANEL_MAX_PERCENT, Math.max(PROPERTY_PANEL_MIN_PERCENT, value))\n}\n\ninterface HistoryState {\n\tstack: Array<string | null>\n\tcursor: number\n}\n\nconst emptyHistory: HistoryState = { stack: [null], cursor: 0 }\n\nfunction historySessionKey(): string {\n\treturn `treeViewer-history-${engine.stores.projectStore.projectId}`\n}\n\nfunction readPersistedHistory(): HistoryState {\n\ttry {\n\t\tconst raw = sessionStorage.getItem(historySessionKey())\n\t\tif (!raw) return emptyHistory\n\t\tconst parsed = JSON.parse(raw)\n\t\tif (\n\t\t\tArray.isArray(parsed.stack) &&\n\t\t\tparsed.stack.length > 0 &&\n\t\t\ttypeof parsed.cursor === \"number\" &&\n\t\t\tparsed.cursor >= 0 &&\n\t\t\tparsed.cursor < parsed.stack.length\n\t\t) {\n\t\t\treturn parsed as HistoryState\n\t\t}\n\t} catch {\n\t\t// ignore corrupt data\n\t}\n\treturn emptyHistory\n}\n\nfunction persistHistory(history: HistoryState) {\n\ttry {\n\t\tsessionStorage.setItem(historySessionKey(), JSON.stringify(history))\n\t} catch {\n\t\t// ignore\n\t}\n}\n\nconst TreeViewInner = memo(function TreeViewInner({ setActiveSection }: Props) {\n\tconst treeState = useEngineState(\n\t\t() => {\n\t\t\tif (!engine.stores.loadingStore.hasMinimalEditableData) return null\n\t\t\tconst treeStore = engine.stores.treeStore\n\t\t\treturn new TreeState(treeStore.tree, treeStore.getDataTree())\n\t\t},\n\t\t[],\n\t\t[EngineChange.Tree],\n\t)\n\tconst [viewMode, setViewMode] = useLocalStorageState<ViewMode>(\"debugbar.treeViewMode\", \"tree\")\n\tconst [filters, setFilters] = useState<TreeFilter[]>([])\n\tconst [followSelection, setFollowSelection] = useLocalStorageState(\"debugbar.followSelection\", true)\n\tconst [expandedNodeIds, setExpandedNodeIds] = useState<ReadonlySet<string>>(() => new Set())\n\tconst [visibleLimits, setVisibleLimits] = useState<ReadonlyMap<string, number>>(() => new Map())\n\tconst [canGoBack, setCanGoBack] = useState(false)\n\tconst [canGoForward, setCanGoForward] = useState(false)\n\tconst [storedPropertyPanelPercent, setStoredPropertyPanelPercent] = useLocalStorageState(\n\t\t\"debugbar.treePropertyPanelPercent\",\n\t\t40,\n\t)\n\tconst propertyPanelPercent = clampPropertyPanelPercent(storedPropertyPanelPercent)\n\tconst contentAreaRef = useRef<HTMLDivElement | null>(null)\n\tconst nodeRefsMap = useRef(new Map<string, HTMLElement>())\n\tconst filterSetterRef = useRef<(text: string) => void>(() => {})\n\tconst setFilterText = useCallback((text: string) => filterSetterRef.current(text), [])\n\tconst registerNodeRef = useCallback((nodeId: string, el: HTMLElement | null) => {\n\t\tif (el) nodeRefsMap.current.set(nodeId, el)\n\t\telse nodeRefsMap.current.delete(nodeId)\n\t}, [])\n\tconst historyRef = useRef<HistoryState>(readPersistedHistory())\n\tconst [selectedNodeId, setSelectedNodeId] = useState<string | null>(\n\t\t() => historyRef.current.stack[historyRef.current.cursor] ?? null,\n\t)\n\n\tconst updateHistoryFlags = useCallback(() => {\n\t\tconst { stack, cursor } = historyRef.current\n\t\tsetCanGoBack(cursor > 0)\n\t\tsetCanGoForward(cursor < stack.length - 1)\n\t}, [])\n\n\tconst pushHistory = useCallback(\n\t\t(nodeId: string | null) => {\n\t\t\tconst h = historyRef.current\n\t\t\tif (h.stack[h.cursor] === nodeId) return\n\t\t\th.stack = h.stack.slice(0, h.cursor + 1)\n\t\t\th.stack.push(nodeId)\n\t\t\tif (h.stack.length > MAX_HISTORY) {\n\t\t\t\th.stack = h.stack.slice(h.stack.length - MAX_HISTORY)\n\t\t\t}\n\t\t\th.cursor = h.stack.length - 1\n\t\t\tupdateHistoryFlags()\n\t\t\tpersistHistory(h)\n\t\t},\n\t\t[updateHistoryFlags],\n\t)\n\n\tconst revealNode = useCallback(\n\t\t(nodeId: string) => {\n\t\t\tif (!treeState) return\n\t\t\tconst path = findPathToNode(treeState.tree, nodeId)\n\t\t\tif (path) {\n\t\t\t\tsetExpandedNodeIds(prev => {\n\t\t\t\t\tconst next = new Set(prev)\n\t\t\t\t\tnext.add(treeState.tree.root.id)\n\t\t\t\t\tfor (const id of path) next.add(id)\n\t\t\t\t\treturn next\n\t\t\t\t})\n\t\t\t\tsetVisibleLimits(prev => ensureVisibleLimitsForPath(treeState.tree, nodeId, prev))\n\t\t\t}\n\t\t},\n\t\t[treeState],\n\t)\n\n\t// Scroll the selected node into view within its scroll container.\n\tconst scrollToNode = useCallback((nodeId: string) => {\n\t\tconst attempt = (retries: number) => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst el = nodeRefsMap.current.get(nodeId)\n\t\t\t\tif (!el) {\n\t\t\t\t\tif (retries > 0) attempt(retries - 1)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet scrollParent: HTMLElement | null = el.parentElement\n\t\t\t\twhile (scrollParent) {\n\t\t\t\t\tconst { overflowY } = getComputedStyle(scrollParent)\n\t\t\t\t\tif (overflowY === \"auto\" || overflowY === \"scroll\") break\n\t\t\t\t\tscrollParent = scrollParent.parentElement\n\t\t\t\t}\n\t\t\t\tif (!scrollParent) return\n\t\t\t\tconst parentRect = scrollParent.getBoundingClientRect()\n\t\t\t\tconst elRect = el.getBoundingClientRect()\n\t\t\t\tconst isVisible = elRect.top >= parentRect.top && elRect.bottom <= parentRect.bottom\n\t\t\t\tif (!isVisible) {\n\t\t\t\t\tel.scrollIntoView({ block: \"center\", behavior: \"smooth\" })\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tattempt(5)\n\t}, [])\n\n\tuseEffect(() => {\n\t\t_treeViewSelectedNodeId = selectedNodeId\n\t}, [selectedNodeId])\n\n\tconst hasRestoredRef = useRef(false)\n\tuseEffect(() => {\n\t\tif (!treeState || hasRestoredRef.current) return\n\t\thasRestoredRef.current = true\n\t\tsetExpandedNodeIds(prev => new Set([...prev, treeState.tree.root.id]))\n\t\tif (selectedNodeId === null) {\n\t\t\tconst rootId = treeState.tree.root.id\n\t\t\tsetSelectedNodeId(rootId)\n\t\t\tpushHistory(rootId)\n\t\t\trevealNode(rootId)\n\t\t} else if (treeState.tree.has(selectedNodeId)) {\n\t\t\trevealNode(selectedNodeId)\n\t\t}\n\t\tupdateHistoryFlags()\n\t}, [treeState, selectedNodeId, revealNode, updateHistoryFlags, pushHistory])\n\n\tconst goBack = useCallback(() => {\n\t\tconst h = historyRef.current\n\t\tif (h.cursor <= 0) return\n\t\th.cursor--\n\t\tconst nodeId = h.stack[h.cursor] ?? null\n\t\tselectionSourceRef.current = null\n\t\tif (nodeId) {\n\t\t\trevealNode(nodeId)\n\t\t\tscrollToNode(nodeId)\n\t\t}\n\t\tsetSelectedNodeId(nodeId)\n\t\tupdateHistoryFlags()\n\t\tpersistHistory(h)\n\t}, [revealNode, scrollToNode, updateHistoryFlags])\n\n\tconst goForward = useCallback(() => {\n\t\tconst h = historyRef.current\n\t\tif (h.cursor >= h.stack.length - 1) return\n\t\th.cursor++\n\t\tconst nodeId = h.stack[h.cursor] ?? null\n\t\tselectionSourceRef.current = null\n\t\tif (nodeId) {\n\t\t\trevealNode(nodeId)\n\t\t\tscrollToNode(nodeId)\n\t\t}\n\t\tsetSelectedNodeId(nodeId)\n\t\tupdateHistoryFlags()\n\t\tpersistHistory(h)\n\t}, [revealNode, scrollToNode, updateHistoryFlags])\n\n\tuseEffect(() => {\n\t\tfunction hasFocus() {\n\t\t\treturn !!contentAreaRef.current?.contains(document.activeElement)\n\t\t}\n\t\tfunction handleKeyDown(e: KeyboardEvent) {\n\t\t\tif (!hasFocus()) return\n\t\t\tif (isCommandKeyPressed(e) && !e.shiftKey && !e.altKey) {\n\t\t\t\tif (e.code === \"BracketLeft\") {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\tgoBack()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (e.code === \"BracketRight\") {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\tgoForward()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction handleMouseUp(e: MouseEvent) {\n\t\t\tif (!hasFocus()) return\n\t\t\tif (e.button === 3) {\n\t\t\t\te.preventDefault()\n\t\t\t\tgoBack()\n\t\t\t} else if (e.button === 4) {\n\t\t\t\te.preventDefault()\n\t\t\t\tgoForward()\n\t\t\t}\n\t\t}\n\t\twindow.addEventListener(\"keydown\", handleKeyDown, true)\n\t\twindow.addEventListener(\"mouseup\", handleMouseUp, true)\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"keydown\", handleKeyDown, true)\n\t\t\twindow.removeEventListener(\"mouseup\", handleMouseUp, true)\n\t\t}\n\t}, [goBack, goForward])\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: only trigger on view mode change\n\tuseEffect(() => {\n\t\tif (!selectedNodeId) return\n\t\tif (viewMode === \"tree\") {\n\t\t\trevealNode(selectedNodeId)\n\t\t}\n\t\tscrollToNode(selectedNodeId)\n\t\t// Focus selected element so keyboard navigation works without an extra click\n\t\trequestAnimationFrame(() => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tnodeRefsMap.current.get(selectedNodeId)?.focus()\n\t\t\t})\n\t\t})\n\t}, [viewMode])\n\n\tconst canvasSelectedIds = engine.stores.selectionStore.useState(state => state.ids)\n\tconst activeScopeId = engine.stores.scopeStore.useState(state => state.active.id)\n\n\tconst visibleIds = useMemo(\n\t\t() => (treeState ? buildVisibleSet(treeState.tree.root, filters) : new Set<string>()),\n\t\t[treeState, filters],\n\t)\n\n\tconst matchIdsList = useMemo(\n\t\t() => (treeState ? buildMatchList(treeState.tree.root, filters) : []),\n\t\t[treeState, filters],\n\t)\n\n\tconst matchIdsSet = useMemo(() => new Set(matchIdsList), [matchIdsList])\n\n\tconst skipCanvasSyncRef = useRef(false)\n\tconst lastCanvasSyncedIdRef = useRef<string | null>(null)\n\tconst selectionSourceRef = useRef<\"canvas\" | null>(null)\n\n\t// Canvas \u2192 Viewer: react to canvas selection changes\n\tuseEffect(() => {\n\t\tif (!followSelection || !treeState) return\n\t\tif (skipCanvasSyncRef.current) {\n\t\t\tskipCanvasSyncRef.current = false\n\t\t\treturn\n\t\t}\n\t\tconst firstId = canvasSelectedIds[0] ?? null\n\t\tif (firstId === lastCanvasSyncedIdRef.current) return\n\t\tlastCanvasSyncedIdRef.current = firstId\n\t\tselectionSourceRef.current = \"canvas\"\n\t\tsetSelectedNodeId(firstId)\n\t\tif (firstId) {\n\t\t\tpushHistory(firstId)\n\t\t\trevealNode(firstId)\n\t\t\tscrollToNode(firstId)\n\t\t}\n\t}, [followSelection, canvasSelectedIds, treeState, revealNode, scrollToNode, pushHistory])\n\n\t// Canvas \u2192 Viewer: when the active scope changes (e.g. user clicks a page),\n\t// select that scope node in the tree if nothing else is selected on canvas.\n\tconst prevScopeIdRef = useRef(activeScopeId)\n\tuseEffect(() => {\n\t\tif (prevScopeIdRef.current === activeScopeId) return\n\t\tprevScopeIdRef.current = activeScopeId\n\t\tif (!followSelection || !treeState) return\n\t\tif (skipCanvasSyncRef.current) {\n\t\t\tskipCanvasSyncRef.current = false\n\t\t\treturn\n\t\t}\n\t\tconst hasCanvasSelection = canvasSelectedIds.length > 0\n\t\tif (!hasCanvasSelection && activeScopeId) {\n\t\t\tlastCanvasSyncedIdRef.current = null\n\t\t\tselectionSourceRef.current = \"canvas\"\n\t\t\tsetSelectedNodeId(activeScopeId)\n\t\t\tpushHistory(activeScopeId)\n\t\t\trevealNode(activeScopeId)\n\t\t\tscrollToNode(activeScopeId)\n\t\t}\n\t}, [activeScopeId, followSelection, treeState, canvasSelectedIds, pushHistory, revealNode, scrollToNode])\n\n\t// Viewer \u2192 Canvas: sync canvas when selectedNodeId changes.\n\t// When the target scope hasn't been loaded yet (e.g. a Smart Component never opened),\n\t// we pre-load it before calling showCanvasNode so that selection + zoom run in the\n\t// correct scope context. Nodes inside unloaded scopes only exist in the data tree,\n\t// so we fall back to it when the canvas tree doesn't have the node.\n\t// Skip entirely when selection came from the canvas \u2014 the canvas already has it,\n\t// and we must not zoom (selectionSourceRef is set by Canvas \u2192 Viewer before setState).\n\tuseEffect(() => {\n\t\tif (!followSelection || !selectedNodeId) return\n\t\tif (selectionSourceRef.current === \"canvas\") return\n\n\t\tlet node = engine.tree.getNode(selectedNodeId)\n\t\tlet scopeId: string | undefined\n\n\t\tif (!node) {\n\t\t\tconst dataTree = engine.stores.treeStore.getDataTree()\n\t\t\tif (dataTree) {\n\t\t\t\tnode = dataTree.getCanvasTreeProxy().get(selectedNodeId)\n\t\t\t\tif (node) scopeId = dataTree.getScopeNodeFor(node)?.id\n\t\t\t}\n\t\t}\n\t\tif (!node || !canNavigateToNode(node)) return\n\n\t\tif (!scopeId) scopeId = engine.tree.getScopeNodeFor(node)?.id\n\n\t\t// Scope nodes (WebPageNode, SmartComponentNode, etc.) can't be \"selected\"\n\t\t// on the canvas \u2014 they ARE the canvas. Attempting selectionStore.set() on\n\t\t// them causes a bounce. Instead, switch scope if needed and clear selection.\n\t\tif (isScopeNode(node)) {\n\t\t\tskipCanvasSyncRef.current = true\n\t\t\tlastCanvasSyncedIdRef.current = null\n\t\t\tselectionSourceRef.current = null\n\t\t\tif (node.id !== engine.stores.scopeStore.activeId) {\n\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\tengine.stores.scopeStore.selectByNode(node.id)\n\t\t\t\t\tengine.stores.selectionStore.clear()\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tengine.stores.selectionStore.clear()\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tskipCanvasSyncRef.current = true\n\t\tconst loader = scopeId ? engine.tree.getService(\"loader\") : null\n\t\tif (loader && scopeId && !loader.hasLoadedScope(scopeId)) {\n\t\t\tloader.prioritizeLoadingScope(scopeId, () => {\n\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\tconst loaded = engine.tree.getNode(selectedNodeId)\n\t\t\t\t\tif (loaded) showCanvasNode(engine, loaded, true)\n\t\t\t\t\tselectionSourceRef.current = null\n\t\t\t\t})\n\t\t\t})\n\t\t} else {\n\t\t\tshowCanvasNode(engine, node, true)\n\t\t\tselectionSourceRef.current = null\n\t\t}\n\t}, [followSelection, selectedNodeId])\n\n\tconst onSelectNode = useCallback(\n\t\t(id: string | null) => {\n\t\t\tselectionSourceRef.current = null\n\t\t\tsetSelectedNodeId(id)\n\t\t\tif (id) pushHistory(id)\n\t\t},\n\t\t[pushHistory],\n\t)\n\n\tconst navigateToMatch = useCallback(\n\t\t(nodeId: string) => {\n\t\t\tselectionSourceRef.current = null\n\t\t\trevealNode(nodeId)\n\t\t\tsetSelectedNodeId(nodeId)\n\t\t\tpushHistory(nodeId)\n\t\t\tscrollToNode(nodeId)\n\t\t},\n\t\t[revealNode, pushHistory, scrollToNode],\n\t)\n\n\tconst selectNode = useCallback(\n\t\t(node: { id: string }) => {\n\t\t\tselectionSourceRef.current = null\n\t\t\tscrollToNode(node.id)\n\t\t\tsetSelectedNodeId(node.id)\n\t\t\tpushHistory(node.id)\n\t\t},\n\t\t[scrollToNode, pushHistory],\n\t)\n\n\tconst toggleExpanded = useCallback((nodeId: string) => {\n\t\tsetExpandedNodeIds(prev => {\n\t\t\tconst next = new Set(prev)\n\t\t\tif (next.has(nodeId)) {\n\t\t\t\tnext.delete(nodeId)\n\t\t\t} else {\n\t\t\t\tnext.add(nodeId)\n\t\t\t}\n\t\t\treturn next\n\t\t})\n\t}, [])\n\n\tconst collapseAll = useCallback(() => {\n\t\tsetExpandedNodeIds(new Set())\n\t\tsetVisibleLimits(new Map())\n\t}, [])\n\n\tconst showMore = useCallback((nodeId: string) => {\n\t\tsetVisibleLimits(prev => {\n\t\t\tconst next = new Map(prev)\n\t\t\tnext.set(nodeId, (prev.get(nodeId) ?? PAGE_SIZE) + PAGE_SIZE)\n\t\t\treturn next\n\t\t})\n\t}, [])\n\n\tconst navigateToNodeId = useCallback(\n\t\t(nodeId: string) => {\n\t\t\tselectionSourceRef.current = null\n\t\t\trevealNode(nodeId)\n\t\t\tscrollToNode(nodeId)\n\t\t\tsetSelectedNodeId(nodeId)\n\t\t\tpushHistory(nodeId)\n\t\t\t// Focus for keyboard nav (e.g. ArrowLeft/Right in column view)\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tnodeRefsMap.current.get(nodeId)?.focus()\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\t[revealNode, scrollToNode, pushHistory],\n\t)\n\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tselectedNodeId,\n\t\t\tselectNode,\n\t\t\texpandedNodeIds,\n\t\t\ttoggleExpanded,\n\t\t\tvisibleLimits,\n\t\t\tshowMore,\n\t\t\tnavigateToNodeId,\n\t\t\tgoBack,\n\t\t\tgoForward,\n\t\t\tcanGoBack,\n\t\t\tcanGoForward,\n\t\t\tregisterNodeRef,\n\t\t\tsetActiveSection,\n\t\t\tmatchIds: matchIdsSet,\n\t\t\tsetFilterText,\n\t\t}),\n\t\t[\n\t\t\tselectedNodeId,\n\t\t\tselectNode,\n\t\t\texpandedNodeIds,\n\t\t\ttoggleExpanded,\n\t\t\tvisibleLimits,\n\t\t\tshowMore,\n\t\t\tnavigateToNodeId,\n\t\t\tgoBack,\n\t\t\tgoForward,\n\t\t\tcanGoBack,\n\t\t\tcanGoForward,\n\t\t\tregisterNodeRef,\n\t\t\tsetActiveSection,\n\t\t\tmatchIdsSet,\n\t\t\tsetFilterText,\n\t\t],\n\t)\n\n\tconst handlePropertyPanelResize = useCallback(\n\t\t(delta: number) => {\n\t\t\tconst contentWidth = contentAreaRef.current?.clientWidth ?? 0\n\t\t\tif (contentWidth <= 0) return\n\n\t\t\tsetStoredPropertyPanelPercent(prev => clampPropertyPanelPercent(prev - (delta / contentWidth) * 100))\n\t\t},\n\t\t[setStoredPropertyPanelPercent],\n\t)\n\n\tif (!treeState) {\n\t\treturn <div className={styles.emptyState}>No tree available</div>\n\t}\n\n\tconst selectedNode = selectedNodeId ? treeState.tree.get(selectedNodeId) : null\n\tconst missingSelectedNode = selectedNodeId !== null && selectedNode === null\n\n\treturn (\n\t\t<NodeSelectionContext.Provider value={contextValue}>\n\t\t\t{/* tabIndex needed for treeview to capture focus and handle keyboard shortcuts correctly */}\n\t\t\t<div className={styles.contentArea} ref={contentAreaRef} tabIndex={-1}>\n\t\t\t\t<div className={styles.treePane}>\n\t\t\t\t\t<div className={styles.toolbar}>\n\t\t\t\t\t\t<ViewModeToggle activeViewMode={viewMode} onChange={setViewMode} />\n\t\t\t\t\t\t<SyncSelectionButton followSelection={followSelection} setFollowSelection={setFollowSelection} />\n\t\t\t\t\t\t<Filters\n\t\t\t\t\t\t\tfilters={filters}\n\t\t\t\t\t\t\tonChange={setFilters}\n\t\t\t\t\t\t\tmatchIds={matchIdsList}\n\t\t\t\t\t\t\tonNavigateMatch={navigateToMatch}\n\t\t\t\t\t\t\tonSetInputRef={setter => {\n\t\t\t\t\t\t\t\tfilterSetterRef.current = setter\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.treeContent}>\n\t\t\t\t\t\t{filters.length > 0 && visibleIds.size === 0 ? (\n\t\t\t\t\t\t\t<div className={styles.emptyState}>No results</div>\n\t\t\t\t\t\t) : viewMode === \"tree\" ? (\n\t\t\t\t\t\t\t<IndentedTreeView\n\t\t\t\t\t\t\t\ttreeState={treeState}\n\t\t\t\t\t\t\t\tvisibleIds={visibleIds}\n\t\t\t\t\t\t\t\tcollapseAll={collapseAll}\n\t\t\t\t\t\t\t\thasExpanded={expandedNodeIds.size > 0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ColumnView\n\t\t\t\t\t\t\t\ttreeState={treeState}\n\t\t\t\t\t\t\t\tselectedNodeId={selectedNodeId}\n\t\t\t\t\t\t\t\tonSelectNode={onSelectNode}\n\t\t\t\t\t\t\t\tvisibleIds={visibleIds}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<ResizeHandle onResize={handlePropertyPanelResize} />\n\t\t\t\t<div className={styles.propertyPane} style={{ width: `${propertyPanelPercent}%` }}>\n\t\t\t\t\t{missingSelectedNode && (\n\t\t\t\t\t\t<div className={styles.missingNodeWarning}>\n\t\t\t\t\t\t\tThe selected node ({selectedNodeId}) could not be retrieved from the tree.\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{selectedNode && <PropertyPanel node={selectedNode} tree={treeState.tree} />}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NodeSelectionContext.Provider>\n\t)\n})\n", "import { noop } from \"@framerjs/shared/src/noop.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { createContext } from \"react\"\n\ninterface SelectionContext {\n\tselectedNodeId: string | null\n\tselectNode: (node: CanvasNode) => void\n\texpandedNodeIds: ReadonlySet<string>\n\ttoggleExpanded: (nodeId: string) => void\n\tvisibleLimits: ReadonlyMap<string, number>\n\tshowMore: (nodeId: string) => void\n\tnavigateToNodeId: (nodeId: string) => void\n\tgoBack: () => void\n\tgoForward: () => void\n\tcanGoBack: boolean\n\tcanGoForward: boolean\n\tregisterNodeRef: (nodeId: string, el: HTMLElement | null) => void\n\tsetActiveSection: (section: string) => void\n\tmatchIds: ReadonlySet<string>\n\tsetFilterText: (text: string) => void\n}\n\nexport const NodeSelectionContext = createContext<SelectionContext>({\n\tselectedNodeId: null,\n\tselectNode: noop,\n\texpandedNodeIds: new Set(),\n\ttoggleExpanded: noop,\n\tvisibleLimits: new Map(),\n\tshowMore: noop,\n\tnavigateToNodeId: noop,\n\tgoBack: noop,\n\tgoForward: noop,\n\tcanGoBack: false,\n\tcanGoForward: false,\n\tregisterNodeRef: noop,\n\tsetActiveSection: noop,\n\tmatchIds: new Set(),\n\tsetFilterText: noop,\n})\nNodeSelectionContext.displayName = \"NodeSelectionContext\"\n", "import { assertNever } from \"@framerjs/shared\"\nimport type { CrdtRowFilter } from \"document/components/chrome/debugbar/crdt/CrdtRowFilter.js\"\nimport { useLocalStorageState } from \"document/components/chrome/debugbar/useLocalStorageState.js\"\n\nexport function useStoredCrdtRowFilter() {\n\tconst [rowFilter, setRowFilter] = useLocalStorageState<CrdtRowFilter>(\n\t\t\"debugbar.crdtRowFilter\",\n\t\t{\n\t\t\tclientIds: [],\n\t\t\tnodeIds: [],\n\t\t\tkeys: [],\n\t\t\tvalues: [],\n\t\t\thierarchyOnly: false,\n\t\t},\n\t\t(key: keyof CrdtRowFilter, value: unknown) => {\n\t\t\tif (key === \"hierarchyOnly\") {\n\t\t\t\treturn Boolean(value)\n\t\t\t}\n\t\t\tif (key === \"nodeIds\" || key === \"keys\" || key === \"values\") {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn value.map(id => String(id))\n\t\t\t\t}\n\t\t\t\tif (typeof value === \"string\") return [value]\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (key === \"clientIds\") {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn value.map(id => parseInt(id, 10))\n\t\t\t\t}\n\t\t\t\tif (typeof value === \"number\") return [value]\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tassertNever(key)\n\t\t},\n\t)\n\n\treturn [rowFilter, setRowFilter] as const\n}\n", "import { Stack, TextInput, truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { IconChevronLeft, IconChevronRight, IconConsole } from \"@framerjs/fresco/icons\"\nimport { isCommandKeyPressed } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { IconTable } from \"document/components/chrome/QuickActions/utils/icons.js\"\nimport { useStoredCrdtRowFilter } from \"document/components/chrome/debugbar/crdt/useStoredCrdtRowFilter.js\"\nimport { useLocalStorageState } from \"document/components/chrome/debugbar/useLocalStorageState.js\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { ScopeNode } from \"document/models/CanvasTree/nodes/ScopeNode.ts\"\nimport { type ReactNode, useCallback, useContext, useMemo, useState } from \"react\"\nimport { useIsViewOnly } from \"web/pages/project/permissions/useIsViewOnly.ts\"\nimport { CachePanelSection } from \"./CachePanelSection.tsx\"\nimport { IconCopy } from \"./IconCopy.tsx\"\nimport { IconEye } from \"./IconEye.tsx\"\nimport { IconInfoCircle } from \"./IconInfoCircle.tsx\"\nimport { IconScope } from \"./IconScope.tsx\"\nimport { IconSortAlpha } from \"./IconSortAlpha.tsx\"\nimport { IconSortGrouped } from \"./IconSortGrouped.tsx\"\nimport { NodeSelectionContext } from \"./NodeSelectionContext.ts\"\nimport { NodeTypeTag } from \"./NodeTypeTag.tsx\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\nimport { PropertyRow, getSortGroup, hiddenProps, isAlwaysOnTop } from \"./PropertyRow.tsx\"\nimport { type NodePropertyEntry, collectNodeInfo } from \"./nodeInfo.ts\"\nimport { type TreeLookup, copyNodeToClipboard, copyNodeToJS, fmt, getNodeName } from \"./nodeUtils.ts\"\n\nfunction PropertyPanelTooltip({ label, children }: { label: ReactNode; children: ReactNode }) {\n\treturn (\n\t\t<div className={styles.propertyPanelTooltipWrapper}>\n\t\t\t{children}\n\t\t\t<div className={styles.propertyPanelTooltip}>{label}</div>\n\t\t</div>\n\t)\n}\n\nfunction makeGhostEntry(label: string): NodePropertyEntry {\n\treturn {\n\t\tlabel,\n\t\tvalue: \"\",\n\t\trawValue: undefined,\n\t\tisDefined: false,\n\t\tisDefault: true,\n\t\tisReplicaOverride: false,\n\t\tmasterValue: null,\n\t\tdefaultValue: null,\n\t}\n}\n\nfunction getScopeNode(node: CanvasNode): CanvasNode | null {\n\tconst scope = engine.tree.getScopeNodeFor(node)\n\tif (scope) return scope\n\ttry {\n\t\tconst dataTree = engine.stores.treeStore.getDataTree()\n\t\treturn dataTree?.getScopeNodeFor(node) ?? null\n\t} catch {\n\t\treturn null\n\t}\n}\n\nconst PINNED_STORAGE_KEY = \"treeViewer-pinnedProperties\"\n\nfunction loadPinnedProperties(): Set<string> {\n\ttry {\n\t\tconst raw = localStorage.getItem(PINNED_STORAGE_KEY)\n\t\tif (raw) return new Set(JSON.parse(raw))\n\t} catch {\n\t\t// ignore corrupt data\n\t}\n\treturn new Set()\n}\n\nfunction savePinnedProperties(pinned: Set<string>) {\n\tlocalStorage.setItem(PINNED_STORAGE_KEY, JSON.stringify([...pinned]))\n}\n\nfunction usePinnedProperties() {\n\tconst [pinned, setPinned] = useState(loadPinnedProperties)\n\n\tconst togglePin = useCallback((label: string) => {\n\t\tsetPinned(prev => {\n\t\t\tconst next = new Set(prev)\n\t\t\tif (next.has(label)) {\n\t\t\t\tnext.delete(label)\n\t\t\t} else {\n\t\t\t\tnext.add(label)\n\t\t\t}\n\t\t\tsavePinnedProperties(next)\n\t\t\treturn next\n\t\t})\n\t}, [])\n\n\treturn { pinned, togglePin }\n}\n\nexport function PropertyPanel({ node, tree }: { node: CanvasNode; tree: TreeLookup }) {\n\tconst viewOnly = useIsViewOnly(\"canEditContent\")\n\tconst nodeInfo = useMemo(() => collectNodeInfo(tree, node), [tree, node])\n\tconst { entries: props, replicaContext, smartComponentContext } = nodeInfo\n\n\tconst [showOnlyDefined, setShowOnlyDefined] = useLocalStorageState(\"debugbar.propFilter.hideUndefined\", false)\n\tconst [showOnlyDefaultOverrides, setShowOnlyDefaultOverrides] = useLocalStorageState(\n\t\t\"debugbar.propFilter.hideDefaultValues\",\n\t\tfalse,\n\t)\n\tconst [showOnlyVariantOverrides, setShowOnlyVariantOverrides] = useLocalStorageState(\n\t\t\"debugbar.propFilter.onlyVariantOverrides\",\n\t\tfalse,\n\t)\n\tconst [sortMode, setSortMode] = useLocalStorageState<\"grouped\" | \"alphabetical\">(\"debugbar.propSortMode\", \"grouped\")\n\tconst [searchFilter, setSearchFilter] = useState(\"\")\n\tconst [cacheVersion, setCacheVersion] = useState(0)\n\tconst { pinned, togglePin } = usePinnedProperties()\n\tconst { navigateToNodeId, goBack, goForward, canGoBack, canGoForward, setActiveSection } =\n\t\tuseContext(NodeSelectionContext)\n\tconst [__, setCrdtRowFilter] = useStoredCrdtRowFilter()\n\tconst [___, setIncludeSnapshotRows] = useLocalStorageState(\"debugpanel.crdtIncludeSnapshot\", false)\n\tconst scopeNode = useMemo(() => getScopeNode(node), [node])\n\n\tconst updateProperty = useCallback(\n\t\tasync (key: string, value: unknown) => {\n\t\t\tconst dataTree = engine.stores.treeStore.getDataTree()\n\t\t\tif (dataTree?.isDataNode(node)) {\n\t\t\t\t// Must use the latest data only tree to set the property.\n\t\t\t\tdataTree.get(node.id)?.set({ [key]: value })\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Make sure the scope is loaded if there is one. Some nodes (e.g. style presets) don't have a scope.\n\t\t\tconst scope = getScopeNode(node)\n\t\t\tif (scope) {\n\t\t\t\tconst canvasTreeScope = engine.tree.get(scope.id)\n\t\t\t\tif (canvasTreeScope instanceof ScopeNode) await canvasTreeScope.load()\n\t\t\t}\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tconst editableNode = engine.tree.get(node.id)\n\t\t\t\tif (!editableNode) return\n\t\t\t\teditableNode.set({ [key]: value })\n\t\t\t})\n\t\t},\n\t\t[node],\n\t)\n\n\tconst refreshCacheEntries = useCallback(() => {\n\t\tsetCacheVersion(version => version + 1)\n\t}, [])\n\n\tconst cacheEntries: NodePropertyEntry[] = (() => {\n\t\tvoid cacheVersion\n\t\tconst raw = (node as unknown as Record<string, unknown>).cache\n\t\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return []\n\t\treturn Object.entries(raw as Record<string, unknown>).map(([key, val]) => ({\n\t\t\tlabel: key,\n\t\t\tvalue: fmt(val),\n\t\t\trawValue: val,\n\t\t\tisDefined: val !== undefined,\n\t\t\tisDefault: false,\n\t\t\tisReplicaOverride: false,\n\t\t\tmasterValue: null,\n\t\t\tdefaultValue: null,\n\t\t}))\n\t})()\n\n\tconst isReplica = replicaContext !== null\n\tconst variantOverrideCount = isReplica ? props.filter(e => e.isReplicaOverride && e.isDefined).length : 0\n\n\tconst filtered = useMemo(() => {\n\t\tconst query = searchFilter.toLowerCase()\n\t\treturn props\n\t\t\t.filter(entry => {\n\t\t\t\tif (hiddenProps.has(entry.label)) return false\n\t\t\t\tif (pinned.has(entry.label)) return false\n\t\t\t\tif (isAlwaysOnTop(entry.label, isReplica)) return true\n\t\t\t\tif (showOnlyDefined && !entry.isDefined && !entry.isReplicaOverride) return false\n\t\t\t\tif (showOnlyDefaultOverrides && entry.isDefault && !entry.isReplicaOverride) return false\n\t\t\t\tif (showOnlyVariantOverrides && isReplica && !entry.isReplicaOverride) return false\n\t\t\t\tif (query) {\n\t\t\t\t\tconst keyMatch = entry.label.toLowerCase().includes(query)\n\t\t\t\t\tconst valueMatch = entry.isDefined && entry.value.toLowerCase().includes(query)\n\t\t\t\t\tif (!keyMatch && !valueMatch) return false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.sort((a, b) => {\n\t\t\t\tconst topA = isAlwaysOnTop(a.label, isReplica) ? 0 : 1\n\t\t\t\tconst topB = isAlwaysOnTop(b.label, isReplica) ? 0 : 1\n\t\t\t\tif (topA !== topB) return topA - topB\n\t\t\t\tif (sortMode === \"alphabetical\") return a.label.localeCompare(b.label)\n\t\t\t\tconst groupA = getSortGroup(a, isReplica)\n\t\t\t\tconst groupB = getSortGroup(b, isReplica)\n\t\t\t\tif (groupA !== groupB) return groupA - groupB\n\t\t\t\treturn a.label.localeCompare(b.label)\n\t\t\t})\n\t}, [\n\t\tprops,\n\t\tpinned,\n\t\tisReplica,\n\t\tshowOnlyDefined,\n\t\tshowOnlyDefaultOverrides,\n\t\tshowOnlyVariantOverrides,\n\t\tsearchFilter,\n\t\tsortMode,\n\t])\n\n\tconst pinnedEntries = props.filter(entry => pinned.has(entry.label))\n\n\tconst pinnedFromStorage = [...pinned]\n\t\t.filter(label => !label.startsWith(\"cache.\") && !props.some(entry => entry.label === label))\n\t\t.map(makeGhostEntry)\n\n\tconst pinnedCacheEntries = cacheEntries.filter(entry => pinned.has(`cache.${entry.label}`))\n\tconst pinnedCacheFromStorage = [...pinned]\n\t\t.filter(p => p.startsWith(\"cache.\"))\n\t\t.map(p => p.slice(\"cache.\".length))\n\t\t.filter(key => !cacheEntries.some(e => e.label === key))\n\t\t.map(makeGhostEntry)\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<div className={styles.propertyPanelToolbar}>\n\t\t\t\t<div className={styles.title}>\n\t\t\t\t\t<Stack direction=\"row\" gap={0}>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttitle=\"Go back (\u2318[)\"\n\t\t\t\t\t\t\tdisabled={!canGoBack}\n\t\t\t\t\t\t\tonClick={goBack}\n\t\t\t\t\t\t\tclassName={cx(styles.propertyPanelTitleButton, styles.historyNavButton)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconChevronLeft />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttitle=\"Go forward (\u2318])\"\n\t\t\t\t\t\t\tdisabled={!canGoForward}\n\t\t\t\t\t\t\tonClick={goForward}\n\t\t\t\t\t\t\tclassName={cx(styles.propertyPanelTitleButton, styles.historyNavButton)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconChevronRight />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Stack gap={8} direction=\"row\" style={{ marginRight: 12 }}>\n\t\t\t\t\t\t<NodeTypeTag nodeClass={node.__class} />\n\t\t\t\t\t\t{getNodeName(node) && (\n\t\t\t\t\t\t\t<span className={cx(truncateWithEllipsis, styles.titleNodeName)}>{getNodeName(node)}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<PropertyPanelTooltip label=\"Copy as shallow JSON (\u2318+click to include cache)\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={e => copyNodeToClipboard(node, isCommandKeyPressed(e))}\n\t\t\t\t\t\t\tclassName={styles.propertyPanelTitleButton}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconCopy />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<PropertyPanelTooltip label=\"Copy with .toJS()\">\n\t\t\t\t\t\t<button type=\"button\" onClick={() => copyNodeToJS(node)} className={styles.propertyPanelTitleButton}>\n\t\t\t\t\t\t\t<span style={{ fontSize: 10, fontWeight: 700, lineHeight: 1 }}>JS</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<PropertyPanelTooltip\n\t\t\t\t\t\tlabel={scopeNode ? `Go to scope: ${getNodeName(scopeNode) ?? scopeNode.__class}` : \"No parent scope\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tdisabled={!scopeNode}\n\t\t\t\t\t\t\tonClick={() => scopeNode && navigateToNodeId(scopeNode.id)}\n\t\t\t\t\t\t\tclassName={styles.propertyPanelTitleButton}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconScope />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<PropertyPanelTooltip label=\"See CRDT rows for node\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.propertyPanelTitleButton}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tsetCrdtRowFilter({\n\t\t\t\t\t\t\t\t\tnodeIds: [node.id],\n\t\t\t\t\t\t\t\t\tclientIds: [],\n\t\t\t\t\t\t\t\t\thierarchyOnly: false,\n\t\t\t\t\t\t\t\t\tkeys: [],\n\t\t\t\t\t\t\t\t\tvalues: [],\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tsetIncludeSnapshotRows(true)\n\t\t\t\t\t\t\t\tsetActiveSection(\"CRDT\")\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconTable width={14} height={14} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<PropertyPanelTooltip label=\"Visibility filters\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.propertyPanelTitleButton}\n\t\t\t\t\t\t\tdata-active={showOnlyDefined || showOnlyDefaultOverrides || showOnlyVariantOverrides || undefined}\n\t\t\t\t\t\t\tonMouseDown={e => {\n\t\t\t\t\t\t\t\tconst rect = e.currentTarget.getBoundingClientRect()\n\t\t\t\t\t\t\t\tengine.stores.contextMenuStore.show(\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"checkbox\",\n\t\t\t\t\t\t\t\t\t\t\tlabel: \"Hide undefined values\",\n\t\t\t\t\t\t\t\t\t\t\tchecked: showOnlyDefined,\n\t\t\t\t\t\t\t\t\t\t\tclick: () => setShowOnlyDefined(v => !v),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"checkbox\",\n\t\t\t\t\t\t\t\t\t\t\tlabel: \"Hide default values\",\n\t\t\t\t\t\t\t\t\t\t\tchecked: showOnlyDefaultOverrides,\n\t\t\t\t\t\t\t\t\t\t\tclick: () => setShowOnlyDefaultOverrides(v => !v),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"checkbox\",\n\t\t\t\t\t\t\t\t\t\t\tlabel: \"Only show overrides in variants\",\n\t\t\t\t\t\t\t\t\t\t\tchecked: showOnlyVariantOverrides,\n\t\t\t\t\t\t\t\t\t\t\tclick: () => setShowOnlyVariantOverrides(v => !v),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t{ location: { x: rect.left, y: rect.bottom + 2 } },\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconEye />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<PropertyPanelTooltip label=\"Log node to console\">\n\t\t\t\t\t\t<button type=\"button\" onClick={() => console.log(node)} className={styles.propertyPanelTitleButton}>\n\t\t\t\t\t\t\t<IconConsole />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<PropertyPanelTooltip\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\tConsole variables:\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span className={styles.tooltipCode}>$n</span>: selected node on the canvas\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span className={styles.tooltipCode}>$s</span>: scope node on the canvas\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span className={styles.tooltipCode}>$tn</span>: selected node in the tree tool\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span className={styles.tooltipCode}>$ts</span>: scope node on the tree tool\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={styles.propertyPanelTitleButton} style={{ cursor: \"default\" }}>\n\t\t\t\t\t\t\t<IconInfoCircle />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</PropertyPanelTooltip>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tplaceholder=\"Search by key or value...\"\n\t\t\t\t\t\tvalue={searchFilter}\n\t\t\t\t\t\tonChange={setSearchFilter}\n\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\tstyle={{ flex: 1, minWidth: 80, maxWidth: 260, marginLeft: \"auto\" }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className={styles.scrollContent}>\n\t\t\t\t{(replicaContext || smartComponentContext) && (\n\t\t\t\t\t<div className={styles.contextBadges}>\n\t\t\t\t\t\t{replicaContext && (\n\t\t\t\t\t\t\t<div className={styles.replicaBadge}>\n\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\tconst replicaParent = replicaContext.replicaParent\n\t\t\t\t\t\t\t\t\tif (!replicaParent) return null\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\tInside{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cx(styles.badgeLink, styles.badgeLinkReplica)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => navigateToNodeId(replicaParent.navigateToId)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{replicaParent.name.trimEnd()}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t|{\" \"}\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\tInherits from{\" \"}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={cx(styles.badgeLink, styles.badgeLinkReplica)}\n\t\t\t\t\t\t\t\t\tonClick={() => navigateToNodeId(replicaContext.inheritsFrom.navigateToId)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{replicaContext.inheritsFrom.name}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\tconst vid = replicaContext.inheritsFrom.variantNavigateToId\n\t\t\t\t\t\t\t\t\tif (!vid) return null\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cx(styles.badgeLink, styles.badgeLinkReplica)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => navigateToNodeId(vid)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{replicaContext.inheritsFrom.variantName}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t<span className={styles.replicaOverrideCount}>\n\t\t\t\t\t\t\t\t\t{variantOverrideCount} override{variantOverrideCount !== 1 ? \"s\" : \"\"}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{smartComponentContext && (\n\t\t\t\t\t\t\t<div className={styles.smartComponentBadge}>\n\t\t\t\t\t\t\t\tInstance of {smartComponentContext.nodeClass}:{\" \"}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={cx(styles.badgeLink, styles.badgeLinkSmartComponent)}\n\t\t\t\t\t\t\t\t\tonClick={() => navigateToNodeId(smartComponentContext.navigateToId)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{smartComponentContext.name}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div className={styles.contentArea}>\n\t\t\t\t\t{(pinnedEntries.length > 0 ||\n\t\t\t\t\t\tpinnedFromStorage.length > 0 ||\n\t\t\t\t\t\tpinnedCacheEntries.length > 0 ||\n\t\t\t\t\t\tpinnedCacheFromStorage.length > 0) && (\n\t\t\t\t\t\t<div className={styles.section}>\n\t\t\t\t\t\t\t<div className={styles.sectionHeader}>Pinned</div>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{[...pinnedEntries, ...pinnedFromStorage].map(entry => (\n\t\t\t\t\t\t\t\t\t<PropertyRow\n\t\t\t\t\t\t\t\t\t\tkey={entry.label}\n\t\t\t\t\t\t\t\t\t\tentry={entry}\n\t\t\t\t\t\t\t\t\t\tisPinned={true}\n\t\t\t\t\t\t\t\t\t\tisReplica={isReplica}\n\t\t\t\t\t\t\t\t\t\tviewOnly={viewOnly}\n\t\t\t\t\t\t\t\t\t\tonTogglePin={togglePin}\n\t\t\t\t\t\t\t\t\t\tupdateProperty={value => updateProperty(entry.label, value)}\n\t\t\t\t\t\t\t\t\t\tcurrentNodeId={node.id}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{[...pinnedCacheEntries, ...pinnedCacheFromStorage].map(entry => (\n\t\t\t\t\t\t\t\t\t<PropertyRow\n\t\t\t\t\t\t\t\t\t\tkey={`cache.${entry.label}`}\n\t\t\t\t\t\t\t\t\t\tentry={{ ...entry, label: `cache.${entry.label}` }}\n\t\t\t\t\t\t\t\t\t\tisPinned={true}\n\t\t\t\t\t\t\t\t\t\tisReplica={false}\n\t\t\t\t\t\t\t\t\t\tviewOnly={viewOnly}\n\t\t\t\t\t\t\t\t\t\tshowIndicators={false}\n\t\t\t\t\t\t\t\t\t\tonTogglePin={togglePin}\n\t\t\t\t\t\t\t\t\t\tupdateProperty={value => {\n\t\t\t\t\t\t\t\t\t\t\tnode.cache[entry.label as keyof typeof node.cache] = value as never\n\t\t\t\t\t\t\t\t\t\t\trefreshCacheEntries()\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tcurrentNodeId={node.id}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<CachePanelSection\n\t\t\t\t\t\tnode={node}\n\t\t\t\t\t\tentries={cacheEntries}\n\t\t\t\t\t\tpinned={pinned}\n\t\t\t\t\t\ttogglePin={togglePin}\n\t\t\t\t\t\tsearchFilter={searchFilter}\n\t\t\t\t\t\tsortMode={sortMode}\n\t\t\t\t\t\tonCacheChange={refreshCacheEntries}\n\t\t\t\t\t\tviewOnly={viewOnly}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className={styles.section}>\n\t\t\t\t\t\t<div className={styles.sectionHeaderRow}>\n\t\t\t\t\t\t\t<div className={styles.sectionHeader}>Properties</div>\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={4}>\n\t\t\t\t\t\t\t\t<div className={styles.legendTrigger}>\n\t\t\t\t\t\t\t\t\t<IconInfoCircle />\n\t\t\t\t\t\t\t\t\t<div className={styles.legendPopover}>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.legendItem}>\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.legendSwatch} style={{ background: \"#ffaa32\" }} />\n\t\t\t\t\t\t\t\t\t\t\tVariant override\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.legendItem}>\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.legendSwatch} style={{ background: \"#5b9bd5\" }} />\n\t\t\t\t\t\t\t\t\t\t\tNon-default value\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.legendItem}>\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.legendSwatch} style={{ background: \"var(--framer-treeView-muted)\" }} />\n\t\t\t\t\t\t\t\t\t\t\tDefault\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttitle={sortMode === \"grouped\" ? \"Sort: Grouped\" : \"Sort: A\u2013Z\"}\n\t\t\t\t\t\t\t\t\tclassName={styles.sortButton}\n\t\t\t\t\t\t\t\t\tonClick={() => setSortMode(m => (m === \"grouped\" ? \"alphabetical\" : \"grouped\"))}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{sortMode === \"grouped\" ? <IconSortGrouped /> : <IconSortAlpha />}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{filtered.map(entry => (\n\t\t\t\t\t\t\t\t<PropertyRow\n\t\t\t\t\t\t\t\t\tkey={entry.label}\n\t\t\t\t\t\t\t\t\tentry={entry}\n\t\t\t\t\t\t\t\t\tisPinned={false}\n\t\t\t\t\t\t\t\t\tisReplica={isReplica}\n\t\t\t\t\t\t\t\t\tviewOnly={viewOnly}\n\t\t\t\t\t\t\t\t\tonTogglePin={togglePin}\n\t\t\t\t\t\t\t\t\tupdateProperty={value => updateProperty(entry.label, value)}\n\t\t\t\t\t\t\t\t\tcurrentNodeId={node.id}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n", "import { IconChevronDown } from \"@framerjs/fresco/icons\"\nimport { useLocalStorageState } from \"document/components/chrome/debugbar/useLocalStorageState.js\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport type { CanvasNodeCache } from \"document/models/CanvasTree/nodes/CanvasNodeCache.ts\"\nimport { useCallback, useMemo } from \"react\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\nimport { PropertyRow } from \"./PropertyRow.tsx\"\nimport type { NodePropertyEntry } from \"./nodeInfo.ts\"\n\ninterface CachePanelSectionProps {\n\tnode: CanvasNode\n\tentries: NodePropertyEntry[]\n\tpinned: ReadonlySet<string>\n\ttogglePin: (key: string) => void\n\tsearchFilter: string\n\tsortMode: \"grouped\" | \"alphabetical\"\n\tonCacheChange: () => void\n\tviewOnly?: boolean\n}\n\nexport function CachePanelSection({\n\tnode,\n\tentries,\n\tpinned,\n\ttogglePin,\n\tsearchFilter,\n\tsortMode,\n\tonCacheChange,\n\tviewOnly,\n}: CachePanelSectionProps) {\n\tconst [collapsed, setCollapsed] = useLocalStorageState(\"debugbar.cacheCollapsed\", true)\n\n\tconst updateCacheProperty = useCallback(\n\t\t(key: string, value: unknown) => {\n\t\t\tnode.cache[key as keyof CanvasNodeCache] = value as never\n\t\t\tonCacheChange()\n\t\t},\n\t\t[node, onCacheChange],\n\t)\n\n\tconst filtered = useMemo(() => {\n\t\tconst query = searchFilter.toLowerCase()\n\t\treturn entries\n\t\t\t.filter(entry => {\n\t\t\t\tif (pinned.has(`cache.${entry.label}`)) return false\n\t\t\t\tif (query) {\n\t\t\t\t\tconst keyMatch = entry.label.toLowerCase().includes(query)\n\t\t\t\t\tconst valueMatch = entry.isDefined && entry.value.toLowerCase().includes(query)\n\t\t\t\t\tif (!keyMatch && !valueMatch) return false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.sort((a, b) => {\n\t\t\t\tif (sortMode === \"alphabetical\") return a.label.localeCompare(b.label)\n\t\t\t\tconst groupA = a.isDefined ? 0 : 1\n\t\t\t\tconst groupB = b.isDefined ? 0 : 1\n\t\t\t\tif (groupA !== groupB) return groupA - groupB\n\t\t\t\treturn a.label.localeCompare(b.label)\n\t\t\t})\n\t}, [entries, pinned, searchFilter, sortMode])\n\n\tif (filtered.length === 0) return null\n\n\treturn (\n\t\t<div className={styles.section} style={collapsed ? { borderBottom: \"none\" } : undefined}>\n\t\t\t<div className={styles.sectionHeaderRow}>\n\t\t\t\t<button type=\"button\" className={styles.collapsibleSectionHeader} onClick={() => setCollapsed(v => !v)}>\n\t\t\t\t\tCache\n\t\t\t\t\t<span style={{ transform: \"scale(0.8)\", fontSize: \"0\" }}>\n\t\t\t\t\t\t<IconChevronDown />\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t{!collapsed && (\n\t\t\t\t<div>\n\t\t\t\t\t{filtered.map(entry => (\n\t\t\t\t\t\t<PropertyRow\n\t\t\t\t\t\t\tkey={entry.label}\n\t\t\t\t\t\t\tentry={entry}\n\t\t\t\t\t\t\tisPinned={false}\n\t\t\t\t\t\t\tisReplica={false}\n\t\t\t\t\t\t\tviewOnly={viewOnly}\n\t\t\t\t\t\t\tshowIndicators={false}\n\t\t\t\t\t\t\tonTogglePin={key => togglePin(`cache.${key}`)}\n\t\t\t\t\t\t\tupdateProperty={value => updateCacheProperty(entry.label, value)}\n\t\t\t\t\t\t\tcurrentNodeId={node.id}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n", "import \"PropertyPanel.styles_73oue9.wyw.css\"; export const container = \"container_ckiejpq\";\nexport const propertyPanelToolbar = \"propertyPanelToolbar_p15hk20l\";\nexport const scrollContent = \"scrollContent_s1gaudio\";\nexport const title = \"title_tkzodh6\";\nexport const titleNodeName = \"titleNodeName_t1vinl6t\";\nexport const contentArea = \"contentArea_cb39974\";\nexport const section = \"section_sc79gqu\";\nexport const groupTitle = \"groupTitle_g1kffv0y\";\nexport const entryValue = \"entryValue_e1oirl25\";\nexport const propertyPanelTitleButton = \"propertyPanelTitleButton_prn2d44\";\nexport const historyNavButton = \"historyNavButton_hik9tc2\";\nexport const pinButton = \"pinButton_peptu00\";\nexport const editButton = \"editButton_et8mase\";\nexport const replicaBadge = \"replicaBadge_r1vvsxzq\";\nexport const badgeLink = \"badgeLink_b1933pxv\";\nexport const badgeLinkReplica = \"badgeLinkReplica_b19bgywu\";\nexport const replicaOverrideCount = \"replicaOverrideCount_r16v2hc9\";\nexport const smartComponentBadge = \"smartComponentBadge_sk0lnxo\";\nexport const contextBadges = \"contextBadges_c9npro2\";\nexport const badgeLinkSmartComponent = \"badgeLinkSmartComponent_bd93983\";\nexport const masterValue = \"masterValue_m1vvawtm\";\nexport const propertyRow = \"propertyRow_p1mgaomp\";\nexport const nodeLink = \"nodeLink_n1fvkr0\";\nexport const nodeLinkArrow = \"nodeLinkArrow_n1f545hy\";\nexport const previewButton = \"previewButton_p16gtffq\";\nexport const previewPopover = \"previewPopover_p1qid428\";\nexport const previewIframe = \"previewIframe_p24z8iu\";\nexport const previewImage = \"previewImage_pbmt18s\";\nexport const sectionHeaderRow = \"sectionHeaderRow_s1m9rq6z\";\nexport const sectionHeader = \"sectionHeader_s1bg3vhg\";\nexport const collapsibleSectionHeader = \"collapsibleSectionHeader_c15z7udd\";\nexport const sortButton = \"sortButton_s3jioqe\";\nexport const propertyPanelTooltipWrapper = \"propertyPanelTooltipWrapper_p1aru401\";\nexport const propertyPanelTooltip = \"propertyPanelTooltip_p16sroi4\";\nexport const tooltipCode = \"tooltipCode_tf91xy1\";\nexport const legendPopover = \"legendPopover_lhu353k\";\nexport const legendTrigger = \"legendTrigger_lf61bbm\";\nexport const legendItem = \"legendItem_laxxn0u\";\nexport const legendSwatch = \"legendSwatch_l15zfed0\";\nexport const objectToggle = \"objectToggle_o1pw0n3a\";\nexport const objectPreview = \"objectPreview_o11bs1t2\";\nexport const objectChildren = \"objectChildren_odvfs5v\";\nexport const objectEntry = \"objectEntry_opabphb\";\nexport const objectEntryRow = \"objectEntryRow_ofd6zkw\";\nexport const inlineEditInput = \"inlineEditInput_i1rlkfom\";", "import { truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { getLogger } from \"@framerjs/shared\"\nimport { useContext, useEffect, useMemo, useRef, useState } from \"react\"\nimport { copyText } from \"utils/clipboard/copyText.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\n\nimport { IconCollapse } from \"./IconCollapse.tsx\"\nimport { IconCopy } from \"./IconCopy.tsx\"\nimport { ModuleIdentifierValue } from \"./ModuleIdentifierValue.tsx\"\nimport { NodeRefValue } from \"./NodeRefValue.tsx\"\nimport { NodeSelectionContext } from \"./NodeSelectionContext.ts\"\nimport { ObjectChildren } from \"./ObjectChildren.tsx\"\nimport { PreviewButton } from \"./PreviewButton.tsx\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\nimport type { NodePropertyEntry } from \"./nodeInfo.ts\"\nimport {\n\tgetModuleIdentifierValue,\n\tgetPreviewable,\n\tgetValueType,\n\tisExpandableValue,\n\tobjectPreviewString,\n} from \"./propertyUtils.ts\"\nimport { resolveNodeRef } from \"./resolveNodeRef.ts\"\n\nconst logger = getLogger(\"debugbar:tree\")\n\nfunction getClipboardIdValue(rawValue: unknown, fallbackValue: string): string {\n\tif (typeof rawValue === \"string\" || typeof rawValue === \"number\" || typeof rawValue === \"bigint\") {\n\t\treturn String(rawValue)\n\t}\n\treturn fallbackValue\n}\n\nfunction serializeEditableValue(rawValue: unknown): string {\n\tif (rawValue === undefined) return \"\"\n\ttry {\n\t\treturn JSON.stringify(rawValue)\n\t} catch {\n\t\treturn \"\"\n\t}\n}\n\nfunction parseEditableValue(value: string): unknown {\n\tif (value.trim() === \"\" || value.trim() === \"undefined\") return undefined\n\treturn JSON.parse(value)\n}\n\nconst alwaysOnTopProps = new Set([\"id\"])\nconst hiddenProps = new Set([\"__class\"])\n\nexport function isAlwaysOnTop(label: string, isReplica: boolean): boolean {\n\tif (alwaysOnTopProps.has(label)) return true\n\tif (label === \"originalid\" && isReplica) return true\n\treturn false\n}\n\nexport { hiddenProps }\n\nexport function getSortGroup(entry: NodePropertyEntry, isReplica: boolean): number {\n\tif (isAlwaysOnTop(entry.label, isReplica)) return -1\n\tif (isReplica && entry.isReplicaOverride) return 0\n\tif (!entry.isDefault) return 1\n\tif (entry.isDefined) return 2\n\treturn 3\n}\n\nconst disallowedEditingKeys = new Set([\"id\", \"__class\", \"update\", \"parentid\", \"replicaInfo\"])\n\ninterface PropertyRowProps {\n\tentry: NodePropertyEntry\n\tisPinned: boolean\n\tviewOnly?: boolean\n\tonTogglePin: (label: string) => void\n\tupdateProperty: (value: unknown) => void\n\tcurrentNodeId: string\n}\n\nexport function PropertyRow({\n\tentry,\n\tisPinned,\n\tonTogglePin,\n\tisReplica,\n\tviewOnly = false,\n\tupdateProperty,\n\tcurrentNodeId,\n\tshowIndicators = true,\n}: PropertyRowProps & { isReplica: boolean; showIndicators?: boolean }) {\n\tconst { label, value, rawValue, isDefined, isDefault, isReplicaOverride, masterValue, defaultValue } = entry\n\tconst { navigateToNodeId } = useContext(NodeSelectionContext)\n\tconst referencedNode = useMemo(() => (isDefined ? resolveNodeRef(rawValue) : null), [rawValue, isDefined])\n\tconst moduleIdentifier = useMemo(() => (isDefined ? getModuleIdentifierValue(rawValue) : null), [rawValue, isDefined])\n\tconst preview = useMemo(() => (isDefined ? getPreviewable(rawValue) : null), [rawValue, isDefined])\n\tconst hasExpandable = isDefined && isExpandableValue(rawValue)\n\tconst [expanded, setExpanded] = useState(false)\n\tconst [isEditing, setIsEditing] = useState(false)\n\tconst [pendingValue, setPendingValue] = useState<string | null>(null)\n\tconst [editingValue, setEditingValue] = useState(() => serializeEditableValue(rawValue))\n\n\tconst pendingTimer = useRef<ReturnType<typeof setTimeout>>()\n\tif (pendingValue !== null) {\n\t\ttry {\n\t\t\tif (JSON.stringify(rawValue) === pendingValue) {\n\t\t\t\tsetPendingValue(null)\n\t\t\t\tclearTimeout(pendingTimer.current)\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t}\n\n\tuseEffect(() => () => clearTimeout(pendingTimer.current), [])\n\n\tconst setNewValue = (newValue: string) => {\n\t\ttry {\n\t\t\tconst parsed = parseEditableValue(newValue)\n\t\t\tsetPendingValue(newValue)\n\t\t\tclearTimeout(pendingTimer.current)\n\t\t\tpendingTimer.current = setTimeout(() => setPendingValue(null), 1000)\n\t\t\tupdateProperty(parsed)\n\t\t} catch (error) {\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tprimaryText: \"Couldn't update property\",\n\t\t\t\tvariant: \"error\",\n\t\t\t})\n\t\t\tlogger.error(error)\n\t\t} finally {\n\t\t\tsetIsEditing(false)\n\t\t}\n\t}\n\tconst startEditing = () => {\n\t\tsetIsEditing(true)\n\t\tsetPendingValue(null)\n\t\tsetEditingValue(serializeEditableValue(rawValue))\n\t}\n\n\tconst selectEditingValue = (input: HTMLInputElement) => {\n\t\tif (typeof rawValue === \"string\" && input.value.length >= 2) {\n\t\t\tinput.setSelectionRange(1, input.value.length - 1)\n\t\t\treturn\n\t\t}\n\t\tinput.select()\n\t}\n\n\tconst canEdit = !viewOnly && !disallowedEditingKeys.has(label)\n\tconst pinned = isAlwaysOnTop(label, isReplica)\n\tconst isSelfIdLink = label === \"id\" && referencedNode?.id === currentNodeId\n\n\tconst overrideHint = !showIndicators\n\t\t? undefined\n\t\t: pinned\n\t\t\t? undefined\n\t\t\t: isReplica && isReplicaOverride\n\t\t\t\t? \"Variant override\"\n\t\t\t\t: !isDefault && !(isReplica && isReplicaOverride)\n\t\t\t\t\t? isReplica\n\t\t\t\t\t\t? \"Inherited from master (non-default)\"\n\t\t\t\t\t\t: \"Non-default value\"\n\t\t\t\t\t: isDefault\n\t\t\t\t\t\t? \"Default value\"\n\t\t\t\t\t\t: undefined\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.propertyRow}\n\t\t\tstyle={{ opacity: 1 }}\n\t\t\ttitle={overrideHint}\n\t\t\tdata-overridden={showIndicators && !pinned && isReplica && isReplicaOverride ? \"\" : undefined}\n\t\t\tdata-non-default={showIndicators && !pinned && !isDefault && !(isReplica && isReplicaOverride) ? \"\" : undefined}\n\t\t\tdata-inherited={showIndicators && !pinned && isReplica && !isReplicaOverride && !isDefined ? \"\" : undefined}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttitle={isPinned ? \"Unpin property\" : \"Pin property\"}\n\t\t\t\tclassName={styles.pinButton}\n\t\t\t\tdata-pin=\"\"\n\t\t\t\tdata-pinned={isPinned || undefined}\n\t\t\t\tonClick={() => onTogglePin(label)}\n\t\t\t>\n\t\t\t\t\uD83D\uDCCC\n\t\t\t</button>\n\t\t\t<div>\n\t\t\t\t<div className={styles.objectEntryRow}>\n\t\t\t\t\t{hasExpandable && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.objectToggle}\n\t\t\t\t\t\t\tdata-expanded={expanded || undefined}\n\t\t\t\t\t\t\tonClick={() => setExpanded(e => !e)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconCollapse />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t\t<span>{label}</span>\n\t\t\t\t\t<span>: </span>\n\t\t\t\t\t{isEditing ? (\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tautoFocus={true}\n\t\t\t\t\t\t\tvalue={editingValue}\n\t\t\t\t\t\t\tonChange={event => setEditingValue(event.currentTarget.value)}\n\t\t\t\t\t\t\tonFocus={event => selectEditingValue(event.currentTarget)}\n\t\t\t\t\t\t\tonBlur={() => setIsEditing(false)}\n\t\t\t\t\t\t\tonKeyDown={event => {\n\t\t\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\tsetNewValue(editingValue)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (event.key === \"Escape\") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\tsetIsEditing(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tspellCheck={false}\n\t\t\t\t\t\t\tclassName={styles.inlineEditInput}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{hasExpandable ? (\n\t\t\t\t\t\t\t\t!expanded && (\n\t\t\t\t\t\t\t\t\t// biome-ignore lint/nursery/noStaticElementInteractions: double-click preview to toggle expansion\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={`${truncateWithEllipsis} ${styles.objectPreview}`}\n\t\t\t\t\t\t\t\t\t\tonDoubleClick={() => setExpanded(e => !e)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{objectPreviewString(rawValue)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : isDefined ? (\n\t\t\t\t\t\t\t\treferencedNode && !isSelfIdLink ? (\n\t\t\t\t\t\t\t\t\t<NodeRefValue referencedNode={referencedNode} onClick={() => navigateToNodeId(referencedNode.id)} />\n\t\t\t\t\t\t\t\t) : moduleIdentifier ? (\n\t\t\t\t\t\t\t\t\t<ModuleIdentifierValue moduleIdentifier={moduleIdentifier} />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t// biome-ignore lint/nursery/noStaticElementInteractions: double-click to edit\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={styles.entryValue}\n\t\t\t\t\t\t\t\t\t\tdata-value-type={pendingValue !== null ? \"pending\" : getValueType(rawValue)}\n\t\t\t\t\t\t\t\t\t\tonDoubleClick={canEdit ? startEditing : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{pendingValue !== null ? pendingValue : value}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t// biome-ignore lint/nursery/noStaticElementInteractions: double-click to edit\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={styles.entryValue}\n\t\t\t\t\t\t\t\t\tdata-value-type=\"undefined\"\n\t\t\t\t\t\t\t\t\tonDoubleClick={canEdit ? startEditing : undefined}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!pinned && masterValue !== null && masterValue !== value && (\n\t\t\t\t\t\t\t\t<span className={styles.masterValue} title=\"Overridden value\">\n\t\t\t\t\t\t\t\t\t\u2190 {masterValue}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!pinned && defaultValue !== null && !isReplicaOverride && (\n\t\t\t\t\t\t\t\t<span className={styles.masterValue} title=\"Default value\">\n\t\t\t\t\t\t\t\t\t\u2190 {defaultValue}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{preview && <PreviewButton rawValue={preview.value} kind={preview.kind} />}\n\t\t\t\t\t\t\t{label.toLowerCase().endsWith(\"id\") && isDefined && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tdata-edit\n\t\t\t\t\t\t\t\t\tclassName={styles.editButton}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttitle={`Copy ${label}`}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tvoid copyText(getClipboardIdValue(rawValue, value))\n\t\t\t\t\t\t\t\t\t\ttoast({ type: \"add\", variant: \"success\", primaryText: `Copied ${label}`, duration: 1500 })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconCopy width={10} height={10} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{canEdit && (\n\t\t\t\t\t\t\t\t<button data-edit className={styles.editButton} type=\"button\" onClick={startEditing}>\n\t\t\t\t\t\t\t\t\t\u270F\uFE0F\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{expanded && hasExpandable && <ObjectChildren value={rawValue} />}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n", "import type React from \"react\"\n\nexport function IconCollapse(props: React.SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"8\" viewBox=\"0 0 5 6\" aria-hidden=\"true\" {...props}>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M4.59 1.992a.3.3 0 0 0-.231-.492H.641a.3.3 0 0 0-.231.492l1.86 2.231a.299.299 0 0 0 .46 0Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import type React from \"react\"\n\nexport function IconCopy(props: React.SVGProps<SVGSVGElement>) {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"12\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 12 12\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<rect x=\"4\" y=\"4\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n\t\t\t<path\n\t\t\t\td=\"M3 8H2C1.44772 8 1 7.55228 1 7V2C1 1.44772 1.44772 1 2 1H7C7.55228 1 8 1.44772 8 2V3\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.2\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import { IconArrowUpRight } from \"@framerjs/fresco/icons\"\nimport engine from \"document/engine.ts\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\n\nexport function ModuleIdentifierValue({\n\tmoduleIdentifier,\n}: {\n\tmoduleIdentifier: { value: string; canOpenCodeFile: boolean }\n}) {\n\tif (moduleIdentifier.canOpenCodeFile) {\n\t\treturn (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.nodeLink}\n\t\t\t\ttitle=\"Code file module identifier - click to open in code editor\"\n\t\t\t\tonClick={() => engine.stores.codeEditorStore.editFile(moduleIdentifier.value)}\n\t\t\t>\n\t\t\t\t{moduleIdentifier.value}\n\t\t\t\t<IconArrowUpRight className={styles.nodeLinkArrow} />\n\t\t\t</button>\n\t\t)\n\t}\n\n\treturn (\n\t\t<span className={styles.entryValue} data-value-type=\"string\" title=\"Module identifier\">\n\t\t\t{moduleIdentifier.value}\n\t\t</span>\n\t)\n}\n", "import type { ClassDiscriminator } from \"utils/withClassDiscriminator.ts\"\n\n/**\n * Every ClassDiscriminator member ending in \"Node\".\n * When a new node is added to the enum, TypeScript will enforce\n * that `nodeTypeColorKeys` gets a color entry for it.\n *\n * Colors are defined as CSS variables on the debug bar root (DebugBar.styles.ts)\n * and adapt to light/dark theme via body[data-framer-theme].\n */\nexport type NodeClassName = Extract<ClassDiscriminator, `${string}Node`>\n\ntype NodeTypeColorKey =\n\t| \"yellow\"\n\t| \"blue\"\n\t| \"rose\"\n\t| \"green\"\n\t| \"teal\"\n\t| \"purple\"\n\t| \"pink\"\n\t| \"orange\"\n\t| \"red\"\n\t| \"lime\"\n\t| \"slate\"\n\t| \"gray\"\n\nconst nodeTypeColorKeys: Record<NodeClassName, NodeTypeColorKey> = {\n\t// Base classes\n\tCanvasNode: \"gray\",\n\tCanvasScopeNode: \"gray\",\n\tMutableNode: \"gray\",\n\tRouteNode: \"gray\",\n\tRouteLocaleNode: \"gray\",\n\tScopeNode: \"gray\",\n\n\t// Structural / Root\n\tRootNode: \"yellow\",\n\tWebPageNode: \"yellow\",\n\tRouteSegmentRootNode: \"yellow\",\n\tEntityRootNode: \"yellow\",\n\tCanvasPageNode: \"yellow\",\n\tDesignPageNode: \"yellow\",\n\n\t// Containers & Layout\n\tFrameNode: \"blue\",\n\tLayoutTemplateNode: \"blue\",\n\tOverlayNode: \"rose\",\n\n\t// Text\n\tTextNode: \"green\",\n\tRichTextNode: \"green\",\n\n\t// Code & Components\n\tCodeComponentNode: \"teal\",\n\tSmartComponentNode: \"teal\",\n\tCustomCodeScopeNode: \"teal\",\n\tCustomCodeNode: \"teal\",\n\n\t// Branches\n\tBranchesNode: \"slate\",\n\tBranchNode: \"slate\",\n\n\t// Shapes & Vectors\n\tShapeContainerNode: \"purple\",\n\tShapeGroupNode: \"purple\",\n\tBooleanShapeNode: \"purple\",\n\tRectangleShapeNode: \"purple\",\n\tOvalShapeNode: \"purple\",\n\tStarShapeNode: \"purple\",\n\tPolygonShapeNode: \"purple\",\n\tVectorSetNode: \"purple\",\n\tPathNode: \"pink\",\n\n\t// SVG & Shader\n\tSVGNode: \"orange\",\n\tShaderNode: \"orange\",\n\n\t// Forms\n\tFormBooleanInputNode: \"pink\",\n\tFormPlainTextInputNode: \"pink\",\n\tFormSelectNode: \"pink\",\n\n\t// Slots\n\tSlotNode: \"yellow\",\n\tSlotPropertyNode: \"yellow\",\n\n\t// Collections & Content\n\tCollectionNode: \"red\",\n\tCollectionItemNode: \"red\",\n\tContentManagementNode: \"red\",\n\n\t// Errors\n\tErrorListNode: \"red\",\n\tErrorNode: \"red\",\n\n\t// Modules & Tokens\n\tExternalModulesListNode: \"orange\",\n\tExternalModuleNode: \"orange\",\n\tLocalModulesListNode: \"orange\",\n\tLocalModuleNode: \"orange\",\n\tColorStyleTokenListNode: \"orange\",\n\tColorStyleTokenNode: \"orange\",\n\tPresetsListNode: \"orange\",\n\n\t// Style Presets\n\tComponentPresetNode: \"slate\",\n\tBlockquoteStylePresetNode: \"slate\",\n\tTableStylePresetNode: \"slate\",\n\tTextStylePresetNode: \"slate\",\n\tLinkStylePresetNode: \"slate\",\n\tInlineCodeStylePresetNode: \"slate\",\n\tImageStylePresetNode: \"slate\",\n\n\t// Routes\n\tRoutesNode: \"lime\",\n\tRouteSegmentNode: \"lime\",\n\tRedirectRouteNode: \"lime\",\n\tRewriteRouteNode: \"lime\",\n\tProxyRouteNode: \"lime\",\n\tHeaderRouteNode: \"lime\",\n\n\t// Entity Type Roots\n\tAbTestsEntityTypeRootNode: \"gray\",\n\tBlockquoteEntityTypeRootNode: \"gray\",\n\tCMSEntityTypeRootNode: \"gray\",\n\tCodeFileEntityTypeRootNode: \"gray\",\n\tColorEntityTypeRootNode: \"gray\",\n\tComponentEntityTypeRootNode: \"gray\",\n\tFunnelsEntityTypeRootNode: \"gray\",\n\tInlineCodeEntityTypeRootNode: \"gray\",\n\tLayoutTemplateEntityTypeRootNode: \"gray\",\n\tLinkEntityTypeRootNode: \"gray\",\n\tTextEntityTypeRootNode: \"gray\",\n\tVectorSetEntityTypeRootNode: \"gray\",\n\tContentManagementEntityTypeRootNode: \"gray\",\n\n\t// Entity Structure\n\tEntityFolderNode: \"slate\",\n\tEntityReferenceNode: \"slate\",\n\n\t// Funnels\n\tFunnelNode: \"orange\",\n\tFunnelStepNode: \"orange\",\n\tFunnelStepActionNode: \"orange\",\n\n\t// Analytics\n\tAnalyticsScopeNode: \"slate\",\n\n\t// Localization\n\tLocalizationGlossaryNode: \"slate\",\n\tLocalizationGlossaryItemNode: \"slate\",\n}\n\nconst defaultColorKey: NodeTypeColorKey = \"gray\"\n\n/** Returns a CSS var() for the node type color; adapts to light/dark theme. */\nexport function getNodeTypeColor(nodeClass: string): string {\n\tconst key = nodeTypeColorKeys[nodeClass as NodeClassName] ?? defaultColorKey\n\treturn `var(--framer-treeView-${key})`\n}\n\nexport function NodeTypeTag({ nodeClass }: { nodeClass: string }) {\n\treturn <span style={{ color: getNodeTypeColor(nodeClass), flexShrink: 0 }}>{nodeClass}</span>\n}\n", "import { IconArrowUpRight } from \"@framerjs/fresco/icons\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { getNodeTypeColor } from \"./NodeTypeTag.tsx\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\n\nexport function NodeRefValue({ referencedNode, onClick }: { referencedNode: CanvasNode; onClick: () => void }) {\n\tconst color = getNodeTypeColor(referencedNode.__class)\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={styles.nodeLink}\n\t\t\tstyle={{ color }}\n\t\t\ttitle={`${referencedNode.__class} \u2014 click to navigate`}\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t{referencedNode.id}\n\t\t\t<IconArrowUpRight className={styles.nodeLinkArrow} />\n\t\t</button>\n\t)\n}\n", "import { truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { useMemo, useState } from \"react\"\nimport { IconCollapse } from \"./IconCollapse.tsx\"\nimport { ModuleIdentifierValue } from \"./ModuleIdentifierValue.tsx\"\nimport { PreviewButton } from \"./PreviewButton.tsx\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\nimport { fmt } from \"./nodeUtils.ts\"\nimport {\n\tgetModuleIdentifierValue,\n\tgetPreviewable,\n\tgetValueType,\n\tisExpandableValue,\n\tobjectPreviewString,\n} from \"./propertyUtils.ts\"\n\nexport function ObjectChildren({ value }: { value: Record<string, unknown> | unknown[] }) {\n\tconst entries = Array.isArray(value) ? value.map((v, i) => [String(i), v] as const) : Object.entries(value)\n\n\treturn (\n\t\t<div className={styles.objectChildren}>\n\t\t\t{entries.map(([key, val]) => {\n\t\t\t\tconst expandable = isExpandableValue(val)\n\t\t\t\treturn <ObjectEntry key={key} label={key} value={val} expandable={expandable} />\n\t\t\t})}\n\t\t</div>\n\t)\n}\n\nfunction ObjectEntry({ label, value, expandable }: { label: string; value: unknown; expandable: boolean }) {\n\tconst [expanded, setExpanded] = useState(false)\n\tconst preview = useMemo(() => getPreviewable(value), [value])\n\tconst moduleIdentifier = useMemo(() => getModuleIdentifierValue(value), [value])\n\n\treturn (\n\t\t<div className={styles.objectEntry}>\n\t\t\t<div className={styles.objectEntryRow}>\n\t\t\t\t{expandable && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.objectToggle}\n\t\t\t\t\t\tdata-expanded={expanded || undefined}\n\t\t\t\t\t\tonClick={() => setExpanded(e => !e)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconCollapse />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t\t<span>{label}</span>\n\t\t\t\t<span>: </span>\n\t\t\t\t{expandable ? (\n\t\t\t\t\t!expanded && (\n\t\t\t\t\t\t<span className={`${truncateWithEllipsis} ${styles.objectPreview}`}>{objectPreviewString(value)}</span>\n\t\t\t\t\t)\n\t\t\t\t) : moduleIdentifier ? (\n\t\t\t\t\t<ModuleIdentifierValue moduleIdentifier={moduleIdentifier} />\n\t\t\t\t) : (\n\t\t\t\t\t<span className={styles.entryValue} data-value-type={getValueType(value)}>\n\t\t\t\t\t\t{fmt(value)}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{preview && <PreviewButton rawValue={preview.value} kind={preview.kind} />}\n\t\t\t</div>\n\t\t\t{expanded && isExpandableValue(value) && <ObjectChildren value={value} />}\n\t\t</div>\n\t)\n}\n", "import { Popover } from \"@framerjs/fresco\"\nimport { useRef, useState } from \"react\"\nimport { IconEye } from \"./IconEye.tsx\"\nimport * as styles from \"./PropertyPanel.styles.ts\"\n\nexport type PreviewKind = \"html\" | \"image\"\n\nexport function PreviewButton({ rawValue, kind }: { rawValue: string; kind: PreviewKind }) {\n\tconst [open, setOpen] = useState(false)\n\tconst anchorRef = useRef<HTMLButtonElement>(null)\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={anchorRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\ttitle={kind === \"html\" ? \"Preview HTML\" : \"Preview image\"}\n\t\t\t\tclassName={styles.previewButton}\n\t\t\t\tonClick={() => setOpen(prev => !prev)}\n\t\t\t>\n\t\t\t\t<IconEye />\n\t\t\t</button>\n\t\t\t{open && (\n\t\t\t\t<Popover\n\t\t\t\t\tanchor={anchorRef.current}\n\t\t\t\t\tattachTo={[\"bottom\", \"top\", \"right\", \"left\"]}\n\t\t\t\t\talignSelf=\"start\"\n\t\t\t\t\tshowArrow={false}\n\t\t\t\t\tonClose={() => setOpen(false)}\n\t\t\t\t\tonContextMenu={event => {\n\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className={styles.previewPopover}>\n\t\t\t\t\t\t{kind === \"html\" ? (\n\t\t\t\t\t\t\t<iframe\n\t\t\t\t\t\t\t\tsrcDoc={`<!DOCTYPE html><html><head><style>body{margin:0;padding:12px;font-family:system-ui,sans-serif;font-size:14px;color:#222;background:#fff;word-wrap:break-word}</style></head><body>${rawValue}</body></html>`}\n\t\t\t\t\t\t\t\tclassName={styles.previewIframe}\n\t\t\t\t\t\t\t\tsandbox=\"\"\n\t\t\t\t\t\t\t\ttitle=\"HTML preview\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={rawValue}\n\t\t\t\t\t\t\t\talt=\"Preview\"\n\t\t\t\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\t\t\t\tclassName={styles.previewImage}\n\t\t\t\t\t\t\t\tonError={e => {\n\t\t\t\t\t\t\t\t\t;(e.target as HTMLImageElement).alt = \"Failed to load image\"\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</>\n\t)\n}\n", "export function IconEye() {\n\treturn (\n\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\td=\"M8 3C4.364 3 1.258 5.318.5 8c.758 2.682 3.864 5 7.5 5s6.742-2.318 7.5-5c-.758-2.682-3.864-5-7.5-5Z\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.2\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n\t\t</svg>\n\t)\n}\n", "import { Dictionary } from \"app/dictionary.ts\"\nimport { getDefaultName } from \"document/components/utils/nodes.ts\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { isScopeNode } from \"document/models/CanvasTree/nodes/ScopeNode.ts\"\nimport {\n\tisBranchNode,\n\tisCollectionItemNode,\n\tisCollectionNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { withGetName } from \"document/models/CanvasTree/traits/WithGetName.ts\"\nimport { isMaster, isReplica } from \"document/models/CanvasTree/traits/WithTemplate.ts\"\nimport {\n\tisBreakpointVariant,\n\tisGestureVariant,\n\tisVariant,\n\ttitleForGestureType,\n} from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport { copyText } from \"utils/clipboard/copyText.ts\"\nimport { getCollectionItemName } from \"utils/collectionUtils.ts\"\nimport { truncateStringWithEllipsis } from \"utils/truncateString.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\n\nexport interface TreeLookup {\n\treadonly root: CanvasNode\n\tget(id: string | null | undefined): CanvasNode | null\n}\n\nexport const PAGE_SIZE = 100\nconst MAX_NODE_NAME_CHARS = 40\n\n/**\n * Mirrors the display name logic from the layers panel\n * (`getNodeDisplayName` in Layers.tsx + gesture suffix in LayerPanelItem).\n *\n * For gesture variants the raw `resolveValue(\"name\")` is unreliable\n * (PTD prototype chain resolves to the master's name), so we look up\n * the top-level variant via `replicaInfo.inheritsFrom` instead \u2014\n * the same approach `SmartComponentNode.getTopLevelVariantForGesture` uses.\n */\nexport function getNodeName(node: CanvasNode): string | null {\n\tif (isBranchNode(node)) {\n\t\treturn truncateStringWithEllipsis(node.title, MAX_NODE_NAME_CHARS)\n\t}\n\n\tif (node.__class === \"WebPageNode\") {\n\t\tconst pagePath = prop(node, \"pagePath\") as string | undefined\n\t\tif (pagePath !== undefined) return truncateStringWithEllipsis(`${pagePath}`, MAX_NODE_NAME_CHARS)\n\t}\n\n\tif (node.__class === \"RouteSegmentNode\") {\n\t\tconst segment = prop(node, \"segment\") as string | undefined\n\t\tif (segment) return truncateStringWithEllipsis(segment, MAX_NODE_NAME_CHARS)\n\t}\n\n\tif (isCollectionItemNode(node)) {\n\t\tconst tree = node.tree()\n\t\tconst collection = tree?.getParent(node.id)\n\t\tif (isCollectionNode(collection)) {\n\t\t\treturn truncateStringWithEllipsis(getCollectionItemName(collection, node), MAX_NODE_NAME_CHARS)\n\t\t}\n\t\treturn truncateStringWithEllipsis(Dictionary.CollectionItem, MAX_NODE_NAME_CHARS)\n\t}\n\n\tif (isGestureVariant(node)) {\n\t\tconst topLevelId = node.replicaInfo.inheritsFrom\n\t\tif (topLevelId) {\n\t\t\tconst topLevel = engine.tree.getNode(topLevelId)\n\t\t\tif (topLevel) {\n\t\t\t\tconst topLevelName = topLevel.resolveValue(\"name\")\n\t\t\t\tconst baseName = isString(topLevelName) ? topLevelName : getDefaultName(engine.componentLoader, topLevel)\n\t\t\t\treturn truncateStringWithEllipsis(`${baseName} \u00B7 ${titleForGestureType(node.gesture)}`, MAX_NODE_NAME_CHARS)\n\t\t\t}\n\t\t}\n\t\treturn truncateStringWithEllipsis(\n\t\t\t`${getDefaultName(engine.componentLoader, node)} \u00B7 ${titleForGestureType(node.gesture)}`,\n\t\t\tMAX_NODE_NAME_CHARS,\n\t\t)\n\t}\n\n\tconst showPrimarySuffix = isVariant(node) && isMaster(node) && !isReplica(node) && !isBreakpointVariant(node)\n\n\tconst name = node.resolveValue(\"name\")\n\tif (isString(name)) {\n\t\tlet label = name\n\t\tif (showPrimarySuffix) {\n\t\t\tlabel += ` \u00B7 ${Dictionary.Primary}`\n\t\t}\n\t\treturn truncateStringWithEllipsis(label, MAX_NODE_NAME_CHARS)\n\t}\n\n\tif (withGetName(node)) {\n\t\treturn truncateStringWithEllipsis(node.getName(), MAX_NODE_NAME_CHARS)\n\t}\n\n\tconst defaultName = getDefaultName(engine.componentLoader, node, node.__class)\n\tif (defaultName === node.__class) return null\n\n\tlet label = defaultName\n\tif (showPrimarySuffix) {\n\t\tlabel += ` \u00B7 ${Dictionary.Primary}`\n\t}\n\treturn truncateStringWithEllipsis(label, MAX_NODE_NAME_CHARS)\n}\n\n/** Safely get children, respecting scope loading state. */\nexport function getChildren(node: CanvasNode): CanvasNode[] {\n\tif (isScopeNode(node, true)) {\n\t\tif (!node.isLoaded()) return []\n\t}\n\treturn node.children?.toArray() ?? []\n}\n\n/** Returns true if the node is a scope that hasn't been loaded yet. */\nexport function isShallowScope(node: CanvasNode): boolean {\n\treturn isScopeNode(node, true) && !node.isLoaded()\n}\n\n/** Returns the IDs of all ancestors from root down to (but not including) the target node, or null if not found. */\nexport function findPathToNode(tree: TreeLookup, targetId: string): string[] | null {\n\tif (tree.root.id === targetId) return []\n\tconst target = tree.get(targetId)\n\tif (!target) return null\n\n\tconst path: string[] = []\n\tlet node = tree.get(target.parentid)\n\twhile (node && node.id !== tree.root.id) {\n\t\tpath.push(node.id)\n\t\tnode = tree.get(node.parentid)\n\t}\n\tif (!node) return null\n\tpath.reverse()\n\treturn path\n}\n\n/**\n * Walk the ancestor path to targetId and return updated visible limits\n * so that each child along the path is within its parent's rendered page.\n */\nexport function ensureVisibleLimitsForPath(\n\ttree: TreeLookup,\n\ttargetId: string,\n\tcurrentLimits: ReadonlyMap<string, number>,\n): ReadonlyMap<string, number> {\n\tconst path = findPathToNode(tree, targetId)\n\tif (!path) return currentLimits\n\n\tlet updated: Map<string, number> | null = null\n\tlet current: CanvasNode | null = tree.root\n\n\tconst childPath = [...path, targetId]\n\tfor (let i = 0; i < childPath.length; i++) {\n\t\tif (!current) break\n\t\tconst childId = childPath[i] as string\n\t\tconst children = getChildren(current)\n\t\tconst childIndex = children.findIndex(c => c.id === childId)\n\t\tif (childIndex === -1) break\n\n\t\tconst limitKey = current.id\n\t\tconst currentLimit = (updated ?? currentLimits).get(limitKey) ?? PAGE_SIZE\n\t\tif (childIndex >= currentLimit) {\n\t\t\tif (!updated) updated = new Map(currentLimits)\n\t\t\tconst needed = Math.ceil((childIndex + 1) / PAGE_SIZE) * PAGE_SIZE\n\t\t\tupdated.set(limitKey, needed)\n\t\t}\n\n\t\tcurrent = children.at(childIndex) ?? null\n\t}\n\n\treturn updated ?? currentLimits\n}\n\n/** Read a property from a node that may come from a trait mixin. */\nexport function prop(node: CanvasNode, key: string): unknown {\n\treturn (node as unknown as Record<string, unknown>)[key]\n}\n\nexport function buildPathToNode(tree: TreeLookup, targetId: string): string[] {\n\tconst target = tree.get(targetId)\n\tif (!target) return []\n\n\tconst path: string[] = [targetId]\n\tlet node = tree.get(target.parentid)\n\twhile (node && node.id !== tree.root.id) {\n\t\tpath.push(node.id)\n\t\tnode = tree.get(node.parentid)\n\t}\n\tpath.reverse()\n\treturn path\n}\n\nconst navigableNodeClasses = new Set([\n\t// Visual elements (have DOM layout)\n\t\"FrameNode\",\n\t\"TextNode\",\n\t\"RichTextNode\",\n\t\"SVGNode\",\n\t\"ShaderNode\",\n\t\"CodeComponentNode\",\n\t\"SlotNode\",\n\t\"SlotPropertyNode\",\n\t\"ShapeContainerNode\",\n\t\"ShapeGroupNode\",\n\t\"PathNode\",\n\t\"BooleanShapeNode\",\n\t\"RectangleShapeNode\",\n\t\"OvalShapeNode\",\n\t\"StarShapeNode\",\n\t\"PolygonShapeNode\",\n\t\"OverlayNode\",\n\t\"FormSelectNode\",\n\t\"FormPlainTextInputNode\",\n\t\"FormBooleanInputNode\",\n\t// Collections & CMS\n\t\"CollectionNode\",\n\t\"CollectionItemNode\",\n\t\"ContentManagementNode\",\n\t// Pages & components (scope nodes you can navigate into)\n\t\"WebPageNode\",\n\t\"DesignPageNode\",\n\t\"CanvasPageNode\",\n\t\"SmartComponentNode\",\n\t\"LayoutTemplateNode\",\n\t\"VectorSetNode\",\n])\n\nexport function canNavigateToNode(node: CanvasNode): boolean {\n\treturn navigableNodeClasses.has(node.__class)\n}\n\nfunction serializeValue(val: unknown): unknown {\n\tif (val === null || val === undefined) return val\n\tif (typeof val === \"function\") return undefined\n\tif (typeof val !== \"object\") return val\n\n\ttry {\n\t\treturn JSON.parse(JSON.stringify(val))\n\t} catch {\n\t\t// Circular or cross-origin \u2014 shallow-serialize one level\n\t\treturn shallowSerialize(val as Record<string, unknown>)\n\t}\n}\n\nfunction shallowSerialize(obj: Record<string, unknown>): Record<string, unknown> {\n\tconst out: Record<string, unknown> = {}\n\tlet keys: string[] | undefined\n\ttry {\n\t\tkeys = Object.keys(obj)\n\t} catch {\n\t\treturn { _error: \"[Inaccessible]\" }\n\t}\n\tfor (const key of keys) {\n\t\ttry {\n\t\t\tconst val = obj[key]\n\t\t\tif (typeof val === \"function\") continue\n\t\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\t\ttry {\n\t\t\t\t\tout[key] = JSON.parse(JSON.stringify(val))\n\t\t\t\t} catch {\n\t\t\t\t\tout[key] = String(val)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tout[key] = val\n\t\t\t}\n\t\t} catch {\n\t\t\tout[key] = \"[Inaccessible]\"\n\t\t}\n\t}\n\treturn out\n}\n\nfunction safeStringify(node: CanvasNode, { includeCache = false } = {}): string {\n\tconst result: Record<string, unknown> = {}\n\tlet keys: string[] | undefined\n\ttry {\n\t\tkeys = node.keys()\n\t} catch {\n\t\treturn JSON.stringify({ id: node.id, __class: node.__class })\n\t}\n\tconst skipKeys = new Set([\"mutable\", \"update\"])\n\tif (!includeCache) skipKeys.add(\"cache\")\n\tfor (const key of keys) {\n\t\tif (skipKeys.has(key)) continue\n\t\tif (key === \"children\") {\n\t\t\tconst children = getChildren(node)\n\t\t\tresult.children = children.map(c => `${c.__class}#${c.id}`)\n\t\t\tcontinue\n\t\t}\n\t\ttry {\n\t\t\tconst val = (node as unknown as Record<string, unknown>)[key]\n\t\t\tconst serialized = serializeValue(val)\n\t\t\tif (serialized !== undefined) result[key] = serialized\n\t\t} catch {\n\t\t\tresult[key] = \"[Inaccessible]\"\n\t\t}\n\t}\n\treturn JSON.stringify(result, null, 2)\n}\n\nexport async function copyNodeToClipboard(node: CanvasNode, includeCache: boolean) {\n\ttry {\n\t\tawait copyText(safeStringify(node, { includeCache }))\n\t\tconst label = includeCache ? \"Copied shallow JSON (with cache) to clipboard\" : \"Copied shallow JSON to clipboard\"\n\t\ttoast({ type: \"add\", variant: \"success\", primaryText: label, duration: 2000 })\n\t} catch {\n\t\ttoast({ type: \"add\", variant: \"error\", primaryText: \"Failed to copy node\", duration: 2000 })\n\t}\n}\n\nexport async function copyNodeToJS(node: CanvasNode) {\n\ttry {\n\t\tconst js = (node as unknown as { toJS(): Record<string, unknown> }).toJS()\n\t\tawait copyText(JSON.stringify(js, null, 2))\n\t\ttoast({ type: \"add\", variant: \"success\", primaryText: \"Copied node.toJS() to clipboard\", duration: 2000 })\n\t} catch {\n\t\ttoast({ type: \"add\", variant: \"error\", primaryText: \"Failed to copy node.toJS()\", duration: 2000 })\n\t}\n}\n\nexport function fmt(value: unknown): string {\n\tif (value === undefined) return \"undefined\"\n\tif (value === null) return \"null\"\n\tif (typeof value === \"number\") return Number.isInteger(value) ? String(value) : value.toFixed(1)\n\tif (typeof value === \"boolean\") return value ? \"true\" : \"false\"\n\tif (typeof value === \"string\") return '\"' + value + '\"'\n\tif (typeof value === \"object\" && \"value\" in value) return fmt((value as { value: unknown }).value)\n\ttry {\n\t\treturn JSON.stringify(value)\n\t} catch {\n\t\treturn \"couldn't stringify\"\n\t}\n}\n", "import { createAbsoluteImageAssetURL, isAssetReference, parseAssetReference } from \"@framerjs/assets\"\nimport { ModuleType, isLocalModuleIdentifier, parseModuleIdentifier } from \"@framerjs/shared\"\nimport type { PreviewKind } from \"./PreviewButton.tsx\"\nimport { fmt } from \"./nodeUtils.ts\"\n\n/** Unwrap Generated<T>, { value: T }, or { url: T } wrappers to get the inner string. */\nexport function unwrapString(rawValue: unknown): string | null {\n\tif (typeof rawValue === \"string\") return rawValue\n\tif (typeof rawValue === \"object\" && rawValue !== null) {\n\t\tconst obj = rawValue as Record<string, unknown>\n\t\tif (\"value\" in obj) return unwrapString(obj.value)\n\t\tif (\"url\" in obj) return unwrapString(obj.url)\n\t}\n\treturn null\n}\n\nconst htmlTagPattern =\n\t/<(?:[pdabi]|div|span|h[1-6]|ul|ol|li|img|br|table|tr|td|th|strong|em|blockquote|pre|code|section|article|header|footer|figure|figcaption)\\b/iu\n\nfunction isHtmlString(s: string): boolean {\n\treturn s.length >= 3 && htmlTagPattern.test(s)\n}\n\nconst imageUrlPattern = /\\.(?:jpg|jpeg|png|gif|webp|svg|avif)(?:\\?|$)/iu\nconst httpUrlPattern = /^https?:\\/\\//iu\n\nfunction isImageString(s: string): boolean {\n\tif (s.length < 5) return false\n\tif (s.startsWith(\"data:image/\")) return true\n\tif (s.startsWith(\"asset://\")) return true\n\tif (httpUrlPattern.test(s) && imageUrlPattern.test(s)) return true\n\treturn false\n}\n\nfunction resolvePreviewImageSource(s: string): string | null {\n\tif (isAssetReference(s)) {\n\t\tconst parsed = parseAssetReference(s)\n\t\tif (parsed) return createAbsoluteImageAssetURL(parsed.identifier)\n\t}\n\tif (isImageString(s)) return s\n\treturn null\n}\n\nexport function getModuleIdentifierValue(rawValue: unknown): { value: string; canOpenCodeFile: boolean } | null {\n\tconst s = unwrapString(rawValue)\n\tif (!s) return null\n\tconst parsed = parseModuleIdentifier(s)\n\tif (!parsed) return null\n\tconst canOpenCodeFile = isLocalModuleIdentifier(parsed) && parsed.type === ModuleType.Code\n\treturn { value: s, canOpenCodeFile }\n}\n\nexport function getPreviewable(rawValue: unknown): { kind: PreviewKind; value: string } | null {\n\tconst s = unwrapString(rawValue)\n\tif (!s) return null\n\tconst imageSource = resolvePreviewImageSource(s)\n\tif (imageSource) return { kind: \"image\", value: imageSource }\n\tif (isHtmlString(s)) return { kind: \"html\", value: s }\n\treturn null\n}\n\nexport function getValueType(rawValue: unknown): \"undefined\" | \"null\" | \"number\" | \"boolean\" | \"string\" | \"other\" {\n\tif (rawValue === undefined) return \"undefined\"\n\tif (rawValue === null) return \"null\"\n\tif (typeof rawValue === \"number\") return \"number\"\n\tif (typeof rawValue === \"boolean\") return \"boolean\"\n\tif (typeof rawValue === \"string\") return \"string\"\n\treturn \"other\"\n}\n\nexport function isExpandableValue(value: unknown): value is Record<string, unknown> | unknown[] {\n\tif (value === null || value === undefined) return false\n\tif (typeof value !== \"object\") return false\n\tif (Array.isArray(value)) return value.length > 0\n\tconst keys = Object.keys(value)\n\tif (keys.length === 0) return false\n\tif (\"value\" in value && keys.length === 1) return false\n\treturn true\n}\n\nexport function objectPreviewString(value: unknown): string {\n\tif (Array.isArray(value)) {\n\t\tif (value.length === 0) return \"[]\"\n\t\tconst items = value.slice(0, 5).map(v => fmt(v))\n\t\tconst suffix = value.length > 5 ? \", \u2026\" : \"\"\n\t\treturn `[${items.join(\", \")}${suffix}]`\n\t}\n\tif (typeof value === \"object\" && value !== null) {\n\t\tconst keys = Object.keys(value)\n\t\tif (keys.length === 0) return \"{}\"\n\t\tconst items = keys.slice(0, 4).map(k => `${k}: ${fmt((value as Record<string, unknown>)[k])}`)\n\t\tconst suffix = keys.length > 4 ? \", \u2026\" : \"\"\n\t\treturn `{${items.join(\", \")}${suffix}}`\n\t}\n\treturn fmt(value)\n}\n", "import engine from \"document/engine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { unwrapString } from \"./propertyUtils.ts\"\n\nexport function resolveNodeRef(rawValue: unknown): CanvasNode | null {\n\tconst s = unwrapString(rawValue)\n\tif (!s || s.length === 0) return null\n\tconst node = engine.tree.get(s)\n\tif (node) return node\n\ttry {\n\t\tconst dataTree = engine.stores.treeStore.getDataTree()\n\t\treturn dataTree?.getCanvasTreeProxy().get(s) ?? null\n\t} catch {\n\t\treturn null\n\t}\n}\n", "export function IconInfoCircle() {\n\treturn (\n\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n\t\t\t<circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n\t\t\t<path d=\"M6 5.5V8.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n\t\t\t<circle cx=\"6\" cy=\"3.75\" r=\"0.75\" fill=\"currentColor\" />\n\t\t</svg>\n\t)\n}\n", "export function IconScope() {\n\treturn (\n\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n\t\t\t<circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n\t\t\t<circle cx=\"6\" cy=\"6\" r=\"1.5\" fill=\"currentColor\" />\n\t\t\t<path\n\t\t\t\td=\"M6 0.5V2.5M6 9.5V11.5M0.5 6H2.5M9.5 6H11.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "export function IconSortAlpha() {\n\treturn (\n\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n\t\t\t<path d=\"M2 2.5h8M2 5h8M2 7.5h8M2 10h8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n\t\t</svg>\n\t)\n}\n", "export function IconSortGrouped() {\n\treturn (\n\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n\t\t\t<path d=\"M2 2.5h8M2 5h6M2 7.5h4M2 10h2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n\t\t</svg>\n\t)\n}\n", "import { DEFAULTS_FIELD, type WithProtoData } from \"document/models/CanvasTree/drivers/PrototypeTreeDriver.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { generateReplicaChildId } from \"document/models/CanvasTree/nodes/TemplateHelper.ts\"\nimport { isCodeComponentNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isLocalSmartComponentInstance } from \"document/models/CanvasTree/nodes/utils/smartComponentInstanceHelpers.ts\"\nimport type { ReplicaInfo } from \"document/models/CanvasTree/traits/WithTemplate.ts\"\nimport { isReplica, isReplicaOrReplicaChild } from \"document/models/CanvasTree/traits/WithTemplate.ts\"\nimport { type TreeLookup, fmt, getNodeName, prop } from \"./nodeUtils.ts\"\n\nfunction getDefaultsForNode(node: CanvasNode): Record<string, unknown> {\n\tconst defaults = (node as WithProtoData<CanvasNode>)[DEFAULTS_FIELD]\n\tif (defaults && typeof defaults === \"object\" && !Array.isArray(defaults)) {\n\t\treturn defaults as Record<string, unknown>\n\t}\n\treturn {}\n}\n\ninterface ReplicaContext {\n\tmasterName: string\n\tmasterId: string\n\toverriddenKeys: Set<string>\n\treplicaParent: {\n\t\tname: string\n\t\tnavigateToId: string\n\t} | null\n\t/** The node this replica inherits from: either `inheritsFrom` or the master. */\n\tinheritsFrom: {\n\t\tname: string\n\t\tnavigateToId: string\n\t\t/** When viewing a child, the name and ID of the parent variant/master. */\n\t\tvariantName: string | null\n\t\tvariantNavigateToId: string | null\n\t}\n}\n\nexport interface NodePropertyEntry {\n\tlabel: string\n\tvalue: string\n\trawValue: unknown\n\tisDefined: boolean\n\tisDefault: boolean\n\tisReplicaOverride: boolean\n\tmasterValue: string | null\n\tdefaultValue: string | null\n}\n\nfunction getReplicaParent(tree: TreeLookup, node: CanvasNode): ReplicaContext[\"replicaParent\"] {\n\tconst cachedAncestor = tree.get(node.cache.replicaAncestorId)\n\tif (cachedAncestor?.replicaInfo) {\n\t\treturn {\n\t\t\tname: getNodeName(cachedAncestor) ?? cachedAncestor.__class,\n\t\t\tnavigateToId: cachedAncestor.id,\n\t\t}\n\t}\n\tfor (const ancestor of node.ancestors()) {\n\t\tif (isReplica(ancestor)) {\n\t\t\treturn {\n\t\t\t\tname: getNodeName(ancestor) ?? ancestor.__class,\n\t\t\t\tnavigateToId: ancestor.id,\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nfunction getInheritsFrom(\n\ttree: TreeLookup,\n\treplicaInfo: ReplicaInfo,\n\tchildOriginalId: string | null,\n): ReplicaContext[\"inheritsFrom\"] {\n\tconst parentId = replicaInfo.inheritsFrom ?? replicaInfo.master\n\tconst parentNode = tree.get(parentId)\n\tconst variantName = parentNode ? (getNodeName(parentNode) ?? parentNode.__class) : parentId\n\n\tif (!childOriginalId) {\n\t\treturn { name: variantName, navigateToId: parentId, variantName: null, variantNavigateToId: null }\n\t}\n\n\t// Only generate a compound child ID when inheritsFrom points to a replica\n\t// whose children have compound IDs. The master's children use their\n\t// original IDs directly. Mirrors the check in CanvasNode.ts setProp.\n\tconst navigateToId =\n\t\tparentNode && isReplica(parentNode) ? generateReplicaChildId(parentId, childOriginalId) : childOriginalId\n\n\tconst childNode = tree.get(navigateToId)\n\tconst childName = childNode ? (getNodeName(childNode) ?? childNode.__class) : navigateToId\n\n\treturn { name: childName, navigateToId, variantName, variantNavigateToId: parentId }\n}\n\nfunction findReplicaInfo(tree: TreeLookup, node: CanvasNode): ReplicaInfo | undefined {\n\tif (node.replicaInfo) return node.replicaInfo\n\n\tconst cachedAncestor = tree.get(node.cache.replicaAncestorId)\n\tif (cachedAncestor?.replicaInfo) return cachedAncestor.replicaInfo\n\n\tfor (const ancestor of node.ancestors()) {\n\t\tif (isReplica(ancestor)) return ancestor.replicaInfo\n\t}\n\treturn undefined\n}\n\nfunction getReplicaContext(tree: TreeLookup, node: CanvasNode): ReplicaContext | null {\n\tif (!isReplicaOrReplicaChild(node) || !node.originalid) return null\n\n\tconst replicaInfo = findReplicaInfo(tree, node)\n\tif (!replicaInfo) return null\n\n\tconst overrides = replicaInfo.overrides\n\tconst nodeOverrides = overrides[node.originalid]\n\tconst overriddenKeys = new Set<string>()\n\tif (nodeOverrides) {\n\t\tfor (const key in nodeOverrides) {\n\t\t\tif (key === \"_deleted\") continue\n\t\t\toverriddenKeys.add(key)\n\t\t}\n\t\tconst deleted = nodeOverrides._deleted\n\t\tif (deleted) {\n\t\t\tfor (const key of deleted) overriddenKeys.add(key)\n\t\t}\n\t}\n\n\tconst masterNode = tree.get(node.originalid)\n\tconst masterName = masterNode ? (getNodeName(masterNode) ?? masterNode.__class) : node.originalid\n\tconst masterId = node.originalid\n\tconst isReplicaRoot = !!node.replicaInfo\n\tconst childOriginalId = isReplicaRoot ? null : node.originalid\n\tconst replicaParent = isReplicaRoot ? null : getReplicaParent(tree, node)\n\tconst inheritsFrom = getInheritsFrom(tree, replicaInfo, childOriginalId)\n\n\treturn { masterName, masterId, overriddenKeys, replicaParent, inheritsFrom }\n}\n\ninterface SmartComponentContext {\n\tname: string\n\tnodeClass: string\n\tnavigateToId: string\n}\n\nfunction getSmartComponentContext(tree: TreeLookup, node: CanvasNode): SmartComponentContext | null {\n\tif (!isCodeComponentNode(node) || !isLocalSmartComponentInstance(node)) return null\n\tconst scopeId = node.getLocalSmartComponentNodeId()\n\tif (!scopeId) return null\n\tconst scopeNode = tree.get(scopeId)\n\tif (!scopeNode) return null\n\tconst name = getNodeName(scopeNode) ?? scopeNode.__class\n\treturn { name, nodeClass: scopeNode.__class, navigateToId: scopeNode.id }\n}\n\nconst ignoredProperties = new Set([\"cache\", \"children\"])\n\nexport function collectNodeInfo(\n\ttree: TreeLookup,\n\tnode: CanvasNode,\n): {\n\tentries: NodePropertyEntry[]\n\treplicaContext: ReplicaContext | null\n\tsmartComponentContext: SmartComponentContext | null\n} {\n\tconst defaults = getDefaultsForNode(node)\n\tconst replica = getReplicaContext(tree, node)\n\tconst smartComponent = getSmartComponentContext(tree, node)\n\tconst masterNode = replica ? tree.get(replica.masterId) : null\n\n\tconst entries: NodePropertyEntry[] = []\n\tconst add = (label: string, value: unknown) => {\n\t\tconst s = fmt(value)\n\t\tconst isDefined = value !== undefined\n\t\tconst defaultFmt = fmt(defaults[label])\n\t\tconst isDefault = s === defaultFmt\n\t\tconst isReplicaOverride = replica ? replica.overriddenKeys.has(label) : false\n\t\tlet masterValue: string | null = null\n\t\tif (replica && masterNode && isReplicaOverride) {\n\t\t\tmasterValue = fmt(prop(masterNode, label))\n\t\t}\n\t\tconst defaultValue = !isDefault && label in defaults ? defaultFmt : null\n\t\tentries.push({\n\t\t\tlabel,\n\t\t\tvalue: s,\n\t\t\trawValue: value,\n\t\t\tisDefault,\n\t\t\tisDefined,\n\t\t\tisReplicaOverride,\n\t\t\tmasterValue,\n\t\t\tdefaultValue,\n\t\t})\n\t}\n\n\tfor (const key of node.keys()) {\n\t\tif (ignoredProperties.has(key)) continue\n\t\tadd(key, prop(node, key))\n\t}\n\n\treturn { entries, replicaContext: replica, smartComponentContext: smartComponent }\n}\n", "import { useCallback, useRef } from \"react\"\nimport * as styles from \"./ResizeHandle.styles.ts\"\n\ninterface ResizeHandleProps {\n\t/** Direction the handle controls. \"horizontal\" resizes left/right panels. */\n\tdirection?: \"horizontal\" | \"vertical\"\n\t/** Called continuously during drag with the delta in px (positive = right/down). */\n\tonResize: (delta: number) => void\n\t/** Called when dragging ends. */\n\tonResizeEnd?: () => void\n}\n\nexport function ResizeHandle({ direction = \"horizontal\", onResize, onResizeEnd }: ResizeHandleProps) {\n\tconst startPos = useRef(0)\n\n\tconst handlePointerDown = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\tconst el = e.currentTarget as HTMLElement\n\t\t\tel.setPointerCapture(e.pointerId)\n\t\t\tstartPos.current = direction === \"horizontal\" ? e.clientX : e.clientY\n\n\t\t\tconst onMove = (ev: PointerEvent) => {\n\t\t\t\tev.preventDefault()\n\t\t\t\tconst current = direction === \"horizontal\" ? ev.clientX : ev.clientY\n\t\t\t\tconst delta = current - startPos.current\n\t\t\t\tstartPos.current = current\n\t\t\t\tonResize(delta)\n\t\t\t}\n\n\t\t\tconst onUp = () => {\n\t\t\t\tel.removeEventListener(\"pointermove\", onMove)\n\t\t\t\tel.removeEventListener(\"pointerup\", onUp)\n\t\t\t\tonResizeEnd?.()\n\t\t\t}\n\n\t\t\tel.addEventListener(\"pointermove\", onMove)\n\t\t\tel.addEventListener(\"pointerup\", onUp)\n\t\t},\n\t\t[direction, onResize, onResizeEnd],\n\t)\n\n\treturn (\n\t\t<div\n\t\t\tclassName={direction === \"horizontal\" ? styles.handleHorizontal : styles.handleVertical}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t/>\n\t)\n}\n", "import \"ResizeHandle.styles_13blnk4.wyw.css\"; export const handleHorizontal = \"handleHorizontal_h1guofs9\";\nexport const handleVertical = \"handleVertical_h1b1o77e\";", "import \"SyncSelectionButton.styles_96gww9.wyw.css\"; export const syncSelectionButton = \"syncSelectionButton_skorqcd\";\nexport const syncSelectionButtonActive = \"syncSelectionButtonActive_syqazz2\";", "export function SyncSelectionIcon({ size = 14 }: { size?: number }) {\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t>\n\t\t\t<title>Sync selection</title>\n\t\t\t<path d=\"M14 4.1 12 6\" />\n\t\t\t<path d=\"m5.1 8-2.9-.8\" />\n\t\t\t<path d=\"m6 12-1.9 2\" />\n\t\t\t<path d=\"M7.2 2.2 8 5.1\" />\n\t\t\t<path d=\"M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z\" />\n\t\t</svg>\n\t)\n}\n", "import { Button } from \"@framerjs/fresco\"\nimport type { Dispatch, SetStateAction } from \"react\"\nimport * as styles from \"./SyncSelectionButton.styles.ts\"\nimport { SyncSelectionIcon } from \"./SyncSelectionIcon.tsx\"\n\nexport function SyncSelectionButton({\n\tfollowSelection,\n\tsetFollowSelection,\n}: {\n\tfollowSelection: boolean\n\tsetFollowSelection: Dispatch<SetStateAction<boolean>>\n}) {\n\treturn (\n\t\t<Button\n\t\t\tonClick={() => setFollowSelection(prev => !prev)}\n\t\t\tclassName={followSelection ? styles.syncSelectionButtonActive : styles.syncSelectionButton}\n\t\t>\n\t\t\t<SyncSelectionIcon size={12} />\n\t\t\tSync selection\n\t\t</Button>\n\t)\n}\n", "import \"TreeView.styles_1cz0rpg.wyw.css\"; export const emptyState = \"emptyState_e1h4qfm8\";\nexport const toolbar = \"toolbar_t1z8yaq\";\nexport const contentArea = \"contentArea_c1k3n1xq\";\nexport const treePane = \"treePane_tx27h34\";\nexport const treeContent = \"treeContent_t1dfkowc\";\nexport const navButton = \"navButton_n1nien5\";\nexport const propertyPane = \"propertyPane_p1krrtvq\";\nexport const missingNodeWarning = \"missingNodeWarning_mja9xm9\";", "import { IconInputClose, Popover, Stack, TextInput } from \"@framerjs/fresco\"\nimport { IconButton } from \"@framerjs/fresco/components/IconButton\"\nimport { IconChevronDown, IconChevronUp } from \"@framerjs/fresco/icons\"\nimport { dimensions } from \"@framerjs/fresco/src/tokens\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useLocalStorageState } from \"../../useLocalStorageState.tsx\"\nimport { IconInfoCircle } from \"../IconInfoCircle.tsx\"\nimport * as styles from \"./Filters.styles.ts\"\nimport type { TreeFilter } from \"./treeFilter.ts\"\nimport { parseFilterString } from \"./treeFilter.ts\"\n\ninterface FiltersProps {\n\tfilters: TreeFilter[]\n\tonChange: (filters: TreeFilter[]) => void\n\tmatchIds: readonly string[]\n\tonNavigateMatch: (nodeId: string) => void\n\tonSetInputRef: (setter: (text: string) => void) => void\n}\n\nexport function Filters({ onChange, matchIds, onNavigateMatch, onSetInputRef }: FiltersProps) {\n\tconst [input, setInput] = useLocalStorageState<string>(\"debugbar.filters.input\", \"\")\n\tconst [matchIndex, setMatchIndex] = useState(0)\n\tconst [showExamples, setShowExamples] = useState(false)\n\n\tconst timerRef = useRef<ReturnType<typeof setTimeout>>()\n\tconst prevMatchKeyRef = useRef(\"\")\n\tconst infoButtonRef = useRef<HTMLDivElement>(null)\n\n\tuseEffect(() => {\n\t\tonSetInputRef(setInput)\n\t}, [onSetInputRef, setInput])\n\n\tuseEffect(() => {\n\t\tclearTimeout(timerRef.current)\n\t\ttimerRef.current = setTimeout(() => {\n\t\t\tonChange(parseFilterString(input))\n\t\t}, 200)\n\t\treturn () => clearTimeout(timerRef.current)\n\t}, [input, onChange])\n\n\tconst matchKey = matchIds.join(\",\")\n\tif (matchKey !== prevMatchKeyRef.current) {\n\t\tprevMatchKeyRef.current = matchKey\n\t\tif (matchIndex !== 0) setMatchIndex(0)\n\t}\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: keyed on matchKey to avoid running on every render\n\tuseEffect(() => {\n\t\tconst firstId = matchIds[0]\n\t\tif (firstId) onNavigateMatch(firstId)\n\t}, [matchKey])\n\n\tconst onInputChange = useCallback(\n\t\t(value: string) => {\n\t\t\tsetInput(value)\n\t\t},\n\t\t[setInput],\n\t)\n\n\tconst goToMatch = useCallback(\n\t\t(index: number) => {\n\t\t\tif (matchIds.length === 0) return\n\t\t\tconst wrapped = ((index % matchIds.length) + matchIds.length) % matchIds.length\n\t\t\tsetMatchIndex(wrapped)\n\t\t\tconst id = matchIds[wrapped]\n\t\t\tif (id) onNavigateMatch(id)\n\t\t},\n\t\t[matchIds, onNavigateMatch],\n\t)\n\n\tconst goPrev = useCallback(() => goToMatch(matchIndex - 1), [goToMatch, matchIndex])\n\tconst goNext = useCallback(() => goToMatch(matchIndex + 1), [goToMatch, matchIndex])\n\n\tconst hasResults = input.trim().length > 0 && matchIds.length > 0\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<TextInput\n\t\t\t\tvalue={input}\n\t\t\t\tonChange={onInputChange}\n\t\t\t\tconstantChange\n\t\t\t\tselectOnFocus={false}\n\t\t\t\tplaceholder=\"name or id, key:value, key!, ?predicate\"\n\t\t\t\tonKeyDown={e => {\n\t\t\t\t\tif (e.key === \"Escape\") {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tsetInput(\"\")\n\t\t\t\t\t} else if (e.key === \"Enter\" || e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tif (e.shiftKey || e.key === \"ArrowUp\") goPrev()\n\t\t\t\t\t\telse goNext()\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{input.trim() ? (\n\t\t\t\t<div className={styles.controls}>\n\t\t\t\t\t<span className={styles.badge}>{matchIds.length === 0 ? \"0\" : `${matchIndex + 1}/${matchIds.length}`}</span>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\ticon={<IconChevronUp />}\n\t\t\t\t\t\tonMouseDown={goPrev}\n\t\t\t\t\t\tlabel=\"Previous match (Shift+Enter)\"\n\t\t\t\t\t\tenabled={hasResults}\n\t\t\t\t\t\tclassName={styles.arrowButton}\n\t\t\t\t\t\ttitle=\"Previous match (Shift+Enter)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\ticon={<IconChevronDown />}\n\t\t\t\t\t\tonMouseDown={goNext}\n\t\t\t\t\t\tlabel=\"Next match (Enter)\"\n\t\t\t\t\t\tenabled={hasResults}\n\t\t\t\t\t\tclassName={styles.arrowButton}\n\t\t\t\t\t\ttitle=\"Next match (Enter)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\ticon={<IconInputClose />}\n\t\t\t\t\t\tonMouseDown={() => setInput(\"\")}\n\t\t\t\t\t\tlabel=\"Clear search filter\"\n\t\t\t\t\t\tenabled={input.trim().length > 0}\n\t\t\t\t\t\tclassName={styles.clearButton}\n\t\t\t\t\t\ttitle=\"Clear search filter\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div ref={infoButtonRef} className={styles.controls}>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\ticon={<IconInfoCircle />}\n\t\t\t\t\t\t\tonMouseDown={e => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\tsetShowExamples(s => !s)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tlabel=\"Show filter query examples\"\n\t\t\t\t\t\t\tclassName={styles.arrowButton}\n\t\t\t\t\t\t\ttitle=\"Show filter query examples\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t{showExamples && (\n\t\t\t\t\t\t<Popover\n\t\t\t\t\t\t\tanchor={infoButtonRef.current}\n\t\t\t\t\t\t\talignSelf=\"end\"\n\t\t\t\t\t\t\tattachTo=\"bottom\"\n\t\t\t\t\t\t\toffset={{ x: 0, y: 4 }}\n\t\t\t\t\t\t\tshowArrow={false}\n\t\t\t\t\t\t\tbackdropEnabled={true}\n\t\t\t\t\t\t\tfocusTrapEnabled={false}\n\t\t\t\t\t\t\tanimateAppear={false}\n\t\t\t\t\t\t\tthemeBehavior=\"none\"\n\t\t\t\t\t\t\tonClose={() => setShowExamples(false)}\n\t\t\t\t\t\t\tclassName={styles.examplesPopover}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Stack direction=\"column\" gap={8} padding={dimensions.css.panelPadding}>\n\t\t\t\t\t\t\t\t<div className={styles.examplesTitle}>Query examples:</div>\n\t\t\t\t\t\t\t\t<ul className={styles.examplesList}>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>MyFrame</code> \u2192 Find nodes by name or id\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>width:100</code> \u2192 Find nodes with{\" \"}\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>width=100</code>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>isVisible!</code> \u2192 Find nodes where{\" \"}\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>isVisible</code> is defined\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>?node=&gt;node.width&gt;200</code> \u2192 Find nodes with{\" \"}\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>width &gt; 200</code>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t<code className={styles.exampleCode}>Header, visible:true</code> \u2192 Multiple queries\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t<div className={styles.examplesFooter}>\n\t\t\t\t\t\t\t\t\tPress <b>Enter</b> / <b>\u2193</b> to next result, <b>Shift+Enter</b> / <b>\u2191</b> to prev result, <b>Esc</b>{\" \"}\n\t\t\t\t\t\t\t\t\tto clear.\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Popover>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n", "import \"Filters.styles_hgp20y.wyw.css\"; export const container = \"container_cy2g65i\";\nexport const controls = \"controls_c1p17rfq\";\nexport const badge = \"badge_bd79jrw\";\nexport const arrowButton = \"arrowButton_aoxaclm\";\nexport const examplesPopover = \"examplesPopover_eyl6mut\";\nexport const examplesList = \"examplesList_emwc6ge\";\nexport const exampleCode = \"exampleCode_elwpwap\";\nexport const examplesTitle = \"examplesTitle_e17h9agp\";\nexport const examplesFooter = \"examplesFooter_e1uii0w2\";\nexport const clearButton = \"clearButton_c1p66qjk\";", "import type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport type { NodeClassName } from \"./NodeTypeTag.tsx\"\n\nconst rootChildrenSortOrder: Record<NodeClassName, number> = {\n\t// Base classes\n\tCanvasNode: -1,\n\tCanvasScopeNode: -1,\n\tMutableNode: -1,\n\tRouteNode: -1,\n\tRouteLocaleNode: -1,\n\tScopeNode: -1,\n\n\t// Structural / Root\n\tRootNode: 0,\n\tLayoutTemplateNode: 1,\n\tWebPageNode: 2,\n\tRouteSegmentRootNode: 3,\n\tEntityRootNode: 4,\n\tCanvasPageNode: 5,\n\tDesignPageNode: 6,\n\n\t// Routes\n\tRoutesNode: 10,\n\tRouteSegmentNode: 11,\n\tRedirectRouteNode: 12,\n\tRewriteRouteNode: 13,\n\tProxyRouteNode: 14,\n\tHeaderRouteNode: 15,\n\n\t// Containers & Layout\n\tFrameNode: 20,\n\tOverlayNode: 21,\n\n\t// Text\n\tTextNode: 30,\n\tRichTextNode: 31,\n\n\t// Code & Components\n\tCodeComponentNode: 40,\n\tSmartComponentNode: 41,\n\tCustomCodeScopeNode: 42,\n\tCustomCodeNode: 43,\n\n\t// Branches\n\tBranchesNode: 44,\n\tBranchNode: 45,\n\n\t// Shapes & Vectors\n\tShapeContainerNode: 50,\n\tShapeGroupNode: 51,\n\tBooleanShapeNode: 52,\n\tRectangleShapeNode: 53,\n\tOvalShapeNode: 54,\n\tStarShapeNode: 55,\n\tPolygonShapeNode: 56,\n\tVectorSetNode: 57,\n\tPathNode: 58,\n\n\t// SVG & Shader\n\tSVGNode: 60,\n\tShaderNode: 61,\n\n\t// Forms\n\tFormBooleanInputNode: 70,\n\tFormPlainTextInputNode: 71,\n\tFormSelectNode: 72,\n\n\t// Slots\n\tSlotNode: 80,\n\tSlotPropertyNode: 81,\n\n\t// Collections & Content\n\tCollectionNode: 90,\n\tCollectionItemNode: 91,\n\tContentManagementNode: 92,\n\n\t// Modules & Tokens\n\tExternalModulesListNode: 100,\n\tExternalModuleNode: 101,\n\tLocalModulesListNode: 102,\n\tLocalModuleNode: 103,\n\tColorStyleTokenListNode: 104,\n\tColorStyleTokenNode: 105,\n\tPresetsListNode: 106,\n\n\t// Style Presets\n\tComponentPresetNode: 110,\n\tBlockquoteStylePresetNode: 111,\n\tTableStylePresetNode: 112,\n\tTextStylePresetNode: 113,\n\tLinkStylePresetNode: 114,\n\tInlineCodeStylePresetNode: 115,\n\tImageStylePresetNode: 116,\n\n\t// Entity Type Roots\n\tAbTestsEntityTypeRootNode: 120,\n\tBlockquoteEntityTypeRootNode: 121,\n\tCMSEntityTypeRootNode: 122,\n\tCodeFileEntityTypeRootNode: 123,\n\tColorEntityTypeRootNode: 124,\n\tComponentEntityTypeRootNode: 125,\n\tFunnelsEntityTypeRootNode: 126,\n\tInlineCodeEntityTypeRootNode: 127,\n\tLayoutTemplateEntityTypeRootNode: 128,\n\tLinkEntityTypeRootNode: 129,\n\tTextEntityTypeRootNode: 130,\n\tVectorSetEntityTypeRootNode: 131,\n\tContentManagementEntityTypeRootNode: 132,\n\n\t// Entity Structure\n\tEntityFolderNode: 140,\n\tEntityReferenceNode: 141,\n\n\t// Funnels\n\tFunnelNode: 150,\n\tFunnelStepNode: 151,\n\tFunnelStepActionNode: 152,\n\n\t// Analytics\n\tAnalyticsScopeNode: 160,\n\n\t// Localization\n\tLocalizationGlossaryNode: 170,\n\tLocalizationGlossaryItemNode: 171,\n\n\t// Errors\n\tErrorListNode: 180,\n\tErrorNode: 181,\n}\n\nconst defaultSortOrder = 999\n\nfunction getRootChildSortOrder(nodeClass: string): number {\n\tif (nodeClass in rootChildrenSortOrder) return rootChildrenSortOrder[nodeClass as NodeClassName]\n\treturn defaultSortOrder\n}\n\n/** Sort root children by a predefined type order. Unknown types sort to the end alphabetically. */\nexport function sortRootChildren(nodes: CanvasNode[]): CanvasNode[] {\n\treturn [...nodes].sort((a, b) => {\n\t\tconst orderA = getRootChildSortOrder(a.__class)\n\t\tconst orderB = getRootChildSortOrder(b.__class)\n\t\tif (orderA !== orderB) return orderA - orderB\n\t\treturn a.__class.localeCompare(b.__class)\n\t})\n}\n", "import type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { getChildren, getNodeName, prop } from \"../nodeUtils.ts\"\nimport { sortRootChildren } from \"../rootChildrenSorting.ts\"\n\nexport type TreeFilter =\n\t| { type: \"bare\"; pattern: string }\n\t| { type: \"property\"; key: string; value: string }\n\t| { type: \"exists\"; key: string }\n\t| { type: \"predicate\"; source: string; fn: (node: CanvasNode) => boolean }\n\nfunction matchesFilter(node: CanvasNode, f: TreeFilter): boolean {\n\tswitch (f.type) {\n\t\tcase \"bare\": {\n\t\t\tconst lowerPattern = f.pattern.toLowerCase()\n\t\t\treturn (\n\t\t\t\t(getNodeName(node) ?? node.__class).toLowerCase().includes(lowerPattern) ||\n\t\t\t\tnode.id.toLowerCase().includes(lowerPattern)\n\t\t\t)\n\t\t}\n\t\tcase \"property\":\n\t\t\treturn String(prop(node, f.key)).toLowerCase().includes(f.value.toLowerCase())\n\t\tcase \"exists\": {\n\t\t\tconst v = prop(node, f.key)\n\t\t\treturn v !== undefined && v !== null\n\t\t}\n\t\tcase \"predicate\":\n\t\t\ttry {\n\t\t\t\treturn f.fn(node)\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t}\n}\n\nfunction matchesAllFilters(node: CanvasNode, filters: TreeFilter[]): boolean {\n\treturn filters.every(f => matchesFilter(node, f))\n}\n\nfunction walk(n: CanvasNode, visible: Set<string>, filters: TreeFilter[]): boolean {\n\tlet childMatch = false\n\n\tfor (const child of getChildren(n)) {\n\t\t// We want to walk all children, even if we already found a match.\n\t\tif (walk(child, visible, filters)) childMatch = true\n\t}\n\n\tif (childMatch || matchesAllFilters(n, filters)) {\n\t\tvisible.add(n.id)\n\t\treturn true\n\t}\n\treturn false\n}\n\n/** Single O(n) walk: returns IDs of all nodes that match or have a matching descendant. */\nexport function buildVisibleSet(node: CanvasNode, filters: TreeFilter[]): ReadonlySet<string> {\n\tif (filters.length === 0) return new Set()\n\n\tconst visible = new Set<string>()\n\twalk(node, visible, filters)\n\n\treturn visible\n}\n\n/** Collect only the IDs of nodes that directly match the filters (no ancestors).\n *  Root children are sorted to match the display order in the tree view. */\nexport function buildMatchList(node: CanvasNode, filters: TreeFilter[]): readonly string[] {\n\tif (filters.length === 0) return []\n\n\tconst matches: string[] = []\n\tfunction collect(n: CanvasNode, isRoot: boolean) {\n\t\tif (matchesAllFilters(n, filters)) matches.push(n.id)\n\t\tconst children = getChildren(n)\n\t\tfor (const child of isRoot ? sortRootChildren(children) : children) collect(child, false)\n\t}\n\tcollect(node, true)\n\treturn matches\n}\n\nfunction parseToken(token: string): TreeFilter | null {\n\tif (!token) return null\n\n\tif (token.endsWith(\"!\")) {\n\t\tconst key = token.slice(0, -1)\n\t\treturn key ? { type: \"exists\", key } : null\n\t}\n\n\tconst colonIdx = token.indexOf(\":\")\n\tif (colonIdx !== -1) {\n\t\tconst key = token.slice(0, colonIdx)\n\t\tconst value = token.slice(colonIdx + 1)\n\t\treturn key ? { type: \"property\", key, value } : null\n\t}\n\n\treturn { type: \"bare\", pattern: token }\n}\n\nexport function parseFilterString(input: string): TreeFilter[] {\n\tif (!input.trim()) return []\n\n\tconst filters: TreeFilter[] = []\n\n\t// Check for predicate: find first ?,  which consumes the rest of the string\n\tconst predicateIdx = input.indexOf(\", ?\")\n\tconst startsWithPredicate = input.startsWith(\"?\")\n\n\tlet regularPart: string | undefined\n\tlet predicateSource: string | null = null\n\n\tif (startsWithPredicate) {\n\t\tregularPart = \"\"\n\t\tpredicateSource = input.slice(1)\n\t} else if (predicateIdx !== -1) {\n\t\tregularPart = input.slice(0, predicateIdx)\n\t\tpredicateSource = input.slice(predicateIdx + 3)\n\t} else {\n\t\tregularPart = input\n\t}\n\n\tfor (const raw of regularPart.split(\", \")) {\n\t\tconst token = raw.trim().replace(/,$/, \"\")\n\t\tconst parsed = parseToken(token)\n\t\tif (parsed) filters.push(parsed)\n\t}\n\n\tif (predicateSource !== null) {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-new-func\n\t\t\tconst fn = new Function(\"node\", `return (${predicateSource})(node)`) as (node: CanvasNode) => boolean\n\t\t\tfilters.push({ type: \"predicate\", source: predicateSource, fn })\n\t\t} catch {\n\t\t\t// invalid syntax \u2014 silently drop\n\t\t}\n\t}\n\n\treturn filters\n}\n", "import { withoutScrollbar } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\"\nimport { NodeSelectionContext } from \"../NodeSelectionContext.ts\"\nimport type { TreeState } from \"../TreeView.tsx\"\nimport { buildPathToNode, getChildren } from \"../nodeUtils.ts\"\nimport { DEFAULT_COLUMN_WIDTH } from \"./Column.styles.ts\"\nimport { Column } from \"./Column.tsx\"\nimport * as styles from \"./ColumnView.styles.ts\"\nimport { buildColumns } from \"./columnUtils.ts\"\n\nexport function ColumnView({\n\ttreeState,\n\tselectedNodeId,\n\tonSelectNode,\n\tvisibleIds,\n}: {\n\ttreeState: TreeState\n\tselectedNodeId: string | null\n\tonSelectNode: (id: string | null) => void\n\tvisibleIds: ReadonlySet<string>\n}) {\n\tconst tree = treeState.tree\n\tconst root = tree.root\n\tconst { navigateToNodeId } = useContext(NodeSelectionContext)\n\tconst [selectionPath, setSelectionPath] = useState<string[]>(() =>\n\t\tselectedNodeId ? buildPathToNode(tree, selectedNodeId) : [],\n\t)\n\tconst lastReportedIdRef = useRef(selectedNodeId)\n\tconst scrollContainerRef = useRef<HTMLDivElement>(null)\n\tconst columnWidthsRef = useRef<number[]>([])\n\tconst [, forceRender] = useState(0)\n\tconst hasFilter = visibleIds.size > 0\n\n\t// Sync inward: rebuild path when selectedNodeId changes externally.\n\tif (selectedNodeId !== lastReportedIdRef.current) {\n\t\tlastReportedIdRef.current = selectedNodeId\n\t\tsetSelectionPath(selectedNodeId ? buildPathToNode(tree, selectedNodeId) : [])\n\t}\n\n\tconst handleSelect = useCallback((columnIndex: number, node: CanvasNode) => {\n\t\tsetSelectionPath(prev => {\n\t\t\tconst next = prev.slice(0, columnIndex)\n\t\t\tnext.push(node.id)\n\t\t\treturn next\n\t\t})\n\t}, [])\n\n\t// Sync outward: report selected node when path changes from user interaction.\n\tuseEffect(() => {\n\t\tconst currentId = selectionPath.at(-1) ?? null\n\t\tlastReportedIdRef.current = currentId\n\t\tonSelectNode(currentId)\n\t}, [selectionPath, onSelectNode])\n\n\tconst columnCount = selectionPath.length\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: scroll to end when new columns appear\n\tuseEffect(() => {\n\t\tconst container = scrollContainerRef.current\n\t\tif (!container) return\n\t\trequestAnimationFrame(() => {\n\t\t\tcontainer.scrollLeft = container.scrollWidth - container.clientWidth\n\t\t})\n\t}, [columnCount])\n\n\tconst columns = useMemo(() => buildColumns(root, selectionPath), [root, selectionPath])\n\n\tconst getColumnWidth = (index: number) => columnWidthsRef.current[index] ?? DEFAULT_COLUMN_WIDTH\n\n\tconst handleColumnResize = useCallback((index: number, delta: number) => {\n\t\tconst widths = columnWidthsRef.current\n\t\twhile (widths.length <= index) widths.push(DEFAULT_COLUMN_WIDTH)\n\t\twidths[index] = Math.max(120, (widths[index] ?? DEFAULT_COLUMN_WIDTH) + delta)\n\t\tforceRender(n => n + 1)\n\t}, [])\n\n\tconst handleNavigateLeft = useCallback(() => {\n\t\tif (selectionPath.length <= 1) return\n\t\tconst parentId = selectionPath[selectionPath.length - 2]\n\t\tif (!parentId) return\n\t\tnavigateToNodeId(parentId)\n\t}, [selectionPath, navigateToNodeId])\n\n\tconst handleNavigateRight = useCallback(() => {\n\t\tconst currentId = selectionPath.at(-1) ?? null\n\t\tif (!currentId) return\n\t\tconst node = tree.get(currentId)\n\t\tif (!node) return\n\t\tconst children = getChildren(node)\n\t\tconst first = children.at(0)\n\t\tif (!first) return\n\t\tnavigateToNodeId(first.id)\n\t}, [selectionPath, tree, navigateToNodeId])\n\n\tconst isDataTreeOnly = useCallback((node: CanvasNode) => treeState.onlyInDataTree(node), [treeState])\n\n\treturn (\n\t\t<div ref={scrollContainerRef} className={cx(styles.scrollContainer, withoutScrollbar)}>\n\t\t\t{columns.map((col, i) => {\n\t\t\t\tconst sel = col.selectedId ? tree.get(col.selectedId) : null\n\t\t\t\tconst canNavigateRight = !!(sel && getChildren(sel).length > 0)\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={col.key}>\n\t\t\t\t\t\t<Column\n\t\t\t\t\t\t\tnodes={hasFilter ? col.nodes.filter(node => visibleIds.has(node.id)) : col.nodes}\n\t\t\t\t\t\t\tselectedId={col.selectedId}\n\t\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\t\tcolumnIndex={i}\n\t\t\t\t\t\t\tonNavigateLeft={i > 0 ? handleNavigateLeft : undefined}\n\t\t\t\t\t\t\tonNavigateRight={canNavigateRight ? handleNavigateRight : undefined}\n\t\t\t\t\t\t\tisDataTreeOnly={i === 0 ? isDataTreeOnly : undefined}\n\t\t\t\t\t\t\twidth={getColumnWidth(i)}\n\t\t\t\t\t\t\tonResize={handleColumnResize}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t)\n\t\t\t})}\n\t\t</div>\n\t)\n}\n", "import \"Column.styles_1pr6r81.wyw.css\"; export const DEFAULT_COLUMN_WIDTH = 260;\nexport const column = \"column_c18f2qcs\";", "import { withoutScrollbar } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { ResizeHandle } from \"../ResizeHandle.tsx\"\nimport type { VirtualizedListHandle } from \"../VirtualizedList.tsx\"\nimport { VirtualizedList } from \"../VirtualizedList.tsx\"\nimport { PAGE_SIZE } from \"../nodeUtils.ts\"\nimport * as styles from \"./Column.styles.ts\"\nimport { ColumnRow } from \"./ColumnRow.tsx\"\n\nconst COLUMN_ROW_HEIGHT = 24\n\nconst getNodeKey = (node: CanvasNode) => node.id\n\nexport const Column = memo(function Column({\n\tnodes,\n\tselectedId,\n\tonSelect,\n\tcolumnIndex,\n\tonNavigateLeft,\n\tonNavigateRight,\n\tisDataTreeOnly,\n\twidth,\n\tonResize,\n}: {\n\tnodes: CanvasNode[]\n\tselectedId: string | null\n\tonSelect: (columnIndex: number, node: CanvasNode) => void\n\tcolumnIndex: number\n\tonNavigateLeft?: () => void\n\tonNavigateRight?: () => void\n\tisDataTreeOnly?: (node: CanvasNode) => boolean\n\twidth: number\n\tonResize: (index: number, delta: number) => void\n}) {\n\tconst rowRefs = useRef(new Map<string, HTMLDivElement>())\n\tconst listRef = useRef<VirtualizedListHandle>(null)\n\tconst [limit, setLimit] = useState(PAGE_SIZE)\n\tconst visibleNodes = useMemo(() => nodes.slice(0, limit), [nodes, limit])\n\n\tconst handleLoadMore = useCallback(() => {\n\t\tsetLimit(prev => Math.min(prev + PAGE_SIZE, nodes.length))\n\t}, [nodes.length])\n\n\t// Reset limit when the column represents a different parent's children\n\tconst firstNodeId = nodes[0]?.id\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: reset when the column's node set changes\n\tuseEffect(() => {\n\t\tsetLimit(PAGE_SIZE)\n\t}, [firstNodeId])\n\n\tconst handleSelect = useCallback((node: CanvasNode) => onSelect(columnIndex, node), [onSelect, columnIndex])\n\n\tconst handleNavigate = useCallback(\n\t\t(nodeIndex: number, direction: -1 | 1) => {\n\t\t\tconst nextIndex = nodeIndex + direction\n\t\t\tconst next = visibleNodes[nextIndex]\n\t\t\tif (next) {\n\t\t\t\tonSelect(columnIndex, next)\n\t\t\t\tlistRef.current?.scrollToIndex(nextIndex)\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trowRefs.current.get(next.id)?.focus()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\t[visibleNodes, onSelect, columnIndex],\n\t)\n\n\tconst handleRowRef = useCallback((nodeId: string, el: HTMLDivElement | null) => {\n\t\tif (el) rowRefs.current.set(nodeId, el)\n\t\telse rowRefs.current.delete(nodeId)\n\t}, [])\n\n\tconst handleResize = useCallback((delta: number) => onResize(columnIndex, delta), [onResize, columnIndex])\n\n\tconst renderItem = useCallback(\n\t\t(node: CanvasNode, index: number) => (\n\t\t\t<ColumnRow\n\t\t\t\tnode={node}\n\t\t\t\tisSelected={selectedId === node.id}\n\t\t\t\tonSelect={handleSelect}\n\t\t\t\tonNavigateLeft={onNavigateLeft}\n\t\t\t\tonNavigateRight={onNavigateRight}\n\t\t\t\tonNavigate={handleNavigate}\n\t\t\t\tnodeIndex={index}\n\t\t\t\tonRowRef={handleRowRef}\n\t\t\t\tdataTreeScope={isDataTreeOnly ? isDataTreeOnly(node) : undefined}\n\t\t\t/>\n\t\t),\n\t\t[selectedId, handleSelect, onNavigateLeft, onNavigateRight, handleNavigate, handleRowRef, isDataTreeOnly],\n\t)\n\n\treturn (\n\t\t<>\n\t\t\t<VirtualizedList\n\t\t\t\tref={listRef}\n\t\t\t\titems={visibleNodes}\n\t\t\t\titemHeight={COLUMN_ROW_HEIGHT}\n\t\t\t\tgetKey={getNodeKey}\n\t\t\t\trenderItem={renderItem}\n\t\t\t\tonLoadMore={limit < nodes.length ? handleLoadMore : undefined}\n\t\t\t\tclassName={cx(styles.column, withoutScrollbar)}\n\t\t\t\tstyle={{ width }}\n\t\t\t/>\n\t\t\t<ResizeHandle onResize={handleResize} />\n\t\t</>\n\t)\n})\n", "import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\"\n\nexport interface VirtualizedListHandle {\n\tscrollToIndex(index: number, behavior?: ScrollBehavior): void\n}\n\ninterface VirtualizedListProps<T> {\n\titems: readonly T[]\n\titemHeight: number\n\toverscan?: number\n\tgetKey: (item: T) => string\n\trenderItem: (item: T, index: number) => React.ReactNode\n\tclassName?: string\n\tstyle?: React.CSSProperties\n\tonLoadMore?: () => void\n}\n\n/**\n * Lightweight fixed-height virtualizer. Only renders the items visible in the\n * scroll viewport (plus an overscan buffer), keeping DOM node count constant\n * regardless of list size.\n */\nexport const VirtualizedList = forwardRef(function VirtualizedList<T>(\n\t{\n\t\titems,\n\t\titemHeight,\n\t\toverscan = 10,\n\t\tgetKey,\n\t\trenderItem,\n\t\tclassName,\n\t\tstyle: externalStyle,\n\t\tonLoadMore,\n\t}: VirtualizedListProps<T>,\n\tref: React.Ref<VirtualizedListHandle>,\n) {\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tscrollToIndex(index: number, behavior: ScrollBehavior = \"auto\") {\n\t\t\t\tconst el = containerRef.current\n\t\t\t\tif (!el) return\n\t\t\t\tconst targetScrollTop = Math.max(0, index * itemHeight - el.clientHeight / 2)\n\t\t\t\tel.scrollTo({ top: targetScrollTop, behavior })\n\t\t\t},\n\t\t}),\n\t\t[itemHeight],\n\t)\n\tconst [scrollTop, setScrollTop] = useState(0)\n\tconst [containerHeight, setContainerHeight] = useState(0)\n\n\tuseEffect(() => {\n\t\tconst el = containerRef.current\n\t\tif (!el) return\n\t\tconst observer = new ResizeObserver(entries => {\n\t\t\tfor (const entry of entries) {\n\t\t\t\tsetContainerHeight(entry.contentRect.height)\n\t\t\t}\n\t\t})\n\t\tobserver.observe(el)\n\t\treturn () => observer.disconnect()\n\t}, [])\n\n\tconst handleScroll = useCallback(() => {\n\t\tconst el = containerRef.current\n\t\tif (!el) return\n\t\tsetScrollTop(el.scrollTop)\n\t\tif (onLoadMore) {\n\t\t\tconst distanceFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight\n\t\t\tif (distanceFromBottom < itemHeight * 5) {\n\t\t\t\tonLoadMore()\n\t\t\t}\n\t\t}\n\t}, [onLoadMore, itemHeight])\n\n\t// Load more if the content doesn't fill the viewport (no scroll event would fire)\n\t// Used mainly for testing when MAX items is a small number.\n\tuseEffect(() => {\n\t\tif (onLoadMore && containerHeight > 0 && items.length * itemHeight <= containerHeight) {\n\t\t\tonLoadMore()\n\t\t}\n\t}, [onLoadMore, containerHeight, items.length, itemHeight])\n\n\tconst totalHeight = items.length * itemHeight\n\tconst startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan)\n\tconst visibleCount = Math.ceil(containerHeight / itemHeight) + 2 * overscan\n\tconst endIndex = Math.min(items.length, startIndex + visibleCount)\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tonScroll={handleScroll}\n\t\t\tclassName={className}\n\t\t\tstyle={{ overflowY: \"auto\", ...externalStyle }}\n\t\t>\n\t\t\t<div style={{ height: totalHeight, position: \"relative\" }}>\n\t\t\t\t{items.slice(startIndex, endIndex).map((item, i) => {\n\t\t\t\t\tconst index = startIndex + i\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={getKey(item)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\ttop: index * itemHeight,\n\t\t\t\t\t\t\t\theight: itemHeight,\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderItem(item, index)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n", "import engine from \"document/engine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { isScopeNode } from \"document/models/CanvasTree/nodes/ScopeNode.ts\"\nimport { memo, useCallback, useContext, useState } from \"react\"\nimport { NodeSelectionContext } from \"../NodeSelectionContext.ts\"\nimport { NodeTypeTag } from \"../NodeTypeTag.tsx\"\nimport { TreeBadge } from \"../TreeBadge.tsx\"\nimport { getChildren, getNodeName, isShallowScope } from \"../nodeUtils.ts\"\nimport { useNodeContextMenu } from \"../useNodeContextMenu.ts\"\nimport * as styles from \"./ColumnRow.styles.ts\"\n\nexport const ColumnRow = memo(function ColumnRow({\n\tnode,\n\tisSelected,\n\tonSelect,\n\tonNavigate,\n\tnodeIndex,\n\tonNavigateLeft,\n\tonNavigateRight,\n\tonRowRef,\n\tdataTreeScope,\n}: {\n\tnode: CanvasNode\n\tisSelected: boolean\n\tonSelect: (node: CanvasNode) => void\n\tonNavigate: (nodeIndex: number, direction: -1 | 1) => void\n\tnodeIndex: number\n\tonNavigateLeft?: () => void\n\tonNavigateRight?: () => void\n\tonRowRef: (nodeId: string, el: HTMLDivElement | null) => void\n\tdataTreeScope?: boolean\n}) {\n\tconst shallow = isShallowScope(node)\n\tconst children = getChildren(node)\n\tconst hasChildren = children.length > 0 || shallow\n\tconst [loading, setLoading] = useState(false)\n\tconst { registerNodeRef, matchIds } = useContext(NodeSelectionContext)\n\tconst hasSearch = matchIds.size > 0\n\tconst nodeName = getNodeName(node)\n\n\tconst { onContextMenu, onContextMenuKeyDown } = useNodeContextMenu(node)\n\n\tconst handleFocus = useCallback(() => {\n\t\tengine.scheduler.wrapHandler(() => {\n\t\t\tconst { treeStore, scopeStore } = engine.stores\n\t\t\tconst scope = treeStore.tree.getScopeNodeFor(node)\n\t\t\tif (scopeStore.activeId === scope?.id) {\n\t\t\t\ttreeStore.setHighlight(node.id)\n\t\t\t}\n\t\t})()\n\t}, [node])\n\n\tconst handleBlur = useCallback(() => {\n\t\tengine.scheduler.wrapHandler(() => {\n\t\t\tengine.stores.treeStore.setHighlight(null)\n\t\t})()\n\t}, [])\n\n\tconst handleLoad = useCallback(() => {\n\t\tif (!isScopeNode(node, true) || node.isLoaded()) return\n\t\tsetLoading(true)\n\t\tvoid node.load().finally(() => setLoading(false))\n\t}, [node])\n\n\tconst handleClick = useCallback(() => {\n\t\tif (shallow) handleLoad()\n\t\tonSelect(node)\n\t}, [shallow, handleLoad, onSelect, node])\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tif (onContextMenuKeyDown(e)) return\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\te.preventDefault()\n\t\t\t\tonSelect(node)\n\t\t\t}\n\t\t\tif (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n\t\t\t\te.preventDefault()\n\t\t\t\tonNavigate(nodeIndex, e.key === \"ArrowDown\" ? 1 : -1)\n\t\t\t}\n\t\t\tif (e.key === \"ArrowLeft\" && onNavigateLeft) {\n\t\t\t\te.preventDefault()\n\t\t\t\tonNavigateLeft()\n\t\t\t}\n\t\t\tif (e.key === \"ArrowRight\" && onNavigateRight) {\n\t\t\t\te.preventDefault()\n\t\t\t\tonNavigateRight()\n\t\t\t}\n\t\t},\n\t\t[onContextMenuKeyDown, onSelect, node, onNavigate, nodeIndex, onNavigateLeft, onNavigateRight],\n\t)\n\n\tconst handleRef = useCallback(\n\t\t(el: HTMLDivElement | null) => {\n\t\t\tonRowRef(node.id, el)\n\t\t\tregisterNodeRef(node.id, el)\n\t\t},\n\t\t[onRowRef, node.id, registerNodeRef],\n\t)\n\n\treturn (\n\t\t<div\n\t\t\tref={handleRef}\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: debug panel\n\t\t\trole=\"button\"\n\t\t\ttabIndex={isSelected ? 0 : -1}\n\t\t\tclassName={styles.row}\n\t\t\tdata-selected={isSelected || undefined}\n\t\t\tdata-dimmed={(hasSearch && !matchIds.has(node.id)) || undefined}\n\t\t\tonContextMenu={onContextMenu}\n\t\t\tonFocus={handleFocus}\n\t\t\tonBlur={handleBlur}\n\t\t\tonMouseOver={handleFocus}\n\t\t\tonMouseOut={handleBlur}\n\t\t\tonClick={handleClick}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t>\n\t\t\t<span className={styles.nodeClass}>\n\t\t\t\t<NodeTypeTag nodeClass={node.__class} />\n\t\t\t</span>\n\t\t\t<div className={styles.rightGroup}>\n\t\t\t\t{nodeName && <span className={styles.name}>{nodeName}</span>}\n\t\t\t\t{dataTreeScope && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={styles.dataTreeBadge}\n\t\t\t\t\t\ttitle=\"Loaded via DataTree. This means the scope is not currently loaded in the CanvasTree.\"\n\t\t\t\t\t>\n\t\t\t\t\t\tDT\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{hasChildren && <TreeBadge title={`${children.length} children`}>{children.length}</TreeBadge>}\n\t\t\t\t{shallow && (\n\t\t\t\t\t<span className={styles.loadIndicator} data-loading={loading || undefined}>\n\t\t\t\t\t\t{loading ? \"...\" : \"load\"}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{hasChildren && <span className={styles.chevron}>\u203A</span>}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n", "import \"TreeBadge.styles_jj5ak5.wyw.css\"; export const badge = \"badge_bapdv41\";", "import type React from \"react\"\nimport * as styles from \"./TreeBadge.styles.ts\"\n\nexport function TreeBadge({\n\tchildren,\n\ttitle,\n\tstyle,\n}: {\n\tchildren: React.ReactNode\n\ttitle?: string\n\tstyle?: React.CSSProperties\n}) {\n\treturn (\n\t\t<span className={styles.badge} title={title} style={style}>\n\t\t\t{children}\n\t\t</span>\n\t)\n}\n", "import { isCommandKeyPressed } from \"@framerjs/shared\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { useCallback, useContext } from \"react\"\nimport { copyText } from \"utils/clipboard/copyText.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { useFindNodeById } from \"../useFindNodeById.ts\"\nimport { NodeSelectionContext } from \"./NodeSelectionContext.ts\"\nimport { canNavigateToNode, copyNodeToClipboard, copyNodeToJS } from \"./nodeUtils.ts\"\n\nexport function useNodeContextMenu(node: CanvasNode) {\n\tconst { findNodeById } = useFindNodeById()\n\tconst { setFilterText } = useContext(NodeSelectionContext)\n\n\tconst showMenu = useCallback(\n\t\t(location: { x: number; y: number }, includeCache: boolean) => {\n\t\t\tconst nodeClass = node.__class\n\t\t\tconst items: MenuItemOptions[] = [\n\t\t\t\t{\n\t\t\t\t\tlabel: \"Navigate to Node\",\n\t\t\t\t\tenabled: canNavigateToNode(node),\n\t\t\t\t\tclick: () => void findNodeById(node.id),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: `Filter by Type: ${nodeClass}`,\n\t\t\t\t\tclick: () => setFilterText(`__class:${nodeClass}`),\n\t\t\t\t},\n\t\t\t\t{ type: \"separator\" },\n\t\t\t\t{\n\t\t\t\t\tlabel: \"Copy Node ID\",\n\t\t\t\t\tclick: () => {\n\t\t\t\t\t\tvoid copyText(node.id)\n\t\t\t\t\t\ttoast({ type: \"add\", variant: \"success\", primaryText: \"Copied node ID\", duration: 2000 })\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: includeCache ? \"Copy Node as JSON (shallow with Cache)\" : \"Copy Node as JSON (shallow)\",\n\t\t\t\t\tclick: () => void copyNodeToClipboard(node, includeCache),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: \"Copy Node with .toJS()\",\n\t\t\t\t\tclick: () => void copyNodeToJS(node),\n\t\t\t\t},\n\t\t\t]\n\t\t\tengine.stores.contextMenuStore.show(items, { location })\n\t\t},\n\t\t[node, findNodeById, setFilterText],\n\t)\n\n\tconst onContextMenu = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\te.preventDefault()\n\t\t\tshowMenu({ x: e.clientX, y: e.clientY }, isCommandKeyPressed(e))\n\t\t},\n\t\t[showMenu],\n\t)\n\n\tconst onContextMenuKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tconst isShiftF10 = e.key === \"F10\" && e.shiftKey\n\t\t\tconst isControlEnter = e.key === \"Enter\" && e.ctrlKey\n\t\t\tif (!isShiftF10 && !isControlEnter) return false\n\n\t\t\te.preventDefault()\n\t\t\te.stopPropagation()\n\t\t\tconst rect = e.currentTarget.getBoundingClientRect()\n\t\t\tshowMenu({ x: rect.left + rect.width / 2, y: rect.bottom }, false)\n\t\t\treturn true\n\t\t},\n\t\t[showMenu],\n\t)\n\n\treturn { onContextMenu, onContextMenuKeyDown }\n}\n", "import \"ColumnRow.styles_krz5fy.wyw.css\"; export const row = \"row_ro6yk8r\";\nexport const rightGroup = \"rightGroup_r1hualyh\";\nexport const name = \"name_n18yuqia\";\nexport const nodeClass = \"nodeClass_n1my6kg5\";\nexport const dataTreeBadge = \"dataTreeBadge_d187ssjc\";\nexport const loadIndicator = \"loadIndicator_lq6f512\";\nexport const chevron = \"chevron_c121t46c\";", "import \"ColumnView.styles_1ik7hdr.wyw.css\"; export const scrollContainer = \"scrollContainer_smrm33r\";", "import type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { getChildren } from \"../nodeUtils.ts\"\nimport { sortRootChildren } from \"../rootChildrenSorting.ts\"\n\ninterface ColumnData {\n\t/** Stable key: \"root\" for the first column, then the parent node id. */\n\tkey: string\n\tnodes: CanvasNode[]\n\tselectedId: string | null\n}\n\nexport function buildColumns(root: CanvasNode, selectionPath: string[]): ColumnData[] {\n\tconst rootChildren = sortRootChildren(getChildren(root))\n\tconst columns: ColumnData[] = []\n\n\tcolumns.push({ key: \"root\", nodes: rootChildren, selectedId: selectionPath[0] ?? null })\n\n\tlet currentNodes = rootChildren\n\tfor (let i = 0; i < selectionPath.length; i++) {\n\t\tconst selectedNode = currentNodes.find(n => n.id === selectionPath[i])\n\t\tif (!selectedNode) break\n\n\t\tconst children = getChildren(selectedNode)\n\t\tif (children.length === 0) break\n\n\t\tcolumns.push({ key: selectedNode.id, nodes: children, selectedId: selectionPath[i + 1] ?? null })\n\t\tcurrentNodes = children\n\t}\n\n\treturn columns\n}\n", "export function IconCollapseAll() {\n\treturn (\n\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\td=\"M8 6L2 6M2 6L4.5 3.5M2 6L4.5 8.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path d=\"M10 2V10\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n\t\t</svg>\n\t)\n}\n", "import { truncateWithEllipsis } from \"@framerjs/fresco\"\nimport engine from \"document/engine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { isScopeNode } from \"document/models/CanvasTree/nodes/ScopeNode.ts\"\nimport { useCallback, useContext } from \"react\"\nimport { IconCollapse } from \"./IconCollapse.tsx\"\nimport { NodeSelectionContext } from \"./NodeSelectionContext.ts\"\nimport { NodeTypeTag } from \"./NodeTypeTag.tsx\"\nimport { TreeBadge } from \"./TreeBadge.tsx\"\nimport * as styles from \"./TreeNodeRow.styles.ts\"\nimport { PAGE_SIZE, getChildren, getNodeName } from \"./nodeUtils.ts\"\nimport { sortRootChildren } from \"./rootChildrenSorting.ts\"\nimport { useNodeContextMenu } from \"./useNodeContextMenu.ts\"\n\nfunction getVisibleRows(treeRoot: Element | null): HTMLElement[] {\n\treturn Array.from(treeRoot?.querySelectorAll<HTMLElement>(`.${styles.row}`) ?? [])\n}\n\nfunction triggerNearbyShowMore(current: HTMLElement, treeRoot: Element | null): boolean {\n\tlet wrapper: HTMLElement | null = current.parentElement\n\twhile (wrapper && wrapper !== treeRoot) {\n\t\tconst sibling = wrapper.nextElementSibling as HTMLElement | null\n\t\tif (sibling?.classList.contains(styles.showMore)) {\n\t\t\tsibling.click()\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst rows = getVisibleRows(treeRoot)\n\t\t\t\tconst index = rows.indexOf(current)\n\t\t\t\tconst next = rows[index + 1]\n\t\t\t\tif (next) {\n\t\t\t\t\tnext.focus()\n\t\t\t\t\tnext.click()\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn true\n\t\t}\n\t\twrapper = wrapper.parentElement\n\t}\n\treturn false\n}\n\nexport function TreeNodeRow({\n\tnode,\n\tdepth,\n\tisDataTreeOnly,\n\tvisibleIds,\n\tparentNodeId,\n}: {\n\tnode: CanvasNode\n\tdepth: number\n\tisDataTreeOnly?: (node: CanvasNode) => boolean\n\tvisibleIds: ReadonlySet<string>\n\tparentNodeId?: string\n}) {\n\tconst rawChildren = getChildren(node)\n\tconst allChildren = depth === 0 ? sortRootChildren(rawChildren) : rawChildren\n\tconst hasFilter = visibleIds.size > 0\n\tconst children = hasFilter ? allChildren.filter(child => visibleIds.has(child.id)) : allChildren\n\tconst hasChildren = children.length > 0\n\tconst {\n\t\tselectedNodeId,\n\t\tselectNode,\n\t\texpandedNodeIds,\n\t\ttoggleExpanded,\n\t\tvisibleLimits,\n\t\tshowMore,\n\t\tnavigateToNodeId,\n\t\tregisterNodeRef,\n\t\tmatchIds,\n\t} = useContext(NodeSelectionContext)\n\tconst isSelected = selectedNodeId === node.id\n\tconst hasSearch = matchIds.size > 0\n\tconst isExpanded = expandedNodeIds.has(node.id)\n\tconst nodeName = getNodeName(node)\n\tconst showDataTreeBadge = depth === 1 && isScopeNode(node, true) && Boolean(isDataTreeOnly?.(node))\n\tconst { onContextMenu, onContextMenuKeyDown } = useNodeContextMenu(node)\n\n\tconst handleFocus = useCallback(() => {\n\t\tengine.scheduler.wrapHandler(() => {\n\t\t\tconst { treeStore, scopeStore } = engine.stores\n\t\t\tconst scope = treeStore.tree.getScopeNodeFor(node)\n\t\t\tif (scopeStore.activeId === scope?.id) {\n\t\t\t\ttreeStore.setHighlight(node.id)\n\t\t\t}\n\t\t})()\n\t}, [node])\n\n\tconst handleBlur = useCallback(() => {\n\t\tengine.scheduler.wrapHandler(() => {\n\t\t\tengine.stores.treeStore.setHighlight(null)\n\t\t})()\n\t}, [])\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (onContextMenuKeyDown(e)) return\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\te.preventDefault()\n\t\t\t\tselectNode(node)\n\t\t\t\tif (hasChildren) toggleExpanded(node.id)\n\t\t\t}\n\t\t\tif (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n\t\t\t\te.preventDefault()\n\t\t\t\tconst treeRoot = e.currentTarget.closest(\"[data-tree-root]\")\n\t\t\t\tif (e.key === \"ArrowDown\" && triggerNearbyShowMore(e.currentTarget, treeRoot)) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst rows = getVisibleRows(treeRoot)\n\t\t\t\tconst index = rows.indexOf(e.currentTarget)\n\t\t\t\tconst next = rows[index + (e.key === \"ArrowDown\" ? 1 : -1)]\n\t\t\t\tif (next) {\n\t\t\t\t\tnext.focus()\n\t\t\t\t\tnext.click()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (e.key === \"ArrowRight\") {\n\t\t\t\te.preventDefault()\n\t\t\t\tif (hasChildren && !isExpanded) {\n\t\t\t\t\ttoggleExpanded(node.id)\n\t\t\t\t} else if (hasChildren && isExpanded) {\n\t\t\t\t\tconst treeRoot = e.currentTarget.closest(\"[data-tree-root]\")\n\t\t\t\t\tconst rows = getVisibleRows(treeRoot)\n\t\t\t\t\tconst index = rows.indexOf(e.currentTarget)\n\t\t\t\t\tconst next = rows[index + 1]\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\tnext.focus()\n\t\t\t\t\t\tnext.click()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (e.key === \"ArrowLeft\") {\n\t\t\t\te.preventDefault()\n\t\t\t\tif (hasChildren && isExpanded) {\n\t\t\t\t\ttoggleExpanded(node.id)\n\t\t\t\t} else if (parentNodeId) {\n\t\t\t\t\tnavigateToNodeId(parentNodeId)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[node, hasChildren, isExpanded, selectNode, toggleExpanded, onContextMenuKeyDown, parentNodeId, navigateToNodeId],\n\t)\n\tconst limit = visibleLimits.get(node.id) ?? PAGE_SIZE\n\tconst visibleChildren = children.slice(0, limit)\n\tconst hasMore = children.length > limit\n\n\treturn (\n\t\t<div>\n\t\t\t<div\n\t\t\t\tref={el => registerNodeRef(node.id, el)}\n\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: row has a nested button for the content area\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName={styles.row}\n\t\t\t\tdata-selected={isSelected || undefined}\n\t\t\t\tdata-dimmed={(hasSearch && !matchIds.has(node.id)) || undefined}\n\t\t\t\tstyle={{ paddingLeft: depth * 16 }}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tselectNode(node)\n\t\t\t\t}}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tonMouseEnter={handleFocus}\n\t\t\t\tonMouseLeave={handleBlur}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.chevron}\n\t\t\t\t\tdata-expanded={isExpanded || undefined}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tonClick={e => {\n\t\t\t\t\t\tif (hasChildren) {\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\ttoggleExpanded(node.id)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{hasChildren && <IconCollapse />}\n\t\t\t\t</button>\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.rowContent}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\tif (hasChildren) toggleExpanded(node.id)\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span className={styles.nodeClass}>\n\t\t\t\t\t\t<NodeTypeTag nodeClass={node.__class} />\n\t\t\t\t\t</span>\n\t\t\t\t\t{nodeName && <span className={truncateWithEllipsis}>{nodeName}</span>}\n\t\t\t\t\t{hasChildren && <TreeBadge title={`${children.length} children`}>{children.length}</TreeBadge>}\n\t\t\t\t\t{showDataTreeBadge && (\n\t\t\t\t\t\t<TreeBadge title=\"Loaded via DataTree. This means the scope is not currently loaded in the CanvasTree.\">\n\t\t\t\t\t\t\tDT\n\t\t\t\t\t\t</TreeBadge>\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t{hasChildren && isExpanded && (\n\t\t\t\t<div>\n\t\t\t\t\t{visibleChildren.map(child => (\n\t\t\t\t\t\t<TreeNodeRow\n\t\t\t\t\t\t\tkey={child.id}\n\t\t\t\t\t\t\tnode={child}\n\t\t\t\t\t\t\tdepth={depth + 1}\n\t\t\t\t\t\t\tisDataTreeOnly={isDataTreeOnly}\n\t\t\t\t\t\t\tvisibleIds={visibleIds}\n\t\t\t\t\t\t\tparentNodeId={node.id}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t\t{hasMore && (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: debug panel\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\tclassName={styles.showMore}\n\t\t\t\t\t\t\tstyle={{ paddingLeft: (depth + 1) * 16 + 16 }}\n\t\t\t\t\t\t\tonClick={() => showMore(node.id)}\n\t\t\t\t\t\t\tonKeyDown={e => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\tshowMore(node.id)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tShow more\u2026\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n", "import \"TreeNodeRow.styles_1r16ej7.wyw.css\"; export const row = \"row_r1jb48pe\";\nexport const rowContent = \"rowContent_r1mtsjpg\";\nexport const chevron = \"chevron_c1xylaxw\";\nexport const nodeClass = \"nodeClass_n1n9gdpr\";\nexport const showMore = \"showMore_s8cr892\";", "import \"IndentedTreeView.styles_l483m8.wyw.css\"; export const treePanel = \"treePanel_t1b0r62y\";\nexport const collapseButton = \"collapseButton_c1r7otob\";", "import { withoutScrollbar } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { IconCollapseAll } from \"../IconCollapseAll.tsx\"\nimport { TreeNodeRow } from \"../TreeNodeRow.tsx\"\nimport type { TreeState } from \"../TreeView.tsx\"\nimport * as styles from \"./IndentedTreeView.styles.ts\"\n\nexport function IndentedTreeView({\n\ttreeState,\n\tvisibleIds,\n\tcollapseAll,\n\thasExpanded,\n}: {\n\ttreeState: TreeState\n\tvisibleIds: ReadonlySet<string>\n\tcollapseAll: () => void\n\thasExpanded: boolean\n}) {\n\treturn (\n\t\t<div className={cx(styles.treePanel, withoutScrollbar)} data-tree-root>\n\t\t\t{hasExpanded && (\n\t\t\t\t<button type=\"button\" title=\"Collapse all\" onClick={collapseAll} className={styles.collapseButton}>\n\t\t\t\t\t<IconCollapseAll />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t\t<TreeNodeRow\n\t\t\t\tnode={treeState.tree.root}\n\t\t\t\tdepth={0}\n\t\t\t\tisDataTreeOnly={node => treeState.onlyInDataTree(node)}\n\t\t\t\tvisibleIds={visibleIds}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n", "import \"ViewModeToggle.styles_1by4nfb.wyw.css\"; export const segmentedControlItem = \"segmentedControlItem_s1s425m9\";", "import { SegmentedControl, SegmentedControlItem } from \"@framerjs/fresco\"\nimport * as styles from \"./ViewModeToggle.styles.ts\"\n\nexport type ViewMode = \"tree\" | \"columns\"\n\nconst viewModes: { key: ViewMode; label: string; tooltip: string }[] = [\n\t{ key: \"tree\", label: \"Tree\", tooltip: \"Tree\" },\n\t{ key: \"columns\", label: \"Columns\", tooltip: \"Columns\" },\n]\n\nexport function ViewModeToggle({\n\tactiveViewMode,\n\tonChange,\n}: {\n\tactiveViewMode: ViewMode\n\tonChange: (activeViewMode: ViewMode) => void\n}) {\n\treturn (\n\t\t<SegmentedControl unsaturated>\n\t\t\t{viewModes.map(({ key, label, tooltip }) => (\n\t\t\t\t<SegmentedControlItem\n\t\t\t\t\tkey={key}\n\t\t\t\t\ttitle={label}\n\t\t\t\t\ttooltip={tooltip}\n\t\t\t\t\tselected={activeViewMode === key}\n\t\t\t\t\tonSelect={() => onChange(key)}\n\t\t\t\t\tclassName={styles.segmentedControlItem}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</SegmentedControl>\n\t)\n}\n", "import type { CanvasTree } from \"../../CanvasTree.ts\"\nimport { isReplica } from \"../../traits/WithTemplate.ts\"\nimport type { NodeID } from \"../NodeID.ts\"\nimport { type ScopeNode, isScopeNode } from \"../ScopeNode.ts\"\nimport { allVariantsAreHidden } from \"../TemplateHelper.ts\"\n\n/**\n * Finds all nodes that are hidden in every breakpoint of the given scope \u2013\n * and returns the *minimal* set of these nodes.\n *\n * \u201CMinimal\u201D here is opposed to \u201Cfull\u201D. A \u201Cfull\u201D list would include *every single* hidden\n * node in the scope. With a tree like\n *\n *              ScopeNode\n *             \u25BC      \u2502\n *       FrameNode A  \u2514\u25BAFrameNode B\n *           \u2502              \u2502\n *           \u25BC              \u2514\u25BAFrameNode F*\n *       FrameNode C*\n *           \u2502       \u2502\n *           \u25BC       \u2502\n *     FrameNode D*  \u2514\u25BAFrameNode E*\n *\n * where every node marked with a * is hidden in every breakpoint, a full list\n * would include nodes C, D, E, and F.\n *\n * A minimal list, on the other hand, would only include the minimal common\n * hidden ancestors of all hidden nodes, since descendants of hidden nodes are\n * automatically hidden. In this case, it would be just nodes C and F.\n */\n\nexport function collectMinimalHiddenAncestorSet(tree: CanvasTree, scopeNode: ScopeNode): Set<NodeID> {\n\tconst hiddenNodeIds: Set<NodeID> = new Set()\n\tfor (const { node, skipChildren } of scopeNode.walkWithSkipChildren()) {\n\t\t// Skip scope nodes themselves\n\t\tif (isScopeNode(node)) continue\n\n\t\t// Skip replicas - we\u2019ll check them through their primary variant\n\t\tif (isReplica(node)) {\n\t\t\tskipChildren()\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check if the node and all its variants are hidden\n\t\tif (allVariantsAreHidden(tree, scopeNode, node)) {\n\t\t\thiddenNodeIds.add(node.id)\n\n\t\t\t// Skip checking children since the parent is already hidden\n\t\t\tskipChildren()\n\t\t}\n\t}\n\n\treturn hiddenNodeIds\n}\n"],
  "mappings": "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",
  "names": ["React", "import_react", "import_react", "import_react", "import_react", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "nodeClass", "import_jsx_runtime", "import_react", "import_react", "import_jsx_runtime", "import_jsx_runtime", "name", "label", "import_jsx_runtime", "import_jsx_runtime", "isReplica", "isReplica", "masterValue", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "name", "masterValue", "import_jsx_runtime", "isReplica", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "contentArea", "import_react", "container", "nodeClass", "import_jsx_runtime", "container", "import_react", "import_react", "import_react", "import_jsx_runtime", "VirtualizedList", "import_react", "badge", "import_jsx_runtime", "title", "badge", "import_react", "nodeClass", "import_jsx_runtime", "ColumnRow", "import_jsx_runtime", "Column", "import_jsx_runtime", "container", "React", "import_jsx_runtime", "import_react", "row", "chevron", "nodeClass", "import_jsx_runtime", "row", "showMore", "chevron", "nodeClass", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "TreeViewInner", "showMore", "contentArea"]
}
