@surdeddd/wmkit 0.1.1 → 0.3.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.
Files changed (62) hide show
  1. package/README.md +58 -12
  2. package/README.ru.md +21 -12
  3. package/dist/angular.cjs +52 -0
  4. package/dist/angular.cjs.map +1 -0
  5. package/dist/angular.d.cts +15 -0
  6. package/dist/angular.d.ts +15 -0
  7. package/dist/angular.js +47 -0
  8. package/dist/angular.js.map +1 -0
  9. package/dist/{controller-1uedRvQw.d.ts → binder-0Oku22Nc.d.ts} +21 -3
  10. package/dist/{controller-BfUF1k04.d.cts → binder-Dq_AZRbo.d.cts} +21 -3
  11. package/dist/{chunk-TXINVEK3.cjs → chunk-B35DANTX.cjs} +596 -241
  12. package/dist/chunk-B35DANTX.cjs.map +1 -0
  13. package/dist/{chunk-N5KNWRKU.js → chunk-YCHJXSTC.js} +596 -242
  14. package/dist/chunk-YCHJXSTC.js.map +1 -0
  15. package/dist/index.cjs +19 -15
  16. package/dist/index.d.cts +7 -4
  17. package/dist/index.d.ts +7 -4
  18. package/dist/index.js +1 -1
  19. package/dist/persist.cjs +1 -1
  20. package/dist/persist.cjs.map +1 -1
  21. package/dist/persist.d.cts +1 -1
  22. package/dist/persist.d.ts +1 -1
  23. package/dist/persist.js +1 -1
  24. package/dist/persist.js.map +1 -1
  25. package/dist/popout.cjs +1 -1
  26. package/dist/popout.cjs.map +1 -1
  27. package/dist/popout.d.cts +1 -1
  28. package/dist/popout.d.ts +1 -1
  29. package/dist/popout.js +1 -1
  30. package/dist/popout.js.map +1 -1
  31. package/dist/react.cjs +3 -3
  32. package/dist/react.cjs.map +1 -1
  33. package/dist/react.d.cts +2 -2
  34. package/dist/react.d.ts +2 -2
  35. package/dist/react.js +1 -1
  36. package/dist/react.js.map +1 -1
  37. package/dist/solid.cjs +3 -3
  38. package/dist/solid.cjs.map +1 -1
  39. package/dist/solid.d.cts +2 -2
  40. package/dist/solid.d.ts +2 -2
  41. package/dist/solid.js +1 -1
  42. package/dist/solid.js.map +1 -1
  43. package/dist/svelte.cjs +4 -4
  44. package/dist/svelte.cjs.map +1 -1
  45. package/dist/svelte.d.cts +2 -2
  46. package/dist/svelte.d.ts +2 -2
  47. package/dist/svelte.js +2 -2
  48. package/dist/svelte.js.map +1 -1
  49. package/dist/themes/glass.css +0 -1
  50. package/dist/themes/light.css +202 -0
  51. package/dist/themes/retro.css +152 -0
  52. package/dist/{types-BYx7gCuT.d.cts → types-DdCtDHgt.d.cts} +23 -1
  53. package/dist/{types-BYx7gCuT.d.ts → types-DdCtDHgt.d.ts} +23 -1
  54. package/dist/vue.cjs +3 -3
  55. package/dist/vue.cjs.map +1 -1
  56. package/dist/vue.d.cts +2 -2
  57. package/dist/vue.d.ts +2 -2
  58. package/dist/vue.js +1 -1
  59. package/dist/vue.js.map +1 -1
  60. package/package.json +34 -7
  61. package/dist/chunk-N5KNWRKU.js.map +0 -1
  62. package/dist/chunk-TXINVEK3.cjs.map +0 -1
package/dist/popout.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { W as WindowManager } from './types-BYx7gCuT.cjs';
1
+ import { W as WindowManager } from './types-DdCtDHgt.cjs';
2
2
 
3
3
  interface DocumentPictureInPictureApi {
4
4
  requestWindow(options?: {
package/dist/popout.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { W as WindowManager } from './types-BYx7gCuT.js';
1
+ import { W as WindowManager } from './types-DdCtDHgt.js';
2
2
 
3
3
  interface DocumentPictureInPictureApi {
4
4
  requestWindow(options?: {
package/dist/popout.js CHANGED
@@ -1,4 +1,4 @@
1
- // src/popout.ts
1
+ // src/plugins/popout.ts
2
2
  function isPopoutSupported() {
3
3
  return typeof window !== "undefined" && window.documentPictureInPicture !== void 0;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/popout.ts"],"names":[],"mappings":"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","file":"popout.js","sourcesContent":["import type { WindowManager } from './core/types'\n\ninterface DocumentPictureInPictureApi {\n requestWindow(options?: {\n width?: number\n height?: number\n disallowReturnToOpener?: boolean\n }): Promise<Window>\n}\n\ndeclare global {\n interface Window {\n documentPictureInPicture?: DocumentPictureInPictureApi\n }\n}\n\nexport interface PopoutOptions {\n width?: number\n height?: number\n copyStyles?: boolean\n minimizeWhilePopped?: boolean\n}\n\nexport interface PopoutHandle {\n pipWindow: Window\n close(): void\n}\n\nexport function isPopoutSupported(): boolean {\n return typeof window !== 'undefined' && window.documentPictureInPicture !== undefined\n}\n\nfunction copyStylesInto(pipWindow: Window, source: Document): void {\n for (const sheet of Array.from(source.styleSheets)) {\n const owner = sheet.ownerNode\n if (!owner) continue\n try {\n const rules = Array.from(sheet.cssRules)\n .map((rule) => rule.cssText)\n .join('\\n')\n const style = pipWindow.document.createElement('style')\n style.textContent = rules\n pipWindow.document.head.append(style)\n } catch {\n if (owner instanceof HTMLLinkElement && owner.href) {\n const link = pipWindow.document.createElement('link')\n link.rel = 'stylesheet'\n link.href = owner.href\n pipWindow.document.head.append(link)\n }\n }\n }\n}\n\nexport async function popout(\n wm: WindowManager,\n id: string,\n content: HTMLElement,\n options: PopoutOptions = {},\n): Promise<PopoutHandle> {\n const win = wm.get(id)\n if (!win) throw new Error(`wmkit: cannot pop out unknown window \"${id}\"`)\n const api = typeof window !== 'undefined' ? window.documentPictureInPicture : undefined\n if (!api) throw new Error('wmkit: Document Picture-in-Picture is not supported in this browser')\n\n const pipWindow = await api.requestWindow({\n width: options.width ?? Math.round(win.bounds.width),\n height: options.height ?? Math.round(win.bounds.height),\n })\n\n if (options.copyStyles !== false) copyStylesInto(pipWindow, content.ownerDocument)\n\n const parent = content.parentNode\n const marker = content.ownerDocument.createComment('wmkit-popout')\n parent?.insertBefore(marker, content)\n pipWindow.document.body.append(content)\n pipWindow.document.title = win.title\n\n const minimizeWhilePopped = options.minimizeWhilePopped !== false\n if (minimizeWhilePopped) wm.minimize(id)\n\n let closed = false\n function handleReturn(): void {\n if (closed) return\n closed = true\n if (marker.parentNode) {\n marker.parentNode.insertBefore(content, marker)\n marker.remove()\n }\n if (minimizeWhilePopped && wm.get(id)) wm.restore(id)\n }\n\n pipWindow.addEventListener('pagehide', handleReturn)\n\n return {\n pipWindow,\n close() {\n pipWindow.close()\n handleReturn()\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/plugins/popout.ts"],"names":[],"mappings":";AA4BO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,wBAAA,KAA6B,MAAA;AAC9E;AAEA,SAAS,cAAA,CAAe,WAAmB,MAAA,EAAwB;AACjE,EAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AAClD,IAAA,MAAM,QAAQ,KAAA,CAAM,SAAA;AACpB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,CACpC,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAA,CAC1B,KAAK,IAAI,CAAA;AACZ,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACtD,MAAA,KAAA,CAAM,WAAA,GAAc,KAAA;AACpB,MAAA,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACtC,CAAA,CAAA,MAAQ;AACN,MAAA,IAAI,KAAA,YAAiB,eAAA,IAAmB,KAAA,CAAM,IAAA,EAAM;AAClD,QAAA,MAAM,IAAA,GAAO,SAAA,CAAU,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AACpD,QAAA,IAAA,CAAK,GAAA,GAAM,YAAA;AACX,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,QAAA,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,OACpB,EAAA,EACA,EAAA,EACA,OAAA,EACA,OAAA,GAAyB,EAAC,EACH;AACvB,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACrB,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,EAAE,CAAA,CAAA,CAAG,CAAA;AACxE,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,KAAW,WAAA,GAAc,OAAO,wBAAA,GAA2B,MAAA;AAC9E,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAE/F,EAAA,MAAM,SAAA,GAAY,MAAM,GAAA,CAAI,aAAA,CAAc;AAAA,IACxC,OAAO,OAAA,CAAQ,KAAA,IAAS,KAAK,KAAA,CAAM,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,IACnD,QAAQ,OAAA,CAAQ,MAAA,IAAU,KAAK,KAAA,CAAM,GAAA,CAAI,OAAO,MAAM;AAAA,GACvD,CAAA;AAED,EAAA,IAAI,QAAQ,UAAA,KAAe,KAAA,EAAO,cAAA,CAAe,SAAA,EAAW,QAAQ,aAAa,CAAA;AAEjF,EAAA,MAAM,SAAS,OAAA,CAAQ,UAAA;AACvB,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,aAAA,CAAc,aAAA,CAAc,cAAc,CAAA;AACjE,EAAA,MAAA,EAAQ,YAAA,CAAa,QAAQ,OAAO,CAAA;AACpC,EAAA,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AACtC,EAAA,SAAA,CAAU,QAAA,CAAS,QAAQ,GAAA,CAAI,KAAA;AAE/B,EAAA,MAAM,mBAAA,GAAsB,QAAQ,mBAAA,KAAwB,KAAA;AAC5D,EAAA,IAAI,mBAAA,EAAqB,EAAA,CAAG,QAAA,CAAS,EAAE,CAAA;AAEvC,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,SAAS,YAAA,GAAqB;AAC5B,IAAA,IAAI,MAAA,EAAQ;AACZ,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,MAAA,CAAO,UAAA,CAAW,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAC9C,MAAA,MAAA,CAAO,MAAA,EAAO;AAAA,IAChB;AACA,IAAA,IAAI,uBAAuB,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,EAAA,CAAG,QAAQ,EAAE,CAAA;AAAA,EACtD;AAEA,EAAA,SAAA,CAAU,gBAAA,CAAiB,YAAY,YAAY,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,SAAA,CAAU,KAAA,EAAM;AAChB,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,GACF;AACF","file":"popout.js","sourcesContent":["import type { WindowManager } from '../core/types'\n\ninterface DocumentPictureInPictureApi {\n requestWindow(options?: {\n width?: number\n height?: number\n disallowReturnToOpener?: boolean\n }): Promise<Window>\n}\n\ndeclare global {\n interface Window {\n documentPictureInPicture?: DocumentPictureInPictureApi\n }\n}\n\nexport interface PopoutOptions {\n width?: number\n height?: number\n copyStyles?: boolean\n minimizeWhilePopped?: boolean\n}\n\nexport interface PopoutHandle {\n pipWindow: Window\n close(): void\n}\n\nexport function isPopoutSupported(): boolean {\n return typeof window !== 'undefined' && window.documentPictureInPicture !== undefined\n}\n\nfunction copyStylesInto(pipWindow: Window, source: Document): void {\n for (const sheet of Array.from(source.styleSheets)) {\n const owner = sheet.ownerNode\n if (!owner) continue\n try {\n const rules = Array.from(sheet.cssRules)\n .map((rule) => rule.cssText)\n .join('\\n')\n const style = pipWindow.document.createElement('style')\n style.textContent = rules\n pipWindow.document.head.append(style)\n } catch {\n if (owner instanceof HTMLLinkElement && owner.href) {\n const link = pipWindow.document.createElement('link')\n link.rel = 'stylesheet'\n link.href = owner.href\n pipWindow.document.head.append(link)\n }\n }\n }\n}\n\nexport async function popout(\n wm: WindowManager,\n id: string,\n content: HTMLElement,\n options: PopoutOptions = {},\n): Promise<PopoutHandle> {\n const win = wm.get(id)\n if (!win) throw new Error(`wmkit: cannot pop out unknown window \"${id}\"`)\n const api = typeof window !== 'undefined' ? window.documentPictureInPicture : undefined\n if (!api) throw new Error('wmkit: Document Picture-in-Picture is not supported in this browser')\n\n const pipWindow = await api.requestWindow({\n width: options.width ?? Math.round(win.bounds.width),\n height: options.height ?? Math.round(win.bounds.height),\n })\n\n if (options.copyStyles !== false) copyStylesInto(pipWindow, content.ownerDocument)\n\n const parent = content.parentNode\n const marker = content.ownerDocument.createComment('wmkit-popout')\n parent?.insertBefore(marker, content)\n pipWindow.document.body.append(content)\n pipWindow.document.title = win.title\n\n const minimizeWhilePopped = options.minimizeWhilePopped !== false\n if (minimizeWhilePopped) wm.minimize(id)\n\n let closed = false\n function handleReturn(): void {\n if (closed) return\n closed = true\n if (marker.parentNode) {\n marker.parentNode.insertBefore(content, marker)\n marker.remove()\n }\n if (minimizeWhilePopped && wm.get(id)) wm.restore(id)\n }\n\n pipWindow.addEventListener('pagehide', handleReturn)\n\n return {\n pipWindow,\n close() {\n pipWindow.close()\n handleReturn()\n },\n }\n}\n"]}
package/dist/react.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkTXINVEK3_cjs = require('./chunk-TXINVEK3.cjs');
3
+ var chunkB35DANTX_cjs = require('./chunk-B35DANTX.cjs');
4
4
  var react = require('react');
5
5
 
6
6
  function useWindowManager(options) {
7
- const [wm] = react.useState(() => chunkTXINVEK3_cjs.createWindowManager(options));
7
+ const [wm] = react.useState(() => chunkB35DANTX_cjs.createWindowManager(options));
8
8
  react.useEffect(() => () => wm.destroy(), [wm]);
9
9
  return wm;
10
10
  }
@@ -17,7 +17,7 @@ function useWmWindow(wm, id) {
17
17
  }
18
18
  function useDesktop(wm, options) {
19
19
  const optionsRef = react.useRef(options);
20
- const binder = react.useMemo(() => chunkTXINVEK3_cjs.createDesktopBinder(wm, optionsRef.current), [wm]);
20
+ const binder = react.useMemo(() => chunkB35DANTX_cjs.createDesktopBinder(wm, optionsRef.current), [wm]);
21
21
  const cleanupRef = react.useRef(null);
22
22
  const ref = react.useCallback(
23
23
  (node) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.ts"],"names":["useState","createWindowManager","useEffect","useSyncExternalStore","useCallback","useRef","useMemo","createDesktopBinder"],"mappings":";;;;;AAaO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,CAAC,EAAE,CAAA,GAAIA,eAAS,MAAMC,qCAAA,CAAoB,OAAO,CAAC,CAAA;AACxD,EAAAC,eAAA,CAAU,MAAM,MAAM,EAAA,CAAG,SAAQ,EAAG,CAAC,EAAE,CAAC,CAAA;AACxC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,OAAOC,2BAAqB,EAAA,CAAG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,GAAG,QAAQ,CAAA;AACpE;AAEO,SAAS,WAAA,CAAY,IAAmB,EAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAcC,iBAAA,CAAY,MAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAC1D,EAAA,OAAOD,0BAAA,CAAqB,EAAA,CAAG,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AACpE;AAQO,SAAS,UAAA,CAAW,IAAmB,OAAA,EAA4C;AACxF,EAAA,MAAM,UAAA,GAAaE,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAASC,aAAA,CAAQ,MAAMC,qCAAA,CAAoB,EAAA,EAAI,WAAW,OAAO,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAC9E,EAAA,MAAM,UAAA,GAAaF,aAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,GAAA,GAAMD,iBAAA;AAAA,IACV,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAW;AACtD;AAEO,SAAS,cAAA,CACd,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAaC,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAaA,aAA4B,IAAI,CAAA;AACnD,EAAA,OAAOD,iBAAA;AAAA,IACL,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,UAAU,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,WAAW,OAAO,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,GACb;AACF","file":"react.cjs","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport { createWindowManager } from './core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from './core/types'\nimport {\n createDesktopBinder,\n type DesktopBinder,\n type DesktopController,\n type DesktopOptions,\n type WindowAttachOptions,\n} from './dom/controller'\n\nexport type ElementRef = (node: HTMLElement | null) => void\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const [wm] = useState(() => createWindowManager(options))\n useEffect(() => () => wm.destroy(), [wm])\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ManagerState {\n return useSyncExternalStore(wm.subscribe, wm.getState, wm.getState)\n}\n\nexport function useWmWindow(wm: WindowManager, id: string): WindowState | undefined {\n const getSnapshot = useCallback(() => wm.get(id), [wm, id])\n return useSyncExternalStore(wm.subscribe, getSnapshot, getSnapshot)\n}\n\nexport interface UseDesktopResult {\n ref: ElementRef\n binder: DesktopBinder\n controller(): DesktopController | null\n}\n\nexport function useDesktop(wm: WindowManager, options?: DesktopOptions): UseDesktopResult {\n const optionsRef = useRef(options)\n const binder = useMemo(() => createDesktopBinder(wm, optionsRef.current), [wm])\n const cleanupRef = useRef<(() => void) | null>(null)\n const ref = useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindDesktop(node)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder],\n )\n return { ref, binder, controller: binder.controller }\n}\n\nexport function useWmWindowRef(\n binder: DesktopBinder,\n id: string,\n options?: WindowAttachOptions,\n): ElementRef {\n const optionsRef = useRef(options)\n const cleanupRef = useRef<(() => void) | null>(null)\n return useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindWindow(id, node, optionsRef.current)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder, id],\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/react.ts"],"names":["useState","createWindowManager","useEffect","useSyncExternalStore","useCallback","useRef","useMemo","createDesktopBinder"],"mappings":";;;;;AAQO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,CAAC,EAAE,CAAA,GAAIA,eAAS,MAAMC,qCAAA,CAAoB,OAAO,CAAC,CAAA;AACxD,EAAAC,eAAA,CAAU,MAAM,MAAM,EAAA,CAAG,SAAQ,EAAG,CAAC,EAAE,CAAC,CAAA;AACxC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,OAAOC,2BAAqB,EAAA,CAAG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,GAAG,QAAQ,CAAA;AACpE;AAEO,SAAS,WAAA,CAAY,IAAmB,EAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAcC,iBAAA,CAAY,MAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAC1D,EAAA,OAAOD,0BAAA,CAAqB,EAAA,CAAG,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AACpE;AAQO,SAAS,UAAA,CAAW,IAAmB,OAAA,EAA4C;AACxF,EAAA,MAAM,UAAA,GAAaE,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAASC,aAAA,CAAQ,MAAMC,qCAAA,CAAoB,EAAA,EAAI,WAAW,OAAO,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAC9E,EAAA,MAAM,UAAA,GAAaF,aAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,GAAA,GAAMD,iBAAA;AAAA,IACV,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAW;AACtD;AAEO,SAAS,cAAA,CACd,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAaC,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAaA,aAA4B,IAAI,CAAA;AACnD,EAAA,OAAOD,iBAAA;AAAA,IACL,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,UAAU,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,WAAW,OAAO,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,GACb;AACF","file":"react.cjs","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopController, DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nexport type ElementRef = (node: HTMLElement | null) => void\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const [wm] = useState(() => createWindowManager(options))\n useEffect(() => () => wm.destroy(), [wm])\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ManagerState {\n return useSyncExternalStore(wm.subscribe, wm.getState, wm.getState)\n}\n\nexport function useWmWindow(wm: WindowManager, id: string): WindowState | undefined {\n const getSnapshot = useCallback(() => wm.get(id), [wm, id])\n return useSyncExternalStore(wm.subscribe, getSnapshot, getSnapshot)\n}\n\nexport interface UseDesktopResult {\n ref: ElementRef\n binder: DesktopBinder\n controller(): DesktopController | null\n}\n\nexport function useDesktop(wm: WindowManager, options?: DesktopOptions): UseDesktopResult {\n const optionsRef = useRef(options)\n const binder = useMemo(() => createDesktopBinder(wm, optionsRef.current), [wm])\n const cleanupRef = useRef<(() => void) | null>(null)\n const ref = useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindDesktop(node)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder],\n )\n return { ref, binder, controller: binder.controller }\n}\n\nexport function useWmWindowRef(\n binder: DesktopBinder,\n id: string,\n options?: WindowAttachOptions,\n): ElementRef {\n const optionsRef = useRef(options)\n const cleanupRef = useRef<(() => void) | null>(null)\n return useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindWindow(id, node, optionsRef.current)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder, id],\n )\n}\n"]}
package/dist/react.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { W as WindowManager, M as ManagerOptions, b as ManagerState, i as WindowState } from './types-BYx7gCuT.cjs';
2
- import { D as DesktopBinder, b as DesktopController, d as DesktopOptions, W as WindowAttachOptions } from './controller-BfUF1k04.cjs';
1
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.cjs';
2
+ import { D as DesktopBinder, b as DesktopController, a as DesktopOptions, W as WindowAttachOptions } from './binder-Dq_AZRbo.cjs';
3
3
 
4
4
  type ElementRef = (node: HTMLElement | null) => void;
5
5
  declare function useWindowManager(options?: ManagerOptions): WindowManager;
package/dist/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { W as WindowManager, M as ManagerOptions, b as ManagerState, i as WindowState } from './types-BYx7gCuT.js';
2
- import { D as DesktopBinder, b as DesktopController, d as DesktopOptions, W as WindowAttachOptions } from './controller-1uedRvQw.js';
1
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.js';
2
+ import { D as DesktopBinder, b as DesktopController, a as DesktopOptions, W as WindowAttachOptions } from './binder-0Oku22Nc.js';
3
3
 
4
4
  type ElementRef = (node: HTMLElement | null) => void;
5
5
  declare function useWindowManager(options?: ManagerOptions): WindowManager;
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createWindowManager, createDesktopBinder } from './chunk-N5KNWRKU.js';
1
+ import { createWindowManager, createDesktopBinder } from './chunk-YCHJXSTC.js';
2
2
  import { useState, useEffect, useSyncExternalStore, useCallback, useRef, useMemo } from 'react';
3
3
 
4
4
  function useWindowManager(options) {
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.ts"],"names":[],"mappings":";;;AAaO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,CAAC,EAAE,CAAA,GAAI,SAAS,MAAM,mBAAA,CAAoB,OAAO,CAAC,CAAA;AACxD,EAAA,SAAA,CAAU,MAAM,MAAM,EAAA,CAAG,SAAQ,EAAG,CAAC,EAAE,CAAC,CAAA;AACxC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,OAAO,qBAAqB,EAAA,CAAG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,GAAG,QAAQ,CAAA;AACpE;AAEO,SAAS,WAAA,CAAY,IAAmB,EAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,MAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAC1D,EAAA,OAAO,oBAAA,CAAqB,EAAA,CAAG,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AACpE;AAQO,SAAS,UAAA,CAAW,IAAmB,OAAA,EAA4C;AACxF,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAM,mBAAA,CAAoB,EAAA,EAAI,WAAW,OAAO,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAC9E,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAW;AACtD;AAEO,SAAS,cAAA,CACd,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,OAAO,WAAA;AAAA,IACL,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,UAAU,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,WAAW,OAAO,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,GACb;AACF","file":"react.js","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport { createWindowManager } from './core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from './core/types'\nimport {\n createDesktopBinder,\n type DesktopBinder,\n type DesktopController,\n type DesktopOptions,\n type WindowAttachOptions,\n} from './dom/controller'\n\nexport type ElementRef = (node: HTMLElement | null) => void\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const [wm] = useState(() => createWindowManager(options))\n useEffect(() => () => wm.destroy(), [wm])\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ManagerState {\n return useSyncExternalStore(wm.subscribe, wm.getState, wm.getState)\n}\n\nexport function useWmWindow(wm: WindowManager, id: string): WindowState | undefined {\n const getSnapshot = useCallback(() => wm.get(id), [wm, id])\n return useSyncExternalStore(wm.subscribe, getSnapshot, getSnapshot)\n}\n\nexport interface UseDesktopResult {\n ref: ElementRef\n binder: DesktopBinder\n controller(): DesktopController | null\n}\n\nexport function useDesktop(wm: WindowManager, options?: DesktopOptions): UseDesktopResult {\n const optionsRef = useRef(options)\n const binder = useMemo(() => createDesktopBinder(wm, optionsRef.current), [wm])\n const cleanupRef = useRef<(() => void) | null>(null)\n const ref = useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindDesktop(node)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder],\n )\n return { ref, binder, controller: binder.controller }\n}\n\nexport function useWmWindowRef(\n binder: DesktopBinder,\n id: string,\n options?: WindowAttachOptions,\n): ElementRef {\n const optionsRef = useRef(options)\n const cleanupRef = useRef<(() => void) | null>(null)\n return useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindWindow(id, node, optionsRef.current)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder, id],\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/react.ts"],"names":[],"mappings":";;;AAQO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,CAAC,EAAE,CAAA,GAAI,SAAS,MAAM,mBAAA,CAAoB,OAAO,CAAC,CAAA;AACxD,EAAA,SAAA,CAAU,MAAM,MAAM,EAAA,CAAG,SAAQ,EAAG,CAAC,EAAE,CAAC,CAAA;AACxC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,OAAO,qBAAqB,EAAA,CAAG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,GAAG,QAAQ,CAAA;AACpE;AAEO,SAAS,WAAA,CAAY,IAAmB,EAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,MAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAC1D,EAAA,OAAO,oBAAA,CAAqB,EAAA,CAAG,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AACpE;AAQO,SAAS,UAAA,CAAW,IAAmB,OAAA,EAA4C;AACxF,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAM,mBAAA,CAAoB,EAAA,EAAI,WAAW,OAAO,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAC9E,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAW;AACtD;AAEO,SAAS,cAAA,CACd,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,OAAO,WAAA;AAAA,IACL,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,UAAU,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,WAAW,OAAO,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,GACb;AACF","file":"react.js","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopController, DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nexport type ElementRef = (node: HTMLElement | null) => void\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const [wm] = useState(() => createWindowManager(options))\n useEffect(() => () => wm.destroy(), [wm])\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ManagerState {\n return useSyncExternalStore(wm.subscribe, wm.getState, wm.getState)\n}\n\nexport function useWmWindow(wm: WindowManager, id: string): WindowState | undefined {\n const getSnapshot = useCallback(() => wm.get(id), [wm, id])\n return useSyncExternalStore(wm.subscribe, getSnapshot, getSnapshot)\n}\n\nexport interface UseDesktopResult {\n ref: ElementRef\n binder: DesktopBinder\n controller(): DesktopController | null\n}\n\nexport function useDesktop(wm: WindowManager, options?: DesktopOptions): UseDesktopResult {\n const optionsRef = useRef(options)\n const binder = useMemo(() => createDesktopBinder(wm, optionsRef.current), [wm])\n const cleanupRef = useRef<(() => void) | null>(null)\n const ref = useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindDesktop(node)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder],\n )\n return { ref, binder, controller: binder.controller }\n}\n\nexport function useWmWindowRef(\n binder: DesktopBinder,\n id: string,\n options?: WindowAttachOptions,\n): ElementRef {\n const optionsRef = useRef(options)\n const cleanupRef = useRef<(() => void) | null>(null)\n return useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindWindow(id, node, optionsRef.current)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder, id],\n )\n}\n"]}
package/dist/solid.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkTXINVEK3_cjs = require('./chunk-TXINVEK3.cjs');
3
+ var chunkB35DANTX_cjs = require('./chunk-B35DANTX.cjs');
4
4
  var solidJs = require('solid-js');
5
5
 
6
6
  function disposeWithOwner(dispose) {
7
7
  if (solidJs.getOwner()) solidJs.onCleanup(dispose);
8
8
  }
9
9
  function useWindowManager(options) {
10
- const wm = chunkTXINVEK3_cjs.createWindowManager(options);
10
+ const wm = chunkB35DANTX_cjs.createWindowManager(options);
11
11
  disposeWithOwner(() => wm.destroy());
12
12
  return wm;
13
13
  }
@@ -21,7 +21,7 @@ function useWmWindow(wm, id) {
21
21
  return () => state().windows[typeof id === "function" ? id() : id];
22
22
  }
23
23
  function createDesktop(wm, options) {
24
- const binder = chunkTXINVEK3_cjs.createDesktopBinder(wm, options);
24
+ const binder = chunkB35DANTX_cjs.createDesktopBinder(wm, options);
25
25
  return {
26
26
  binder,
27
27
  desktop(element) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/solid.ts"],"names":["getOwner","onCleanup","createWindowManager","createSignal","createDesktopBinder","options"],"mappings":";;;;;AAUA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAIA,gBAAA,EAAS,EAAGC,iBAAA,CAAU,OAAO,CAAA;AACnC;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAKC,sCAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA2C;AACpE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAIC,oBAAA,CAAa,EAAA,CAAG,UAAU,CAAA;AACpD,EAAA,gBAAA,CAAiB,GAAG,SAAA,CAAU,CAAC,SAAS,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACvD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACmC;AACnC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAO,MAAM,OAAM,CAAE,OAAA,CAAQ,OAAO,EAAA,KAAO,UAAA,GAAa,EAAA,EAAG,GAAI,EAAE,CAAA;AACnE;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAwC;AACvF,EAAA,MAAM,MAAA,GAASC,qCAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AACf,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACzC,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,MAAA,CAAO,IAAIC,QAAAA,EAAS;AAClB,MAAA,OAAO,CAAC,OAAA,KAAY;AAClB,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,SAASA,QAAO,CAAA;AACrD,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,MACzB,CAAA;AAAA,IACF;AAAA,GACF;AACF","file":"solid.cjs","sourcesContent":["import { type Accessor, createSignal, getOwner, onCleanup } from 'solid-js'\nimport { createWindowManager } from './core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from './core/types'\nimport {\n createDesktopBinder,\n type DesktopBinder,\n type DesktopOptions,\n type WindowAttachOptions,\n} from './dom/controller'\n\nfunction disposeWithOwner(dispose: () => void): void {\n if (getOwner()) onCleanup(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithOwner(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): Accessor<ManagerState> {\n const [state, setState] = createSignal(wm.getState())\n disposeWithOwner(wm.subscribe((next) => setState(next)))\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: string | Accessor<string>,\n): Accessor<WindowState | undefined> {\n const state = useWmState(wm)\n return () => state().windows[typeof id === 'function' ? id() : id]\n}\n\nexport interface SolidDesktop {\n binder: DesktopBinder\n desktop(element: HTMLElement): void\n window(id: string, options?: WindowAttachOptions): (element: HTMLElement) => void\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SolidDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(element) {\n const unbind = binder.bindDesktop(element)\n disposeWithOwner(unbind)\n },\n window(id, options) {\n return (element) => {\n const unbind = binder.bindWindow(id, element, options)\n disposeWithOwner(unbind)\n }\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/solid.ts"],"names":["getOwner","onCleanup","createWindowManager","createSignal","createDesktopBinder","options"],"mappings":";;;;;AAMA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAIA,gBAAA,EAAS,EAAGC,iBAAA,CAAU,OAAO,CAAA;AACnC;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAKC,sCAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA2C;AACpE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAIC,oBAAA,CAAa,EAAA,CAAG,UAAU,CAAA;AACpD,EAAA,gBAAA,CAAiB,GAAG,SAAA,CAAU,CAAC,SAAS,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACvD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACmC;AACnC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAO,MAAM,OAAM,CAAE,OAAA,CAAQ,OAAO,EAAA,KAAO,UAAA,GAAa,EAAA,EAAG,GAAI,EAAE,CAAA;AACnE;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAwC;AACvF,EAAA,MAAM,MAAA,GAASC,qCAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AACf,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACzC,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,MAAA,CAAO,IAAIC,QAAAA,EAAS;AAClB,MAAA,OAAO,CAAC,OAAA,KAAY;AAClB,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,SAASA,QAAO,CAAA;AACrD,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,MACzB,CAAA;AAAA,IACF;AAAA,GACF;AACF","file":"solid.cjs","sourcesContent":["import { type Accessor, createSignal, getOwner, onCleanup } from 'solid-js'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nfunction disposeWithOwner(dispose: () => void): void {\n if (getOwner()) onCleanup(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithOwner(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): Accessor<ManagerState> {\n const [state, setState] = createSignal(wm.getState())\n disposeWithOwner(wm.subscribe((next) => setState(next)))\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: string | Accessor<string>,\n): Accessor<WindowState | undefined> {\n const state = useWmState(wm)\n return () => state().windows[typeof id === 'function' ? id() : id]\n}\n\nexport interface SolidDesktop {\n binder: DesktopBinder\n desktop(element: HTMLElement): void\n window(id: string, options?: WindowAttachOptions): (element: HTMLElement) => void\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SolidDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(element) {\n const unbind = binder.bindDesktop(element)\n disposeWithOwner(unbind)\n },\n window(id, options) {\n return (element) => {\n const unbind = binder.bindWindow(id, element, options)\n disposeWithOwner(unbind)\n }\n },\n }\n}\n"]}
package/dist/solid.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Accessor } from 'solid-js';
2
- import { W as WindowManager, M as ManagerOptions, b as ManagerState, i as WindowState } from './types-BYx7gCuT.cjs';
3
- import { D as DesktopBinder, W as WindowAttachOptions, d as DesktopOptions } from './controller-BfUF1k04.cjs';
2
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.cjs';
3
+ import { D as DesktopBinder, W as WindowAttachOptions, a as DesktopOptions } from './binder-Dq_AZRbo.cjs';
4
4
 
5
5
  declare function useWindowManager(options?: ManagerOptions): WindowManager;
6
6
  declare function useWmState(wm: WindowManager): Accessor<ManagerState>;
package/dist/solid.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Accessor } from 'solid-js';
2
- import { W as WindowManager, M as ManagerOptions, b as ManagerState, i as WindowState } from './types-BYx7gCuT.js';
3
- import { D as DesktopBinder, W as WindowAttachOptions, d as DesktopOptions } from './controller-1uedRvQw.js';
2
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.js';
3
+ import { D as DesktopBinder, W as WindowAttachOptions, a as DesktopOptions } from './binder-0Oku22Nc.js';
4
4
 
5
5
  declare function useWindowManager(options?: ManagerOptions): WindowManager;
6
6
  declare function useWmState(wm: WindowManager): Accessor<ManagerState>;
package/dist/solid.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createWindowManager, createDesktopBinder } from './chunk-N5KNWRKU.js';
1
+ import { createWindowManager, createDesktopBinder } from './chunk-YCHJXSTC.js';
2
2
  import { createSignal, getOwner, onCleanup } from 'solid-js';
3
3
 
4
4
  function disposeWithOwner(dispose) {
package/dist/solid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/solid.ts"],"names":["options"],"mappings":";;;AAUA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAI,QAAA,EAAS,EAAG,SAAA,CAAU,OAAO,CAAA;AACnC;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAK,oBAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA2C;AACpE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,YAAA,CAAa,EAAA,CAAG,UAAU,CAAA;AACpD,EAAA,gBAAA,CAAiB,GAAG,SAAA,CAAU,CAAC,SAAS,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACvD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACmC;AACnC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAO,MAAM,OAAM,CAAE,OAAA,CAAQ,OAAO,EAAA,KAAO,UAAA,GAAa,EAAA,EAAG,GAAI,EAAE,CAAA;AACnE;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAwC;AACvF,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AACf,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACzC,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,MAAA,CAAO,IAAIA,QAAAA,EAAS;AAClB,MAAA,OAAO,CAAC,OAAA,KAAY;AAClB,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,SAASA,QAAO,CAAA;AACrD,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,MACzB,CAAA;AAAA,IACF;AAAA,GACF;AACF","file":"solid.js","sourcesContent":["import { type Accessor, createSignal, getOwner, onCleanup } from 'solid-js'\nimport { createWindowManager } from './core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from './core/types'\nimport {\n createDesktopBinder,\n type DesktopBinder,\n type DesktopOptions,\n type WindowAttachOptions,\n} from './dom/controller'\n\nfunction disposeWithOwner(dispose: () => void): void {\n if (getOwner()) onCleanup(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithOwner(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): Accessor<ManagerState> {\n const [state, setState] = createSignal(wm.getState())\n disposeWithOwner(wm.subscribe((next) => setState(next)))\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: string | Accessor<string>,\n): Accessor<WindowState | undefined> {\n const state = useWmState(wm)\n return () => state().windows[typeof id === 'function' ? id() : id]\n}\n\nexport interface SolidDesktop {\n binder: DesktopBinder\n desktop(element: HTMLElement): void\n window(id: string, options?: WindowAttachOptions): (element: HTMLElement) => void\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SolidDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(element) {\n const unbind = binder.bindDesktop(element)\n disposeWithOwner(unbind)\n },\n window(id, options) {\n return (element) => {\n const unbind = binder.bindWindow(id, element, options)\n disposeWithOwner(unbind)\n }\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/solid.ts"],"names":["options"],"mappings":";;;AAMA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAI,QAAA,EAAS,EAAG,SAAA,CAAU,OAAO,CAAA;AACnC;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAK,oBAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA2C;AACpE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,YAAA,CAAa,EAAA,CAAG,UAAU,CAAA;AACpD,EAAA,gBAAA,CAAiB,GAAG,SAAA,CAAU,CAAC,SAAS,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACvD,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACmC;AACnC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAO,MAAM,OAAM,CAAE,OAAA,CAAQ,OAAO,EAAA,KAAO,UAAA,GAAa,EAAA,EAAG,GAAI,EAAE,CAAA;AACnE;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAwC;AACvF,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AACf,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACzC,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,MAAA,CAAO,IAAIA,QAAAA,EAAS;AAClB,MAAA,OAAO,CAAC,OAAA,KAAY;AAClB,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,SAASA,QAAO,CAAA;AACrD,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,MACzB,CAAA;AAAA,IACF;AAAA,GACF;AACF","file":"solid.js","sourcesContent":["import { type Accessor, createSignal, getOwner, onCleanup } from 'solid-js'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nfunction disposeWithOwner(dispose: () => void): void {\n if (getOwner()) onCleanup(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithOwner(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): Accessor<ManagerState> {\n const [state, setState] = createSignal(wm.getState())\n disposeWithOwner(wm.subscribe((next) => setState(next)))\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: string | Accessor<string>,\n): Accessor<WindowState | undefined> {\n const state = useWmState(wm)\n return () => state().windows[typeof id === 'function' ? id() : id]\n}\n\nexport interface SolidDesktop {\n binder: DesktopBinder\n desktop(element: HTMLElement): void\n window(id: string, options?: WindowAttachOptions): (element: HTMLElement) => void\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SolidDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(element) {\n const unbind = binder.bindDesktop(element)\n disposeWithOwner(unbind)\n },\n window(id, options) {\n return (element) => {\n const unbind = binder.bindWindow(id, element, options)\n disposeWithOwner(unbind)\n }\n },\n }\n}\n"]}
package/dist/svelte.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkTXINVEK3_cjs = require('./chunk-TXINVEK3.cjs');
3
+ var chunkB35DANTX_cjs = require('./chunk-B35DANTX.cjs');
4
4
 
5
- // src/svelte.ts
5
+ // src/adapters/svelte.ts
6
6
  function createManager(options) {
7
- return chunkTXINVEK3_cjs.createWindowManager(options);
7
+ return chunkB35DANTX_cjs.createWindowManager(options);
8
8
  }
9
9
  function wmStore(wm) {
10
10
  return {
@@ -30,7 +30,7 @@ function wmWindowStore(wm, id) {
30
30
  };
31
31
  }
32
32
  function createDesktop(wm, options) {
33
- const binder = chunkTXINVEK3_cjs.createDesktopBinder(wm, options);
33
+ const binder = chunkB35DANTX_cjs.createDesktopBinder(wm, options);
34
34
  return {
35
35
  binder,
36
36
  desktop(node) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/svelte.ts"],"names":["createWindowManager","createDesktopBinder"],"mappings":";;;;;AAsBO,SAAS,cAAc,OAAA,EAAyC;AACrE,EAAA,OAAOA,sCAAoB,OAAO,CAAA;AACpC;AAEO,SAAS,QAAQ,EAAA,EAAgD;AACtE,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,UAAU,CAAA;AACjB,MAAA,OAAO,EAAA,CAAG,UAAU,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAEO,SAAS,aAAA,CACd,IACA,EAAA,EACwC;AACxC,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAE,CAAC,CAAA;AACd,MAAA,IAAI,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACpB,MAAA,OAAO,EAAA,CAAG,UAAU,MAAM;AACxB,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACtB,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,IAAA,GAAO,IAAA;AACP,UAAA,GAAA,CAAI,IAAI,CAAA;AAAA,QACV;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAyC;AACxF,EAAA,MAAM,MAAA,GAASC,qCAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,IAAA,EAAM;AACZ,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AACtC,MAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,IAC3B,CAAA;AAAA,IACA,MAAA,CAAO,MAAM,MAAA,EAAQ;AACnB,MAAA,IAAI,SAAS,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,MAAM,MAAM,CAAA;AACtD,MAAA,OAAO;AAAA,QACL,OAAO,IAAA,EAAM;AACX,UAAA,MAAA,EAAO;AACP,UAAA,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA,QAChD,CAAA;AAAA,QACA,OAAA,GAAU;AACR,UAAA,MAAA,EAAO;AAAA,QACT;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF","file":"svelte.cjs","sourcesContent":["import { createWindowManager } from './core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from './core/types'\nimport {\n createDesktopBinder,\n type DesktopBinder,\n type DesktopOptions,\n type WindowAttachOptions,\n} from './dom/controller'\n\nexport interface ReadableStore<T> {\n subscribe(run: (value: T) => void): () => void\n}\n\nexport interface ActionResult {\n update?(params: WindowActionParams): void\n destroy(): void\n}\n\nexport interface WindowActionParams extends WindowAttachOptions {\n id: string\n}\n\nexport function createManager(options?: ManagerOptions): WindowManager {\n return createWindowManager(options)\n}\n\nexport function wmStore(wm: WindowManager): ReadableStore<ManagerState> {\n return {\n subscribe(run) {\n run(wm.getState())\n return wm.subscribe(run)\n },\n }\n}\n\nexport function wmWindowStore(\n wm: WindowManager,\n id: string,\n): ReadableStore<WindowState | undefined> {\n return {\n subscribe(run) {\n run(wm.get(id))\n let last = wm.get(id)\n return wm.subscribe(() => {\n const next = wm.get(id)\n if (next !== last) {\n last = next\n run(next)\n }\n })\n },\n }\n}\n\nexport interface SvelteDesktop {\n binder: DesktopBinder\n desktop(node: HTMLElement): ActionResult\n window(node: HTMLElement, params: WindowActionParams): ActionResult\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SvelteDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(node) {\n const unbind = binder.bindDesktop(node)\n return { destroy: unbind }\n },\n window(node, params) {\n let unbind = binder.bindWindow(params.id, node, params)\n return {\n update(next) {\n unbind()\n unbind = binder.bindWindow(next.id, node, next)\n },\n destroy() {\n unbind()\n },\n }\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/svelte.ts"],"names":["createWindowManager","createDesktopBinder"],"mappings":";;;;;AAkBO,SAAS,cAAc,OAAA,EAAyC;AACrE,EAAA,OAAOA,sCAAoB,OAAO,CAAA;AACpC;AAEO,SAAS,QAAQ,EAAA,EAAgD;AACtE,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,UAAU,CAAA;AACjB,MAAA,OAAO,EAAA,CAAG,UAAU,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAEO,SAAS,aAAA,CACd,IACA,EAAA,EACwC;AACxC,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAE,CAAC,CAAA;AACd,MAAA,IAAI,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACpB,MAAA,OAAO,EAAA,CAAG,UAAU,MAAM;AACxB,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACtB,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,IAAA,GAAO,IAAA;AACP,UAAA,GAAA,CAAI,IAAI,CAAA;AAAA,QACV;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAyC;AACxF,EAAA,MAAM,MAAA,GAASC,qCAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,IAAA,EAAM;AACZ,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AACtC,MAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,IAC3B,CAAA;AAAA,IACA,MAAA,CAAO,MAAM,MAAA,EAAQ;AACnB,MAAA,IAAI,SAAS,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,MAAM,MAAM,CAAA;AACtD,MAAA,OAAO;AAAA,QACL,OAAO,IAAA,EAAM;AACX,UAAA,MAAA,EAAO;AACP,UAAA,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA,QAChD,CAAA;AAAA,QACA,OAAA,GAAU;AACR,UAAA,MAAA,EAAO;AAAA,QACT;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF","file":"svelte.cjs","sourcesContent":["import { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nexport interface ReadableStore<T> {\n subscribe(run: (value: T) => void): () => void\n}\n\nexport interface ActionResult {\n update?(params: WindowActionParams): void\n destroy(): void\n}\n\nexport interface WindowActionParams extends WindowAttachOptions {\n id: string\n}\n\nexport function createManager(options?: ManagerOptions): WindowManager {\n return createWindowManager(options)\n}\n\nexport function wmStore(wm: WindowManager): ReadableStore<ManagerState> {\n return {\n subscribe(run) {\n run(wm.getState())\n return wm.subscribe(run)\n },\n }\n}\n\nexport function wmWindowStore(\n wm: WindowManager,\n id: string,\n): ReadableStore<WindowState | undefined> {\n return {\n subscribe(run) {\n run(wm.get(id))\n let last = wm.get(id)\n return wm.subscribe(() => {\n const next = wm.get(id)\n if (next !== last) {\n last = next\n run(next)\n }\n })\n },\n }\n}\n\nexport interface SvelteDesktop {\n binder: DesktopBinder\n desktop(node: HTMLElement): ActionResult\n window(node: HTMLElement, params: WindowActionParams): ActionResult\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SvelteDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(node) {\n const unbind = binder.bindDesktop(node)\n return { destroy: unbind }\n },\n window(node, params) {\n let unbind = binder.bindWindow(params.id, node, params)\n return {\n update(next) {\n unbind()\n unbind = binder.bindWindow(next.id, node, next)\n },\n destroy() {\n unbind()\n },\n }\n },\n }\n}\n"]}
package/dist/svelte.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { W as WindowManager, M as ManagerOptions, b as ManagerState, i as WindowState } from './types-BYx7gCuT.cjs';
2
- import { W as WindowAttachOptions, D as DesktopBinder, d as DesktopOptions } from './controller-BfUF1k04.cjs';
1
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.cjs';
2
+ import { W as WindowAttachOptions, D as DesktopBinder, a as DesktopOptions } from './binder-Dq_AZRbo.cjs';
3
3
 
4
4
  interface ReadableStore<T> {
5
5
  subscribe(run: (value: T) => void): () => void;
package/dist/svelte.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { W as WindowManager, M as ManagerOptions, b as ManagerState, i as WindowState } from './types-BYx7gCuT.js';
2
- import { W as WindowAttachOptions, D as DesktopBinder, d as DesktopOptions } from './controller-1uedRvQw.js';
1
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.js';
2
+ import { W as WindowAttachOptions, D as DesktopBinder, a as DesktopOptions } from './binder-0Oku22Nc.js';
3
3
 
4
4
  interface ReadableStore<T> {
5
5
  subscribe(run: (value: T) => void): () => void;
package/dist/svelte.js CHANGED
@@ -1,6 +1,6 @@
1
- import { createWindowManager, createDesktopBinder } from './chunk-N5KNWRKU.js';
1
+ import { createWindowManager, createDesktopBinder } from './chunk-YCHJXSTC.js';
2
2
 
3
- // src/svelte.ts
3
+ // src/adapters/svelte.ts
4
4
  function createManager(options) {
5
5
  return createWindowManager(options);
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/svelte.ts"],"names":[],"mappings":";;;AAsBO,SAAS,cAAc,OAAA,EAAyC;AACrE,EAAA,OAAO,oBAAoB,OAAO,CAAA;AACpC;AAEO,SAAS,QAAQ,EAAA,EAAgD;AACtE,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,UAAU,CAAA;AACjB,MAAA,OAAO,EAAA,CAAG,UAAU,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAEO,SAAS,aAAA,CACd,IACA,EAAA,EACwC;AACxC,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAE,CAAC,CAAA;AACd,MAAA,IAAI,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACpB,MAAA,OAAO,EAAA,CAAG,UAAU,MAAM;AACxB,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACtB,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,IAAA,GAAO,IAAA;AACP,UAAA,GAAA,CAAI,IAAI,CAAA;AAAA,QACV;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAyC;AACxF,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,IAAA,EAAM;AACZ,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AACtC,MAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,IAC3B,CAAA;AAAA,IACA,MAAA,CAAO,MAAM,MAAA,EAAQ;AACnB,MAAA,IAAI,SAAS,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,MAAM,MAAM,CAAA;AACtD,MAAA,OAAO;AAAA,QACL,OAAO,IAAA,EAAM;AACX,UAAA,MAAA,EAAO;AACP,UAAA,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA,QAChD,CAAA;AAAA,QACA,OAAA,GAAU;AACR,UAAA,MAAA,EAAO;AAAA,QACT;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF","file":"svelte.js","sourcesContent":["import { createWindowManager } from './core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from './core/types'\nimport {\n createDesktopBinder,\n type DesktopBinder,\n type DesktopOptions,\n type WindowAttachOptions,\n} from './dom/controller'\n\nexport interface ReadableStore<T> {\n subscribe(run: (value: T) => void): () => void\n}\n\nexport interface ActionResult {\n update?(params: WindowActionParams): void\n destroy(): void\n}\n\nexport interface WindowActionParams extends WindowAttachOptions {\n id: string\n}\n\nexport function createManager(options?: ManagerOptions): WindowManager {\n return createWindowManager(options)\n}\n\nexport function wmStore(wm: WindowManager): ReadableStore<ManagerState> {\n return {\n subscribe(run) {\n run(wm.getState())\n return wm.subscribe(run)\n },\n }\n}\n\nexport function wmWindowStore(\n wm: WindowManager,\n id: string,\n): ReadableStore<WindowState | undefined> {\n return {\n subscribe(run) {\n run(wm.get(id))\n let last = wm.get(id)\n return wm.subscribe(() => {\n const next = wm.get(id)\n if (next !== last) {\n last = next\n run(next)\n }\n })\n },\n }\n}\n\nexport interface SvelteDesktop {\n binder: DesktopBinder\n desktop(node: HTMLElement): ActionResult\n window(node: HTMLElement, params: WindowActionParams): ActionResult\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SvelteDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(node) {\n const unbind = binder.bindDesktop(node)\n return { destroy: unbind }\n },\n window(node, params) {\n let unbind = binder.bindWindow(params.id, node, params)\n return {\n update(next) {\n unbind()\n unbind = binder.bindWindow(next.id, node, next)\n },\n destroy() {\n unbind()\n },\n }\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/svelte.ts"],"names":[],"mappings":";;;AAkBO,SAAS,cAAc,OAAA,EAAyC;AACrE,EAAA,OAAO,oBAAoB,OAAO,CAAA;AACpC;AAEO,SAAS,QAAQ,EAAA,EAAgD;AACtE,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,UAAU,CAAA;AACjB,MAAA,OAAO,EAAA,CAAG,UAAU,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAEO,SAAS,aAAA,CACd,IACA,EAAA,EACwC;AACxC,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,EAAK;AACb,MAAA,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAE,CAAC,CAAA;AACd,MAAA,IAAI,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACpB,MAAA,OAAO,EAAA,CAAG,UAAU,MAAM;AACxB,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA;AACtB,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,IAAA,GAAO,IAAA;AACP,UAAA,GAAA,CAAI,IAAI,CAAA;AAAA,QACV;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAQO,SAAS,aAAA,CAAc,IAAmB,OAAA,EAAyC;AACxF,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,IAAA,EAAM;AACZ,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AACtC,MAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,IAC3B,CAAA;AAAA,IACA,MAAA,CAAO,MAAM,MAAA,EAAQ;AACnB,MAAA,IAAI,SAAS,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,MAAM,MAAM,CAAA;AACtD,MAAA,OAAO;AAAA,QACL,OAAO,IAAA,EAAM;AACX,UAAA,MAAA,EAAO;AACP,UAAA,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,CAAA;AAAA,QAChD,CAAA;AAAA,QACA,OAAA,GAAU;AACR,UAAA,MAAA,EAAO;AAAA,QACT;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF","file":"svelte.js","sourcesContent":["import { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nexport interface ReadableStore<T> {\n subscribe(run: (value: T) => void): () => void\n}\n\nexport interface ActionResult {\n update?(params: WindowActionParams): void\n destroy(): void\n}\n\nexport interface WindowActionParams extends WindowAttachOptions {\n id: string\n}\n\nexport function createManager(options?: ManagerOptions): WindowManager {\n return createWindowManager(options)\n}\n\nexport function wmStore(wm: WindowManager): ReadableStore<ManagerState> {\n return {\n subscribe(run) {\n run(wm.getState())\n return wm.subscribe(run)\n },\n }\n}\n\nexport function wmWindowStore(\n wm: WindowManager,\n id: string,\n): ReadableStore<WindowState | undefined> {\n return {\n subscribe(run) {\n run(wm.get(id))\n let last = wm.get(id)\n return wm.subscribe(() => {\n const next = wm.get(id)\n if (next !== last) {\n last = next\n run(next)\n }\n })\n },\n }\n}\n\nexport interface SvelteDesktop {\n binder: DesktopBinder\n desktop(node: HTMLElement): ActionResult\n window(node: HTMLElement, params: WindowActionParams): ActionResult\n}\n\nexport function createDesktop(wm: WindowManager, options?: DesktopOptions): SvelteDesktop {\n const binder = createDesktopBinder(wm, options)\n return {\n binder,\n desktop(node) {\n const unbind = binder.bindDesktop(node)\n return { destroy: unbind }\n },\n window(node, params) {\n let unbind = binder.bindWindow(params.id, node, params)\n return {\n update(next) {\n unbind()\n unbind = binder.bindWindow(next.id, node, next)\n },\n destroy() {\n unbind()\n },\n }\n },\n }\n}\n"]}
@@ -29,7 +29,6 @@
29
29
  box-shadow: var(--wm-shadow);
30
30
  outline: none;
31
31
  contain: layout style;
32
- will-change: transform;
33
32
  transition:
34
33
  transform var(--wm-transition),
35
34
  width var(--wm-transition),
@@ -0,0 +1,202 @@
1
+ [data-wm-desktop] {
2
+ --wm-radius: 12px;
3
+ --wm-bg: rgba(255, 255, 255, 0.78);
4
+ --wm-bg-focused: rgba(255, 255, 255, 0.94);
5
+ --wm-border: rgba(15, 23, 42, 0.1);
6
+ --wm-border-focused: rgba(15, 23, 42, 0.22);
7
+ --wm-shadow: 0 6px 22px rgba(15, 23, 42, 0.12);
8
+ --wm-shadow-focused: 0 16px 44px rgba(15, 23, 42, 0.2);
9
+ --wm-titlebar-bg: rgba(15, 23, 42, 0.03);
10
+ --wm-text: rgba(15, 23, 42, 0.92);
11
+ --wm-text-dim: rgba(15, 23, 42, 0.55);
12
+ --wm-accent: #4f46e5;
13
+ --wm-blur: 18px;
14
+ --wm-transition: 240ms cubic-bezier(0.32, 0.72, 0, 1);
15
+ position: relative;
16
+ overflow: hidden;
17
+ }
18
+
19
+ [data-wm-window] {
20
+ display: flex;
21
+ flex-direction: column;
22
+ box-sizing: border-box;
23
+ color: var(--wm-text);
24
+ background: var(--wm-bg);
25
+ -webkit-backdrop-filter: blur(var(--wm-blur)) saturate(1.2);
26
+ backdrop-filter: blur(var(--wm-blur)) saturate(1.2);
27
+ border: 1px solid var(--wm-border);
28
+ border-radius: var(--wm-radius);
29
+ box-shadow: var(--wm-shadow);
30
+ outline: none;
31
+ contain: layout style;
32
+ transition:
33
+ transform var(--wm-transition),
34
+ width var(--wm-transition),
35
+ height var(--wm-transition),
36
+ box-shadow 180ms ease,
37
+ border-color 180ms ease,
38
+ opacity 180ms ease;
39
+ animation: wm-window-in 220ms cubic-bezier(0.32, 0.72, 0, 1);
40
+ }
41
+
42
+ [data-wm-window][hidden] {
43
+ display: none;
44
+ }
45
+
46
+ [data-wm-window][data-wm-focused] {
47
+ background: var(--wm-bg-focused);
48
+ border-color: var(--wm-border-focused);
49
+ box-shadow: var(--wm-shadow-focused);
50
+ }
51
+
52
+ [data-wm-window][data-wm-dragging],
53
+ [data-wm-window][data-wm-resizing] {
54
+ transition:
55
+ box-shadow 180ms ease,
56
+ border-color 180ms ease;
57
+ user-select: none;
58
+ -webkit-user-select: none;
59
+ }
60
+
61
+ [data-wm-window][data-wm-stage="maximized"],
62
+ [data-wm-window][data-wm-stage="snapped"] {
63
+ border-radius: 0;
64
+ }
65
+
66
+ [data-wm-window][data-wm-flash] {
67
+ animation: wm-flash 320ms ease;
68
+ }
69
+
70
+ [data-wm-window] [data-wm-drag] {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 8px;
74
+ padding: 10px 14px;
75
+ background: var(--wm-titlebar-bg);
76
+ border-bottom: 1px solid var(--wm-border);
77
+ border-radius: var(--wm-radius) var(--wm-radius) 0 0;
78
+ cursor: default;
79
+ user-select: none;
80
+ -webkit-user-select: none;
81
+ flex-shrink: 0;
82
+ }
83
+
84
+ [data-wm-window][data-wm-stage="maximized"] [data-wm-drag],
85
+ [data-wm-window][data-wm-stage="snapped"] [data-wm-drag] {
86
+ border-radius: 0;
87
+ }
88
+
89
+ [data-wm-window] [data-wm-title] {
90
+ flex: 1;
91
+ font-size: 13px;
92
+ font-weight: 600;
93
+ letter-spacing: 0.01em;
94
+ color: var(--wm-text);
95
+ white-space: nowrap;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ }
99
+
100
+ [data-wm-window] [data-wm-controls] {
101
+ display: flex;
102
+ gap: 8px;
103
+ align-items: center;
104
+ }
105
+
106
+ [data-wm-window] [data-wm-close],
107
+ [data-wm-window] [data-wm-minimize],
108
+ [data-wm-window] [data-wm-maximize] {
109
+ width: 13px;
110
+ height: 13px;
111
+ border-radius: 50%;
112
+ border: none;
113
+ padding: 0;
114
+ cursor: pointer;
115
+ transition:
116
+ filter 120ms ease,
117
+ transform 120ms ease;
118
+ }
119
+
120
+ [data-wm-window] [data-wm-close]:hover,
121
+ [data-wm-window] [data-wm-minimize]:hover,
122
+ [data-wm-window] [data-wm-maximize]:hover {
123
+ filter: brightness(1.1);
124
+ transform: scale(1.12);
125
+ }
126
+
127
+ [data-wm-window] [data-wm-close]:focus-visible,
128
+ [data-wm-window] [data-wm-minimize]:focus-visible,
129
+ [data-wm-window] [data-wm-maximize]:focus-visible {
130
+ outline: 2px solid var(--wm-accent);
131
+ outline-offset: 2px;
132
+ }
133
+
134
+ [data-wm-window] [data-wm-close] {
135
+ background: #ff5f57;
136
+ }
137
+
138
+ [data-wm-window] [data-wm-minimize] {
139
+ background: #febc2e;
140
+ }
141
+
142
+ [data-wm-window] [data-wm-maximize] {
143
+ background: #28c840;
144
+ }
145
+
146
+ [data-wm-window] [data-wm-content] {
147
+ flex: 1;
148
+ overflow: auto;
149
+ padding: 14px;
150
+ font-size: 14px;
151
+ line-height: 1.55;
152
+ }
153
+
154
+ [data-wm-snap-preview] {
155
+ background: color-mix(in srgb, var(--wm-accent) 12%, transparent);
156
+ border: 1.5px solid color-mix(in srgb, var(--wm-accent) 45%, transparent);
157
+ border-radius: var(--wm-radius);
158
+ -webkit-backdrop-filter: blur(4px);
159
+ backdrop-filter: blur(4px);
160
+ transition:
161
+ transform 140ms cubic-bezier(0.32, 0.72, 0, 1),
162
+ width 140ms ease,
163
+ height 140ms ease;
164
+ }
165
+
166
+ @keyframes wm-window-in {
167
+ from {
168
+ opacity: 0;
169
+ scale: 0.96;
170
+ }
171
+ to {
172
+ opacity: 1;
173
+ scale: 1;
174
+ }
175
+ }
176
+
177
+ @keyframes wm-flash {
178
+ 0%,
179
+ 100% {
180
+ translate: 0 0;
181
+ }
182
+ 20% {
183
+ translate: -6px 0;
184
+ }
185
+ 45% {
186
+ translate: 5px 0;
187
+ }
188
+ 70% {
189
+ translate: -3px 0;
190
+ }
191
+ 90% {
192
+ translate: 2px 0;
193
+ }
194
+ }
195
+
196
+ @media (prefers-reduced-motion: reduce) {
197
+ [data-wm-window],
198
+ [data-wm-snap-preview] {
199
+ transition: none;
200
+ animation: none;
201
+ }
202
+ }