@deseteral/biurko 0.0.0-stage → 0.1.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.
@@ -0,0 +1,524 @@
1
+ /**
2
+ * Unique window identifier.
3
+ */
4
+ type WindowHandle = string & {
5
+ readonly __brand: unique symbol;
6
+ };
7
+ /**
8
+ * Configuration for creating a new window.
9
+ */
10
+ interface CreateWindowOptions {
11
+ /** The display title for the window. */
12
+ title: string;
13
+ /**
14
+ * Initial horizontal position (in pixels) in desktop coordinate space.
15
+ * Both `x` and `y` must be supplied to use explicit coordinates. If either is omitted,
16
+ * the configured {@link WindowPositionStrategy} determines both coordinates.
17
+ */
18
+ x?: number;
19
+ /**
20
+ * Initial vertical position (in pixels) in desktop coordinate space.
21
+ * Both `x` and `y` must be supplied to use explicit coordinates. If either is omitted,
22
+ * the configured {@link WindowPositionStrategy} determines both coordinates.
23
+ */
24
+ y?: number;
25
+ /** Initial width of the window in pixels. */
26
+ width: number;
27
+ /** Initial height of the window in pixels. */
28
+ height: number;
29
+ /** Minimum width constraint enforced during resize. Defaults to `0`. */
30
+ minWidth?: number;
31
+ /** Minimum height constraint enforced during resize. Defaults to `0`. */
32
+ minHeight?: number;
33
+ }
34
+ /**
35
+ * Represents the position and dimensions of a window.
36
+ */
37
+ interface WindowRect {
38
+ /** Horizontal position in pixels in desktop coordinate space. */
39
+ x: number;
40
+ /** Vertical position in pixels in desktop coordinate space. */
41
+ y: number;
42
+ /** Width of the window in pixels. */
43
+ width: number;
44
+ /** Height of the window in pixels. */
45
+ height: number;
46
+ }
47
+ /**
48
+ * Determines how the {@link WindowManager} positions new windows when explicit coordinates are not provided.
49
+ *
50
+ * - `"required"` - The caller must always provide `x` and `y`.
51
+ * - `"offset-from-focused"` - The new window is placed at an offset from the currently focused window.
52
+ * If no window is focused, the offset is applied to the desktop origin `(0, 0)`.
53
+ */
54
+ type WindowPositionStrategy = {
55
+ readonly type: "required";
56
+ } | {
57
+ readonly type: "offset-from-focused";
58
+ readonly offsetX: number;
59
+ readonly offsetY: number;
60
+ };
61
+ /**
62
+ * Determines how the {@link WindowManager} desktop behaves.
63
+ *
64
+ * - `"static"` - The desktop has no wheel-driven panning or zooming. Moving and resizing windows
65
+ * clamps their position to keep a small portion visible, not the entire window. Initial placement
66
+ * is not clamped, and descendants moved with a parent may overflow the desktop bounds.
67
+ * - `"infinite-canvas"` - The desktop acts as an infinite canvas. Windows live inside a translatable
68
+ * world layer that can be moved with the mouse wheel or the viewport translate API, and window
69
+ * placement is not clamped to the viewport.
70
+ */
71
+ type DesktopMode = {
72
+ readonly type: "static";
73
+ } | {
74
+ readonly type: "infinite-canvas";
75
+ };
76
+ /**
77
+ * Determines which window content surfaces can receive pointer input events.
78
+ *
79
+ * - `"all"` - All window surfaces are interactive.
80
+ * - `"focused-only"` - Only the currently focused window's surface is interactive.
81
+ *
82
+ * Drag regions (`data-biurko-drag-region`) and resize handles remain interactive in both modes.
83
+ */
84
+ type WindowInteractivity = {
85
+ readonly type: "all";
86
+ } | {
87
+ readonly type: "focused-only";
88
+ };
89
+ /**
90
+ * Configuration for a parent-child window relationship
91
+ * (see {@link WindowManager.attachWindowToParent}).
92
+ */
93
+ interface WindowParentOptions {
94
+ /**
95
+ * Determines whether dragging a window tears it off its parent.
96
+ *
97
+ * @defaultValue `false`
98
+ */
99
+ detachOnDrag?: boolean;
100
+ }
101
+ /** Event detail emitted when a new window is created. */
102
+ interface WindowOpenedEventDetail {
103
+ /** The handle of the newly created window. */
104
+ handle: WindowHandle;
105
+ }
106
+ /** Event detail emitted when a window is closed. */
107
+ interface WindowClosedEventDetail {
108
+ /** The handle of the closed window. */
109
+ handle: WindowHandle;
110
+ }
111
+ /** Event detail emitted by a successful focus call, even if the window was already focused. */
112
+ interface WindowFocusedEventDetail {
113
+ /** The handle of the focused window. */
114
+ handle: WindowHandle;
115
+ }
116
+ /**
117
+ * Event detail emitted when a window drag gesture completes, even if its position did not change.
118
+ * Only the dragged window emits this event, not descendants moved with it.
119
+ * Programmatic calls to `moveWindow` do not emit this event.
120
+ */
121
+ interface WindowMovedEventDetail {
122
+ /** The handle of the moved window. */
123
+ handle: WindowHandle;
124
+ /** The horizontal position after the drag, in pixels in desktop coordinate space. */
125
+ x: number;
126
+ /** The vertical position after the drag, in pixels in desktop coordinate space. */
127
+ y: number;
128
+ }
129
+ /**
130
+ * Event detail emitted when a window resize gesture completes, even if its size did not change.
131
+ * Programmatic calls to `resizeWindow` do not emit this event.
132
+ */
133
+ interface WindowResizedEventDetail {
134
+ /** The handle of the resized window. */
135
+ handle: WindowHandle;
136
+ /** The horizontal position after the resize, in pixels in desktop coordinate space. */
137
+ x: number;
138
+ /** The vertical position after the resize, in pixels in desktop coordinate space. */
139
+ y: number;
140
+ /** The width after the resize, in pixels. */
141
+ width: number;
142
+ /** The height after the resize, in pixels. */
143
+ height: number;
144
+ }
145
+ /** Event detail emitted when a window's parent relationship changes. */
146
+ interface WindowParentChangedEventDetail {
147
+ /** The handle of the window whose parent changed. */
148
+ handle: WindowHandle;
149
+ /** The previous parent handle, or `null` if the window was a root. */
150
+ previousParent: WindowHandle | null;
151
+ /** The new parent handle, or `null` if the window has become a root. */
152
+ parent: WindowHandle | null;
153
+ }
154
+ /**
155
+ * Event detail emitted when the stored viewport translation changes.
156
+ * Offsets are the requested values and may differ from the browser-clamped scroll position.
157
+ */
158
+ interface ViewportTranslatedEventDetail {
159
+ /** New horizontal translate offset of the world layer, in pixels. */
160
+ x: number;
161
+ /** New vertical translate offset of the world layer, in pixels. */
162
+ y: number;
163
+ }
164
+ /** Maps window manager event names to their custom event payloads. */
165
+ interface WindowManagerEventMap {
166
+ "window-opened": CustomEvent<WindowOpenedEventDetail>;
167
+ "window-closed": CustomEvent<WindowClosedEventDetail>;
168
+ "window-focused": CustomEvent<WindowFocusedEventDetail>;
169
+ "window-moved": CustomEvent<WindowMovedEventDetail>;
170
+ "window-resized": CustomEvent<WindowResizedEventDetail>;
171
+ "window-parent-changed": CustomEvent<WindowParentChangedEventDetail>;
172
+ "viewport-translated": CustomEvent<ViewportTranslatedEventDetail>;
173
+ }
174
+ type NoAttachedData = ReturnType<() => void>;
175
+ /** Configuration options for the {@link WindowManager} constructor. */
176
+ interface WindowManagerOptions {
177
+ /**
178
+ * Distance (in pixels) that invisible resize hit regions extend inside and outside each window edge.
179
+ * Edge hit regions are twice this value in thickness; corner regions are squares of that size.
180
+ * A larger value makes it easier for users to grab the resize handles.
181
+ *
182
+ * @defaultValue `6`
183
+ */
184
+ resizeRegionSize?: number;
185
+ /**
186
+ * Strategy used to determine window position.
187
+ *
188
+ * @defaultValue `{ type: "required" }`
189
+ */
190
+ positionStrategy?: WindowPositionStrategy;
191
+ /**
192
+ * Determines how the desktop behaves (see {@link DesktopMode}).
193
+ *
194
+ * @defaultValue `{ type: "static" }`
195
+ */
196
+ mode?: DesktopMode;
197
+ /**
198
+ * Determines which windows can receive mouse input events.
199
+ *
200
+ * @defaultValue `{ type: "all" }`
201
+ */
202
+ windowInteractivity?: WindowInteractivity;
203
+ }
204
+ /**
205
+ * Core window management class that handles window lifecycle and actions such as drag, resize, focus, and ordering.
206
+ *
207
+ * Dispatches typed events (see {@link WindowManagerEventMap}).
208
+ *
209
+ * @typeParam AttachedDataT - Optional data type attached to each window. Use `void` (default) if no
210
+ * data is needed.
211
+ */
212
+ declare class WindowManager<AttachedDataT = NoAttachedData> extends EventTarget {
213
+ private readonly desktopElement;
214
+ private readonly scrollerElement;
215
+ private readonly worldElement;
216
+ private readonly windows;
217
+ private readonly dragState;
218
+ private readonly resizeState;
219
+ private readonly resizeRegionSize;
220
+ private readonly positionStrategy;
221
+ private readonly mode;
222
+ private readonly windowInteractivity;
223
+ private translateX;
224
+ private translateY;
225
+ private zoomLevel;
226
+ /**
227
+ * Creates a new WindowManager bound to the given container element.
228
+ * The container acts as the "desktop" area where windows are positioned. Its `data-biurko-type`
229
+ * attribute is set to `"desktop"`, its position is set to `relative`, and the `biurko-desktop`
230
+ * CSS class is added automatically.
231
+ *
232
+ * Windows are placed inside an inner layer with `data-biurko-type="world"`.
233
+ * In `"infinite-canvas"` mode, scrolling the desktop background pans the canvas and
234
+ * Shift+wheel zooms around the pointer. Holding Alt also enables these gestures over windows.
235
+ * Panning is also available through {@link setViewportTranslate}.
236
+ *
237
+ * @param container - The DOM element that serves as the desktop area.
238
+ * @param options - Optional configuration details.
239
+ */
240
+ constructor(container: HTMLElement, options?: WindowManagerOptions);
241
+ /**
242
+ * Creates a new window and appends it to the desktop's world layer.
243
+ * The window is automatically focused (brought to front) upon creation.
244
+ * Dispatches `"window-focused"` before `"window-opened"`.
245
+ * Initial position and size are not clamped to desktop bounds or minimum size constraints.
246
+ *
247
+ * @param options - Configuration details (see {@link CreateWindowOptions}).
248
+ * @param args - If `AttachedDataT` is not `void`, the attached data must be passed as the second argument.
249
+ * @returns A unique {@link WindowHandle} identifying the created window.
250
+ * @throws Error if either coordinate is missing when the position strategy is `"required"`.
251
+ */
252
+ createWindow(options: CreateWindowOptions, ...args: AttachedDataT extends NoAttachedData ? [] : [data: AttachedDataT]): WindowHandle;
253
+ /**
254
+ * Brings the specified window to front.
255
+ * No-op if the handle is invalid.
256
+ * Dispatches a `"window-focused"` event even if the window is already focused.
257
+ *
258
+ * @param handle - The handle of the window to focus.
259
+ */
260
+ focusWindow(handle: WindowHandle): void;
261
+ /**
262
+ * Returns the handle of the currently focused window.
263
+ *
264
+ * @returns The {@link WindowHandle} of the focused window, or `null` if no windows are open.
265
+ */
266
+ getFocusedWindow(): WindowHandle | null;
267
+ /**
268
+ * Closes and removes the window together with its complete descendant subtree.
269
+ * The windows' DOM elements are removed and their internal state is cleaned up.
270
+ * One `"window-closed"` event is dispatched per removed window, descendants first.
271
+ * No-op if the handle is invalid or its window is no longer open.
272
+ *
273
+ * @param handle - The handle of the window to close.
274
+ */
275
+ closeWindow(handle: WindowHandle): void;
276
+ /**
277
+ * Attaches a window to another window, forming a parent-child relationship.
278
+ * Moving the parent moves the complete child subtree (see {@link moveWindow}),
279
+ * and closing the parent closes the complete child subtree (see {@link closeWindow}).
280
+ * Attachment does not affect position, size, focus, z-order, or DOM structure.
281
+ *
282
+ * Attaching a window to itself or to one of its descendants is rejected.
283
+ * Attaching a window that already has a parent reparents it with the given options.
284
+ * No-op if either handle is invalid or the relationship already exists.
285
+ * Dispatches a `"window-parent-changed"` event on success.
286
+ *
287
+ * @param child - The handle of the window to attach.
288
+ * @param parent - The handle of the window to attach to.
289
+ * @param options - Configuration of the relationship (see {@link WindowParentOptions}).
290
+ * To change the options of an existing relationship, detach the window and attach it again.
291
+ */
292
+ attachWindowToParent(child: WindowHandle, parent: WindowHandle, options?: WindowParentOptions): void;
293
+ /**
294
+ * Detaches a window from its parent, turning the window together with its
295
+ * descendants into an independent root tree. Descendant relationships are preserved.
296
+ * Relationship options are reset to defaults.
297
+ * No-op if the handle is invalid or the window has no parent.
298
+ * Dispatches a `"window-parent-changed"` event on success.
299
+ *
300
+ * @param child - The handle of the window to detach.
301
+ */
302
+ detachWindowFromParent(child: WindowHandle): void;
303
+ /**
304
+ * Returns the parent of the given window.
305
+ *
306
+ * @param child - The window handle.
307
+ * @returns The parent handle, or `null` if the window is a root or the handle is invalid.
308
+ */
309
+ getWindowParent(child: WindowHandle): WindowHandle | null;
310
+ /**
311
+ * Returns the direct children of the given window.
312
+ *
313
+ * @param parent - The window handle.
314
+ * @returns The handles of direct children in creation order. Empty if the window has no children.
315
+ */
316
+ getChildren(parent: WindowHandle): WindowHandle[];
317
+ /**
318
+ * Returns the options of the parent-child relationship of the given window
319
+ * (see {@link attachWindowToParent}).
320
+ *
321
+ * @param child - The window handle.
322
+ * @returns The relationship options with defaults applied. Defaults are returned
323
+ * if the window is a root or the handle is invalid.
324
+ */
325
+ getWindowParentOptions(child: WindowHandle): Required<WindowParentOptions>;
326
+ /**
327
+ * Returns the surface element (content container) for the given window.
328
+ * This is the `HTMLDivElement` where you should render your window content.
329
+ * It has the CSS class `biurko-surface`.
330
+ *
331
+ * @param handle - The window handle.
332
+ * @returns The surface element, or `null` if the handle is invalid.
333
+ */
334
+ getWindowSurface(handle: WindowHandle): HTMLDivElement | null;
335
+ /**
336
+ * Returns the current title of the window.
337
+ *
338
+ * @param handle - The window handle.
339
+ * @returns The title string, or `null` if the handle is invalid.
340
+ */
341
+ getWindowTitle(handle: WindowHandle): string | null;
342
+ /**
343
+ * Updates the title of the window.
344
+ * This only updates the internal state (see {@link getWindowTitle}).
345
+ *
346
+ * @param handle - The window handle.
347
+ * @param title - The new title string.
348
+ */
349
+ setWindowTitle(handle: WindowHandle, title: string): void;
350
+ /**
351
+ * Returns the attached data for the given window.
352
+ * The data type is determined by the `AttachedDataT` generic parameter.
353
+ *
354
+ * @param handle - The window handle.
355
+ * @returns The attached data, or `null` if the handle is invalid or the stored data is falsy
356
+ * (including when no data was provided).
357
+ */
358
+ getWindowData(handle: WindowHandle): AttachedDataT | null;
359
+ /**
360
+ * Returns the current position and dimensions of the window.
361
+ *
362
+ * @param handle - The window handle.
363
+ * @returns A {@link WindowRect}, or `null` if the handle is invalid.
364
+ */
365
+ getWindowRect(handle: WindowHandle): WindowRect | null;
366
+ /**
367
+ * Returns the minimum size constraints for the window.
368
+ *
369
+ * @param handle - The window handle.
370
+ * @returns An object with `minWidth` and `minHeight`, or `null` if the handle is invalid.
371
+ */
372
+ getMinSize(handle: WindowHandle): {
373
+ minWidth: number;
374
+ minHeight: number;
375
+ } | null;
376
+ /**
377
+ * Returns the container element containing windows that represents the desktop.
378
+ */
379
+ getDesktopElement(): HTMLElement;
380
+ /** Offset between logical world coordinates and physical offsets inside the world layer. */
381
+ private get worldOriginOffset();
382
+ /**
383
+ * Returns the stored viewport translation, initially `{ x: 0, y: 0 }`.
384
+ * This is the requested offset, which may differ from the actual scroll position
385
+ * when the browser clamps scrolling at the world bounds.
386
+ *
387
+ * @returns The horizontal and vertical translate offsets in pixels.
388
+ */
389
+ getViewportTranslate(): {
390
+ x: number;
391
+ y: number;
392
+ };
393
+ /**
394
+ * Stores a viewport translation and updates the inner container's scroll position.
395
+ * Intended for `"infinite-canvas"` mode, where positive offsets pan the world right and down.
396
+ * The stored offsets are not clamped, but the browser limits the actual scroll position
397
+ * to the scrollable world bounds. Static mode does not ignore or reset these offsets.
398
+ * Dispatches a `"viewport-translated"` event when the stored offset changes.
399
+ *
400
+ * @param x - New horizontal offset in pixels.
401
+ * @param y - New vertical offset in pixels.
402
+ */
403
+ setViewportTranslate(x: number, y: number): void;
404
+ /**
405
+ * Translates the world layer by a relative offset (see {@link setViewportTranslate}).
406
+ *
407
+ * @param dx - Horizontal offset delta in pixels.
408
+ * @param dy - Vertical offset delta in pixels.
409
+ */
410
+ translateViewport(dx: number, dy: number): void;
411
+ /**
412
+ * Sets the scale of the world layer.
413
+ * Values below `0.1` are clamped to `0.1`; there is no maximum.
414
+ * Applies in both desktop modes and does not adjust the viewport translation.
415
+ *
416
+ * @param level - The scale applied to the world layer.
417
+ */
418
+ setZoomLevel(level: number): void;
419
+ /**
420
+ * Adds `delta` to the current zoom level (see {@link setZoomLevel}).
421
+ * This is an additive change, not a multiplication of the scale.
422
+ *
423
+ * @param delta - The delta applied to the world layer scale.
424
+ */
425
+ zoomBy(delta: number): void;
426
+ /** Resets the world layer's zoom level to `1` without changing the viewport translation. */
427
+ resetZoomLevel(): void;
428
+ /**
429
+ * Returns the scale of the world layer.
430
+ *
431
+ * @returns The current zoom level, initially `1` and at least `0.1`.
432
+ */
433
+ getZoomLevel(): number;
434
+ private setZoomLevelAtPoint;
435
+ /**
436
+ * Converts viewport (client) coordinates to desktop world coordinates,
437
+ * taking the desktop's position, actual scroll offsets, and zoom level into account.
438
+ *
439
+ * @param clientX - Horizontal position in client (viewport) coordinates.
440
+ * @param clientY - Vertical position in client (viewport) coordinates.
441
+ * @returns The corresponding position in desktop coordinate space.
442
+ */
443
+ clientToWorld(clientX: number, clientY: number): {
444
+ x: number;
445
+ y: number;
446
+ };
447
+ private onWheel;
448
+ /**
449
+ * Moves the window to the specified position in desktop coordinate space.
450
+ * The window's complete descendant subtree (see {@link attachWindowToParent}) is moved
451
+ * by the same delta, preserving relative positions inside the subtree.
452
+ * In `"static"` mode only the moved root is clamped to keep a small portion visible
453
+ * within the desktop bounds; descendants follow rigidly and may overflow the bounds.
454
+ * In `"infinite-canvas"` mode positions are not clamped.
455
+ * No-op if the handle is invalid. Does not dispatch `"window-moved"`;
456
+ * that event is dispatched only when a drag gesture completes, for the dragged window.
457
+ *
458
+ * @param handle - The window handle.
459
+ * @param x - New horizontal position in pixels.
460
+ * @param y - New vertical position in pixels.
461
+ */
462
+ moveWindow(handle: WindowHandle, x: number, y: number): void;
463
+ /**
464
+ * Resizes and repositions the window.
465
+ * The size is clamped to the minimum constraints (`minWidth`/`minHeight`).
466
+ * In `"static"` mode the position is clamped to keep a small portion of the window visible;
467
+ * in `"infinite-canvas"` mode the position is not clamped.
468
+ * Descendant windows are not moved or resized.
469
+ * No-op if the handle is invalid. Does not dispatch `"window-resized"`;
470
+ * that event is dispatched only when a resize gesture completes.
471
+ *
472
+ * @param handle - The window handle.
473
+ * @param x - New horizontal position in pixels in desktop coordinate space.
474
+ * @param y - New vertical position in pixels in desktop coordinate space.
475
+ * @param width - New width in pixels (will be clamped to `minWidth`).
476
+ * @param height - New height in pixels (will be clamped to `minHeight`).
477
+ */
478
+ resizeWindow(handle: WindowHandle, x: number, y: number, width: number, height: number): void;
479
+ /** Clamp position so that at least `margin` pixels of the window remain visible within the container. */
480
+ private clampWindowPositionWithinDesktop;
481
+ private resolveInitialPosition;
482
+ /**
483
+ * Stabilize orderIdx (make them continuous, remove duplicate indices).
484
+ * Apply order to z-index for all windows.
485
+ * This method must be called everytime any orderIdx is changed.
486
+ */
487
+ private applyWindowOrdering;
488
+ private getWindowRectInWorldCoords;
489
+ private buildChildrenIndex;
490
+ private collectWindowSubtree;
491
+ /**
492
+ * Registers a listener for a window manager event with a typed event payload.
493
+ *
494
+ * @param type - The window manager event name.
495
+ * @param listener - Callback receiving the event and its detail payload.
496
+ * @param options - Standard DOM listener options or the capture flag.
497
+ */
498
+ addEventListener<K extends keyof WindowManagerEventMap>(type: K, listener: (event: WindowManagerEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
499
+ /**
500
+ * Registers a listener for any event using the standard {@link EventTarget} API.
501
+ *
502
+ * @param type - The event name.
503
+ * @param listener - Callback or object whose `handleEvent` method receives the event.
504
+ * @param options - Standard DOM listener options or the capture flag.
505
+ */
506
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
507
+ /**
508
+ * Removes a listener for a typed window manager event.
509
+ *
510
+ * @param type - The window manager event name used during registration.
511
+ * @param listener - The same callback passed to {@link addEventListener}.
512
+ * @param options - Listener options; the capture flag must match the registration.
513
+ */
514
+ removeEventListener<K extends keyof WindowManagerEventMap>(type: K, listener: (event: WindowManagerEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
515
+ /**
516
+ * Removes a listener using the standard {@link EventTarget} API.
517
+ *
518
+ * @param type - The event name used during registration.
519
+ * @param listener - The same callback or listener object used during registration.
520
+ * @param options - Listener options; the capture flag must match the registration.
521
+ */
522
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
523
+ }
524
+ export { WindowFocusedEventDetail as a, WindowOpenedEventDetail as c, CreateWindowOptions as d, DesktopMode as f, WindowRect as g, WindowPositionStrategy as h, WindowClosedEventDetail as i, WindowParentChangedEventDetail as l, WindowParentOptions as m, WindowManagerOptions as n, WindowManagerEventMap as o, WindowHandle as p, ViewportTranslatedEventDetail as r, WindowMovedEventDetail as s, WindowManager as t, WindowResizedEventDetail as u };
package/package.json CHANGED
@@ -1,6 +1,81 @@
1
1
  {
2
2
  "name": "@deseteral/biurko",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "A browser window manager with React and SolidJS adapters.",
5
+ "homepage": "https://github.com/Deseteral/biurko#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/Deseteral/biurko/issues"
8
+ },
9
+ "license": "MIT",
10
+ "author": "Deseteral",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/Deseteral/biurko.git"
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "type": "module",
19
+ "types": "./dist/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ },
25
+ "./adapters/solid-js": {
26
+ "types": "./dist/adapters/solid-js/index.d.ts",
27
+ "import": "./dist/adapters/solid-js/index.js"
28
+ },
29
+ "./adapters/react": {
30
+ "types": "./dist/adapters/react/index.d.ts",
31
+ "import": "./dist/adapters/react/index.js"
32
+ }
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "scripts": {
38
+ "build": "vp pack",
39
+ "build:demo": "vp build demo/",
40
+ "prepack": "npm run typecheck && npm run build",
41
+ "typecheck": "tsc --noEmit",
42
+ "lint": "vp lint",
43
+ "check": "vp check",
44
+ "format": "vp fmt",
45
+ "format:check": "vp fmt --check",
46
+ "demo": "vp dev demo/"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "26.6.3",
50
+ "@types/react": "19.3.0",
51
+ "@types/react-dom": "19.3.0",
52
+ "@vitejs/plugin-react": "6.1.1",
53
+ "react": "19.3.0",
54
+ "react-dom": "19.3.0",
55
+ "solid-js": "1.9.15",
56
+ "typescript": "7.0.2",
57
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.4.0",
58
+ "vite-plugin-solid": "2.11.14",
59
+ "vite-plus": "1.4.0"
60
+ },
61
+ "peerDependencies": {
62
+ "react": ">=18.0.0",
63
+ "react-dom": ">=18.0.0",
64
+ "solid-js": ">=1.8.0"
65
+ },
66
+ "peerDependenciesMeta": {
67
+ "solid-js": {
68
+ "optional": true
69
+ },
70
+ "react": {
71
+ "optional": true
72
+ },
73
+ "react-dom": {
74
+ "optional": true
75
+ }
76
+ },
77
+ "overrides": {
78
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.4.0"
79
+ },
80
+ "packageManager": "npm@11.20.0"
81
+ }