@gustavolmo/react-window-manager 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.js +28 -25
- package/dist/index.js.map +1 -1
- package/dist/window-manager/internal/features/window-button.d.ts.map +1 -1
- package/dist/window-manager/internal/features/window-layout.d.ts +11 -1
- package/dist/window-manager/internal/features/window-layout.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-0{top:0}.top-\[-104px\]{top:-104px}.top-\[-68px\]{top:-68px}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.block{display:block}.flex{display:flex}.size-6{width:1.5rem;height:1.5rem}.h-1{height:.25rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[32px\]{height:32px}.h-\[calc\(100\%-32px\)\]{height:calc(100% - 32px)}.h-full{height:100%}.w-1{width:.25rem}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-8{min-width:2rem}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-ne-resize{cursor:ne-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-w-resize{cursor:w-resize}.touch-none{touch-action:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-0\.5{gap:.125rem}.gap-4{gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded-sm{border-radius:.125rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.border{border-width:1px}.border-t-0{border-top-width:0}.border-t-2{border-top-width:2px}.border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity,1))}.border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity,1))}.border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity,1))}.border-t-transparent{border-top-color:transparent}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.bg-zinc-50\/10{background-color:hsla(0,0%,98%,.1)}.bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity,1))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.bg-opacity-0{--tw-bg-opacity:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-3{padding-bottom:.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-0{opacity:0}.opacity-
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-0{top:0}.top-\[-104px\]{top:-104px}.top-\[-68px\]{top:-68px}.-z-50{z-index:-50}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.block{display:block}.flex{display:flex}.size-6{width:1.5rem;height:1.5rem}.h-1{height:.25rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[32px\]{height:32px}.h-\[calc\(100\%-32px\)\]{height:calc(100% - 32px)}.h-full{height:100%}.w-1{width:.25rem}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-8{min-width:2rem}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-ne-resize{cursor:ne-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-w-resize{cursor:w-resize}.touch-none{touch-action:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-0\.5{gap:.125rem}.gap-4{gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded-sm{border-radius:.125rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.border{border-width:1px}.border-t-0{border-top-width:0}.border-t-2{border-top-width:2px}.border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity,1))}.border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity,1))}.border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity,1))}.border-t-transparent{border-top-color:transparent}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.bg-zinc-50\/10{background-color:hsla(0,0%,98%,.1)}.bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity,1))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.bg-opacity-0{--tw-bg-opacity:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-3{padding-bottom:.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.mix-blend-difference{mix-blend-mode:difference}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.brightness-100{--tw-brightness:brightness(1)}.brightness-100,.brightness-150{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.brightness-150{--tw-brightness:brightness(1.5)}.brightness-\[85\%\]{--tw-brightness:brightness(85%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\:bg-zinc-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity,1))}.hover\:bg-opacity-10:hover{--tw-bg-opacity:0.1}.hover\:bg-opacity-20:hover{--tw-bg-opacity:0.2}.hover\:mix-blend-overlay:hover{mix-blend-mode:overlay}@media (min-width:1280px){.xl\:p-0{padding:0}}
|
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.css"],"sourcesContent":["*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\r\n.pointer-events-none {\n pointer-events: none;\n}\r\n.pointer-events-auto {\n pointer-events: auto;\n}\r\n.fixed {\n position: fixed;\n}\r\n.absolute {\n position: absolute;\n}\r\n.relative {\n position: relative;\n}\r\n.top-0 {\n top: 0px;\n}\r\n.top-\\[-104px\\] {\n top: -104px;\n}\r\n.top-\\[-68px\\] {\n top: -68px;\n}\r\n.z-10 {\n z-index: 10;\n}\r\n.z-20 {\n z-index: 20;\n}\r\n.z-50 {\n z-index: 50;\n}\r\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\r\n.block {\n display: block;\n}\r\n.flex {\n display: flex;\n}\r\n.size-6 {\n width: 1.5rem;\n height: 1.5rem;\n}\r\n.h-1 {\n height: 0.25rem;\n}\r\n.h-12 {\n height: 3rem;\n}\r\n.h-2 {\n height: 0.5rem;\n}\r\n.h-3 {\n height: 0.75rem;\n}\r\n.h-6 {\n height: 1.5rem;\n}\r\n.h-8 {\n height: 2rem;\n}\r\n.h-\\[32px\\] {\n height: 32px;\n}\r\n.h-\\[calc\\(100\\%-32px\\)\\] {\n height: calc(100% - 32px);\n}\r\n.h-full {\n height: 100%;\n}\r\n.w-1 {\n width: 0.25rem;\n}\r\n.w-10 {\n width: 2.5rem;\n}\r\n.w-14 {\n width: 3.5rem;\n}\r\n.w-2 {\n width: 0.5rem;\n}\r\n.w-3 {\n width: 0.75rem;\n}\r\n.w-8 {\n width: 2rem;\n}\r\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\r\n.w-full {\n width: 100%;\n}\r\n.min-w-0 {\n min-width: 0px;\n}\r\n.min-w-8 {\n min-width: 2rem;\n}\r\n.shrink {\n flex-shrink: 1;\n}\r\n.shrink-0 {\n flex-shrink: 0;\n}\r\n.grow {\n flex-grow: 1;\n}\r\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\r\n.cursor-ne-resize {\n cursor: ne-resize;\n}\r\n.cursor-nw-resize {\n cursor: nw-resize;\n}\r\n.cursor-s-resize {\n cursor: s-resize;\n}\r\n.cursor-se-resize {\n cursor: se-resize;\n}\r\n.cursor-sw-resize {\n cursor: sw-resize;\n}\r\n.cursor-w-resize {\n cursor: w-resize;\n}\r\n.touch-none {\n touch-action: none;\n}\r\n.flex-col {\n flex-direction: column;\n}\r\n.items-center {\n align-items: center;\n}\r\n.justify-center {\n justify-content: center;\n}\r\n.gap-0\\.5 {\n gap: 0.125rem;\n}\r\n.gap-4 {\n gap: 1rem;\n}\r\n.overflow-auto {\n overflow: auto;\n}\r\n.overflow-hidden {\n overflow: hidden;\n}\r\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\r\n.rounded-sm {\n border-radius: 0.125rem;\n}\r\n.rounded-b-md {\n border-bottom-right-radius: 0.375rem;\n border-bottom-left-radius: 0.375rem;\n}\r\n.border {\n border-width: 1px;\n}\r\n.border-t-0 {\n border-top-width: 0px;\n}\r\n.border-t-2 {\n border-top-width: 2px;\n}\r\n.border-zinc-400 {\n --tw-border-opacity: 1;\n border-color: rgb(161 161 170 / var(--tw-border-opacity, 1));\n}\r\n.border-zinc-500 {\n --tw-border-opacity: 1;\n border-color: rgb(113 113 122 / var(--tw-border-opacity, 1));\n}\r\n.border-zinc-600 {\n --tw-border-opacity: 1;\n border-color: rgb(82 82 91 / var(--tw-border-opacity, 1));\n}\r\n.border-t-transparent {\n border-top-color: transparent;\n}\r\n.bg-neutral-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1));\n}\r\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-50\\/10 {\n background-color: rgb(250 250 250 / 0.1);\n}\r\n.bg-zinc-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(82 82 91 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(39 39 42 / var(--tw-bg-opacity, 1));\n}\r\n.bg-opacity-0 {\n --tw-bg-opacity: 0;\n}\r\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\r\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\r\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\r\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\r\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\r\n.pb-3 {\n padding-bottom: 0.75rem;\n}\r\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\r\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\r\n.opacity-0 {\n opacity: 0;\n}\r\n.opacity-100 {\n opacity: 1;\n}\r\n.opacity-50 {\n opacity: 0.5;\n}\r\n.opacity-60 {\n opacity: 0.6;\n}\r\n.opacity-80 {\n opacity: 0.8;\n}\r\n.mix-blend-difference {\n mix-blend-mode: difference;\n}\r\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\r\n.brightness-100 {\n --tw-brightness: brightness(1);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.brightness-150 {\n --tw-brightness: brightness(1.5);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.brightness-75 {\n --tw-brightness: brightness(.75);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.brightness-\\[85\\%\\] {\n --tw-brightness: brightness(85%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\r\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\r\n.duration-500 {\n transition-duration: 500ms;\n}\r\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\r\n.hover\\:bg-gray-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));\n}\r\n.hover\\:bg-red-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\r\n.hover\\:bg-zinc-300:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(212 212 216 / var(--tw-bg-opacity, 1));\n}\r\n.hover\\:bg-opacity-10:hover {\n --tw-bg-opacity: 0.1;\n}\r\n.hover\\:bg-opacity-20:hover {\n --tw-bg-opacity: 0.2;\n}\r\n.hover\\:bg-opacity-5:hover {\n --tw-bg-opacity: 0.05;\n}\r\n@media (min-width: 1280px) {\n\n .xl\\:p-0 {\n padding: 0px;\n }\n}"],"mappings":";AAAA;AAAA;AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQF;AAAA;AAAA;AAGE;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAaF;AAAA;AAEE;AACA;AACA;AACA;AACG;AACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAQF;AACE;AACA;AAAA;AASF;AACE;AACA;AACA;AAAA;AAOF;AACE;AACQ;AAAA;AAOV;AAAA;AAAA;AAAA;AAAA;AAAA;AAME;AACA;AAAA;AAOF;AACE;AACA;AAAA;AAOF;AAAA;AAEE;AAAA;AAUF;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAOF;AACE;AAAA;AAOF;AAAA;AAEE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AASF;AACE;AACA;AACA;AAAA;AASF;AAAA;AAAA;AAAA;AAAA;AAKE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOF;AAAA;AAEE;AAAA;AAQF;AAAA;AAAA;AAAA;AAIE;AACA;AACA;AAAA;AAOF;AACE;AAAA;AAOF;AACE;AAAA;AAOF;AACE;AAAA;AAOF;AAAA;AAEE;AAAA;AAQF;AACE;AACA;AAAA;AAOF;AACE;AAAA;AAQF;AACE;AACA;AAAA;AAOF;AACE;AAAA;AAOF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAAA;AAAA;AAGE;AACA;AACA;AAAA;AAMF;AACE;AAAA;AAOF;AACE;AAAA;AAQF;AAAA;AACE;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAOF;AAAA;AAEE;AAAA;AAMF;AACE;AAAA;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQE;AACA;AAAA;AAOF;AAAA;AAEE;AACA;AAAA;AAIF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AAEE;AACE;AAAA;AAAA;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.css"],"sourcesContent":["*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\r\n.pointer-events-none {\n pointer-events: none;\n}\r\n.pointer-events-auto {\n pointer-events: auto;\n}\r\n.fixed {\n position: fixed;\n}\r\n.absolute {\n position: absolute;\n}\r\n.relative {\n position: relative;\n}\r\n.top-0 {\n top: 0px;\n}\r\n.top-\\[-104px\\] {\n top: -104px;\n}\r\n.top-\\[-68px\\] {\n top: -68px;\n}\r\n.-z-50 {\n z-index: -50;\n}\r\n.z-10 {\n z-index: 10;\n}\r\n.z-20 {\n z-index: 20;\n}\r\n.z-50 {\n z-index: 50;\n}\r\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\r\n.block {\n display: block;\n}\r\n.flex {\n display: flex;\n}\r\n.size-6 {\n width: 1.5rem;\n height: 1.5rem;\n}\r\n.h-1 {\n height: 0.25rem;\n}\r\n.h-12 {\n height: 3rem;\n}\r\n.h-2 {\n height: 0.5rem;\n}\r\n.h-3 {\n height: 0.75rem;\n}\r\n.h-6 {\n height: 1.5rem;\n}\r\n.h-8 {\n height: 2rem;\n}\r\n.h-\\[32px\\] {\n height: 32px;\n}\r\n.h-\\[calc\\(100\\%-32px\\)\\] {\n height: calc(100% - 32px);\n}\r\n.h-full {\n height: 100%;\n}\r\n.w-1 {\n width: 0.25rem;\n}\r\n.w-10 {\n width: 2.5rem;\n}\r\n.w-14 {\n width: 3.5rem;\n}\r\n.w-2 {\n width: 0.5rem;\n}\r\n.w-3 {\n width: 0.75rem;\n}\r\n.w-8 {\n width: 2rem;\n}\r\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\r\n.w-full {\n width: 100%;\n}\r\n.min-w-0 {\n min-width: 0px;\n}\r\n.min-w-8 {\n min-width: 2rem;\n}\r\n.shrink {\n flex-shrink: 1;\n}\r\n.shrink-0 {\n flex-shrink: 0;\n}\r\n.grow {\n flex-grow: 1;\n}\r\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\r\n.cursor-ne-resize {\n cursor: ne-resize;\n}\r\n.cursor-nw-resize {\n cursor: nw-resize;\n}\r\n.cursor-s-resize {\n cursor: s-resize;\n}\r\n.cursor-se-resize {\n cursor: se-resize;\n}\r\n.cursor-sw-resize {\n cursor: sw-resize;\n}\r\n.cursor-w-resize {\n cursor: w-resize;\n}\r\n.touch-none {\n touch-action: none;\n}\r\n.select-text {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\r\n.flex-col {\n flex-direction: column;\n}\r\n.items-center {\n align-items: center;\n}\r\n.justify-center {\n justify-content: center;\n}\r\n.gap-0\\.5 {\n gap: 0.125rem;\n}\r\n.gap-4 {\n gap: 1rem;\n}\r\n.overflow-auto {\n overflow: auto;\n}\r\n.overflow-hidden {\n overflow: hidden;\n}\r\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\r\n.rounded-sm {\n border-radius: 0.125rem;\n}\r\n.rounded-b-md {\n border-bottom-right-radius: 0.375rem;\n border-bottom-left-radius: 0.375rem;\n}\r\n.border {\n border-width: 1px;\n}\r\n.border-t-0 {\n border-top-width: 0px;\n}\r\n.border-t-2 {\n border-top-width: 2px;\n}\r\n.border-zinc-400 {\n --tw-border-opacity: 1;\n border-color: rgb(161 161 170 / var(--tw-border-opacity, 1));\n}\r\n.border-zinc-500 {\n --tw-border-opacity: 1;\n border-color: rgb(113 113 122 / var(--tw-border-opacity, 1));\n}\r\n.border-zinc-600 {\n --tw-border-opacity: 1;\n border-color: rgb(82 82 91 / var(--tw-border-opacity, 1));\n}\r\n.border-t-transparent {\n border-top-color: transparent;\n}\r\n.bg-neutral-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1));\n}\r\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-50\\/10 {\n background-color: rgb(250 250 250 / 0.1);\n}\r\n.bg-zinc-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(82 82 91 / var(--tw-bg-opacity, 1));\n}\r\n.bg-zinc-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(39 39 42 / var(--tw-bg-opacity, 1));\n}\r\n.bg-opacity-0 {\n --tw-bg-opacity: 0;\n}\r\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\r\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\r\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\r\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\r\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\r\n.pb-3 {\n padding-bottom: 0.75rem;\n}\r\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\r\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\r\n.opacity-0 {\n opacity: 0;\n}\r\n.opacity-50 {\n opacity: 0.5;\n}\r\n.opacity-60 {\n opacity: 0.6;\n}\r\n.opacity-80 {\n opacity: 0.8;\n}\r\n.mix-blend-difference {\n mix-blend-mode: difference;\n}\r\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\r\n.brightness-100 {\n --tw-brightness: brightness(1);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.brightness-150 {\n --tw-brightness: brightness(1.5);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.brightness-\\[85\\%\\] {\n --tw-brightness: brightness(85%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\r\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\r\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\r\n.duration-500 {\n transition-duration: 500ms;\n}\r\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\r\n.hover\\:bg-gray-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));\n}\r\n.hover\\:bg-red-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\r\n.hover\\:bg-zinc-300:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(212 212 216 / var(--tw-bg-opacity, 1));\n}\r\n.hover\\:bg-opacity-10:hover {\n --tw-bg-opacity: 0.1;\n}\r\n.hover\\:bg-opacity-20:hover {\n --tw-bg-opacity: 0.2;\n}\r\n.hover\\:mix-blend-overlay:hover {\n mix-blend-mode: overlay;\n}\r\n@media (min-width: 1280px) {\n\n .xl\\:p-0 {\n padding: 0px;\n }\n}"],"mappings":";AAAA;AAAA;AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQF;AAAA;AAAA;AAGE;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAaF;AAAA;AAEE;AACA;AACA;AACA;AACG;AACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAQF;AACE;AACA;AAAA;AASF;AACE;AACA;AACA;AAAA;AAOF;AACE;AACQ;AAAA;AAOV;AAAA;AAAA;AAAA;AAAA;AAAA;AAME;AACA;AAAA;AAOF;AACE;AACA;AAAA;AAOF;AAAA;AAEE;AAAA;AAUF;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAOF;AACE;AAAA;AAOF;AAAA;AAEE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AASF;AACE;AACA;AACA;AAAA;AASF;AAAA;AAAA;AAAA;AAAA;AAKE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOF;AAAA;AAEE;AAAA;AAQF;AAAA;AAAA;AAAA;AAIE;AACA;AACA;AAAA;AAOF;AACE;AAAA;AAOF;AACE;AAAA;AAOF;AACE;AAAA;AAOF;AAAA;AAEE;AAAA;AAQF;AACE;AACA;AAAA;AAOF;AACE;AAAA;AAQF;AACE;AACA;AAAA;AAOF;AACE;AAAA;AAOF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAAA;AAAA;AAGE;AACA;AACA;AAAA;AAMF;AACE;AAAA;AAOF;AACE;AAAA;AAQF;AAAA;AACE;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAOF;AAAA;AAEE;AAAA;AAMF;AACE;AAAA;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQE;AACA;AAAA;AAOF;AAAA;AAEE;AACA;AAAA;AAIF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACG;AACK;AAAA;AAEV;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AAEE;AACE;AAAA;AAAA;","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -188,7 +188,7 @@ var rafDragLoopResolver = {
|
|
|
188
188
|
const { x, y } = useCursorState.getState();
|
|
189
189
|
const { winCoord, isDragging, windowId } = windowRegistry[targetWinId].getState();
|
|
190
190
|
if (!isDragging)
|
|
191
|
-
throw new Error(`
|
|
191
|
+
throw new Error(`LOOP_DRAG called with isDragging false for winId: ${windowId}`);
|
|
192
192
|
const pointerOffset = {
|
|
193
193
|
left: x - winCoord.pointX,
|
|
194
194
|
top: y - winCoord.pointY
|
|
@@ -202,10 +202,10 @@ var dragLoop = (targetWinId, pointerOffset, commit) => {
|
|
|
202
202
|
const { x, y } = useCursorState.getState();
|
|
203
203
|
if (!isDragging)
|
|
204
204
|
return;
|
|
205
|
-
let adjustedX = x - pointerOffset.left;
|
|
205
|
+
let adjustedX = Math.round(x - pointerOffset.left);
|
|
206
206
|
if (x > wsRect.right || x < wsRect.left)
|
|
207
207
|
adjustedX = winCoord.pointX;
|
|
208
|
-
let adjustedY = y - pointerOffset.top;
|
|
208
|
+
let adjustedY = Math.round(y - pointerOffset.top);
|
|
209
209
|
if (y > wsRect.bottom || y < wsRect.top)
|
|
210
210
|
adjustedY = winCoord.pointY;
|
|
211
211
|
if (adjustedX !== winCoord.pointX || adjustedY !== winCoord.pointY) {
|
|
@@ -457,7 +457,7 @@ var rafResizeLoopResolver = {
|
|
|
457
457
|
};
|
|
458
458
|
var resizer = {
|
|
459
459
|
e: (resizeDep, commit) => {
|
|
460
|
-
const { wsRect, win, winBox, x
|
|
460
|
+
const { wsRect, win, winBox, x } = resizeDep;
|
|
461
461
|
if (!win.resizeAction)
|
|
462
462
|
return;
|
|
463
463
|
if (!winBox)
|
|
@@ -469,14 +469,14 @@ var resizer = {
|
|
|
469
469
|
commit([
|
|
470
470
|
{
|
|
471
471
|
winId: win.windowId,
|
|
472
|
-
patch: { winWidth: win.winWidth + sizeDiff }
|
|
472
|
+
patch: { winWidth: Math.round(win.winWidth + sizeDiff) }
|
|
473
473
|
}
|
|
474
474
|
]);
|
|
475
475
|
}
|
|
476
476
|
requestAnimationFrame(() => resizer.e(getRafResizeDependencies(win.windowId), commit));
|
|
477
477
|
},
|
|
478
478
|
w: (resizeDep, commit) => {
|
|
479
|
-
const { wsRect, win, winBox, x
|
|
479
|
+
const { wsRect, win, winBox, x } = resizeDep;
|
|
480
480
|
if (!win.resizeAction)
|
|
481
481
|
return;
|
|
482
482
|
if (!winBox)
|
|
@@ -489,7 +489,7 @@ var resizer = {
|
|
|
489
489
|
{
|
|
490
490
|
winId: win.windowId,
|
|
491
491
|
patch: {
|
|
492
|
-
winWidth: win.winWidth + sizeDiff,
|
|
492
|
+
winWidth: Math.round(win.winWidth + sizeDiff),
|
|
493
493
|
winCoord: { pointX: x, pointY: win.winCoord.pointY }
|
|
494
494
|
}
|
|
495
495
|
}
|
|
@@ -498,7 +498,7 @@ var resizer = {
|
|
|
498
498
|
requestAnimationFrame(() => resizer.w(getRafResizeDependencies(win.windowId), commit));
|
|
499
499
|
},
|
|
500
500
|
n: (resizeDep, commit) => {
|
|
501
|
-
const { wsRect, win, winBox,
|
|
501
|
+
const { wsRect, win, winBox, y } = resizeDep;
|
|
502
502
|
if (!win.resizeAction)
|
|
503
503
|
return;
|
|
504
504
|
if (!winBox)
|
|
@@ -511,7 +511,7 @@ var resizer = {
|
|
|
511
511
|
{
|
|
512
512
|
winId: win.windowId,
|
|
513
513
|
patch: {
|
|
514
|
-
winHeight: win.winHeight + sizeDiff,
|
|
514
|
+
winHeight: Math.round(win.winHeight + sizeDiff),
|
|
515
515
|
winCoord: { pointX: win.winCoord.pointX, pointY: y }
|
|
516
516
|
}
|
|
517
517
|
}
|
|
@@ -520,7 +520,7 @@ var resizer = {
|
|
|
520
520
|
requestAnimationFrame(() => resizer.n(getRafResizeDependencies(win.windowId), commit));
|
|
521
521
|
},
|
|
522
522
|
s: (resizeDep, commit) => {
|
|
523
|
-
const { wsRect, win, winBox,
|
|
523
|
+
const { wsRect, win, winBox, y } = resizeDep;
|
|
524
524
|
if (!win.resizeAction)
|
|
525
525
|
return;
|
|
526
526
|
if (!winBox)
|
|
@@ -533,7 +533,7 @@ var resizer = {
|
|
|
533
533
|
{
|
|
534
534
|
winId: win.windowId,
|
|
535
535
|
patch: {
|
|
536
|
-
winHeight: win.winHeight + sizeDiff
|
|
536
|
+
winHeight: Math.round(win.winHeight + sizeDiff)
|
|
537
537
|
}
|
|
538
538
|
}
|
|
539
539
|
]);
|
|
@@ -571,13 +571,13 @@ var resizer = {
|
|
|
571
571
|
if (!minWinHeight && sizeDiffY !== 0) {
|
|
572
572
|
stagedChagnes.push({
|
|
573
573
|
winId: win.windowId,
|
|
574
|
-
patch: { winHeight: win.winHeight + sizeDiffY }
|
|
574
|
+
patch: { winHeight: Math.round(win.winHeight + sizeDiffY) }
|
|
575
575
|
});
|
|
576
576
|
}
|
|
577
577
|
if (!minWinWidth && sizeDiffX !== 0) {
|
|
578
578
|
stagedChagnes.push({
|
|
579
579
|
winId: win.windowId,
|
|
580
|
-
patch: { winWidth: win.winWidth + sizeDiffX }
|
|
580
|
+
patch: { winWidth: Math.round(win.winWidth + sizeDiffX) }
|
|
581
581
|
});
|
|
582
582
|
}
|
|
583
583
|
commit(stagedChagnes);
|
|
@@ -958,12 +958,12 @@ import { Fragment as Fragment2, jsx as jsx2 } from "react/jsx-runtime";
|
|
|
958
958
|
function CursorMoveListener() {
|
|
959
959
|
const { setXY } = useCursorState();
|
|
960
960
|
useEffect(() => {
|
|
961
|
-
const
|
|
961
|
+
const handlePointerMove = (e) => {
|
|
962
962
|
e.preventDefault();
|
|
963
963
|
setXY(e.clientX, e.clientY);
|
|
964
964
|
};
|
|
965
|
-
window.addEventListener("pointermove",
|
|
966
|
-
return () => window.removeEventListener("pointermove",
|
|
965
|
+
window.addEventListener("pointermove", handlePointerMove);
|
|
966
|
+
return () => window.removeEventListener("pointermove", handlePointerMove);
|
|
967
967
|
}, [setXY]);
|
|
968
968
|
return /* @__PURE__ */ jsx2(Fragment2, {});
|
|
969
969
|
}
|
|
@@ -1028,7 +1028,7 @@ function WorkspaceLayout({ children, className }) {
|
|
|
1028
1028
|
ref: workspaceRef,
|
|
1029
1029
|
onPointerLeave: disabledDragAndResize,
|
|
1030
1030
|
onPointerUp: disabledDragAndResize,
|
|
1031
|
-
className: className ? className : "fixed overflow-hidden h-full w-full touch-none",
|
|
1031
|
+
className: className ? className : "fixed overflow-hidden h-full w-full touch-none -z-50",
|
|
1032
1032
|
children: [
|
|
1033
1033
|
/* @__PURE__ */ jsx4(WorkspaceResizeListener, {}),
|
|
1034
1034
|
/* @__PURE__ */ jsx4(CursorMoveListener, {}),
|
|
@@ -1413,8 +1413,8 @@ function DragHandle({ winId }) {
|
|
|
1413
1413
|
onPointerUp: () => dragApi.stopDrag(winId),
|
|
1414
1414
|
onDoubleClick: () => dockApi.maximizeWindow(winId),
|
|
1415
1415
|
className: `
|
|
1416
|
-
grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-
|
|
1417
|
-
hover:bg-opacity-
|
|
1416
|
+
grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-zinc-100 bg-opacity-0
|
|
1417
|
+
hover:bg-opacity-20 hover:mix-blend-overlay`
|
|
1418
1418
|
}
|
|
1419
1419
|
);
|
|
1420
1420
|
}
|
|
@@ -1425,6 +1425,8 @@ function WindowLayout({
|
|
|
1425
1425
|
children,
|
|
1426
1426
|
windowName,
|
|
1427
1427
|
navbarChildren,
|
|
1428
|
+
navbarClassName,
|
|
1429
|
+
className,
|
|
1428
1430
|
winId,
|
|
1429
1431
|
defaultDock = "default",
|
|
1430
1432
|
style
|
|
@@ -1494,7 +1496,7 @@ function WindowLayout({
|
|
|
1494
1496
|
{
|
|
1495
1497
|
id: windowId,
|
|
1496
1498
|
ref: windowRef,
|
|
1497
|
-
className: `fixed bg-white shadow-lg border border-zinc-600 rounded-sm
|
|
1499
|
+
className: `fixed overflow-hidden ${className ? className : "bg-white shadow-lg border border-zinc-600 rounded-sm"} `,
|
|
1498
1500
|
onPointerDown: () => focusApi.bringWindowToFocus(windowId),
|
|
1499
1501
|
style: {
|
|
1500
1502
|
backgroundColor: style?.windowBackgroundColor,
|
|
@@ -1516,9 +1518,9 @@ function WindowLayout({
|
|
|
1516
1518
|
style: {
|
|
1517
1519
|
backgroundColor: style?.navBackgroundColor
|
|
1518
1520
|
},
|
|
1519
|
-
className: `
|
|
1520
|
-
|
|
1521
|
-
|
|
1521
|
+
className: `h-[32px] w-full flex items-center
|
|
1522
|
+
${navbarClassName ? navbarClassName : `bg-neutral-800 ${isActive ? "brightness-100" : "brightness-150"}`}
|
|
1523
|
+
`,
|
|
1522
1524
|
children: [
|
|
1523
1525
|
/* @__PURE__ */ jsx8("div", { className: "shrink h-8 px-2 text-white flex items-center text-sm truncate min-w-0", children: windowName }),
|
|
1524
1526
|
/* @__PURE__ */ jsx8("div", { className: "h-8 px-2 text-white flex items-center text-sm truncate min-w-0", children: navbarChildren }),
|
|
@@ -1529,7 +1531,7 @@ function WindowLayout({
|
|
|
1529
1531
|
}
|
|
1530
1532
|
),
|
|
1531
1533
|
/* @__PURE__ */ jsx8(ResizingControls, { winId }),
|
|
1532
|
-
/* @__PURE__ */ jsx8("div", { className: `relative w-full h-[calc(100%-32px)] overflow-auto`, children })
|
|
1534
|
+
/* @__PURE__ */ jsx8("div", { className: `relative w-full h-[calc(100%-32px)] overflow-auto select-text`, children })
|
|
1533
1535
|
]
|
|
1534
1536
|
}
|
|
1535
1537
|
),
|
|
@@ -1562,7 +1564,8 @@ function WindowButton({
|
|
|
1562
1564
|
onClick: handleOpenCloseWin,
|
|
1563
1565
|
className: `
|
|
1564
1566
|
${className}
|
|
1565
|
-
${isWindowClosed ? isClosedClassName : isActive ? isActiveClassName : isOpenClassName}
|
|
1567
|
+
${isWindowClosed ? isClosedClassName : isActive ? isActiveClassName : isOpenClassName}
|
|
1568
|
+
`,
|
|
1566
1569
|
children
|
|
1567
1570
|
}
|
|
1568
1571
|
);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/window-manager/registration/window-registry.ts","../src/window-manager/internal/features/workspace/workspace-state.ts","../src/window-manager/internal/runtime/dock-resolver/dock-commands.ts","../src/window-manager/internal/features/cursor/cursor-state.ts","../src/window-manager/internal/runtime/drag-resolver/drag-loop.ts","../src/window-manager/internal/runtime/drag-resolver/drag-commands.ts","../src/window-manager/internal/runtime/focus-resolver/focus-commands.ts","../src/window-manager/internal/runtime/stack-resolver/stack-commands.ts","../src/window-manager/internal/runtime/workspace-resolver/workspace-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-loop.ts","../src/window-manager/internal/runtime/rwm-runtime.ts","../src/window-manager/internal/features/docking/docking-api.ts","../src/window-manager/internal/features/focus/focus-api.ts","../src/window-manager/internal/features/stack/stack-api.ts","../src/window-manager/internal/features/workspace/workspace-api.ts","../src/window-manager/rwm.ts","../src/window-manager/workspace-layout.tsx","../src/window-manager/internal/features/docking/docking-controls.tsx","../src/window-manager/internal/features/resizing/resizing-api.ts","../src/window-manager/internal/features/cursor/cursor-move-listener.tsx","../src/window-manager/internal/features/workspace/workspace-resize-listener.tsx","../src/window-manager/internal/features/drag/drag-api.ts","../src/window-manager/registration/window-store-factory.tsx","../src/window-manager/internal/features/window-layout.tsx","../src/window-manager/internal/assets/svg-win-icons.tsx","../src/window-manager/internal/features/grid/grid-orchestrator.ts","../src/window-manager/internal/features/resizing/resizing-controls.tsx","../src/window-manager/internal/features/drag/drag-handle.tsx","../src/window-manager/internal/features/window-button.tsx"],"sourcesContent":["import { WindowRegistry } from '../model/window-types'\r\n\r\nexport const windowRegistry: WindowRegistry = {}\r\n","import { create } from 'zustand'\r\nimport { WorkspaceStore } from '../../../model/workspace-types'\r\n\r\nexport const useWorkspaceState = create<WorkspaceStore>((set, get) => ({\r\n wsElement: null,\r\n setWsElement: (el: HTMLElement | null) => set({ wsElement: el }),\r\n\r\n isGridEnabled: true,\r\n isDockPannelEnabled: true,\r\n responsiveBreak: 'sm',\r\n \r\n isBelowBreakPoint: false,\r\n activeWindowId: 'react-dynamic-window-instance0',\r\n wsRect: {\r\n top: 0,\r\n left: 0,\r\n innerHeight: 0,\r\n innerWidth: 0,\r\n bottom: 0,\r\n right: 0,\r\n centerX: 0,\r\n centerY: 0,\r\n },\r\n}))\r\n","import { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type DockCommands =\r\n | 'DOCK_WINDOW_RIGHT'\r\n | 'DOCK_WINDOW_LEFT'\r\n | 'DOCK_WINDOW_TOP'\r\n | 'DOCK_WINDOW_BOTTOM'\r\n | 'DOCK_WINDOW_BOTTOM_RIGHT'\r\n | 'DOCK_WINDOW_TOP_RIGHT'\r\n | 'DOCK_WINDOW_BOTTOM_LEFT'\r\n | 'DOCK_WINDOW_TOP_LEFT'\r\n | 'MAXIMIZE_WINDOW'\r\n | 'DEMAXIMIZE_WINDOW'\r\n\r\ntype DockResolver = Record<\r\n DockCommands,\r\n (targetWinId: string, wsRect: WorkspaceRect) => WindowMutation[]\r\n>\r\nexport const dockCommandResolver: DockResolver = {\r\n DOCK_WINDOW_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: {\r\n pointX: wsRect.centerX,\r\n pointY: wsRect.centerY,\r\n },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n MAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winHeight: wsRect.innerHeight,\r\n winWidth: wsRect.innerWidth,\r\n winVisualState: 'maximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DEMAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 16 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n\r\nexport const getDockDependencies = () => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n return { wsRect }\r\n}\r\n","import { create } from 'zustand'\r\n\r\ntype CursorState = {\r\n x: number\r\n y: number\r\n setXY: (x: number, y: number) => void\r\n}\r\n\r\nexport const useCursorState = create<CursorState>((set) => ({\r\n x: 10,\r\n y: 10,\r\n setXY: (x: number, y: number) => set({ x: x, y: y }),\r\n}))\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { useCursorState } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type RafDragCommands = 'LOOP_DRAG'\r\n\r\ntype RafDragResolver = Record<\r\n RafDragCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafDragLoopResolver: RafDragResolver = {\r\n LOOP_DRAG: (targetWinId: string, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { x, y } = useCursorState.getState()\r\n const { winCoord, isDragging, windowId } = windowRegistry[targetWinId].getState()\r\n\r\n if (!isDragging)\r\n throw new Error(`INIT_DRAG_LOOP called with isDragging false for winId: ${windowId}`)\r\n\r\n const pointerOffset = {\r\n left: x - winCoord.pointX,\r\n top: y - winCoord.pointY,\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n },\r\n}\r\n\r\ntype PointerOffset = { left: number; top: number }\r\nconst dragLoop = (\r\n targetWinId: string,\r\n pointerOffset: PointerOffset,\r\n commit: (patchStack: WindowMutation[]) => void\r\n) => {\r\n const { winCoord, isDragging } = windowRegistry[targetWinId].getState()\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { x, y } = useCursorState.getState()\r\n if (!isDragging) return\r\n\r\n let adjustedX = x - pointerOffset.left\r\n if (x > wsRect.right || x < wsRect.left) adjustedX = winCoord.pointX\r\n let adjustedY = y - pointerOffset.top\r\n if (y > wsRect.bottom || y < wsRect.top) adjustedY = winCoord.pointY\r\n\r\n if (adjustedX !== winCoord.pointX || adjustedY !== winCoord.pointY) {\r\n commit([\r\n {\r\n winId: targetWinId,\r\n patch: { winCoord: { pointX: adjustedX, pointY: adjustedY } },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type DragCommands = 'ENABLE_DRAG' | 'DISABLE_DRAG'\r\n\r\ntype DragResolver = Record<DragCommands, (targetWinId: string) => WindowMutation[]>\r\nexport const dragCommandResolver: DragResolver = {\r\n ENABLE_DRAG: (targetWinId: string) => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { winVisualState } = windowRegistry[targetWinId].getState()\r\n\r\n const patch: Partial<WindowStore> =\r\n winVisualState === 'maximized'\r\n ? {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 4 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: true,\r\n }\r\n : { isDragging: true }\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: patch,\r\n },\r\n ]\r\n },\r\n DISABLE_DRAG: (targetWinId: string) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n\r\nexport const isDragAllowed = (): boolean => {\r\n return !useWorkspaceState.getState().isBelowBreakPoint\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { BatchMutation, WindowMutation, WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type FocusCommands = 'FOCUS_WINDOW' | 'CLOSE_WINDOW_AND_REFOCUS'\r\n\r\ntype FocusResolver = Record<FocusCommands, (targetWinId: string) => BatchMutation>\r\nexport const focusCommandResolver: FocusResolver = {\r\n FOCUS_WINDOW: (targetWinId: string) => {\r\n const targetWin = windowRegistry[targetWinId].getState()\r\n if (targetWin.isActive && !targetWin.isWindowClosed) return { win: [], ws: {} }\r\n\r\n const newStackOrderUpdate: WindowMutation[] = []\r\n const workspaceUpdate: WorkspaceMutation = { activeWindowId: targetWinId }\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const otherWin = windowRegistry[key].getState()\r\n if (otherWin.windowId === targetWin.windowId) continue\r\n\r\n const adjustedIndex =\r\n otherWin.zIndex >= targetWin.zIndex ? otherWin.zIndex - 1 : otherWin.zIndex\r\n\r\n newStackOrderUpdate.push({\r\n winId: otherWin.windowId,\r\n patch: {\r\n isActive: false,\r\n zIndex: adjustedIndex,\r\n },\r\n })\r\n }\r\n\r\n newStackOrderUpdate.push({\r\n winId: targetWin.windowId,\r\n patch: {\r\n isWindowClosed: false,\r\n isActive: true,\r\n zIndex: newStackOrderUpdate.length + 1,\r\n },\r\n })\r\n\r\n return {\r\n win: newStackOrderUpdate,\r\n ws: workspaceUpdate,\r\n }\r\n },\r\n CLOSE_WINDOW_AND_REFOCUS: (targetWinId: string) => {\r\n const isTargetWinClosed = windowRegistry[targetWinId].getState().isWindowClosed\r\n if (isTargetWinClosed) return { win: [], ws: {} }\r\n\r\n let prevIndex = 0\r\n let highestIndexWinId: string | undefined = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { zIndex, windowId, isWindowClosed } = windowRegistry[key].getState()\r\n if (windowId === targetWinId) continue\r\n if (isWindowClosed) continue\r\n\r\n if (zIndex > prevIndex) {\r\n prevIndex = zIndex\r\n highestIndexWinId = windowId\r\n }\r\n }\r\n\r\n return !highestIndexWinId\r\n ? {\r\n ws: {},\r\n win: [\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n : {\r\n ws: { activeWindowId: highestIndexWinId },\r\n win: [\r\n {\r\n winId: highestIndexWinId,\r\n patch: { isActive: true },\r\n },\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n },\r\n}\r\n","import { windowRegistry } from \"../../../registration/window-registry\"\r\nimport { WindowMutation } from \"../rwm-runtime\"\r\n\r\nexport type StackCommands = 'RESET_STACK'\r\n\r\ntype StackResolver = Record<StackCommands, (targetWinId?: string) => WindowMutation[]>\r\nexport const stackCommandResolver: StackResolver = {\r\n RESET_STACK: () => {\r\n const batchUpdate: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { resetFlag } = windowRegistry[key].getState()\r\n batchUpdate.push({\r\n winId: key,\r\n patch: {\r\n resetFlag: !resetFlag, // FIND ME: reset flag is anti-pattern\r\n isWindowClosed: true,\r\n isActive: false,\r\n },\r\n })\r\n }\r\n\r\n return batchUpdate\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type WorkspaceCommands =\r\n | 'UPDATE_WORKSPACE_RECT'\r\n | 'SET_RESPONSIVE_BREAK'\r\n | 'SET_WORKSPACE_FEATURES'\r\n\r\nexport type WorkspaceCtx = {\r\n responsiveBreak?: ResponsiveSizes\r\n isDockPannelEnabled?: boolean\r\n isGridEnabled?: boolean\r\n}\r\n\r\ntype WorkspaceResolver = Record<\r\n WorkspaceCommands,\r\n (targetWinId?: string, ctx?: WorkspaceCtx) => WorkspaceMutation\r\n>\r\nexport const workspaceCommandResolver: WorkspaceResolver = {\r\n UPDATE_WORKSPACE_RECT: () => {\r\n const rect = useWorkspaceState.getState().wsElement?.getBoundingClientRect()\r\n const top = rect?.top ?? 0\r\n const left = rect?.left ?? 0\r\n const innerHeight = rect?.height ?? 0\r\n const innerWidth = rect?.width ?? 0\r\n const bottom = top + innerHeight\r\n const right = left + innerWidth\r\n const centerX = left + innerWidth / 2\r\n const centerY = top + innerHeight / 2\r\n\r\n const breakPoint = useWorkspaceState.getState().responsiveBreak\r\n const isBelowBreakPoint = innerWidth < responsiveBreakInPx(breakPoint)\r\n\r\n return {\r\n isBelowBreakPoint: isBelowBreakPoint,\r\n wsRect: {\r\n top: top,\r\n left: left,\r\n innerHeight: innerHeight,\r\n innerWidth: innerWidth,\r\n bottom: bottom,\r\n right: right,\r\n centerX: centerX,\r\n centerY: centerY,\r\n },\r\n }\r\n },\r\n\r\n SET_WORKSPACE_FEATURES: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.isGridEnabled === undefined || ctx?.isDockPannelEnabled === undefined)\r\n throw new Error(`SET_WORKSPACE_FEATURES called without a ctx value`)\r\n\r\n return {\r\n isGridEnabled: ctx.isGridEnabled,\r\n isDockPannelEnabled: ctx.isDockPannelEnabled,\r\n }\r\n },\r\n\r\n SET_RESPONSIVE_BREAK: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.responsiveBreak === undefined || ctx?.responsiveBreak === null)\r\n throw new Error(`SET_RESPONSIVE_BREAK called without a ctx value`)\r\n\r\n return {\r\n responsiveBreak: ctx.responsiveBreak,\r\n }\r\n },\r\n}\r\n\r\nconst responsiveBreakInPx = (breakPoint: ResponsiveSizes): number => {\r\n switch (breakPoint) {\r\n case 'sm':\r\n return 640\r\n case 'md':\r\n return 768\r\n case 'lg':\r\n return 1024\r\n case 'xl':\r\n return 1280\r\n case 'never':\r\n return 0\r\n case 'always':\r\n return Infinity\r\n default:\r\n return breakPoint\r\n }\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type ResizeCommands = 'ENABLE_RESIZE' | 'DISABLE_RESIZE'\r\n\r\ntype ResizeResolver = Record<\r\n ResizeCommands,\r\n (targetWinId: string, ctx: ResizeDirection) => WindowMutation[]\r\n>\r\nexport const resizeCommandResolver: ResizeResolver = {\r\n ENABLE_RESIZE: (targetWinId: string, direction: ResizeDirection) => {\r\n const currentResizeAction = windowRegistry[targetWinId].getState().resizeAction\r\n if (currentResizeAction)\r\n throw new Error(`ENABLE_RESIZE called on a window that is already risizing`)\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n resizeAction: direction,\r\n winVisualState: 'demaximized',\r\n },\r\n },\r\n ]\r\n },\r\n DISABLE_RESIZE: (_: string) => {\r\n const patch: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry))\r\n patch.push({\r\n winId: key,\r\n patch: {\r\n resizeAction: false,\r\n },\r\n })\r\n\r\n return patch\r\n },\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useCursorState } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type RafResizeCommands = 'LOOP_RESIZE'\r\ntype RafResizeResolver = Record<\r\n RafResizeCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafResizeLoopResolver: RafResizeResolver = {\r\n LOOP_RESIZE: (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => {\r\n const dep = getRafResizeDependencies(targetWinId)\r\n\r\n const resizeDirection = dep.win.resizeAction\r\n if (!resizeDirection)\r\n throw new Error(`LOOP_RESIZE called with resizeAction as false for winId: ${targetWinId}`)\r\n\r\n const winElementBox = dep.winBox\r\n if (!winElementBox)\r\n throw new Error(`LOOP_RESIZE called with null window element for winId: ${targetWinId}`)\r\n\r\n requestAnimationFrame(() =>\r\n resizer[resizeDirection](getRafResizeDependencies(targetWinId), commitCb)\r\n )\r\n },\r\n}\r\n\r\nconst resizer = {\r\n e: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const minWinWidth = x - winBox.left < win.WIN_MIN_WIDTH\r\n const sizeDiff = x - winBox.right\r\n\r\n if (!minWinWidth && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: win.winWidth + sizeDiff },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.e(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n w: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = winBox.left - x\r\n\r\n if (!minWinWidth && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: win.winWidth + sizeDiff,\r\n winCoord: { pointX: x, pointY: win.winCoord.pointY },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.w(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n n: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = winBox.top - y\r\n\r\n if (!minWinHeight && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winHeight + sizeDiff,\r\n winCoord: { pointX: win.winCoord.pointX, pointY: y },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.n(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n s: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const minWinHeight = y - winBox.top < win.WIN_MIN_HEIGHT\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = y - winBox.bottom\r\n\r\n if (!minWinHeight && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winHeight + sizeDiff,\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.s(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n nw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBoundsY = y > wsRect.bottom || y < wsRect.top\r\n const cursorOutOfBoundsX = x > wsRect.right || x < wsRect.left\r\n const isCursorOutOfBounds = cursorOutOfBoundsY || cursorOutOfBoundsX\r\n if (isCursorOutOfBounds) {\r\n requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\r\n }\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n const sizeDiffY = winBox.top - y\r\n const sizeDiffX = winBox.left - x\r\n\r\n const stagedChagnes: WindowMutation[] = []\r\n\r\n if (sizeDiffY !== 0 || sizeDiffX !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: {\r\n winCoord: {\r\n pointX: minWinWidth ? win.winCoord.pointX : x,\r\n pointY: minWinHeight ? win.winCoord.pointY : y,\r\n },\r\n },\r\n })\r\n }\r\n\r\n if (!minWinHeight && sizeDiffY !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: { winHeight: win.winHeight + sizeDiffY },\r\n })\r\n }\r\n\r\n if (!minWinWidth && sizeDiffX !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: { winWidth: win.winWidth + sizeDiffX },\r\n })\r\n }\r\n\r\n commit(stagedChagnes)\r\n\r\n requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n se: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n sw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.w(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n ne: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.n(resizeDep, commit)\r\n },\r\n}\r\n\r\ntype ResizeDep = {\r\n wsRect: WorkspaceRect\r\n win: WindowStore\r\n winBox: DOMRect | undefined\r\n x: number\r\n y: number\r\n}\r\n\r\nconst getRafResizeDependencies = (winId: string): ResizeDep => {\r\n const win = windowRegistry[winId].getState()\r\n const winBox = win.winElement?.getBoundingClientRect()\r\n const wsRect = useWorkspaceState.getState().wsRect\r\n const { x, y } = useCursorState.getState()\r\n return { wsRect, win, winBox, x, y }\r\n}\r\n","import { ResizeDirection, WindowStore } from '../../model/window-types'\r\nimport { windowRegistry } from '../../registration/window-registry'\r\nimport { useWorkspaceState } from '../features/workspace/workspace-state'\r\nimport {\r\n dockCommandResolver,\r\n DockCommands,\r\n getDockDependencies,\r\n} from './dock-resolver/dock-commands'\r\nimport { rafDragLoopResolver, RafDragCommands } from './drag-resolver/drag-loop'\r\nimport { dragCommandResolver, DragCommands, isDragAllowed } from './drag-resolver/drag-commands'\r\nimport { focusCommandResolver, FocusCommands } from './focus-resolver/focus-commands'\r\nimport { stackCommandResolver, StackCommands } from './stack-resolver/stack-commands'\r\nimport {\r\n workspaceCommandResolver,\r\n WorkspaceCommands,\r\n WorkspaceCtx,\r\n} from './workspace-resolver/workspace-commands'\r\nimport { resizeCommandResolver, ResizeCommands } from './resize-resolver/resize-commands'\r\nimport { RafResizeCommands, rafResizeLoopResolver } from './resize-resolver/resize-loop'\r\nimport { WorkspaceStore } from '../../model/workspace-types'\r\n\r\n/* \r\n SUBSYSTEM\r\n - POLICY?\r\n - CTX?\r\n - STAGING\r\n - COMMIT\r\n */\r\n\r\ntype rwmMessage =\r\n | { targetWinId: string; subsystem: 'DOCK'; cmd: DockCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'DRAG'; cmd: DragCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'FOCUS'; cmd: FocusCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'RESIZE'; cmd: ResizeCommands; ctx: ResizeDirection }\r\n | { targetWinId?: string; subsystem: 'STACK'; cmd: StackCommands; ctx?: undefined }\r\n | { targetWinId?: string; subsystem: 'WORKSPACE'; cmd: WorkspaceCommands; ctx?: WorkspaceCtx }\r\n\r\nexport const rwmRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId, ctx }: rwmMessage): void => {\r\n switch (subsystem) {\r\n case 'WORKSPACE': {\r\n const stagedChanges = workspaceCommandResolver[cmd](targetWinId, ctx)\r\n commitToWorkspace(stagedChanges)\r\n break\r\n }\r\n case 'DRAG': {\r\n if (!isDragAllowed()) return\r\n const stagedChanges = dragCommandResolver[cmd](targetWinId)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'DOCK': {\r\n const { wsRect } = getDockDependencies()\r\n const stagedChanges = dockCommandResolver[cmd](targetWinId, wsRect)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'RESIZE': {\r\n const stagedChanges = resizeCommandResolver[cmd](targetWinId, ctx)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'STACK': {\r\n const stagedChanges = stackCommandResolver[cmd](targetWinId)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'FOCUS': {\r\n const stagedChanges = focusCommandResolver[cmd](targetWinId)\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n }\r\n },\r\n}\r\n\r\ntype rafMessage =\r\n | { targetWinId: string; subsystem: 'RAF_DRAG'; cmd: RafDragCommands }\r\n | { targetWinId: string; subsystem: 'RAF_RESIZE'; cmd: RafResizeCommands }\r\n\r\nexport const rafRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId }: rafMessage): void => {\r\n switch (subsystem) {\r\n case 'RAF_DRAG': {\r\n if (!isDragAllowed()) return\r\n rafDragLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n case 'RAF_RESIZE': {\r\n rafResizeLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport type BatchMutation = { ws: WorkspaceMutation; win: WindowMutation[] }\r\nfunction commitBatch({ win, ws }: BatchMutation) {\r\n commitToWorkspace(ws)\r\n commitToWindow(win)\r\n}\r\n\r\nexport type WindowMutation = { winId: string; patch: Partial<WindowStore> }\r\nfunction commitToWindow(patchStack: WindowMutation[]) {\r\n patchStack.forEach(({ winId, patch }) => {\r\n windowRegistry[winId].setState(patch)\r\n })\r\n}\r\n\r\nexport type WorkspaceMutation = Partial<WorkspaceStore>\r\nfunction commitToWorkspace(patch: WorkspaceMutation) {\r\n if (patch) {\r\n useWorkspaceState.setState(patch)\r\n }\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const dockApi = {\r\n dockWindowRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_RIGHT',\r\n }),\r\n\r\n dockWindowLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_LEFT',\r\n }),\r\n\r\n dockWindowTop: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP',\r\n }),\r\n\r\n dockWindowBottom: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM',\r\n }),\r\n\r\n dockWindowBottomRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_RIGHT',\r\n }),\r\n\r\n dockWindowTopRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_RIGHT',\r\n }),\r\n\r\n dockWindowBottomLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_LEFT',\r\n }),\r\n\r\n dockWindowTopLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_LEFT',\r\n }),\r\n\r\n maximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'MAXIMIZE_WINDOW',\r\n }),\r\n\r\n demaximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DEMAXIMIZE_WINDOW',\r\n }),\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const focusApi = {\r\n bringWindowToFocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'FOCUS_WINDOW',\r\n })\r\n },\r\n\r\n closeWindowAndRefocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'CLOSE_WINDOW_AND_REFOCUS',\r\n })\r\n },\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const stackApi = {\r\n resetStack: () => {\r\n rwmRuntime.dispatch({ subsystem: 'STACK', cmd: 'RESET_STACK' })\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { rwmRuntime } from '../../runtime/rwm-runtime'\r\nimport { WorkspaceCtx } from '../../runtime/workspace-resolver/workspace-commands'\r\n\r\nexport const wsApi = {\r\n /**\r\n * Always relative to the WorkspaceLayout dimensions. Use `wsApi.setWsResponsiveBreak` to modify the value\r\n * @default 'sm'\r\n * @param sm uses mobile format at 640px\r\n * @param md uses mobile format at 768px\r\n * @param lg uses mobile format at 1024px\r\n * @param xl uses mobile format at 1280px\r\n * @param never never uses mobile format\r\n * @param always always uses mobile format\r\n * @param number set custom break point value in px */\r\n setWsResponsiveBreak: (breakPoint: ResponsiveSizes) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_RESPONSIVE_BREAK',\r\n ctx: { responsiveBreak: breakPoint },\r\n })\r\n },\r\n\r\n setWsFeatures: ({ isDockPannelEnabled = true, isGridEnabled = true }: WorkspaceCtx) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_WORKSPACE_FEATURES',\r\n ctx: { isDockPannelEnabled: isDockPannelEnabled, isGridEnabled: isGridEnabled },\r\n })\r\n },\r\n\r\n updateWsRect: () => {\r\n rwmRuntime.dispatch({ subsystem: 'WORKSPACE', cmd: 'UPDATE_WORKSPACE_RECT' })\r\n },\r\n}\r\n","import { dockApi } from './internal/features/docking/docking-api'\r\nimport { focusApi } from './internal/features/focus/focus-api'\r\nimport { stackApi } from './internal/features/stack/stack-api'\r\nimport { wsApi } from './internal/features/workspace/workspace-api'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state'\r\nimport { windowRegistry } from './registration/window-registry'\r\n\r\nconst { updateWsRect, ...publicWsApi } = wsApi\r\n\r\nconst rwm = {\r\n dockApi: dockApi,\r\n focusApi: focusApi,\r\n stackApi: stackApi,\r\n workspaceApi: publicWsApi,\r\n\r\n /**\r\n * @about\r\n * Zustand hook, can be used to access the current state of the workspace by either\r\n * calling `const { <someState> } = worskpaceState()` inside a component or by calling\r\n * `worskpaceState.getState()` anywhere.\r\n *\r\n * @note\r\n * The hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n worskpaceState: useWorkspaceState,\r\n\r\n /**\r\n * @about\r\n * use the syntax `const { <someState> } = windowRegistry[<winId>]()` inside a component to access\r\n * the zustand hook or `windowRegistry[<winId>].getState()` to get the current state of a window anywhere\r\n *\r\n * @note\r\n * Each hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n windowRegistry: windowRegistry,\r\n}\r\n\r\nexport default rwm\r\n","import { useEffect, useRef } from 'react'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state'\r\nimport DockingControls from './internal/features/docking/docking-controls'\r\nimport { resizeApi } from './internal/features/resizing/resizing-api'\r\nimport { CursorMoveListener } from './internal/features/cursor/cursor-move-listener'\r\nimport WorkspaceResizeListener from './internal/features/workspace/workspace-resize-listener'\r\nimport { dragApi } from './internal/features/drag/drag-api'\r\n\r\ntype Props = {\r\n children: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport default function WorkspaceLayout({ children, className }: Props) {\r\n const { setWsElement, wsElement, isBelowBreakPoint, activeWindowId } = useWorkspaceState()\r\n const workspaceRef = useRef<HTMLElement | null>(null)\r\n\r\n useEffect(() => {\r\n if (!workspaceRef.current) return\r\n setWsElement(workspaceRef.current)\r\n }, [wsElement])\r\n\r\n const disabledDragAndResize = () => {\r\n dragApi.stopDrag(activeWindowId)\r\n resizeApi.stopResize(activeWindowId)\r\n }\r\n\r\n return (\r\n <section\r\n id=\"rwm-workspace-layout\"\r\n ref={workspaceRef}\r\n onPointerLeave={disabledDragAndResize}\r\n onPointerUp={disabledDragAndResize}\r\n className={className ? className : 'fixed overflow-hidden h-full w-full touch-none'}\r\n >\r\n <WorkspaceResizeListener />\r\n <CursorMoveListener />\r\n <div className=\" w-full h-full relative overflow-hidden\">\r\n {!isBelowBreakPoint && <DockingControls />}\r\n {children}\r\n </div>\r\n </section>\r\n )\r\n}\r\n","import { useState } from 'react'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../workspace/workspace-state'\r\nimport { dockApi } from './docking-api'\r\n\r\nexport default function DockingControls() {\r\n const [isHovering, setIsHovering] = useState(false)\r\n\r\n const { activeWindowId, isDockPannelEnabled, isBelowBreakPoint } = useWorkspaceState()\r\n const { isDragging } = windowRegistry[activeWindowId]()\r\n\r\n const cornerDockControl = (\r\n <div className={`flex xl:p-0 shrink-0 gap-0.5`}>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomLeft(activeWindowId)}\r\n ></button>\r\n </div>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopRight(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n </div>\r\n )\r\n\r\n const sideDideControl = (\r\n <div className={`flex shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const horizontalDockControl = (\r\n <div className={`flex flex-col shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTop(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottom(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const windowDockPannel = (\r\n <span\r\n className=\"pointer-events-auto px-4 pb-3\"\r\n onPointerOver={() => setIsHovering(true)}\r\n onPointerLeave={() => setIsHovering(false)}\r\n >\r\n <section\r\n className={`\r\n flex w-fit border border-zinc-600 border-t-0 rounded-b-md bg-zinc-800 \r\n overflow-hidden px-8 gap-4 h-full py-4 \r\n `}\r\n >\r\n {cornerDockControl}\r\n {horizontalDockControl}\r\n {sideDideControl}\r\n </section>\r\n </span>\r\n )\r\n\r\n // FIND ME\r\n /** @Note could easily add a 'drop on area to dock' feature */\r\n if (isBelowBreakPoint) return;\r\n if (!isDockPannelEnabled) return;\r\n return (\r\n <>\r\n <div\r\n className={`\r\n ${\r\n isDragging\r\n ? isHovering\r\n ? 'top-0 opacity-50'\r\n : 'top-[-68px] opacity-80'\r\n : 'top-[-104px] opacity-0'\r\n } \r\n transition-all duration-500\r\n absolute z-50 flex items-center justify-center \r\n w-full mx-auto pointer-events-none`}\r\n >\r\n {windowDockPannel}\r\n </div>\r\n </>\r\n )\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const resizeApi = {\r\n startResize: (winId: string, direction: ResizeDirection) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'ENABLE_RESIZE',\r\n ctx: direction,\r\n })\r\n rafRuntime.dispatch({ targetWinId: winId, subsystem: 'RAF_RESIZE', cmd: 'LOOP_RESIZE' })\r\n },\r\n stopResize: (winId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'DISABLE_RESIZE',\r\n ctx: false,\r\n })\r\n },\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useCursorState } from './cursor-state'\r\n\r\nexport function CursorMoveListener() {\r\n const { setXY } = useCursorState()\r\n\r\n useEffect(() => {\r\n const handleWindowPosition = (e: PointerEvent) => {\r\n e.preventDefault()\r\n setXY(e.clientX, e.clientY)\r\n }\r\n\r\n window.addEventListener('pointermove', handleWindowPosition)\r\n\r\n return () => window.removeEventListener('pointermove', handleWindowPosition)\r\n }, [setXY])\r\n\r\n return <></>\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useWorkspaceState } from './workspace-state'\r\nimport { wsApi } from './workspace-api'\r\nimport { stackApi } from '../stack/stack-api'\r\n\r\nexport default function WorkspaceResizeListener() {\r\n const { wsElement } = useWorkspaceState()\r\n\r\n useEffect(() => {\r\n if (!wsElement) return\r\n\r\n const onResize = () => {\r\n wsApi.updateWsRect()\r\n stackApi.resetStack() // FIND ME: Reset should not be needed once we figure out how to maintain proportions\r\n }\r\n\r\n onResize()\r\n const observer = new ResizeObserver(onResize)\r\n\r\n observer.observe(wsElement)\r\n return () => observer.disconnect()\r\n }, [wsElement])\r\n\r\n return <></>\r\n}\r\n","import { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const dragApi = {\r\n startDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'ENABLE_DRAG',\r\n })\r\n rafRuntime.dispatch({ targetWinId: targetWinId, subsystem: 'RAF_DRAG', cmd: 'LOOP_DRAG' })\r\n },\r\n\r\n stopDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'DISABLE_DRAG',\r\n })\r\n },\r\n}\r\n","import { create } from 'zustand'\r\nimport {\r\n RwmButtonProps,\r\n RwmWindowProps,\r\n WindowRegistration,\r\n WindowStore,\r\n} from '../model/window-types'\r\nimport WindowLayout from '../internal/features/window-layout'\r\nimport WindowButton from '../internal/features/window-button'\r\nimport { windowRegistry } from './window-registry'\r\n\r\nconst defaultMinWidth = 232\r\nconst defaultMinHeight = 128\r\n\r\n/**\r\n * @return `id` auto generated id at the root of the window component.`id` can be used in `windowRegistry` to access the state store associated to this window instnace\r\n * @return\r\n * `store` zustand state store associated to this window instnace\r\n * @return\r\n * `window` JSX component representing an interactive window\r\n * @return\r\n * `button` JSX component that control this window */\r\nexport const createWindowStore = (): WindowRegistration => {\r\n const zIndexAtLaunch = Object.keys(windowRegistry).length + 1\r\n const windowInstanceId = `react-dynamic-window-instance${Object.keys(windowRegistry).length}`\r\n\r\n const storeInstance = create<WindowStore>((set, get) => ({\r\n setWinElement: (ref: HTMLDivElement | null) => set({ winElement: ref }),\r\n winElement: undefined,\r\n windowId: windowInstanceId,\r\n resetFlag: false,\r\n\r\n zIndex: zIndexAtLaunch,\r\n winCoord: { pointX: 40, pointY: 40 },\r\n winVisualState: 'demaximized',\r\n\r\n isActive: false,\r\n isDragging: false,\r\n isWindowClosed: true,\r\n resizeAction: false,\r\n\r\n winWidth: defaultMinWidth,\r\n winHeight: defaultMinHeight,\r\n\r\n WIN_MIN_WIDTH: defaultMinWidth,\r\n WIN_MIN_HEIGHT: defaultMinHeight,\r\n }))\r\n\r\n windowRegistry[windowInstanceId] = storeInstance\r\n\r\n return {\r\n id: storeInstance.getState().windowId,\r\n\r\n store: storeInstance,\r\n\r\n Window: (props: RwmWindowProps) => <WindowLayout {...props} winId={windowInstanceId} />,\r\n\r\n Button: (props: RwmButtonProps) => <WindowButton {...props} winId={windowInstanceId} />,\r\n }\r\n}\r\n","import { useEffect, useRef } from 'react'\r\nimport { IconWinMinimize, IconWinDemaximize, IconWinMaximize } from '../assets/svg-win-icons'\r\nimport ResizingControls from './resizing/resizing-controls'\r\nimport { windowRegistry } from '../../registration/window-registry'\r\nimport { dockApi } from './docking/docking-api'\r\nimport DragHandle from './drag/drag-handle'\r\nimport { useWorkspaceState } from './workspace/workspace-state'\r\nimport { focusApi } from './focus/focus-api'\r\nimport { DockPosition } from '../../model/window-types'\r\n\r\nexport type WindowLayoutProps = {\r\n children: React.ReactNode\r\n windowName: string | React.ReactNode\r\n winId: string\r\n navbarChildren?: React.ReactNode\r\n\r\n /**\r\n * @default 'deafult'\r\n * @param `deafult` keeps the window near full width but detached from the workspace edges\r\n * @param `full`\r\n * @param `right`\r\n * @param `left`\r\n * @param `top`\r\n * @param `bottom`\r\n * @param `top-right`\r\n * @param `top-left`\r\n * @param `bottom-right`\r\n * @param `bottom-left`\r\n * */\r\n defaultDock?: DockPosition\r\n\r\n /** @note use CSS values such as hex or supported color names */\r\n style?: {\r\n navBackgroundColor?: string\r\n windowBackgroundColor?: string\r\n navControlsColor?: string\r\n }\r\n}\r\n\r\nexport default function WindowLayout({\r\n children,\r\n windowName,\r\n navbarChildren,\r\n winId,\r\n defaultDock = 'default',\r\n style,\r\n}: WindowLayoutProps) {\r\n const { wsElement, wsRect, isBelowBreakPoint } = useWorkspaceState()\r\n const windowRef = useRef<HTMLDivElement>(null)\r\n const {\r\n windowId,\r\n zIndex,\r\n isActive,\r\n setWinElement,\r\n\r\n resetFlag,\r\n\r\n winVisualState,\r\n\r\n isWindowClosed,\r\n\r\n winCoord,\r\n\r\n winWidth,\r\n winHeight,\r\n } = windowRegistry[winId]()\r\n\r\n useEffect(() => {\r\n setWinElement(windowRef.current)\r\n }, [setWinElement, windowRef.current])\r\n\r\n useEffect(() => {\r\n if (isBelowBreakPoint) {\r\n dockApi.maximizeWindow(winId)\r\n } else {\r\n dockingRoutes[defaultDock](winId)\r\n }\r\n /* Initialization is dependent on the workspace (wsElement) being mounted */\r\n }, [wsElement, resetFlag]) // FIND ME: reset flag is anti-pattern\r\n\r\n const dockingRoutes: Record<DockPosition, (winId: string) => void> = {\r\n right: dockApi.dockWindowRight,\r\n left: dockApi.dockWindowLeft,\r\n full: dockApi.maximizeWindow,\r\n top: dockApi.dockWindowTop,\r\n bottom: dockApi.dockWindowBottom,\r\n 'top-right': dockApi.dockWindowTopRight,\r\n 'top-left': dockApi.dockWindowTopLeft,\r\n 'bottom-right': dockApi.dockWindowBottomRight,\r\n 'bottom-left': dockApi.dockWindowBottomLeft,\r\n default: dockApi.demaximizeWindow,\r\n }\r\n\r\n const maximizeControl =\r\n winVisualState === 'maximized' ? (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.demaximizeWindow(winId)}\r\n >\r\n <IconWinDemaximize color={style?.navControlsColor} />\r\n </button>\r\n ) : (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.maximizeWindow(winId)}\r\n >\r\n <IconWinMaximize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n const closeControl = (\r\n <button\r\n className=\"hover:bg-red-500 hover:bg-opacity-20 px-5 h-full\"\r\n onClick={() => focusApi.closeWindowAndRefocus(winId)}\r\n >\r\n <IconWinMinimize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n return (\r\n <>\r\n <div\r\n id={windowId}\r\n ref={windowRef}\r\n className={`fixed bg-white shadow-lg border border-zinc-600 rounded-sm overflow-hidden`}\r\n onPointerDown={() => focusApi.bringWindowToFocus(windowId)}\r\n style={{\r\n backgroundColor: style?.windowBackgroundColor,\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n height: `${winHeight}px`,\r\n zIndex: `${zIndex}`,\r\n\r\n /* MINIMIZE LOGIC */\r\n transition: 'transform 0.2s ease-in-out, opacity 0.3s ease-in-out',\r\n opacity: isWindowClosed ? 0 : 1,\r\n transform: isWindowClosed\r\n ? `translate(${wsRect.innerWidth / 2 - winCoord.pointX - winWidth / 2}px,\r\n ${wsRect.innerHeight - winCoord.pointY - winHeight / 2}px) scale(0.02)`\r\n : '',\r\n }}\r\n >\r\n <nav\r\n style={{\r\n backgroundColor: style?.navBackgroundColor,\r\n }}\r\n className={`\r\n h-[32px] w-full flex items-center bg-neutral-800\r\n ${isActive ? 'brightness-100 opacity-100' : 'brightness-75 opacity-80'}`}\r\n >\r\n <div className=\"shrink h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {windowName}\r\n </div>\r\n\r\n <div className=\"h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {navbarChildren}\r\n </div>\r\n\r\n <DragHandle winId={winId} />\r\n\r\n {!isBelowBreakPoint && maximizeControl}\r\n {closeControl}\r\n </nav>\r\n\r\n {<ResizingControls winId={winId} />}\r\n\r\n {/* Offset the navbar => 'h-[calc(100%-32px)]' */}\r\n <div className={`relative w-full h-[calc(100%-32px)] overflow-auto`}>{children}</div>\r\n </div>{' '}\r\n </>\r\n )\r\n}\r\n","type Props = {\r\n color?: string\r\n}\r\n\r\nexport function IconWinMaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M5.25 7.5A2.25 2.25 0 0 1 7.5 5.25h9a2.25 2.25 0 0 1 2.25 2.25v9a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-9Z\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinDemaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M16.5 8.25V6a2.25 2.25 0 0 0-2.25-2.25H6A2.25 2.25 0 0 0 3.75 6v8.25A2.25 2.25 0 0 0 6 16.5h2.25m8.25-8.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-7.5A2.25 2.25 0 0 1 8.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 0 0-2.25 2.25v6\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinMinimize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\r\n </svg>\r\n )\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { resizeApi } from '../resizing/resizing-api'\r\nimport { useWorkspaceState } from '../workspace/workspace-state'\r\n\r\nconst tolerance = 4\r\n\r\ntype resizeCaseDependencies = {\r\n remoteId: string\r\n thisWinStartY: number\r\n thisWinEndY: number\r\n remoteWinStartY: number\r\n remoteWinEndY: number\r\n thisWinStartX: number\r\n thisWinEndX: number\r\n remoteWinStartX: number\r\n remoteWinEndX: number\r\n isRemoteOutside: boolean\r\n}\r\n\r\nexport const gridOrchestrator = {\r\n attachAdjacentGridBehavior: (winId: string) => {\r\n if (!useWorkspaceState.getState().isGridEnabled) return\r\n\r\n if (getOpenWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but all windows are closed`)\r\n\r\n if (getDraggingWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but no window is currently resizing`)\r\n\r\n attachAdjacentGridBehavior(winId)\r\n },\r\n}\r\n\r\nconst attachAdjacentGridBehavior = (winId: string, visited = new Set<string>()) => {\r\n if (visited.has(winId)) return\r\n else visited.add(winId)\r\n\r\n const thisWin = windowRegistry[winId].getState()\r\n const currentResize = thisWin.resizeAction\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (remoteWin.windowId === thisWin.windowId) continue\r\n if (remoteWin.isWindowClosed) continue\r\n if (remoteWin.resizeAction) continue\r\n if (visited.has(remoteWin.windowId)) continue\r\n\r\n const dependencies = buildDependencies(thisWin, remoteWin)\r\n\r\n /* thisWin right edge <::::> remoteWin left edge || remoteWin is stacked up or down */\r\n if (currentResize === 'e') {\r\n const isRemoteConneted = resizeCase.whenDraggingEast(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin left edge <::::> remoteWin right edge || remoteWin is stacked up or down */\r\n if (currentResize === 'w') {\r\n const isRemoteConneted = resizeCase.whenDragginWest(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin top edge <::::> remoteWin bottom edge || remoteWin is stacked left or right */\r\n if (currentResize === 'n') {\r\n const isRemoteConneted = resizeCase.whenDragginNorth(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin bottom edge <::::> remoteWin top edge || remoteWin is stacked left or right */\r\n if (currentResize === 's') {\r\n const isRemoteConneted = resizeCase.whenDraggingSouth(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n }\r\n}\r\n\r\nconst resizeCase = {\r\n whenDraggingEast: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinStartX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinEndX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginWest: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinEndX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinStartX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginNorth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinEndY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinStartY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDraggingSouth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinStartY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinEndY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n}\r\n\r\nconst buildDependencies = (thisWin: WindowStore, remoteWin: WindowStore) => {\r\n const thisWinStartY = thisWin.winCoord.pointY\r\n const thisWinEndY = thisWin.winCoord.pointY + thisWin.winHeight\r\n\r\n const remoteWinStartY = remoteWin.winCoord.pointY\r\n const remoteWinEndY = remoteWin.winCoord.pointY + remoteWin.winHeight\r\n\r\n const thisWinStartX = thisWin.winCoord.pointX\r\n const thisWinEndX = thisWin.winCoord.pointX + thisWin.winWidth\r\n\r\n const remoteWinStartX = remoteWin.winCoord.pointX\r\n const remoteWinEndX = remoteWin.winCoord.pointX + remoteWin.winWidth\r\n\r\n const isRemoteOutside =\r\n remoteWinEndY !== thisWinEndY ||\r\n remoteWinEndX !== thisWinEndX ||\r\n remoteWinStartY !== thisWinStartY ||\r\n remoteWinStartX !== thisWinStartX\r\n\r\n return {\r\n remoteId: remoteWin.windowId,\r\n thisWinStartY: thisWinStartY,\r\n thisWinEndY: thisWinEndY,\r\n remoteWinStartY: remoteWinStartY,\r\n remoteWinEndY: remoteWinEndY,\r\n thisWinStartX: thisWinStartX,\r\n thisWinEndX: thisWinEndX,\r\n remoteWinStartX: remoteWinStartX,\r\n remoteWinEndX: remoteWinEndX,\r\n isRemoteOutside: isRemoteOutside,\r\n }\r\n}\r\n\r\nconst getDraggingWinCount = () => {\r\n let isWindowResizingCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (windowRegistry[key].getState().resizeAction) isWindowResizingCount++\r\n\r\n return isWindowResizingCount\r\n}\r\n\r\nconst getOpenWinCount = () => {\r\n let openWnidowCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (!windowRegistry[key].getState().isWindowClosed) openWnidowCount++\r\n\r\n return openWnidowCount\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { resizeApi } from './resizing-api'\r\nimport { gridOrchestrator } from '../grid/grid-orchestrator'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function ResizingControls({ winId }: Props) {\r\n const { winCoord, winWidth, winHeight, resizeAction } = windowRegistry[winId]()\r\n\r\n const startResize = (direction: ResizeDirection) => {\r\n resizeApi.startResize(winId, direction)\r\n gridOrchestrator.attachAdjacentGridBehavior(winId)\r\n }\r\n\r\n const stopResize = () => {\r\n resizeApi.stopResize(winId)\r\n }\r\n\r\n return (\r\n <>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('e')}\r\n id=\"win-resize-right-width\"\r\n className={`fixed w-2 ${resizeAction === 'e' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center overflow-hidden`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX + winWidth - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('w')}\r\n id=\"win-resize-left-width\"\r\n className={`fixed w-2 ${resizeAction === 'w' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('s')}\r\n id=\"win-resize-bottom-height\"\r\n className={`fixed h-2 ${resizeAction === 's' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('n')}\r\n id=\"win-resize-top-height\"\r\n className={`fixed h-2 ${resizeAction === 'n' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('se')}\r\n id=\"win-resize-bottom-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-se-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX + winWidth - 8}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('sw')}\r\n id=\"win-resize-bottom-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-sw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX - 8}px`,\r\n }}\r\n ></span>\r\n\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('ne')}\r\n id=\"win-resize-top-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-ne-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX + winWidth - 6}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('nw')}\r\n id=\"win-resize-top-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-nw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX - 6}px`,\r\n }}\r\n ></span>\r\n </>\r\n )\r\n}\r\n","import { dockApi } from '../docking/docking-api'\r\nimport { dragApi } from './drag-api'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function DragHandle({ winId }: Props) {\r\n return (\r\n <div\r\n onPointerDown={() => dragApi.startDrag(winId)}\r\n onPointerUp={() => dragApi.stopDrag(winId)}\r\n onDoubleClick={() => dockApi.maximizeWindow(winId)}\r\n className={`\r\n grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-white bg-opacity-0 \r\n hover:bg-opacity-5 mix-blend-difference`}\r\n ></div>\r\n )\r\n}\r\n","import { windowRegistry } from '../../registration/window-registry'\r\nimport { focusApi } from './focus/focus-api'\r\n\r\nexport type WindowButtonProps = {\r\n children: React.ReactNode\r\n winId: string\r\n className?: string\r\n\r\n /** @default 'brightness-[85%] border-t-2 border-t-transparent' */\r\n isClosedClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-t-transparent' */\r\n isOpenClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10' */\r\n isActiveClassName?: string\r\n}\r\n\r\nexport default function WindowButton({\r\n children,\r\n winId,\r\n className,\r\n isClosedClassName = 'brightness-[85%] border-t-2 border-t-transparent',\r\n isOpenClassName = 'brightness-150 border-t-2 border-t-transparent',\r\n isActiveClassName = 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10',\r\n}: WindowButtonProps) {\r\n const { isWindowClosed, windowId, isActive } = windowRegistry[winId]()\r\n\r\n const handleOpenCloseWin = () => {\r\n if (!isWindowClosed && isActive) {\r\n focusApi.closeWindowAndRefocus(windowId)\r\n } else {\r\n focusApi.bringWindowToFocus(windowId)\r\n }\r\n }\r\n\r\n return (\r\n <button\r\n id={`${windowId}_button`}\r\n onClick={handleOpenCloseWin}\r\n className={`\r\n ${className} \r\n ${isWindowClosed ? isClosedClassName : isActive ? isActiveClassName : isOpenClassName}`}\r\n >\r\n {children}\r\n </button>\r\n )\r\n}\r\n"],"mappings":"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","names":["create","useEffect","Fragment","jsx","useEffect","Fragment","jsx","useEffect","jsx","jsxs","useEffect","create","useEffect","useRef","jsx","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","useRef","useEffect","jsx","jsx","create"]}
|
|
1
|
+
{"version":3,"sources":["../src/window-manager/registration/window-registry.ts","../src/window-manager/internal/features/workspace/workspace-state.ts","../src/window-manager/internal/runtime/dock-resolver/dock-commands.ts","../src/window-manager/internal/features/cursor/cursor-state.ts","../src/window-manager/internal/runtime/drag-resolver/drag-loop.ts","../src/window-manager/internal/runtime/drag-resolver/drag-commands.ts","../src/window-manager/internal/runtime/focus-resolver/focus-commands.ts","../src/window-manager/internal/runtime/stack-resolver/stack-commands.ts","../src/window-manager/internal/runtime/workspace-resolver/workspace-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-loop.ts","../src/window-manager/internal/runtime/rwm-runtime.ts","../src/window-manager/internal/features/docking/docking-api.ts","../src/window-manager/internal/features/focus/focus-api.ts","../src/window-manager/internal/features/stack/stack-api.ts","../src/window-manager/internal/features/workspace/workspace-api.ts","../src/window-manager/rwm.ts","../src/window-manager/workspace-layout.tsx","../src/window-manager/internal/features/docking/docking-controls.tsx","../src/window-manager/internal/features/resizing/resizing-api.ts","../src/window-manager/internal/features/cursor/cursor-move-listener.tsx","../src/window-manager/internal/features/workspace/workspace-resize-listener.tsx","../src/window-manager/internal/features/drag/drag-api.ts","../src/window-manager/registration/window-store-factory.tsx","../src/window-manager/internal/features/window-layout.tsx","../src/window-manager/internal/assets/svg-win-icons.tsx","../src/window-manager/internal/features/grid/grid-orchestrator.ts","../src/window-manager/internal/features/resizing/resizing-controls.tsx","../src/window-manager/internal/features/drag/drag-handle.tsx","../src/window-manager/internal/features/window-button.tsx"],"sourcesContent":["import { WindowRegistry } from '../model/window-types'\r\n\r\nexport const windowRegistry: WindowRegistry = {}\r\n","import { create } from 'zustand'\r\nimport { WorkspaceStore } from '../../../model/workspace-types'\r\n\r\nexport const useWorkspaceState = create<WorkspaceStore>((set, get) => ({\r\n wsElement: null,\r\n setWsElement: (el: HTMLElement | null) => set({ wsElement: el }),\r\n\r\n isGridEnabled: true,\r\n isDockPannelEnabled: true,\r\n responsiveBreak: 'sm',\r\n \r\n isBelowBreakPoint: false,\r\n activeWindowId: 'react-dynamic-window-instance0',\r\n wsRect: {\r\n top: 0,\r\n left: 0,\r\n innerHeight: 0,\r\n innerWidth: 0,\r\n bottom: 0,\r\n right: 0,\r\n centerX: 0,\r\n centerY: 0,\r\n },\r\n}))\r\n","import { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type DockCommands =\r\n | 'DOCK_WINDOW_RIGHT'\r\n | 'DOCK_WINDOW_LEFT'\r\n | 'DOCK_WINDOW_TOP'\r\n | 'DOCK_WINDOW_BOTTOM'\r\n | 'DOCK_WINDOW_BOTTOM_RIGHT'\r\n | 'DOCK_WINDOW_TOP_RIGHT'\r\n | 'DOCK_WINDOW_BOTTOM_LEFT'\r\n | 'DOCK_WINDOW_TOP_LEFT'\r\n | 'MAXIMIZE_WINDOW'\r\n | 'DEMAXIMIZE_WINDOW'\r\n\r\ntype DockResolver = Record<\r\n DockCommands,\r\n (targetWinId: string, wsRect: WorkspaceRect) => WindowMutation[]\r\n>\r\nexport const dockCommandResolver: DockResolver = {\r\n DOCK_WINDOW_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: {\r\n pointX: wsRect.centerX,\r\n pointY: wsRect.centerY,\r\n },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n MAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winHeight: wsRect.innerHeight,\r\n winWidth: wsRect.innerWidth,\r\n winVisualState: 'maximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DEMAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 16 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n\r\nexport const getDockDependencies = () => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n return { wsRect }\r\n}\r\n","import { create } from 'zustand'\r\n\r\ntype CursorState = {\r\n x: number\r\n y: number\r\n setXY: (x: number, y: number) => void\r\n}\r\n\r\nexport const useCursorState = create<CursorState>((set) => ({\r\n x: 10,\r\n y: 10,\r\n setXY: (x: number, y: number) => set({ x: x, y: y }),\r\n}))\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { useCursorState } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type RafDragCommands = 'LOOP_DRAG'\r\n\r\ntype RafDragResolver = Record<\r\n RafDragCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafDragLoopResolver: RafDragResolver = {\r\n LOOP_DRAG: (targetWinId: string, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { x, y } = useCursorState.getState()\r\n const { winCoord, isDragging, windowId } = windowRegistry[targetWinId].getState()\r\n\r\n if (!isDragging)\r\n throw new Error(`LOOP_DRAG called with isDragging false for winId: ${windowId}`)\r\n\r\n const pointerOffset = {\r\n left: x - winCoord.pointX,\r\n top: y - winCoord.pointY,\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n },\r\n}\r\n\r\ntype PointerOffset = { left: number; top: number }\r\nconst dragLoop = (\r\n targetWinId: string,\r\n pointerOffset: PointerOffset,\r\n commit: (patchStack: WindowMutation[]) => void\r\n) => {\r\n const { winCoord, isDragging } = windowRegistry[targetWinId].getState()\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { x, y } = useCursorState.getState()\r\n if (!isDragging) return\r\n\r\n let adjustedX = Math.round(x - pointerOffset.left)\r\n if (x > wsRect.right || x < wsRect.left) adjustedX = winCoord.pointX\r\n let adjustedY = Math.round(y - pointerOffset.top)\r\n if (y > wsRect.bottom || y < wsRect.top) adjustedY = winCoord.pointY\r\n\r\n if (adjustedX !== winCoord.pointX || adjustedY !== winCoord.pointY) {\r\n commit([\r\n {\r\n winId: targetWinId,\r\n patch: { winCoord: { pointX: adjustedX, pointY: adjustedY } },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type DragCommands = 'ENABLE_DRAG' | 'DISABLE_DRAG'\r\n\r\ntype DragResolver = Record<DragCommands, (targetWinId: string) => WindowMutation[]>\r\nexport const dragCommandResolver: DragResolver = {\r\n ENABLE_DRAG: (targetWinId: string) => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { winVisualState } = windowRegistry[targetWinId].getState()\r\n\r\n const patch: Partial<WindowStore> =\r\n winVisualState === 'maximized'\r\n ? {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 4 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: true,\r\n }\r\n : { isDragging: true }\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: patch,\r\n },\r\n ]\r\n },\r\n DISABLE_DRAG: (targetWinId: string) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n\r\nexport const isDragAllowed = (): boolean => {\r\n return !useWorkspaceState.getState().isBelowBreakPoint\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { BatchMutation, WindowMutation, WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type FocusCommands = 'FOCUS_WINDOW' | 'CLOSE_WINDOW_AND_REFOCUS'\r\n\r\ntype FocusResolver = Record<FocusCommands, (targetWinId: string) => BatchMutation>\r\nexport const focusCommandResolver: FocusResolver = {\r\n FOCUS_WINDOW: (targetWinId: string) => {\r\n const targetWin = windowRegistry[targetWinId].getState()\r\n if (targetWin.isActive && !targetWin.isWindowClosed) return { win: [], ws: {} }\r\n\r\n const newStackOrderUpdate: WindowMutation[] = []\r\n const workspaceUpdate: WorkspaceMutation = { activeWindowId: targetWinId }\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const otherWin = windowRegistry[key].getState()\r\n if (otherWin.windowId === targetWin.windowId) continue\r\n\r\n const adjustedIndex =\r\n otherWin.zIndex >= targetWin.zIndex ? otherWin.zIndex - 1 : otherWin.zIndex\r\n\r\n newStackOrderUpdate.push({\r\n winId: otherWin.windowId,\r\n patch: {\r\n isActive: false,\r\n zIndex: adjustedIndex,\r\n },\r\n })\r\n }\r\n\r\n newStackOrderUpdate.push({\r\n winId: targetWin.windowId,\r\n patch: {\r\n isWindowClosed: false,\r\n isActive: true,\r\n zIndex: newStackOrderUpdate.length + 1,\r\n },\r\n })\r\n\r\n return {\r\n win: newStackOrderUpdate,\r\n ws: workspaceUpdate,\r\n }\r\n },\r\n CLOSE_WINDOW_AND_REFOCUS: (targetWinId: string) => {\r\n const isTargetWinClosed = windowRegistry[targetWinId].getState().isWindowClosed\r\n if (isTargetWinClosed) return { win: [], ws: {} }\r\n\r\n let prevIndex = 0\r\n let highestIndexWinId: string | undefined = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { zIndex, windowId, isWindowClosed } = windowRegistry[key].getState()\r\n if (windowId === targetWinId) continue\r\n if (isWindowClosed) continue\r\n\r\n if (zIndex > prevIndex) {\r\n prevIndex = zIndex\r\n highestIndexWinId = windowId\r\n }\r\n }\r\n\r\n return !highestIndexWinId\r\n ? {\r\n ws: {},\r\n win: [\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n : {\r\n ws: { activeWindowId: highestIndexWinId },\r\n win: [\r\n {\r\n winId: highestIndexWinId,\r\n patch: { isActive: true },\r\n },\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n },\r\n}\r\n","import { windowRegistry } from \"../../../registration/window-registry\"\r\nimport { WindowMutation } from \"../rwm-runtime\"\r\n\r\nexport type StackCommands = 'RESET_STACK'\r\n\r\ntype StackResolver = Record<StackCommands, (targetWinId?: string) => WindowMutation[]>\r\nexport const stackCommandResolver: StackResolver = {\r\n RESET_STACK: () => {\r\n const batchUpdate: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { resetFlag } = windowRegistry[key].getState()\r\n batchUpdate.push({\r\n winId: key,\r\n patch: {\r\n resetFlag: !resetFlag, // FIND ME: reset flag is anti-pattern\r\n isWindowClosed: true,\r\n isActive: false,\r\n },\r\n })\r\n }\r\n\r\n return batchUpdate\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type WorkspaceCommands =\r\n | 'UPDATE_WORKSPACE_RECT'\r\n | 'SET_RESPONSIVE_BREAK'\r\n | 'SET_WORKSPACE_FEATURES'\r\n\r\nexport type WorkspaceCtx = {\r\n responsiveBreak?: ResponsiveSizes\r\n isDockPannelEnabled?: boolean\r\n isGridEnabled?: boolean\r\n}\r\n\r\ntype WorkspaceResolver = Record<\r\n WorkspaceCommands,\r\n (targetWinId?: string, ctx?: WorkspaceCtx) => WorkspaceMutation\r\n>\r\nexport const workspaceCommandResolver: WorkspaceResolver = {\r\n UPDATE_WORKSPACE_RECT: () => {\r\n const rect = useWorkspaceState.getState().wsElement?.getBoundingClientRect()\r\n const top = rect?.top ?? 0\r\n const left = rect?.left ?? 0\r\n const innerHeight = rect?.height ?? 0\r\n const innerWidth = rect?.width ?? 0\r\n const bottom = top + innerHeight\r\n const right = left + innerWidth\r\n const centerX = left + innerWidth / 2\r\n const centerY = top + innerHeight / 2\r\n\r\n const breakPoint = useWorkspaceState.getState().responsiveBreak\r\n const isBelowBreakPoint = innerWidth < responsiveBreakInPx(breakPoint)\r\n\r\n return {\r\n isBelowBreakPoint: isBelowBreakPoint,\r\n wsRect: {\r\n top: top,\r\n left: left,\r\n innerHeight: innerHeight,\r\n innerWidth: innerWidth,\r\n bottom: bottom,\r\n right: right,\r\n centerX: centerX,\r\n centerY: centerY,\r\n },\r\n }\r\n },\r\n\r\n SET_WORKSPACE_FEATURES: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.isGridEnabled === undefined || ctx?.isDockPannelEnabled === undefined)\r\n throw new Error(`SET_WORKSPACE_FEATURES called without a ctx value`)\r\n\r\n return {\r\n isGridEnabled: ctx.isGridEnabled,\r\n isDockPannelEnabled: ctx.isDockPannelEnabled,\r\n }\r\n },\r\n\r\n SET_RESPONSIVE_BREAK: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.responsiveBreak === undefined || ctx?.responsiveBreak === null)\r\n throw new Error(`SET_RESPONSIVE_BREAK called without a ctx value`)\r\n\r\n return {\r\n responsiveBreak: ctx.responsiveBreak,\r\n }\r\n },\r\n}\r\n\r\nconst responsiveBreakInPx = (breakPoint: ResponsiveSizes): number => {\r\n switch (breakPoint) {\r\n case 'sm':\r\n return 640\r\n case 'md':\r\n return 768\r\n case 'lg':\r\n return 1024\r\n case 'xl':\r\n return 1280\r\n case 'never':\r\n return 0\r\n case 'always':\r\n return Infinity\r\n default:\r\n return breakPoint\r\n }\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type ResizeCommands = 'ENABLE_RESIZE' | 'DISABLE_RESIZE'\r\n\r\ntype ResizeResolver = Record<\r\n ResizeCommands,\r\n (targetWinId: string, ctx: ResizeDirection) => WindowMutation[]\r\n>\r\nexport const resizeCommandResolver: ResizeResolver = {\r\n ENABLE_RESIZE: (targetWinId: string, direction: ResizeDirection) => {\r\n const currentResizeAction = windowRegistry[targetWinId].getState().resizeAction\r\n if (currentResizeAction)\r\n throw new Error(`ENABLE_RESIZE called on a window that is already risizing`)\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n resizeAction: direction,\r\n winVisualState: 'demaximized',\r\n },\r\n },\r\n ]\r\n },\r\n DISABLE_RESIZE: (_: string) => {\r\n const patch: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry))\r\n patch.push({\r\n winId: key,\r\n patch: {\r\n resizeAction: false,\r\n },\r\n })\r\n\r\n return patch\r\n },\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useCursorState } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type RafResizeCommands = 'LOOP_RESIZE'\r\ntype RafResizeResolver = Record<\r\n RafResizeCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafResizeLoopResolver: RafResizeResolver = {\r\n LOOP_RESIZE: (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => {\r\n const dep = getRafResizeDependencies(targetWinId)\r\n\r\n const resizeDirection = dep.win.resizeAction\r\n if (!resizeDirection)\r\n throw new Error(`LOOP_RESIZE called with resizeAction as false for winId: ${targetWinId}`)\r\n\r\n const winElementBox = dep.winBox\r\n if (!winElementBox)\r\n throw new Error(`LOOP_RESIZE called with null window element for winId: ${targetWinId}`)\r\n\r\n requestAnimationFrame(() =>\r\n resizer[resizeDirection](getRafResizeDependencies(targetWinId), commitCb)\r\n )\r\n },\r\n}\r\n\r\nconst resizer = {\r\n e: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const minWinWidth = x - winBox.left < win.WIN_MIN_WIDTH\r\n const sizeDiff = x - winBox.right\r\n\r\n if (!minWinWidth && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: Math.round(win.winWidth + sizeDiff) },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.e(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n w: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = winBox.left - x\r\n\r\n if (!minWinWidth && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: Math.round(win.winWidth + sizeDiff),\r\n winCoord: { pointX: x, pointY: win.winCoord.pointY },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.w(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n n: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = winBox.top - y\r\n\r\n if (!minWinHeight && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: Math.round(win.winHeight + sizeDiff),\r\n winCoord: { pointX: win.winCoord.pointX, pointY: y },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.n(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n s: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const minWinHeight = y - winBox.top < win.WIN_MIN_HEIGHT\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = y - winBox.bottom\r\n\r\n if (!minWinHeight && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: Math.round(win.winHeight + sizeDiff),\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.s(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n nw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBoundsY = y > wsRect.bottom || y < wsRect.top\r\n const cursorOutOfBoundsX = x > wsRect.right || x < wsRect.left\r\n const isCursorOutOfBounds = cursorOutOfBoundsY || cursorOutOfBoundsX\r\n if (isCursorOutOfBounds) {\r\n requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\r\n }\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n const sizeDiffY = winBox.top - y\r\n const sizeDiffX = winBox.left - x\r\n\r\n const stagedChagnes: WindowMutation[] = []\r\n\r\n if (sizeDiffY !== 0 || sizeDiffX !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: {\r\n winCoord: {\r\n pointX: minWinWidth ? win.winCoord.pointX : x,\r\n pointY: minWinHeight ? win.winCoord.pointY : y,\r\n },\r\n },\r\n })\r\n }\r\n\r\n if (!minWinHeight && sizeDiffY !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: { winHeight: Math.round(win.winHeight + sizeDiffY) },\r\n })\r\n }\r\n\r\n if (!minWinWidth && sizeDiffX !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: { winWidth: Math.round(win.winWidth + sizeDiffX) },\r\n })\r\n }\r\n\r\n commit(stagedChagnes)\r\n\r\n requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n se: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n sw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.w(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n ne: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.n(resizeDep, commit)\r\n },\r\n}\r\n\r\ntype ResizeDep = {\r\n wsRect: WorkspaceRect\r\n win: WindowStore\r\n winBox: DOMRect | undefined\r\n x: number\r\n y: number\r\n}\r\n\r\nconst getRafResizeDependencies = (winId: string): ResizeDep => {\r\n const win = windowRegistry[winId].getState()\r\n const winBox = win.winElement?.getBoundingClientRect()\r\n const wsRect = useWorkspaceState.getState().wsRect\r\n const { x, y } = useCursorState.getState()\r\n return { wsRect, win, winBox, x, y }\r\n}\r\n","import { ResizeDirection, WindowStore } from '../../model/window-types'\r\nimport { windowRegistry } from '../../registration/window-registry'\r\nimport { useWorkspaceState } from '../features/workspace/workspace-state'\r\nimport {\r\n dockCommandResolver,\r\n DockCommands,\r\n getDockDependencies,\r\n} from './dock-resolver/dock-commands'\r\nimport { rafDragLoopResolver, RafDragCommands } from './drag-resolver/drag-loop'\r\nimport { dragCommandResolver, DragCommands, isDragAllowed } from './drag-resolver/drag-commands'\r\nimport { focusCommandResolver, FocusCommands } from './focus-resolver/focus-commands'\r\nimport { stackCommandResolver, StackCommands } from './stack-resolver/stack-commands'\r\nimport {\r\n workspaceCommandResolver,\r\n WorkspaceCommands,\r\n WorkspaceCtx,\r\n} from './workspace-resolver/workspace-commands'\r\nimport { resizeCommandResolver, ResizeCommands } from './resize-resolver/resize-commands'\r\nimport { RafResizeCommands, rafResizeLoopResolver } from './resize-resolver/resize-loop'\r\nimport { WorkspaceStore } from '../../model/workspace-types'\r\n\r\n/* \r\n SUBSYSTEM\r\n - POLICY?\r\n - CTX?\r\n - STAGING\r\n - COMMIT\r\n */\r\n\r\ntype rwmMessage =\r\n | { targetWinId: string; subsystem: 'DOCK'; cmd: DockCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'DRAG'; cmd: DragCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'FOCUS'; cmd: FocusCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'RESIZE'; cmd: ResizeCommands; ctx: ResizeDirection }\r\n | { targetWinId?: string; subsystem: 'STACK'; cmd: StackCommands; ctx?: undefined }\r\n | { targetWinId?: string; subsystem: 'WORKSPACE'; cmd: WorkspaceCommands; ctx?: WorkspaceCtx }\r\n\r\nexport const rwmRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId, ctx }: rwmMessage): void => {\r\n switch (subsystem) {\r\n case 'WORKSPACE': {\r\n const stagedChanges = workspaceCommandResolver[cmd](targetWinId, ctx)\r\n commitToWorkspace(stagedChanges)\r\n break\r\n }\r\n case 'DRAG': {\r\n if (!isDragAllowed()) return\r\n const stagedChanges = dragCommandResolver[cmd](targetWinId)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'DOCK': {\r\n const { wsRect } = getDockDependencies()\r\n const stagedChanges = dockCommandResolver[cmd](targetWinId, wsRect)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'RESIZE': {\r\n const stagedChanges = resizeCommandResolver[cmd](targetWinId, ctx)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'STACK': {\r\n const stagedChanges = stackCommandResolver[cmd](targetWinId)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'FOCUS': {\r\n const stagedChanges = focusCommandResolver[cmd](targetWinId)\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n }\r\n },\r\n}\r\n\r\ntype rafMessage =\r\n | { targetWinId: string; subsystem: 'RAF_DRAG'; cmd: RafDragCommands }\r\n | { targetWinId: string; subsystem: 'RAF_RESIZE'; cmd: RafResizeCommands }\r\n\r\nexport const rafRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId }: rafMessage): void => {\r\n switch (subsystem) {\r\n case 'RAF_DRAG': {\r\n if (!isDragAllowed()) return\r\n rafDragLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n case 'RAF_RESIZE': {\r\n rafResizeLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport type BatchMutation = { ws: WorkspaceMutation; win: WindowMutation[] }\r\nfunction commitBatch({ win, ws }: BatchMutation) {\r\n commitToWorkspace(ws)\r\n commitToWindow(win)\r\n}\r\n\r\nexport type WindowMutation = { winId: string; patch: Partial<WindowStore> }\r\nfunction commitToWindow(patchStack: WindowMutation[]) {\r\n patchStack.forEach(({ winId, patch }) => {\r\n windowRegistry[winId].setState(patch)\r\n })\r\n}\r\n\r\nexport type WorkspaceMutation = Partial<WorkspaceStore>\r\nfunction commitToWorkspace(patch: WorkspaceMutation) {\r\n if (patch) {\r\n useWorkspaceState.setState(patch)\r\n }\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const dockApi = {\r\n dockWindowRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_RIGHT',\r\n }),\r\n\r\n dockWindowLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_LEFT',\r\n }),\r\n\r\n dockWindowTop: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP',\r\n }),\r\n\r\n dockWindowBottom: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM',\r\n }),\r\n\r\n dockWindowBottomRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_RIGHT',\r\n }),\r\n\r\n dockWindowTopRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_RIGHT',\r\n }),\r\n\r\n dockWindowBottomLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_LEFT',\r\n }),\r\n\r\n dockWindowTopLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_LEFT',\r\n }),\r\n\r\n maximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'MAXIMIZE_WINDOW',\r\n }),\r\n\r\n demaximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DEMAXIMIZE_WINDOW',\r\n }),\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const focusApi = {\r\n bringWindowToFocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'FOCUS_WINDOW',\r\n })\r\n },\r\n\r\n closeWindowAndRefocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'CLOSE_WINDOW_AND_REFOCUS',\r\n })\r\n },\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const stackApi = {\r\n resetStack: () => {\r\n rwmRuntime.dispatch({ subsystem: 'STACK', cmd: 'RESET_STACK' })\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { rwmRuntime } from '../../runtime/rwm-runtime'\r\nimport { WorkspaceCtx } from '../../runtime/workspace-resolver/workspace-commands'\r\n\r\nexport const wsApi = {\r\n /**\r\n * Always relative to the WorkspaceLayout dimensions. Use `wsApi.setWsResponsiveBreak` to modify the value\r\n * @default 'sm'\r\n * @param sm uses mobile format at 640px\r\n * @param md uses mobile format at 768px\r\n * @param lg uses mobile format at 1024px\r\n * @param xl uses mobile format at 1280px\r\n * @param never never uses mobile format\r\n * @param always always uses mobile format\r\n * @param number set custom break point value in px */\r\n setWsResponsiveBreak: (breakPoint: ResponsiveSizes) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_RESPONSIVE_BREAK',\r\n ctx: { responsiveBreak: breakPoint },\r\n })\r\n },\r\n\r\n setWsFeatures: ({ isDockPannelEnabled = true, isGridEnabled = true }: WorkspaceCtx) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_WORKSPACE_FEATURES',\r\n ctx: { isDockPannelEnabled: isDockPannelEnabled, isGridEnabled: isGridEnabled },\r\n })\r\n },\r\n\r\n updateWsRect: () => {\r\n rwmRuntime.dispatch({ subsystem: 'WORKSPACE', cmd: 'UPDATE_WORKSPACE_RECT' })\r\n },\r\n}\r\n","import { dockApi } from './internal/features/docking/docking-api'\r\nimport { focusApi } from './internal/features/focus/focus-api'\r\nimport { stackApi } from './internal/features/stack/stack-api'\r\nimport { wsApi } from './internal/features/workspace/workspace-api'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state'\r\nimport { windowRegistry } from './registration/window-registry'\r\n\r\nconst { updateWsRect, ...publicWsApi } = wsApi\r\n\r\nconst rwm = {\r\n dockApi: dockApi,\r\n focusApi: focusApi,\r\n stackApi: stackApi,\r\n workspaceApi: publicWsApi,\r\n\r\n /**\r\n * @about\r\n * Zustand hook, can be used to access the current state of the workspace by either\r\n * calling `const { <someState> } = worskpaceState()` inside a component or by calling\r\n * `worskpaceState.getState()` anywhere.\r\n *\r\n * @note\r\n * The hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n worskpaceState: useWorkspaceState,\r\n\r\n /**\r\n * @about\r\n * use the syntax `const { <someState> } = windowRegistry[<winId>]()` inside a component to access\r\n * the zustand hook or `windowRegistry[<winId>].getState()` to get the current state of a window anywhere\r\n *\r\n * @note\r\n * Each hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n windowRegistry: windowRegistry,\r\n}\r\n\r\nexport default rwm\r\n","import { useEffect, useRef } from 'react'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state'\r\nimport DockingControls from './internal/features/docking/docking-controls'\r\nimport { resizeApi } from './internal/features/resizing/resizing-api'\r\nimport { CursorMoveListener } from './internal/features/cursor/cursor-move-listener'\r\nimport WorkspaceResizeListener from './internal/features/workspace/workspace-resize-listener'\r\nimport { dragApi } from './internal/features/drag/drag-api'\r\n\r\ntype Props = {\r\n children: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport default function WorkspaceLayout({ children, className }: Props) {\r\n const { setWsElement, wsElement, isBelowBreakPoint, activeWindowId } = useWorkspaceState()\r\n const workspaceRef = useRef<HTMLElement | null>(null)\r\n\r\n useEffect(() => {\r\n if (!workspaceRef.current) return\r\n setWsElement(workspaceRef.current)\r\n }, [wsElement])\r\n\r\n const disabledDragAndResize = () => {\r\n dragApi.stopDrag(activeWindowId)\r\n resizeApi.stopResize(activeWindowId)\r\n }\r\n\r\n return (\r\n <section\r\n id=\"rwm-workspace-layout\"\r\n ref={workspaceRef}\r\n onPointerLeave={disabledDragAndResize}\r\n onPointerUp={disabledDragAndResize}\r\n className={className ? className : 'fixed overflow-hidden h-full w-full touch-none -z-50'}\r\n >\r\n <WorkspaceResizeListener />\r\n <CursorMoveListener />\r\n <div className=\" w-full h-full relative overflow-hidden\">\r\n {!isBelowBreakPoint && <DockingControls />}\r\n {children}\r\n </div>\r\n </section>\r\n )\r\n}\r\n","import { useState } from 'react'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../workspace/workspace-state'\r\nimport { dockApi } from './docking-api'\r\n\r\nexport default function DockingControls() {\r\n const [isHovering, setIsHovering] = useState(false)\r\n \r\n const { activeWindowId, isDockPannelEnabled, isBelowBreakPoint } = useWorkspaceState()\r\n const { isDragging } = windowRegistry[activeWindowId]()\r\n\r\n const cornerDockControl = (\r\n <div className={`flex xl:p-0 shrink-0 gap-0.5`}>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomLeft(activeWindowId)}\r\n ></button>\r\n </div>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopRight(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n </div>\r\n )\r\n\r\n const sideDideControl = (\r\n <div className={`flex shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const horizontalDockControl = (\r\n <div className={`flex flex-col shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTop(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottom(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const windowDockPannel = (\r\n <span\r\n className=\"pointer-events-auto px-4 pb-3\"\r\n onPointerOver={() => setIsHovering(true)}\r\n onPointerLeave={() => setIsHovering(false)}\r\n >\r\n <section\r\n className={`\r\n flex w-fit border border-zinc-600 border-t-0 rounded-b-md bg-zinc-800 \r\n overflow-hidden px-8 gap-4 h-full py-4 \r\n `}\r\n >\r\n {cornerDockControl}\r\n {horizontalDockControl}\r\n {sideDideControl}\r\n </section>\r\n </span>\r\n )\r\n\r\n // FIND ME\r\n /** @Note could easily add a 'drop on area to dock' feature */\r\n if (isBelowBreakPoint) return;\r\n if (!isDockPannelEnabled) return;\r\n return (\r\n <>\r\n <div\r\n className={`\r\n ${\r\n isDragging\r\n ? isHovering\r\n ? 'top-0 opacity-50'\r\n : 'top-[-68px] opacity-80'\r\n : 'top-[-104px] opacity-0'\r\n } \r\n transition-all duration-500\r\n absolute z-50 flex items-center justify-center \r\n w-full mx-auto pointer-events-none`}\r\n >\r\n {windowDockPannel}\r\n </div>\r\n </>\r\n )\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const resizeApi = {\r\n startResize: (winId: string, direction: ResizeDirection) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'ENABLE_RESIZE',\r\n ctx: direction,\r\n })\r\n rafRuntime.dispatch({ targetWinId: winId, subsystem: 'RAF_RESIZE', cmd: 'LOOP_RESIZE' })\r\n },\r\n stopResize: (winId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'DISABLE_RESIZE',\r\n ctx: false,\r\n })\r\n },\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useCursorState } from './cursor-state'\r\n\r\nexport function CursorMoveListener() {\r\n const { setXY } = useCursorState()\r\n\r\n useEffect(() => {\r\n const handlePointerMove = (e: PointerEvent) => {\r\n e.preventDefault()\r\n setXY(e.clientX, e.clientY)\r\n }\r\n\r\n window.addEventListener('pointermove', handlePointerMove)\r\n\r\n return () => window.removeEventListener('pointermove', handlePointerMove)\r\n }, [setXY])\r\n\r\n return <></>\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useWorkspaceState } from './workspace-state'\r\nimport { wsApi } from './workspace-api'\r\nimport { stackApi } from '../stack/stack-api'\r\n\r\nexport default function WorkspaceResizeListener() {\r\n const { wsElement } = useWorkspaceState()\r\n\r\n useEffect(() => {\r\n if (!wsElement) return\r\n\r\n const onResize = () => {\r\n wsApi.updateWsRect()\r\n stackApi.resetStack() // FIND ME: Reset should not be needed once we figure out how to maintain proportions\r\n }\r\n\r\n onResize()\r\n const observer = new ResizeObserver(onResize)\r\n\r\n observer.observe(wsElement)\r\n return () => observer.disconnect()\r\n }, [wsElement])\r\n\r\n return <></>\r\n}\r\n","import { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const dragApi = {\r\n startDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'ENABLE_DRAG',\r\n })\r\n rafRuntime.dispatch({ targetWinId: targetWinId, subsystem: 'RAF_DRAG', cmd: 'LOOP_DRAG' })\r\n },\r\n\r\n stopDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'DISABLE_DRAG',\r\n })\r\n },\r\n}\r\n","import { create } from 'zustand'\r\nimport {\r\n RwmButtonProps,\r\n RwmWindowProps,\r\n WindowRegistration,\r\n WindowStore,\r\n} from '../model/window-types'\r\nimport WindowLayout from '../internal/features/window-layout'\r\nimport WindowButton from '../internal/features/window-button'\r\nimport { windowRegistry } from './window-registry'\r\n\r\nconst defaultMinWidth = 232\r\nconst defaultMinHeight = 128\r\n\r\n/**\r\n * @return `id` auto generated id at the root of the window component.`id` can be used in `windowRegistry` to access the state store associated to this window instnace\r\n * @return\r\n * `store` zustand state store associated to this window instnace\r\n * @return\r\n * `window` JSX component representing an interactive window\r\n * @return\r\n * `button` JSX component that control this window */\r\nexport const createWindowStore = (): WindowRegistration => {\r\n const zIndexAtLaunch = Object.keys(windowRegistry).length + 1\r\n const windowInstanceId = `react-dynamic-window-instance${Object.keys(windowRegistry).length}`\r\n\r\n const storeInstance = create<WindowStore>((set, get) => ({\r\n setWinElement: (ref: HTMLDivElement | null) => set({ winElement: ref }),\r\n winElement: undefined,\r\n windowId: windowInstanceId,\r\n resetFlag: false,\r\n\r\n zIndex: zIndexAtLaunch,\r\n winCoord: { pointX: 40, pointY: 40 },\r\n winVisualState: 'demaximized',\r\n\r\n isActive: false,\r\n isDragging: false,\r\n isWindowClosed: true,\r\n resizeAction: false,\r\n\r\n winWidth: defaultMinWidth,\r\n winHeight: defaultMinHeight,\r\n\r\n WIN_MIN_WIDTH: defaultMinWidth,\r\n WIN_MIN_HEIGHT: defaultMinHeight,\r\n }))\r\n\r\n windowRegistry[windowInstanceId] = storeInstance\r\n\r\n return {\r\n id: storeInstance.getState().windowId,\r\n\r\n store: storeInstance,\r\n\r\n Window: (props: RwmWindowProps) => <WindowLayout {...props} winId={windowInstanceId} />,\r\n\r\n Button: (props: RwmButtonProps) => <WindowButton {...props} winId={windowInstanceId} />,\r\n }\r\n}\r\n","import { useEffect, useRef } from 'react'\r\nimport { IconWinMinimize, IconWinDemaximize, IconWinMaximize } from '../assets/svg-win-icons'\r\nimport ResizingControls from './resizing/resizing-controls'\r\nimport { windowRegistry } from '../../registration/window-registry'\r\nimport { dockApi } from './docking/docking-api'\r\nimport DragHandle from './drag/drag-handle'\r\nimport { useWorkspaceState } from './workspace/workspace-state'\r\nimport { focusApi } from './focus/focus-api'\r\nimport { DockPosition } from '../../model/window-types'\r\n\r\nexport type WindowLayoutProps = {\r\n children: React.ReactNode\r\n windowName: string | React.ReactNode\r\n winId: string\r\n navbarChildren?: React.ReactNode\r\n\r\n /**\r\n * @default\r\n * 'bg-white shadow-lg border border-zinc-600 rounded-sm'\r\n */\r\n className?: string\r\n\r\n /**\r\n * @default\r\n * 'bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}'\r\n */\r\n navbarClassName?: string\r\n\r\n /**\r\n * @default 'deafult'\r\n * @param `deafult` keeps the window near full width but detached from the workspace edges\r\n * @param `full`\r\n * @param `right`\r\n * @param `left`\r\n * @param `top`\r\n * @param `bottom`\r\n * @param `top-right`\r\n * @param `top-left`\r\n * @param `bottom-right`\r\n * @param `bottom-left`\r\n * */\r\n defaultDock?: DockPosition\r\n\r\n /** @note use CSS values such as hex or supported color names */\r\n style?: {\r\n navBackgroundColor?: string\r\n windowBackgroundColor?: string\r\n navControlsColor?: string\r\n }\r\n}\r\n\r\nexport default function WindowLayout({\r\n children,\r\n windowName,\r\n navbarChildren,\r\n navbarClassName,\r\n className,\r\n winId,\r\n defaultDock = 'default',\r\n style,\r\n}: WindowLayoutProps) {\r\n const { wsElement, wsRect, isBelowBreakPoint } = useWorkspaceState()\r\n const windowRef = useRef<HTMLDivElement>(null)\r\n const {\r\n windowId,\r\n zIndex,\r\n isActive,\r\n setWinElement,\r\n\r\n resetFlag,\r\n\r\n winVisualState,\r\n\r\n isWindowClosed,\r\n\r\n winCoord,\r\n\r\n winWidth,\r\n winHeight,\r\n } = windowRegistry[winId]()\r\n\r\n useEffect(() => {\r\n setWinElement(windowRef.current)\r\n }, [setWinElement, windowRef.current])\r\n\r\n useEffect(() => {\r\n if (isBelowBreakPoint) {\r\n dockApi.maximizeWindow(winId)\r\n } else {\r\n dockingRoutes[defaultDock](winId)\r\n }\r\n /* Initialization is dependent on the workspace (wsElement) being mounted */\r\n }, [wsElement, resetFlag]) // FIND ME: reset flag is anti-pattern\r\n\r\n const dockingRoutes: Record<DockPosition, (winId: string) => void> = {\r\n right: dockApi.dockWindowRight,\r\n left: dockApi.dockWindowLeft,\r\n full: dockApi.maximizeWindow,\r\n top: dockApi.dockWindowTop,\r\n bottom: dockApi.dockWindowBottom,\r\n 'top-right': dockApi.dockWindowTopRight,\r\n 'top-left': dockApi.dockWindowTopLeft,\r\n 'bottom-right': dockApi.dockWindowBottomRight,\r\n 'bottom-left': dockApi.dockWindowBottomLeft,\r\n default: dockApi.demaximizeWindow,\r\n }\r\n\r\n const maximizeControl =\r\n winVisualState === 'maximized' ? (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.demaximizeWindow(winId)}\r\n >\r\n <IconWinDemaximize color={style?.navControlsColor} />\r\n </button>\r\n ) : (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.maximizeWindow(winId)}\r\n >\r\n <IconWinMaximize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n const closeControl = (\r\n <button\r\n className=\"hover:bg-red-500 hover:bg-opacity-20 px-5 h-full\"\r\n onClick={() => focusApi.closeWindowAndRefocus(winId)}\r\n >\r\n <IconWinMinimize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n return (\r\n <>\r\n <div\r\n id={windowId}\r\n ref={windowRef}\r\n className={`fixed overflow-hidden ${className ? className : 'bg-white shadow-lg border border-zinc-600 rounded-sm'} `}\r\n onPointerDown={() => focusApi.bringWindowToFocus(windowId)}\r\n style={{\r\n backgroundColor: style?.windowBackgroundColor,\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n height: `${winHeight}px`,\r\n zIndex: `${zIndex}`,\r\n\r\n /* MINIMIZE LOGIC */\r\n transition: 'transform 0.2s ease-in-out, opacity 0.3s ease-in-out',\r\n opacity: isWindowClosed ? 0 : 1,\r\n transform: isWindowClosed\r\n ? `translate(${wsRect.innerWidth / 2 - winCoord.pointX - winWidth / 2}px,\r\n ${wsRect.innerHeight - winCoord.pointY - winHeight / 2}px) scale(0.02)`\r\n : '',\r\n }}\r\n >\r\n <nav\r\n style={{\r\n backgroundColor: style?.navBackgroundColor,\r\n }}\r\n className={\r\n `h-[32px] w-full flex items-center\r\n ${navbarClassName \r\n ? navbarClassName \r\n : `bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}`} \r\n `}\r\n >\r\n <div className=\"shrink h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {windowName}\r\n </div>\r\n\r\n <div className=\"h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {navbarChildren}\r\n </div>\r\n\r\n <DragHandle winId={winId} />\r\n\r\n {!isBelowBreakPoint && maximizeControl}\r\n {closeControl}\r\n </nav>\r\n\r\n {<ResizingControls winId={winId} />}\r\n\r\n {/* Offset the navbar => 'h-[calc(100%-32px)]' */}\r\n <div className={`relative w-full h-[calc(100%-32px)] overflow-auto select-text`}>\r\n {children}\r\n </div>\r\n </div>{' '}\r\n </>\r\n )\r\n}\r\n","type Props = {\r\n color?: string\r\n}\r\n\r\nexport function IconWinMaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M5.25 7.5A2.25 2.25 0 0 1 7.5 5.25h9a2.25 2.25 0 0 1 2.25 2.25v9a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-9Z\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinDemaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M16.5 8.25V6a2.25 2.25 0 0 0-2.25-2.25H6A2.25 2.25 0 0 0 3.75 6v8.25A2.25 2.25 0 0 0 6 16.5h2.25m8.25-8.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-7.5A2.25 2.25 0 0 1 8.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 0 0-2.25 2.25v6\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinMinimize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\r\n </svg>\r\n )\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { resizeApi } from '../resizing/resizing-api'\r\nimport { useWorkspaceState } from '../workspace/workspace-state'\r\n\r\nconst tolerance = 4\r\n\r\ntype resizeCaseDependencies = {\r\n remoteId: string\r\n thisWinStartY: number\r\n thisWinEndY: number\r\n remoteWinStartY: number\r\n remoteWinEndY: number\r\n thisWinStartX: number\r\n thisWinEndX: number\r\n remoteWinStartX: number\r\n remoteWinEndX: number\r\n isRemoteOutside: boolean\r\n}\r\n\r\nexport const gridOrchestrator = {\r\n attachAdjacentGridBehavior: (winId: string) => {\r\n if (!useWorkspaceState.getState().isGridEnabled) return\r\n\r\n if (getOpenWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but all windows are closed`)\r\n\r\n if (getDraggingWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but no window is currently resizing`)\r\n\r\n attachAdjacentGridBehavior(winId)\r\n },\r\n}\r\n/* FIND ME: Idea, if a remote window gets below minWidth or minHeight, close, else, open again */\r\nconst attachAdjacentGridBehavior = (winId: string, visited = new Set<string>()) => {\r\n if (visited.has(winId)) return\r\n else visited.add(winId)\r\n\r\n const thisWin = windowRegistry[winId].getState()\r\n const currentResize = thisWin.resizeAction\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (remoteWin.windowId === thisWin.windowId) continue\r\n if (remoteWin.isWindowClosed) continue\r\n if (remoteWin.resizeAction) continue\r\n if (visited.has(remoteWin.windowId)) continue\r\n\r\n const dependencies = buildDependencies(thisWin, remoteWin)\r\n\r\n /* thisWin right edge <::::> remoteWin left edge || remoteWin is stacked up or down */\r\n if (currentResize === 'e') {\r\n const isRemoteConneted = resizeCase.whenDraggingEast(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin left edge <::::> remoteWin right edge || remoteWin is stacked up or down */\r\n if (currentResize === 'w') {\r\n const isRemoteConneted = resizeCase.whenDragginWest(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin top edge <::::> remoteWin bottom edge || remoteWin is stacked left or right */\r\n if (currentResize === 'n') {\r\n const isRemoteConneted = resizeCase.whenDragginNorth(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin bottom edge <::::> remoteWin top edge || remoteWin is stacked left or right */\r\n if (currentResize === 's') {\r\n const isRemoteConneted = resizeCase.whenDraggingSouth(dependencies)\r\n if (isRemoteConneted) attachAdjacentGridBehavior(remoteWin.windowId, visited)\r\n }\r\n }\r\n}\r\n\r\nconst resizeCase = {\r\n whenDraggingEast: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinStartX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinEndX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginWest: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinEndX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinStartX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginNorth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinEndY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinStartY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDraggingSouth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinStartY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinEndY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n}\r\n\r\nconst buildDependencies = (thisWin: WindowStore, remoteWin: WindowStore) => {\r\n const thisWinStartY = thisWin.winCoord.pointY\r\n const thisWinEndY = thisWin.winCoord.pointY + thisWin.winHeight\r\n\r\n const remoteWinStartY = remoteWin.winCoord.pointY\r\n const remoteWinEndY = remoteWin.winCoord.pointY + remoteWin.winHeight\r\n\r\n const thisWinStartX = thisWin.winCoord.pointX\r\n const thisWinEndX = thisWin.winCoord.pointX + thisWin.winWidth\r\n\r\n const remoteWinStartX = remoteWin.winCoord.pointX\r\n const remoteWinEndX = remoteWin.winCoord.pointX + remoteWin.winWidth\r\n\r\n const isRemoteOutside =\r\n remoteWinEndY !== thisWinEndY ||\r\n remoteWinEndX !== thisWinEndX ||\r\n remoteWinStartY !== thisWinStartY ||\r\n remoteWinStartX !== thisWinStartX\r\n\r\n return {\r\n remoteId: remoteWin.windowId,\r\n thisWinStartY: thisWinStartY,\r\n thisWinEndY: thisWinEndY,\r\n remoteWinStartY: remoteWinStartY,\r\n remoteWinEndY: remoteWinEndY,\r\n thisWinStartX: thisWinStartX,\r\n thisWinEndX: thisWinEndX,\r\n remoteWinStartX: remoteWinStartX,\r\n remoteWinEndX: remoteWinEndX,\r\n isRemoteOutside: isRemoteOutside,\r\n }\r\n}\r\n\r\nconst getDraggingWinCount = () => {\r\n let isWindowResizingCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (windowRegistry[key].getState().resizeAction) isWindowResizingCount++\r\n\r\n return isWindowResizingCount\r\n}\r\n\r\nconst getOpenWinCount = () => {\r\n let openWnidowCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (!windowRegistry[key].getState().isWindowClosed) openWnidowCount++\r\n\r\n return openWnidowCount\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { resizeApi } from './resizing-api'\r\nimport { gridOrchestrator } from '../grid/grid-orchestrator'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function ResizingControls({ winId }: Props) {\r\n const { winCoord, winWidth, winHeight, resizeAction } = windowRegistry[winId]()\r\n\r\n const startResize = (direction: ResizeDirection) => {\r\n resizeApi.startResize(winId, direction)\r\n gridOrchestrator.attachAdjacentGridBehavior(winId)\r\n }\r\n\r\n const stopResize = () => {\r\n resizeApi.stopResize(winId)\r\n }\r\n\r\n return (\r\n <>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('e')}\r\n id=\"win-resize-right-width\"\r\n className={`fixed w-2 ${resizeAction === 'e' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center overflow-hidden`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX + winWidth - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('w')}\r\n id=\"win-resize-left-width\"\r\n className={`fixed w-2 ${resizeAction === 'w' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('s')}\r\n id=\"win-resize-bottom-height\"\r\n className={`fixed h-2 ${resizeAction === 's' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('n')}\r\n id=\"win-resize-top-height\"\r\n className={`fixed h-2 ${resizeAction === 'n' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('se')}\r\n id=\"win-resize-bottom-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-se-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX + winWidth - 8}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('sw')}\r\n id=\"win-resize-bottom-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-sw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX - 8}px`,\r\n }}\r\n ></span>\r\n\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('ne')}\r\n id=\"win-resize-top-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-ne-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX + winWidth - 6}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('nw')}\r\n id=\"win-resize-top-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-nw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX - 6}px`,\r\n }}\r\n ></span>\r\n </>\r\n )\r\n}\r\n","import { dockApi } from '../docking/docking-api'\r\nimport { dragApi } from './drag-api'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function DragHandle({ winId }: Props) {\r\n return (\r\n <div\r\n onPointerDown={() => dragApi.startDrag(winId)}\r\n onPointerUp={() => dragApi.stopDrag(winId)}\r\n onDoubleClick={() => dockApi.maximizeWindow(winId)}\r\n className={`\r\n grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-zinc-100 bg-opacity-0 \r\n hover:bg-opacity-20 hover:mix-blend-overlay`}\r\n ></div>\r\n )\r\n}\r\n","import { windowRegistry } from '../../registration/window-registry'\r\nimport { focusApi } from './focus/focus-api'\r\n\r\nexport type WindowButtonProps = {\r\n children: React.ReactNode\r\n winId: string\r\n className?: string\r\n\r\n /** @default 'brightness-[85%] border-t-2 border-t-transparent' */\r\n isClosedClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-t-transparent' */\r\n isOpenClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10' */\r\n isActiveClassName?: string\r\n}\r\n\r\nexport default function WindowButton({\r\n children,\r\n winId,\r\n className,\r\n isClosedClassName = 'brightness-[85%] border-t-2 border-t-transparent',\r\n isOpenClassName = 'brightness-150 border-t-2 border-t-transparent',\r\n isActiveClassName = 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10',\r\n}: WindowButtonProps) {\r\n const { isWindowClosed, windowId, isActive } = windowRegistry[winId]()\r\n\r\n const handleOpenCloseWin = () => {\r\n if (!isWindowClosed && isActive) {\r\n focusApi.closeWindowAndRefocus(windowId)\r\n } else {\r\n focusApi.bringWindowToFocus(windowId)\r\n }\r\n }\r\n\r\n return (\r\n <button\r\n id={`${windowId}_button`}\r\n onClick={handleOpenCloseWin}\r\n className={`\r\n ${className} \r\n ${isWindowClosed ? isClosedClassName : isActive ? isActiveClassName : isOpenClassName}\r\n `}\r\n >\r\n {children}\r\n </button>\r\n )\r\n}\r\n"],"mappings":"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","names":["create","useEffect","Fragment","jsx","useEffect","Fragment","jsx","useEffect","jsx","jsxs","useEffect","create","useEffect","useRef","jsx","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","useRef","useEffect","jsx","jsx","create"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window-button.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-button.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,SAAS,EACT,iBAAsE,EACtE,eAAkE,EAClE,iBAA6E,GAC9E,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"window-button.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-button.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,SAAS,EACT,iBAAsE,EACtE,eAAkE,EAClE,iBAA6E,GAC9E,EAAE,iBAAiB,2CAuBnB"}
|
|
@@ -4,6 +4,16 @@ export type WindowLayoutProps = {
|
|
|
4
4
|
windowName: string | React.ReactNode;
|
|
5
5
|
winId: string;
|
|
6
6
|
navbarChildren?: React.ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* @default
|
|
9
|
+
* 'bg-white shadow-lg border border-zinc-600 rounded-sm'
|
|
10
|
+
*/
|
|
11
|
+
className?: string;
|
|
12
|
+
/**
|
|
13
|
+
* @default
|
|
14
|
+
* 'bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}'
|
|
15
|
+
*/
|
|
16
|
+
navbarClassName?: string;
|
|
7
17
|
/**
|
|
8
18
|
* @default 'deafult'
|
|
9
19
|
* @param `deafult` keeps the window near full width but detached from the workspace edges
|
|
@@ -25,5 +35,5 @@ export type WindowLayoutProps = {
|
|
|
25
35
|
navControlsColor?: string;
|
|
26
36
|
};
|
|
27
37
|
};
|
|
28
|
-
export default function WindowLayout({ children, windowName, navbarChildren, winId, defaultDock, style, }: WindowLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
export default function WindowLayout({ children, windowName, navbarChildren, navbarClassName, className, winId, defaultDock, style, }: WindowLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
29
39
|
//# sourceMappingURL=window-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window-layout.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-layout.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAEhC;;;;;;;;;;;;SAYK;IACL,WAAW,CAAC,EAAE,YAAY,CAAA;IAE1B,gEAAgE;IAChE,KAAK,CAAC,EAAE;QACN,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,UAAU,EACV,cAAc,EACd,KAAK,EACL,WAAuB,EACvB,KAAK,GACN,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"window-layout.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-layout.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAEhC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;;;;;;;;;SAYK;IACL,WAAW,CAAC,EAAE,YAAY,CAAA;IAE1B,gEAAgE;IAChE,KAAK,CAAC,EAAE;QACN,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,UAAU,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,KAAK,EACL,WAAuB,EACvB,KAAK,GACN,EAAE,iBAAiB,2CAmInB"}
|