@sqlrooms/room-store 0.27.0-rc.4 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -90,7 +90,7 @@ import {roomStore} from './my-room-store';
90
90
 
91
91
  function App() {
92
92
  return (
93
- <RoomStateProvider value={roomStore}>
93
+ <RoomStateProvider roomStore={roomStore}>
94
94
  {/* Your room components go here */}
95
95
  </RoomStateProvider>
96
96
  );
@@ -120,3 +120,45 @@ function RoomTitle() {
120
120
  );
121
121
  }
122
122
  ```
123
+
124
+ ## Imperative Access
125
+
126
+ Use selectors in render paths, and use store API methods for event handlers, timers, and other imperative code.
127
+
128
+ `useRoomStoreApi()` is non-reactive. It returns the raw `StoreApi` from context and does not subscribe to state changes, so components using it will not rerender on every store update. For reactive reads that should drive rerenders, use `useRoomStore((state) => ...)` selectors.
129
+
130
+ ### Module-level imperative access
131
+
132
+ ```tsx
133
+ import {roomStore, useRoomStore} from './my-room-store';
134
+
135
+ async function runAnalysis() {
136
+ const sessionId = roomStore.getState().ai.config.currentSessionId;
137
+ if (sessionId) {
138
+ await useRoomStore.getState().ai.startAnalysis(sessionId);
139
+ }
140
+ }
141
+ ```
142
+
143
+ ### Context-based imperative access inside components
144
+
145
+ ```tsx
146
+ import {useRoomStoreApi} from '@sqlrooms/room-store';
147
+
148
+ function StartButton() {
149
+ const store = useRoomStoreApi();
150
+
151
+ return (
152
+ <button
153
+ onClick={async () => {
154
+ const sessionId = store.getState().ai.config.currentSessionId;
155
+ if (sessionId) {
156
+ await store.getState().ai.startAnalysis(sessionId);
157
+ }
158
+ }}
159
+ >
160
+ Start
161
+ </button>
162
+ );
163
+ }
164
+ ```
@@ -13,6 +13,10 @@ export type BaseRoomStoreState = {
13
13
  };
14
14
  };
15
15
  export type BaseRoomStore<RS extends BaseRoomStoreState> = StoreApi<RS>;
16
+ type RoomStoreApiMethods<RS extends BaseRoomStoreState> = Pick<StoreApi<RS>, 'getState' | 'setState' | 'subscribe' | 'getInitialState'>;
17
+ export type UseRoomStore<RS extends BaseRoomStoreState> = {
18
+ <T>(selector: (state: RS) => T): T;
19
+ } & RoomStoreApiMethods<RS>;
16
20
  export type CreateBaseRoomSliceProps = {
17
21
  captureException?: BaseRoomStoreState['room']['captureException'];
18
22
  };
@@ -41,7 +45,7 @@ export declare const createBaseSlice: typeof createSlice;
41
45
  */
42
46
  export declare function createRoomStore<RS extends BaseRoomStoreState>(stateCreator: StateCreator<RS>): {
43
47
  roomStore: StoreApi<BaseRoomStoreState & RS>;
44
- useRoomStore: <T>(selector: (state: RS) => T) => T;
48
+ useRoomStore: UseRoomStore<RS>;
45
49
  };
46
50
  /**
47
51
  * Factory to create a room store creator with custom params.
@@ -58,7 +62,7 @@ export declare function createRoomStore<RS extends BaseRoomStoreState>(stateCrea
58
62
  */
59
63
  export declare function createRoomStoreCreator<RS extends BaseRoomStoreState>(): <TFactory extends (...args: any[]) => StateCreator<RS>>(stateCreatorFactory: TFactory) => {
60
64
  createRoomStore: (...args: CreateRoomStoreArgs<TFactory>) => StoreApi<RS>;
61
- useRoomStore: <T>(selector: (state: RS) => T) => T;
65
+ useRoomStore: UseRoomStore<RS>;
62
66
  };
63
67
  export declare function isRoomSliceWithInitialize(slice: unknown): slice is Required<Pick<SliceFunctions, 'initialize'>>;
64
68
  export declare function isRoomSliceWithDestroy(slice: unknown): slice is Required<Pick<SliceFunctions, 'destroy'>>;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseRoomStore.d.ts","sourceRoot":"","sources":["../src/BaseRoomStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;AAItE,YAAY,EAAC,YAAY,EAAC,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE;QACJ,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;KAC1E,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,kBAAkB,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAExE,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,mBAAmB,CAAC,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IACnE,GAAG,UAAU,CAAC,QAAQ,CAAC;IACvB,sBAAsB,CAAC;CACxB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,CAAC,EAAE,wBAAwB,GAC/B,YAAY,CAAC,kBAAkB,CAAC,CAgClC;AACD,kDAAkD;AAClD,eAAO,MAAM,eAAe,4BAAsB,CAAC;AAEnD,wBAAgB,WAAW,CACzB,UAAU,EACV,UAAU,SAAS,UAAU,GAAG,kBAAkB,GAAG,UAAU,EAE/D,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,KAAK,UAAU,GAC1E,YAAY,CAAC,UAAU,CAAC,CAG1B;AAED,0CAA0C;AAC1C,eAAO,MAAM,eAAe,oBAAc,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,kBAAkB,EAC3D,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;;mBAMR,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,KAAG,CAAC;EAKxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,kBAAkB,MACjD,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC,EACpE,qBAAqB,QAAQ,KAC5B;IACD,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1E,YAAY,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACpD,CAsFF;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAOvD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAOpD"}
1
+ {"version":3,"file":"BaseRoomStore.d.ts","sourceRoot":"","sources":["../src/BaseRoomStore.ts"],"names":[],"mappings":"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"}
@@ -41,9 +41,10 @@ export function createRoomStore(stateCreator) {
41
41
  const factory = createRoomStoreCreator();
42
42
  const storeCreator = factory(() => stateCreator);
43
43
  const roomStore = storeCreator.createRoomStore();
44
- function useRoomStore(selector) {
44
+ function useRoomStoreHook(selector) {
45
45
  return storeCreator.useRoomStore(selector);
46
46
  }
47
+ const useRoomStore = withRoomStoreApi(useRoomStoreHook, () => roomStore);
47
48
  return { roomStore, useRoomStore };
48
49
  }
49
50
  /**
@@ -120,14 +121,34 @@ export function createRoomStoreCreator() {
120
121
  }
121
122
  return store;
122
123
  }
123
- function useRoomStore(selector) {
124
+ function useRoomStoreHook(selector) {
124
125
  if (!store)
125
126
  throw new Error('Room store not initialized. Call createRoomStore first.');
126
127
  return useStore(store, selector);
127
128
  }
129
+ const useRoomStore = withRoomStoreApi(useRoomStoreHook, () => store);
128
130
  return { createRoomStore, useRoomStore };
129
131
  };
130
132
  }
133
+ function withRoomStoreApi(useRoomStore, getStore) {
134
+ const getState = () => getStoreOrThrow(getStore).getState();
135
+ const setState = ((...args) => getStoreOrThrow(getStore).setState(...args));
136
+ const subscribe = ((...args) => getStoreOrThrow(getStore).subscribe(...args));
137
+ const getInitialState = () => getStoreOrThrow(getStore).getInitialState();
138
+ return Object.assign(useRoomStore, {
139
+ getState,
140
+ setState,
141
+ subscribe,
142
+ getInitialState,
143
+ });
144
+ }
145
+ function getStoreOrThrow(getStore) {
146
+ const store = getStore();
147
+ if (!store) {
148
+ throw new Error('Room store not initialized. Call createRoomStore first.');
149
+ }
150
+ return store;
151
+ }
131
152
  export function isRoomSliceWithInitialize(slice) {
132
153
  return (typeof slice === 'object' &&
133
154
  slice !== null &&
@@ -1 +1 @@
1
- {"version":3,"file":"BaseRoomStore.js","sourceRoot":"","sources":["../src/BaseRoomStore.ts"],"names":[],"mappings":"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","sourcesContent":["import {produce} from 'immer';\nimport {StateCreator, StoreApi, createStore, useStore} from 'zustand';\nimport {DEV_HMR} from './hmr';\n\n// Re-export for convenience\nexport type {StateCreator};\n\nexport interface SliceFunctions {\n initialize?: () => Promise<void>;\n destroy?: () => Promise<void>;\n}\n\nexport type BaseRoomStoreState = {\n room: {\n initialized: boolean;\n initialize: () => Promise<void>;\n destroy: () => Promise<void>;\n captureException: (exception: unknown, captureContext?: unknown) => void;\n };\n};\n\nexport type BaseRoomStore<RS extends BaseRoomStoreState> = StoreApi<RS>;\n\nexport type CreateBaseRoomSliceProps = {\n captureException?: BaseRoomStoreState['room']['captureException'];\n};\n\nexport type CreateRoomStoreOptions = {\n /**\n * Optional store key used for dev HMR reuse.\n * Provide a project-specific key to force recreation when it changes.\n */\n storeKey?: string;\n};\n\ntype CreateRoomStoreArgs<TFactory extends (...args: any[]) => any> = [\n ...Parameters<TFactory>,\n CreateRoomStoreOptions?,\n];\n\nexport function createBaseRoomSlice(\n props?: CreateBaseRoomSliceProps,\n): StateCreator<BaseRoomStoreState> {\n return (_set, _get, store) => ({\n room: {\n initialized: false,\n initialize: async () => {\n await Promise.all(\n Object.entries(store.getState())\n .filter(\n ([key, slice]) =>\n key !== 'room' && isRoomSliceWithInitialize(slice),\n )\n .map(async ([_key, slice]) => {\n await slice.initialize();\n }),\n );\n },\n destroy: async () => {\n await Promise.all(\n Object.entries(store.getState())\n .filter(\n ([key, slice]) => key !== 'room' && isRoomSliceWithDestroy(slice),\n )\n .map(async ([_key, slice]) => {\n await slice.destroy();\n }),\n );\n },\n captureException:\n props?.captureException ??\n ((exception: unknown) => console.error(exception)),\n },\n });\n}\n/** @deprecated Use createBaseRoomSlice instead */\nexport const createRoomSlice = createBaseRoomSlice;\n\nexport function createSlice<\n SliceState,\n StoreState extends SliceState = BaseRoomStoreState & SliceState,\n>(\n sliceCreator: (...args: Parameters<StateCreator<StoreState>>) => SliceState,\n): StateCreator<SliceState> {\n return (set, get, store) =>\n sliceCreator(set, get as () => StoreState, store as StoreApi<StoreState>);\n}\n\n/** @deprecated Use createSlice instead */\nexport const createBaseSlice = createSlice;\n\n/**\n * Create a room store with custom fields and methods\n * @param initialState - The initial state and config for the room\n * @param sliceCreators - The slices to add to the room store\n * @returns The room store and a hook for accessing the room store\n */\nexport function createRoomStore<RS extends BaseRoomStoreState>(\n stateCreator: StateCreator<RS>,\n) {\n const factory = createRoomStoreCreator<BaseRoomStoreState & RS>();\n const storeCreator = factory(() => stateCreator);\n const roomStore = storeCreator.createRoomStore();\n\n function useRoomStore<T>(selector: (state: RS) => T): T {\n return storeCreator.useRoomStore(selector);\n }\n\n return {roomStore, useRoomStore};\n}\n\n/**\n * Factory to create a room store creator with custom params.\n *\n * @template RS - Room state type\n * @param stateCreatorFactory - A function that takes params and returns a Zustand state creator\n * @returns An object with createRoomStore(params) and useRoomStore(selector)\n *\n * @example\n * const {createRoomStore} = createRoomStoreCreator<MyRoomState>()(\n * (projectId: string) => createMyRoomState(projectId),\n * );\n * createRoomStore('project-a', {storeKey: 'project-a'});\n */\nexport function createRoomStoreCreator<RS extends BaseRoomStoreState>() {\n return function <TFactory extends (...args: any[]) => StateCreator<RS>>(\n stateCreatorFactory: TFactory,\n ): {\n createRoomStore: (...args: CreateRoomStoreArgs<TFactory>) => StoreApi<RS>;\n useRoomStore: <T>(selector: (state: RS) => T) => T;\n } {\n const defaultStoreKey = DEV_HMR?.nextId();\n let store: StoreApi<RS> | undefined;\n let currentStoreKey: string | undefined = defaultStoreKey;\n\n function isCreateRoomStoreOptions(\n value: unknown,\n ): value is CreateRoomStoreOptions {\n return typeof value === 'object' && value !== null && 'storeKey' in value;\n }\n\n function createRoomStore(\n ...args: CreateRoomStoreArgs<TFactory>\n ): StoreApi<RS> {\n const lastArg = args[args.length - 1];\n const options = isCreateRoomStoreOptions(lastArg) ? lastArg : undefined;\n const factoryArgs = (\n options ? args.slice(0, -1) : args\n ) as Parameters<TFactory>;\n const storeKey = DEV_HMR\n ? (options?.storeKey ?? defaultStoreKey)\n : undefined;\n\n // Dev-only: Check for existing store from previous hot reload\n if (DEV_HMR && storeKey) {\n if (currentStoreKey && currentStoreKey !== storeKey) {\n const previousStore = DEV_HMR.get(currentStoreKey);\n if (previousStore) {\n const state = previousStore.getState();\n if (isRoomSliceWithDestroy(state.room)) {\n state.room.destroy().catch((error: unknown) => {\n state.room.captureException(error);\n });\n }\n }\n DEV_HMR.delete(currentStoreKey);\n }\n currentStoreKey = storeKey;\n\n const existingStore = DEV_HMR.get(storeKey);\n if (existingStore) {\n store = existingStore;\n return existingStore;\n }\n }\n\n store = createStore(stateCreatorFactory(...factoryArgs));\n\n // Dev-only: Register store for HMR preservation\n if (DEV_HMR && currentStoreKey) {\n DEV_HMR.set(currentStoreKey, store);\n }\n\n if (typeof window !== 'undefined') {\n (async () => {\n try {\n // Initialize the room\n await store.getState().room.initialize();\n // Set initialized to true after initialization\n store.setState((state) =>\n produce(state, (draft) => {\n draft.room.initialized = true;\n }),\n );\n } catch (error) {\n store.getState().room.captureException(error);\n }\n })();\n } else {\n console.warn(\n 'Skipping room store initialization. The room store should only be used on the client.',\n );\n }\n return store;\n }\n\n function useRoomStore<T>(selector: (state: RS) => T): T {\n if (!store)\n throw new Error(\n 'Room store not initialized. Call createRoomStore first.',\n );\n return useStore(store, selector);\n }\n\n return {createRoomStore, useRoomStore};\n };\n}\n\nexport function isRoomSliceWithInitialize(\n slice: unknown,\n): slice is Required<Pick<SliceFunctions, 'initialize'>> {\n return (\n typeof slice === 'object' &&\n slice !== null &&\n 'initialize' in slice &&\n typeof slice.initialize === 'function'\n );\n}\n\nexport function isRoomSliceWithDestroy(\n slice: unknown,\n): slice is Required<Pick<SliceFunctions, 'destroy'>> {\n return (\n typeof slice === 'object' &&\n slice !== null &&\n 'destroy' in slice &&\n typeof slice.destroy === 'function'\n );\n}\n"]}
1
+ {"version":3,"file":"BaseRoomStore.js","sourceRoot":"","sources":["../src/BaseRoomStore.ts"],"names":[],"mappings":"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","sourcesContent":["import {produce} from 'immer';\nimport {StateCreator, StoreApi, createStore, useStore} from 'zustand';\nimport {DEV_HMR} from './hmr';\n\n// Re-export for convenience\nexport type {StateCreator};\n\nexport interface SliceFunctions {\n initialize?: () => Promise<void>;\n destroy?: () => Promise<void>;\n}\n\nexport type BaseRoomStoreState = {\n room: {\n initialized: boolean;\n initialize: () => Promise<void>;\n destroy: () => Promise<void>;\n captureException: (exception: unknown, captureContext?: unknown) => void;\n };\n};\n\nexport type BaseRoomStore<RS extends BaseRoomStoreState> = StoreApi<RS>;\ntype RoomStoreApiMethods<RS extends BaseRoomStoreState> = Pick<\n StoreApi<RS>,\n 'getState' | 'setState' | 'subscribe' | 'getInitialState'\n>;\nexport type UseRoomStore<RS extends BaseRoomStoreState> = {\n <T>(selector: (state: RS) => T): T;\n} & RoomStoreApiMethods<RS>;\n\nexport type CreateBaseRoomSliceProps = {\n captureException?: BaseRoomStoreState['room']['captureException'];\n};\n\nexport type CreateRoomStoreOptions = {\n /**\n * Optional store key used for dev HMR reuse.\n * Provide a project-specific key to force recreation when it changes.\n */\n storeKey?: string;\n};\n\ntype CreateRoomStoreArgs<TFactory extends (...args: any[]) => any> = [\n ...Parameters<TFactory>,\n CreateRoomStoreOptions?,\n];\n\nexport function createBaseRoomSlice(\n props?: CreateBaseRoomSliceProps,\n): StateCreator<BaseRoomStoreState> {\n return (_set, _get, store) => ({\n room: {\n initialized: false,\n initialize: async () => {\n await Promise.all(\n Object.entries(store.getState())\n .filter(\n ([key, slice]) =>\n key !== 'room' && isRoomSliceWithInitialize(slice),\n )\n .map(async ([_key, slice]) => {\n await slice.initialize();\n }),\n );\n },\n destroy: async () => {\n await Promise.all(\n Object.entries(store.getState())\n .filter(\n ([key, slice]) => key !== 'room' && isRoomSliceWithDestroy(slice),\n )\n .map(async ([_key, slice]) => {\n await slice.destroy();\n }),\n );\n },\n captureException:\n props?.captureException ??\n ((exception: unknown) => console.error(exception)),\n },\n });\n}\n/** @deprecated Use createBaseRoomSlice instead */\nexport const createRoomSlice = createBaseRoomSlice;\n\nexport function createSlice<\n SliceState,\n StoreState extends SliceState = BaseRoomStoreState & SliceState,\n>(\n sliceCreator: (...args: Parameters<StateCreator<StoreState>>) => SliceState,\n): StateCreator<SliceState> {\n return (set, get, store) =>\n sliceCreator(set, get as () => StoreState, store as StoreApi<StoreState>);\n}\n\n/** @deprecated Use createSlice instead */\nexport const createBaseSlice = createSlice;\n\n/**\n * Create a room store with custom fields and methods\n * @param initialState - The initial state and config for the room\n * @param sliceCreators - The slices to add to the room store\n * @returns The room store and a hook for accessing the room store\n */\nexport function createRoomStore<RS extends BaseRoomStoreState>(\n stateCreator: StateCreator<RS>,\n) {\n const factory = createRoomStoreCreator<BaseRoomStoreState & RS>();\n const storeCreator = factory(() => stateCreator);\n const roomStore = storeCreator.createRoomStore();\n\n function useRoomStoreHook<T>(selector: (state: RS) => T): T {\n return storeCreator.useRoomStore(selector);\n }\n const useRoomStore = withRoomStoreApi<RS>(useRoomStoreHook, () => roomStore);\n\n return {roomStore, useRoomStore};\n}\n\n/**\n * Factory to create a room store creator with custom params.\n *\n * @template RS - Room state type\n * @param stateCreatorFactory - A function that takes params and returns a Zustand state creator\n * @returns An object with createRoomStore(params) and useRoomStore(selector)\n *\n * @example\n * const {createRoomStore} = createRoomStoreCreator<MyRoomState>()(\n * (projectId: string) => createMyRoomState(projectId),\n * );\n * createRoomStore('project-a', {storeKey: 'project-a'});\n */\nexport function createRoomStoreCreator<RS extends BaseRoomStoreState>() {\n return function <TFactory extends (...args: any[]) => StateCreator<RS>>(\n stateCreatorFactory: TFactory,\n ): {\n createRoomStore: (...args: CreateRoomStoreArgs<TFactory>) => StoreApi<RS>;\n useRoomStore: UseRoomStore<RS>;\n } {\n const defaultStoreKey = DEV_HMR?.nextId();\n let store: StoreApi<RS> | undefined;\n let currentStoreKey: string | undefined = defaultStoreKey;\n\n function isCreateRoomStoreOptions(\n value: unknown,\n ): value is CreateRoomStoreOptions {\n return typeof value === 'object' && value !== null && 'storeKey' in value;\n }\n\n function createRoomStore(\n ...args: CreateRoomStoreArgs<TFactory>\n ): StoreApi<RS> {\n const lastArg = args[args.length - 1];\n const options = isCreateRoomStoreOptions(lastArg) ? lastArg : undefined;\n const factoryArgs = (\n options ? args.slice(0, -1) : args\n ) as Parameters<TFactory>;\n const storeKey = DEV_HMR\n ? (options?.storeKey ?? defaultStoreKey)\n : undefined;\n\n // Dev-only: Check for existing store from previous hot reload\n if (DEV_HMR && storeKey) {\n if (currentStoreKey && currentStoreKey !== storeKey) {\n const previousStore = DEV_HMR.get(currentStoreKey);\n if (previousStore) {\n const state = previousStore.getState();\n if (isRoomSliceWithDestroy(state.room)) {\n state.room.destroy().catch((error: unknown) => {\n state.room.captureException(error);\n });\n }\n }\n DEV_HMR.delete(currentStoreKey);\n }\n currentStoreKey = storeKey;\n\n const existingStore = DEV_HMR.get(storeKey);\n if (existingStore) {\n store = existingStore;\n return existingStore;\n }\n }\n\n store = createStore(stateCreatorFactory(...factoryArgs));\n\n // Dev-only: Register store for HMR preservation\n if (DEV_HMR && currentStoreKey) {\n DEV_HMR.set(currentStoreKey, store);\n }\n\n if (typeof window !== 'undefined') {\n (async () => {\n try {\n // Initialize the room\n await store.getState().room.initialize();\n // Set initialized to true after initialization\n store.setState((state) =>\n produce(state, (draft) => {\n draft.room.initialized = true;\n }),\n );\n } catch (error) {\n store.getState().room.captureException(error);\n }\n })();\n } else {\n console.warn(\n 'Skipping room store initialization. The room store should only be used on the client.',\n );\n }\n return store;\n }\n\n function useRoomStoreHook<T>(selector: (state: RS) => T): T {\n if (!store)\n throw new Error(\n 'Room store not initialized. Call createRoomStore first.',\n );\n return useStore(store, selector);\n }\n const useRoomStore = withRoomStoreApi<RS>(useRoomStoreHook, () => store);\n\n return {createRoomStore, useRoomStore};\n };\n}\n\nfunction withRoomStoreApi<RS extends BaseRoomStoreState>(\n useRoomStore: <T>(selector: (state: RS) => T) => T,\n getStore: () => StoreApi<RS> | undefined,\n): UseRoomStore<RS> {\n const getState: StoreApi<RS>['getState'] = () =>\n getStoreOrThrow(getStore).getState();\n const setState = ((...args: unknown[]) =>\n (getStoreOrThrow(getStore).setState as (...args: unknown[]) => void)(\n ...args,\n )) as StoreApi<RS>['setState'];\n const subscribe = ((...args: unknown[]) =>\n (getStoreOrThrow(getStore).subscribe as (...args: unknown[]) => unknown)(\n ...args,\n )) as StoreApi<RS>['subscribe'];\n const getInitialState: StoreApi<RS>['getInitialState'] = () =>\n getStoreOrThrow(getStore).getInitialState();\n\n return Object.assign(useRoomStore, {\n getState,\n setState,\n subscribe,\n getInitialState,\n });\n}\n\nfunction getStoreOrThrow<RS extends BaseRoomStoreState>(\n getStore: () => StoreApi<RS> | undefined,\n): StoreApi<RS> {\n const store = getStore();\n if (!store) {\n throw new Error('Room store not initialized. Call createRoomStore first.');\n }\n return store;\n}\n\nexport function isRoomSliceWithInitialize(\n slice: unknown,\n): slice is Required<Pick<SliceFunctions, 'initialize'>> {\n return (\n typeof slice === 'object' &&\n slice !== null &&\n 'initialize' in slice &&\n typeof slice.initialize === 'function'\n );\n}\n\nexport function isRoomSliceWithDestroy(\n slice: unknown,\n): slice is Required<Pick<SliceFunctions, 'destroy'>> {\n return (\n typeof slice === 'object' &&\n slice !== null &&\n 'destroy' in slice &&\n typeof slice.destroy === 'function'\n );\n}\n"]}
@@ -1,9 +1,18 @@
1
1
  import React, { ReactNode } from 'react';
2
- import { BaseRoomStoreState, BaseRoomStore } from './BaseRoomStore';
2
+ import { StoreApi } from 'zustand';
3
+ import { BaseRoomStore, BaseRoomStoreState } from './BaseRoomStore';
3
4
  export declare const RoomStateContext: React.Context<BaseRoomStore<BaseRoomStoreState> | null>;
4
5
  export type RoomStateProviderProps<RS extends BaseRoomStoreState> = React.PropsWithChildren<{
5
6
  roomStore?: BaseRoomStore<RS>;
6
7
  }>;
7
8
  export declare function RoomStateProvider<RS extends BaseRoomStoreState>({ children, roomStore, }: RoomStateProviderProps<RS>): ReactNode;
9
+ /**
10
+ * Returns the raw Zustand store API from room context for imperative usage.
11
+ *
12
+ * This hook is non-reactive: it does not subscribe to store updates and does not
13
+ * trigger rerenders for normal state changes. For reactive UI reads, prefer
14
+ * `useBaseRoomStore` / `useRoomStore` selectors.
15
+ */
16
+ export declare function useRoomStoreApi<RS extends BaseRoomStoreState>(): StoreApi<RS>;
8
17
  export declare function useBaseRoomStore<RS extends object, T>(selector: (state: RS & BaseRoomStoreState) => T): T;
9
18
  //# sourceMappingURL=RoomStateProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RoomStateProvider.d.ts","sourceRoot":"","sources":["../src/RoomStateProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAgB,SAAS,EAAa,MAAM,OAAO,CAAC;AAElE,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAIlE,eAAO,MAAM,gBAAgB,yDACkC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,CAAC,EAAE,SAAS,kBAAkB,IAC9D,KAAK,CAAC,iBAAiB,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEL,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,kBAAkB,EAAE,EAC/D,QAAQ,EACR,SAAS,GACV,EAAE,sBAAsB,CAAC,EAAE,CAAC,GAAG,SAAS,CAMxC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,EACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,kBAAkB,KAAK,CAAC,GAC9C,CAAC,CASH"}
1
+ {"version":3,"file":"RoomStateProvider.d.ts","sourceRoot":"","sources":["../src/RoomStateProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAgB,SAAS,EAAa,MAAM,OAAO,CAAC;AAClE,OAAO,EAAC,QAAQ,EAAW,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,aAAa,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAIlE,eAAO,MAAM,gBAAgB,yDACkC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,CAAC,EAAE,SAAS,kBAAkB,IAC9D,KAAK,CAAC,iBAAiB,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEL,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,kBAAkB,EAAE,EAC/D,QAAQ,EACR,SAAS,GACV,EAAE,sBAAsB,CAAC,EAAE,CAAC,GAAG,SAAS,CAMxC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,kBAAkB,KAAK,QAAQ,CAAC,EAAE,CAAC,CAM7E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,EACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,kBAAkB,KAAK,CAAC,GAC9C,CAAC,CAGH"}
@@ -6,11 +6,22 @@ export const RoomStateContext = createContext(null);
6
6
  export function RoomStateProvider({ children, roomStore, }) {
7
7
  return (_jsx(RoomStateContext.Provider, { value: roomStore ?? null, children: children }));
8
8
  }
9
- export function useBaseRoomStore(selector) {
9
+ /**
10
+ * Returns the raw Zustand store API from room context for imperative usage.
11
+ *
12
+ * This hook is non-reactive: it does not subscribe to store updates and does not
13
+ * trigger rerenders for normal state changes. For reactive UI reads, prefer
14
+ * `useBaseRoomStore` / `useRoomStore` selectors.
15
+ */
16
+ export function useRoomStoreApi() {
10
17
  const store = useContext(RoomStateContext);
11
18
  if (!store) {
12
19
  throw new Error('Missing RoomStateProvider in the tree');
13
20
  }
21
+ return store;
22
+ }
23
+ export function useBaseRoomStore(selector) {
24
+ const store = useRoomStoreApi();
14
25
  return useStore(store, selector);
15
26
  }
16
27
  //# sourceMappingURL=RoomStateProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RoomStateProvider.js","sourceRoot":"","sources":["../src/RoomStateProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,aAAa,EAAa,UAAU,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAW,QAAQ,EAAC,MAAM,SAAS,CAAC;AAG3C,sEAAsE;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,aAAa,CAA2C,IAAI,CAAC,CAAC;AAOhE,MAAM,UAAU,iBAAiB,CAAgC,EAC/D,QAAQ,EACR,SAAS,GACkB;IAC3B,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,IAAI,IAAI,YAChD,QAAQ,GACiB,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAA+C;IAE/C,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,QAAQ,CACb,KAAqD,EACrD,QAAQ,CACT,CAAC;AACJ,CAAC","sourcesContent":["import React, {createContext, ReactNode, useContext} from 'react';\nimport {StoreApi, useStore} from 'zustand';\nimport {BaseRoomStoreState, BaseRoomStore} from './BaseRoomStore';\n\n// See https://docs.pmnd.rs/zustand/guides/initialize-state-with-props\n\nexport const RoomStateContext =\n createContext<BaseRoomStore<BaseRoomStoreState> | null>(null);\n\nexport type RoomStateProviderProps<RS extends BaseRoomStoreState> =\n React.PropsWithChildren<{\n roomStore?: BaseRoomStore<RS>;\n }>;\n\nexport function RoomStateProvider<RS extends BaseRoomStoreState>({\n children,\n roomStore,\n}: RoomStateProviderProps<RS>): ReactNode {\n return (\n <RoomStateContext.Provider value={roomStore ?? null}>\n {children}\n </RoomStateContext.Provider>\n );\n}\n\nexport function useBaseRoomStore<RS extends object, T>(\n selector: (state: RS & BaseRoomStoreState) => T,\n): T {\n const store = useContext(RoomStateContext);\n if (!store) {\n throw new Error('Missing RoomStateProvider in the tree');\n }\n return useStore(\n store as unknown as StoreApi<RS & BaseRoomStoreState>,\n selector,\n );\n}\n"]}
1
+ {"version":3,"file":"RoomStateProvider.js","sourceRoot":"","sources":["../src/RoomStateProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,aAAa,EAAa,UAAU,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAW,QAAQ,EAAC,MAAM,SAAS,CAAC;AAG3C,sEAAsE;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,aAAa,CAA2C,IAAI,CAAC,CAAC;AAOhE,MAAM,UAAU,iBAAiB,CAAgC,EAC/D,QAAQ,EACR,SAAS,GACkB;IAC3B,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,IAAI,IAAI,YAChD,QAAQ,GACiB,CAC7B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAA+C;IAE/C,MAAM,KAAK,GAAG,eAAe,EAA2B,CAAC;IACzD,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import React, {createContext, ReactNode, useContext} from 'react';\nimport {StoreApi, useStore} from 'zustand';\nimport {BaseRoomStore, BaseRoomStoreState} from './BaseRoomStore';\n\n// See https://docs.pmnd.rs/zustand/guides/initialize-state-with-props\n\nexport const RoomStateContext =\n createContext<BaseRoomStore<BaseRoomStoreState> | null>(null);\n\nexport type RoomStateProviderProps<RS extends BaseRoomStoreState> =\n React.PropsWithChildren<{\n roomStore?: BaseRoomStore<RS>;\n }>;\n\nexport function RoomStateProvider<RS extends BaseRoomStoreState>({\n children,\n roomStore,\n}: RoomStateProviderProps<RS>): ReactNode {\n return (\n <RoomStateContext.Provider value={roomStore ?? null}>\n {children}\n </RoomStateContext.Provider>\n );\n}\n\n/**\n * Returns the raw Zustand store API from room context for imperative usage.\n *\n * This hook is non-reactive: it does not subscribe to store updates and does not\n * trigger rerenders for normal state changes. For reactive UI reads, prefer\n * `useBaseRoomStore` / `useRoomStore` selectors.\n */\nexport function useRoomStoreApi<RS extends BaseRoomStoreState>(): StoreApi<RS> {\n const store = useContext(RoomStateContext);\n if (!store) {\n throw new Error('Missing RoomStateProvider in the tree');\n }\n return store as unknown as StoreApi<RS>;\n}\n\nexport function useBaseRoomStore<RS extends object, T>(\n selector: (state: RS & BaseRoomStoreState) => T,\n): T {\n const store = useRoomStoreApi<RS & BaseRoomStoreState>();\n return useStore(store, selector);\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -2,10 +2,10 @@
2
2
  * {@include ../README.md}
3
3
  * @packageDocumentation
4
4
  */
5
- export { RoomStateContext, RoomStateProvider, useBaseRoomStore, } from './RoomStateProvider';
5
+ export { RoomStateContext, RoomStateProvider, useBaseRoomStore, useRoomStoreApi, } from './RoomStateProvider';
6
6
  export type { RoomStateProviderProps } from './RoomStateProvider';
7
7
  export { createBaseRoomSlice, createBaseSlice, createSlice, createRoomSlice, createRoomStore, createRoomStoreCreator, isRoomSliceWithDestroy, isRoomSliceWithInitialize, } from './BaseRoomStore';
8
- export type { BaseRoomStoreState, CreateBaseRoomSliceProps, BaseRoomStore, } from './BaseRoomStore';
8
+ export type { BaseRoomStoreState, CreateBaseRoomSliceProps, BaseRoomStore, UseRoomStore, } from './BaseRoomStore';
9
9
  export { createPersistHelpers, persistSliceConfigs, } from './createPersistHelpers';
10
10
  export type { StateCreator, StoreApi } from 'zustand';
11
11
  export { BaseRoomConfig, DEFAULT_ROOM_TITLE, createDefaultBaseRoomConfig, DataSourceTypes, BaseDataSource, FileDataSource, UrlDataSource, SqlQueryDataSource, DataSource, isFileDataSource, isUrlDataSource, isSqlQueryDataSource, LoadFile, StandardLoadOptions, SpatialLoadOptions, SpatialLoadFileOptions, isSpatialLoadFileOptions, StandardLoadFileOptions, LoadFileOptions, MAIN_VIEW, LayoutTypes, DEFAULT_MOSAIC_LAYOUT, createDefaultMosaicLayout, MosaicLayoutDirection, MosaicLayoutParent, isMosaicLayoutParent, MosaicLayoutNodeKey, MosaicLayoutNode, MosaicLayoutConfig, LayoutConfig, } from '@sqlrooms/room-config';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAC,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAIpD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAC,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAIpD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * {@include ../README.md}
3
3
  * @packageDocumentation
4
4
  */
5
- export { RoomStateContext, RoomStateProvider, useBaseRoomStore, } from './RoomStateProvider';
5
+ export { RoomStateContext, RoomStateProvider, useBaseRoomStore, useRoomStoreApi, } from './RoomStateProvider';
6
6
  export { createBaseRoomSlice, createBaseSlice, createSlice, createRoomSlice, createRoomStore, createRoomStoreCreator, isRoomSliceWithDestroy, isRoomSliceWithInitialize, } from './BaseRoomStore';
7
7
  export { createPersistHelpers, persistSliceConfigs, } from './createPersistHelpers';
8
8
  // Re-export from @sqlrooms/room-config
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,uCAAuC;AACvC,2EAA2E;AAC3E,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {\n RoomStateContext,\n RoomStateProvider,\n useBaseRoomStore,\n} from './RoomStateProvider';\nexport type {RoomStateProviderProps} from './RoomStateProvider';\n\nexport {\n createBaseRoomSlice,\n createBaseSlice,\n createSlice,\n createRoomSlice,\n createRoomStore,\n createRoomStoreCreator,\n isRoomSliceWithDestroy,\n isRoomSliceWithInitialize,\n} from './BaseRoomStore';\nexport type {\n BaseRoomStoreState,\n CreateBaseRoomSliceProps,\n BaseRoomStore,\n} from './BaseRoomStore';\n\nexport {\n createPersistHelpers,\n persistSliceConfigs,\n} from './createPersistHelpers';\nexport type {StateCreator, StoreApi} from 'zustand';\n\n// Re-export from @sqlrooms/room-config\n// Values also export their corresponding types automatically (Zod pattern)\nexport {\n BaseRoomConfig,\n DEFAULT_ROOM_TITLE,\n createDefaultBaseRoomConfig,\n DataSourceTypes,\n BaseDataSource,\n FileDataSource,\n UrlDataSource,\n SqlQueryDataSource,\n DataSource,\n isFileDataSource,\n isUrlDataSource,\n isSqlQueryDataSource,\n LoadFile,\n StandardLoadOptions,\n SpatialLoadOptions,\n SpatialLoadFileOptions,\n isSpatialLoadFileOptions,\n StandardLoadFileOptions,\n LoadFileOptions,\n MAIN_VIEW,\n LayoutTypes,\n DEFAULT_MOSAIC_LAYOUT,\n createDefaultMosaicLayout,\n MosaicLayoutDirection,\n MosaicLayoutParent,\n isMosaicLayoutParent,\n MosaicLayoutNodeKey,\n MosaicLayoutNode,\n MosaicLayoutConfig,\n LayoutConfig,\n} from '@sqlrooms/room-config';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,uCAAuC;AACvC,2EAA2E;AAC3E,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {\n RoomStateContext,\n RoomStateProvider,\n useBaseRoomStore,\n useRoomStoreApi,\n} from './RoomStateProvider';\nexport type {RoomStateProviderProps} from './RoomStateProvider';\n\nexport {\n createBaseRoomSlice,\n createBaseSlice,\n createSlice,\n createRoomSlice,\n createRoomStore,\n createRoomStoreCreator,\n isRoomSliceWithDestroy,\n isRoomSliceWithInitialize,\n} from './BaseRoomStore';\nexport type {\n BaseRoomStoreState,\n CreateBaseRoomSliceProps,\n BaseRoomStore,\n UseRoomStore,\n} from './BaseRoomStore';\n\nexport {\n createPersistHelpers,\n persistSliceConfigs,\n} from './createPersistHelpers';\nexport type {StateCreator, StoreApi} from 'zustand';\n\n// Re-export from @sqlrooms/room-config\n// Values also export their corresponding types automatically (Zod pattern)\nexport {\n BaseRoomConfig,\n DEFAULT_ROOM_TITLE,\n createDefaultBaseRoomConfig,\n DataSourceTypes,\n BaseDataSource,\n FileDataSource,\n UrlDataSource,\n SqlQueryDataSource,\n DataSource,\n isFileDataSource,\n isUrlDataSource,\n isSqlQueryDataSource,\n LoadFile,\n StandardLoadOptions,\n SpatialLoadOptions,\n SpatialLoadFileOptions,\n isSpatialLoadFileOptions,\n StandardLoadFileOptions,\n LoadFileOptions,\n MAIN_VIEW,\n LayoutTypes,\n DEFAULT_MOSAIC_LAYOUT,\n createDefaultMosaicLayout,\n MosaicLayoutDirection,\n MosaicLayoutParent,\n isMosaicLayoutParent,\n MosaicLayoutNodeKey,\n MosaicLayoutNode,\n MosaicLayoutConfig,\n LayoutConfig,\n} from '@sqlrooms/room-config';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/room-store",
3
- "version": "0.27.0-rc.4",
3
+ "version": "0.27.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "access": "public"
20
20
  },
21
21
  "dependencies": {
22
- "@sqlrooms/room-config": "0.27.0-rc.4",
22
+ "@sqlrooms/room-config": "0.27.0",
23
23
  "immer": "^11.0.1",
24
24
  "zod": "^4.1.8",
25
25
  "zustand": "^5.0.8"
@@ -34,5 +34,5 @@
34
34
  "typecheck": "tsc --noEmit",
35
35
  "typedoc": "typedoc"
36
36
  },
37
- "gitHead": "892408d49720d1fb195308029674894ae059969d"
37
+ "gitHead": "f215995ab4adeac4c58171739261a15cbba9e82b"
38
38
  }