@netless/window-manager 0.4.0-canary.15 → 0.4.0-canary.19
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/.idea/inspectionProfiles/Project_Default.xml +7 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.idea/window-manager.iml +12 -0
- package/.vscode/settings.json +1 -0
- package/CHANGELOG.md +29 -1
- package/dist/AppListener.d.ts +1 -0
- package/dist/AppManager.d.ts +8 -6
- package/dist/AppProxy.d.ts +3 -2
- package/dist/AttributesDelegate.d.ts +2 -2
- package/dist/BoxManager.d.ts +5 -3
- package/dist/BuiltinApps.d.ts +0 -1
- package/dist/Cursor/Cursor.d.ts +8 -11
- package/dist/Cursor/index.d.ts +5 -16
- package/dist/Register/storage.d.ts +5 -1
- package/dist/Utils/Common.d.ts +1 -0
- package/dist/Utils/RoomHacker.d.ts +1 -1
- package/dist/View/MainView.d.ts +4 -3
- package/dist/constants.d.ts +3 -2
- package/dist/index.d.ts +15 -2
- package/dist/index.es.js +41 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +41 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/style.css +1 -1
- package/docs/api.md +28 -0
- package/docs/concept.md +5 -0
- package/package.json +5 -5
- package/src/AppContext.ts +1 -4
- package/src/AppListener.ts +14 -6
- package/src/AppManager.ts +62 -33
- package/src/AppProxy.ts +13 -8
- package/src/AttributesDelegate.ts +2 -2
- package/src/BoxManager.ts +33 -19
- package/src/BuiltinApps.ts +0 -1
- package/src/Cursor/Cursor.ts +22 -36
- package/src/Cursor/index.ts +33 -139
- package/src/Register/index.ts +25 -16
- package/src/Register/loader.ts +1 -1
- package/src/Register/storage.ts +6 -1
- package/src/Utils/Common.ts +12 -2
- package/src/Utils/RoomHacker.ts +28 -15
- package/src/View/MainView.ts +17 -12
- package/src/constants.ts +3 -2
- package/src/index.ts +52 -3
- package/src/shim.d.ts +2 -1
- package/src/style.css +1 -1
- package/vite.config.js +5 -2
- package/dist/Base/Context.d.ts +0 -12
- package/dist/Base/index.d.ts +0 -7
- package/src/Base/Context.ts +0 -45
- package/src/Base/index.ts +0 -10
package/dist/style.css
CHANGED
@@ -1 +1 @@
|
|
1
|
-
.page-renderer-pages-container{position:relative;overflow:hidden}.page-renderer-page{position:absolute;top:0;left:0;will-change:transform;background-position:center;background-size:cover;background-repeat:no-repeat}.page-renderer-page-img{display:block;width:100%;height:auto;user-select:none}.netless-app-docs-viewer-static-scrollbar{position:absolute;top:0;right:0;z-index:2147483647;width:8px;min-height:30px;margin:0;padding:0;border:none;outline:none;border-radius:4px;background:rgba(68,78,96,.4);box-shadow:1px 1px 8px #ffffffb3;opacity:0;transition:background .4s,opacity .4s 3s,transform .2s;will-change:transform,height;user-select:none}.netless-app-docs-viewer-static-scrollbar.netless-app-docs-viewer-static-scrollbar-dragging{background:rgba(68,78,96,.6);opacity:1;transition:background .4s,opacity .4s 3s!important}.netless-app-docs-viewer-static-scrollbar:hover,.netless-app-docs-viewer-static-scrollbar:focus{background:rgba(68,78,96,.5)}.netless-app-docs-viewer-static-scrollbar:active{background:rgba(68,78,96,.6)}.netless-app-docs-viewer-content:hover .netless-app-docs-viewer-static-scrollbar{opacity:1;transition:background .4s,opacity .4s,transform .2s}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-static-scrollbar{display:none}.netless-app-docs-viewer-static-pages:hover .netless-app-docs-viewer-static-scrollbar{opacity:1;transition:background .4s,opacity .4s,transform .2s}.netless-window-manager-playground{width:100%;height:100%;position:relative;z-index:1;overflow:hidden;user-select:none}.netless-window-manager-sizer{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden;display:flex}.netless-window-manager-sizer-horizontal{flex-direction:column}.netless-window-manager-sizer:before,.netless-window-manager-sizer:after{flex:1;content:"";display:block}.netless-window-manager-chess-sizer:before,.netless-window-manager-chess-sizer:after{background-image:linear-gradient(45deg,#b0b0b0 25%,transparent 25%),linear-gradient(-45deg,#b0b0b0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#b0b0b0 75%),linear-gradient(-45deg,transparent 75%,#b0b0b0 75%);background-color:#fff;background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px}.netless-window-manager-wrapper{position:relative;z-index:1;width:100%;height:100%;overflow:hidden}.netless-window-manager-main-view{width:100%;height:100%}.netless-window-manager-cursor-pencil-image{width:26px;height:26px}.netless-window-manager-cursor-eraser-image{width:26px;height:26px}.netless-window-manager-cursor-selector-image{width:24px;height:24px}.netless-window-manager-cursor-selector-avatar{border-radius:50%;border-style:solid;border-width:2px;border-color:#fff;margin-bottom:2px}.netless-window-manager-cursor-selector-avatar img{width:12px}.netless-window-manager-cursor-inner{border-radius:4px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:4px;padding-right:4px;font-size:12px}.netless-window-manager-cursor-inner-mellow{height:32px;border-radius:16px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:16px;padding-right:16px}.netless-window-manager-cursor-tag-name{font-size:12px;margin-left:4px;padding:2px 8px;border-radius:4px}.netless-window-manager-cursor-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:26px;height:26px;z-index:2147483647;left:0;top:0;will-change:transform;transition:transform .05s;transform-origin:0 0;user-select:none}.netless-window-manager-cursor-pencil-offset{margin-left:-20px}.netless-window-manager-cursor-selector-offset{margin-left:-22px;margin-top:56px}.netless-window-manager-cursor-text-offset{margin-left:-30px;margin-top:18px}.netless-window-manager-cursor-shape-offset{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px;margin-left:-30px;margin-top:12px}.netless-window-manager-cursor-name{width:100%;height:48px;display:flex;align-items:center;justify-content:center;position:absolute;top:-40px}.cursor-image-wrapper{display:flex;justify-content:center}.telebox-collector{position:absolute;right:10px;bottom:15px}.tele-fancy-scrollbar{overscroll-behavior:contain;overflow:auto;overflow-y:scroll;overflow-y:overlay;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;scrollbar-width:auto}.tele-fancy-scrollbar::-webkit-scrollbar{height:8px;width:8px}.tele-fancy-scrollbar::-webkit-scrollbar-track{background-color:transparent}.tele-fancy-scrollbar::-webkit-scrollbar-thumb{background-color:#444e601a;background-color:transparent;border-radius:4px;transition:background-color .4s}.tele-fancy-scrollbar:hover::-webkit-scrollbar-thumb{background-color:#444e601a}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#444e6033}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:active{background-color:#444e6033}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:vertical{min-height:50px}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:horizontal{min-width:50px}.telebox-box{position:absolute;top:0;left:0;z-index:100;will-change:transform;transition:width .4s cubic-bezier(.4,.9,.71,1.02),height .4s cubic-bezier(.55,.82,.63,.95),opacity .6s cubic-bezier(.7,0,.84,0),transform .4s ease}.telebox-box-main{position:relative;width:100%;height:100%;display:flex;flex-direction:column;overflow:hidden;background:#f9f9fc;box-shadow:0 4px 10px #2f419226;border-radius:6px;border:1px solid #e3e3ec}.telebox-titlebar-wrap{flex-shrink:0;position:relative;z-index:1}.telebox-content-wrap{flex:1;width:100%;overflow:hidden;display:flex;justify-content:center;align-items:center}.telebox-content{width:100%;height:100%;position:relative}.telebox-footer-wrap{flex-shrink:0;display:flex;flex-direction:column}.telebox-footer-wrap:before{content:"";display:block;flex:1}.telebox-resize-handle{position:absolute;z-index:2147483647}.telebox-n{width:100%;height:5px;left:0;top:-5px;cursor:n-resize}.telebox-s{width:100%;height:5px;left:0;bottom:-5px;cursor:s-resize}.telebox-w{width:5px;height:100%;left:-5px;top:0;cursor:w-resize}.telebox-e{width:5px;height:100%;right:-5px;top:0;cursor:e-resize}.telebox-nw{width:15px;height:15px;top:-5px;left:-5px;cursor:nw-resize}.telebox-ne{width:15px;height:15px;top:-5px;right:-5px;cursor:ne-resize}.telebox-se{width:15px;height:15px;bottom:-5px;right:-5px;cursor:se-resize}.telebox-sw{width:15px;height:15px;bottom:-5px;left:-5px;cursor:sw-resize}.telebox-track-mask{position:fixed;top:0;left:0;z-index:2147483647;width:100%;height:100%;background:rgba(0,0,0,.0001);cursor:move}.telebox-cursor-n{cursor:n-resize}.telebox-cursor-s{cursor:s-resize}.telebox-cursor-w{cursor:w-resize}.telebox-cursor-e{cursor:e-resize}.telebox-cursor-nw{cursor:nw-resize}.telebox-cursor-ne{cursor:ne-resize}.telebox-cursor-se{cursor:se-resize}.telebox-cursor-sw{cursor:sw-resize}.telebox-maximized .telebox-resize-handles,.telebox-no-resize .telebox-resize-handles{display:none}.telebox-maximized{box-shadow:none;transition:none}.telebox-minimized{will-change:transform;transition:width 50ms cubic-bezier(.4,.9,.71,1.02),height 50ms cubic-bezier(.55,.82,.63,.95),opacity .6s cubic-bezier(.7,0,.84,0),transform .6s ease;opacity:0;pointer-events:none;user-select:none}.telebox-transforming{will-change:transform;transition:opacity .6s cubic-bezier(.7,0,.84,0)}.telebox-readonly .telebox-resize-handle{cursor:initial!important;pointer-events:none!important}.telebox-color-scheme-dark .telebox-box-main{color:#e9e9e9;background:#212126;border-color:#43434d}.telebox-titlebar{box-sizing:border-box;height:26px;display:flex;align-items:center;padding:0 16px;background:#fff;user-select:none;border-bottom:1px solid #eeeef7}.telebox-title{overflow:hidden;margin:0 24px 0 0;padding:0;font-size:14px;font-weight:400;font-family:PingFangSC-Regular,PingFang SC;white-space:nowrap;word-break:keep-all;text-overflow:ellipsis;color:#191919}.telebox-titlebar-btns{white-space:nowrap;word-break:keep-all;margin-left:auto;font-size:0}.telebox-titlebar-btn{width:22px;height:22px;padding:0;outline:0;border:none;background:0 0;cursor:pointer}.telebox-titlebar-btn~.telebox-titlebar-btn{margin-left:10px}.telebox-titlebar-btn-icon{width:22px;height:22px}.telebox-readonly .telebox-titlebar-btn{cursor:not-allowed}.telebox-titlebar-icon-minimize{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjh2MjhIMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxtYXNrIGlkPSJiIiBmaWxsPSIjZmZmIj4KICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjYSIgLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPHBhdGggZmlsbD0iI0E3QTdDQSIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOSAxM2gxMHYxLjZIOXoiIG1hc2s9InVybCgjYikiIC8+CiAgICA8L2c+Cjwvc3ZnPgo=)}.telebox-titlebar-icon-maximize{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjh2MjhIMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxtYXNrIGlkPSJiIiBmaWxsPSIjZmZmIj4KICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjYSIgLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPGcgZmlsbD0iI0E3QTdDQSIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI2IpIj4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgIGQ9Ik0yMC40ODEgMTcuMWgxLjJ2NC41ODFIMTcuMXYtMS4yaDMuMzgxVjE3LjF6bS0xNC4xOTA1LS4wMDloMS4ydjMuMzgxaDMuMzgwOXYxLjJoLTQuNTgxdi00LjU4MXpNMTcuMSA2LjE5MDVoNC41ODF2NC41ODA5aC0xLjJ2LTMuMzgxSDE3LjF2LTEuMnptLTEwLjcwMDguMTA4N2g0Ljc5ODV2MS4ySDcuNTk5MnYzLjU5ODVoLTEuMlY2LjI5OTJ6IiAvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==)}.telebox-titlebar-icon-maximize.is-active{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjZ2MjZIMHoiIC8+CiAgICAgICAgPHBhdGggaWQ9ImMiIGQ9Ik0yNi44NjkgMEwyOCAxLjEzMVYyNi44N0wyNi44NjkgMjhIMS4xM0wwIDI2Ljg3VjEuMTMxTDEuMTMgMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiPgogICAgICAgICAgICA8bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNhIiAvPgogICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0tNC42NDI5LTQuNjQyOWgzNS4yODU4djM1LjI4NThILTQuNjQyOXoiIG1hc2s9InVybCgjYikiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnPgogICAgICAgICAgICA8bWFzayBpZD0iZCIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNjIiAvPgogICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0tMTcuNTE2OCAxNEwxNC0xNy41MTY4IDQ1LjUxNjggMTQgMTQgNDUuNTE2OHoiIG1hc2s9InVybCgjZCkiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoIHN0cm9rZT0iI0E3QTdDQSIgc3Ryb2tlLXdpZHRoPSIxLjIiCiAgICAgICAgICAgIGQ9Ik0xMC4wODg2IDIxLjQ4NjV2LTMuNjk2Nkg2LjM5Mk0yMS4zODU1IDEwLjE4OTVoLTMuNjk2NlY2LjQ5M00yMS40MDIgMTcuNzk4M2gtMy42OTY2djMuNjk2Nk0xMC4yNTAzIDYuMTQ5OHYzLjg5ODVINi4zNTE3IiAvPgogICAgPC9nPgo8L3N2Zz4K)}.telebox-titlebar-icon-close{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOCAyOCI+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iI0E3QTdDQSIgc3Ryb2tlLXdpZHRoPSIxLjQiPgogICAgICAgIDxwYXRoIGQ9Ik04LjM1MyAyMC4zMzIxTDIwLjMzMiA4LjM1M00yMC4zMzIyIDIwLjMzMjFMOC4zNTMgOC4zNTMiIC8+CiAgICA8L2c+Cjwvc3ZnPgo=)}.telebox-color-scheme-dark .telebox-titlebar{color:#e9e9e9;background:#43434d;border-bottom:none}.telebox-collector{visibility:hidden;display:block;position:absolute;z-index:200;width:40px;height:40px;margin:0;padding:0;border:none;outline:0;font-size:0;border-radius:50%;background:#fff;box-shadow:0 2px 6px #2f419226;cursor:pointer;user-select:none;pointer-events:none;background-repeat:no-repeat;background-size:18px 16px;background-position:center}.telebox-collector-visible{visibility:visible;pointer-events:initial}.telebox-collector-readonly{cursor:not-allowed}.telebox-color-scheme-dark.telebox-collector{background-color:#43434d}.telebox-max-titlebar{display:none;position:absolute;top:0;left:0;z-index:50000;user-select:none}.telebox-max-titlebar-maximized{display:flex}.telebox-titles{flex:1;height:100%;margin:0 16px 0 -16px;overflow-y:hidden;overflow-x:scroll;overflow-x:overlay;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;scrollbar-width:auto}.telebox-titles::-webkit-scrollbar{height:8px;width:8px}.telebox-titles::-webkit-scrollbar-track{background-color:transparent}.telebox-titles::-webkit-scrollbar-thumb{background-color:#eeeef7cc;background-color:transparent;border-radius:4px;transition:background-color .4s}.telebox-titles:hover::-webkit-scrollbar-thumb{background-color:#eeeef7cc}.telebox-titles::-webkit-scrollbar-thumb:hover{background-color:#eeeef7}.telebox-titles::-webkit-scrollbar-thumb:active{background-color:#eeeef7}.telebox-titles::-webkit-scrollbar-thumb:vertical{min-height:50px}.telebox-titles::-webkit-scrollbar-thumb:horizontal{min-width:50px}.telebox-titles-content{height:100%;display:flex;flex-wrap:nowrap;align-items:center;padding:0}.telebox-titles-tab{overflow:hidden;max-width:182px;min-width:50px;padding:0 26px 0 16px;outline:0;font-size:13px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all;border:none;border-right:1px solid #e5e5f0;color:#7b88a0;background:0 0;cursor:pointer}.telebox-titles-tab~.telebox-titles-tab{margin-left:2px}.telebox-titles-tab-focus{color:#357bf6}.telebox-readonly .telebox-titles-tab{cursor:not-allowed}.telebox-color-scheme-dark{color-scheme:dark}.telebox-color-scheme-dark.telebox-titlebar{color:#e9e9e9;background:#43434d;border-bottom:none}.telebox-color-scheme-dark .telebox-titles-tab{border-right-color:#7b88a0}.telebox-color-scheme-dark .telebox-title{color:#e9e9e9}
|
1
|
+
.netless-window-manager-playground{width:100%;height:100%;position:relative;z-index:1;overflow:hidden;user-select:none}.netless-window-manager-sizer{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden;display:flex}.netless-window-manager-sizer-horizontal{flex-direction:column}.netless-window-manager-sizer:before,.netless-window-manager-sizer:after{flex:1;content:"";display:block}.netless-window-manager-chess-sizer:before,.netless-window-manager-chess-sizer:after{background-image:linear-gradient(45deg,#b0b0b0 25%,transparent 25%),linear-gradient(-45deg,#b0b0b0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#b0b0b0 75%),linear-gradient(-45deg,transparent 75%,#b0b0b0 75%);background-color:#fff;background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px}.netless-window-manager-wrapper{position:relative;z-index:1;width:100%;height:100%;overflow:hidden}.netless-window-manager-main-view{width:100%;height:100%}.netless-window-manager-cursor-pencil-image{width:26px;height:26px}.netless-window-manager-cursor-eraser-image{width:26px;height:26px}.netless-window-manager-cursor-selector-image{width:24px;height:24px}.netless-window-manager-cursor-selector-avatar{border-radius:50%;border-style:solid;border-width:2px;border-color:#fff;margin-bottom:2px}.netless-window-manager-cursor-selector-avatar img{width:12px}.netless-window-manager-cursor-inner{border-radius:4px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:4px;padding-right:4px;font-size:12px}.netless-window-manager-cursor-inner-mellow{height:32px;border-radius:16px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:16px;padding-right:16px}.netless-window-manager-cursor-tag-name{font-size:12px;margin-left:4px;padding:2px 8px;border-radius:4px}.netless-window-manager-cursor-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:26px;height:26px;z-index:2147483647;left:0;top:0;will-change:transform;transition:transform .1s;transform-origin:0 0;user-select:none}.netless-window-manager-cursor-pencil-offset{margin-left:-20px}.netless-window-manager-cursor-selector-offset{margin-left:-22px;margin-top:56px}.netless-window-manager-cursor-text-offset{margin-left:-30px;margin-top:18px}.netless-window-manager-cursor-shape-offset{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px;margin-left:-30px;margin-top:12px}.netless-window-manager-cursor-name{width:100%;height:48px;display:flex;align-items:center;justify-content:center;position:absolute;top:-40px}.cursor-image-wrapper{display:flex;justify-content:center}.telebox-collector{position:absolute;right:10px;bottom:15px}.tele-fancy-scrollbar{overscroll-behavior:contain;overflow:auto;overflow-y:scroll;overflow-y:overlay;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;scrollbar-width:auto}.tele-fancy-scrollbar::-webkit-scrollbar{height:8px;width:8px}.tele-fancy-scrollbar::-webkit-scrollbar-track{background-color:transparent}.tele-fancy-scrollbar::-webkit-scrollbar-thumb{background-color:#444e601a;background-color:transparent;border-radius:4px;transition:background-color .4s}.tele-fancy-scrollbar:hover::-webkit-scrollbar-thumb{background-color:#444e601a}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#444e6033}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:active{background-color:#444e6033}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:vertical{min-height:50px}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:horizontal{min-width:50px}.telebox-box{position:absolute;top:0;left:0;z-index:100;transition:width .4s cubic-bezier(.4,.9,.71,1.02),height .4s cubic-bezier(.55,.82,.63,.95),opacity .6s cubic-bezier(.7,0,.84,0),transform .4s ease}.telebox-box-main{position:relative;width:100%;height:100%;display:flex;flex-direction:column;overflow:hidden;background:#f9f9fc;box-shadow:0 4px 10px #2f419226;border-radius:6px;border:1px solid #e3e3ec}.telebox-titlebar-wrap{flex-shrink:0;position:relative;z-index:1}.telebox-content-wrap{flex:1;width:100%;overflow:hidden;display:flex;justify-content:center;align-items:center}.telebox-content{width:100%;height:100%;position:relative}.telebox-footer-wrap{flex-shrink:0;display:flex;flex-direction:column}.telebox-footer-wrap:before{content:"";display:block;flex:1}.telebox-resize-handle{position:absolute;z-index:2147483647}.telebox-n{width:100%;height:5px;left:0;top:-5px;cursor:n-resize}.telebox-s{width:100%;height:5px;left:0;bottom:-5px;cursor:s-resize}.telebox-w{width:5px;height:100%;left:-5px;top:0;cursor:w-resize}.telebox-e{width:5px;height:100%;right:-5px;top:0;cursor:e-resize}.telebox-nw{width:15px;height:15px;top:-5px;left:-5px;cursor:nw-resize}.telebox-ne{width:15px;height:15px;top:-5px;right:-5px;cursor:ne-resize}.telebox-se{width:15px;height:15px;bottom:-5px;right:-5px;cursor:se-resize}.telebox-sw{width:15px;height:15px;bottom:-5px;left:-5px;cursor:sw-resize}.telebox-track-mask{position:fixed;top:0;left:0;z-index:2147483647;width:100%;height:100%;background:rgba(0,0,0,.0001);cursor:move}.telebox-cursor-n{cursor:n-resize}.telebox-cursor-s{cursor:s-resize}.telebox-cursor-w{cursor:w-resize}.telebox-cursor-e{cursor:e-resize}.telebox-cursor-nw{cursor:nw-resize}.telebox-cursor-ne{cursor:ne-resize}.telebox-cursor-se{cursor:se-resize}.telebox-cursor-sw{cursor:sw-resize}.telebox-maximized .telebox-resize-handles,.telebox-no-resize .telebox-resize-handles{display:none}.telebox-maximized{box-shadow:none;transition:none}.telebox-minimized{transition:width 50ms cubic-bezier(.4,.9,.71,1.02),height 50ms cubic-bezier(.55,.82,.63,.95),opacity .6s cubic-bezier(.7,0,.84,0),transform .6s ease;opacity:0;pointer-events:none;user-select:none}.telebox-transforming{will-change:transform;transition:opacity .6s cubic-bezier(.7,0,.84,0)}.telebox-readonly .telebox-resize-handle{cursor:initial!important;pointer-events:none!important}.telebox-color-scheme-dark .telebox-box-main{color:#e9e9e9;background:#212126;border-color:#43434d}.telebox-titlebar{box-sizing:border-box;height:26px;display:flex;align-items:center;padding:0 16px;background:#fff;user-select:none;border-bottom:1px solid #eeeef7;touch-action:manipulation}.telebox-title-area{overflow:hidden;position:relative;height:100%;flex:1;display:flex;align-items:center}.telebox-title{overflow:hidden;margin:0;padding:0;font-size:14px;font-weight:400;font-family:PingFangSC-Regular,PingFang SC;white-space:nowrap;word-break:keep-all;text-overflow:ellipsis;color:#191919}.telebox-drag-area{position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;z-index:10}.telebox-titlebar-btns{white-space:nowrap;word-break:keep-all;margin-left:auto;font-size:0}.telebox-titlebar-btn{width:22px;height:22px;padding:0;outline:0;border:none;background:0 0;cursor:pointer}.telebox-titlebar-btn~.telebox-titlebar-btn{margin-left:10px}.telebox-titlebar-btn-icon{width:22px;height:22px}.telebox-readonly .telebox-titlebar-btn{cursor:not-allowed}.telebox-titlebar-icon-minimize{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjh2MjhIMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxtYXNrIGlkPSJiIiBmaWxsPSIjZmZmIj4KICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjYSIgLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPHBhdGggZmlsbD0iI0E3QTdDQSIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOSAxM2gxMHYxLjZIOXoiIG1hc2s9InVybCgjYikiIC8+CiAgICA8L2c+Cjwvc3ZnPgo=)}.telebox-titlebar-icon-maximize{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjh2MjhIMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxtYXNrIGlkPSJiIiBmaWxsPSIjZmZmIj4KICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjYSIgLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPGcgZmlsbD0iI0E3QTdDQSIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI2IpIj4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgIGQ9Ik0yMC40ODEgMTcuMWgxLjJ2NC41ODFIMTcuMXYtMS4yaDMuMzgxVjE3LjF6bS0xNC4xOTA1LS4wMDloMS4ydjMuMzgxaDMuMzgwOXYxLjJoLTQuNTgxdi00LjU4MXpNMTcuMSA2LjE5MDVoNC41ODF2NC41ODA5aC0xLjJ2LTMuMzgxSDE3LjF2LTEuMnptLTEwLjcwMDguMTA4N2g0Ljc5ODV2MS4ySDcuNTk5MnYzLjU5ODVoLTEuMlY2LjI5OTJ6IiAvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==)}.telebox-titlebar-icon-maximize.is-active{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjZ2MjZIMHoiIC8+CiAgICAgICAgPHBhdGggaWQ9ImMiIGQ9Ik0yNi44NjkgMEwyOCAxLjEzMVYyNi44N0wyNi44NjkgMjhIMS4xM0wwIDI2Ljg3VjEuMTMxTDEuMTMgMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiPgogICAgICAgICAgICA8bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNhIiAvPgogICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0tNC42NDI5LTQuNjQyOWgzNS4yODU4djM1LjI4NThILTQuNjQyOXoiIG1hc2s9InVybCgjYikiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnPgogICAgICAgICAgICA8bWFzayBpZD0iZCIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNjIiAvPgogICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0tMTcuNTE2OCAxNEwxNC0xNy41MTY4IDQ1LjUxNjggMTQgMTQgNDUuNTE2OHoiIG1hc2s9InVybCgjZCkiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoIHN0cm9rZT0iI0E3QTdDQSIgc3Ryb2tlLXdpZHRoPSIxLjIiCiAgICAgICAgICAgIGQ9Ik0xMC4wODg2IDIxLjQ4NjV2LTMuNjk2Nkg2LjM5Mk0yMS4zODU1IDEwLjE4OTVoLTMuNjk2NlY2LjQ5M00yMS40MDIgMTcuNzk4M2gtMy42OTY2djMuNjk2Nk0xMC4yNTAzIDYuMTQ5OHYzLjg5ODVINi4zNTE3IiAvPgogICAgPC9nPgo8L3N2Zz4K)}.telebox-titlebar-icon-close{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOCAyOCI+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iI0E3QTdDQSIgc3Ryb2tlLXdpZHRoPSIxLjQiPgogICAgICAgIDxwYXRoIGQ9Ik04LjM1MyAyMC4zMzIxTDIwLjMzMiA4LjM1M00yMC4zMzIyIDIwLjMzMjFMOC4zNTMgOC4zNTMiIC8+CiAgICA8L2c+Cjwvc3ZnPgo=)}.telebox-color-scheme-dark .telebox-titlebar{color:#e9e9e9;background:#43434d;border-bottom:none}.telebox-collector{visibility:hidden;display:block;position:absolute;z-index:200;width:40px;height:40px;margin:0;padding:0;border:none;outline:0;font-size:0;border-radius:50%;background:#fff;box-shadow:0 2px 6px #2f419226;cursor:pointer;user-select:none;pointer-events:none;background-repeat:no-repeat;background-size:18px 16px;background-position:center}.telebox-collector-visible{visibility:visible;pointer-events:initial}.telebox-collector-readonly{cursor:not-allowed}.telebox-color-scheme-dark.telebox-collector{background-color:#43434d}.telebox-max-titlebar{display:none;position:absolute;top:0;left:0;z-index:50000;user-select:none}.telebox-max-titlebar .telebox-drag-area{height:100%;min-width:16px;position:static;margin:0;flex-grow:1;flex-shrink:0}.telebox-max-titlebar-maximized{display:flex}.telebox-titles{height:100%;margin:0;overflow-y:hidden;overflow-x:scroll;overflow-x:overlay;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;scrollbar-width:auto}.telebox-titles::-webkit-scrollbar{height:8px;width:8px}.telebox-titles::-webkit-scrollbar-track{background-color:transparent}.telebox-titles::-webkit-scrollbar-thumb{background-color:#eeeef7cc;background-color:transparent;border-radius:4px;transition:background-color .4s}.telebox-titles:hover::-webkit-scrollbar-thumb{background-color:#eeeef7cc}.telebox-titles::-webkit-scrollbar-thumb:hover{background-color:#eeeef7}.telebox-titles::-webkit-scrollbar-thumb:active{background-color:#eeeef7}.telebox-titles::-webkit-scrollbar-thumb:vertical{min-height:50px}.telebox-titles::-webkit-scrollbar-thumb:horizontal{min-width:50px}.telebox-titles-content{height:100%;display:flex;flex-wrap:nowrap;align-items:center;padding:0}.telebox-titles-tab{height:100%;overflow:hidden;max-width:182px;min-width:50px;padding:0 26px 0 16px;outline:0;font-size:13px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all;border:none;border-right:1px solid #e5e5f0;color:#7b88a0;background:0 0;cursor:pointer;user-select:none}.telebox-titles-tab-focus{color:#357bf6}.telebox-readonly .telebox-titles-tab{cursor:not-allowed}.telebox-color-scheme-dark{color-scheme:dark}.telebox-color-scheme-dark.telebox-titlebar{color:#e9e9e9;background:#43434d;border-bottom:none}.telebox-color-scheme-dark .telebox-titles-tab{border-right-color:#7b88a0}.telebox-color-scheme-dark .telebox-title{color:#e9e9e9}
|
package/docs/api.md
CHANGED
@@ -9,9 +9,13 @@
|
|
9
9
|
- [实例方法](#instance-methods)
|
10
10
|
- [`addApp`](#addApp)
|
11
11
|
- [`closeApp`](#closeApp)
|
12
|
+
- [`setMainViewSceneIndex`](#setMainViewSceneIndex)
|
13
|
+
- [`setBoxState`](#setBoxState)
|
12
14
|
- [实例属性](#prototypes)
|
13
15
|
- [事件回调](#events)
|
14
16
|
|
17
|
+
<br>
|
18
|
+
|
15
19
|
<h2 id="static-methods">静态方法</h2>
|
16
20
|
|
17
21
|
<h3 id="mount">WindowManager.mount</h3>
|
@@ -42,6 +46,7 @@ const manager = await WindowManager.mount(
|
|
42
46
|
| prefersColorScheme | [optional] string | light | auto, light, dark |
|
43
47
|
| debug | [optional] boolean | false | 打印日志信息
|
44
48
|
|
49
|
+
|
45
50
|
<h3 id="register">WindowManager.register</h3>
|
46
51
|
|
47
52
|
> 注册 `APP` 到 `WindowManager`
|
@@ -81,6 +86,8 @@ WindowManager.setContainer(document.getElementById("container"));
|
|
81
86
|
WindowManager.setCollectorContainer(document.getElementById("collector-container"));
|
82
87
|
```
|
83
88
|
|
89
|
+
<br>
|
90
|
+
|
84
91
|
<h2 id="instance-methods">实例方法</h2>
|
85
92
|
|
86
93
|
<h3 id="addApp">addApp</h3>
|
@@ -105,6 +112,24 @@ const appId = await manager.addApp({
|
|
105
112
|
manager.closeApp(appId)
|
106
113
|
```
|
107
114
|
|
115
|
+
<h3 id="setMainViewSceneIndex">setMainViewSceneIndex</h3>
|
116
|
+
|
117
|
+
> 设置主白板的 `SceneIndex`
|
118
|
+
|
119
|
+
```ts
|
120
|
+
manager.setMainViewSceneIndex(1)
|
121
|
+
```
|
122
|
+
|
123
|
+
<h3 id="setBoxState">setBoxState</h3>
|
124
|
+
|
125
|
+
> 设置当前的 `boxState`
|
126
|
+
|
127
|
+
```ts
|
128
|
+
manager.setBoxState("normal") // boxState: normal | maximized | minimized
|
129
|
+
```
|
130
|
+
|
131
|
+
<br>
|
132
|
+
|
108
133
|
<h2 id="prototypes">实例属性</h2>
|
109
134
|
|
110
135
|
| name | type | default | desc |
|
@@ -114,7 +139,9 @@ manager.closeApp(appId)
|
|
114
139
|
| boxState | string | | 当前窗口状态 |
|
115
140
|
| darkMode | boolean | | 黑夜模式 |
|
116
141
|
| prefersColorScheme | string | | 颜色主题 |
|
142
|
+
| focused | string | | focus 的 app |
|
117
143
|
|
144
|
+
<br>
|
118
145
|
|
119
146
|
<h2 id="events">事件回调</h2>
|
120
147
|
|
@@ -130,3 +157,4 @@ manager.callbacks.on(events, listener)
|
|
130
157
|
| darkModeChange | boolean | | |
|
131
158
|
| prefersColorSchemeChange | string | | auto,light,dark |
|
132
159
|
| cameraStateChange | CameraState | | |
|
160
|
+
| focusedChange | string, undefined | | 当前 focus 的 appId,主白板时为 undefined |
|
package/docs/concept.md
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@netless/window-manager",
|
3
|
-
"version": "0.4.0-canary.
|
3
|
+
"version": "0.4.0-canary.19",
|
4
4
|
"description": "",
|
5
5
|
"main": "dist/index.es.js",
|
6
6
|
"module": "dist/index.es.js",
|
@@ -23,9 +23,6 @@
|
|
23
23
|
},
|
24
24
|
"dependencies": {
|
25
25
|
"@juggle/resize-observer": "^3.3.1",
|
26
|
-
"@netless/app-docs-viewer": "0.2.0",
|
27
|
-
"@netless/app-media-player": "0.1.0-beta.5",
|
28
|
-
"@netless/telebox-insider": "0.2.18",
|
29
26
|
"emittery": "^0.9.2",
|
30
27
|
"lodash": "^4.17.21",
|
31
28
|
"p-retry": "^4.6.1",
|
@@ -34,6 +31,9 @@
|
|
34
31
|
"video.js": ">=7"
|
35
32
|
},
|
36
33
|
"devDependencies": {
|
34
|
+
"@netless/app-docs-viewer": "^0.2.5",
|
35
|
+
"@netless/app-media-player": "0.1.0-beta.5",
|
36
|
+
"@netless/telebox-insider": "0.2.21",
|
37
37
|
"@rollup/plugin-commonjs": "^20.0.0",
|
38
38
|
"@rollup/plugin-node-resolve": "^13.0.4",
|
39
39
|
"@rollup/plugin-url": "^6.1.0",
|
@@ -58,6 +58,6 @@
|
|
58
58
|
"typescript": "^4.3.5",
|
59
59
|
"video.js": "^7.14.3",
|
60
60
|
"vite": "^2.5.3",
|
61
|
-
"white-web-sdk": "^2.16.
|
61
|
+
"white-web-sdk": "^2.16.1"
|
62
62
|
}
|
63
63
|
}
|
package/src/AppContext.ts
CHANGED
@@ -59,10 +59,7 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
|
|
59
59
|
public getScenes = (): SceneDefinition[] | undefined => {
|
60
60
|
const appAttr = this.store.getAppAttributes(this.appId);
|
61
61
|
if (appAttr?.isDynamicPPT) {
|
62
|
-
|
63
|
-
if (appProxy) {
|
64
|
-
return appProxy.scenes;
|
65
|
-
}
|
62
|
+
return this.appProxy.scenes;
|
66
63
|
} else {
|
67
64
|
return appAttr?.options["scenes"];
|
68
65
|
}
|
package/src/AppListener.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
import { callbacks } from
|
2
|
-
import { Events, MagixEventName } from
|
1
|
+
import { callbacks, emitter } from "./index";
|
2
|
+
import { Events, MagixEventName } from "./constants";
|
3
|
+
import { setViewFocusScenePath } from "./Utils/Common";
|
3
4
|
import type { Event } from "white-web-sdk";
|
4
5
|
import type { AppManager } from "./AppManager";
|
5
6
|
import type { TeleBoxState } from "@netless/telebox-insider";
|
6
|
-
import { setViewFocusScenePath } from './Utils/Common';
|
7
7
|
|
8
8
|
export class AppListeners {
|
9
9
|
private displayer = this.manager.displayer;
|
@@ -46,6 +46,10 @@ export class AppListeners {
|
|
46
46
|
this.moveCameraToContainHandler(data.payload);
|
47
47
|
break;
|
48
48
|
}
|
49
|
+
case Events.CursorMove: {
|
50
|
+
this.cursorMoveHandler(data.payload);
|
51
|
+
break;
|
52
|
+
}
|
49
53
|
default:
|
50
54
|
break;
|
51
55
|
}
|
@@ -63,14 +67,18 @@ export class AppListeners {
|
|
63
67
|
|
64
68
|
private boxStateChangeHandler = (state: TeleBoxState) => {
|
65
69
|
callbacks.emit("boxStateChange", state);
|
66
|
-
}
|
70
|
+
};
|
67
71
|
|
68
72
|
private setMainViewScenePathHandler = ({ nextScenePath }: { nextScenePath: string }) => {
|
69
73
|
setViewFocusScenePath(this.manager.mainView, nextScenePath);
|
70
74
|
callbacks.emit("mainViewScenePathChange", nextScenePath);
|
71
|
-
}
|
75
|
+
};
|
72
76
|
|
73
77
|
private moveCameraToContainHandler = (payload: any) => {
|
74
78
|
this.manager.mainView.moveCameraToContain(payload);
|
75
|
-
}
|
79
|
+
};
|
80
|
+
|
81
|
+
private cursorMoveHandler = (payload: any) => {
|
82
|
+
emitter.emit("cursorMove", payload);
|
83
|
+
};
|
76
84
|
}
|
package/src/AppManager.ts
CHANGED
@@ -4,7 +4,14 @@ import { AppListeners } from "./AppListener";
|
|
4
4
|
import { AppProxy } from "./AppProxy";
|
5
5
|
import { autorun, isPlayer, isRoom, ScenePathType } from "white-web-sdk";
|
6
6
|
import { callbacks, emitter, WindowManager, reconnectRefresher } from "./index";
|
7
|
-
import {
|
7
|
+
import {
|
8
|
+
entireScenes,
|
9
|
+
genAppId,
|
10
|
+
makeValidScenePath,
|
11
|
+
parseSceneDir,
|
12
|
+
setScenePath,
|
13
|
+
setViewFocusScenePath,
|
14
|
+
} from "./Utils/Common";
|
8
15
|
import { log } from "./Utils/log";
|
9
16
|
import { MainViewProxy } from "./View/MainView";
|
10
17
|
import { onObjectRemoved, safeListenPropsUpdated } from "./Utils/Reactive";
|
@@ -60,6 +67,48 @@ export class AppManager {
|
|
60
67
|
this.onAppDelete(this.attributes.apps);
|
61
68
|
});
|
62
69
|
}
|
70
|
+
emitter.on("removeScenes", scenePath => {
|
71
|
+
if (scenePath === "/") {
|
72
|
+
this.setMainViewScenePath("/");
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
const mainViewScenePath = this.store.getMainViewScenePath();
|
76
|
+
if (this.room && mainViewScenePath) {
|
77
|
+
if (mainViewScenePath === scenePath) {
|
78
|
+
this.setMainViewScenePath("/");
|
79
|
+
}
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
private get eventName() {
|
85
|
+
return isRoom(this.displayer) ? "onRoomStateChanged" : "onPlayerStateChanged";
|
86
|
+
}
|
87
|
+
|
88
|
+
public get attributes() {
|
89
|
+
return this.windowManger.attributes;
|
90
|
+
}
|
91
|
+
|
92
|
+
public get canOperate() {
|
93
|
+
return this.windowManger.canOperate;
|
94
|
+
}
|
95
|
+
|
96
|
+
public get room() {
|
97
|
+
return isRoom(this.displayer) ? (this.displayer as Room) : undefined;
|
98
|
+
}
|
99
|
+
|
100
|
+
public get mainView() {
|
101
|
+
return this.mainViewProxy.view;
|
102
|
+
}
|
103
|
+
|
104
|
+
public get focusApp() {
|
105
|
+
if (this.store.focus) {
|
106
|
+
return this.appProxies.get(this.store.focus);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
public get uid() {
|
111
|
+
return this.room?.uid || "";
|
63
112
|
}
|
64
113
|
|
65
114
|
private async onCreated() {
|
@@ -111,11 +160,12 @@ export class AppManager {
|
|
111
160
|
return autorun(() => {
|
112
161
|
const focused = get(this.attributes, "focus");
|
113
162
|
if (this._prevFocused !== focused) {
|
163
|
+
this.boxManager?.focusBox({ appId: focused });
|
114
164
|
callbacks.emit("focusedChange", focused);
|
115
165
|
this._prevFocused = focused;
|
116
166
|
}
|
117
167
|
});
|
118
|
-
})
|
168
|
+
});
|
119
169
|
if (!this.attributes.apps || Object.keys(this.attributes.apps).length === 0) {
|
120
170
|
const mainScenePath = this.store.getMainViewScenePath();
|
121
171
|
if (!mainScenePath) return;
|
@@ -295,10 +345,6 @@ export class AppManager {
|
|
295
345
|
}
|
296
346
|
});
|
297
347
|
}
|
298
|
-
if (state.roomMembers) {
|
299
|
-
this.windowManger.cursorManager?.setRoomMembers(state.roomMembers);
|
300
|
-
this.windowManger.cursorManager?.cleanMemberAttributes(state.roomMembers);
|
301
|
-
}
|
302
348
|
this.appProxies.forEach(appProxy => {
|
303
349
|
appProxy.appEmitter.emit("roomStateChange", state);
|
304
350
|
});
|
@@ -327,32 +373,6 @@ export class AppManager {
|
|
327
373
|
}
|
328
374
|
};
|
329
375
|
|
330
|
-
private get eventName() {
|
331
|
-
return isRoom(this.displayer) ? "onRoomStateChanged" : "onPlayerStateChanged";
|
332
|
-
}
|
333
|
-
|
334
|
-
public get attributes() {
|
335
|
-
return this.windowManger.attributes;
|
336
|
-
}
|
337
|
-
|
338
|
-
public get canOperate() {
|
339
|
-
return this.windowManger.canOperate;
|
340
|
-
}
|
341
|
-
|
342
|
-
public get room() {
|
343
|
-
return isRoom(this.displayer) ? (this.displayer as Room) : undefined;
|
344
|
-
}
|
345
|
-
|
346
|
-
public get mainView() {
|
347
|
-
return this.mainViewProxy.view;
|
348
|
-
}
|
349
|
-
|
350
|
-
public get focusApp() {
|
351
|
-
if (this.store.focus) {
|
352
|
-
return this.appProxies.get(this.store.focus);
|
353
|
-
}
|
354
|
-
}
|
355
|
-
|
356
376
|
public safeSetAttributes(attributes: any) {
|
357
377
|
this.windowManger.safeSetAttributes(attributes);
|
358
378
|
}
|
@@ -399,7 +419,7 @@ export class AppManager {
|
|
399
419
|
this.safeSetAttributes({ _mainSceneIndex: index });
|
400
420
|
}
|
401
421
|
}
|
402
|
-
}
|
422
|
+
};
|
403
423
|
|
404
424
|
public async setMainViewSceneIndex(index: number) {
|
405
425
|
if (this.room) {
|
@@ -413,6 +433,9 @@ export class AppManager {
|
|
413
433
|
if (success) {
|
414
434
|
this.store.setMainViewScenePath(scenePath);
|
415
435
|
this.safeSetAttributes({ _mainSceneIndex: index });
|
436
|
+
this.dispatchInternalEvent(Events.SetMainViewScenePath, {
|
437
|
+
nextScenePath: scenePath,
|
438
|
+
});
|
416
439
|
}
|
417
440
|
} else {
|
418
441
|
throw new Error(`[WindowManager]: ${sceneDir}: ${index} not valid index`);
|
@@ -488,6 +511,7 @@ export class AppManager {
|
|
488
511
|
const reconnected = appProxies.map(appProxy => {
|
489
512
|
return appProxy.onReconnected();
|
490
513
|
});
|
514
|
+
this.mainViewProxy.onReconnect();
|
491
515
|
await Promise.all(reconnected);
|
492
516
|
}
|
493
517
|
|
@@ -504,6 +528,11 @@ export class AppManager {
|
|
504
528
|
});
|
505
529
|
}
|
506
530
|
|
531
|
+
public findMemberByUid = (uid: string) => {
|
532
|
+
const roomMembers = this.room?.state.roomMembers;
|
533
|
+
return roomMembers?.find(member => member.payload?.uid === uid);
|
534
|
+
};
|
535
|
+
|
507
536
|
public destroy() {
|
508
537
|
this.displayer.callbacks.off(this.eventName, this.displayerStateListener);
|
509
538
|
this.displayer.callbacks.off("onEnableWriteNowChanged", this.displayerWritableListener);
|
package/src/AppProxy.ts
CHANGED
@@ -3,11 +3,12 @@ import { AppAttributes, AppEvents, Events } from "./constants";
|
|
3
3
|
import { AppContext } from "./AppContext";
|
4
4
|
import { appRegister } from "./Register";
|
5
5
|
import { autorun } from "white-web-sdk";
|
6
|
+
import { BoxManagerNotFoundError } from "./Utils/error";
|
7
|
+
import { debounce, get } from "lodash";
|
6
8
|
import { emitter } from "./index";
|
7
9
|
import { Fields } from "./AttributesDelegate";
|
8
|
-
import {
|
10
|
+
import { getScenePath, removeScenes, setScenePath, setViewFocusScenePath } from "./Utils/Common";
|
9
11
|
import { log } from "./Utils/log";
|
10
|
-
import { setScenePath, setViewFocusScenePath, getScenePath } from "./Utils/Common";
|
11
12
|
import type {
|
12
13
|
AppEmitterEvent,
|
13
14
|
AppInitState,
|
@@ -19,10 +20,8 @@ import type { SceneState, View, SceneDefinition } from "white-web-sdk";
|
|
19
20
|
import type { AppManager } from "./AppManager";
|
20
21
|
import type { NetlessApp } from "./typings";
|
21
22
|
import type { ReadonlyTeleBox } from "@netless/telebox-insider";
|
22
|
-
import { Base } from "./Base";
|
23
|
-
import { BoxManagerNotFoundError } from "./Utils/error";
|
24
23
|
|
25
|
-
export class AppProxy
|
24
|
+
export class AppProxy {
|
26
25
|
public id: string;
|
27
26
|
public scenePath?: string;
|
28
27
|
public appEmitter: Emittery<AppEmitterEvent>;
|
@@ -32,6 +31,7 @@ export class AppProxy extends Base {
|
|
32
31
|
private boxManager = this.manager.boxManager;
|
33
32
|
private appProxies = this.manager.appProxies;
|
34
33
|
private viewManager = this.manager.viewManager;
|
34
|
+
private store = this.manager.store;
|
35
35
|
private kind: string;
|
36
36
|
public isAddApp: boolean;
|
37
37
|
private status: "normal" | "destroyed" = "normal";
|
@@ -41,11 +41,10 @@ export class AppProxy extends Base {
|
|
41
41
|
|
42
42
|
constructor(
|
43
43
|
private params: BaseInsertParams,
|
44
|
-
manager: AppManager,
|
44
|
+
private manager: AppManager,
|
45
45
|
appId: string,
|
46
46
|
isAddApp: boolean
|
47
47
|
) {
|
48
|
-
super(manager);
|
49
48
|
this.kind = params.kind;
|
50
49
|
this.id = appId;
|
51
50
|
this.stateKey = `${this.id}_state`;
|
@@ -127,7 +126,7 @@ export class AppProxy extends Base {
|
|
127
126
|
} else {
|
128
127
|
throw new Error(`[WindowManager]: app load failed ${params.kind} ${params.src}`);
|
129
128
|
}
|
130
|
-
this.
|
129
|
+
this.boxManager?.updateManagerRect();
|
131
130
|
return {
|
132
131
|
appId: this.id,
|
133
132
|
app: appImpl,
|
@@ -186,6 +185,9 @@ export class AppProxy extends Base {
|
|
186
185
|
canOperate: this.manager.canOperate,
|
187
186
|
smartPosition: this.isAddApp,
|
188
187
|
});
|
188
|
+
if (this.isAddApp && this.box) {
|
189
|
+
this.store.updateAppState(appId, AppAttributes.ZIndex, this.box.zIndex);
|
190
|
+
}
|
189
191
|
} catch (error: any) {
|
190
192
|
console.error(error);
|
191
193
|
throw new Error(`[WindowManager]: app setup error: ${error.message}`);
|
@@ -377,6 +379,9 @@ export class AppProxy extends Base {
|
|
377
379
|
}
|
378
380
|
if (cleanAttrs) {
|
379
381
|
this.store.cleanAppAttributes(this.id);
|
382
|
+
if (this.scenePath) {
|
383
|
+
removeScenes(this.manager.room, this.scenePath);
|
384
|
+
}
|
380
385
|
}
|
381
386
|
this.appProxies.delete(this.id);
|
382
387
|
|
@@ -123,7 +123,7 @@ export class AttributesDelegate {
|
|
123
123
|
return this.getAppAttributes(id)?.options?.scenePath;
|
124
124
|
}
|
125
125
|
|
126
|
-
public getMainViewScenePath() {
|
126
|
+
public getMainViewScenePath(): string | undefined {
|
127
127
|
return this.attributes["_mainScenePath"];
|
128
128
|
}
|
129
129
|
|
@@ -159,7 +159,7 @@ export class AttributesDelegate {
|
|
159
159
|
this.context.safeSetAttributes({ [Fields.MainViewSize]: { ...size } });
|
160
160
|
}
|
161
161
|
|
162
|
-
public setAppFocus(appId: string, focus: boolean) {
|
162
|
+
public setAppFocus = (appId: string, focus: boolean) => {
|
163
163
|
if (focus) {
|
164
164
|
this.context.safeSetAttributes({ [Fields.Focus]: appId });
|
165
165
|
} else {
|
package/src/BoxManager.ts
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
import { AppAttributes, Events, MIN_HEIGHT, MIN_WIDTH } from "./constants";
|
2
|
-
import { debounce
|
2
|
+
import { debounce } from "lodash";
|
3
|
+
import { emitter, WindowManager } from "./index";
|
3
4
|
import {
|
4
|
-
TELE_BOX_MANAGER_EVENT,
|
5
5
|
TELE_BOX_STATE,
|
6
6
|
TeleBoxCollector,
|
7
7
|
TeleBoxManager,
|
8
8
|
} from "@netless/telebox-insider";
|
9
|
-
import { emitter, WindowManager } from "./index";
|
10
9
|
import type { AddAppOptions, AppInitState, EmitterType, CallbacksType } from "./index";
|
11
10
|
import type {
|
12
11
|
TeleBoxManagerUpdateConfig,
|
@@ -15,6 +14,7 @@ import type {
|
|
15
14
|
TeleBoxManagerConfig,
|
16
15
|
TeleBoxColorScheme,
|
17
16
|
TeleBoxRect,
|
17
|
+
TeleBoxConfig,
|
18
18
|
} from "@netless/telebox-insider";
|
19
19
|
import type Emittery from "emittery";
|
20
20
|
import type { NetlessApp } from "./typings";
|
@@ -57,6 +57,7 @@ export type BoxManagerContext = {
|
|
57
57
|
canOperate: () => boolean;
|
58
58
|
notifyContainerRectUpdate: (rect: TeleBoxRect) => void;
|
59
59
|
cleanFocus: () => void;
|
60
|
+
setAppFocus: (appId: string) => void;
|
60
61
|
};
|
61
62
|
|
62
63
|
export const createBoxManager = (
|
@@ -74,6 +75,7 @@ export const createBoxManager = (
|
|
74
75
|
notifyContainerRectUpdate: (rect: TeleBoxRect) =>
|
75
76
|
manager.appManager?.notifyContainerRectUpdate(rect),
|
76
77
|
cleanFocus: () => manager.appManager?.store.cleanFocus(),
|
78
|
+
setAppFocus: (appId: string) => manager.appManager?.store.setAppFocus(appId, true),
|
77
79
|
callbacks,
|
78
80
|
emitter,
|
79
81
|
},
|
@@ -90,17 +92,32 @@ export class BoxManager {
|
|
90
92
|
) {
|
91
93
|
const { emitter, callbacks } = context;
|
92
94
|
this.teleBoxManager = this.setupBoxManager(createTeleBoxManagerConfig);
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
95
|
+
|
96
|
+
// 使用 _xxx$.reaction 订阅修改的值, 不管有没有 skipUpdate, 修改值都会触发回调
|
97
|
+
this.teleBoxManager._state$.reaction(state => {
|
98
|
+
callbacks.emit("boxStateChange", state);
|
99
|
+
emitter.emit("boxStateChange", state);
|
100
|
+
});
|
101
|
+
|
102
|
+
this.teleBoxManager._darkMode$.reaction(darkMode => {
|
103
|
+
callbacks.emit("darkModeChange", darkMode);
|
98
104
|
});
|
105
|
+
this.teleBoxManager._prefersColorScheme$.reaction(colorScheme => {
|
106
|
+
callbacks.emit("prefersColorSchemeChange", colorScheme);
|
107
|
+
});
|
108
|
+
|
109
|
+
// events.on 的值则会根据 skipUpdate 来决定是否触发回调
|
99
110
|
this.teleBoxManager.events.on("minimized", minimized => {
|
100
111
|
this.context.safeSetAttributes({ minimized });
|
101
112
|
if (minimized) {
|
102
113
|
this.context.cleanFocus();
|
103
114
|
this.blurAllBox();
|
115
|
+
} else {
|
116
|
+
const topBox = this.getTopBox();
|
117
|
+
if (topBox) {
|
118
|
+
this.context.setAppFocus(topBox.id);
|
119
|
+
this.focusBox({ appId: topBox.id }, false);
|
120
|
+
}
|
104
121
|
}
|
105
122
|
});
|
106
123
|
this.teleBoxManager.events.on("maximized", maximized => {
|
@@ -136,12 +153,6 @@ export class BoxManager {
|
|
136
153
|
}
|
137
154
|
}
|
138
155
|
});
|
139
|
-
this.teleBoxManager.events.on("dark_mode", darkMode => {
|
140
|
-
callbacks.emit("darkModeChange", darkMode);
|
141
|
-
});
|
142
|
-
this.teleBoxManager.events.on("prefers_color_scheme", colorScheme => {
|
143
|
-
callbacks.emit("prefersColorSchemeChange", colorScheme);
|
144
|
-
});
|
145
156
|
this.teleBoxManager.events.on("z_index", box => {
|
146
157
|
this.context.updateAppState(box.id, AppAttributes.ZIndex, box.zIndex);
|
147
158
|
});
|
@@ -150,7 +161,7 @@ export class BoxManager {
|
|
150
161
|
|
151
162
|
private playgroundSizeChangeListener = () => {
|
152
163
|
this.updateManagerRect();
|
153
|
-
}
|
164
|
+
};
|
154
165
|
|
155
166
|
private get mainView() {
|
156
167
|
return this.context.getMainView();
|
@@ -281,8 +292,7 @@ export class BoxManager {
|
|
281
292
|
}
|
282
293
|
|
283
294
|
public getTopBox(): ReadonlyTeleBox | undefined {
|
284
|
-
|
285
|
-
return maxBy(boxes, "zIndex");
|
295
|
+
return this.teleBoxManager.topBox;
|
286
296
|
}
|
287
297
|
|
288
298
|
public updateBoxState(state?: AppInitState): void {
|
@@ -359,9 +369,9 @@ export class BoxManager {
|
|
359
369
|
this.teleBoxManager.updateAll(config);
|
360
370
|
}
|
361
371
|
|
362
|
-
public setMaximized(maximized: boolean) {
|
372
|
+
public setMaximized(maximized: boolean, skipUpdate = true): void {
|
363
373
|
if (maximized !== this.maximized) {
|
364
|
-
this.teleBoxManager.setMaximized(maximized,
|
374
|
+
this.teleBoxManager.setMaximized(maximized, skipUpdate);
|
365
375
|
}
|
366
376
|
}
|
367
377
|
|
@@ -379,6 +389,10 @@ export class BoxManager {
|
|
379
389
|
}
|
380
390
|
}
|
381
391
|
|
392
|
+
public updateBox(id: string, payload: TeleBoxConfig, skipUpdate = true): void {
|
393
|
+
this.teleBoxManager.update(id, payload, skipUpdate);
|
394
|
+
}
|
395
|
+
|
382
396
|
public setReadonly(readonly: boolean) {
|
383
397
|
this.teleBoxManager.setReadonly(readonly);
|
384
398
|
}
|
package/src/BuiltinApps.ts
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
import AppDocsViewer from "@netless/app-docs-viewer";
|
2
2
|
import AppMediaPlayer, { setOptions } from "@netless/app-media-player";
|
3
3
|
import { WindowManager } from "./index";
|
4
|
-
import "@netless/app-docs-viewer/dist/style.css";
|
5
4
|
|
6
5
|
export const setupBuiltin = () => {
|
7
6
|
if (WindowManager.debug) {
|