Open
Conversation
…sandbox compatibility
Three.js render() internally resets viewport/scissor via setRenderTarget(), discarding any scissor rect set through the Three.js API. Switch to raw gl.scissor()/gl.enable(SCISSOR_TEST) to ensure the 1x1 pick region is preserved during the render call. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Handle Replace the onMount callback pattern (passing a freshly constructed object from inside useEffect) with forwardRef + useImperativeHandle so the API object is stable and available synchronously via ref before effects run. The dispose override is applied externally after the ref is populated. Also removes unused forwardRef/useImperativeHandle imports from bimTree. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduce useSubscribe() and useSignalState() helpers in reactUtils to replace verbose useEffect+subscribe+cleanup boilerplate. Apply useSubscribe across cameraState, pointerState, sectionBoxState, sharedIsolation, and viewerState. Also convert BimTree from the actionRef prop pattern to forwardRef/useImperativeHandle, consistent with the viewer component refactor. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Cache Revit UniqueId strings in ElementMapping (loaded from bim.element.getAllUniqueId()) - Add getElementUniqueId() and getElementFromUniqueId() to IElementMapping - Expose elementUniqueId: string | undefined on IElement3D / Element3D - Add filterByUniqueId() and exceptByUniqueId() to ISubset / G3dSubset - Pass ElementMapping into G3dSubset via vim.subset() to enable UniqueId-based filtering Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace flushSync + createRef pattern with async/await + callback ref. The promise resolves when useImperativeHandle fires on mount, eliminating the re-entrant flushSync call that triggered React 18's lifecycle warning. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces Stack, Group, IconButton, Input, Checkbox, Select, Divider in react-viewers/components/. Migrates genericField, inputNumber, settingsSelect, settingsToggle, messageBox, and controlBarButton to use the new primitives, eliminating two duplicate Select implementations and scattered inline className strings. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move useCustomizer from customizer.ts into reactUtils (deleted customizer.ts) - Fix modal passing as RefObject throughout control bar stack instead of dereferencing early (prevents stale ref issues) - Remove customization param from useControlBar/useUltraControlBar; callers now apply useCustomizer directly for control bar and context menu - ContextMenu converted to forwardRef, exposes customize via ref - createWebglViewer made synchronous via flushSync - Fix useStateRef called outside hook in ultra isolation adapter (use createState) - Extract useWebglSetup hook from WebglViewerComponent - Fix double assignment bug in bimTreeData (n = n = x → n = x) - Fix stray .arguments typo in webgl isolation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Progress was reported as 0-1 but treated as 0-100; now correctly scales. Outline thickness reduced from 3 to 2 for cleaner visuals. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add subtitle, readonly, number, select, element entry types to genericField. Fix Select truncation, add Stack gap='none', update axesPanel and inputNumber. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…persistence Remove useSettings/SettingsApi indirection — settings are now resolved once via createSettings and passed as plain objects. Add useStateRef storageKey parameter for persisting UI preferences to localStorage. Extract typed settings (IsolationSettings, SectionBoxSettings, etc.) shared by both viewers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace bimInfoBody, bimInfoHeader, and openState with a converter (bimInfoConvert) that maps BIM data to GenericEntryType items. BimInfoPanel now renders via GenericContent instead of custom components. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete settingsInputBox, settingsSelect, settingsSubtitle, settingsToggle. Rewrite settingsPanel to render GenericContent directly. Collapse webgl and ultra settingsPanel to use shared isolation settings from settingsPanelContent. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pass isolation, sectionBox, camera, and cursor settings as initial state through shared hooks. Add IIsolationAdapter getters for reading renderer state. Initialize useStateRef from localStorage where configured. Reorganize style.css with semantic sections and new panel/BIM styles. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Drop tailwindcss, autoprefixer, prettier-plugin-tailwindcss, and tailwindcss-scoped-preflight. Delete postcss.config.cjs and tailwind.config.js. All styling now uses plain CSS with design tokens and semantic class names. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix axes gizmo drag by swapping azimuth/elevation and initializing resize flag. Change default background from white to #F0F0F0. Round ghost opacity to 2 decimal places and clamp to [0,1]. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Convert button/section style functions to string variant types (default, expand, disabled, blue). Use data-variant and data-on attributes instead of dynamically composed Tailwind classes. Simplify IconButton accordingly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete Tailwind-based layout components no longer needed. Migrate Checkbox, Input, and Select to use semantic CSS classes and data attributes instead of composed utility classes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace Tailwind classes with semantic CSS throughout BIM panel, search, and tree. Add "no results" message for empty search. Use data attributes for visibility/full states. Rename genericField subtitle→section type. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace vc-* utility classes with vim-* semantic classes across container, sidePanel, restOfScreen, modal, overlay, logo, performance, contextMenu, help, loadingBox, messageBox, toast, errorStyle, and ultra error pages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename subtitle→section in GenericEntryType for clarity. Add auto-generated info text from min/max bounds. Improve genericPanel close button and content wrapper. Add min constraints to sectionBox offsets. Adjust ghost opacity step. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simplify main.tsx sandbox: remove debug overlay, use plain style for root div. Fix sideState useMemo dependency on useInspector. Minor viewer cleanup. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace Tailwind utility-based styles with a structured CSS file organized into: design tokens, base/global, layout containers, panels, BIM panel, BIM tree, control bar, cursors, measure, loading, error pages, and responsive scaling. Prune unused color tokens. Add new component styles for select, checkbox, search, toast, context menu, help overlay, etc. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add .claude/skills/css/ directory with CSS best practices reference. Register additional directories in settings. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add getElementFromUniqueId to IVim interface with webgl implementation and ultra stub. Distinguish hasGeometry (has instance definitions) from hasMesh (has loaded mesh data) on Element3D. Add onGeometryLoaded signal to Vim that fires after load(subset) completes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…load Fix useOnChange to properly handle cleanup functions returned by callbacks. Subscribe viewerState to onGeometryLoaded so BIM tree updates when geometry arrives after open(). Add optional chaining in getElements filter. Center "not available" text in BIM tree. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Strip all ReactTooltip imports, .rebuild(), .hide() calls, and <ReactTooltip> component instances. Remove CSS overrides for .__react_component_tooltip and .vim-tooltip. Uninstall package. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Event-delegated tooltip using [data-tip] attributes and DOM portals. Tracks mouse position, clamps to viewport, falls below element when no room above. Single zone per viewer covers all descendant elements. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire TooltipZone at viewer root level. Add data-tip on control bar buttons, axes buttons, tree items, visibility toggles, panel titles, close buttons, search clear, and all truncatable labels/values. Make toggle button tips reactive via string | (() => string). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simple mousedown/mousemove/mouseup resize handler replaces the re-resizable library. Also adds ResizeObserver cleanup on unmount. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use state-driven positioned div + createPortal instead of @firefox-devtools/react-contextmenu. Click outside or right-click dismisses the menu. Actions auto-close after execution. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…t-family token Uninstall re-resizable, @firefox-devtools/react-contextmenu, and unused ste-events. Add --font-family CSS variable and use it for portaled elements. Add side panel drag handle and context menu CSS. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Parallel implementation using @headless-tree/react replacing react-complex-tree. Headless rendering gives full DOM control, no !important overrides, and a flat item list ready for virtual scrolling. Uses native expand/collapse and selection APIs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reshape BimTreeData to use string IDs and semantic visibility values. Replace react-complex-tree with headless-tree implementation split into focused hooks: useBimTree, useBimVirtualizer, useBimVisibility, useBimSelectionSync, useBimClickHandler. Add @tanstack/react-virtual for DOM virtualization. Remove unused TreeActionApi and treeRef threading. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add parameter cache on Vim that decompresses entity table columns once instead of on every getBimParameters() call. Expose vim.prewarmBimCache() for opt-in preloading, and prewarmBim load setting for convenience. Reduces per-click BIM query from ~300ms to <1ms after first access. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Debounce BIM parameter fetch by 50ms with cancellation to prevent blocking during rapid selection changes. Add --c-light-blue token for selected+hover tree item state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bimTreeData: Restore O(1)+O(range) getRange with dual _orderedIds array and _idToOrder map. Add parent-first node ordering in _buildTree with backfill comments. Add _resolveElements shared helper. bimTreeHeadless: Fix replaceSelection to select [id] not ancestors. Fix search crash with EMPTY_NODE fallback in dataLoader. Fix scroll by deferring to post-render via pendingScroll ref. Memoize tree.getItems(). React.memo TreeItem with useCallback handlers. Rename objects to selectedElements, skipSync to treeOrigin, focusRef to rangeAnchor. Simplify isCtrlOrCmd to e.ctrlKey || e.metaKey. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update react, react-dom, @types/react, @types/react-dom to v19. Remove react-complex-tree (replaced by @headless-tree/react). Fix JSX.Element → React.ReactElement for React 19 type changes. Fix bare useRef<T>() → useRef<T>(undefined) for stricter types. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- three 0.183.0 → 0.183.2, @types/three 0.183.0 → 0.183.1 - typescript 5.8.3 → 6.0.2 (add ignoreDeprecations for node moduleResolution) - vite 6.4.1 → 8.0.2, @vitejs/plugin-react 4.7.0 → 6.0.1 - rollup 4.59.0 → 4.60.0, rollup-plugin-dts 6.3.0 → 6.4.1 - typedoc 0.27.9 → 0.28.18 - @typescript-eslint/* 8.57.0 → 8.57.2 - Add *.css module declaration for TS 6 stricter imports - ESLint stays at v8 (v10 requires flat config migration) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Drop 246 packages (eslint, prettier, typescript-eslint, and all plugins). Remove .eslintrc.js, .prettierignore, and eslint npm script. TypeScript compiler + build pass is the only verification gate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove dead @tailwind base/components/utilities from style.css. Update CLAUDE.md: TS 6, React 19, Vite 8, Three 0.183, headless-tree, tanstack virtual. Remove references to Prettier, ESLint, Tailwind, vc- prefix, SettingsApi. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Explicit module resolution for ESM/CJS/types alongside existing main/module/types for backwards compatibility. Exposes style.css and bim types as named exports. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clean up main.tsx: remove debug/test code, use React 19 imports. Update bimTreeHeadless and contextMenu to use React.RefObject. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move outline, selection fill, transparency, and room rendering settings out of IsolationApi into a separate RenderSettings concern. Simplify IIsolationAdapter to focus on visibility operations only. Remove SettingsApi (replaced by plain settings objects). Simplify VisibilityStatus to 'all' | 'some' | 'none'. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update WebGL and Ultra viewers to use new RenderSettings. Add render settings entries to both settings panels. Update ViewerApi with renderSettings field. Fix input bindings import. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix Ultra vim loading status check. Fix rendering composer import. Update vite config. Bump version to alpha.14. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire selectionFillMode through both renderer and materials. Init showRooms from adapter. Remove duplicate material.selectionFillMode set in isolation adapter (renderer now handles both). Fix vite externals for react/jsx-runtime and react-dom/client. Add clarifying comments on adapter capture and ghost opacity validation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix sidePanel resizeGfx running every render — now only on width/content change. Fix gizmoOrbit.show() requesting render when visibility unchanged. Reduces selection from 5 render passes to 1. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cache family instance → element mapping and parameter row indices during prewarm. getBimParameters now does zero column decompression and zero linear scans — all lookups are O(1) via pre-built Maps. Reduces per-query cost from ~50ms to <1ms even on large models. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add npm run publish:package:beta script. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See release notes
https://github.com/vimaec/vim-web/releases/tag/1.0.0-beta.1