@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 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-100{opacity:1}.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-75{--tw-brightness:brightness(.75)}.brightness-75,.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)}.brightness-\[85\%\]{--tw-brightness:brightness(85%)}.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\:bg-opacity-5:hover{--tw-bg-opacity:0.05}@media (min-width:1280px){.xl\:p-0{padding:0}}
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}}
@@ -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(`INIT_DRAG_LOOP called with isDragging false for winId: ${windowId}`);
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, y } = resizeDep;
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, y } = resizeDep;
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, x, y } = resizeDep;
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, x, y } = resizeDep;
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 handleWindowPosition = (e) => {
961
+ const handlePointerMove = (e) => {
962
962
  e.preventDefault();
963
963
  setXY(e.clientX, e.clientY);
964
964
  };
965
- window.addEventListener("pointermove", handleWindowPosition);
966
- return () => window.removeEventListener("pointermove", handleWindowPosition);
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-white bg-opacity-0
1417
- hover:bg-opacity-5 mix-blend-difference`
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 overflow-hidden`,
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
- h-[32px] w-full flex items-center bg-neutral-800
1521
- ${isActive ? "brightness-100 opacity-100" : "brightness-75 opacity-80"}`,
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,2CAsBnB"}
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,2CA8HnB"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gustavolmo/react-window-manager",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",