/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
/**
* BimProvider — React context for the SDK's BimContext.
*
* Wraps useBimHost() and makes the `bim` object available to all children
* via useBim(). This enables gradual migration: components can progressively
* switch from direct Zustand store calls to SDK calls.
*
* Usage:
*
*
*
*
* // In any component:
* const bim = useBim();
* const walls = bim.query().byType('IfcWall').toArray();
*/
import { createContext, useContext, type ReactNode } from 'react';
import type { BimContext } from '@ifc-lite/sdk';
import { useBimHost } from './useBimHost.js';
const BimReactContext = createContext(null);
/** Provider that initializes the SDK and makes it available via useBim() */
export function BimProvider({ children }: { children: ReactNode }) {
const bim = useBimHost();
return (
{children}
);
}
/**
* Access the BimContext from any component.
* Must be rendered inside a .
*
* @throws if used outside a BimProvider
*/
export function useBim(): BimContext {
const ctx = useContext(BimReactContext);
if (!ctx) {
throw new Error('useBim() must be used within a ');
}
return ctx;
}