@netless/fastboard-react 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -81,7 +81,7 @@ function useForceUpdate() {
81
81
  }
82
82
 
83
83
  // src/style.scss?inline
84
- var style_default = '.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,.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;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;inset: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}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}.tippy-box[data-theme~=light]{color:#26323d;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;background-color:#fff}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.rc-slider{position:relative;height:14px;padding:5px 0;width:100%;border-radius:6px;touch-action:none;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{position:absolute;width:100%;background-color:#e9e9e9;height:4px;border-radius:6px}.rc-slider-track{position:absolute;left:0;height:4px;border-radius:6px;background-color:#abe2fb}.rc-slider-handle{position:absolute;width:14px;height:14px;cursor:pointer;cursor:-webkit-grab;margin-top:-5px;cursor:grab;border-radius:50%;border:solid 2px #96dbfa;background-color:#fff;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-handle,.rc-slider-disabled .rc-slider-dot{border-color:#ccc;box-shadow:none;background-color:#fff;cursor:not-allowed}.rc-slider-disabled .rc-slider-mark-text,.rc-slider-disabled .rc-slider-dot{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{height:100%;width:4px}.rc-slider-vertical .rc-slider-track{left:5px;bottom:0;width:4px}.rc-slider-vertical .rc-slider-handle{margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{height:100%;width:4px}.rc-slider-vertical .rc-slider-dot{left:2px;margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:first-child{margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:last-child{margin-bottom:-4px}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-leave{animation-duration:.3s;animation-fill-mode:both;display:block!important;animation-play-state:paused}.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active,.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;transform-origin:50% 100%;transform:scale(0)}to{transform-origin:50% 100%;transform:scale(1)}}@keyframes rcSliderTooltipZoomDownOut{0%{transform-origin:50% 100%;transform:scale(1)}to{opacity:0;transform-origin:50% 100%;transform:scale(0)}}.rc-slider-tooltip{position:absolute;left:-9999px;top:-9999px;visibility:visible;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{padding:6px 2px;min-width:24px;height:24px;font-size:12px;line-height:1;color:#fff;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c}.fastboard-root{position:relative;width:100%;height:100%;overflow:hidden}.fastboard-view{position:absolute;top:0;left:0;width:100%;height:100%}.fastboard-left{position:absolute;top:0;left:0;height:calc(100% - 48px);padding:16px;z-index:201;display:flex;align-items:center}.fastboard-bottom-left,.fastboard-bottom-right{display:flex;gap:10px;position:absolute;bottom:8px;left:8px;padding:8px;z-index:200}.fastboard-bottom-right{left:initial;right:8px}.fastboard-redo-undo{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-redo-undo.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-redo-undo.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-redo-undo-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-redo-undo-btn svg,.fastboard-redo-undo-btn img{width:1em;height:1em}.fastboard-redo-undo-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-redo-undo-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-redo-undo-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-page-control{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-page-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-page-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-page-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-page-control-btn svg,.fastboard-page-control-btn img{width:1em;height:1em}.fastboard-page-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-page-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-page-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-page-control-cut-line{height:24px;width:.5px}.fastboard-page-control-cut-line.light{background-color:#e7e7e7}.fastboard-page-control-cut-line.dark{background-color:#ffffff26}.fastboard-page-control-slash{opacity:.6}.fastboard-page-control-page,.fastboard-page-control-slash,.fastboard-page-control-page-count{font-size:12px;font-variant-numeric:tabular-nums}.fastboard-zoom-control{position:relative;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-zoom-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-zoom-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-zoom-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-zoom-control-btn svg,.fastboard-zoom-control-btn img{width:1em;height:1em}.fastboard-zoom-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-zoom-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-zoom-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-zoom-control-cut-line{height:24px;width:.5px}.fastboard-zoom-control-cut-line.light{background-color:#e7e7e7}.fastboard-zoom-control-cut-line.dark{background-color:#ffffff26}.fastboard-zoom-control-percent{opacity:.6}.fastboard-zoom-control-scale,.fastboard-zoom-control-percent{font-size:12px;font-variant-numeric:tabular-nums}.fastboard-toolbar{display:flex;align-items:center;padding:4px;border-radius:4px;flex-direction:column;gap:4px;position:absolute;z-index:100;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-toolbar .rc-slider{padding:6px 0}.fastboard-toolbar .rc-slider-rail,.fastboard-toolbar .rc-slider-track{height:2px}.fastboard-toolbar .tippy-content{padding:8px}.fastboard-toolbar .tippy-box{border:1px solid rgba(0,0,0,.15);background-color:#333333f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-toolbar .tippy-box[data-theme~=light]{background-color:#fffffff2;box-shadow:0 5px 10px #00000040}.fastboard-toolbar.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-toolbar.expanded{border:1px solid rgba(0,0,0,.15)}.fastboard-toolbar.dark{color:#ddd;background-color:#333333d9}.fastboard-toolbar.expanded:hover{box-shadow:0 0 5px #00000040;transform:translate(0)}.fastboard-toolbar.collapsed{padding:0;background-color:transparent}.fastboard-toolbar-tooltip{display:inline-flex;align-items:center;gap:4px}.fastboard-toolbar-hotkey{margin-right:-4px;width:24px;height:24px;border-radius:4px;background-color:#ffffff1a;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:4px;width:32px;height:32px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1;position:relative}.fastboard-toolbar-btn-interactive{display:inline-block;width:32px;height:32px}.fastboard-toolbar-btn svg,.fastboard-toolbar-btn img{width:1em;height:1em}.fastboard-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-toolbar-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-toolbar-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-toolbar-triangle{width:0px;height:0px;border-bottom:4px solid;border-left:4px solid transparent;position:absolute;bottom:0;right:0}.fastboard-toolbar-cut-line{display:inline-block;height:.5px;width:100%}.fastboard-toolbar-cut-line.light{background-color:#e7e7e7}.fastboard-toolbar-cut-line.dark{background-color:#ffffff26}.fastboard-toolbar-section{display:inline-flex;flex-flow:column nowrap;gap:4px;scroll-behavior:smooth}.fastboard-toolbar-section.collapsed{transform:translate(-100%);transition:1s transform}.fastboard-toolbar-panel{width:120px;padding:0;display:flex;flex-flow:column nowrap;align-items:center;gap:8px}.fastboard-toolbar-panel.apps{width:224px}.fastboard-toolbar-color-box,.fastboard-toolbar-shapes{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;align-items:center;justify-items:center}.fastboard-toolbar-color-box .fastboard-toolbar-btn,.fastboard-toolbar-shapes .fastboard-toolbar-btn{padding:0;width:24px;height:24px}.fastboard-toolbar-apps{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;align-items:center;justify-items:center}.fastboard-toolbar-apps .fastboard-toolbar-btn{width:40px;height:40px;font-size:40px}.fastboard-toolbar-app-icon{padding-top:4px;display:inline-flex;flex-flow:column nowrap;align-items:center;gap:4px}.fastboard-toolbar-app-icon .fastboard-toolbar-btn{padding:0}.fastboard-toolbar-app-icon-text{font-size:12px;color:#5d5d5d;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fastboard-toolbar-color-item{width:24px;height:24px;border-radius:4px;cursor:pointer}.fastboard-toolbar-color-item *.light:hover{background-color:#f5f5f5}.fastboard-toolbar-color-item *.dark:hover{background-color:#333}.fastboard-toolbar-color-border{width:24px;height:24px;border:1px solid transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-color-border.active.light,.fastboard-toolbar-color-border.active.dark{border:1px solid rgba(51,129,255,.8)}.fastboard-toolbar-color-btn{margin:0;border:1px solid rgba(0,0,0,.24);padding:0;appearance:none;width:16px;height:16px;border-radius:4px;cursor:pointer}.fastboard-toolbar-color-btn:focus-visible{outline-offset:2px}.fastboard-toolbar-mask-btn{width:17px;height:62px;cursor:pointer}.fastboard-toolbar-mask-btn.dark{filter:invert(.8)}.fastboard-toolbar-expand-btn{display:flex;align-items:center;position:absolute;left:0}.fastboard-player-control{width:100%;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-player-control.auto-hide{opacity:0;transition:opacity .2s}.fastboard-player-control.auto-hide:hover{opacity:1}.fastboard-player-control .rc-slider-disabled{background:transparent;opacity:.5}.fastboard-player-control .rc-slider-rail,.fastboard-player-control .rc-slider-track{height:2px}.fastboard-player-control .tippy-content{padding:8px}.fastboard-player-control .tippy-box{border:1px solid rgba(0,0,0,.15);background-color:#333333f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-player-control .tippy-box[data-theme~=light]{background-color:#fffffff2;box-shadow:0 5px 10px #00000040}.fastboard-player-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-player-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-player-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;min-width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.fastboard-player-control-btn svg,.fastboard-player-control-btn img{width:1em;height:1em}.fastboard-player-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-player-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-player-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-player-control-btn.loading{animation:fastboard-player-control-rotate .5s linear infinite}@keyframes fastboard-player-control-rotate{to{transform:rotate(360deg)}}.fastboard-player-control-panel{padding:0;display:flex;flex-flow:column nowrap;align-items:stretch;gap:4px}.fastboard-player-control-panel .fastboard-player-control-btn{width:initial;height:initial;user-select:none;font-size:12px;padding:4px;justify-content:flex-end}.fastboard-player-control-panel .fastboard-player-control-btn.active{color:#3381ff}.fastboard-player-control-slider{width:100%;padding:0 7px}.fastboard-player-control-slider.loading{cursor:not-allowed}.fastboard-player-control-slash{opacity:.6}.fastboard-player-control-current,.fastboard-player-control-slash,.fastboard-player-control-total,.fastboard-player-control-speed-text{font-size:12px;font-variant-numeric:tabular-nums}.tippy-box.fastboard-tip{color:#eee;background-color:#000000f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.tippy-box.fastboard-tip[data-placement^=right]>.tippy-arrow:before{top:4px;border-width:4px;border-right-color:#000}.tippy-box.fastboard-tip[data-placement^=top]>.tippy-arrow:before{left:4px;border-width:4px;border-top-color:#000}\n';
84
+ var style_default = '.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,.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;inset: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}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}.tippy-box[data-theme~=light]{color:#26323d;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;background-color:#fff}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.rc-slider{position:relative;height:14px;padding:5px 0;width:100%;border-radius:6px;touch-action:none;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{position:absolute;width:100%;background-color:#e9e9e9;height:4px;border-radius:6px}.rc-slider-track{position:absolute;left:0;height:4px;border-radius:6px;background-color:#abe2fb}.rc-slider-handle{position:absolute;width:14px;height:14px;cursor:pointer;cursor:-webkit-grab;margin-top:-5px;cursor:grab;border-radius:50%;border:solid 2px #96dbfa;background-color:#fff;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-handle,.rc-slider-disabled .rc-slider-dot{border-color:#ccc;box-shadow:none;background-color:#fff;cursor:not-allowed}.rc-slider-disabled .rc-slider-mark-text,.rc-slider-disabled .rc-slider-dot{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{height:100%;width:4px}.rc-slider-vertical .rc-slider-track{left:5px;bottom:0;width:4px}.rc-slider-vertical .rc-slider-handle{margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{height:100%;width:4px}.rc-slider-vertical .rc-slider-dot{left:2px;margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:first-child{margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:last-child{margin-bottom:-4px}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-leave{animation-duration:.3s;animation-fill-mode:both;display:block!important;animation-play-state:paused}.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active,.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;transform-origin:50% 100%;transform:scale(0)}to{transform-origin:50% 100%;transform:scale(1)}}@keyframes rcSliderTooltipZoomDownOut{0%{transform-origin:50% 100%;transform:scale(1)}to{opacity:0;transform-origin:50% 100%;transform:scale(0)}}.rc-slider-tooltip{position:absolute;left:-9999px;top:-9999px;visibility:visible;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{padding:6px 2px;min-width:24px;height:24px;font-size:12px;line-height:1;color:#fff;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c}.fastboard-root{position:relative;width:100%;height:100%;overflow:hidden}.fastboard-view{position:absolute;top:0;left:0;width:100%;height:100%}.fastboard-left{position:absolute;top:0;left:0;height:calc(100% - 48px);padding:16px;z-index:201;display:flex;align-items:center}.fastboard-bottom-left,.fastboard-bottom-right{display:flex;gap:10px;position:absolute;bottom:8px;left:8px;padding:8px;z-index:200}.fastboard-bottom-right{left:initial;right:8px}.fastboard-redo-undo{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-redo-undo.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-redo-undo.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-redo-undo-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-redo-undo-btn svg,.fastboard-redo-undo-btn img{width:1em;height:1em}.fastboard-redo-undo-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-redo-undo-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-redo-undo-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-page-control{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-page-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-page-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-page-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-page-control-btn svg,.fastboard-page-control-btn img{width:1em;height:1em}.fastboard-page-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-page-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-page-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-page-control-cut-line{height:24px;width:.5px}.fastboard-page-control-cut-line.light{background-color:#e7e7e7}.fastboard-page-control-cut-line.dark{background-color:#ffffff26}.fastboard-page-control-slash{opacity:.6}.fastboard-page-control-page,.fastboard-page-control-slash,.fastboard-page-control-page-count{font-size:12px;font-variant-numeric:tabular-nums}.fastboard-zoom-control{position:relative;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-zoom-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-zoom-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-zoom-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-zoom-control-btn svg,.fastboard-zoom-control-btn img{width:1em;height:1em}.fastboard-zoom-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-zoom-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-zoom-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-zoom-control-cut-line{height:24px;width:.5px}.fastboard-zoom-control-cut-line.light{background-color:#e7e7e7}.fastboard-zoom-control-cut-line.dark{background-color:#ffffff26}.fastboard-zoom-control-percent{opacity:.6}.fastboard-zoom-control-scale,.fastboard-zoom-control-percent{font-size:12px;font-variant-numeric:tabular-nums}.fastboard-toolbar{display:flex;align-items:center;padding:4px;border-radius:4px;flex-direction:column;gap:4px;position:absolute;z-index:100;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-toolbar .rc-slider{padding:6px 0}.fastboard-toolbar .rc-slider-rail,.fastboard-toolbar .rc-slider-track{height:2px}.fastboard-toolbar .tippy-content{padding:8px}.fastboard-toolbar .tippy-box{border:1px solid rgba(0,0,0,.15);background-color:#333333f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-toolbar .tippy-box[data-theme~=light]{background-color:#fffffff2;box-shadow:0 5px 10px #00000040}.fastboard-toolbar.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-toolbar.expanded{border:1px solid rgba(0,0,0,.15)}.fastboard-toolbar.dark{color:#ddd;background-color:#333333d9}.fastboard-toolbar.expanded:hover{box-shadow:0 0 5px #00000040;transform:translate(0)}.fastboard-toolbar.collapsed{padding:0;background-color:transparent}.fastboard-toolbar-tooltip{display:inline-flex;align-items:center;gap:4px}.fastboard-toolbar-hotkey{margin-right:-4px;width:24px;height:24px;border-radius:4px;background-color:#ffffff1a;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:4px;width:32px;height:32px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1;position:relative}.fastboard-toolbar-btn-interactive{display:inline-block;width:32px;height:32px}.fastboard-toolbar-btn svg,.fastboard-toolbar-btn img{width:1em;height:1em}.fastboard-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-toolbar-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-toolbar-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-toolbar-triangle{width:0px;height:0px;border-bottom:4px solid;border-left:4px solid transparent;position:absolute;bottom:0;right:0}.fastboard-toolbar-cut-line{display:inline-block;height:.5px;width:100%}.fastboard-toolbar-cut-line.light{background-color:#e7e7e7}.fastboard-toolbar-cut-line.dark{background-color:#ffffff26}.fastboard-toolbar-section{display:inline-flex;flex-flow:column nowrap;gap:4px;scroll-behavior:smooth}.fastboard-toolbar-section.collapsed{transform:translate(-100%);transition:1s transform}.fastboard-toolbar-panel{width:120px;padding:0;display:flex;flex-flow:column nowrap;align-items:center;gap:8px}.fastboard-toolbar-panel.apps{width:224px}.fastboard-toolbar-color-box,.fastboard-toolbar-shapes{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;align-items:center;justify-items:center}.fastboard-toolbar-color-box .fastboard-toolbar-btn,.fastboard-toolbar-shapes .fastboard-toolbar-btn{padding:0;width:24px;height:24px}.fastboard-toolbar-apps{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;align-items:center;justify-items:center}.fastboard-toolbar-apps .fastboard-toolbar-btn{width:40px;height:40px;font-size:40px}.fastboard-toolbar-app-icon{padding-top:4px;display:inline-flex;flex-flow:column nowrap;align-items:center;gap:4px}.fastboard-toolbar-app-icon .fastboard-toolbar-btn{padding:0}.fastboard-toolbar-app-icon-text{font-size:12px;color:#5d5d5d;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fastboard-toolbar-color-item{width:24px;height:24px;border-radius:4px;cursor:pointer}.fastboard-toolbar-color-item *.light:hover{background-color:#f5f5f5}.fastboard-toolbar-color-item *.dark:hover{background-color:#333}.fastboard-toolbar-color-border{width:24px;height:24px;border:1px solid transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-color-border.active.light,.fastboard-toolbar-color-border.active.dark{border:1px solid rgba(51,129,255,.8)}.fastboard-toolbar-color-btn{margin:0;border:1px solid rgba(0,0,0,.24);padding:0;appearance:none;width:16px;height:16px;border-radius:4px;cursor:pointer}.fastboard-toolbar-color-btn:focus-visible{outline-offset:2px}.fastboard-toolbar-mask-btn{width:17px;height:62px;cursor:pointer}.fastboard-toolbar-mask-btn.dark{filter:invert(.8)}.fastboard-toolbar-expand-btn{display:flex;align-items:center;position:absolute;left:0}.fastboard-player-control{width:100%;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-player-control.auto-hide{opacity:0;transition:opacity .2s}.fastboard-player-control.auto-hide:hover{opacity:1}.fastboard-player-control .rc-slider-disabled{background:transparent;opacity:.5}.fastboard-player-control .rc-slider-rail,.fastboard-player-control .rc-slider-track{height:2px}.fastboard-player-control .tippy-content{padding:8px}.fastboard-player-control .tippy-box{border:1px solid rgba(0,0,0,.15);background-color:#333333f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-player-control .tippy-box[data-theme~=light]{background-color:#fffffff2;box-shadow:0 5px 10px #00000040}.fastboard-player-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-player-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-player-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;min-width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.fastboard-player-control-btn svg,.fastboard-player-control-btn img{width:1em;height:1em}.fastboard-player-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-player-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-player-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-player-control-btn.loading{animation:fastboard-player-control-rotate .5s linear infinite}@keyframes fastboard-player-control-rotate{to{transform:rotate(360deg)}}.fastboard-player-control-panel{padding:0;display:flex;flex-flow:column nowrap;align-items:stretch;gap:4px}.fastboard-player-control-panel .fastboard-player-control-btn{width:initial;height:initial;user-select:none;font-size:12px;padding:4px;justify-content:flex-end}.fastboard-player-control-panel .fastboard-player-control-btn.active{color:#3381ff}.fastboard-player-control-slider{width:100%;padding:0 7px}.fastboard-player-control-slider.loading{cursor:not-allowed}.fastboard-player-control-slash{opacity:.6}.fastboard-player-control-current,.fastboard-player-control-slash,.fastboard-player-control-total,.fastboard-player-control-speed-text{font-size:12px;font-variant-numeric:tabular-nums}.tippy-box.fastboard-tip{color:#eee;background-color:#000000f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.tippy-box.fastboard-tip[data-placement^=right]>.tippy-arrow:before{top:4px;border-width:4px;border-right-color:#000}.tippy-box.fastboard-tip[data-placement^=top]>.tippy-arrow:before{left:4px;border-width:4px;border-top-color:#000}\n';
85
85
 
86
86
  // src/behaviors/style.ts
87
87
  applyStyles(style_default);
@@ -89,8 +89,8 @@ applyStyles(style_default);
89
89
  // src/components/hooks.ts
90
90
  import { BuiltinApps } from "@netless/window-manager";
91
91
  import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react";
92
- var FastboardAppContext = createContext(null);
93
- var ThemeContext = createContext("light");
92
+ var FastboardAppContext = /* @__PURE__ */ createContext(null);
93
+ var ThemeContext = /* @__PURE__ */ createContext("light");
94
94
  function useTheme(userTheme) {
95
95
  const themeFromContext = useContext(ThemeContext);
96
96
  return userTheme || themeFromContext;
@@ -235,7 +235,7 @@ var createI18n = async ({
235
235
  });
236
236
  return i18next;
237
237
  };
238
- var I18nContext = createContext2(null);
238
+ var I18nContext = /* @__PURE__ */ createContext2(null);
239
239
  function useTranslation() {
240
240
  const i18n = useContext2(I18nContext);
241
241
  const t = useMemo(() => i18n ? i18n.getFixedT(null, ["translation"]) : (id) => id, [i18n]);
@@ -245,7 +245,7 @@ function useTranslation() {
245
245
  // src/icons/index.tsx
246
246
  import React from "react";
247
247
  function Icon({ fallback, src, alt = "[icon]" }) {
248
- return src ? React.createElement("img", {
248
+ return src ? /* @__PURE__ */ React.createElement("img", {
249
249
  src,
250
250
  alt,
251
251
  title: alt
@@ -283,17 +283,17 @@ var RightOffset = [0, 11];
283
283
  function Redo({ theme = "light", active }) {
284
284
  const config = themes[theme];
285
285
  const stroke = active ? config.activeColor : config.color;
286
- return React2.createElement("svg", {
286
+ return /* @__PURE__ */ React2.createElement("svg", {
287
287
  viewBox: "0 0 24 24"
288
- }, React2.createElement("g", {
288
+ }, /* @__PURE__ */ React2.createElement("g", {
289
289
  fill: "none",
290
290
  fillRule: "evenodd",
291
291
  stroke,
292
292
  strokeLinecap: "round",
293
293
  strokeLinejoin: "round"
294
- }, React2.createElement("path", {
294
+ }, /* @__PURE__ */ React2.createElement("path", {
295
295
  d: "M14 14h4v-4"
296
- }), React2.createElement("path", {
296
+ }), /* @__PURE__ */ React2.createElement("path", {
297
297
  d: "m18 14-.788-.9A7.005 7.005 0 0 0 6 14h0"
298
298
  })));
299
299
  }
@@ -303,17 +303,17 @@ import React3 from "react";
303
303
  function Undo({ theme = "light", active }) {
304
304
  const config = themes[theme];
305
305
  const stroke = active ? config.activeColor : config.color;
306
- return React3.createElement("svg", {
306
+ return /* @__PURE__ */ React3.createElement("svg", {
307
307
  viewBox: "0 0 24 24"
308
- }, React3.createElement("g", {
308
+ }, /* @__PURE__ */ React3.createElement("g", {
309
309
  fill: "none",
310
310
  fillRule: "evenodd",
311
311
  stroke,
312
312
  strokeLinecap: "round",
313
313
  strokeLinejoin: "round"
314
- }, React3.createElement("path", {
314
+ }, /* @__PURE__ */ React3.createElement("path", {
315
315
  d: "M10 14H6v-4"
316
- }), React3.createElement("path", {
316
+ }), /* @__PURE__ */ React3.createElement("path", {
317
317
  d: "m6 14 .788-.9A7.005 7.005 0 0 1 18 14h0"
318
318
  })));
319
319
  }
@@ -326,9 +326,9 @@ function RedoUndo({ theme, undoIcon, undoIconDisable, redoIcon, redoIconDisable
326
326
  const writable = useWritable();
327
327
  const { redoSteps, undoSteps, redo, undo } = useRedoUndo();
328
328
  const disabled = !writable;
329
- return React4.createElement("div", {
329
+ return /* @__PURE__ */ React4.createElement("div", {
330
330
  className: clsx(name, theme)
331
- }, React4.createElement(Tippy, {
331
+ }, /* @__PURE__ */ React4.createElement(Tippy, {
332
332
  className: "fastboard-tip",
333
333
  content: t("undo"),
334
334
  theme,
@@ -337,17 +337,17 @@ function RedoUndo({ theme, undoIcon, undoIconDisable, redoIcon, redoIconDisable
337
337
  delay: [1e3, 400],
338
338
  duration: 300,
339
339
  offset: TopOffset
340
- }, React4.createElement("button", {
340
+ }, /* @__PURE__ */ React4.createElement("button", {
341
341
  className: clsx(`${name}-btn`, "undo", theme),
342
342
  disabled: disabled || undoSteps === 0,
343
343
  onClick: undo
344
- }, React4.createElement(Icon, {
345
- fallback: React4.createElement(Undo, {
344
+ }, /* @__PURE__ */ React4.createElement(Icon, {
345
+ fallback: /* @__PURE__ */ React4.createElement(Undo, {
346
346
  theme
347
347
  }),
348
348
  src: undoSteps === 0 ? undoIconDisable : undoIcon,
349
349
  alt: "[undo]"
350
- }))), React4.createElement(Tippy, {
350
+ }))), /* @__PURE__ */ React4.createElement(Tippy, {
351
351
  className: "fastboard-tip",
352
352
  content: t("redo"),
353
353
  theme,
@@ -356,12 +356,12 @@ function RedoUndo({ theme, undoIcon, undoIconDisable, redoIcon, redoIconDisable
356
356
  delay: [1e3, 400],
357
357
  duration: 300,
358
358
  offset: TopOffset
359
- }, React4.createElement("button", {
359
+ }, /* @__PURE__ */ React4.createElement("button", {
360
360
  className: clsx(`${name}-btn`, "redo", theme),
361
361
  disabled: disabled || redoSteps === 0,
362
362
  onClick: redo
363
- }, React4.createElement(Icon, {
364
- fallback: React4.createElement(Redo, {
363
+ }, /* @__PURE__ */ React4.createElement(Icon, {
364
+ fallback: /* @__PURE__ */ React4.createElement(Redo, {
365
365
  theme
366
366
  }),
367
367
  src: redoSteps === 0 ? redoIconDisable : redoIcon,
@@ -443,9 +443,9 @@ import React5 from "react";
443
443
  function Minus({ theme = "light", active }) {
444
444
  const config = themes[theme];
445
445
  const stroke = active ? config.activeColor : config.color;
446
- return React5.createElement("svg", {
446
+ return /* @__PURE__ */ React5.createElement("svg", {
447
447
  viewBox: "0 0 24 24"
448
- }, React5.createElement("path", {
448
+ }, /* @__PURE__ */ React5.createElement("path", {
449
449
  fill: "none",
450
450
  stroke,
451
451
  strokeLinecap: "round",
@@ -459,9 +459,9 @@ import React6 from "react";
459
459
  function Plus({ theme = "light", active }) {
460
460
  const config = themes[theme];
461
461
  const stroke = active ? config.activeColor : config.color;
462
- return React6.createElement("svg", {
462
+ return /* @__PURE__ */ React6.createElement("svg", {
463
463
  viewBox: "0 0 24 24"
464
- }, React6.createElement("path", {
464
+ }, /* @__PURE__ */ React6.createElement("path", {
465
465
  fill: "none",
466
466
  stroke,
467
467
  strokeLinecap: "round",
@@ -475,22 +475,22 @@ import React7 from "react";
475
475
  function Reset({ theme = "light", active }) {
476
476
  const config = themes[theme];
477
477
  const stroke = active ? config.activeColor : config.color;
478
- return React7.createElement("svg", {
478
+ return /* @__PURE__ */ React7.createElement("svg", {
479
479
  viewBox: "0 0 24 24"
480
- }, React7.createElement("g", {
480
+ }, /* @__PURE__ */ React7.createElement("g", {
481
481
  fill: "none",
482
482
  fillRule: "evenodd",
483
483
  transform: "translate(-176 -684)"
484
- }, React7.createElement("path", {
484
+ }, /* @__PURE__ */ React7.createElement("path", {
485
485
  stroke,
486
486
  strokeLinejoin: "round",
487
487
  d: "M188 688v4m0 8v4m8-8h-4m-8 0h-4"
488
- }), React7.createElement("circle", {
488
+ }), /* @__PURE__ */ React7.createElement("circle", {
489
489
  cx: "188",
490
490
  cy: "696",
491
491
  r: "6",
492
492
  stroke
493
- }), React7.createElement("circle", {
493
+ }), /* @__PURE__ */ React7.createElement("circle", {
494
494
  cx: "188",
495
495
  cy: "696",
496
496
  r: "1",
@@ -514,9 +514,9 @@ function ZoomControl({
514
514
  const writable = useWritable();
515
515
  const { scale, resetCamera, zoomIn, zoomOut } = useZoomControl();
516
516
  const disabled = !writable;
517
- return React8.createElement("div", {
517
+ return /* @__PURE__ */ React8.createElement("div", {
518
518
  className: clsx2(name2, theme)
519
- }, React8.createElement(Tippy2, {
519
+ }, /* @__PURE__ */ React8.createElement(Tippy2, {
520
520
  className: "fastboard-tip",
521
521
  content: t("zoomOut"),
522
522
  theme,
@@ -525,21 +525,21 @@ function ZoomControl({
525
525
  delay: [1e3, 400],
526
526
  duration: 300,
527
527
  offset: TopOffset
528
- }, React8.createElement("button", {
528
+ }, /* @__PURE__ */ React8.createElement("button", {
529
529
  className: clsx2(`${name2}-btn`, "minus", theme),
530
530
  disabled,
531
531
  onClick: zoomOut
532
- }, React8.createElement(Icon, {
533
- fallback: React8.createElement(Minus, {
532
+ }, /* @__PURE__ */ React8.createElement(Icon, {
533
+ fallback: /* @__PURE__ */ React8.createElement(Minus, {
534
534
  theme
535
535
  }),
536
536
  src: disabled ? minusIconDisable : minusIcon,
537
537
  alt: "[minus]"
538
- }))), React8.createElement("span", {
538
+ }))), /* @__PURE__ */ React8.createElement("span", {
539
539
  className: clsx2(`${name2}-scale`, theme)
540
- }, Math.ceil(scale * 100)), React8.createElement("span", {
540
+ }, Math.ceil(scale * 100)), /* @__PURE__ */ React8.createElement("span", {
541
541
  className: clsx2(`${name2}-percent`, theme)
542
- }, "%"), React8.createElement(Tippy2, {
542
+ }, "%"), /* @__PURE__ */ React8.createElement(Tippy2, {
543
543
  className: "fastboard-tip",
544
544
  content: t("zoomIn"),
545
545
  theme,
@@ -548,17 +548,17 @@ function ZoomControl({
548
548
  delay: [1e3, 400],
549
549
  duration: 300,
550
550
  offset: TopOffset
551
- }, React8.createElement("button", {
551
+ }, /* @__PURE__ */ React8.createElement("button", {
552
552
  className: clsx2(`${name2}-btn`, "plus", theme),
553
553
  disabled,
554
554
  onClick: zoomIn
555
- }, React8.createElement(Icon, {
556
- fallback: React8.createElement(Plus, {
555
+ }, /* @__PURE__ */ React8.createElement(Icon, {
556
+ fallback: /* @__PURE__ */ React8.createElement(Plus, {
557
557
  theme
558
558
  }),
559
559
  src: disabled ? plusIconDisable : plusIcon,
560
560
  alt: "[plus]"
561
- }))), React8.createElement(Tippy2, {
561
+ }))), /* @__PURE__ */ React8.createElement(Tippy2, {
562
562
  className: "fastboard-tip",
563
563
  content: t("reset"),
564
564
  theme,
@@ -567,12 +567,12 @@ function ZoomControl({
567
567
  delay: [1e3, 400],
568
568
  duration: 300,
569
569
  offset: TopOffset
570
- }, React8.createElement("button", {
570
+ }, /* @__PURE__ */ React8.createElement("button", {
571
571
  className: clsx2(`${name2}-btn`, "reset", theme),
572
572
  disabled,
573
573
  onClick: resetCamera
574
- }, React8.createElement(Icon, {
575
- fallback: React8.createElement(Reset, {
574
+ }, /* @__PURE__ */ React8.createElement(Icon, {
575
+ fallback: /* @__PURE__ */ React8.createElement(Reset, {
576
576
  theme
577
577
  }),
578
578
  src: disabled ? resetIconDisable : resetIcon,
@@ -610,9 +610,9 @@ import React9 from "react";
610
610
  function ChevronLeft({ theme = "light", active }) {
611
611
  const config = themes[theme];
612
612
  const stroke = active ? config.activeColor : config.color;
613
- return React9.createElement("svg", {
613
+ return /* @__PURE__ */ React9.createElement("svg", {
614
614
  viewBox: "0 0 24 24"
615
- }, React9.createElement("path", {
615
+ }, /* @__PURE__ */ React9.createElement("path", {
616
616
  fill: "none",
617
617
  stroke,
618
618
  strokeLinecap: "round",
@@ -626,9 +626,9 @@ import React10 from "react";
626
626
  function ChevronRight({ theme = "light", active }) {
627
627
  const config = themes[theme];
628
628
  const stroke = active ? config.activeColor : config.color;
629
- return React10.createElement("svg", {
629
+ return /* @__PURE__ */ React10.createElement("svg", {
630
630
  viewBox: "0 0 24 24"
631
- }, React10.createElement("path", {
631
+ }, /* @__PURE__ */ React10.createElement("path", {
632
632
  fill: "none",
633
633
  stroke,
634
634
  strokeLinecap: "round",
@@ -642,9 +642,9 @@ import React11 from "react";
642
642
  function FilePlus({ theme = "light", active }) {
643
643
  const config = themes[theme];
644
644
  const stroke = active ? config.activeColor : config.color;
645
- return React11.createElement("svg", {
645
+ return /* @__PURE__ */ React11.createElement("svg", {
646
646
  viewBox: "0 0 24 24"
647
- }, React11.createElement("path", {
647
+ }, /* @__PURE__ */ React11.createElement("path", {
648
648
  fill: stroke,
649
649
  d: "M12 7.5a.5.5 0 0 1 .09.992L12 8.5H8a1.5 1.5 0 0 0-1.493 1.356L6.5 10v6a1.5 1.5 0 0 0 1.356 1.493L8 17.5h6a1.5 1.5 0 0 0 1.493-1.356L15.5 16v-4a.5.5 0 0 1 .992-.09l.008.09v4a2.5 2.5 0 0 1-2.336 2.495L14 18.5H8a2.5 2.5 0 0 1-2.495-2.336L5.5 16v-6a2.5 2.5 0 0 1 2.336-2.495L8 7.5h4Zm4-2a.5.5 0 0 1 .492.41L16.5 6v1.5H18a.5.5 0 0 1 .09.992L18 8.5h-1.5V10a.5.5 0 0 1-.992.09L15.5 10V8.5H14a.5.5 0 0 1-.09-.992L14 7.5h1.5V6a.5.5 0 0 1 .5-.5Z"
650
650
  }));
@@ -666,9 +666,9 @@ function PageControl({
666
666
  const writable = useWritable();
667
667
  const _a = usePageControl(), { pageIndex, pageCount } = _a, actions = __objRest(_a, ["pageIndex", "pageCount"]);
668
668
  const disabled = !writable;
669
- return React12.createElement("div", {
669
+ return /* @__PURE__ */ React12.createElement("div", {
670
670
  className: clsx3(name3, theme)
671
- }, React12.createElement(Tippy3, {
671
+ }, /* @__PURE__ */ React12.createElement(Tippy3, {
672
672
  className: "fastboard-tip",
673
673
  content: t("prevPage"),
674
674
  theme,
@@ -677,23 +677,23 @@ function PageControl({
677
677
  delay: [1e3, 400],
678
678
  duration: 300,
679
679
  offset: TopOffset
680
- }, React12.createElement("button", {
680
+ }, /* @__PURE__ */ React12.createElement("button", {
681
681
  className: clsx3(`${name3}-btn`, "prev", theme),
682
682
  disabled: disabled || pageIndex === 0,
683
683
  onClick: actions.prevPage
684
- }, React12.createElement(Icon, {
685
- fallback: React12.createElement(ChevronLeft, {
684
+ }, /* @__PURE__ */ React12.createElement(Icon, {
685
+ fallback: /* @__PURE__ */ React12.createElement(ChevronLeft, {
686
686
  theme
687
687
  }),
688
688
  src: disabled ? prevIconDisable : prevIcon,
689
689
  alt: "[prev]"
690
- }))), React12.createElement("span", {
690
+ }))), /* @__PURE__ */ React12.createElement("span", {
691
691
  className: clsx3(`${name3}-page`, theme)
692
- }, pageCount === 0 ? "\u2026" : pageIndex + 1), React12.createElement("span", {
692
+ }, pageCount === 0 ? "\u2026" : pageIndex + 1), /* @__PURE__ */ React12.createElement("span", {
693
693
  className: clsx3(`${name3}-slash`, theme)
694
- }, "/"), React12.createElement("span", {
694
+ }, "/"), /* @__PURE__ */ React12.createElement("span", {
695
695
  className: clsx3(`${name3}-page-count`, theme)
696
- }, pageCount), React12.createElement(Tippy3, {
696
+ }, pageCount), /* @__PURE__ */ React12.createElement(Tippy3, {
697
697
  className: "fastboard-tip",
698
698
  content: t("nextPage"),
699
699
  theme,
@@ -702,17 +702,17 @@ function PageControl({
702
702
  delay: [1e3, 400],
703
703
  duration: 300,
704
704
  offset: TopOffset
705
- }, React12.createElement("button", {
705
+ }, /* @__PURE__ */ React12.createElement("button", {
706
706
  className: clsx3(`${name3}-btn`, "next", theme),
707
707
  disabled: disabled || pageIndex === pageCount - 1,
708
708
  onClick: actions.nextPage
709
- }, React12.createElement(Icon, {
710
- fallback: React12.createElement(ChevronRight, {
709
+ }, /* @__PURE__ */ React12.createElement(Icon, {
710
+ fallback: /* @__PURE__ */ React12.createElement(ChevronRight, {
711
711
  theme
712
712
  }),
713
713
  src: disabled ? nextIconDisable : nextIcon,
714
714
  alt: "[next]"
715
- }))), React12.createElement(Tippy3, {
715
+ }))), /* @__PURE__ */ React12.createElement(Tippy3, {
716
716
  className: "fastboard-tip",
717
717
  content: t("addPage"),
718
718
  theme,
@@ -721,12 +721,12 @@ function PageControl({
721
721
  delay: [1e3, 400],
722
722
  duration: 300,
723
723
  offset: TopOffset
724
- }, React12.createElement("button", {
724
+ }, /* @__PURE__ */ React12.createElement("button", {
725
725
  className: clsx3(`${name3}-btn`, "add", theme),
726
726
  disabled,
727
727
  onClick: actions.addPage
728
- }, React12.createElement(Icon, {
729
- fallback: React12.createElement(FilePlus, {
728
+ }, /* @__PURE__ */ React12.createElement(Icon, {
729
+ fallback: /* @__PURE__ */ React12.createElement(FilePlus, {
730
730
  theme
731
731
  }),
732
732
  src: disabled ? addIconDisable : addIcon,
@@ -834,13 +834,13 @@ import { memo } from "react";
834
834
  import React14 from "react";
835
835
  var Apps = (props) => {
836
836
  const stroke = getStroke(props);
837
- return React14.createElement("svg", {
837
+ return /* @__PURE__ */ React14.createElement("svg", {
838
838
  viewBox: "0 0 24 24"
839
- }, React14.createElement("g", {
839
+ }, /* @__PURE__ */ React14.createElement("g", {
840
840
  fill: stroke
841
- }, React14.createElement("path", {
841
+ }, /* @__PURE__ */ React14.createElement("path", {
842
842
  d: "M17.667 4.5h-3.334c-1.012 0-1.833.82-1.833 1.833V11.5h5.167c1.012 0 1.833-.82 1.833-1.833V6.333c0-1.012-.82-1.833-1.833-1.833Zm-3.334 1h3.334c.46 0 .833.373.833.833v3.334l-.006.104a.833.833 0 0 1-.827.729H13.5V6.333c0-.46.373-.833.833-.833Z"
843
- }), React14.createElement("path", {
843
+ }), /* @__PURE__ */ React14.createElement("path", {
844
844
  d: "M6.333 19.5A1.833 1.833 0 0 1 4.5 17.667v-3.334c0-.525.221-1 .576-1.334a1.822 1.822 0 0 1-.576-1.332V8.333c0-1.012.82-1.833 1.833-1.833H10A1.5 1.5 0 0 1 11.5 8v4.5h4.167c.962 0 1.75.74 1.827 1.683l.006.15v3.334c0 1.012-.82 1.833-1.833 1.833Zm4.167-6H6.333a.833.833 0 0 0-.827.729l-.006.104v3.334c0 .46.373.833.833.833H10.5v-5Zm5.167 0H11.5v5h4.167c.46 0 .833-.373.833-.833v-3.334a.833.833 0 0 0-.833-.833ZM10 7.5H6.333a.833.833 0 0 0-.833.833v3.334c0 .46.373.833.833.833H10.5V8a.5.5 0 0 0-.41-.492L10 7.5Z"
845
845
  })));
846
846
  };
@@ -849,9 +849,9 @@ var Apps = (props) => {
849
849
  import React15 from "react";
850
850
  var Arrow = (props) => {
851
851
  const stroke = getStroke(props);
852
- return React15.createElement("svg", {
852
+ return /* @__PURE__ */ React15.createElement("svg", {
853
853
  viewBox: "0 0 24 24"
854
- }, React15.createElement("path", {
854
+ }, /* @__PURE__ */ React15.createElement("path", {
855
855
  fill: stroke,
856
856
  d: "M19 5v6l-2.647-2.646L5.99 18.718l-.708-.708L15.645 7.646 13 5h6Z"
857
857
  }));
@@ -861,9 +861,9 @@ var Arrow = (props) => {
861
861
  import React16 from "react";
862
862
  var Circle = (props) => {
863
863
  const stroke = getStroke(props);
864
- return React16.createElement("svg", {
864
+ return /* @__PURE__ */ React16.createElement("svg", {
865
865
  viewBox: "0 0 24 24"
866
- }, React16.createElement("rect", {
866
+ }, /* @__PURE__ */ React16.createElement("rect", {
867
867
  width: "15",
868
868
  height: "15",
869
869
  x: "4.5",
@@ -878,9 +878,9 @@ var Circle = (props) => {
878
878
  import React17 from "react";
879
879
  var Clean = (props) => {
880
880
  const stroke = getStroke(props);
881
- return React17.createElement("svg", {
881
+ return /* @__PURE__ */ React17.createElement("svg", {
882
882
  viewBox: "0 0 24 24"
883
- }, React17.createElement("path", {
883
+ }, /* @__PURE__ */ React17.createElement("path", {
884
884
  fill: stroke,
885
885
  d: "M9.754 11.99c0 1.856-.711 3.62-1.96 4.951l-.151.155h1.403l.855-.853h.707l.853.853h2.635l.094-.064a6.237 6.237 0 0 0 2.559-4.781l.005-.26h1a7.237 7.237 0 0 1-2.994 5.862l-.229.16-.277.083h-3l-.353-.146-.647-.647-.646.647-.354.146h-3l-.286-.91.214-.148a6.237 6.237 0 0 0 2.567-4.787l.005-.26h1Zm4.772-6.502v2l.35.039a2.98 2.98 0 0 1 2.644 2.78l.006.181h-8a2.98 2.98 0 0 1 2.65-2.961l.35-.039v-2h2Z"
886
886
  }));
@@ -890,13 +890,13 @@ var Clean = (props) => {
890
890
  import React18 from "react";
891
891
  var Clicker = (props) => {
892
892
  const stroke = getStroke(props);
893
- return React18.createElement("svg", {
893
+ return /* @__PURE__ */ React18.createElement("svg", {
894
894
  viewBox: "0 0 24 24"
895
- }, React18.createElement("g", {
895
+ }, /* @__PURE__ */ React18.createElement("g", {
896
896
  fill: "none"
897
- }, React18.createElement("path", {
897
+ }, /* @__PURE__ */ React18.createElement("path", {
898
898
  d: "M0 0h24v24H0z"
899
- }), React18.createElement("path", {
899
+ }), /* @__PURE__ */ React18.createElement("path", {
900
900
  fill: stroke,
901
901
  d: "m7 5.072 10.33 7.892-4.879.549 3.232 5.598-.866.5-3.233-5.597-2.914 3.95L7 5.072Z"
902
902
  })));
@@ -906,9 +906,9 @@ var Clicker = (props) => {
906
906
  import React19 from "react";
907
907
  var Collapse = (props) => {
908
908
  const stroke = getStroke(props);
909
- return React19.createElement("svg", {
909
+ return /* @__PURE__ */ React19.createElement("svg", {
910
910
  viewBox: "0 0 24 24"
911
- }, React19.createElement("path", {
911
+ }, /* @__PURE__ */ React19.createElement("path", {
912
912
  fill: "none",
913
913
  stroke,
914
914
  d: "m8 10-2 2 2 2m10-8H6m12 12H6m12-4h-8m8-4h-8"
@@ -919,9 +919,9 @@ var Collapse = (props) => {
919
919
  import React20 from "react";
920
920
  var Diamond = (props) => {
921
921
  const stroke = getStroke(props);
922
- return React20.createElement("svg", {
922
+ return /* @__PURE__ */ React20.createElement("svg", {
923
923
  viewBox: "0 0 24 24"
924
- }, React20.createElement("path", {
924
+ }, /* @__PURE__ */ React20.createElement("path", {
925
925
  fill: "none",
926
926
  stroke,
927
927
  d: "M4.222 12 12 4.222 19.778 12 12 19.778z"
@@ -932,9 +932,9 @@ var Diamond = (props) => {
932
932
  import React21 from "react";
933
933
  var Down = (props) => {
934
934
  const stroke = getStroke(props);
935
- return React21.createElement("svg", {
935
+ return /* @__PURE__ */ React21.createElement("svg", {
936
936
  viewBox: "0 0 24 24"
937
- }, React21.createElement("path", {
937
+ }, /* @__PURE__ */ React21.createElement("path", {
938
938
  fill: "none",
939
939
  stroke,
940
940
  d: "m16 13-2 2-2 2-2-2-2-2m8-6-2 2-2 2-2-2-2-2"
@@ -945,9 +945,9 @@ var Down = (props) => {
945
945
  import React22 from "react";
946
946
  var Eraser = (props) => {
947
947
  const stroke = getStroke(props);
948
- return React22.createElement("svg", {
948
+ return /* @__PURE__ */ React22.createElement("svg", {
949
949
  viewBox: "0 0 24 24"
950
- }, React22.createElement("path", {
950
+ }, /* @__PURE__ */ React22.createElement("path", {
951
951
  fill: stroke,
952
952
  d: "m14.333 5.183.165.007c.494.037.978.245 1.356.623l2.333 2.333a2.15 2.15 0 0 1 0 3.04l-5.833 5.834a3.8 3.8 0 0 1-5.374 0l-1.167-1.166a2.15 2.15 0 0 1 0-3.04l7-7c.42-.42.97-.63 1.52-.63ZM11.52 8.52l-4.999 5a1.15 1.15 0 0 0 0 1.626l1.167 1.167a2.8 2.8 0 0 0 3.96 0l3.832-3.833-3.96-3.96Z"
953
953
  }));
@@ -957,9 +957,9 @@ var Eraser = (props) => {
957
957
  import React23 from "react";
958
958
  var Expand = (props) => {
959
959
  const stroke = getStroke(props);
960
- return React23.createElement("svg", {
960
+ return /* @__PURE__ */ React23.createElement("svg", {
961
961
  viewBox: "0 0 24 24"
962
- }, React23.createElement("path", {
962
+ }, /* @__PURE__ */ React23.createElement("path", {
963
963
  fill: "none",
964
964
  stroke,
965
965
  d: "m16 10 2 2-2 2M6 6h12M6 18h12M6 14h8m-8-4h8"
@@ -970,9 +970,9 @@ var Expand = (props) => {
970
970
  import React24 from "react";
971
971
  var Line = (props) => {
972
972
  const stroke = getStroke(props);
973
- return React24.createElement("svg", {
973
+ return /* @__PURE__ */ React24.createElement("svg", {
974
974
  viewBox: "0 0 24 24"
975
- }, React24.createElement("path", {
975
+ }, /* @__PURE__ */ React24.createElement("path", {
976
976
  fill: stroke,
977
977
  d: "m18.01 5.282.708.708L5.99 18.718l-.708-.708z"
978
978
  }));
@@ -982,9 +982,9 @@ var Line = (props) => {
982
982
  import React25 from "react";
983
983
  var Pencil = (props) => {
984
984
  const stroke = getStroke(props);
985
- return React25.createElement("svg", {
985
+ return /* @__PURE__ */ React25.createElement("svg", {
986
986
  viewBox: "0 0 24 24"
987
- }, React25.createElement("path", {
987
+ }, /* @__PURE__ */ React25.createElement("path", {
988
988
  fill: stroke,
989
989
  d: "m17.497 4.84.116.105 1.442 1.442a1.52 1.52 0 0 1 .104 2.034l-.104.116L8.733 18.858l-4.347.756.756-4.347L15.463 4.945a1.52 1.52 0 0 1 2.034-.104ZM5.967 16.349l-.353 2.037 2.037-.354-1.683-1.683Zm8.407-8.901-7.946 7.946 2.178 2.178 7.946-7.946-2.178-2.178Zm-.728 2.2.708.707-5 5-.708-.708 5-5Zm2.596-4.055-.072.06-1.09 1.088 2.179 2.178 1.089-1.088a.52.52 0 0 0 .105-.584l-.045-.08-.06-.072-1.442-1.442a.52.52 0 0 0-.664-.06Z"
990
990
  }));
@@ -994,9 +994,9 @@ var Pencil = (props) => {
994
994
  import React26 from "react";
995
995
  var Rectangle = (props) => {
996
996
  const stroke = getStroke(props);
997
- return React26.createElement("svg", {
997
+ return /* @__PURE__ */ React26.createElement("svg", {
998
998
  viewBox: "0 0 24 24"
999
- }, React26.createElement("path", {
999
+ }, /* @__PURE__ */ React26.createElement("path", {
1000
1000
  fill: "none",
1001
1001
  stroke,
1002
1002
  d: "M5.5 5.5h13v13h-13z"
@@ -1007,9 +1007,9 @@ var Rectangle = (props) => {
1007
1007
  import React27 from "react";
1008
1008
  var Selector = (props) => {
1009
1009
  const stroke = getStroke(props);
1010
- return React27.createElement("svg", {
1010
+ return /* @__PURE__ */ React27.createElement("svg", {
1011
1011
  viewBox: "0 0 24 24"
1012
- }, React27.createElement("path", {
1012
+ }, /* @__PURE__ */ React27.createElement("path", {
1013
1013
  fill: stroke,
1014
1014
  d: "m12 12 8 2.667-3.556 1.777L14.667 20 12 12Zm3-8v7.5h-1V5H5v9h6.5v1H4V4h11Z"
1015
1015
  }));
@@ -1019,9 +1019,9 @@ var Selector = (props) => {
1019
1019
  import React28 from "react";
1020
1020
  var SpeechBalloon = (props) => {
1021
1021
  const stroke = getStroke(props);
1022
- return React28.createElement("svg", {
1022
+ return /* @__PURE__ */ React28.createElement("svg", {
1023
1023
  viewBox: "0 0 24 24"
1024
- }, React28.createElement("path", {
1024
+ }, /* @__PURE__ */ React28.createElement("path", {
1025
1025
  fill: "none",
1026
1026
  stroke,
1027
1027
  d: "M17 4.5c.414 0 .79.168 1.06.44.272.27.44.646.44 1.06v9c0 .414-.168.79-.44 1.06a1.49 1.49 0 0 1-1.06.44h-4.207l-2.715 2.715-1.81-2.715H7a1.49 1.49 0 0 1-1.06-.44A1.495 1.495 0 0 1 5.5 15V6c0-.414.168-.79.44-1.06A1.49 1.49 0 0 1 7 4.5Z"
@@ -1032,9 +1032,9 @@ var SpeechBalloon = (props) => {
1032
1032
  import React29 from "react";
1033
1033
  var Star = (props) => {
1034
1034
  const stroke = getStroke(props);
1035
- return React29.createElement("svg", {
1035
+ return /* @__PURE__ */ React29.createElement("svg", {
1036
1036
  viewBox: "0 0 24 24"
1037
- }, React29.createElement("path", {
1037
+ }, /* @__PURE__ */ React29.createElement("path", {
1038
1038
  fill: "none",
1039
1039
  stroke,
1040
1040
  d: "m12 3.523 1.993 5.734 6.07.123-4.838 3.668 1.758 5.81L12 15.391l-4.983 3.467 1.758-5.81L3.938 9.38l6.069-.123L12 3.523Z"
@@ -1045,9 +1045,9 @@ var Star = (props) => {
1045
1045
  import React30 from "react";
1046
1046
  var Text = (props) => {
1047
1047
  const stroke = getStroke(props);
1048
- return React30.createElement("svg", {
1048
+ return /* @__PURE__ */ React30.createElement("svg", {
1049
1049
  viewBox: "0 0 24 24"
1050
- }, React30.createElement("path", {
1050
+ }, /* @__PURE__ */ React30.createElement("path", {
1051
1051
  fill: stroke,
1052
1052
  d: "M18.5 5.5V8h-1V6.5H13v11h2v1H9v-1h2v-11H6.5V8h-1V5.5h13Z"
1053
1053
  }));
@@ -1057,9 +1057,9 @@ var Text = (props) => {
1057
1057
  import React31 from "react";
1058
1058
  var Triangle = (props) => {
1059
1059
  const stroke = getStroke(props);
1060
- return React31.createElement("svg", {
1060
+ return /* @__PURE__ */ React31.createElement("svg", {
1061
1061
  viewBox: "0 0 24 24"
1062
- }, React31.createElement("path", {
1062
+ }, /* @__PURE__ */ React31.createElement("path", {
1063
1063
  fill: "none",
1064
1064
  stroke,
1065
1065
  d: "M12 6.008 19.138 18.5H4.862L12 6.008Z"
@@ -1070,9 +1070,9 @@ var Triangle = (props) => {
1070
1070
  import React32 from "react";
1071
1071
  var Up = (props) => {
1072
1072
  const stroke = getStroke(props);
1073
- return React32.createElement("svg", {
1073
+ return /* @__PURE__ */ React32.createElement("svg", {
1074
1074
  viewBox: "0 0 24 24"
1075
- }, React32.createElement("path", {
1075
+ }, /* @__PURE__ */ React32.createElement("path", {
1076
1076
  fill: "none",
1077
1077
  stroke,
1078
1078
  d: "m16 11-2-2-2-2-2 2-2 2m8 6-2-2-2-2-2 2-2 2"
@@ -1109,7 +1109,7 @@ import Tippy4 from "@tippyjs/react";
1109
1109
  var Button = forwardRef((props, ref) => {
1110
1110
  const { content, disabled, active, onClick, interactive, placement = "right", children } = props;
1111
1111
  const { writable, theme } = useContext3(ToolbarContext);
1112
- return React33.createElement(Tippy4, {
1112
+ return /* @__PURE__ */ React33.createElement(Tippy4, {
1113
1113
  className: "fastboard-tip",
1114
1114
  content,
1115
1115
  interactive,
@@ -1119,7 +1119,7 @@ var Button = forwardRef((props, ref) => {
1119
1119
  offset: placement.includes("right") ? RightOffset : void 0,
1120
1120
  delay: [1e3, 400],
1121
1121
  duration: 300
1122
- }, React33.createElement("button", {
1122
+ }, /* @__PURE__ */ React33.createElement("button", {
1123
1123
  ref,
1124
1124
  className: clsx4("fastboard-toolbar-btn", theme, { active }),
1125
1125
  onClick,
@@ -1131,9 +1131,9 @@ var Button = forwardRef((props, ref) => {
1131
1131
  function renderToolTip(text, hotkey) {
1132
1132
  if (!(typeof hotkey === "string"))
1133
1133
  return text;
1134
- return React34.createElement("span", {
1134
+ return /* @__PURE__ */ React34.createElement("span", {
1135
1135
  className: "fastboard-toolbar-tooltip"
1136
- }, React34.createElement("span", null, text), React34.createElement("span", {
1136
+ }, /* @__PURE__ */ React34.createElement("span", null, text), /* @__PURE__ */ React34.createElement("span", {
1137
1137
  className: "fastboard-toolbar-hotkey"
1138
1138
  }, hotkey.toUpperCase()));
1139
1139
  }
@@ -1147,12 +1147,12 @@ function ClickerButton() {
1147
1147
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1148
1148
  const active = appliance === ApplianceNames.clicker;
1149
1149
  const disabled = !writable;
1150
- return React34.createElement(Button, {
1150
+ return /* @__PURE__ */ React34.createElement(Button, {
1151
1151
  content: renderToolTip(t("clicker"), shortcut),
1152
1152
  onClick: changeAppliance,
1153
1153
  active
1154
- }, React34.createElement(Icon, {
1155
- fallback: React34.createElement(Icons.Clicker, {
1154
+ }, /* @__PURE__ */ React34.createElement(Icon, {
1155
+ fallback: /* @__PURE__ */ React34.createElement(Icons.Clicker, {
1156
1156
  theme,
1157
1157
  active
1158
1158
  }),
@@ -1169,12 +1169,12 @@ function SelectorButton() {
1169
1169
  const active = appliance === ApplianceNames.selector;
1170
1170
  const disabled = !writable;
1171
1171
  const shortcut = (app.hotKeys || defaultHotKeys).changeToSelector;
1172
- return React34.createElement(Button, {
1172
+ return /* @__PURE__ */ React34.createElement(Button, {
1173
1173
  content: renderToolTip(t("selector"), shortcut),
1174
1174
  onClick: changeAppliance,
1175
1175
  active
1176
- }, React34.createElement(Icon, {
1177
- fallback: React34.createElement(Icons.Selector, {
1176
+ }, /* @__PURE__ */ React34.createElement(Icon, {
1177
+ fallback: /* @__PURE__ */ React34.createElement(Icons.Selector, {
1178
1178
  theme,
1179
1179
  active
1180
1180
  }),
@@ -1191,12 +1191,12 @@ function EraserButton() {
1191
1191
  const active = appliance === ApplianceNames.eraser;
1192
1192
  const disabled = !writable;
1193
1193
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToEraser;
1194
- return React34.createElement(Button, {
1194
+ return /* @__PURE__ */ React34.createElement(Button, {
1195
1195
  content: renderToolTip(t("eraser"), shortcut),
1196
1196
  onClick: changeAppliance,
1197
1197
  active
1198
- }, React34.createElement(Icon, {
1199
- fallback: React34.createElement(Icons.Eraser, {
1198
+ }, /* @__PURE__ */ React34.createElement(Icon, {
1199
+ fallback: /* @__PURE__ */ React34.createElement(Icons.Eraser, {
1200
1200
  theme,
1201
1201
  active
1202
1202
  }),
@@ -1208,11 +1208,11 @@ function CleanButton() {
1208
1208
  const { t } = useTranslation();
1209
1209
  const { theme, icons, writable, cleanCurrentScene } = useContext4(ToolbarContext);
1210
1210
  const disabled = !writable;
1211
- return React34.createElement(Button, {
1211
+ return /* @__PURE__ */ React34.createElement(Button, {
1212
1212
  content: t("clean"),
1213
1213
  onClick: cleanCurrentScene
1214
- }, React34.createElement(Icon, {
1215
- fallback: React34.createElement(Icons.Clean, {
1214
+ }, /* @__PURE__ */ React34.createElement(Icon, {
1215
+ fallback: /* @__PURE__ */ React34.createElement(Icons.Clean, {
1216
1216
  theme
1217
1217
  }),
1218
1218
  src: disabled ? icons == null ? void 0 : icons.cleanIconDisable : icons == null ? void 0 : icons.cleanIcon,
@@ -1237,19 +1237,19 @@ var countdown_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyC
1237
1237
  function AppsButton({ content, onClick }) {
1238
1238
  const { theme, icons, writable } = useContext5(ToolbarContext);
1239
1239
  const disabled = !writable;
1240
- const button = React35.createElement(Button, {
1240
+ const button = /* @__PURE__ */ React35.createElement(Button, {
1241
1241
  content: "Apps",
1242
1242
  onClick
1243
- }, React35.createElement(Icon, {
1244
- fallback: React35.createElement(Icons.Apps, {
1243
+ }, /* @__PURE__ */ React35.createElement(Icon, {
1244
+ fallback: /* @__PURE__ */ React35.createElement(Icons.Apps, {
1245
1245
  theme
1246
1246
  }),
1247
1247
  src: disabled ? icons == null ? void 0 : icons.appsIconDisable : icons == null ? void 0 : icons.appsIcon,
1248
1248
  alt: "[apps]"
1249
1249
  }));
1250
- return content === false ? button : React35.createElement("span", {
1250
+ return content === false ? button : /* @__PURE__ */ React35.createElement("span", {
1251
1251
  className: "fastboard-toolbar-btn-interactive"
1252
- }, React35.createElement(Tippy5, {
1252
+ }, /* @__PURE__ */ React35.createElement(Tippy5, {
1253
1253
  className: "fastboard-tip",
1254
1254
  content: renderAppsButtonContent(content),
1255
1255
  theme,
@@ -1261,25 +1261,25 @@ function AppsButton({ content, onClick }) {
1261
1261
  }, button));
1262
1262
  }
1263
1263
  function renderAppsButtonContent(content) {
1264
- return React35.createElement("div", {
1264
+ return /* @__PURE__ */ React35.createElement("div", {
1265
1265
  className: "fastboard-toolbar-panel apps"
1266
- }, React35.createElement("div", {
1266
+ }, /* @__PURE__ */ React35.createElement("div", {
1267
1267
  className: "fastboard-toolbar-apps"
1268
- }, content || React35.createElement(DefaultApps, null)));
1268
+ }, content || /* @__PURE__ */ React35.createElement(DefaultApps, null)));
1269
1269
  }
1270
1270
  function DefaultApps() {
1271
1271
  const app = useFastboardApp();
1272
- return React35.createElement(React35.Fragment, null, React35.createElement(AppIcon, {
1272
+ return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(AppIcon, {
1273
1273
  title: "Code Editor",
1274
1274
  src: vscode_default,
1275
1275
  alt: "[code editor]",
1276
1276
  onClick: app == null ? void 0 : app.insertCodeEditor.bind(app)
1277
- }), React35.createElement(AppIcon, {
1277
+ }), /* @__PURE__ */ React35.createElement(AppIcon, {
1278
1278
  title: "GeoGebra",
1279
1279
  src: geogebra_default,
1280
1280
  alt: "[geogebra]",
1281
1281
  onClick: app == null ? void 0 : app.insertGeoGebra.bind(app)
1282
- }), React35.createElement(AppIcon, {
1282
+ }), /* @__PURE__ */ React35.createElement(AppIcon, {
1283
1283
  title: "Countdown",
1284
1284
  src: countdown_default,
1285
1285
  alt: "[countdown]",
@@ -1287,17 +1287,17 @@ function DefaultApps() {
1287
1287
  }));
1288
1288
  }
1289
1289
  function AppIcon({ title, src, alt, onClick }) {
1290
- return React35.createElement("span", {
1290
+ return /* @__PURE__ */ React35.createElement("span", {
1291
1291
  className: "fastboard-toolbar-app-icon"
1292
- }, React35.createElement(Button, {
1292
+ }, /* @__PURE__ */ React35.createElement(Button, {
1293
1293
  placement: "top",
1294
1294
  content: title,
1295
1295
  onClick
1296
- }, React35.createElement("img", {
1296
+ }, /* @__PURE__ */ React35.createElement("img", {
1297
1297
  src,
1298
1298
  alt,
1299
1299
  title
1300
- })), React35.createElement("span", {
1300
+ })), /* @__PURE__ */ React35.createElement("span", {
1301
1301
  className: "fastboard-toolbar-app-icon-text"
1302
1302
  }, title));
1303
1303
  }
@@ -1325,17 +1325,17 @@ function ColorBox() {
1325
1325
  const { theme, memberState, setStrokeColor, writable } = useContext6(ToolbarContext);
1326
1326
  const strokeColor = memberState == null ? void 0 : memberState.strokeColor;
1327
1327
  const disabled = !writable;
1328
- return React36.createElement("div", {
1328
+ return /* @__PURE__ */ React36.createElement("div", {
1329
1329
  className: clsx5("fastboard-toolbar-color-box", theme)
1330
- }, colorKeys.map((key) => React36.createElement("div", {
1330
+ }, colorKeys.map((key) => /* @__PURE__ */ React36.createElement("div", {
1331
1331
  key,
1332
1332
  className: clsx5("fastboard-toolbar-color-item", theme),
1333
1333
  onClick: () => setStrokeColor(colors[key])
1334
- }, React36.createElement("div", {
1334
+ }, /* @__PURE__ */ React36.createElement("div", {
1335
1335
  className: clsx5("fastboard-toolbar-color-border", theme, {
1336
1336
  active: strokeColor && isEqualArray(strokeColor, colors[key])
1337
1337
  })
1338
- }, React36.createElement("button", {
1338
+ }, /* @__PURE__ */ React36.createElement("button", {
1339
1339
  className: clsx5("fastboard-toolbar-color-btn"),
1340
1340
  style: { background: key },
1341
1341
  disabled,
@@ -1351,7 +1351,7 @@ import clsx6 from "clsx";
1351
1351
  import React37, { useContext as useContext7 } from "react";
1352
1352
  function CutLine() {
1353
1353
  const { theme } = useContext7(ToolbarContext);
1354
- return React37.createElement("span", {
1354
+ return /* @__PURE__ */ React37.createElement("span", {
1355
1355
  className: clsx6(`${name4}-cut-line`, theme)
1356
1356
  });
1357
1357
  }
@@ -1364,7 +1364,7 @@ function Slider() {
1364
1364
  const { theme, writable, memberState, setStrokeWidth } = useContext8(ToolbarContext);
1365
1365
  const { activeColor } = themes[theme];
1366
1366
  const strokeWidth = (memberState == null ? void 0 : memberState.strokeWidth) || 0;
1367
- return React38.createElement(RcSlider, {
1367
+ return /* @__PURE__ */ React38.createElement(RcSlider, {
1368
1368
  disabled: !writable,
1369
1369
  className: clsx7("fastboard-toolbar-slider", theme),
1370
1370
  trackStyle: { background: activeColor },
@@ -1388,9 +1388,9 @@ function PencilButton() {
1388
1388
  const active = appliance === ApplianceNames2.pencil;
1389
1389
  const disabled = !writable;
1390
1390
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToPencil;
1391
- return React39.createElement("span", {
1391
+ return /* @__PURE__ */ React39.createElement("span", {
1392
1392
  className: "fastboard-toolbar-btn-interactive"
1393
- }, React39.createElement(Tippy6, {
1393
+ }, /* @__PURE__ */ React39.createElement(Tippy6, {
1394
1394
  className: "fastboard-tip",
1395
1395
  content: renderPencilButtonContent(),
1396
1396
  theme,
@@ -1399,25 +1399,25 @@ function PencilButton() {
1399
1399
  offset: RightOffset,
1400
1400
  arrow: false,
1401
1401
  interactive: true
1402
- }, React39.createElement(Button, {
1402
+ }, /* @__PURE__ */ React39.createElement(Button, {
1403
1403
  content: renderToolTip(t("pencil"), shortcut),
1404
1404
  active,
1405
1405
  onClick: changeAppliance
1406
- }, React39.createElement(Icon, {
1407
- fallback: React39.createElement(Icons.Pencil, {
1406
+ }, /* @__PURE__ */ React39.createElement(Icon, {
1407
+ fallback: /* @__PURE__ */ React39.createElement(Icons.Pencil, {
1408
1408
  theme,
1409
1409
  active
1410
1410
  }),
1411
1411
  src: disabled ? icons == null ? void 0 : icons.pencilIconDisable : icons == null ? void 0 : icons.pencilIcon,
1412
1412
  alt: "[pencil]"
1413
- }), React39.createElement("span", {
1413
+ }), /* @__PURE__ */ React39.createElement("span", {
1414
1414
  className: "fastboard-toolbar-triangle"
1415
1415
  }))));
1416
1416
  }
1417
1417
  function renderPencilButtonContent() {
1418
- return React39.createElement("div", {
1418
+ return /* @__PURE__ */ React39.createElement("div", {
1419
1419
  className: "fastboard-toolbar-panel pencil"
1420
- }, React39.createElement(Slider, null), React39.createElement(CutLine, null), React39.createElement(ColorBox, null));
1420
+ }, /* @__PURE__ */ React39.createElement(Slider, null), /* @__PURE__ */ React39.createElement(CutLine, null), /* @__PURE__ */ React39.createElement(ColorBox, null));
1421
1421
  }
1422
1422
 
1423
1423
  // src/components/Toolbar/components/ShapesButton.tsx
@@ -1464,9 +1464,9 @@ function ShapesButton() {
1464
1464
  const key = appliance === ApplianceNames4.shape ? shape : appliance;
1465
1465
  const active = ShapeTypes.has(key);
1466
1466
  const CurrentIcon = ShapesMap[key] || Icons.Rectangle;
1467
- return React40.createElement("span", {
1467
+ return /* @__PURE__ */ React40.createElement("span", {
1468
1468
  className: "fastboard-toolbar-btn-interactive"
1469
- }, React40.createElement(Tippy7, {
1469
+ }, /* @__PURE__ */ React40.createElement(Tippy7, {
1470
1470
  className: "fastboard-tip",
1471
1471
  content: renderShapesButtonContent(),
1472
1472
  theme,
@@ -1475,31 +1475,31 @@ function ShapesButton() {
1475
1475
  offset: RightOffset,
1476
1476
  arrow: false,
1477
1477
  interactive: true
1478
- }, React40.createElement(Button, {
1478
+ }, /* @__PURE__ */ React40.createElement(Button, {
1479
1479
  content: t("shape"),
1480
1480
  active
1481
- }, React40.createElement(CurrentIcon, {
1481
+ }, /* @__PURE__ */ React40.createElement(CurrentIcon, {
1482
1482
  theme,
1483
1483
  active
1484
- }), React40.createElement("span", {
1484
+ }), /* @__PURE__ */ React40.createElement("span", {
1485
1485
  className: "fastboard-toolbar-triangle"
1486
1486
  }))));
1487
1487
  }
1488
1488
  function renderShapesButtonContent() {
1489
- return React40.createElement("div", {
1489
+ return /* @__PURE__ */ React40.createElement("div", {
1490
1490
  className: "fastboard-toolbar-panel shapes"
1491
- }, React40.createElement(ShapesBox, null), React40.createElement(CutLine, null), React40.createElement(Slider, null), React40.createElement(CutLine, null), React40.createElement(ColorBox, null));
1491
+ }, /* @__PURE__ */ React40.createElement(ShapesBox, null), /* @__PURE__ */ React40.createElement(CutLine, null), /* @__PURE__ */ React40.createElement(Slider, null), /* @__PURE__ */ React40.createElement(CutLine, null), /* @__PURE__ */ React40.createElement(ColorBox, null));
1492
1492
  }
1493
1493
  function ShapesBox() {
1494
1494
  const { t } = useTranslation();
1495
- return React40.createElement("div", {
1495
+ return /* @__PURE__ */ React40.createElement("div", {
1496
1496
  className: "fastboard-toolbar-shapes"
1497
- }, ApplianceShapes.map((Appliance) => React40.createElement(ApplianceShapeButton, {
1497
+ }, ApplianceShapes.map((Appliance) => /* @__PURE__ */ React40.createElement(ApplianceShapeButton, {
1498
1498
  key: Appliance,
1499
1499
  content: t(Appliance),
1500
1500
  Appliance,
1501
1501
  Icon: ShapesMap[Appliance]
1502
- })), Shapes.map((shape) => React40.createElement(ShapeShapeButton, {
1502
+ })), Shapes.map((shape) => /* @__PURE__ */ React40.createElement(ShapeShapeButton, {
1503
1503
  key: shape,
1504
1504
  content: t(shape),
1505
1505
  shape,
@@ -1510,12 +1510,12 @@ function ApplianceShapeButton({ content, Appliance, Icon: Icon2 }) {
1510
1510
  const { theme, writable, setAppliance, memberState } = useContext10(ToolbarContext);
1511
1511
  const current = memberState == null ? void 0 : memberState.currentApplianceName;
1512
1512
  const disabled = !writable;
1513
- return React40.createElement(Button, {
1513
+ return /* @__PURE__ */ React40.createElement(Button, {
1514
1514
  content,
1515
1515
  disabled,
1516
1516
  placement: "top",
1517
1517
  onClick: () => setAppliance(Appliance)
1518
- }, React40.createElement(Icon2, {
1518
+ }, /* @__PURE__ */ React40.createElement(Icon2, {
1519
1519
  theme,
1520
1520
  active: current === Appliance
1521
1521
  }));
@@ -1525,12 +1525,12 @@ function ShapeShapeButton({ content, shape, Icon: Icon2 }) {
1525
1525
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1526
1526
  const current = appliance === ApplianceNames4.shape && (memberState == null ? void 0 : memberState.shapeType);
1527
1527
  const disabled = !writable;
1528
- return React40.createElement(Button, {
1528
+ return /* @__PURE__ */ React40.createElement(Button, {
1529
1529
  content,
1530
1530
  disabled,
1531
1531
  placement: "top",
1532
1532
  onClick: () => setAppliance(ApplianceNames4.shape, shape)
1533
- }, React40.createElement(Icon2, {
1533
+ }, /* @__PURE__ */ React40.createElement(Icon2, {
1534
1534
  theme,
1535
1535
  active: current === shape
1536
1536
  }));
@@ -1551,9 +1551,9 @@ function TextButton() {
1551
1551
  const active = appliance === ApplianceNames5.text;
1552
1552
  const disabled = !writable;
1553
1553
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToText;
1554
- return React41.createElement("span", {
1554
+ return /* @__PURE__ */ React41.createElement("span", {
1555
1555
  className: "fastboard-toolbar-btn-interactive"
1556
- }, React41.createElement(Tippy8, {
1556
+ }, /* @__PURE__ */ React41.createElement(Tippy8, {
1557
1557
  className: "fastboard-tip",
1558
1558
  content: renderTextButtonContent(),
1559
1559
  theme,
@@ -1562,25 +1562,25 @@ function TextButton() {
1562
1562
  offset: RightOffset,
1563
1563
  arrow: false,
1564
1564
  interactive: true
1565
- }, React41.createElement(Button, {
1565
+ }, /* @__PURE__ */ React41.createElement(Button, {
1566
1566
  content: renderToolTip(t("text"), shortcut),
1567
1567
  active,
1568
1568
  onClick: changeAppliance
1569
- }, React41.createElement(Icon, {
1570
- fallback: React41.createElement(Icons.Text, {
1569
+ }, /* @__PURE__ */ React41.createElement(Icon, {
1570
+ fallback: /* @__PURE__ */ React41.createElement(Icons.Text, {
1571
1571
  theme,
1572
1572
  active
1573
1573
  }),
1574
1574
  src: disabled ? icons == null ? void 0 : icons.textIconDisable : icons == null ? void 0 : icons.textIcon,
1575
1575
  alt: "[text]"
1576
- }), React41.createElement("span", {
1576
+ }), /* @__PURE__ */ React41.createElement("span", {
1577
1577
  className: "fastboard-toolbar-triangle"
1578
1578
  }))));
1579
1579
  }
1580
1580
  function renderTextButtonContent() {
1581
- return React41.createElement("div", {
1581
+ return /* @__PURE__ */ React41.createElement("div", {
1582
1582
  className: "fastboard-toolbar-panel text"
1583
- }, React41.createElement(ColorBox, null));
1583
+ }, /* @__PURE__ */ React41.createElement(ColorBox, null));
1584
1584
  }
1585
1585
 
1586
1586
  // src/components/Toolbar/components/UpDownButtons.tsx
@@ -1588,27 +1588,27 @@ import React42, { useCallback as useCallback9, useContext as useContext12 } from
1588
1588
  function UpButton({ disabled, scrollTo }) {
1589
1589
  const { theme, icons } = useContext12(ToolbarContext);
1590
1590
  const scrollUp = useCallback9(() => scrollTo(-ItemHeight), [scrollTo]);
1591
- return React42.createElement(React42.Fragment, null, React42.createElement(Button, {
1591
+ return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Button, {
1592
1592
  content: "Up",
1593
1593
  disabled,
1594
1594
  onClick: scrollUp
1595
- }, React42.createElement(Icon, {
1596
- fallback: React42.createElement(Icons.Up, {
1595
+ }, /* @__PURE__ */ React42.createElement(Icon, {
1596
+ fallback: /* @__PURE__ */ React42.createElement(Icons.Up, {
1597
1597
  theme
1598
1598
  }),
1599
1599
  src: disabled ? icons == null ? void 0 : icons.upIconDisable : icons == null ? void 0 : icons.upIcon,
1600
1600
  alt: "[up]"
1601
- })), React42.createElement(CutLine, null));
1601
+ })), /* @__PURE__ */ React42.createElement(CutLine, null));
1602
1602
  }
1603
1603
  function DownButton({ disabled, scrollTo }) {
1604
1604
  const { theme, icons } = useContext12(ToolbarContext);
1605
1605
  const scrollDown = useCallback9(() => scrollTo(ItemHeight), [scrollTo]);
1606
- return React42.createElement(React42.Fragment, null, React42.createElement(CutLine, null), React42.createElement(Button, {
1606
+ return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(CutLine, null), /* @__PURE__ */ React42.createElement(Button, {
1607
1607
  content: "Down",
1608
1608
  disabled,
1609
1609
  onClick: scrollDown
1610
- }, React42.createElement(Icon, {
1611
- fallback: React42.createElement(Icons.Down, {
1610
+ }, /* @__PURE__ */ React42.createElement(Icon, {
1611
+ fallback: /* @__PURE__ */ React42.createElement(Icons.Down, {
1612
1612
  theme
1613
1613
  }),
1614
1614
  src: disabled ? icons == null ? void 0 : icons.downIconDisable : icons == null ? void 0 : icons.downIcon,
@@ -1647,17 +1647,17 @@ var Content = React43.memo(() => {
1647
1647
  return () => resizeObserver.disconnect();
1648
1648
  }
1649
1649
  }, []);
1650
- return React43.createElement(React43.Fragment, null, needScroll && React43.createElement(UpButton, {
1650
+ return /* @__PURE__ */ React43.createElement(React43.Fragment, null, needScroll && /* @__PURE__ */ React43.createElement(UpButton, {
1651
1651
  scrollTo,
1652
1652
  disabled: disableScrollUp
1653
- }), React43.createElement("div", {
1653
+ }), /* @__PURE__ */ React43.createElement("div", {
1654
1654
  ref,
1655
1655
  className: clsx8(`${name4}-section`),
1656
1656
  style: {
1657
1657
  height: `${sectionHeight}px`,
1658
1658
  overflow: needScroll ? "hidden" : "visible"
1659
1659
  }
1660
- }, React43.createElement(ClickerButton, null), React43.createElement(SelectorButton, null), React43.createElement(PencilButton, null), React43.createElement(TextButton, null), React43.createElement(ShapesButton, null), React43.createElement(EraserButton, null), React43.createElement(CleanButton, null), React43.createElement(AppsButton, null)), needScroll && React43.createElement(DownButton, {
1660
+ }, /* @__PURE__ */ React43.createElement(ClickerButton, null), /* @__PURE__ */ React43.createElement(SelectorButton, null), /* @__PURE__ */ React43.createElement(PencilButton, null), /* @__PURE__ */ React43.createElement(TextButton, null), /* @__PURE__ */ React43.createElement(ShapesButton, null), /* @__PURE__ */ React43.createElement(EraserButton, null), /* @__PURE__ */ React43.createElement(CleanButton, null), /* @__PURE__ */ React43.createElement(AppsButton, null)), needScroll && /* @__PURE__ */ React43.createElement(DownButton, {
1661
1661
  scrollTo,
1662
1662
  disabled: disableScrollDown
1663
1663
  }));
@@ -1686,9 +1686,9 @@ var Toolbar = ({ theme, icons }) => {
1686
1686
  }, 400);
1687
1687
  return () => clearTimeout(timer);
1688
1688
  }, [onHover]);
1689
- return React44.createElement(ToolbarContext.Provider, {
1689
+ return /* @__PURE__ */ React44.createElement(ToolbarContext.Provider, {
1690
1690
  value: __spreadValues({ theme, icons }, hook)
1691
- }, React44.createElement(AnimatePresence, null, expanded ? React44.createElement(motion.div, {
1691
+ }, /* @__PURE__ */ React44.createElement(AnimatePresence, null, expanded ? /* @__PURE__ */ React44.createElement(motion.div, {
1692
1692
  initial: { x: -100 },
1693
1693
  animate: { x: 0, transition: { duration: 0.5 } },
1694
1694
  key: "toolbar",
@@ -1702,22 +1702,22 @@ var Toolbar = ({ theme, icons }) => {
1702
1702
  onAnimationStart: () => setPointEvents(false),
1703
1703
  onAnimationComplete: () => setPointEvents(true),
1704
1704
  style: { pointerEvents: pointEvents ? "auto" : "none" }
1705
- }, React44.createElement(Content, null), expanded && (onHover || delayedOnHover) && React44.createElement(Mask, {
1705
+ }, /* @__PURE__ */ React44.createElement(Content, null), expanded && (onHover || delayedOnHover) && /* @__PURE__ */ React44.createElement(Mask, {
1706
1706
  toolbar
1707
- }, React44.createElement("div", {
1707
+ }, /* @__PURE__ */ React44.createElement("div", {
1708
1708
  onClick: toggle
1709
- }, React44.createElement("img", {
1709
+ }, /* @__PURE__ */ React44.createElement("img", {
1710
1710
  draggable: false,
1711
1711
  className: clsx9(`${name4}-mask-btn`, theme),
1712
1712
  src: collapsed_default
1713
- })))) : React44.createElement(motion.div, {
1713
+ })))) : /* @__PURE__ */ React44.createElement(motion.div, {
1714
1714
  className: clsx9(`${name4}-expand-btn`, theme),
1715
1715
  key: "expand",
1716
1716
  onClick: toggle,
1717
1717
  initial: { x: -100 },
1718
1718
  animate: { x: 0, transition: { duration: 0.5 } }
1719
- }, !expanded && React44.createElement(Icon, {
1720
- fallback: React44.createElement("img", {
1719
+ }, !expanded && /* @__PURE__ */ React44.createElement(Icon, {
1720
+ fallback: /* @__PURE__ */ React44.createElement("img", {
1721
1721
  draggable: false,
1722
1722
  src: expanded_default,
1723
1723
  className: clsx9(`${name4}-mask-btn`, theme)
@@ -1807,7 +1807,7 @@ import React45, { forwardRef as forwardRef2 } from "react";
1807
1807
  import Tippy9 from "@tippyjs/react";
1808
1808
  var Button2 = forwardRef2((props, ref) => {
1809
1809
  const { theme, content, disabled, active, onClick, interactive, placement = "top", children } = props;
1810
- return React45.createElement(Tippy9, {
1810
+ return /* @__PURE__ */ React45.createElement(Tippy9, {
1811
1811
  className: "fastboard-tip",
1812
1812
  content,
1813
1813
  interactive,
@@ -1817,7 +1817,7 @@ var Button2 = forwardRef2((props, ref) => {
1817
1817
  offset: TopOffset,
1818
1818
  delay: [1e3, 400],
1819
1819
  duration: 300
1820
- }, React45.createElement("button", {
1820
+ }, /* @__PURE__ */ React45.createElement("button", {
1821
1821
  ref,
1822
1822
  className: clsx10("fastboard-player-control-btn", theme, { active }),
1823
1823
  onClick,
@@ -1832,9 +1832,9 @@ import { memo as memo2 } from "react";
1832
1832
  import React46 from "react";
1833
1833
  var Loading = (props) => {
1834
1834
  const stroke = getStroke(props);
1835
- return React46.createElement("svg", {
1835
+ return /* @__PURE__ */ React46.createElement("svg", {
1836
1836
  viewBox: "0 0 24 24"
1837
- }, React46.createElement("path", {
1837
+ }, /* @__PURE__ */ React46.createElement("path", {
1838
1838
  d: "M12 4V2A10 10 0 0 0 2 12h2a8 8 0 0 1 8-8z",
1839
1839
  fill: stroke
1840
1840
  }));
@@ -1844,9 +1844,9 @@ var Loading = (props) => {
1844
1844
  import React47 from "react";
1845
1845
  var Pause = (props) => {
1846
1846
  const stroke = getStroke(props);
1847
- return React47.createElement("svg", {
1847
+ return /* @__PURE__ */ React47.createElement("svg", {
1848
1848
  viewBox: "0 0 24 24"
1849
- }, React47.createElement("path", {
1849
+ }, /* @__PURE__ */ React47.createElement("path", {
1850
1850
  d: "M14 19h4V5h-4M6 19h4V5H6v14z",
1851
1851
  fill: stroke
1852
1852
  }));
@@ -1856,9 +1856,9 @@ var Pause = (props) => {
1856
1856
  import React48 from "react";
1857
1857
  var Play = (props) => {
1858
1858
  const stroke = getStroke(props);
1859
- return React48.createElement("svg", {
1859
+ return /* @__PURE__ */ React48.createElement("svg", {
1860
1860
  viewBox: "0 0 24 24"
1861
- }, React48.createElement("path", {
1861
+ }, /* @__PURE__ */ React48.createElement("path", {
1862
1862
  d: "M8 5.14v14l11-7l-11-7z",
1863
1863
  fill: stroke
1864
1864
  }));
@@ -1890,25 +1890,25 @@ function PlayerControl(_a) {
1890
1890
  const isLoading = player.phase === PlayerPhase2.WaitingFirstFrame || player.phase === PlayerPhase2.Buffering;
1891
1891
  const isPlaying = player.phase === PlayerPhase2.Playing;
1892
1892
  const { activeColor } = themes[theme];
1893
- return React49.createElement("div", {
1893
+ return /* @__PURE__ */ React49.createElement("div", {
1894
1894
  className: clsx11(name5, theme, { "auto-hide": autoHide })
1895
- }, React49.createElement("button", {
1895
+ }, /* @__PURE__ */ React49.createElement("button", {
1896
1896
  className: clsx11(`${name5}-btn`, isLoading ? "loading" : isPlaying ? "pause" : "play", theme),
1897
1897
  disabled: isLoading,
1898
1898
  onClick: player.togglePlay
1899
- }, React49.createElement(Icon, {
1900
- fallback: isLoading ? React49.createElement(Icons2.Loading, {
1899
+ }, /* @__PURE__ */ React49.createElement(Icon, {
1900
+ fallback: isLoading ? /* @__PURE__ */ React49.createElement(Icons2.Loading, {
1901
1901
  theme
1902
- }) : isPlaying ? React49.createElement(Icons2.Pause, {
1902
+ }) : isPlaying ? /* @__PURE__ */ React49.createElement(Icons2.Pause, {
1903
1903
  theme
1904
- }) : React49.createElement(Icons2.Play, {
1904
+ }) : /* @__PURE__ */ React49.createElement(Icons2.Play, {
1905
1905
  theme
1906
1906
  }),
1907
1907
  src: isLoading ? icons.loadingIcon : isPlaying ? icons.pauseIcon : icons.playIcon,
1908
1908
  alt: isLoading ? "[loading]" : isPlaying ? "[pause]" : "[play]"
1909
- })), React49.createElement("span", {
1909
+ })), /* @__PURE__ */ React49.createElement("span", {
1910
1910
  className: clsx11(`${name5}-slider`, { loading: isLoading }, theme)
1911
- }, React49.createElement(RcSlider2, {
1911
+ }, /* @__PURE__ */ React49.createElement(RcSlider2, {
1912
1912
  disabled: isLoading,
1913
1913
  trackStyle: { background: activeColor },
1914
1914
  handleStyle: { border: `1px solid ${activeColor}` },
@@ -1917,15 +1917,15 @@ function PlayerControl(_a) {
1917
1917
  min: 0,
1918
1918
  max: player.totalTime,
1919
1919
  step: 100
1920
- })), React49.createElement("span", {
1920
+ })), /* @__PURE__ */ React49.createElement("span", {
1921
1921
  className: clsx11(`${name5}-current`, theme)
1922
- }, renderTime(player.currentTime)), React49.createElement("span", {
1922
+ }, renderTime(player.currentTime)), /* @__PURE__ */ React49.createElement("span", {
1923
1923
  className: clsx11(`${name5}-slash`, theme)
1924
- }, "/"), React49.createElement("span", {
1924
+ }, "/"), /* @__PURE__ */ React49.createElement("span", {
1925
1925
  className: clsx11(`${name5}-total`, theme)
1926
- }, renderTime(player.totalTime)), React49.createElement("span", {
1926
+ }, renderTime(player.totalTime)), /* @__PURE__ */ React49.createElement("span", {
1927
1927
  className: `${name5}-btn-interactive`
1928
- }, React49.createElement(Tippy10, {
1928
+ }, /* @__PURE__ */ React49.createElement(Tippy10, {
1929
1929
  className: "fastboard-tip",
1930
1930
  content: renderSpeeds(player),
1931
1931
  theme,
@@ -1934,11 +1934,11 @@ function PlayerControl(_a) {
1934
1934
  offset: TopOffset,
1935
1935
  arrow: false,
1936
1936
  interactive: true
1937
- }, React49.createElement(Button2, {
1937
+ }, /* @__PURE__ */ React49.createElement(Button2, {
1938
1938
  content: t("speed"),
1939
1939
  theme,
1940
1940
  disabled: isLoading
1941
- }, React49.createElement("span", {
1941
+ }, /* @__PURE__ */ React49.createElement("span", {
1942
1942
  className: clsx11(`${name5}-speed-text`, theme)
1943
1943
  }, player.speed, "x")))));
1944
1944
  }
@@ -1950,9 +1950,9 @@ function renderTime(ms) {
1950
1950
  }
1951
1951
  var Speeds = [2, 1.5, 1.25, 1, 0.75, 0.5];
1952
1952
  function renderSpeeds({ speed: current, setSpeed }) {
1953
- return React49.createElement("div", {
1953
+ return /* @__PURE__ */ React49.createElement("div", {
1954
1954
  className: clsx11(`${name5}-panel`, "speed")
1955
- }, Speeds.map((speed) => React49.createElement("button", {
1955
+ }, Speeds.map((speed) => /* @__PURE__ */ React49.createElement("button", {
1956
1956
  className: clsx11(`${name5}-btn`, "speed", {
1957
1957
  active: speed === current
1958
1958
  }),
@@ -1963,17 +1963,17 @@ function renderSpeeds({ speed: current, setSpeed }) {
1963
1963
 
1964
1964
  // src/components/Fastboard.tsx
1965
1965
  import React50, { forwardRef as forwardRef3, useCallback as useCallback13, useEffect as useEffect8 } from "react";
1966
- var Fastboard = forwardRef3(function Fastboard2(_a, ref) {
1966
+ var Fastboard = /* @__PURE__ */ forwardRef3(function Fastboard2(_a, ref) {
1967
1967
  var _b = _a, { app, theme, layout, language } = _b, restProps = __objRest(_b, ["app", "theme", "layout", "language"]);
1968
1968
  if (!app) {
1969
- return React50.createElement("div", __spreadValues({
1969
+ return /* @__PURE__ */ React50.createElement("div", __spreadValues({
1970
1970
  className: "fastboard-root",
1971
1971
  ref
1972
1972
  }, restProps));
1973
1973
  }
1974
- return React50.createElement(FastboardAppContext.Provider, {
1974
+ return /* @__PURE__ */ React50.createElement(FastboardAppContext.Provider, {
1975
1975
  value: app
1976
- }, React50.createElement(FastboardInternal, __spreadValues(__spreadValues({
1976
+ }, /* @__PURE__ */ React50.createElement(FastboardInternal, __spreadValues(__spreadValues({
1977
1977
  forwardedRef: ref
1978
1978
  }, { theme, layout, language }), restProps)));
1979
1979
  });
@@ -2014,23 +2014,33 @@ function FastboardInternal(_a) {
2014
2014
  ZoomControl: zoom_control = showControls,
2015
2015
  PageControl: page_control = showControls
2016
2016
  } = layout;
2017
- return React50.createElement(ThemeContext.Provider, {
2017
+ return /* @__PURE__ */ React50.createElement(ThemeContext.Provider, {
2018
2018
  value: theme
2019
- }, React50.createElement(I18nContext.Provider, {
2019
+ }, /* @__PURE__ */ React50.createElement(I18nContext.Provider, {
2020
2020
  value: i18n
2021
- }, React50.createElement("div", __spreadProps(__spreadValues({}, restProps), {
2021
+ }, /* @__PURE__ */ React50.createElement("div", __spreadProps(__spreadValues({}, restProps), {
2022
2022
  className: "fastboard-root",
2023
2023
  ref: forwardedRef
2024
- }), React50.createElement("div", {
2024
+ }), /* @__PURE__ */ React50.createElement("div", {
2025
2025
  className: "fastboard-view",
2026
2026
  ref: useWhiteboard
2027
- }), children ? children : React50.createElement(React50.Fragment, null, toolbar && React50.createElement("div", {
2027
+ }), children ? children : /* @__PURE__ */ React50.createElement(React50.Fragment, null, toolbar && /* @__PURE__ */ React50.createElement("div", {
2028
2028
  className: "fastboard-left"
2029
- }, React50.createElement(Toolbar, null)), (redo_undo || zoom_control) && React50.createElement("div", {
2029
+ }, /* @__PURE__ */ React50.createElement(Toolbar, null)), (redo_undo || zoom_control) && /* @__PURE__ */ React50.createElement("div", {
2030
2030
  className: "fastboard-bottom-left"
2031
- }, redo_undo && React50.createElement(RedoUndo, null), zoom_control && React50.createElement(ZoomControl, null)), page_control && React50.createElement("div", {
2031
+ }, redo_undo && /* @__PURE__ */ React50.createElement(RedoUndo, null), zoom_control && /* @__PURE__ */ React50.createElement(ZoomControl, null)), page_control && /* @__PURE__ */ React50.createElement("div", {
2032
2032
  className: "fastboard-bottom-right"
2033
- }, React50.createElement(PageControl, null))))));
2033
+ }, /* @__PURE__ */ React50.createElement(PageControl, null))))));
2034
+ }
2035
+
2036
+ // src/vanilla/index.tsx
2037
+ import React51 from "react";
2038
+ import ReactDOM2 from "react-dom";
2039
+ function mount(app, dom, props) {
2040
+ ReactDOM2.render(/* @__PURE__ */ React51.createElement(Fastboard, __spreadValues({
2041
+ app
2042
+ }, props)), dom);
2043
+ return () => ReactDOM2.unmountComponentAtNode(dom);
2034
2044
  }
2035
2045
  export {
2036
2046
  EmptyToolbarHook,
@@ -2043,6 +2053,7 @@ export {
2043
2053
  ThemeContext,
2044
2054
  Toolbar,
2045
2055
  ZoomControl,
2056
+ mount,
2046
2057
  useBoxState,
2047
2058
  useFastboardApp,
2048
2059
  useFastboardValue,