Skip to content

1.00 beta#88

Open
vim-sroberge wants to merge 76 commits intomainfrom
sroberge/1_0
Open

1.00 beta#88
vim-sroberge wants to merge 76 commits intomainfrom
sroberge/1_0

Conversation

@vim-sroberge
Copy link
Copy Markdown
Collaborator

@vim-sroberge vim-sroberge commented Mar 26, 2026

vim-sroberge and others added 30 commits March 11, 2026 13:52
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>
vim-sroberge and others added 29 commits March 24, 2026 15:25
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>
@vim-sroberge vim-sroberge requested a review from mavimaec as a code owner March 26, 2026 18:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant