@netless/fastboard-react 0.2.6 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/index.js +3281 -342
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.mjs +3245 -306
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +10 -15
  6. package/src/components/Fastboard.scss +6 -1
  7. package/src/components/Fastboard.tsx +3 -2
  8. package/src/components/PageControl/PageControl.scss +15 -11
  9. package/src/components/PageControl/PageControl.tsx +15 -17
  10. package/src/components/PlayerControl/PlayerControl.scss +13 -12
  11. package/src/components/PlayerControl/PlayerControl.tsx +3 -3
  12. package/src/components/RedoUndo/RedoUndo.scss +10 -10
  13. package/src/components/ReplayFastboard.tsx +36 -0
  14. package/src/components/Toolbar/Toolbar.scss +54 -15
  15. package/src/components/Toolbar/components/AppsButton.tsx +41 -8
  16. package/src/components/Toolbar/components/ShapesButton.tsx +11 -3
  17. package/src/components/Toolbar/hooks.ts +9 -0
  18. package/src/components/Toolbar/icons/Laser.tsx +21 -0
  19. package/src/components/Toolbar/icons/Loading.tsx +13 -0
  20. package/src/components/ZoomControl/ZoomControl.scss +15 -11
  21. package/src/components/ZoomControl/ZoomControl.tsx +4 -2
  22. package/src/components/tippy-util.ts +18 -0
  23. package/src/icons/Left.tsx +15 -0
  24. package/src/icons/Minus.tsx +2 -2
  25. package/src/icons/Plus.tsx +2 -2
  26. package/src/icons/Redo.tsx +6 -5
  27. package/src/icons/Reset.tsx +4 -6
  28. package/src/icons/Right.tsx +15 -0
  29. package/src/icons/Undo.tsx +6 -5
  30. package/src/icons/WhiteboardAdd.tsx +26 -0
  31. package/src/index.ts +1 -0
  32. package/src/vanilla/index.tsx +14 -4
  33. package/src/icons/ChevronLeft.tsx +0 -21
  34. package/src/icons/ChevronRight.tsx +0 -21
  35. package/src/icons/FilePlus.tsx +0 -18
package/dist/index.mjs CHANGED
@@ -40,8 +40,8 @@ function applyStyles(css) {
40
40
  document.head.appendChild(el);
41
41
  return el;
42
42
  }
43
- function clamp(value, min, max) {
44
- return value < min ? min : value > max ? max : value;
43
+ function clamp(value, min2, max2) {
44
+ return value < min2 ? min2 : value > max2 ? max2 : value;
45
45
  }
46
46
  function isEqualArray(a, b) {
47
47
  return a.length === b.length && a.every((e, i) => e === b[i]);
@@ -68,10 +68,10 @@ function useLastValue(value) {
68
68
  }, [value]);
69
69
  return ref.current;
70
70
  }
71
- function useAsyncValue(fn) {
71
+ function useAsyncValue(fn2) {
72
72
  const [value, setValue] = useState(null);
73
73
  useEffect(() => {
74
- fn().then(setValue);
74
+ fn2().then(setValue);
75
75
  }, []);
76
76
  return value;
77
77
  }
@@ -81,7 +81,7 @@ function useForceUpdate() {
81
81
  }
82
82
 
83
83
  // src/style.scss?inline
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-laserPointer-image{margin-left:-22px;margin-top:3px}.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:100%;height:100%}.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-section+.fastboard-toolbar-mask{opacity:0;transition:.5s opacity .4s}.fastboard-toolbar-section:hover+.fastboard-toolbar-mask,.fastboard-toolbar-mask:hover{opacity:1;transition:.2s opacity}.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:0}.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{position:absolute;left:calc(100% + 1px);top:50%;transform:translateY(-50%);opacity:.85}.fastboard-toolbar-mask.dark{left:100%}.fastboard-toolbar-mask-btn{width:17px;height:62px;cursor:pointer;opacity:.85}.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 = '@charset "UTF-8";.vjs-modal-dialog .vjs-modal-dialog-content,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABDkAAsAAAAAG6gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZRiV3hY21hcAAAAYQAAADaAAADPv749/pnbHlmAAACYAAAC3AAABHQZg6OcWhlYWQAAA3QAAAAKwAAADYZw251aGhlYQAADfwAAAAdAAAAJA+RCLFobXR4AAAOHAAAABMAAACM744AAGxvY2EAAA4wAAAASAAAAEhF6kqubWF4cAAADngAAAAfAAAAIAE0AIFuYW1lAAAOmAAAASUAAAIK1cf1oHBvc3QAAA/AAAABJAAAAdPExYuNeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGS7wTiBgZWBgaWQ5RkDA8MvCM0cwxDOeI6BgYmBlZkBKwhIc01hcPjI+FGJHcRdyA4RZgQRADK3CxEAAHic7dFZbsMgAEXRS0ycyZnnOeG7y+qC8pU1dHusIOXxuoxaOlwZYWQB0Aea4quIEN4E9LzKbKjzDeM6H/mua6Lmc/p8yhg0lvdYx15ZG8uOLQOGjMp3EzqmzJizYMmKNRu27Nhz4MiJMxeu3Ljz4Ekqm7T8P52G8PP3lnTOVk++Z6iN6QZzNN1F7ptuN7eGOjDUoaGODHVsuvU8MdTO9Hd5aqgzQ50b6sJQl4a6MtS1oW4MdWuoO0PdG+rBUI+GejLUs6FeDPVqqDdDvRvqw1CfhpqM9At0iFLaAAB4nJ1YDXBTVRZ+5/22TUlJ8we0pHlJm7RJf5O8F2j6EymlSPkpxaL8U2xpa3DKj0CBhc2IW4eWKSokIoLsuMqssM64f+jA4HSdWXXXscBq67IOs3FXZ1ZYWVyRFdo899yXtIBQZ90k7717zz3v3HPPOfd854YCCj9cL9dL0RQFOqCbGJnrHb5EayiKIWN8iA/hWBblo6hUWm8TtCDwE80WMJus/irwyxOdxeB0MDb14VNJHnXYoLLSl6FfCUYO9nYPTA8Epg9090LprfbBbZ2hY0UlJUXHQp3/vtWkS6EBv8+rPMq5u9692f/dNxJNiqwC1xPE9TCUgCsSdQWgE3XQD25lkG4CN2xmTcOXWBOyser6RN6KnGbKSbmQ3+d0OI1m2W8QzLLkI2sykrWAgJJEtA8vGGW/2Q+CmT3n8zS9wZwu2DCvtuZKZN3xkrLh36yCZuUomQSqGpY8t/25VfHVhw8z4ebGBtfLb0ya9PCaDc+8dGTvk2dsh6z7WzvowlXKUSWo9MJ15a3KrEP2loOr2Ojhw6iW6hf2BDdEccQvZGpaAy7YovSwq8kr7HGllxpd71rkS6G0Sf11sl9OvMK1+jwPPODxjUwkOim9CU3ix1wNjXDfmJSEn618Bs6lpWwUpU+8PCqLMY650zjq8VhCIP17NEKTx3eaLL+s5Pi6yJWaWjTHLR1jYzPSV9VF/6Ojdb/1kO3Mk3uhHC0x6gc1BjlKQ+nQFxTYdaJkZ7ySVxLBbhR1dsboNXp1tCYKW2LRaEzpYcIx2BKNxaL0ZaUnSqfFoiNhHKR/GkX6PWUSAaJelQaqZL1EpoHNsajSEyPSoJ9IjhIxTdjHLmwZvhRDOiFTY/YeQnvrVZmiTQtGncECXtFTBZLOVwwMRgoXHAkXzMzPn1nAJJ8jYSbMDaqN2waGLzNhih/bZynUBMpIWSg7VYi7DRx2m8ALkIdRCJwI6ArJx2EI8kaDWeTQKeAFk9fjl/1AvwktjQ1P7NjyMGQyfd4vjipX6M/i52D7Cq80kqlcxEcGXRr/FEcgs0u5uGgB4VWuMFfpdn2Re6Hi3PqzmxWKsz6+ae2Pn9hXXw/fqM859UiGC0oKYYILJBqJrsn1Z1E5qOs9rQCiUQRREjm8yJcbHF5cUJufX1vAHlefw0XgUoboS3ETfQlTxBC4SOtuE8VPRJTBSCQSjZCpk7Gqzu+masaZ2y7Zjehho4F3g82BNDkAHpORG4+OCS+f6JTPmtRn/PH1kch6d04sp7AQb25aQ/pqUyXeQ8vrebG8OYQdXOQ+585u0sdW9rqalzRURiJ+9F4MweRFrKUjl1GUYhH1A27WOHw5cTFSFPMo9EeUIGnQTZHIaJ7AHLaOKsOODaNF9jkBjYG2QEsQ2xjMUAx2bBEbeTBWMHwskBjngq56S/yfgkBnWBa4K9sqKtq2t1UI8S9He5XuBRbawAdatrQEAi30Aks2+LM8WeCbalVZkWNylvJ+dqJnzVb+OHlSoKW8nPCP7Rd+CcZ2DdWAGqJ2CBFOphgywFFCFBNtfAbGtNPBCwxvygHeYMZMY9ZboBqwq/pVrsbgN5tkv152ODlbMfiqwGMBgxa4Exz3QhovRIUp6acqZmQzRq0ypDXS2TPLT02YIkQETnOE445oOGxOmXAqUJNNG7XgupMjPq2ua9asrj5yY/yuKteO1Kx0YNJTufrirLe1mZnat7OL6rnUdCWenpW6I8mAnbsY8KWs1PuSovCW9A/Z25PQ24a7cNOqgmTkLmBMgh4THgc4b9k2IVv1/g/F5nGljwPLfOgHAzJzh45V/4+WenTzmMtR5Z7us2Tys909UHqrPY7KbckoxRvRHhmVc3cJGE97uml0R1S0jdULVl7EvZtDFVBF35N9cEdjpgmAiOlFZ+Dtoh93+D3zzHr8RRNZQhnCNMNbcegOvpEwZoL+06cJQ07h+th3fZ/7PVbVC6ngTAV/KoLFuO6+2KFcU651gEb5ugPSIb1D+Xp8V4+k3sEIGnw5mYe4If4k1lFYr6SCzmM2EQ8iWtmwjnBI9kTwe1TlfAmXh7H02by9fW2gsjKwtv0aaURKil4OdV7rDL1MXIFNrhdxohcZXYTnq47WisrKitaObbf5+yvkLi5J6lCNZZ+B6GC38VNBZBDidSS/+mSvh6s+srgC8pyKMvDtt+de3c9fU76ZPfuM8ud4Kv0fyP/LqfepMT/3oZxSqpZaTa1DaQYLY8TFsHYbWYsPoRhRWfL5eSSQbhUGgGC3YLbVMk6PitTFNGpAsNrC6D1VNBKgBHMejaiuRWEWGgsSDBTJjqWIl8kJLlsaLJ2tXDr6xGfT85bM2Q06a46x2HTgvdnV8z5YDy/27J4zt6x2VtkzjoYpkq36kaBr4eQSg7tyiVweWubXZugtadl58ydapfbORfKsDTuZ0OBgx4cfdjCf5tbWNITnL120fdOi1RV1C3uKGzNdwYLcMvZ3BxoPyTOCD1XvXTp7U10gWCVmTV9b3r2z0SkGWovb2hp9I89O8a2smlyaO8muMU+dRmtzp60IzAoFpjLr1n388boLyf0dRvxhsHZ0qbWqDkwqvvpkj4l0fY6EIXRi5sQSrAvsVYwXRy4qJ2EVtD1AN7a0HWth9ymvL1xc3WTUKK/TAHA/bXDVtVWfOMfuGxGZv4Ln/jVr9jc3j1yMv0tndmyt9Vq88Y9gH1wtLX3KWjot5++jWHgAoZZkQ14wGQ20Fli71UmKJAy4xKMSTGbVdybW7FDDAut9XpD5AzWrYO7zQ8qffqF8+Ynd/clrHcdyxGy3a/3+mfNnzC/cBsveTjnTvXf1o6vzOlZw7WtqtdmPK/Errz/6NNtD72zmNOZfbmYdTGHfoofqI79Oc+R2n1lrnL6pOm0Up7kwxhTW12Amm7WYkXR2qYrF2AmgmbAsxZjwy1xpg/m1Je2vrp8v/nz2xpmlBg4E9hrMU341wVpTOh/OfmGvAnra8q6uctr60ZQHV3Q+WMQJykMj8ZsWn2QBOmmHMB+m5pDIpTFonYigiaKAhGEiAHF7EliVnQkjoLVIMPtJpBKHYd3A8GYH9jJzrWwmHx5Qjp7vDAX0suGRym1vtm/9W1/HyR8vczfMs6Sk8DSv855/5dlX9oQq52hT8syyp2rx5Id17IAyAM3wIjQPMOHzytEB64q6D5zT91yNbnx3V/nqnd017S9Y0605k3izoXLpsxde2n38yoOV9s1LcjwzNjbdX6asnBVaBj/6/DwKwPkpcqbDG7BnsXoSqWnUAmottYF6jMSdVyYZh3zVXCjwTiwwHH6sGuRiEHQGzuRX6whZkp123oy1BWE2mEfJ/tvIRtM4ZM5bDXiMsPMaAKOTyc5uL57rqyyc5y5JE5pm1i2S2iUX0CcaQ6lC6Zog7JqSqZmYlosl2K6pwNA84zRnQW6SaALYZQGW5lhCtU/W34N6o+bKfZ8cf3/Cl/+iTX3wBzpOY4mRkeNf3rptycGSshQWgGbYt5jFc2e0+DglIrwl6DVWQ7BuwaJ3Xk1J4VL5urnLl/Wf+gHU/hZoZdKNym6lG+I34FaNeZKcSpJIo2IeCVvpdsDGfKvzJnAwmeD37Ow65ZWwSowpgwX5T69s/rB55dP5BcpgDKFV8p7q2sn/1uc93bVzT/w6UrCqDTWvfCq/oCD/qZXNoUj8BL5Kp6GU017frfNXkAtiiyf/SOCEeLqnd8R/Ql9GlCRfctS6k5chvIBuQ1zCCjoCHL2DHNHIXxMJ3kQeO8lbsUXONeSfA5EjcG6/E+KdhN4bP04vBhdi883+BFBzQbxFbvZzQeY9LNBZc0FNfn5NwfDn6rCTnTw6R8o+gfpf5hCom33cRuiTlss3KHmZjD+BPN+5gXuA2ziS/Q73mLxUkpbKN/eqwz5uK0X9F3h2d1V4nGNgZGBgAOJd776+iue3+crAzc4AAje5Bfcg0xz9YHEOBiYQBQA8FQlFAHicY2BkYGBnAAGOPgaG//85+hkYGVCBMgBGGwNYAAAAeJxjYGBgYB8EmKOPgQEAQ04BfgAAAAAAAA4AaAB+AMwA4AECAUIBbAGYAcICGAJYArQC4AMwA7AD3gQwBJYE3AUkBWYFigYgBmYGtAbqB1gIEghYCG4IhAi2COh4nGNgZGBgUGYoZWBnAAEmIOYCQgaG/2A+AwAYCQG2AHicXZBNaoNAGIZfE5PQCKFQ2lUps2oXBfOzzAESyDKBQJdGR2NQR3QSSE/QE/QEPUUPUHqsvsrXjTMw83zPvPMNCuAWP3DQDAejdm1GjzwS7pMmwi75XngAD4/CQ/oX4TFe4Qt7uMMbOzjuDc0EmXCP/C7cJ38Iu+RP4QEe8CU8pP8WHmOPX2EPz87TPo202ey2OjlnQSXV/6arOjWFmvszMWtd6CqwOlKHq6ovycLaWMWVydXKFFZnmVFlZU46tP7R2nI5ncbi/dDkfDtFBA2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtkMl2wjAMRfOAhABlKm2h80C3+ajgCKKDY6cegP59TYBzukAL+z1Zsq8ctaJTTKPrsUQLbXQQI0EXKXroY4AbDDHCGBNMcYsZ7nCPB8yxwCOe8IwXvOIN7/jAJ76wxHfUqWX+OzgumWAjJMV17i0Ndlr6irLKO+qftdT7i6y4uFSUvCknay+lFYZIZaQcmfH/xIFdYn98bqhra1aKTM/6lWMnyaYirx1rFUQZFBkb2zJUtoXeJCeg0WnLtHeSFc3OtrnozNwqi0TkSpBMDB1nSde5oJXW23hTS2/T0LilglXX7dmFVxLnq5U0vYATHFk3zX3BOisoQHNDFDeZnqKDy9hRNawN7Vh727hFzcJ5c8TILrKZfH7tIPxAFP0BpLeJPA==) format("woff");font-weight:400;font-style:normal}.vjs-icon-play,.video-js .vjs-play-control .vjs-icon-placeholder,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{content:"\\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\\f102"}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before{content:"\\f103"}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before{content:"\\f104"}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{content:"\\f105"}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{content:"\\f106"}.vjs-icon-volume-high,.video-js .vjs-mute-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control .vjs-icon-placeholder:before{content:"\\f107"}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before{content:"\\f108"}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before{content:"\\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\\f10b"}.vjs-icon-subtitles,.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before{content:"\\f10c"}.vjs-icon-captions,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-captions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-captions:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-captions-button .vjs-icon-placeholder:before{content:"\\f10d"}.vjs-icon-chapters,.video-js .vjs-chapters-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button .vjs-icon-placeholder:before{content:"\\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\\f110"}.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder,.video-js .vjs-volume-level,.video-js .vjs-play-progress{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before,.video-js .vjs-volume-level:before,.video-js .vjs-play-progress:before{content:"\\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\\f114"}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before{content:"\\f115"}.vjs-icon-replay,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay:before,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before{content:"\\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:"\\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\\f11c"}.vjs-icon-audio-description,.video-js .vjs-descriptions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button .vjs-icon-placeholder:before{content:"\\f11d"}.vjs-icon-audio,.video-js .vjs-audio-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio:before,.video-js .vjs-audio-button .vjs-icon-placeholder:before{content:"\\f11e"}.vjs-icon-next-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-next-item:before{content:"\\f11f"}.vjs-icon-previous-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-previous-item:before{content:"\\f120"}.vjs-icon-picture-in-picture-enter,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-picture-in-picture-enter:before,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:"\\f121"}.vjs-icon-picture-in-picture-exit,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-picture-in-picture-exit:before,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:"\\f122"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:none}.video-js *,.video-js *:before,.video-js *:after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin:0}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-1-1{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-9-16{padding-top:177.7777777778%}.video-js.vjs-1-1{padding-top:100%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;inset:0}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs){width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1!important;visibility:visible!important}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:#2b333fb3;border-radius:.3em;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.81666em;margin-left:-1.5em}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{border-color:#fff;background-color:#73859f;background-color:#73859f80;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{background:none;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover,.js-focus-visible .vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:#73859f80}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover,.js-focus-visible .vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.video-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible),.js-focus-visible .vjs-menu *:not(.vjs-selected):focus:not(.focus-visible){background:none}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0em;margin-bottom:1.5em;border-top-color:#2b333fb3}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:#2b333fb3;position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:#2b333fb3}.vjs-has-started .vjs-control-bar{display:flex;visibility:visible;opacity:1;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;flex:none}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0em 0em 1em white}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;flex:auto;display:flex;align-items:center;min-width:4em;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:flex;align-items:center}.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-holder{flex:auto;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;top:-.3333333333em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:#fffc;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:#000c}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#73859f;background-color:#73859f80}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0em 0em 1em white;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active{visibility:visible;opacity:1;position:relative;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical{left:-3.5em;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;visibility:visible;opacity:1;position:relative;transition:none}.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{position:absolute;bottom:3em;left:.5em}.video-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:#2b333fb3}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{background-color:#fff;background-color:#fffc;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{display:none;position:absolute;width:100%;height:1px;background-color:#000;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.vjs-no-flex .vjs-volume-control .vjs-mouse-display{z-index:0}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000;background-color:#000c}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;inset:0;height:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:flex;align-items:flex-start;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js:not(.vjs-live) .vjs-live-control,.video-js.vjs-liveui .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{align-items:center;cursor:pointer;flex:none;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.vjs-no-flex .vjs-seek-to-live-control{display:table-cell;width:auto;text-align:left}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.video-js .vjs-time-control{flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control,.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time,.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{position:absolute;inset:0 0 3em;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control,.video-js .vjs-fullscreen-control{cursor:pointer;flex:none}.vjs-playback-rate>.vjs-menu-button,.vjs-playback-rate .vjs-playback-rate-value{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:"X";font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block;-webkit-animation:vjs-spinner-show 0s linear .3s forwards;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{to{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{to{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}to{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}to{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"\\f10d";font-size:1.5em;line-height:inherit}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" \\f11d";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-chapters-button,.video-js.vjs-layout-small .vjs-descriptions-button,.video-js.vjs-layout-small .vjs-captions-button,.video-js.vjs-layout-small .vjs-subtitles-button,.video-js.vjs-layout-small .vjs-audio-button,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-chapters-button,.video-js.vjs-layout-x-small .vjs-descriptions-button,.video-js.vjs-layout-x-small .vjs-captions-button,.video-js.vjs-layout-x-small .vjs-subtitles-button,.video-js.vjs-layout-x-small .vjs-audio-button,.video-js.vjs-layout-x-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-chapters-button,.video-js.vjs-layout-tiny .vjs-descriptions-button,.video-js.vjs-layout-tiny .vjs-captions-button,.video-js.vjs-layout-tiny .vjs-subtitles-button,.video-js.vjs-layout-tiny .vjs-audio-button,.video-js.vjs-layout-tiny .vjs-volume-control{display:none!important}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:auto;width:initial}.video-js.vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button,.video-js.vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button,.video-js.vjs-layout-tiny .vjs-subs-caps-button{display:none}.video-js.vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer,.video-js.vjs-layout-tiny .vjs-custom-control-spacer{flex:auto;display:block}.video-js.vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer,.video-js.vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-x-small.vjs-liveui .vjs-progress-control,.video-js.vjs-layout-tiny .vjs-progress-control{display:none}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:#2b333fbf;color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-font,.vjs-text-track-settings .vjs-track-settings-controls{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display: grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:5px;padding:3px;border:none}.vjs-text-track-settings fieldset span{display:inline-block}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;margin:0 0 5px}.vjs-text-track-settings .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);display:block;margin:0 0 5px;padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-track-settings-controls button:focus,.vjs-track-settings-controls button:active{outline-style:solid;outline-width:medium;background-image:linear-gradient(0deg,#fff 88%,#73859f 100%)}.vjs-track-settings-controls button:hover{color:#2b333fbf}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);color:#2b333f;cursor:pointer;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}@media print{.video-js>*:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:-1000}.js-focus-visible .video-js *:focus:not(.focus-visible){outline:none}.video-js *:focus:not(:focus-visible){outline:none}.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-laserPointer-image{margin-left:-22px;margin-top:3px}.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;background:#fff;user-select:none;border-bottom:1px solid #eeeef7;touch-action:manipulation}.telebox-title-area{padding-left:16px;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{padding-right:16px;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;-webkit-tap-highlight-color:transparent}.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-title,.telebox-max-titlebar.telebox-max-titlebar-single-title .telebox-titles{display:none}.telebox-max-titlebar.telebox-max-titlebar-single-title .telebox-title{display:block}.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,.fastboard-bottom-right{display:flex;gap:10px;position:absolute;bottom:8px;left:8px;padding:8px;z-index:200}.fastboard-bottom-right{left:auto;right:8px}.fastboard-bottom{right:8px}.fastboard-redo-undo{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.fastboard-redo-undo.light{color:#333;background-color:#ffffffe6;border:1px solid #e5e8f0}.fastboard-redo-undo.dark{color:#ddd;background-color:#14181e;border:1px solid #383b42}.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:100%;height:100%}.fastboard-redo-undo-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-redo-undo-btn.light:not(:disabled):hover{background-color:#ebf2ff}.fastboard-redo-undo-btn.dark:not(:disabled):hover{background-color:#383b42}.fastboard-page-control{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.fastboard-page-control.light{color:#333;background-color:#ffffffe6;border:1px solid #e5e8f0}.fastboard-page-control.dark{color:#ddd;background-color:#14181e;border:1px solid #383b42}.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:100%;height:100%}.fastboard-page-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-page-control-btn.light:not(:disabled):hover{background-color:#ebf2ff}.fastboard-page-control-btn.dark:not(:disabled):hover{background-color:#383b42}.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-text{line-height:24px}.fastboard-page-control-page,.fastboard-page-control-slash,.fastboard-page-control-page-count{font-size:14px;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(5px);-webkit-backdrop-filter:blur(5px)}.fastboard-zoom-control.light{color:#333;background-color:#ffffffe6;border:1px solid #e5e8f0}.fastboard-zoom-control.dark{color:#ddd;background-color:#14181e;border:1px solid #383b42}.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:100%;height:100%}.fastboard-zoom-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-zoom-control-btn.light:not(:disabled):hover{background-color:#ebf2ff}.fastboard-zoom-control-btn.dark:not(:disabled):hover{background-color:#383b42}.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-text{line-height:24px}.fastboard-zoom-control-percent{opacity:.6}.fastboard-zoom-control-scale,.fastboard-zoom-control-percent{font-size:14px;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(5px);-webkit-backdrop-filter:blur(5px)}.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:#ffffffe6;border:1px solid #e5e8f0}.fastboard-toolbar.dark{color:#ddd;background-color:#14181e;border:1px solid #383b42}.fastboard-toolbar.expanded{border:1px solid rgba(0,0,0,.15)}.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:100%;height:100%}.fastboard-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-toolbar-btn.light:not(:disabled):hover{background-color:#ebf2ff}.fastboard-toolbar-btn.dark:not(:disabled):hover{background-color:#383b42}.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-section~.fastboard-toolbar-mask{opacity:0;transition:.5s opacity .4s}.fastboard-toolbar-section:hover~.fastboard-toolbar-mask,.fastboard-toolbar-mask:hover{opacity:1;transition:.2s opacity}.fastboard-toolbar-panel{width:120px;padding:0;display:flex;flex-flow:column nowrap;align-items:center;gap:8px}.fastboard-toolbar-panel.apps{width:256px}.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:0}.fastboard-toolbar-app-icon-wrapper{position:relative;display:flex;align-items:center;justify-content:center}.fastboard-toolbar-app-icon-mask{position:absolute;width:36px;height:36px;animation:fastboard-app-loading-rotate .5s linear infinite;transform-origin:center}.fastboard-toolbar-app-is-loading{cursor:wait}.fastboard-toolbar-app-is-loading button:disabled{cursor:wait}.fastboard-toolbar-app-is-failed{cursor:not-allowed}.fastboard-toolbar-app-is-failed button:disabled{cursor:not-allowed}.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:14px;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{position:absolute;left:calc(100% + 1px);top:50%;transform:translateY(-50%);opacity:.85}.fastboard-toolbar-mask.dark{left:100%}.fastboard-toolbar-mask-btn{width:17px;height:62px;cursor:pointer;opacity:.85}.fastboard-toolbar-mask-btn.dark{filter:invert(.8)}.fastboard-toolbar-expand-btn{display:flex;align-items:center;position:absolute;left:0}@keyframes fastboard-app-loading-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fastboard-player-control{width:100%;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);z-index:100}.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:#ffffffe6;border:1px solid #e5e8f0}.fastboard-player-control.dark{color:#ddd;background-color:#14181e;border:1px solid #383b42}.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:100%;height:100%}.fastboard-player-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-player-control-btn.light:not(:disabled):hover{background-color:#ebf2ff}.fastboard-player-control-btn.dark:not(:disabled):hover{background-color:#383b42}.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:14px;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:14px;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);
@@ -289,18 +289,17 @@ function Redo({ theme = "light", active }) {
289
289
  const config = themes[theme];
290
290
  const stroke = active ? config.activeColor : config.color;
291
291
  return /* @__PURE__ */ React2.createElement("svg", {
292
- viewBox: "0 0 24 24"
293
- }, /* @__PURE__ */ React2.createElement("g", {
294
- fill: "none",
295
- fillRule: "evenodd",
296
- stroke,
297
- strokeLinecap: "round",
298
- strokeLinejoin: "round"
292
+ viewBox: "0 0 24 24",
293
+ fill: "none"
299
294
  }, /* @__PURE__ */ React2.createElement("path", {
300
- d: "M14 14h4v-4"
295
+ d: "M19 9.625H9v-1.25h10v1.25ZM5.625 13v6h-1.25v-6h1.25ZM9 9.625A3.375 3.375 0 0 0 5.625 13h-1.25A4.625 4.625 0 0 1 9 8.375v1.25Z",
296
+ fill: stroke
301
297
  }), /* @__PURE__ */ React2.createElement("path", {
302
- d: "m18 14-.788-.9A7.005 7.005 0 0 0 6 14h0"
303
- })));
298
+ d: "m15 5 4 4-4 4",
299
+ stroke,
300
+ strokeLinejoin: "round",
301
+ strokeWidth: "1.25"
302
+ }));
304
303
  }
305
304
 
306
305
  // src/icons/Undo.tsx
@@ -309,18 +308,17 @@ function Undo({ theme = "light", active }) {
309
308
  const config = themes[theme];
310
309
  const stroke = active ? config.activeColor : config.color;
311
310
  return /* @__PURE__ */ React3.createElement("svg", {
312
- viewBox: "0 0 24 24"
313
- }, /* @__PURE__ */ React3.createElement("g", {
314
- fill: "none",
315
- fillRule: "evenodd",
316
- stroke,
317
- strokeLinecap: "round",
318
- strokeLinejoin: "round"
311
+ viewBox: "0 0 24 24",
312
+ fill: "none"
319
313
  }, /* @__PURE__ */ React3.createElement("path", {
320
- d: "M10 14H6v-4"
314
+ d: "M5 9.625h10v-1.25H5v1.25ZM18.375 13v6h1.25v-6h-1.25ZM15 9.625A3.375 3.375 0 0 1 18.375 13h1.25A4.625 4.625 0 0 0 15 8.375v1.25Z",
315
+ fill: stroke
321
316
  }), /* @__PURE__ */ React3.createElement("path", {
322
- d: "m6 14 .788-.9A7.005 7.005 0 0 1 18 14h0"
323
- })));
317
+ d: "M9 5 5 9l4 4",
318
+ stroke,
319
+ strokeLinejoin: "round",
320
+ strokeWidth: "1.25"
321
+ }));
324
322
  }
325
323
 
326
324
  // src/components/RedoUndo/RedoUndo.tsx
@@ -439,13 +437,13 @@ function Minus({ theme = "light", active }) {
439
437
  const config = themes[theme];
440
438
  const stroke = active ? config.activeColor : config.color;
441
439
  return /* @__PURE__ */ React5.createElement("svg", {
442
- viewBox: "0 0 24 24"
440
+ viewBox: "0 0 24 24",
441
+ fill: "none"
443
442
  }, /* @__PURE__ */ React5.createElement("path", {
444
- fill: "none",
443
+ d: "M5 12h14",
445
444
  stroke,
446
- strokeLinecap: "round",
447
445
  strokeLinejoin: "round",
448
- d: "M7 12h10"
446
+ strokeWidth: "1.25"
449
447
  }));
450
448
  }
451
449
 
@@ -455,13 +453,13 @@ function Plus({ theme = "light", active }) {
455
453
  const config = themes[theme];
456
454
  const stroke = active ? config.activeColor : config.color;
457
455
  return /* @__PURE__ */ React6.createElement("svg", {
458
- viewBox: "0 0 24 24"
456
+ viewBox: "0 0 24 24",
457
+ fill: "none"
459
458
  }, /* @__PURE__ */ React6.createElement("path", {
460
- fill: "none",
459
+ d: "M5 12h14m-7-7v14",
461
460
  stroke,
462
- strokeLinecap: "round",
463
461
  strokeLinejoin: "round",
464
- d: "M12 7v10m-5-5h10"
462
+ strokeWidth: "1.25"
465
463
  }));
466
464
  }
467
465
 
@@ -471,26 +469,26 @@ function Reset({ theme = "light", active }) {
471
469
  const config = themes[theme];
472
470
  const stroke = active ? config.activeColor : config.color;
473
471
  return /* @__PURE__ */ React7.createElement("svg", {
474
- viewBox: "0 0 24 24"
475
- }, /* @__PURE__ */ React7.createElement("g", {
476
- fill: "none",
477
- fillRule: "evenodd",
478
- transform: "translate(-176 -684)"
479
- }, /* @__PURE__ */ React7.createElement("path", {
472
+ viewBox: "0 0 24 24",
473
+ fill: "none"
474
+ }, /* @__PURE__ */ React7.createElement("circle", {
475
+ cx: "12",
476
+ cy: "12",
477
+ fill: stroke,
478
+ r: "2"
479
+ }), /* @__PURE__ */ React7.createElement("path", {
480
+ d: "M12 3v4m0 10v4m9-9h-4M7 12H3",
480
481
  stroke,
481
482
  strokeLinejoin: "round",
482
- d: "M188 688v4m0 8v4m8-8h-4m-8 0h-4"
483
+ strokeWidth: "1.25"
483
484
  }), /* @__PURE__ */ React7.createElement("circle", {
484
- cx: "188",
485
- cy: "696",
486
- r: "6",
487
- stroke
488
- }), /* @__PURE__ */ React7.createElement("circle", {
489
- cx: "188",
490
- cy: "696",
491
- r: "1",
492
- fill: stroke
493
- })));
485
+ cx: "12",
486
+ cy: "12",
487
+ r: "7",
488
+ stroke,
489
+ strokeLinejoin: "round",
490
+ strokeWidth: "1.25"
491
+ }));
494
492
  }
495
493
 
496
494
  // src/components/ZoomControl/ZoomControl.tsx
@@ -531,10 +529,12 @@ function ZoomControl({
531
529
  src: disabled ? minusIconDisable : minusIcon,
532
530
  alt: "[minus]"
533
531
  }))), /* @__PURE__ */ React8.createElement("span", {
532
+ className: clsx2(`${name2}-text`, theme)
533
+ }, /* @__PURE__ */ React8.createElement("span", {
534
534
  className: clsx2(`${name2}-scale`, theme)
535
535
  }, Math.ceil(scale * 100)), /* @__PURE__ */ React8.createElement("span", {
536
536
  className: clsx2(`${name2}-percent`, theme)
537
- }, "%"), /* @__PURE__ */ React8.createElement(Tippy2, {
537
+ }, "%")), /* @__PURE__ */ React8.createElement(Tippy2, {
538
538
  className: "fastboard-tip",
539
539
  content: t("zoomIn"),
540
540
  theme,
@@ -600,48 +600,65 @@ import Tippy3 from "@tippyjs/react";
600
600
  import clsx3 from "clsx";
601
601
  import React12 from "react";
602
602
 
603
- // src/icons/ChevronLeft.tsx
603
+ // src/icons/Left.tsx
604
604
  import React9 from "react";
605
- function ChevronLeft({ theme = "light", active }) {
605
+ function Left({ theme = "light", active }) {
606
606
  const config = themes[theme];
607
607
  const stroke = active ? config.activeColor : config.color;
608
608
  return /* @__PURE__ */ React9.createElement("svg", {
609
- viewBox: "0 0 24 24"
609
+ viewBox: "0 0 24 24",
610
+ fill: "none"
610
611
  }, /* @__PURE__ */ React9.createElement("path", {
611
- fill: "none",
612
+ d: "m14 8-2 2-2 2 2 2 2 2",
612
613
  stroke,
613
- strokeLinecap: "round",
614
614
  strokeLinejoin: "round",
615
- d: "m14 16-2-2-2-2 2-2 2-2"
615
+ strokeWidth: "1.25"
616
616
  }));
617
617
  }
618
618
 
619
- // src/icons/ChevronRight.tsx
619
+ // src/icons/Right.tsx
620
620
  import React10 from "react";
621
- function ChevronRight({ theme = "light", active }) {
621
+ function Right({ theme = "light", active }) {
622
622
  const config = themes[theme];
623
623
  const stroke = active ? config.activeColor : config.color;
624
624
  return /* @__PURE__ */ React10.createElement("svg", {
625
- viewBox: "0 0 24 24"
625
+ viewBox: "0 0 24 24",
626
+ fill: "none"
626
627
  }, /* @__PURE__ */ React10.createElement("path", {
627
- fill: "none",
628
+ d: "m10 8 2 2 2 2-2 2-2 2",
628
629
  stroke,
629
- strokeLinecap: "round",
630
630
  strokeLinejoin: "round",
631
- d: "m10 16 2-2 2-2-2-2-2-2"
631
+ strokeWidth: "1.25"
632
632
  }));
633
633
  }
634
634
 
635
- // src/icons/FilePlus.tsx
635
+ // src/icons/WhiteboardAdd.tsx
636
636
  import React11 from "react";
637
- function FilePlus({ theme = "light", active }) {
637
+ function WhiteboardAdd({ theme = "light", active }) {
638
638
  const config = themes[theme];
639
639
  const stroke = active ? config.activeColor : config.color;
640
640
  return /* @__PURE__ */ React11.createElement("svg", {
641
- viewBox: "0 0 24 24"
641
+ viewBox: "0 0 24 24",
642
+ fill: "none"
642
643
  }, /* @__PURE__ */ React11.createElement("path", {
643
- fill: stroke,
644
- 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"
644
+ d: "M4 20h16M4 6h16",
645
+ stroke,
646
+ strokeLinejoin: "round",
647
+ strokeWidth: "1.25"
648
+ }), /* @__PURE__ */ React11.createElement("rect", {
649
+ height: "10",
650
+ rx: "1",
651
+ stroke,
652
+ strokeLinejoin: "round",
653
+ strokeWidth: "1.25",
654
+ width: "14",
655
+ x: "5",
656
+ y: "8"
657
+ }), /* @__PURE__ */ React11.createElement("path", {
658
+ d: "M12 4v2m-3 7h6m-3-3v6",
659
+ stroke,
660
+ strokeLinejoin: "round",
661
+ strokeWidth: "1.25"
645
662
  }));
646
663
  }
647
664
 
@@ -677,18 +694,20 @@ function PageControl({
677
694
  disabled: disabled || pageIndex === 0,
678
695
  onClick: actions.prevPage
679
696
  }, /* @__PURE__ */ React12.createElement(Icon, {
680
- fallback: /* @__PURE__ */ React12.createElement(ChevronLeft, {
697
+ fallback: /* @__PURE__ */ React12.createElement(Left, {
681
698
  theme
682
699
  }),
683
700
  src: disabled ? prevIconDisable : prevIcon,
684
701
  alt: "[prev]"
685
702
  }))), /* @__PURE__ */ React12.createElement("span", {
703
+ className: clsx3(`${name3}-text`, theme)
704
+ }, /* @__PURE__ */ React12.createElement("span", {
686
705
  className: clsx3(`${name3}-page`, theme)
687
706
  }, pageCount === 0 ? "\u2026" : pageIndex + 1), /* @__PURE__ */ React12.createElement("span", {
688
707
  className: clsx3(`${name3}-slash`, theme)
689
708
  }, "/"), /* @__PURE__ */ React12.createElement("span", {
690
709
  className: clsx3(`${name3}-page-count`, theme)
691
- }, pageCount), /* @__PURE__ */ React12.createElement(Tippy3, {
710
+ }, pageCount)), /* @__PURE__ */ React12.createElement(Tippy3, {
692
711
  className: "fastboard-tip",
693
712
  content: t("nextPage"),
694
713
  theme,
@@ -702,7 +721,7 @@ function PageControl({
702
721
  disabled: disabled || pageIndex === pageCount - 1,
703
722
  onClick: actions.nextPage
704
723
  }, /* @__PURE__ */ React12.createElement(Icon, {
705
- fallback: /* @__PURE__ */ React12.createElement(ChevronRight, {
724
+ fallback: /* @__PURE__ */ React12.createElement(Right, {
706
725
  theme
707
726
  }),
708
727
  src: disabled ? nextIconDisable : nextIcon,
@@ -721,7 +740,7 @@ function PageControl({
721
740
  disabled,
722
741
  onClick: actions.addPage
723
742
  }, /* @__PURE__ */ React12.createElement(Icon, {
724
- fallback: /* @__PURE__ */ React12.createElement(FilePlus, {
743
+ fallback: /* @__PURE__ */ React12.createElement(WhiteboardAdd, {
725
744
  theme
726
745
  }),
727
746
  src: disabled ? addIconDisable : addIcon,
@@ -1042,10 +1061,14 @@ var MinHeight = ItemHeight * 2 - 4;
1042
1061
  function useRoomState() {
1043
1062
  return useFastboardValue(useFastboardApp().memberState);
1044
1063
  }
1064
+ function useAppsStatus() {
1065
+ return useFastboardValue(useFastboardApp().appsStatus);
1066
+ }
1045
1067
  function useToolbar() {
1046
1068
  const app = useFastboardApp();
1047
1069
  const writable = useWritable();
1048
1070
  const memberState = useRoomState();
1071
+ const appsStatus = useAppsStatus();
1049
1072
  const [lastShape, setLastShape] = useState3("rectangle");
1050
1073
  const cleanCurrentScene = useCallback5(() => {
1051
1074
  app.cleanCurrentScene();
@@ -1068,6 +1091,7 @@ function useToolbar() {
1068
1091
  writable,
1069
1092
  memberState,
1070
1093
  lastShape,
1094
+ appsStatus,
1071
1095
  cleanCurrentScene,
1072
1096
  setAppliance,
1073
1097
  setStrokeWidth,
@@ -1078,6 +1102,7 @@ var EmptyToolbarHook = {
1078
1102
  writable: false,
1079
1103
  memberState: void 0,
1080
1104
  lastShape: "rectangle",
1105
+ appsStatus: {},
1081
1106
  cleanCurrentScene: noop,
1082
1107
  setAppliance: noop,
1083
1108
  setStrokeWidth: noop,
@@ -1085,16 +1110,16 @@ var EmptyToolbarHook = {
1085
1110
  };
1086
1111
 
1087
1112
  // src/components/Toolbar/Toolbar.tsx
1088
- import clsx9 from "clsx";
1113
+ import clsx10 from "clsx";
1089
1114
  import { AnimatePresence, motion } from "framer-motion";
1090
- import React43, { createContext as createContext3, useState as useState5 } from "react";
1115
+ import React44, { createContext as createContext3, useState as useState5 } from "react";
1091
1116
 
1092
1117
  // src/components/Toolbar/components/assets/expanded.png
1093
1118
  var expanded_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAB8CAYAAAAMw2JFAAAAAXNSR0IArs4c6QAAA5xJREFUeF7tnL9v00AUx5/TlRkJMSAxZ+jYCf4GtopK6dB2qBBsjshaJErboWVJpYaNLGDaIR2YYAFXqlxhlvzAJkhGJGlyDhVNSpWgyOiqBJnQ+urznW2Jy1JVVnKffv3x8yV9LxLE5CEBwFUA6ALAzyiZJFVVX21ubj7N5/MmACAAGEQBJDWbzQZCqGcYRm52dlbpdDpNAPgRNozkOE691+tBo9FItNtto1AorC0tLX0EAAzUDwvoDGS02NHREU4IarXatizLOV3XvwHAdwBweAP9BYIXGwwGcHh4mLBtG2matrGwsPB2mA5Xmf8BGf3lJycn+HRNtFqtd2HIfCEIBnIcBxBCEkKobxjGFk+ZPUFG6YQh86VAPGSuAUCbhcy+QMZktjVNW2cls28QD5k/A0CLtjJTg4zLbJpmLpVKvaStzIFAWMrMBISFzExBgsjMHIRWZm4gfmXmCnKezIqiLK+srOjDG+mfu3ooIG6Z6/X6r/39/Udzc3OvAQBX5jOYUEHwgqenp2BZlrS7u/sgnU6/Ge53wgfBMN1uV6pWq/b09PTdSqVSwtU49ERGp8myrISqqsszMzPPcSqRgRwfH0vlcvnD1NTUIgB8jQyk3+9DuVy2Jycn7wBANTIQvPsrlUqJZDJ5GwA+RQaCXSkWixPJZPKWABldOSKR8XeLIhGRCOkTBOGIcEQ4QkpAOEJKSNQR4YhwhJSAcISUkKgjTBy5fuPmNfxCNetLA/98srp25WFaxv+UpH5QnZpxEPz7/XuLnSAwzEBwFEFgmIIEgWEOQgvDBYQGhhuIXxiuIH5g/g8QP5czt0T8QFB/mHdeZXXXdr8QXEBoIJiD0EIwBQkCwQwksm0A9abD44lUl68A4ZEAkz0rDzDhiDg1JK+EI8IR4QgpAeEIKSFRR4QjwhFSAsIRUkKijsTSkdi0f8WmIS42LYKxaJqMRRtpLBpr8URTpK3GrrEYU1GUx6E3X7sHhUzTfJZKpV5cNFvBrY10NDqFEFKz2ex6Pp/3nDZhDuIaJrMPDg425ufncac3HrXzHCZjCuIar9vJZDI5TdPweN2lJpKYgLhlLBQKqzQDh4FA/MhI2ptQg/iVkTkIrYxMQdwyyrK8pet6uONxLGQMlAhLGalBXDK+z2azG6TKSFqIdNxrzNZXZSQtRDp+0eDxDmsZLwUSxvQqEWQ4nN4n3aZJLxT0uLS3t7cdhowk0Ph8gQGJNKzjvwGKWUjXcvHclAAAAABJRU5ErkJggg==";
1094
1119
 
1095
1120
  // src/components/Toolbar/Content.tsx
1096
- import clsx8 from "clsx";
1097
- import React42, { useCallback as useCallback10, useContext as useContext13, useEffect as useEffect3, useRef as useRef2, useState as useState4 } from "react";
1121
+ import clsx9 from "clsx";
1122
+ import React43, { useCallback as useCallback11, useContext as useContext13, useEffect as useEffect3, useRef as useRef2, useState as useState4 } from "react";
1098
1123
 
1099
1124
  // src/components/Toolbar/components/ApplianceButtons.tsx
1100
1125
  import React33, { useCallback as useCallback6, useContext as useContext4 } from "react";
@@ -1219,8 +1244,9 @@ function CleanButton() {
1219
1244
  }
1220
1245
 
1221
1246
  // src/components/Toolbar/components/AppsButton.tsx
1247
+ import clsx5 from "clsx";
1222
1248
  import Tippy5 from "@tippyjs/react";
1223
- import React34, { useContext as useContext5 } from "react";
1249
+ import React35, { useContext as useContext5 } from "react";
1224
1250
 
1225
1251
  // src/components/Toolbar/components/assets/vscode.png
1226
1252
  var vscode_default = "data:image/png;base64,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";
@@ -1231,23 +1257,35 @@ var geogebra_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCA
1231
1257
  // src/components/Toolbar/components/assets/countdown.png
1232
1258
  var countdown_default = "data:image/png;base64,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";
1233
1259
 
1260
+ // src/components/Toolbar/icons/Loading.tsx
1261
+ import React34 from "react";
1262
+ var Loading = (props) => {
1263
+ const stroke = getStroke(props);
1264
+ return /* @__PURE__ */ React34.createElement("svg", {
1265
+ viewBox: "0 0 24 24"
1266
+ }, /* @__PURE__ */ React34.createElement("path", {
1267
+ fill: stroke,
1268
+ d: "M12 4V2A10 10 0 0 0 2 12h2a8 8 0 0 1 8-8Z"
1269
+ }));
1270
+ };
1271
+
1234
1272
  // src/components/Toolbar/components/AppsButton.tsx
1235
1273
  function AppsButton({ content, onClick }) {
1236
1274
  const { theme, icons, writable } = useContext5(ToolbarContext);
1237
1275
  const disabled = !writable;
1238
- const button = /* @__PURE__ */ React34.createElement(Button, {
1276
+ const button = /* @__PURE__ */ React35.createElement(Button, {
1239
1277
  content: "Apps",
1240
1278
  onClick
1241
- }, /* @__PURE__ */ React34.createElement(Icon, {
1242
- fallback: /* @__PURE__ */ React34.createElement(Icons.Apps, {
1279
+ }, /* @__PURE__ */ React35.createElement(Icon, {
1280
+ fallback: /* @__PURE__ */ React35.createElement(Icons.Apps, {
1243
1281
  theme
1244
1282
  }),
1245
1283
  src: disabled ? icons == null ? void 0 : icons.appsIconDisable : icons == null ? void 0 : icons.appsIcon,
1246
1284
  alt: "[apps]"
1247
1285
  }));
1248
- return content === false ? button : /* @__PURE__ */ React34.createElement("span", {
1286
+ return content === false ? button : /* @__PURE__ */ React35.createElement("span", {
1249
1287
  className: "fastboard-toolbar-btn-interactive"
1250
- }, /* @__PURE__ */ React34.createElement(Tippy5, {
1288
+ }, /* @__PURE__ */ React35.createElement(Tippy5, {
1251
1289
  className: "fastboard-tip",
1252
1290
  content: renderAppsButtonContent(content),
1253
1291
  theme,
@@ -1259,55 +1297,74 @@ function AppsButton({ content, onClick }) {
1259
1297
  }, button));
1260
1298
  }
1261
1299
  function renderAppsButtonContent(content) {
1262
- return /* @__PURE__ */ React34.createElement("div", {
1300
+ return /* @__PURE__ */ React35.createElement("div", {
1263
1301
  className: "fastboard-toolbar-panel apps"
1264
- }, /* @__PURE__ */ React34.createElement("div", {
1302
+ }, /* @__PURE__ */ React35.createElement("div", {
1265
1303
  className: "fastboard-toolbar-apps"
1266
- }, content || /* @__PURE__ */ React34.createElement(DefaultApps, null)));
1304
+ }, content || /* @__PURE__ */ React35.createElement(DefaultApps, null)));
1267
1305
  }
1268
1306
  function DefaultApps() {
1269
1307
  const app = useFastboardApp();
1270
- return /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement(AppIcon, {
1308
+ const { appsStatus } = useContext5(ToolbarContext);
1309
+ return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(AppIcon, {
1271
1310
  title: "Code Editor",
1272
1311
  src: vscode_default,
1273
1312
  alt: "[code editor]",
1313
+ appStatus: appsStatus["Monaco"],
1274
1314
  onClick: app == null ? void 0 : app.insertCodeEditor.bind(app)
1275
- }), /* @__PURE__ */ React34.createElement(AppIcon, {
1315
+ }), /* @__PURE__ */ React35.createElement(AppIcon, {
1276
1316
  title: "GeoGebra",
1277
1317
  src: geogebra_default,
1278
1318
  alt: "[geogebra]",
1319
+ appStatus: appsStatus["GeoGebra"],
1279
1320
  onClick: app == null ? void 0 : app.insertGeoGebra.bind(app)
1280
- }), /* @__PURE__ */ React34.createElement(AppIcon, {
1321
+ }), /* @__PURE__ */ React35.createElement(AppIcon, {
1281
1322
  title: "Countdown",
1282
1323
  src: countdown_default,
1283
1324
  alt: "[countdown]",
1325
+ appStatus: appsStatus["Countdown"],
1284
1326
  onClick: app == null ? void 0 : app.insertCountdown.bind(app)
1285
1327
  }));
1286
1328
  }
1287
- function AppIcon({ title, src, alt, onClick }) {
1288
- return /* @__PURE__ */ React34.createElement("span", {
1289
- className: "fastboard-toolbar-app-icon"
1290
- }, /* @__PURE__ */ React34.createElement(Button, {
1329
+ function AppIcon({ title, src, alt, appStatus, onClick }) {
1330
+ const { theme } = useContext5(ToolbarContext);
1331
+ const { status = "idle", reason } = appStatus || {};
1332
+ const loading = status === "loading";
1333
+ const failed = status === "failed";
1334
+ const unifiedTitle = loading ? "loading" : failed ? reason : title;
1335
+ return /* @__PURE__ */ React35.createElement("div", {
1336
+ className: "fastboard-toolbar-app-icon-wrapper"
1337
+ }, /* @__PURE__ */ React35.createElement("span", {
1338
+ className: clsx5("fastboard-toolbar-app-icon", {
1339
+ "fastboard-toolbar-app-is-loading": loading,
1340
+ "fastboard-toolbar-app-is-failed": failed
1341
+ })
1342
+ }, /* @__PURE__ */ React35.createElement(Button, {
1343
+ disabled: failed || loading,
1291
1344
  placement: "top",
1292
- content: title,
1345
+ content: unifiedTitle,
1293
1346
  onClick
1294
- }, /* @__PURE__ */ React34.createElement("img", {
1347
+ }, /* @__PURE__ */ React35.createElement("img", {
1295
1348
  src,
1296
1349
  alt,
1297
- title
1298
- })), /* @__PURE__ */ React34.createElement("span", {
1350
+ title: unifiedTitle
1351
+ })), /* @__PURE__ */ React35.createElement("span", {
1299
1352
  className: "fastboard-toolbar-app-icon-text"
1300
- }, title));
1353
+ }, title)), loading && /* @__PURE__ */ React35.createElement("span", {
1354
+ className: "fastboard-toolbar-app-icon-mask"
1355
+ }, /* @__PURE__ */ React35.createElement(Loading, {
1356
+ theme
1357
+ })));
1301
1358
  }
1302
1359
 
1303
1360
  // src/components/Toolbar/components/PencilButton.tsx
1304
1361
  import Tippy6 from "@tippyjs/react";
1305
- import React38, { useCallback as useCallback7, useContext as useContext9 } from "react";
1362
+ import React39, { useCallback as useCallback7, useContext as useContext9 } from "react";
1306
1363
  import { ApplianceNames as ApplianceNames3 } from "white-web-sdk";
1307
1364
 
1308
1365
  // src/components/Toolbar/components/ColorBox.tsx
1309
- import clsx5 from "clsx";
1310
- import React35, { useContext as useContext6 } from "react";
1366
+ import clsx6 from "clsx";
1367
+ import React36, { useContext as useContext6 } from "react";
1311
1368
  var colors = {
1312
1369
  "#E02020": [224, 32, 32],
1313
1370
  "#F7B500": [247, 181, 0],
@@ -1323,18 +1380,18 @@ function ColorBox() {
1323
1380
  const { theme, memberState, setStrokeColor, writable } = useContext6(ToolbarContext);
1324
1381
  const strokeColor = memberState == null ? void 0 : memberState.strokeColor;
1325
1382
  const disabled = !writable;
1326
- return /* @__PURE__ */ React35.createElement("div", {
1327
- className: clsx5("fastboard-toolbar-color-box", theme)
1328
- }, colorKeys.map((key) => /* @__PURE__ */ React35.createElement("div", {
1383
+ return /* @__PURE__ */ React36.createElement("div", {
1384
+ className: clsx6("fastboard-toolbar-color-box", theme)
1385
+ }, colorKeys.map((key) => /* @__PURE__ */ React36.createElement("div", {
1329
1386
  key,
1330
- className: clsx5("fastboard-toolbar-color-item", theme),
1387
+ className: clsx6("fastboard-toolbar-color-item", theme),
1331
1388
  onClick: () => setStrokeColor(colors[key])
1332
- }, /* @__PURE__ */ React35.createElement("div", {
1333
- className: clsx5("fastboard-toolbar-color-border", theme, {
1389
+ }, /* @__PURE__ */ React36.createElement("div", {
1390
+ className: clsx6("fastboard-toolbar-color-border", theme, {
1334
1391
  active: strokeColor && isEqualArray(strokeColor, colors[key])
1335
1392
  })
1336
- }, /* @__PURE__ */ React35.createElement("button", {
1337
- className: clsx5("fastboard-toolbar-color-btn"),
1393
+ }, /* @__PURE__ */ React36.createElement("button", {
1394
+ className: clsx6("fastboard-toolbar-color-btn"),
1338
1395
  style: { background: key },
1339
1396
  disabled,
1340
1397
  onClick: (ev) => {
@@ -1345,26 +1402,26 @@ function ColorBox() {
1345
1402
  }
1346
1403
 
1347
1404
  // src/components/Toolbar/components/CutLine.tsx
1348
- import clsx6 from "clsx";
1349
- import React36, { useContext as useContext7 } from "react";
1405
+ import clsx7 from "clsx";
1406
+ import React37, { useContext as useContext7 } from "react";
1350
1407
  function CutLine() {
1351
1408
  const { theme } = useContext7(ToolbarContext);
1352
- return /* @__PURE__ */ React36.createElement("span", {
1353
- className: clsx6(`${name4}-cut-line`, theme)
1409
+ return /* @__PURE__ */ React37.createElement("span", {
1410
+ className: clsx7(`${name4}-cut-line`, theme)
1354
1411
  });
1355
1412
  }
1356
1413
 
1357
1414
  // src/components/Toolbar/components/Slider.tsx
1358
- import clsx7 from "clsx";
1415
+ import clsx8 from "clsx";
1359
1416
  import RcSlider from "rc-slider";
1360
- import React37, { useContext as useContext8 } from "react";
1417
+ import React38, { useContext as useContext8 } from "react";
1361
1418
  function Slider() {
1362
1419
  const { theme, writable, memberState, setStrokeWidth } = useContext8(ToolbarContext);
1363
1420
  const { activeColor } = themes[theme];
1364
1421
  const strokeWidth = (memberState == null ? void 0 : memberState.strokeWidth) || 0;
1365
- return /* @__PURE__ */ React37.createElement(RcSlider, {
1422
+ return /* @__PURE__ */ React38.createElement(RcSlider, {
1366
1423
  disabled: !writable,
1367
- className: clsx7("fastboard-toolbar-slider", theme),
1424
+ className: clsx8("fastboard-toolbar-slider", theme),
1368
1425
  trackStyle: { background: activeColor },
1369
1426
  handleStyle: { border: `1px solid ${activeColor}` },
1370
1427
  value: strokeWidth,
@@ -1386,9 +1443,9 @@ function PencilButton() {
1386
1443
  const active = appliance === ApplianceNames3.pencil;
1387
1444
  const disabled = !writable;
1388
1445
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToPencil;
1389
- return /* @__PURE__ */ React38.createElement("span", {
1446
+ return /* @__PURE__ */ React39.createElement("span", {
1390
1447
  className: "fastboard-toolbar-btn-interactive"
1391
- }, /* @__PURE__ */ React38.createElement(Tippy6, {
1448
+ }, /* @__PURE__ */ React39.createElement(Tippy6, {
1392
1449
  className: "fastboard-tip",
1393
1450
  content: renderPencilButtonContent(),
1394
1451
  theme,
@@ -1397,43 +1454,50 @@ function PencilButton() {
1397
1454
  offset: RightOffset,
1398
1455
  arrow: false,
1399
1456
  interactive: true
1400
- }, /* @__PURE__ */ React38.createElement(Button, {
1457
+ }, /* @__PURE__ */ React39.createElement(Button, {
1401
1458
  content: renderToolTip(t("pencil"), shortcut),
1402
1459
  active,
1403
1460
  onClick: changeAppliance
1404
- }, /* @__PURE__ */ React38.createElement(Icon, {
1405
- fallback: /* @__PURE__ */ React38.createElement(Icons.Pencil, {
1461
+ }, /* @__PURE__ */ React39.createElement(Icon, {
1462
+ fallback: /* @__PURE__ */ React39.createElement(Icons.Pencil, {
1406
1463
  theme,
1407
1464
  active
1408
1465
  }),
1409
1466
  src: disabled ? icons == null ? void 0 : icons.pencilIconDisable : icons == null ? void 0 : icons.pencilIcon,
1410
1467
  alt: "[pencil]"
1411
- }), /* @__PURE__ */ React38.createElement("span", {
1468
+ }), /* @__PURE__ */ React39.createElement("span", {
1412
1469
  className: "fastboard-toolbar-triangle"
1413
1470
  }))));
1414
1471
  }
1415
1472
  function renderPencilButtonContent() {
1416
- return /* @__PURE__ */ React38.createElement("div", {
1473
+ return /* @__PURE__ */ React39.createElement("div", {
1417
1474
  className: "fastboard-toolbar-panel pencil"
1418
- }, /* @__PURE__ */ React38.createElement(Slider, null), /* @__PURE__ */ React38.createElement(CutLine, null), /* @__PURE__ */ React38.createElement(ColorBox, null));
1475
+ }, /* @__PURE__ */ React39.createElement(Slider, null), /* @__PURE__ */ React39.createElement(CutLine, null), /* @__PURE__ */ React39.createElement(ColorBox, null));
1419
1476
  }
1420
1477
 
1421
1478
  // src/components/Toolbar/components/ShapesButton.tsx
1422
1479
  import Tippy7 from "@tippyjs/react";
1423
- import React39, { useContext as useContext10 } from "react";
1480
+ import React40, { useCallback as useCallback8, useContext as useContext10 } from "react";
1424
1481
  import { ApplianceNames as ApplianceNames4 } from "white-web-sdk";
1425
1482
  var ShapeTypes = /* @__PURE__ */ new Set([...ApplianceShapes, ...Shapes]);
1426
1483
  function ShapesButton() {
1427
1484
  const { t } = useTranslation();
1428
- const { theme, memberState, lastShape } = useContext10(ToolbarContext);
1485
+ const { writable, theme, memberState, lastShape, setAppliance } = useContext10(ToolbarContext);
1429
1486
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1430
1487
  const shape = memberState == null ? void 0 : memberState.shapeType;
1431
1488
  const key = appliance === ApplianceNames4.shape ? shape : appliance;
1432
1489
  const active = ShapeTypes.has(key);
1433
1490
  const CurrentIcon = ShapesMap[lastShape];
1434
- return /* @__PURE__ */ React39.createElement("span", {
1491
+ const onClick = useCallback8(() => {
1492
+ if (ApplianceShapes.includes(lastShape)) {
1493
+ setAppliance(lastShape);
1494
+ } else if (Shapes.includes(lastShape)) {
1495
+ setAppliance(ApplianceNames4.shape, lastShape);
1496
+ }
1497
+ }, [lastShape, setAppliance]);
1498
+ return /* @__PURE__ */ React40.createElement("span", {
1435
1499
  className: "fastboard-toolbar-btn-interactive"
1436
- }, /* @__PURE__ */ React39.createElement(Tippy7, {
1500
+ }, /* @__PURE__ */ React40.createElement(Tippy7, {
1437
1501
  className: "fastboard-tip",
1438
1502
  content: renderShapesButtonContent(),
1439
1503
  theme,
@@ -1442,31 +1506,33 @@ function ShapesButton() {
1442
1506
  offset: RightOffset,
1443
1507
  arrow: false,
1444
1508
  interactive: true
1445
- }, /* @__PURE__ */ React39.createElement(Button, {
1509
+ }, /* @__PURE__ */ React40.createElement(Button, {
1446
1510
  content: t("shape"),
1447
- active
1448
- }, /* @__PURE__ */ React39.createElement(CurrentIcon, {
1511
+ active,
1512
+ disabled: !writable,
1513
+ onClick
1514
+ }, /* @__PURE__ */ React40.createElement(CurrentIcon, {
1449
1515
  theme,
1450
1516
  active
1451
- }), /* @__PURE__ */ React39.createElement("span", {
1517
+ }), /* @__PURE__ */ React40.createElement("span", {
1452
1518
  className: "fastboard-toolbar-triangle"
1453
1519
  }))));
1454
1520
  }
1455
1521
  function renderShapesButtonContent() {
1456
- return /* @__PURE__ */ React39.createElement("div", {
1522
+ return /* @__PURE__ */ React40.createElement("div", {
1457
1523
  className: "fastboard-toolbar-panel shapes"
1458
- }, /* @__PURE__ */ React39.createElement(ShapesBox, null), /* @__PURE__ */ React39.createElement(CutLine, null), /* @__PURE__ */ React39.createElement(Slider, null), /* @__PURE__ */ React39.createElement(CutLine, null), /* @__PURE__ */ React39.createElement(ColorBox, null));
1524
+ }, /* @__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));
1459
1525
  }
1460
1526
  function ShapesBox() {
1461
1527
  const { t } = useTranslation();
1462
- return /* @__PURE__ */ React39.createElement("div", {
1528
+ return /* @__PURE__ */ React40.createElement("div", {
1463
1529
  className: "fastboard-toolbar-shapes"
1464
- }, ApplianceShapes.map((Appliance) => /* @__PURE__ */ React39.createElement(ApplianceShapeButton, {
1530
+ }, ApplianceShapes.map((Appliance) => /* @__PURE__ */ React40.createElement(ApplianceShapeButton, {
1465
1531
  key: Appliance,
1466
1532
  content: t(Appliance),
1467
1533
  Appliance,
1468
1534
  Icon: ShapesMap[Appliance]
1469
- })), Shapes.map((shape) => /* @__PURE__ */ React39.createElement(ShapeShapeButton, {
1535
+ })), Shapes.map((shape) => /* @__PURE__ */ React40.createElement(ShapeShapeButton, {
1470
1536
  key: shape,
1471
1537
  content: t(shape),
1472
1538
  shape,
@@ -1477,12 +1543,12 @@ function ApplianceShapeButton({ content, Appliance, Icon: Icon2 }) {
1477
1543
  const { theme, writable, setAppliance, memberState } = useContext10(ToolbarContext);
1478
1544
  const current = memberState == null ? void 0 : memberState.currentApplianceName;
1479
1545
  const disabled = !writable;
1480
- return /* @__PURE__ */ React39.createElement(Button, {
1546
+ return /* @__PURE__ */ React40.createElement(Button, {
1481
1547
  content,
1482
1548
  disabled,
1483
1549
  placement: "top",
1484
1550
  onClick: () => setAppliance(Appliance)
1485
- }, /* @__PURE__ */ React39.createElement(Icon2, {
1551
+ }, /* @__PURE__ */ React40.createElement(Icon2, {
1486
1552
  theme,
1487
1553
  active: current === Appliance
1488
1554
  }));
@@ -1492,12 +1558,12 @@ function ShapeShapeButton({ content, shape, Icon: Icon2 }) {
1492
1558
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1493
1559
  const current = appliance === ApplianceNames4.shape && (memberState == null ? void 0 : memberState.shapeType);
1494
1560
  const disabled = !writable;
1495
- return /* @__PURE__ */ React39.createElement(Button, {
1561
+ return /* @__PURE__ */ React40.createElement(Button, {
1496
1562
  content,
1497
1563
  disabled,
1498
1564
  placement: "top",
1499
1565
  onClick: () => setAppliance(ApplianceNames4.shape, shape)
1500
- }, /* @__PURE__ */ React39.createElement(Icon2, {
1566
+ }, /* @__PURE__ */ React40.createElement(Icon2, {
1501
1567
  theme,
1502
1568
  active: current === shape
1503
1569
  }));
@@ -1505,22 +1571,22 @@ function ShapeShapeButton({ content, shape, Icon: Icon2 }) {
1505
1571
 
1506
1572
  // src/components/Toolbar/components/TextButton.tsx
1507
1573
  import Tippy8 from "@tippyjs/react";
1508
- import React40, { useCallback as useCallback8, useContext as useContext11 } from "react";
1574
+ import React41, { useCallback as useCallback9, useContext as useContext11 } from "react";
1509
1575
  import { ApplianceNames as ApplianceNames5 } from "white-web-sdk";
1510
1576
  function TextButton() {
1511
1577
  const app = useFastboardApp();
1512
1578
  const { t } = useTranslation();
1513
1579
  const { theme, icons, writable, setAppliance, memberState } = useContext11(ToolbarContext);
1514
- const changeAppliance = useCallback8(() => {
1580
+ const changeAppliance = useCallback9(() => {
1515
1581
  setAppliance(ApplianceNames5.text);
1516
1582
  }, [setAppliance]);
1517
1583
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1518
1584
  const active = appliance === ApplianceNames5.text;
1519
1585
  const disabled = !writable;
1520
1586
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToText;
1521
- return /* @__PURE__ */ React40.createElement("span", {
1587
+ return /* @__PURE__ */ React41.createElement("span", {
1522
1588
  className: "fastboard-toolbar-btn-interactive"
1523
- }, /* @__PURE__ */ React40.createElement(Tippy8, {
1589
+ }, /* @__PURE__ */ React41.createElement(Tippy8, {
1524
1590
  className: "fastboard-tip",
1525
1591
  content: renderTextButtonContent(),
1526
1592
  theme,
@@ -1529,53 +1595,53 @@ function TextButton() {
1529
1595
  offset: RightOffset,
1530
1596
  arrow: false,
1531
1597
  interactive: true
1532
- }, /* @__PURE__ */ React40.createElement(Button, {
1598
+ }, /* @__PURE__ */ React41.createElement(Button, {
1533
1599
  content: renderToolTip(t("text"), shortcut),
1534
1600
  active,
1535
1601
  onClick: changeAppliance
1536
- }, /* @__PURE__ */ React40.createElement(Icon, {
1537
- fallback: /* @__PURE__ */ React40.createElement(Icons.Text, {
1602
+ }, /* @__PURE__ */ React41.createElement(Icon, {
1603
+ fallback: /* @__PURE__ */ React41.createElement(Icons.Text, {
1538
1604
  theme,
1539
1605
  active
1540
1606
  }),
1541
1607
  src: disabled ? icons == null ? void 0 : icons.textIconDisable : icons == null ? void 0 : icons.textIcon,
1542
1608
  alt: "[text]"
1543
- }), /* @__PURE__ */ React40.createElement("span", {
1609
+ }), /* @__PURE__ */ React41.createElement("span", {
1544
1610
  className: "fastboard-toolbar-triangle"
1545
1611
  }))));
1546
1612
  }
1547
1613
  function renderTextButtonContent() {
1548
- return /* @__PURE__ */ React40.createElement("div", {
1614
+ return /* @__PURE__ */ React41.createElement("div", {
1549
1615
  className: "fastboard-toolbar-panel text"
1550
- }, /* @__PURE__ */ React40.createElement(ColorBox, null));
1616
+ }, /* @__PURE__ */ React41.createElement(ColorBox, null));
1551
1617
  }
1552
1618
 
1553
1619
  // src/components/Toolbar/components/UpDownButtons.tsx
1554
- import React41, { useCallback as useCallback9, useContext as useContext12 } from "react";
1620
+ import React42, { useCallback as useCallback10, useContext as useContext12 } from "react";
1555
1621
  function UpButton({ disabled, scrollTo }) {
1556
1622
  const { theme, icons } = useContext12(ToolbarContext);
1557
- const scrollUp = useCallback9(() => scrollTo(-ItemHeight), [scrollTo]);
1558
- return /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement(Button, {
1623
+ const scrollUp = useCallback10(() => scrollTo(-ItemHeight), [scrollTo]);
1624
+ return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Button, {
1559
1625
  content: "Up",
1560
1626
  disabled,
1561
1627
  onClick: scrollUp
1562
- }, /* @__PURE__ */ React41.createElement(Icon, {
1563
- fallback: /* @__PURE__ */ React41.createElement(Icons.Up, {
1628
+ }, /* @__PURE__ */ React42.createElement(Icon, {
1629
+ fallback: /* @__PURE__ */ React42.createElement(Icons.Up, {
1564
1630
  theme
1565
1631
  }),
1566
1632
  src: disabled ? icons == null ? void 0 : icons.upIconDisable : icons == null ? void 0 : icons.upIcon,
1567
1633
  alt: "[up]"
1568
- })), /* @__PURE__ */ React41.createElement(CutLine, null));
1634
+ })), /* @__PURE__ */ React42.createElement(CutLine, null));
1569
1635
  }
1570
1636
  function DownButton({ disabled, scrollTo }) {
1571
1637
  const { theme, icons } = useContext12(ToolbarContext);
1572
- const scrollDown = useCallback9(() => scrollTo(ItemHeight), [scrollTo]);
1573
- return /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement(CutLine, null), /* @__PURE__ */ React41.createElement(Button, {
1638
+ const scrollDown = useCallback10(() => scrollTo(ItemHeight), [scrollTo]);
1639
+ return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(CutLine, null), /* @__PURE__ */ React42.createElement(Button, {
1574
1640
  content: "Down",
1575
1641
  disabled,
1576
1642
  onClick: scrollDown
1577
- }, /* @__PURE__ */ React41.createElement(Icon, {
1578
- fallback: /* @__PURE__ */ React41.createElement(Icons.Down, {
1643
+ }, /* @__PURE__ */ React42.createElement(Icon, {
1644
+ fallback: /* @__PURE__ */ React42.createElement(Icons.Down, {
1579
1645
  theme
1580
1646
  }),
1581
1647
  src: disabled ? icons == null ? void 0 : icons.downIconDisable : icons == null ? void 0 : icons.downIcon,
@@ -1598,7 +1664,7 @@ function Content({ onCollapse }) {
1598
1664
  const scrollBuffer = Math.max(parentHeight - sectionHeight - 1, 0);
1599
1665
  const disableScrollUp = scrollTop === 0;
1600
1666
  const disableScrollDown = scrollTop === scrollBuffer;
1601
- const scrollTo = useCallback10((height) => {
1667
+ const scrollTo = useCallback11((height) => {
1602
1668
  setScrollTop(clamp(scrollTop + height, 0, scrollBuffer));
1603
1669
  }, [scrollBuffer, scrollTop]);
1604
1670
  useEffect3(() => {
@@ -1619,26 +1685,26 @@ function Content({ onCollapse }) {
1619
1685
  return () => resizeObserver.disconnect();
1620
1686
  }
1621
1687
  }, []);
1622
- return /* @__PURE__ */ React42.createElement(React42.Fragment, null, needScroll && /* @__PURE__ */ React42.createElement(UpButton, {
1688
+ return /* @__PURE__ */ React43.createElement(React43.Fragment, null, needScroll && /* @__PURE__ */ React43.createElement(UpButton, {
1623
1689
  scrollTo,
1624
1690
  disabled: disableScrollUp
1625
- }), /* @__PURE__ */ React42.createElement("div", {
1691
+ }), /* @__PURE__ */ React43.createElement("div", {
1626
1692
  ref,
1627
- className: clsx8(`${name4}-section`),
1693
+ className: clsx9(`${name4}-section`),
1628
1694
  style: {
1629
1695
  height: `${sectionHeight}px`,
1630
1696
  overflow: needScroll ? "hidden" : "visible"
1631
1697
  }
1632
- }, /* @__PURE__ */ React42.createElement(ClickerButton, null), /* @__PURE__ */ React42.createElement(SelectorButton, null), /* @__PURE__ */ React42.createElement(PencilButton, null), /* @__PURE__ */ React42.createElement(TextButton, null), /* @__PURE__ */ React42.createElement(ShapesButton, null), /* @__PURE__ */ React42.createElement(EraserButton, null), /* @__PURE__ */ React42.createElement(CleanButton, null), /* @__PURE__ */ React42.createElement(AppsButton, null)), needScroll && /* @__PURE__ */ React42.createElement(DownButton, {
1698
+ }, /* @__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, {
1633
1699
  scrollTo,
1634
1700
  disabled: disableScrollDown
1635
- }), /* @__PURE__ */ React42.createElement("div", {
1636
- className: clsx8("fastboard-toolbar-mask", theme),
1701
+ }), /* @__PURE__ */ React43.createElement("div", {
1702
+ className: clsx9("fastboard-toolbar-mask", theme),
1637
1703
  onClick: onCollapse
1638
- }, /* @__PURE__ */ React42.createElement(Icon, {
1639
- fallback: /* @__PURE__ */ React42.createElement("img", {
1704
+ }, /* @__PURE__ */ React43.createElement(Icon, {
1705
+ fallback: /* @__PURE__ */ React43.createElement("img", {
1640
1706
  draggable: false,
1641
- className: clsx8(`${name4}-mask-btn`, theme),
1707
+ className: clsx9(`${name4}-mask-btn`, theme),
1642
1708
  src: collapsed_default
1643
1709
  }),
1644
1710
  src: disabled ? icons == null ? void 0 : icons.expandIconDisable : icons == null ? void 0 : icons.expandIcon
@@ -1656,45 +1722,45 @@ function Toolbar({ theme, icons }) {
1656
1722
  const [expanded, setExpanded] = useState5(true);
1657
1723
  const [pointerEvents, setPointerEvents] = useState5("auto");
1658
1724
  const disabled = !hook.writable;
1659
- return /* @__PURE__ */ React43.createElement(ToolbarContext.Provider, {
1725
+ return /* @__PURE__ */ React44.createElement(ToolbarContext.Provider, {
1660
1726
  value: __spreadValues({ theme, icons }, hook)
1661
- }, /* @__PURE__ */ React43.createElement(AnimatePresence, null, expanded ? /* @__PURE__ */ React43.createElement(motion.div, {
1727
+ }, /* @__PURE__ */ React44.createElement(AnimatePresence, null, expanded ? /* @__PURE__ */ React44.createElement(motion.div, {
1662
1728
  key: "toolbar",
1663
- className: clsx9(name4, theme),
1729
+ className: clsx10(name4, theme),
1664
1730
  initial: { x: -100 },
1665
1731
  animate: { x: 0, transition: { duration: 0.5 } },
1666
1732
  exit: { x: -100, transition: { duration: 0.5 } },
1667
1733
  onAnimationStart: () => setPointerEvents("none"),
1668
1734
  onAnimationComplete: () => setPointerEvents("auto"),
1669
1735
  style: { pointerEvents }
1670
- }, /* @__PURE__ */ React43.createElement(Content, {
1736
+ }, /* @__PURE__ */ React44.createElement(Content, {
1671
1737
  onCollapse: () => setExpanded(false)
1672
- })) : /* @__PURE__ */ React43.createElement(motion.div, {
1673
- className: clsx9(`${name4}-expand-btn`, theme),
1738
+ })) : /* @__PURE__ */ React44.createElement(motion.div, {
1739
+ className: clsx10(`${name4}-expand-btn`, theme),
1674
1740
  key: "expand",
1675
1741
  onClick: () => setExpanded(true),
1676
1742
  initial: { x: -100 },
1677
1743
  animate: { x: 0, transition: { duration: 0.5 } }
1678
- }, /* @__PURE__ */ React43.createElement(Icon, {
1679
- fallback: /* @__PURE__ */ React43.createElement("img", {
1744
+ }, /* @__PURE__ */ React44.createElement(Icon, {
1745
+ fallback: /* @__PURE__ */ React44.createElement("img", {
1680
1746
  draggable: false,
1681
1747
  src: expanded_default,
1682
- className: clsx9(`${name4}-mask-btn`, theme)
1748
+ className: clsx10(`${name4}-mask-btn`, theme)
1683
1749
  }),
1684
1750
  src: disabled ? icons == null ? void 0 : icons.expandIconDisable : icons == null ? void 0 : icons.expandIcon
1685
1751
  }))));
1686
1752
  }
1687
1753
 
1688
1754
  // src/components/PlayerControl/hooks.ts
1689
- import { useCallback as useCallback11, useEffect as useEffect4, useState as useState6 } from "react";
1755
+ import { useCallback as useCallback12, useEffect as useEffect4, useState as useState6 } from "react";
1690
1756
  import { PlayerPhase } from "white-web-sdk";
1691
1757
  var EMPTY_ARRAY = [];
1692
1758
  function useForceUpdate2() {
1693
1759
  const [, forceUpdate_] = useState6({});
1694
- return useCallback11(() => forceUpdate_({}), EMPTY_ARRAY);
1760
+ return useCallback12(() => forceUpdate_({}), EMPTY_ARRAY);
1695
1761
  }
1696
1762
  function usePlayerControl(player) {
1697
- const togglePlay = useCallback11(() => {
1763
+ const togglePlay = useCallback12(() => {
1698
1764
  if (player) {
1699
1765
  switch (player.phase) {
1700
1766
  case PlayerPhase.WaitingFirstFrame:
@@ -1710,14 +1776,14 @@ function usePlayerControl(player) {
1710
1776
  }
1711
1777
  }
1712
1778
  }, [player]);
1713
- const seekToProgressTime = useCallback11((time) => {
1779
+ const seekToProgressTime = useCallback12((time) => {
1714
1780
  if (player) {
1715
1781
  player.seekToProgressTime(time);
1716
1782
  }
1717
1783
  }, [player]);
1718
1784
  const lastPlayer = useLastValue(player);
1719
1785
  const forceUpdate = useForceUpdate2();
1720
- const setSpeed = useCallback11((speed2) => {
1786
+ const setSpeed = useCallback12((speed2) => {
1721
1787
  if (player) {
1722
1788
  player.playbackSpeed = speed2;
1723
1789
  forceUpdate();
@@ -1755,18 +1821,18 @@ function usePlayerControl(player) {
1755
1821
 
1756
1822
  // src/components/PlayerControl/PlayerControl.tsx
1757
1823
  import Tippy10 from "@tippyjs/react";
1758
- import clsx11 from "clsx";
1824
+ import clsx12 from "clsx";
1759
1825
  import RcSlider2 from "rc-slider";
1760
- import React48, { useEffect as useEffect5, useState as useState7 } from "react";
1826
+ import React49, { useEffect as useEffect5, useState as useState7 } from "react";
1761
1827
  import { PlayerPhase as PlayerPhase2 } from "white-web-sdk";
1762
1828
 
1763
1829
  // src/components/PlayerControl/components/Button.tsx
1764
- import clsx10 from "clsx";
1765
- import React44, { forwardRef as forwardRef2 } from "react";
1830
+ import clsx11 from "clsx";
1831
+ import React45, { forwardRef as forwardRef2 } from "react";
1766
1832
  import Tippy9 from "@tippyjs/react";
1767
1833
  var Button2 = forwardRef2((props, ref) => {
1768
1834
  const { theme, content, disabled, active, onClick, interactive, placement = "top", children } = props;
1769
- return /* @__PURE__ */ React44.createElement(Tippy9, {
1835
+ return /* @__PURE__ */ React45.createElement(Tippy9, {
1770
1836
  className: "fastboard-tip",
1771
1837
  content,
1772
1838
  interactive,
@@ -1776,9 +1842,9 @@ var Button2 = forwardRef2((props, ref) => {
1776
1842
  offset: TopOffset,
1777
1843
  delay: [1e3, 400],
1778
1844
  duration: 300
1779
- }, /* @__PURE__ */ React44.createElement("button", {
1845
+ }, /* @__PURE__ */ React45.createElement("button", {
1780
1846
  ref,
1781
- className: clsx10("fastboard-player-control-btn", theme, { active }),
1847
+ className: clsx11("fastboard-player-control-btn", theme, { active }),
1782
1848
  onClick,
1783
1849
  disabled
1784
1850
  }, children));
@@ -1788,36 +1854,36 @@ var Button2 = forwardRef2((props, ref) => {
1788
1854
  import { memo as memo2 } from "react";
1789
1855
 
1790
1856
  // src/components/PlayerControl/icons/Loading.tsx
1791
- import React45 from "react";
1792
- var Loading = (props) => {
1857
+ import React46 from "react";
1858
+ var Loading2 = (props) => {
1793
1859
  const stroke = getStroke(props);
1794
- return /* @__PURE__ */ React45.createElement("svg", {
1860
+ return /* @__PURE__ */ React46.createElement("svg", {
1795
1861
  viewBox: "0 0 24 24"
1796
- }, /* @__PURE__ */ React45.createElement("path", {
1862
+ }, /* @__PURE__ */ React46.createElement("path", {
1797
1863
  d: "M12 4V2A10 10 0 0 0 2 12h2a8 8 0 0 1 8-8z",
1798
1864
  fill: stroke
1799
1865
  }));
1800
1866
  };
1801
1867
 
1802
1868
  // src/components/PlayerControl/icons/Pause.tsx
1803
- import React46 from "react";
1869
+ import React47 from "react";
1804
1870
  var Pause = (props) => {
1805
1871
  const stroke = getStroke(props);
1806
- return /* @__PURE__ */ React46.createElement("svg", {
1872
+ return /* @__PURE__ */ React47.createElement("svg", {
1807
1873
  viewBox: "0 0 24 24"
1808
- }, /* @__PURE__ */ React46.createElement("path", {
1874
+ }, /* @__PURE__ */ React47.createElement("path", {
1809
1875
  d: "M14 19h4V5h-4M6 19h4V5H6v14z",
1810
1876
  fill: stroke
1811
1877
  }));
1812
1878
  };
1813
1879
 
1814
1880
  // src/components/PlayerControl/icons/Play.tsx
1815
- import React47 from "react";
1881
+ import React48 from "react";
1816
1882
  var Play = (props) => {
1817
1883
  const stroke = getStroke(props);
1818
- return /* @__PURE__ */ React47.createElement("svg", {
1884
+ return /* @__PURE__ */ React48.createElement("svg", {
1819
1885
  viewBox: "0 0 24 24"
1820
- }, /* @__PURE__ */ React47.createElement("path", {
1886
+ }, /* @__PURE__ */ React48.createElement("path", {
1821
1887
  d: "M8 5.14v14l11-7l-11-7z",
1822
1888
  fill: stroke
1823
1889
  }));
@@ -1827,7 +1893,7 @@ var Play = (props) => {
1827
1893
  var Icons2 = {
1828
1894
  Play: memo2(Play),
1829
1895
  Pause: memo2(Pause),
1830
- Loading: memo2(Loading)
1896
+ Loading: memo2(Loading2)
1831
1897
  };
1832
1898
 
1833
1899
  // src/components/PlayerControl/PlayerControl.tsx
@@ -1837,7 +1903,7 @@ function PlayerControl(_a) {
1837
1903
  theme = useTheme(theme);
1838
1904
  const { t } = useTranslation();
1839
1905
  const [currentTime, setCurrentTime] = useState7(0);
1840
- const player = usePlayerControl(player_);
1906
+ const player = usePlayerControl(player_ == null ? void 0 : player_.player);
1841
1907
  useEffect5(() => {
1842
1908
  setCurrentTime(player.currentTime);
1843
1909
  }, [player.currentTime]);
@@ -1849,25 +1915,25 @@ function PlayerControl(_a) {
1849
1915
  const isLoading = player.phase === PlayerPhase2.WaitingFirstFrame || player.phase === PlayerPhase2.Buffering;
1850
1916
  const isPlaying = player.phase === PlayerPhase2.Playing;
1851
1917
  const { activeColor } = themes[theme];
1852
- return /* @__PURE__ */ React48.createElement("div", {
1853
- className: clsx11(name5, theme, { "auto-hide": autoHide })
1854
- }, /* @__PURE__ */ React48.createElement("button", {
1855
- className: clsx11(`${name5}-btn`, isLoading ? "loading" : isPlaying ? "pause" : "play", theme),
1918
+ return /* @__PURE__ */ React49.createElement("div", {
1919
+ className: clsx12(name5, theme, { "auto-hide": autoHide })
1920
+ }, /* @__PURE__ */ React49.createElement("button", {
1921
+ className: clsx12(`${name5}-btn`, isLoading ? "loading" : isPlaying ? "pause" : "play", theme),
1856
1922
  disabled: isLoading,
1857
1923
  onClick: player.togglePlay
1858
- }, /* @__PURE__ */ React48.createElement(Icon, {
1859
- fallback: isLoading ? /* @__PURE__ */ React48.createElement(Icons2.Loading, {
1924
+ }, /* @__PURE__ */ React49.createElement(Icon, {
1925
+ fallback: isLoading ? /* @__PURE__ */ React49.createElement(Icons2.Loading, {
1860
1926
  theme
1861
- }) : isPlaying ? /* @__PURE__ */ React48.createElement(Icons2.Pause, {
1927
+ }) : isPlaying ? /* @__PURE__ */ React49.createElement(Icons2.Pause, {
1862
1928
  theme
1863
- }) : /* @__PURE__ */ React48.createElement(Icons2.Play, {
1929
+ }) : /* @__PURE__ */ React49.createElement(Icons2.Play, {
1864
1930
  theme
1865
1931
  }),
1866
1932
  src: isLoading ? icons.loadingIcon : isPlaying ? icons.pauseIcon : icons.playIcon,
1867
1933
  alt: isLoading ? "[loading]" : isPlaying ? "[pause]" : "[play]"
1868
- })), /* @__PURE__ */ React48.createElement("span", {
1869
- className: clsx11(`${name5}-slider`, { loading: isLoading }, theme)
1870
- }, /* @__PURE__ */ React48.createElement(RcSlider2, {
1934
+ })), /* @__PURE__ */ React49.createElement("span", {
1935
+ className: clsx12(`${name5}-slider`, { loading: isLoading }, theme)
1936
+ }, /* @__PURE__ */ React49.createElement(RcSlider2, {
1871
1937
  disabled: isLoading,
1872
1938
  trackStyle: { background: activeColor },
1873
1939
  handleStyle: { border: `1px solid ${activeColor}` },
@@ -1876,15 +1942,15 @@ function PlayerControl(_a) {
1876
1942
  min: 0,
1877
1943
  max: player.totalTime,
1878
1944
  step: 100
1879
- })), /* @__PURE__ */ React48.createElement("span", {
1880
- className: clsx11(`${name5}-current`, theme)
1881
- }, renderTime(player.currentTime)), /* @__PURE__ */ React48.createElement("span", {
1882
- className: clsx11(`${name5}-slash`, theme)
1883
- }, "/"), /* @__PURE__ */ React48.createElement("span", {
1884
- className: clsx11(`${name5}-total`, theme)
1885
- }, renderTime(player.totalTime)), /* @__PURE__ */ React48.createElement("span", {
1945
+ })), /* @__PURE__ */ React49.createElement("span", {
1946
+ className: clsx12(`${name5}-current`, theme)
1947
+ }, renderTime(player.currentTime)), /* @__PURE__ */ React49.createElement("span", {
1948
+ className: clsx12(`${name5}-slash`, theme)
1949
+ }, "/"), /* @__PURE__ */ React49.createElement("span", {
1950
+ className: clsx12(`${name5}-total`, theme)
1951
+ }, renderTime(player.totalTime)), /* @__PURE__ */ React49.createElement("span", {
1886
1952
  className: `${name5}-btn-interactive`
1887
- }, /* @__PURE__ */ React48.createElement(Tippy10, {
1953
+ }, /* @__PURE__ */ React49.createElement(Tippy10, {
1888
1954
  className: "fastboard-tip",
1889
1955
  content: renderSpeeds(player),
1890
1956
  theme,
@@ -1893,12 +1959,12 @@ function PlayerControl(_a) {
1893
1959
  offset: TopOffset,
1894
1960
  arrow: false,
1895
1961
  interactive: true
1896
- }, /* @__PURE__ */ React48.createElement(Button2, {
1962
+ }, /* @__PURE__ */ React49.createElement(Button2, {
1897
1963
  content: t("speed"),
1898
1964
  theme,
1899
1965
  disabled: isLoading
1900
- }, /* @__PURE__ */ React48.createElement("span", {
1901
- className: clsx11(`${name5}-speed-text`, theme)
1966
+ }, /* @__PURE__ */ React49.createElement("span", {
1967
+ className: clsx12(`${name5}-speed-text`, theme)
1902
1968
  }, player.speed, "x")))));
1903
1969
  }
1904
1970
  function renderTime(ms) {
@@ -1909,10 +1975,10 @@ function renderTime(ms) {
1909
1975
  }
1910
1976
  var Speeds = [2, 1.5, 1.25, 1, 0.75, 0.5];
1911
1977
  function renderSpeeds({ speed: current, setSpeed }) {
1912
- return /* @__PURE__ */ React48.createElement("div", {
1913
- className: clsx11(`${name5}-panel`, "speed")
1914
- }, Speeds.map((speed) => /* @__PURE__ */ React48.createElement("button", {
1915
- className: clsx11(`${name5}-btn`, "speed", {
1978
+ return /* @__PURE__ */ React49.createElement("div", {
1979
+ className: clsx12(`${name5}-panel`, "speed")
1980
+ }, Speeds.map((speed) => /* @__PURE__ */ React49.createElement("button", {
1981
+ className: clsx12(`${name5}-btn`, "speed", {
1916
1982
  active: speed === current
1917
1983
  }),
1918
1984
  key: speed,
@@ -1921,85 +1987,2956 @@ function renderSpeeds({ speed: current, setSpeed }) {
1921
1987
  }
1922
1988
 
1923
1989
  // src/components/Fastboard.tsx
1924
- import React49, { forwardRef as forwardRef3, useCallback as useCallback12, useEffect as useEffect6 } from "react";
1925
- var Fastboard = /* @__PURE__ */ forwardRef3(function Fastboard2(_a, ref) {
1926
- var _b = _a, { app, theme, layout, language } = _b, restProps = __objRest(_b, ["app", "theme", "layout", "language"]);
1927
- if (!app) {
1928
- return /* @__PURE__ */ React49.createElement("div", __spreadValues({
1929
- className: "fastboard-root",
1930
- ref
1931
- }, restProps));
1990
+ import React50, { forwardRef as forwardRef3, useCallback as useCallback13, useEffect as useEffect6 } from "react";
1991
+
1992
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/enums.js
1993
+ var top = "top";
1994
+ var bottom = "bottom";
1995
+ var right = "right";
1996
+ var left = "left";
1997
+ var auto = "auto";
1998
+ var basePlacements = [top, bottom, right, left];
1999
+ var start = "start";
2000
+ var end = "end";
2001
+ var clippingParents = "clippingParents";
2002
+ var viewport = "viewport";
2003
+ var popper = "popper";
2004
+ var reference = "reference";
2005
+ var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {
2006
+ return acc.concat([placement + "-" + start, placement + "-" + end]);
2007
+ }, []);
2008
+ var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {
2009
+ return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
2010
+ }, []);
2011
+ var beforeRead = "beforeRead";
2012
+ var read = "read";
2013
+ var afterRead = "afterRead";
2014
+ var beforeMain = "beforeMain";
2015
+ var main = "main";
2016
+ var afterMain = "afterMain";
2017
+ var beforeWrite = "beforeWrite";
2018
+ var write = "write";
2019
+ var afterWrite = "afterWrite";
2020
+ var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
2021
+
2022
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js
2023
+ function getNodeName(element) {
2024
+ return element ? (element.nodeName || "").toLowerCase() : null;
2025
+ }
2026
+
2027
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getWindow.js
2028
+ function getWindow(node) {
2029
+ if (node == null) {
2030
+ return window;
1932
2031
  }
1933
- return /* @__PURE__ */ React49.createElement(FastboardAppContext.Provider, {
1934
- value: app
1935
- }, /* @__PURE__ */ React49.createElement(FastboardInternal, __spreadValues(__spreadValues({
1936
- forwardedRef: ref
1937
- }, { theme, layout, language }), restProps)));
1938
- });
1939
- function FastboardInternal(_a) {
1940
- var _b = _a, {
1941
- forwardedRef,
1942
- language,
1943
- layout = {},
1944
- theme = "light",
1945
- children
1946
- } = _b, restProps = __objRest(_b, [
1947
- "forwardedRef",
1948
- "language",
1949
- "layout",
1950
- "theme",
1951
- "children"
1952
- ]);
1953
- const app = useFastboardApp();
1954
- const forceUpdate = useForceUpdate();
1955
- const i18n = useAsyncValue(() => createI18n({ language }));
1956
- useEffect6(() => {
1957
- if (i18n)
1958
- i18n.changeLanguage(language);
1959
- forceUpdate();
1960
- }, [forceUpdate, i18n, language]);
1961
- useEffect6(() => {
1962
- app.manager.setPrefersColorScheme(theme);
1963
- }, [app, theme]);
1964
- const useWhiteboard = useCallback12((container) => {
1965
- if (container && app)
1966
- app.manager.bindContainer(container);
1967
- }, [app]);
1968
- const hideControls = useHideControls();
1969
- const showControls = !hideControls;
1970
- const {
1971
- Toolbar: toolbar = showControls || hideControls === "toolbar-only",
1972
- RedoUndo: redo_undo = showControls,
1973
- ZoomControl: zoom_control = showControls,
1974
- PageControl: page_control = showControls
1975
- } = layout;
1976
- return /* @__PURE__ */ React49.createElement(ThemeContext.Provider, {
1977
- value: theme
1978
- }, /* @__PURE__ */ React49.createElement(I18nContext.Provider, {
1979
- value: i18n
1980
- }, /* @__PURE__ */ React49.createElement("div", __spreadProps(__spreadValues({}, restProps), {
1981
- className: "fastboard-root",
1982
- ref: forwardedRef
1983
- }), /* @__PURE__ */ React49.createElement("div", {
1984
- className: "fastboard-view",
1985
- ref: useWhiteboard
1986
- }), children ? children : /* @__PURE__ */ React49.createElement(React49.Fragment, null, toolbar && /* @__PURE__ */ React49.createElement("div", {
1987
- className: "fastboard-left"
1988
- }, /* @__PURE__ */ React49.createElement(Toolbar, null)), (redo_undo || zoom_control) && /* @__PURE__ */ React49.createElement("div", {
1989
- className: "fastboard-bottom-left"
1990
- }, redo_undo && /* @__PURE__ */ React49.createElement(RedoUndo, null), zoom_control && /* @__PURE__ */ React49.createElement(ZoomControl, null)), page_control && /* @__PURE__ */ React49.createElement("div", {
1991
- className: "fastboard-bottom-right"
1992
- }, /* @__PURE__ */ React49.createElement(PageControl, null))))));
2032
+ if (node.toString() !== "[object Window]") {
2033
+ var ownerDocument = node.ownerDocument;
2034
+ return ownerDocument ? ownerDocument.defaultView || window : window;
2035
+ }
2036
+ return node;
1993
2037
  }
1994
2038
 
1995
- // src/vanilla/index.tsx
1996
- import React50 from "react";
1997
- import ReactDOM from "react-dom";
1998
- function mount(app, dom, props) {
1999
- ReactDOM.render(/* @__PURE__ */ React50.createElement(Fastboard, __spreadValues({
2000
- app
2001
- }, props)), dom);
2002
- return () => ReactDOM.unmountComponentAtNode(dom);
2039
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js
2040
+ function isElement(node) {
2041
+ var OwnElement = getWindow(node).Element;
2042
+ return node instanceof OwnElement || node instanceof Element;
2043
+ }
2044
+ function isHTMLElement(node) {
2045
+ var OwnElement = getWindow(node).HTMLElement;
2046
+ return node instanceof OwnElement || node instanceof HTMLElement;
2047
+ }
2048
+ function isShadowRoot(node) {
2049
+ if (typeof ShadowRoot === "undefined") {
2050
+ return false;
2051
+ }
2052
+ var OwnElement = getWindow(node).ShadowRoot;
2053
+ return node instanceof OwnElement || node instanceof ShadowRoot;
2054
+ }
2055
+
2056
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/applyStyles.js
2057
+ function applyStyles2(_ref) {
2058
+ var state = _ref.state;
2059
+ Object.keys(state.elements).forEach(function(name6) {
2060
+ var style = state.styles[name6] || {};
2061
+ var attributes = state.attributes[name6] || {};
2062
+ var element = state.elements[name6];
2063
+ if (!isHTMLElement(element) || !getNodeName(element)) {
2064
+ return;
2065
+ }
2066
+ Object.assign(element.style, style);
2067
+ Object.keys(attributes).forEach(function(name7) {
2068
+ var value = attributes[name7];
2069
+ if (value === false) {
2070
+ element.removeAttribute(name7);
2071
+ } else {
2072
+ element.setAttribute(name7, value === true ? "" : value);
2073
+ }
2074
+ });
2075
+ });
2076
+ }
2077
+ function effect(_ref2) {
2078
+ var state = _ref2.state;
2079
+ var initialStyles = {
2080
+ popper: {
2081
+ position: state.options.strategy,
2082
+ left: "0",
2083
+ top: "0",
2084
+ margin: "0"
2085
+ },
2086
+ arrow: {
2087
+ position: "absolute"
2088
+ },
2089
+ reference: {}
2090
+ };
2091
+ Object.assign(state.elements.popper.style, initialStyles.popper);
2092
+ state.styles = initialStyles;
2093
+ if (state.elements.arrow) {
2094
+ Object.assign(state.elements.arrow.style, initialStyles.arrow);
2095
+ }
2096
+ return function() {
2097
+ Object.keys(state.elements).forEach(function(name6) {
2098
+ var element = state.elements[name6];
2099
+ var attributes = state.attributes[name6] || {};
2100
+ var styleProperties = Object.keys(state.styles.hasOwnProperty(name6) ? state.styles[name6] : initialStyles[name6]);
2101
+ var style = styleProperties.reduce(function(style2, property) {
2102
+ style2[property] = "";
2103
+ return style2;
2104
+ }, {});
2105
+ if (!isHTMLElement(element) || !getNodeName(element)) {
2106
+ return;
2107
+ }
2108
+ Object.assign(element.style, style);
2109
+ Object.keys(attributes).forEach(function(attribute) {
2110
+ element.removeAttribute(attribute);
2111
+ });
2112
+ });
2113
+ };
2114
+ }
2115
+ var applyStyles_default = {
2116
+ name: "applyStyles",
2117
+ enabled: true,
2118
+ phase: "write",
2119
+ fn: applyStyles2,
2120
+ effect,
2121
+ requires: ["computeStyles"]
2122
+ };
2123
+
2124
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getBasePlacement.js
2125
+ function getBasePlacement(placement) {
2126
+ return placement.split("-")[0];
2127
+ }
2128
+
2129
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/math.js
2130
+ var max = Math.max;
2131
+ var min = Math.min;
2132
+ var round = Math.round;
2133
+
2134
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
2135
+ function getBoundingClientRect(element, includeScale) {
2136
+ if (includeScale === void 0) {
2137
+ includeScale = false;
2138
+ }
2139
+ var rect = element.getBoundingClientRect();
2140
+ var scaleX = 1;
2141
+ var scaleY = 1;
2142
+ if (isHTMLElement(element) && includeScale) {
2143
+ var offsetHeight = element.offsetHeight;
2144
+ var offsetWidth = element.offsetWidth;
2145
+ if (offsetWidth > 0) {
2146
+ scaleX = round(rect.width) / offsetWidth || 1;
2147
+ }
2148
+ if (offsetHeight > 0) {
2149
+ scaleY = round(rect.height) / offsetHeight || 1;
2150
+ }
2151
+ }
2152
+ return {
2153
+ width: rect.width / scaleX,
2154
+ height: rect.height / scaleY,
2155
+ top: rect.top / scaleY,
2156
+ right: rect.right / scaleX,
2157
+ bottom: rect.bottom / scaleY,
2158
+ left: rect.left / scaleX,
2159
+ x: rect.left / scaleX,
2160
+ y: rect.top / scaleY
2161
+ };
2162
+ }
2163
+
2164
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js
2165
+ function getLayoutRect(element) {
2166
+ var clientRect = getBoundingClientRect(element);
2167
+ var width = element.offsetWidth;
2168
+ var height = element.offsetHeight;
2169
+ if (Math.abs(clientRect.width - width) <= 1) {
2170
+ width = clientRect.width;
2171
+ }
2172
+ if (Math.abs(clientRect.height - height) <= 1) {
2173
+ height = clientRect.height;
2174
+ }
2175
+ return {
2176
+ x: element.offsetLeft,
2177
+ y: element.offsetTop,
2178
+ width,
2179
+ height
2180
+ };
2181
+ }
2182
+
2183
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/contains.js
2184
+ function contains(parent, child) {
2185
+ var rootNode = child.getRootNode && child.getRootNode();
2186
+ if (parent.contains(child)) {
2187
+ return true;
2188
+ } else if (rootNode && isShadowRoot(rootNode)) {
2189
+ var next = child;
2190
+ do {
2191
+ if (next && parent.isSameNode(next)) {
2192
+ return true;
2193
+ }
2194
+ next = next.parentNode || next.host;
2195
+ } while (next);
2196
+ }
2197
+ return false;
2198
+ }
2199
+
2200
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js
2201
+ function getComputedStyle2(element) {
2202
+ return getWindow(element).getComputedStyle(element);
2203
+ }
2204
+
2205
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js
2206
+ function isTableElement(element) {
2207
+ return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0;
2208
+ }
2209
+
2210
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js
2211
+ function getDocumentElement(element) {
2212
+ return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement;
2213
+ }
2214
+
2215
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js
2216
+ function getParentNode(element) {
2217
+ if (getNodeName(element) === "html") {
2218
+ return element;
2219
+ }
2220
+ return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element);
2221
+ }
2222
+
2223
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js
2224
+ function getTrueOffsetParent(element) {
2225
+ if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
2226
+ return null;
2227
+ }
2228
+ return element.offsetParent;
2229
+ }
2230
+ function getContainingBlock(element) {
2231
+ var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1;
2232
+ var isIE = navigator.userAgent.indexOf("Trident") !== -1;
2233
+ if (isIE && isHTMLElement(element)) {
2234
+ var elementCss = getComputedStyle2(element);
2235
+ if (elementCss.position === "fixed") {
2236
+ return null;
2237
+ }
2238
+ }
2239
+ var currentNode = getParentNode(element);
2240
+ while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) {
2241
+ var css = getComputedStyle2(currentNode);
2242
+ if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") {
2243
+ return currentNode;
2244
+ } else {
2245
+ currentNode = currentNode.parentNode;
2246
+ }
2247
+ }
2248
+ return null;
2249
+ }
2250
+ function getOffsetParent(element) {
2251
+ var window2 = getWindow(element);
2252
+ var offsetParent = getTrueOffsetParent(element);
2253
+ while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") {
2254
+ offsetParent = getTrueOffsetParent(offsetParent);
2255
+ }
2256
+ if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) {
2257
+ return window2;
2258
+ }
2259
+ return offsetParent || getContainingBlock(element) || window2;
2260
+ }
2261
+
2262
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js
2263
+ function getMainAxisFromPlacement(placement) {
2264
+ return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y";
2265
+ }
2266
+
2267
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/within.js
2268
+ function within(min2, value, max2) {
2269
+ return max(min2, min(value, max2));
2270
+ }
2271
+ function withinMaxClamp(min2, value, max2) {
2272
+ var v = within(min2, value, max2);
2273
+ return v > max2 ? max2 : v;
2274
+ }
2275
+
2276
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js
2277
+ function getFreshSideObject() {
2278
+ return {
2279
+ top: 0,
2280
+ right: 0,
2281
+ bottom: 0,
2282
+ left: 0
2283
+ };
2284
+ }
2285
+
2286
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js
2287
+ function mergePaddingObject(paddingObject) {
2288
+ return Object.assign({}, getFreshSideObject(), paddingObject);
2289
+ }
2290
+
2291
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/expandToHashMap.js
2292
+ function expandToHashMap(value, keys) {
2293
+ return keys.reduce(function(hashMap, key) {
2294
+ hashMap[key] = value;
2295
+ return hashMap;
2296
+ }, {});
2297
+ }
2298
+
2299
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/arrow.js
2300
+ var toPaddingObject = function toPaddingObject2(padding, state) {
2301
+ padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, {
2302
+ placement: state.placement
2303
+ })) : padding;
2304
+ return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
2305
+ };
2306
+ function arrow(_ref) {
2307
+ var _state$modifiersData$;
2308
+ var state = _ref.state, name6 = _ref.name, options = _ref.options;
2309
+ var arrowElement = state.elements.arrow;
2310
+ var popperOffsets2 = state.modifiersData.popperOffsets;
2311
+ var basePlacement = getBasePlacement(state.placement);
2312
+ var axis = getMainAxisFromPlacement(basePlacement);
2313
+ var isVertical = [left, right].indexOf(basePlacement) >= 0;
2314
+ var len = isVertical ? "height" : "width";
2315
+ if (!arrowElement || !popperOffsets2) {
2316
+ return;
2317
+ }
2318
+ var paddingObject = toPaddingObject(options.padding, state);
2319
+ var arrowRect = getLayoutRect(arrowElement);
2320
+ var minProp = axis === "y" ? top : left;
2321
+ var maxProp = axis === "y" ? bottom : right;
2322
+ var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len];
2323
+ var startDiff = popperOffsets2[axis] - state.rects.reference[axis];
2324
+ var arrowOffsetParent = getOffsetParent(arrowElement);
2325
+ var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
2326
+ var centerToReference = endDiff / 2 - startDiff / 2;
2327
+ var min2 = paddingObject[minProp];
2328
+ var max2 = clientSize - arrowRect[len] - paddingObject[maxProp];
2329
+ var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
2330
+ var offset2 = within(min2, center, max2);
2331
+ var axisProp = axis;
2332
+ state.modifiersData[name6] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$);
2333
+ }
2334
+ function effect2(_ref2) {
2335
+ var state = _ref2.state, options = _ref2.options;
2336
+ var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element;
2337
+ if (arrowElement == null) {
2338
+ return;
2339
+ }
2340
+ if (typeof arrowElement === "string") {
2341
+ arrowElement = state.elements.popper.querySelector(arrowElement);
2342
+ if (!arrowElement) {
2343
+ return;
2344
+ }
2345
+ }
2346
+ if (true) {
2347
+ if (!isHTMLElement(arrowElement)) {
2348
+ console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" "));
2349
+ }
2350
+ }
2351
+ if (!contains(state.elements.popper, arrowElement)) {
2352
+ if (true) {
2353
+ console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" "));
2354
+ }
2355
+ return;
2356
+ }
2357
+ state.elements.arrow = arrowElement;
2358
+ }
2359
+ var arrow_default = {
2360
+ name: "arrow",
2361
+ enabled: true,
2362
+ phase: "main",
2363
+ fn: arrow,
2364
+ effect: effect2,
2365
+ requires: ["popperOffsets"],
2366
+ requiresIfExists: ["preventOverflow"]
2367
+ };
2368
+
2369
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getVariation.js
2370
+ function getVariation(placement) {
2371
+ return placement.split("-")[1];
2372
+ }
2373
+
2374
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/computeStyles.js
2375
+ var unsetSides = {
2376
+ top: "auto",
2377
+ right: "auto",
2378
+ bottom: "auto",
2379
+ left: "auto"
2380
+ };
2381
+ function roundOffsetsByDPR(_ref) {
2382
+ var x = _ref.x, y = _ref.y;
2383
+ var win = window;
2384
+ var dpr = win.devicePixelRatio || 1;
2385
+ return {
2386
+ x: round(x * dpr) / dpr || 0,
2387
+ y: round(y * dpr) / dpr || 0
2388
+ };
2389
+ }
2390
+ function mapToStyles(_ref2) {
2391
+ var _Object$assign2;
2392
+ var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed;
2393
+ var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y;
2394
+ var _ref3 = typeof roundOffsets === "function" ? roundOffsets({
2395
+ x,
2396
+ y
2397
+ }) : {
2398
+ x,
2399
+ y
2400
+ };
2401
+ x = _ref3.x;
2402
+ y = _ref3.y;
2403
+ var hasX = offsets.hasOwnProperty("x");
2404
+ var hasY = offsets.hasOwnProperty("y");
2405
+ var sideX = left;
2406
+ var sideY = top;
2407
+ var win = window;
2408
+ if (adaptive) {
2409
+ var offsetParent = getOffsetParent(popper2);
2410
+ var heightProp = "clientHeight";
2411
+ var widthProp = "clientWidth";
2412
+ if (offsetParent === getWindow(popper2)) {
2413
+ offsetParent = getDocumentElement(popper2);
2414
+ if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") {
2415
+ heightProp = "scrollHeight";
2416
+ widthProp = "scrollWidth";
2417
+ }
2418
+ }
2419
+ offsetParent = offsetParent;
2420
+ if (placement === top || (placement === left || placement === right) && variation === end) {
2421
+ sideY = bottom;
2422
+ var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp];
2423
+ y -= offsetY - popperRect.height;
2424
+ y *= gpuAcceleration ? 1 : -1;
2425
+ }
2426
+ if (placement === left || (placement === top || placement === bottom) && variation === end) {
2427
+ sideX = right;
2428
+ var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp];
2429
+ x -= offsetX - popperRect.width;
2430
+ x *= gpuAcceleration ? 1 : -1;
2431
+ }
2432
+ }
2433
+ var commonStyles = Object.assign({
2434
+ position
2435
+ }, adaptive && unsetSides);
2436
+ var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
2437
+ x,
2438
+ y
2439
+ }) : {
2440
+ x,
2441
+ y
2442
+ };
2443
+ x = _ref4.x;
2444
+ y = _ref4.y;
2445
+ if (gpuAcceleration) {
2446
+ var _Object$assign;
2447
+ return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
2448
+ }
2449
+ return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2));
2450
+ }
2451
+ function computeStyles(_ref5) {
2452
+ var state = _ref5.state, options = _ref5.options;
2453
+ var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
2454
+ if (true) {
2455
+ var transitionProperty = getComputedStyle2(state.elements.popper).transitionProperty || "";
2456
+ if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) {
2457
+ return transitionProperty.indexOf(property) >= 0;
2458
+ })) {
2459
+ console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" "));
2460
+ }
2461
+ }
2462
+ var commonStyles = {
2463
+ placement: getBasePlacement(state.placement),
2464
+ variation: getVariation(state.placement),
2465
+ popper: state.elements.popper,
2466
+ popperRect: state.rects.popper,
2467
+ gpuAcceleration,
2468
+ isFixed: state.options.strategy === "fixed"
2469
+ };
2470
+ if (state.modifiersData.popperOffsets != null) {
2471
+ state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
2472
+ offsets: state.modifiersData.popperOffsets,
2473
+ position: state.options.strategy,
2474
+ adaptive,
2475
+ roundOffsets
2476
+ })));
2477
+ }
2478
+ if (state.modifiersData.arrow != null) {
2479
+ state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
2480
+ offsets: state.modifiersData.arrow,
2481
+ position: "absolute",
2482
+ adaptive: false,
2483
+ roundOffsets
2484
+ })));
2485
+ }
2486
+ state.attributes.popper = Object.assign({}, state.attributes.popper, {
2487
+ "data-popper-placement": state.placement
2488
+ });
2489
+ }
2490
+ var computeStyles_default = {
2491
+ name: "computeStyles",
2492
+ enabled: true,
2493
+ phase: "beforeWrite",
2494
+ fn: computeStyles,
2495
+ data: {}
2496
+ };
2497
+
2498
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/eventListeners.js
2499
+ var passive = {
2500
+ passive: true
2501
+ };
2502
+ function effect3(_ref) {
2503
+ var state = _ref.state, instance = _ref.instance, options = _ref.options;
2504
+ var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize;
2505
+ var window2 = getWindow(state.elements.popper);
2506
+ var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
2507
+ if (scroll) {
2508
+ scrollParents.forEach(function(scrollParent) {
2509
+ scrollParent.addEventListener("scroll", instance.update, passive);
2510
+ });
2511
+ }
2512
+ if (resize) {
2513
+ window2.addEventListener("resize", instance.update, passive);
2514
+ }
2515
+ return function() {
2516
+ if (scroll) {
2517
+ scrollParents.forEach(function(scrollParent) {
2518
+ scrollParent.removeEventListener("scroll", instance.update, passive);
2519
+ });
2520
+ }
2521
+ if (resize) {
2522
+ window2.removeEventListener("resize", instance.update, passive);
2523
+ }
2524
+ };
2525
+ }
2526
+ var eventListeners_default = {
2527
+ name: "eventListeners",
2528
+ enabled: true,
2529
+ phase: "write",
2530
+ fn: function fn() {
2531
+ },
2532
+ effect: effect3,
2533
+ data: {}
2534
+ };
2535
+
2536
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js
2537
+ var hash = {
2538
+ left: "right",
2539
+ right: "left",
2540
+ bottom: "top",
2541
+ top: "bottom"
2542
+ };
2543
+ function getOppositePlacement(placement) {
2544
+ return placement.replace(/left|right|bottom|top/g, function(matched) {
2545
+ return hash[matched];
2546
+ });
2547
+ }
2548
+
2549
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js
2550
+ var hash2 = {
2551
+ start: "end",
2552
+ end: "start"
2553
+ };
2554
+ function getOppositeVariationPlacement(placement) {
2555
+ return placement.replace(/start|end/g, function(matched) {
2556
+ return hash2[matched];
2557
+ });
2558
+ }
2559
+
2560
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js
2561
+ function getWindowScroll(node) {
2562
+ var win = getWindow(node);
2563
+ var scrollLeft = win.pageXOffset;
2564
+ var scrollTop = win.pageYOffset;
2565
+ return {
2566
+ scrollLeft,
2567
+ scrollTop
2568
+ };
2569
+ }
2570
+
2571
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js
2572
+ function getWindowScrollBarX(element) {
2573
+ return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
2574
+ }
2575
+
2576
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js
2577
+ function getViewportRect(element) {
2578
+ var win = getWindow(element);
2579
+ var html = getDocumentElement(element);
2580
+ var visualViewport = win.visualViewport;
2581
+ var width = html.clientWidth;
2582
+ var height = html.clientHeight;
2583
+ var x = 0;
2584
+ var y = 0;
2585
+ if (visualViewport) {
2586
+ width = visualViewport.width;
2587
+ height = visualViewport.height;
2588
+ if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
2589
+ x = visualViewport.offsetLeft;
2590
+ y = visualViewport.offsetTop;
2591
+ }
2592
+ }
2593
+ return {
2594
+ width,
2595
+ height,
2596
+ x: x + getWindowScrollBarX(element),
2597
+ y
2598
+ };
2599
+ }
2600
+
2601
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js
2602
+ function getDocumentRect(element) {
2603
+ var _element$ownerDocumen;
2604
+ var html = getDocumentElement(element);
2605
+ var winScroll = getWindowScroll(element);
2606
+ var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
2607
+ var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
2608
+ var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
2609
+ var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
2610
+ var y = -winScroll.scrollTop;
2611
+ if (getComputedStyle2(body || html).direction === "rtl") {
2612
+ x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
2613
+ }
2614
+ return {
2615
+ width,
2616
+ height,
2617
+ x,
2618
+ y
2619
+ };
2620
+ }
2621
+
2622
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js
2623
+ function isScrollParent(element) {
2624
+ var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY;
2625
+ return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
2626
+ }
2627
+
2628
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js
2629
+ function getScrollParent(node) {
2630
+ if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) {
2631
+ return node.ownerDocument.body;
2632
+ }
2633
+ if (isHTMLElement(node) && isScrollParent(node)) {
2634
+ return node;
2635
+ }
2636
+ return getScrollParent(getParentNode(node));
2637
+ }
2638
+
2639
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js
2640
+ function listScrollParents(element, list) {
2641
+ var _element$ownerDocumen;
2642
+ if (list === void 0) {
2643
+ list = [];
2644
+ }
2645
+ var scrollParent = getScrollParent(element);
2646
+ var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
2647
+ var win = getWindow(scrollParent);
2648
+ var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
2649
+ var updatedList = list.concat(target);
2650
+ return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target)));
2651
+ }
2652
+
2653
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/rectToClientRect.js
2654
+ function rectToClientRect(rect) {
2655
+ return Object.assign({}, rect, {
2656
+ left: rect.x,
2657
+ top: rect.y,
2658
+ right: rect.x + rect.width,
2659
+ bottom: rect.y + rect.height
2660
+ });
2661
+ }
2662
+
2663
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js
2664
+ function getInnerBoundingClientRect(element) {
2665
+ var rect = getBoundingClientRect(element);
2666
+ rect.top = rect.top + element.clientTop;
2667
+ rect.left = rect.left + element.clientLeft;
2668
+ rect.bottom = rect.top + element.clientHeight;
2669
+ rect.right = rect.left + element.clientWidth;
2670
+ rect.width = element.clientWidth;
2671
+ rect.height = element.clientHeight;
2672
+ rect.x = rect.left;
2673
+ rect.y = rect.top;
2674
+ return rect;
2675
+ }
2676
+ function getClientRectFromMixedType(element, clippingParent) {
2677
+ return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2678
+ }
2679
+ function getClippingParents(element) {
2680
+ var clippingParents2 = listScrollParents(getParentNode(element));
2681
+ var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0;
2682
+ var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
2683
+ if (!isElement(clipperElement)) {
2684
+ return [];
2685
+ }
2686
+ return clippingParents2.filter(function(clippingParent) {
2687
+ return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body";
2688
+ });
2689
+ }
2690
+ function getClippingRect(element, boundary, rootBoundary) {
2691
+ var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary);
2692
+ var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]);
2693
+ var firstClippingParent = clippingParents2[0];
2694
+ var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) {
2695
+ var rect = getClientRectFromMixedType(element, clippingParent);
2696
+ accRect.top = max(rect.top, accRect.top);
2697
+ accRect.right = min(rect.right, accRect.right);
2698
+ accRect.bottom = min(rect.bottom, accRect.bottom);
2699
+ accRect.left = max(rect.left, accRect.left);
2700
+ return accRect;
2701
+ }, getClientRectFromMixedType(element, firstClippingParent));
2702
+ clippingRect.width = clippingRect.right - clippingRect.left;
2703
+ clippingRect.height = clippingRect.bottom - clippingRect.top;
2704
+ clippingRect.x = clippingRect.left;
2705
+ clippingRect.y = clippingRect.top;
2706
+ return clippingRect;
2707
+ }
2708
+
2709
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/computeOffsets.js
2710
+ function computeOffsets(_ref) {
2711
+ var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement;
2712
+ var basePlacement = placement ? getBasePlacement(placement) : null;
2713
+ var variation = placement ? getVariation(placement) : null;
2714
+ var commonX = reference2.x + reference2.width / 2 - element.width / 2;
2715
+ var commonY = reference2.y + reference2.height / 2 - element.height / 2;
2716
+ var offsets;
2717
+ switch (basePlacement) {
2718
+ case top:
2719
+ offsets = {
2720
+ x: commonX,
2721
+ y: reference2.y - element.height
2722
+ };
2723
+ break;
2724
+ case bottom:
2725
+ offsets = {
2726
+ x: commonX,
2727
+ y: reference2.y + reference2.height
2728
+ };
2729
+ break;
2730
+ case right:
2731
+ offsets = {
2732
+ x: reference2.x + reference2.width,
2733
+ y: commonY
2734
+ };
2735
+ break;
2736
+ case left:
2737
+ offsets = {
2738
+ x: reference2.x - element.width,
2739
+ y: commonY
2740
+ };
2741
+ break;
2742
+ default:
2743
+ offsets = {
2744
+ x: reference2.x,
2745
+ y: reference2.y
2746
+ };
2747
+ }
2748
+ var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
2749
+ if (mainAxis != null) {
2750
+ var len = mainAxis === "y" ? "height" : "width";
2751
+ switch (variation) {
2752
+ case start:
2753
+ offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);
2754
+ break;
2755
+ case end:
2756
+ offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);
2757
+ break;
2758
+ default:
2759
+ }
2760
+ }
2761
+ return offsets;
2762
+ }
2763
+
2764
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/detectOverflow.js
2765
+ function detectOverflow(state, options) {
2766
+ if (options === void 0) {
2767
+ options = {};
2768
+ }
2769
+ var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding;
2770
+ var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
2771
+ var altContext = elementContext === popper ? reference : popper;
2772
+ var popperRect = state.rects.popper;
2773
+ var element = state.elements[altBoundary ? altContext : elementContext];
2774
+ var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
2775
+ var referenceClientRect = getBoundingClientRect(state.elements.reference);
2776
+ var popperOffsets2 = computeOffsets({
2777
+ reference: referenceClientRect,
2778
+ element: popperRect,
2779
+ strategy: "absolute",
2780
+ placement
2781
+ });
2782
+ var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2));
2783
+ var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect;
2784
+ var overflowOffsets = {
2785
+ top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2786
+ bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2787
+ left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2788
+ right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2789
+ };
2790
+ var offsetData = state.modifiersData.offset;
2791
+ if (elementContext === popper && offsetData) {
2792
+ var offset2 = offsetData[placement];
2793
+ Object.keys(overflowOffsets).forEach(function(key) {
2794
+ var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
2795
+ var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x";
2796
+ overflowOffsets[key] += offset2[axis] * multiply;
2797
+ });
2798
+ }
2799
+ return overflowOffsets;
2800
+ }
2801
+
2802
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js
2803
+ function computeAutoPlacement(state, options) {
2804
+ if (options === void 0) {
2805
+ options = {};
2806
+ }
2807
+ var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
2808
+ var variation = getVariation(placement);
2809
+ var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) {
2810
+ return getVariation(placement2) === variation;
2811
+ }) : basePlacements;
2812
+ var allowedPlacements = placements2.filter(function(placement2) {
2813
+ return allowedAutoPlacements.indexOf(placement2) >= 0;
2814
+ });
2815
+ if (allowedPlacements.length === 0) {
2816
+ allowedPlacements = placements2;
2817
+ if (true) {
2818
+ console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" "));
2819
+ }
2820
+ }
2821
+ var overflows = allowedPlacements.reduce(function(acc, placement2) {
2822
+ acc[placement2] = detectOverflow(state, {
2823
+ placement: placement2,
2824
+ boundary,
2825
+ rootBoundary,
2826
+ padding
2827
+ })[getBasePlacement(placement2)];
2828
+ return acc;
2829
+ }, {});
2830
+ return Object.keys(overflows).sort(function(a, b) {
2831
+ return overflows[a] - overflows[b];
2832
+ });
2833
+ }
2834
+
2835
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/flip.js
2836
+ function getExpandedFallbackPlacements(placement) {
2837
+ if (getBasePlacement(placement) === auto) {
2838
+ return [];
2839
+ }
2840
+ var oppositePlacement = getOppositePlacement(placement);
2841
+ return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
2842
+ }
2843
+ function flip(_ref) {
2844
+ var state = _ref.state, options = _ref.options, name6 = _ref.name;
2845
+ if (state.modifiersData[name6]._skip) {
2846
+ return;
2847
+ }
2848
+ var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements;
2849
+ var preferredPlacement = state.options.placement;
2850
+ var basePlacement = getBasePlacement(preferredPlacement);
2851
+ var isBasePlacement = basePlacement === preferredPlacement;
2852
+ var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
2853
+ var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) {
2854
+ return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, {
2855
+ placement: placement2,
2856
+ boundary,
2857
+ rootBoundary,
2858
+ padding,
2859
+ flipVariations,
2860
+ allowedAutoPlacements
2861
+ }) : placement2);
2862
+ }, []);
2863
+ var referenceRect = state.rects.reference;
2864
+ var popperRect = state.rects.popper;
2865
+ var checksMap = /* @__PURE__ */ new Map();
2866
+ var makeFallbackChecks = true;
2867
+ var firstFittingPlacement = placements2[0];
2868
+ for (var i = 0; i < placements2.length; i++) {
2869
+ var placement = placements2[i];
2870
+ var _basePlacement = getBasePlacement(placement);
2871
+ var isStartVariation = getVariation(placement) === start;
2872
+ var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
2873
+ var len = isVertical ? "width" : "height";
2874
+ var overflow = detectOverflow(state, {
2875
+ placement,
2876
+ boundary,
2877
+ rootBoundary,
2878
+ altBoundary,
2879
+ padding
2880
+ });
2881
+ var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
2882
+ if (referenceRect[len] > popperRect[len]) {
2883
+ mainVariationSide = getOppositePlacement(mainVariationSide);
2884
+ }
2885
+ var altVariationSide = getOppositePlacement(mainVariationSide);
2886
+ var checks = [];
2887
+ if (checkMainAxis) {
2888
+ checks.push(overflow[_basePlacement] <= 0);
2889
+ }
2890
+ if (checkAltAxis) {
2891
+ checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
2892
+ }
2893
+ if (checks.every(function(check) {
2894
+ return check;
2895
+ })) {
2896
+ firstFittingPlacement = placement;
2897
+ makeFallbackChecks = false;
2898
+ break;
2899
+ }
2900
+ checksMap.set(placement, checks);
2901
+ }
2902
+ if (makeFallbackChecks) {
2903
+ var numberOfChecks = flipVariations ? 3 : 1;
2904
+ var _loop = function _loop2(_i2) {
2905
+ var fittingPlacement = placements2.find(function(placement2) {
2906
+ var checks2 = checksMap.get(placement2);
2907
+ if (checks2) {
2908
+ return checks2.slice(0, _i2).every(function(check) {
2909
+ return check;
2910
+ });
2911
+ }
2912
+ });
2913
+ if (fittingPlacement) {
2914
+ firstFittingPlacement = fittingPlacement;
2915
+ return "break";
2916
+ }
2917
+ };
2918
+ for (var _i = numberOfChecks; _i > 0; _i--) {
2919
+ var _ret = _loop(_i);
2920
+ if (_ret === "break")
2921
+ break;
2922
+ }
2923
+ }
2924
+ if (state.placement !== firstFittingPlacement) {
2925
+ state.modifiersData[name6]._skip = true;
2926
+ state.placement = firstFittingPlacement;
2927
+ state.reset = true;
2928
+ }
2929
+ }
2930
+ var flip_default = {
2931
+ name: "flip",
2932
+ enabled: true,
2933
+ phase: "main",
2934
+ fn: flip,
2935
+ requiresIfExists: ["offset"],
2936
+ data: {
2937
+ _skip: false
2938
+ }
2939
+ };
2940
+
2941
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/hide.js
2942
+ function getSideOffsets(overflow, rect, preventedOffsets) {
2943
+ if (preventedOffsets === void 0) {
2944
+ preventedOffsets = {
2945
+ x: 0,
2946
+ y: 0
2947
+ };
2948
+ }
2949
+ return {
2950
+ top: overflow.top - rect.height - preventedOffsets.y,
2951
+ right: overflow.right - rect.width + preventedOffsets.x,
2952
+ bottom: overflow.bottom - rect.height + preventedOffsets.y,
2953
+ left: overflow.left - rect.width - preventedOffsets.x
2954
+ };
2955
+ }
2956
+ function isAnySideFullyClipped(overflow) {
2957
+ return [top, right, bottom, left].some(function(side) {
2958
+ return overflow[side] >= 0;
2959
+ });
2960
+ }
2961
+ function hide(_ref) {
2962
+ var state = _ref.state, name6 = _ref.name;
2963
+ var referenceRect = state.rects.reference;
2964
+ var popperRect = state.rects.popper;
2965
+ var preventedOffsets = state.modifiersData.preventOverflow;
2966
+ var referenceOverflow = detectOverflow(state, {
2967
+ elementContext: "reference"
2968
+ });
2969
+ var popperAltOverflow = detectOverflow(state, {
2970
+ altBoundary: true
2971
+ });
2972
+ var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
2973
+ var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
2974
+ var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
2975
+ var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
2976
+ state.modifiersData[name6] = {
2977
+ referenceClippingOffsets,
2978
+ popperEscapeOffsets,
2979
+ isReferenceHidden,
2980
+ hasPopperEscaped
2981
+ };
2982
+ state.attributes.popper = Object.assign({}, state.attributes.popper, {
2983
+ "data-popper-reference-hidden": isReferenceHidden,
2984
+ "data-popper-escaped": hasPopperEscaped
2985
+ });
2986
+ }
2987
+ var hide_default = {
2988
+ name: "hide",
2989
+ enabled: true,
2990
+ phase: "main",
2991
+ requiresIfExists: ["preventOverflow"],
2992
+ fn: hide
2993
+ };
2994
+
2995
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/offset.js
2996
+ function distanceAndSkiddingToXY(placement, rects, offset2) {
2997
+ var basePlacement = getBasePlacement(placement);
2998
+ var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
2999
+ var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, {
3000
+ placement
3001
+ })) : offset2, skidding = _ref[0], distance = _ref[1];
3002
+ skidding = skidding || 0;
3003
+ distance = (distance || 0) * invertDistance;
3004
+ return [left, right].indexOf(basePlacement) >= 0 ? {
3005
+ x: distance,
3006
+ y: skidding
3007
+ } : {
3008
+ x: skidding,
3009
+ y: distance
3010
+ };
3011
+ }
3012
+ function offset(_ref2) {
3013
+ var state = _ref2.state, options = _ref2.options, name6 = _ref2.name;
3014
+ var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset;
3015
+ var data = placements.reduce(function(acc, placement) {
3016
+ acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2);
3017
+ return acc;
3018
+ }, {});
3019
+ var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y;
3020
+ if (state.modifiersData.popperOffsets != null) {
3021
+ state.modifiersData.popperOffsets.x += x;
3022
+ state.modifiersData.popperOffsets.y += y;
3023
+ }
3024
+ state.modifiersData[name6] = data;
3025
+ }
3026
+ var offset_default = {
3027
+ name: "offset",
3028
+ enabled: true,
3029
+ phase: "main",
3030
+ requires: ["popperOffsets"],
3031
+ fn: offset
3032
+ };
3033
+
3034
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js
3035
+ function popperOffsets(_ref) {
3036
+ var state = _ref.state, name6 = _ref.name;
3037
+ state.modifiersData[name6] = computeOffsets({
3038
+ reference: state.rects.reference,
3039
+ element: state.rects.popper,
3040
+ strategy: "absolute",
3041
+ placement: state.placement
3042
+ });
3043
+ }
3044
+ var popperOffsets_default = {
3045
+ name: "popperOffsets",
3046
+ enabled: true,
3047
+ phase: "read",
3048
+ fn: popperOffsets,
3049
+ data: {}
3050
+ };
3051
+
3052
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/getAltAxis.js
3053
+ function getAltAxis(axis) {
3054
+ return axis === "x" ? "y" : "x";
3055
+ }
3056
+
3057
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js
3058
+ function preventOverflow(_ref) {
3059
+ var state = _ref.state, options = _ref.options, name6 = _ref.name;
3060
+ var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
3061
+ var overflow = detectOverflow(state, {
3062
+ boundary,
3063
+ rootBoundary,
3064
+ padding,
3065
+ altBoundary
3066
+ });
3067
+ var basePlacement = getBasePlacement(state.placement);
3068
+ var variation = getVariation(state.placement);
3069
+ var isBasePlacement = !variation;
3070
+ var mainAxis = getMainAxisFromPlacement(basePlacement);
3071
+ var altAxis = getAltAxis(mainAxis);
3072
+ var popperOffsets2 = state.modifiersData.popperOffsets;
3073
+ var referenceRect = state.rects.reference;
3074
+ var popperRect = state.rects.popper;
3075
+ var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, {
3076
+ placement: state.placement
3077
+ })) : tetherOffset;
3078
+ var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? {
3079
+ mainAxis: tetherOffsetValue,
3080
+ altAxis: tetherOffsetValue
3081
+ } : Object.assign({
3082
+ mainAxis: 0,
3083
+ altAxis: 0
3084
+ }, tetherOffsetValue);
3085
+ var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
3086
+ var data = {
3087
+ x: 0,
3088
+ y: 0
3089
+ };
3090
+ if (!popperOffsets2) {
3091
+ return;
3092
+ }
3093
+ if (checkMainAxis) {
3094
+ var _offsetModifierState$;
3095
+ var mainSide = mainAxis === "y" ? top : left;
3096
+ var altSide = mainAxis === "y" ? bottom : right;
3097
+ var len = mainAxis === "y" ? "height" : "width";
3098
+ var offset2 = popperOffsets2[mainAxis];
3099
+ var min2 = offset2 + overflow[mainSide];
3100
+ var max2 = offset2 - overflow[altSide];
3101
+ var additive = tether ? -popperRect[len] / 2 : 0;
3102
+ var minLen = variation === start ? referenceRect[len] : popperRect[len];
3103
+ var maxLen = variation === start ? -popperRect[len] : -referenceRect[len];
3104
+ var arrowElement = state.elements.arrow;
3105
+ var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
3106
+ width: 0,
3107
+ height: 0
3108
+ };
3109
+ var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject();
3110
+ var arrowPaddingMin = arrowPaddingObject[mainSide];
3111
+ var arrowPaddingMax = arrowPaddingObject[altSide];
3112
+ var arrowLen = within(0, referenceRect[len], arrowRect[len]);
3113
+ var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
3114
+ var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
3115
+ var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
3116
+ var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
3117
+ var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
3118
+ var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset;
3119
+ var tetherMax = offset2 + maxOffset - offsetModifierValue;
3120
+ var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2);
3121
+ popperOffsets2[mainAxis] = preventedOffset;
3122
+ data[mainAxis] = preventedOffset - offset2;
3123
+ }
3124
+ if (checkAltAxis) {
3125
+ var _offsetModifierState$2;
3126
+ var _mainSide = mainAxis === "x" ? top : left;
3127
+ var _altSide = mainAxis === "x" ? bottom : right;
3128
+ var _offset = popperOffsets2[altAxis];
3129
+ var _len = altAxis === "y" ? "height" : "width";
3130
+ var _min = _offset + overflow[_mainSide];
3131
+ var _max = _offset - overflow[_altSide];
3132
+ var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
3133
+ var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
3134
+ var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
3135
+ var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
3136
+ var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
3137
+ popperOffsets2[altAxis] = _preventedOffset;
3138
+ data[altAxis] = _preventedOffset - _offset;
3139
+ }
3140
+ state.modifiersData[name6] = data;
3141
+ }
3142
+ var preventOverflow_default = {
3143
+ name: "preventOverflow",
3144
+ enabled: true,
3145
+ phase: "main",
3146
+ fn: preventOverflow,
3147
+ requiresIfExists: ["offset"]
3148
+ };
3149
+
3150
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js
3151
+ function getHTMLElementScroll(element) {
3152
+ return {
3153
+ scrollLeft: element.scrollLeft,
3154
+ scrollTop: element.scrollTop
3155
+ };
3156
+ }
3157
+
3158
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js
3159
+ function getNodeScroll(node) {
3160
+ if (node === getWindow(node) || !isHTMLElement(node)) {
3161
+ return getWindowScroll(node);
3162
+ } else {
3163
+ return getHTMLElementScroll(node);
3164
+ }
3165
+ }
3166
+
3167
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js
3168
+ function isElementScaled(element) {
3169
+ var rect = element.getBoundingClientRect();
3170
+ var scaleX = round(rect.width) / element.offsetWidth || 1;
3171
+ var scaleY = round(rect.height) / element.offsetHeight || 1;
3172
+ return scaleX !== 1 || scaleY !== 1;
3173
+ }
3174
+ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
3175
+ if (isFixed === void 0) {
3176
+ isFixed = false;
3177
+ }
3178
+ var isOffsetParentAnElement = isHTMLElement(offsetParent);
3179
+ var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
3180
+ var documentElement = getDocumentElement(offsetParent);
3181
+ var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
3182
+ var scroll = {
3183
+ scrollLeft: 0,
3184
+ scrollTop: 0
3185
+ };
3186
+ var offsets = {
3187
+ x: 0,
3188
+ y: 0
3189
+ };
3190
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
3191
+ if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) {
3192
+ scroll = getNodeScroll(offsetParent);
3193
+ }
3194
+ if (isHTMLElement(offsetParent)) {
3195
+ offsets = getBoundingClientRect(offsetParent, true);
3196
+ offsets.x += offsetParent.clientLeft;
3197
+ offsets.y += offsetParent.clientTop;
3198
+ } else if (documentElement) {
3199
+ offsets.x = getWindowScrollBarX(documentElement);
3200
+ }
3201
+ }
3202
+ return {
3203
+ x: rect.left + scroll.scrollLeft - offsets.x,
3204
+ y: rect.top + scroll.scrollTop - offsets.y,
3205
+ width: rect.width,
3206
+ height: rect.height
3207
+ };
3208
+ }
3209
+
3210
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/orderModifiers.js
3211
+ function order(modifiers) {
3212
+ var map = /* @__PURE__ */ new Map();
3213
+ var visited = /* @__PURE__ */ new Set();
3214
+ var result = [];
3215
+ modifiers.forEach(function(modifier) {
3216
+ map.set(modifier.name, modifier);
3217
+ });
3218
+ function sort(modifier) {
3219
+ visited.add(modifier.name);
3220
+ var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
3221
+ requires.forEach(function(dep) {
3222
+ if (!visited.has(dep)) {
3223
+ var depModifier = map.get(dep);
3224
+ if (depModifier) {
3225
+ sort(depModifier);
3226
+ }
3227
+ }
3228
+ });
3229
+ result.push(modifier);
3230
+ }
3231
+ modifiers.forEach(function(modifier) {
3232
+ if (!visited.has(modifier.name)) {
3233
+ sort(modifier);
3234
+ }
3235
+ });
3236
+ return result;
3237
+ }
3238
+ function orderModifiers(modifiers) {
3239
+ var orderedModifiers = order(modifiers);
3240
+ return modifierPhases.reduce(function(acc, phase) {
3241
+ return acc.concat(orderedModifiers.filter(function(modifier) {
3242
+ return modifier.phase === phase;
3243
+ }));
3244
+ }, []);
3245
+ }
3246
+
3247
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/debounce.js
3248
+ function debounce(fn2) {
3249
+ var pending;
3250
+ return function() {
3251
+ if (!pending) {
3252
+ pending = new Promise(function(resolve) {
3253
+ Promise.resolve().then(function() {
3254
+ pending = void 0;
3255
+ resolve(fn2());
3256
+ });
3257
+ });
3258
+ }
3259
+ return pending;
3260
+ };
3261
+ }
3262
+
3263
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/format.js
3264
+ function format(str) {
3265
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
3266
+ args[_key - 1] = arguments[_key];
3267
+ }
3268
+ return [].concat(args).reduce(function(p, c) {
3269
+ return p.replace(/%s/, c);
3270
+ }, str);
3271
+ }
3272
+
3273
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/validateModifiers.js
3274
+ var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
3275
+ var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
3276
+ var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"];
3277
+ function validateModifiers(modifiers) {
3278
+ modifiers.forEach(function(modifier) {
3279
+ [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self) {
3280
+ return self.indexOf(value) === index;
3281
+ }).forEach(function(key) {
3282
+ switch (key) {
3283
+ case "name":
3284
+ if (typeof modifier.name !== "string") {
3285
+ console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"'));
3286
+ }
3287
+ break;
3288
+ case "enabled":
3289
+ if (typeof modifier.enabled !== "boolean") {
3290
+ console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"'));
3291
+ }
3292
+ break;
3293
+ case "phase":
3294
+ if (modifierPhases.indexOf(modifier.phase) < 0) {
3295
+ console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"'));
3296
+ }
3297
+ break;
3298
+ case "fn":
3299
+ if (typeof modifier.fn !== "function") {
3300
+ console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"'));
3301
+ }
3302
+ break;
3303
+ case "effect":
3304
+ if (modifier.effect != null && typeof modifier.effect !== "function") {
3305
+ console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"'));
3306
+ }
3307
+ break;
3308
+ case "requires":
3309
+ if (modifier.requires != null && !Array.isArray(modifier.requires)) {
3310
+ console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"'));
3311
+ }
3312
+ break;
3313
+ case "requiresIfExists":
3314
+ if (!Array.isArray(modifier.requiresIfExists)) {
3315
+ console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"'));
3316
+ }
3317
+ break;
3318
+ case "options":
3319
+ case "data":
3320
+ break;
3321
+ default:
3322
+ console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) {
3323
+ return '"' + s + '"';
3324
+ }).join(", ") + '; but "' + key + '" was provided.');
3325
+ }
3326
+ modifier.requires && modifier.requires.forEach(function(requirement) {
3327
+ if (modifiers.find(function(mod) {
3328
+ return mod.name === requirement;
3329
+ }) == null) {
3330
+ console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
3331
+ }
3332
+ });
3333
+ });
3334
+ });
3335
+ }
3336
+
3337
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/uniqueBy.js
3338
+ function uniqueBy(arr, fn2) {
3339
+ var identifiers = /* @__PURE__ */ new Set();
3340
+ return arr.filter(function(item) {
3341
+ var identifier = fn2(item);
3342
+ if (!identifiers.has(identifier)) {
3343
+ identifiers.add(identifier);
3344
+ return true;
3345
+ }
3346
+ });
3347
+ }
3348
+
3349
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/utils/mergeByName.js
3350
+ function mergeByName(modifiers) {
3351
+ var merged = modifiers.reduce(function(merged2, current) {
3352
+ var existing = merged2[current.name];
3353
+ merged2[current.name] = existing ? Object.assign({}, existing, current, {
3354
+ options: Object.assign({}, existing.options, current.options),
3355
+ data: Object.assign({}, existing.data, current.data)
3356
+ }) : current;
3357
+ return merged2;
3358
+ }, {});
3359
+ return Object.keys(merged).map(function(key) {
3360
+ return merged[key];
3361
+ });
3362
+ }
3363
+
3364
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/createPopper.js
3365
+ var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.";
3366
+ var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.";
3367
+ var DEFAULT_OPTIONS = {
3368
+ placement: "bottom",
3369
+ modifiers: [],
3370
+ strategy: "absolute"
3371
+ };
3372
+ function areValidElements() {
3373
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3374
+ args[_key] = arguments[_key];
3375
+ }
3376
+ return !args.some(function(element) {
3377
+ return !(element && typeof element.getBoundingClientRect === "function");
3378
+ });
3379
+ }
3380
+ function popperGenerator(generatorOptions) {
3381
+ if (generatorOptions === void 0) {
3382
+ generatorOptions = {};
3383
+ }
3384
+ var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
3385
+ return function createPopper2(reference2, popper2, options) {
3386
+ if (options === void 0) {
3387
+ options = defaultOptions;
3388
+ }
3389
+ var state = {
3390
+ placement: "bottom",
3391
+ orderedModifiers: [],
3392
+ options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
3393
+ modifiersData: {},
3394
+ elements: {
3395
+ reference: reference2,
3396
+ popper: popper2
3397
+ },
3398
+ attributes: {},
3399
+ styles: {}
3400
+ };
3401
+ var effectCleanupFns = [];
3402
+ var isDestroyed = false;
3403
+ var instance = {
3404
+ state,
3405
+ setOptions: function setOptions(setOptionsAction) {
3406
+ var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction;
3407
+ cleanupModifierEffects();
3408
+ state.options = Object.assign({}, defaultOptions, state.options, options2);
3409
+ state.scrollParents = {
3410
+ reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],
3411
+ popper: listScrollParents(popper2)
3412
+ };
3413
+ var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers)));
3414
+ state.orderedModifiers = orderedModifiers.filter(function(m) {
3415
+ return m.enabled;
3416
+ });
3417
+ if (true) {
3418
+ var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) {
3419
+ var name6 = _ref.name;
3420
+ return name6;
3421
+ });
3422
+ validateModifiers(modifiers);
3423
+ if (getBasePlacement(state.options.placement) === auto) {
3424
+ var flipModifier = state.orderedModifiers.find(function(_ref2) {
3425
+ var name6 = _ref2.name;
3426
+ return name6 === "flip";
3427
+ });
3428
+ if (!flipModifier) {
3429
+ console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" "));
3430
+ }
3431
+ }
3432
+ var _getComputedStyle = getComputedStyle2(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft;
3433
+ if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) {
3434
+ return parseFloat(margin);
3435
+ })) {
3436
+ console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" "));
3437
+ }
3438
+ }
3439
+ runModifierEffects();
3440
+ return instance.update();
3441
+ },
3442
+ forceUpdate: function forceUpdate() {
3443
+ if (isDestroyed) {
3444
+ return;
3445
+ }
3446
+ var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;
3447
+ if (!areValidElements(reference3, popper3)) {
3448
+ if (true) {
3449
+ console.error(INVALID_ELEMENT_ERROR);
3450
+ }
3451
+ return;
3452
+ }
3453
+ state.rects = {
3454
+ reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"),
3455
+ popper: getLayoutRect(popper3)
3456
+ };
3457
+ state.reset = false;
3458
+ state.placement = state.options.placement;
3459
+ state.orderedModifiers.forEach(function(modifier) {
3460
+ return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
3461
+ });
3462
+ var __debug_loops__ = 0;
3463
+ for (var index = 0; index < state.orderedModifiers.length; index++) {
3464
+ if (true) {
3465
+ __debug_loops__ += 1;
3466
+ if (__debug_loops__ > 100) {
3467
+ console.error(INFINITE_LOOP_ERROR);
3468
+ break;
3469
+ }
3470
+ }
3471
+ if (state.reset === true) {
3472
+ state.reset = false;
3473
+ index = -1;
3474
+ continue;
3475
+ }
3476
+ var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name6 = _state$orderedModifie.name;
3477
+ if (typeof fn2 === "function") {
3478
+ state = fn2({
3479
+ state,
3480
+ options: _options,
3481
+ name: name6,
3482
+ instance
3483
+ }) || state;
3484
+ }
3485
+ }
3486
+ },
3487
+ update: debounce(function() {
3488
+ return new Promise(function(resolve) {
3489
+ instance.forceUpdate();
3490
+ resolve(state);
3491
+ });
3492
+ }),
3493
+ destroy: function destroy() {
3494
+ cleanupModifierEffects();
3495
+ isDestroyed = true;
3496
+ }
3497
+ };
3498
+ if (!areValidElements(reference2, popper2)) {
3499
+ if (true) {
3500
+ console.error(INVALID_ELEMENT_ERROR);
3501
+ }
3502
+ return instance;
3503
+ }
3504
+ instance.setOptions(options).then(function(state2) {
3505
+ if (!isDestroyed && options.onFirstUpdate) {
3506
+ options.onFirstUpdate(state2);
3507
+ }
3508
+ });
3509
+ function runModifierEffects() {
3510
+ state.orderedModifiers.forEach(function(_ref3) {
3511
+ var name6 = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect5 = _ref3.effect;
3512
+ if (typeof effect5 === "function") {
3513
+ var cleanupFn = effect5({
3514
+ state,
3515
+ name: name6,
3516
+ instance,
3517
+ options: options2
3518
+ });
3519
+ var noopFn = function noopFn2() {
3520
+ };
3521
+ effectCleanupFns.push(cleanupFn || noopFn);
3522
+ }
3523
+ });
3524
+ }
3525
+ function cleanupModifierEffects() {
3526
+ effectCleanupFns.forEach(function(fn2) {
3527
+ return fn2();
3528
+ });
3529
+ effectCleanupFns = [];
3530
+ }
3531
+ return instance;
3532
+ };
3533
+ }
3534
+
3535
+ // ../../node_modules/.pnpm/@popperjs+core@2.11.2/node_modules/@popperjs/core/lib/popper.js
3536
+ var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default];
3537
+ var createPopper = /* @__PURE__ */ popperGenerator({
3538
+ defaultModifiers
3539
+ });
3540
+
3541
+ // ../../node_modules/.pnpm/tippy.js@6.3.7/node_modules/tippy.js/dist/tippy.esm.js
3542
+ var BOX_CLASS = "tippy-box";
3543
+ var CONTENT_CLASS = "tippy-content";
3544
+ var BACKDROP_CLASS = "tippy-backdrop";
3545
+ var ARROW_CLASS = "tippy-arrow";
3546
+ var SVG_ARROW_CLASS = "tippy-svg-arrow";
3547
+ var TOUCH_OPTIONS = {
3548
+ passive: true,
3549
+ capture: true
3550
+ };
3551
+ var TIPPY_DEFAULT_APPEND_TO = function TIPPY_DEFAULT_APPEND_TO2() {
3552
+ return document.body;
3553
+ };
3554
+ function hasOwnProperty(obj, key) {
3555
+ return {}.hasOwnProperty.call(obj, key);
3556
+ }
3557
+ function getValueAtIndexOrReturn(value, index, defaultValue) {
3558
+ if (Array.isArray(value)) {
3559
+ var v = value[index];
3560
+ return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v;
3561
+ }
3562
+ return value;
3563
+ }
3564
+ function isType(value, type) {
3565
+ var str = {}.toString.call(value);
3566
+ return str.indexOf("[object") === 0 && str.indexOf(type + "]") > -1;
3567
+ }
3568
+ function invokeWithArgsOrReturn(value, args) {
3569
+ return typeof value === "function" ? value.apply(void 0, args) : value;
3570
+ }
3571
+ function debounce2(fn2, ms) {
3572
+ if (ms === 0) {
3573
+ return fn2;
3574
+ }
3575
+ var timeout;
3576
+ return function(arg) {
3577
+ clearTimeout(timeout);
3578
+ timeout = setTimeout(function() {
3579
+ fn2(arg);
3580
+ }, ms);
3581
+ };
3582
+ }
3583
+ function removeProperties(obj, keys) {
3584
+ var clone = Object.assign({}, obj);
3585
+ keys.forEach(function(key) {
3586
+ delete clone[key];
3587
+ });
3588
+ return clone;
3589
+ }
3590
+ function splitBySpaces(value) {
3591
+ return value.split(/\s+/).filter(Boolean);
3592
+ }
3593
+ function normalizeToArray(value) {
3594
+ return [].concat(value);
3595
+ }
3596
+ function pushIfUnique(arr, value) {
3597
+ if (arr.indexOf(value) === -1) {
3598
+ arr.push(value);
3599
+ }
3600
+ }
3601
+ function unique(arr) {
3602
+ return arr.filter(function(item, index) {
3603
+ return arr.indexOf(item) === index;
3604
+ });
3605
+ }
3606
+ function getBasePlacement2(placement) {
3607
+ return placement.split("-")[0];
3608
+ }
3609
+ function arrayFrom(value) {
3610
+ return [].slice.call(value);
3611
+ }
3612
+ function removeUndefinedProps(obj) {
3613
+ return Object.keys(obj).reduce(function(acc, key) {
3614
+ if (obj[key] !== void 0) {
3615
+ acc[key] = obj[key];
3616
+ }
3617
+ return acc;
3618
+ }, {});
3619
+ }
3620
+ function div() {
3621
+ return document.createElement("div");
3622
+ }
3623
+ function isElement2(value) {
3624
+ return ["Element", "Fragment"].some(function(type) {
3625
+ return isType(value, type);
3626
+ });
3627
+ }
3628
+ function isNodeList(value) {
3629
+ return isType(value, "NodeList");
3630
+ }
3631
+ function isMouseEvent(value) {
3632
+ return isType(value, "MouseEvent");
3633
+ }
3634
+ function isReferenceElement(value) {
3635
+ return !!(value && value._tippy && value._tippy.reference === value);
3636
+ }
3637
+ function getArrayOfElements(value) {
3638
+ if (isElement2(value)) {
3639
+ return [value];
3640
+ }
3641
+ if (isNodeList(value)) {
3642
+ return arrayFrom(value);
3643
+ }
3644
+ if (Array.isArray(value)) {
3645
+ return value;
3646
+ }
3647
+ return arrayFrom(document.querySelectorAll(value));
3648
+ }
3649
+ function setTransitionDuration(els, value) {
3650
+ els.forEach(function(el) {
3651
+ if (el) {
3652
+ el.style.transitionDuration = value + "ms";
3653
+ }
3654
+ });
3655
+ }
3656
+ function setVisibilityState(els, state) {
3657
+ els.forEach(function(el) {
3658
+ if (el) {
3659
+ el.setAttribute("data-state", state);
3660
+ }
3661
+ });
3662
+ }
3663
+ function getOwnerDocument(elementOrElements) {
3664
+ var _element$ownerDocumen;
3665
+ var _normalizeToArray = normalizeToArray(elementOrElements), element = _normalizeToArray[0];
3666
+ return element != null && (_element$ownerDocumen = element.ownerDocument) != null && _element$ownerDocumen.body ? element.ownerDocument : document;
3667
+ }
3668
+ function isCursorOutsideInteractiveBorder(popperTreeData, event) {
3669
+ var clientX = event.clientX, clientY = event.clientY;
3670
+ return popperTreeData.every(function(_ref) {
3671
+ var popperRect = _ref.popperRect, popperState = _ref.popperState, props = _ref.props;
3672
+ var interactiveBorder = props.interactiveBorder;
3673
+ var basePlacement = getBasePlacement2(popperState.placement);
3674
+ var offsetData = popperState.modifiersData.offset;
3675
+ if (!offsetData) {
3676
+ return true;
3677
+ }
3678
+ var topDistance = basePlacement === "bottom" ? offsetData.top.y : 0;
3679
+ var bottomDistance = basePlacement === "top" ? offsetData.bottom.y : 0;
3680
+ var leftDistance = basePlacement === "right" ? offsetData.left.x : 0;
3681
+ var rightDistance = basePlacement === "left" ? offsetData.right.x : 0;
3682
+ var exceedsTop = popperRect.top - clientY + topDistance > interactiveBorder;
3683
+ var exceedsBottom = clientY - popperRect.bottom - bottomDistance > interactiveBorder;
3684
+ var exceedsLeft = popperRect.left - clientX + leftDistance > interactiveBorder;
3685
+ var exceedsRight = clientX - popperRect.right - rightDistance > interactiveBorder;
3686
+ return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;
3687
+ });
3688
+ }
3689
+ function updateTransitionEndListener(box, action, listener) {
3690
+ var method = action + "EventListener";
3691
+ ["transitionend", "webkitTransitionEnd"].forEach(function(event) {
3692
+ box[method](event, listener);
3693
+ });
3694
+ }
3695
+ function actualContains(parent, child) {
3696
+ var target = child;
3697
+ while (target) {
3698
+ var _target$getRootNode;
3699
+ if (parent.contains(target)) {
3700
+ return true;
3701
+ }
3702
+ target = target.getRootNode == null ? void 0 : (_target$getRootNode = target.getRootNode()) == null ? void 0 : _target$getRootNode.host;
3703
+ }
3704
+ return false;
3705
+ }
3706
+ var currentInput = {
3707
+ isTouch: false
3708
+ };
3709
+ var lastMouseMoveTime = 0;
3710
+ function onDocumentTouchStart() {
3711
+ if (currentInput.isTouch) {
3712
+ return;
3713
+ }
3714
+ currentInput.isTouch = true;
3715
+ if (window.performance) {
3716
+ document.addEventListener("mousemove", onDocumentMouseMove);
3717
+ }
3718
+ }
3719
+ function onDocumentMouseMove() {
3720
+ var now = performance.now();
3721
+ if (now - lastMouseMoveTime < 20) {
3722
+ currentInput.isTouch = false;
3723
+ document.removeEventListener("mousemove", onDocumentMouseMove);
3724
+ }
3725
+ lastMouseMoveTime = now;
3726
+ }
3727
+ function onWindowBlur() {
3728
+ var activeElement = document.activeElement;
3729
+ if (isReferenceElement(activeElement)) {
3730
+ var instance = activeElement._tippy;
3731
+ if (activeElement.blur && !instance.state.isVisible) {
3732
+ activeElement.blur();
3733
+ }
3734
+ }
3735
+ }
3736
+ function bindGlobalEventListeners() {
3737
+ document.addEventListener("touchstart", onDocumentTouchStart, TOUCH_OPTIONS);
3738
+ window.addEventListener("blur", onWindowBlur);
3739
+ }
3740
+ var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
3741
+ var isIE11 = isBrowser ? !!window.msCrypto : false;
3742
+ function createMemoryLeakWarning(method) {
3743
+ var txt = method === "destroy" ? "n already-" : " ";
3744
+ return [method + "() was called on a" + txt + "destroyed instance. This is a no-op but", "indicates a potential memory leak."].join(" ");
3745
+ }
3746
+ function clean(value) {
3747
+ var spacesAndTabs = /[ \t]{2,}/g;
3748
+ var lineStartWithSpaces = /^[ \t]*/gm;
3749
+ return value.replace(spacesAndTabs, " ").replace(lineStartWithSpaces, "").trim();
3750
+ }
3751
+ function getDevMessage(message) {
3752
+ return clean("\n %ctippy.js\n\n %c" + clean(message) + "\n\n %c\u{1F477}\u200D This is a development-only message. It will be removed in production.\n ");
3753
+ }
3754
+ function getFormattedMessage(message) {
3755
+ return [
3756
+ getDevMessage(message),
3757
+ "color: #00C584; font-size: 1.3em; font-weight: bold;",
3758
+ "line-height: 1.5",
3759
+ "color: #a6a095;"
3760
+ ];
3761
+ }
3762
+ var visitedMessages;
3763
+ if (true) {
3764
+ resetVisitedMessages();
3765
+ }
3766
+ function resetVisitedMessages() {
3767
+ visitedMessages = /* @__PURE__ */ new Set();
3768
+ }
3769
+ function warnWhen(condition, message) {
3770
+ if (condition && !visitedMessages.has(message)) {
3771
+ var _console;
3772
+ visitedMessages.add(message);
3773
+ (_console = console).warn.apply(_console, getFormattedMessage(message));
3774
+ }
3775
+ }
3776
+ function errorWhen(condition, message) {
3777
+ if (condition && !visitedMessages.has(message)) {
3778
+ var _console2;
3779
+ visitedMessages.add(message);
3780
+ (_console2 = console).error.apply(_console2, getFormattedMessage(message));
3781
+ }
3782
+ }
3783
+ function validateTargets(targets) {
3784
+ var didPassFalsyValue = !targets;
3785
+ var didPassPlainObject = Object.prototype.toString.call(targets) === "[object Object]" && !targets.addEventListener;
3786
+ errorWhen(didPassFalsyValue, ["tippy() was passed", "`" + String(targets) + "`", "as its targets (first) argument. Valid types are: String, Element,", "Element[], or NodeList."].join(" "));
3787
+ errorWhen(didPassPlainObject, ["tippy() was passed a plain object which is not supported as an argument", "for virtual positioning. Use props.getReferenceClientRect instead."].join(" "));
3788
+ }
3789
+ var pluginProps = {
3790
+ animateFill: false,
3791
+ followCursor: false,
3792
+ inlinePositioning: false,
3793
+ sticky: false
3794
+ };
3795
+ var renderProps = {
3796
+ allowHTML: false,
3797
+ animation: "fade",
3798
+ arrow: true,
3799
+ content: "",
3800
+ inertia: false,
3801
+ maxWidth: 350,
3802
+ role: "tooltip",
3803
+ theme: "",
3804
+ zIndex: 9999
3805
+ };
3806
+ var defaultProps = Object.assign({
3807
+ appendTo: TIPPY_DEFAULT_APPEND_TO,
3808
+ aria: {
3809
+ content: "auto",
3810
+ expanded: "auto"
3811
+ },
3812
+ delay: 0,
3813
+ duration: [300, 250],
3814
+ getReferenceClientRect: null,
3815
+ hideOnClick: true,
3816
+ ignoreAttributes: false,
3817
+ interactive: false,
3818
+ interactiveBorder: 2,
3819
+ interactiveDebounce: 0,
3820
+ moveTransition: "",
3821
+ offset: [0, 10],
3822
+ onAfterUpdate: function onAfterUpdate() {
3823
+ },
3824
+ onBeforeUpdate: function onBeforeUpdate() {
3825
+ },
3826
+ onCreate: function onCreate() {
3827
+ },
3828
+ onDestroy: function onDestroy() {
3829
+ },
3830
+ onHidden: function onHidden() {
3831
+ },
3832
+ onHide: function onHide() {
3833
+ },
3834
+ onMount: function onMount() {
3835
+ },
3836
+ onShow: function onShow() {
3837
+ },
3838
+ onShown: function onShown() {
3839
+ },
3840
+ onTrigger: function onTrigger() {
3841
+ },
3842
+ onUntrigger: function onUntrigger() {
3843
+ },
3844
+ onClickOutside: function onClickOutside() {
3845
+ },
3846
+ placement: "top",
3847
+ plugins: [],
3848
+ popperOptions: {},
3849
+ render: null,
3850
+ showOnCreate: false,
3851
+ touch: true,
3852
+ trigger: "mouseenter focus",
3853
+ triggerTarget: null
3854
+ }, pluginProps, renderProps);
3855
+ var defaultKeys = Object.keys(defaultProps);
3856
+ var setDefaultProps = function setDefaultProps2(partialProps) {
3857
+ if (true) {
3858
+ validateProps(partialProps, []);
3859
+ }
3860
+ var keys = Object.keys(partialProps);
3861
+ keys.forEach(function(key) {
3862
+ defaultProps[key] = partialProps[key];
3863
+ });
3864
+ };
3865
+ function getExtendedPassedProps(passedProps) {
3866
+ var plugins = passedProps.plugins || [];
3867
+ var pluginProps2 = plugins.reduce(function(acc, plugin) {
3868
+ var name6 = plugin.name, defaultValue = plugin.defaultValue;
3869
+ if (name6) {
3870
+ var _name;
3871
+ acc[name6] = passedProps[name6] !== void 0 ? passedProps[name6] : (_name = defaultProps[name6]) != null ? _name : defaultValue;
3872
+ }
3873
+ return acc;
3874
+ }, {});
3875
+ return Object.assign({}, passedProps, pluginProps2);
3876
+ }
3877
+ function getDataAttributeProps(reference2, plugins) {
3878
+ var propKeys = plugins ? Object.keys(getExtendedPassedProps(Object.assign({}, defaultProps, {
3879
+ plugins
3880
+ }))) : defaultKeys;
3881
+ var props = propKeys.reduce(function(acc, key) {
3882
+ var valueAsString = (reference2.getAttribute("data-tippy-" + key) || "").trim();
3883
+ if (!valueAsString) {
3884
+ return acc;
3885
+ }
3886
+ if (key === "content") {
3887
+ acc[key] = valueAsString;
3888
+ } else {
3889
+ try {
3890
+ acc[key] = JSON.parse(valueAsString);
3891
+ } catch (e) {
3892
+ acc[key] = valueAsString;
3893
+ }
3894
+ }
3895
+ return acc;
3896
+ }, {});
3897
+ return props;
3898
+ }
3899
+ function evaluateProps(reference2, props) {
3900
+ var out = Object.assign({}, props, {
3901
+ content: invokeWithArgsOrReturn(props.content, [reference2])
3902
+ }, props.ignoreAttributes ? {} : getDataAttributeProps(reference2, props.plugins));
3903
+ out.aria = Object.assign({}, defaultProps.aria, out.aria);
3904
+ out.aria = {
3905
+ expanded: out.aria.expanded === "auto" ? props.interactive : out.aria.expanded,
3906
+ content: out.aria.content === "auto" ? props.interactive ? null : "describedby" : out.aria.content
3907
+ };
3908
+ return out;
3909
+ }
3910
+ function validateProps(partialProps, plugins) {
3911
+ if (partialProps === void 0) {
3912
+ partialProps = {};
3913
+ }
3914
+ if (plugins === void 0) {
3915
+ plugins = [];
3916
+ }
3917
+ var keys = Object.keys(partialProps);
3918
+ keys.forEach(function(prop) {
3919
+ var nonPluginProps = removeProperties(defaultProps, Object.keys(pluginProps));
3920
+ var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);
3921
+ if (didPassUnknownProp) {
3922
+ didPassUnknownProp = plugins.filter(function(plugin) {
3923
+ return plugin.name === prop;
3924
+ }).length === 0;
3925
+ }
3926
+ warnWhen(didPassUnknownProp, ["`" + prop + "`", "is not a valid prop. You may have spelled it incorrectly, or if it's", "a plugin, forgot to pass it in an array as props.plugins.", "\n\n", "All props: https://atomiks.github.io/tippyjs/v6/all-props/\n", "Plugins: https://atomiks.github.io/tippyjs/v6/plugins/"].join(" "));
3927
+ });
3928
+ }
3929
+ var innerHTML = function innerHTML2() {
3930
+ return "innerHTML";
3931
+ };
3932
+ function dangerouslySetInnerHTML(element, html) {
3933
+ element[innerHTML()] = html;
3934
+ }
3935
+ function createArrowElement(value) {
3936
+ var arrow2 = div();
3937
+ if (value === true) {
3938
+ arrow2.className = ARROW_CLASS;
3939
+ } else {
3940
+ arrow2.className = SVG_ARROW_CLASS;
3941
+ if (isElement2(value)) {
3942
+ arrow2.appendChild(value);
3943
+ } else {
3944
+ dangerouslySetInnerHTML(arrow2, value);
3945
+ }
3946
+ }
3947
+ return arrow2;
3948
+ }
3949
+ function setContent(content, props) {
3950
+ if (isElement2(props.content)) {
3951
+ dangerouslySetInnerHTML(content, "");
3952
+ content.appendChild(props.content);
3953
+ } else if (typeof props.content !== "function") {
3954
+ if (props.allowHTML) {
3955
+ dangerouslySetInnerHTML(content, props.content);
3956
+ } else {
3957
+ content.textContent = props.content;
3958
+ }
3959
+ }
3960
+ }
3961
+ function getChildren(popper2) {
3962
+ var box = popper2.firstElementChild;
3963
+ var boxChildren = arrayFrom(box.children);
3964
+ return {
3965
+ box,
3966
+ content: boxChildren.find(function(node) {
3967
+ return node.classList.contains(CONTENT_CLASS);
3968
+ }),
3969
+ arrow: boxChildren.find(function(node) {
3970
+ return node.classList.contains(ARROW_CLASS) || node.classList.contains(SVG_ARROW_CLASS);
3971
+ }),
3972
+ backdrop: boxChildren.find(function(node) {
3973
+ return node.classList.contains(BACKDROP_CLASS);
3974
+ })
3975
+ };
3976
+ }
3977
+ function render(instance) {
3978
+ var popper2 = div();
3979
+ var box = div();
3980
+ box.className = BOX_CLASS;
3981
+ box.setAttribute("data-state", "hidden");
3982
+ box.setAttribute("tabindex", "-1");
3983
+ var content = div();
3984
+ content.className = CONTENT_CLASS;
3985
+ content.setAttribute("data-state", "hidden");
3986
+ setContent(content, instance.props);
3987
+ popper2.appendChild(box);
3988
+ box.appendChild(content);
3989
+ onUpdate(instance.props, instance.props);
3990
+ function onUpdate(prevProps, nextProps) {
3991
+ var _getChildren = getChildren(popper2), box2 = _getChildren.box, content2 = _getChildren.content, arrow2 = _getChildren.arrow;
3992
+ if (nextProps.theme) {
3993
+ box2.setAttribute("data-theme", nextProps.theme);
3994
+ } else {
3995
+ box2.removeAttribute("data-theme");
3996
+ }
3997
+ if (typeof nextProps.animation === "string") {
3998
+ box2.setAttribute("data-animation", nextProps.animation);
3999
+ } else {
4000
+ box2.removeAttribute("data-animation");
4001
+ }
4002
+ if (nextProps.inertia) {
4003
+ box2.setAttribute("data-inertia", "");
4004
+ } else {
4005
+ box2.removeAttribute("data-inertia");
4006
+ }
4007
+ box2.style.maxWidth = typeof nextProps.maxWidth === "number" ? nextProps.maxWidth + "px" : nextProps.maxWidth;
4008
+ if (nextProps.role) {
4009
+ box2.setAttribute("role", nextProps.role);
4010
+ } else {
4011
+ box2.removeAttribute("role");
4012
+ }
4013
+ if (prevProps.content !== nextProps.content || prevProps.allowHTML !== nextProps.allowHTML) {
4014
+ setContent(content2, instance.props);
4015
+ }
4016
+ if (nextProps.arrow) {
4017
+ if (!arrow2) {
4018
+ box2.appendChild(createArrowElement(nextProps.arrow));
4019
+ } else if (prevProps.arrow !== nextProps.arrow) {
4020
+ box2.removeChild(arrow2);
4021
+ box2.appendChild(createArrowElement(nextProps.arrow));
4022
+ }
4023
+ } else if (arrow2) {
4024
+ box2.removeChild(arrow2);
4025
+ }
4026
+ }
4027
+ return {
4028
+ popper: popper2,
4029
+ onUpdate
4030
+ };
4031
+ }
4032
+ render.$$tippy = true;
4033
+ var idCounter = 1;
4034
+ var mouseMoveListeners = [];
4035
+ var mountedInstances = [];
4036
+ function createTippy(reference2, passedProps) {
4037
+ var props = evaluateProps(reference2, Object.assign({}, defaultProps, getExtendedPassedProps(removeUndefinedProps(passedProps))));
4038
+ var showTimeout;
4039
+ var hideTimeout;
4040
+ var scheduleHideAnimationFrame;
4041
+ var isVisibleFromClick = false;
4042
+ var didHideDueToDocumentMouseDown = false;
4043
+ var didTouchMove = false;
4044
+ var ignoreOnFirstUpdate = false;
4045
+ var lastTriggerEvent;
4046
+ var currentTransitionEndListener;
4047
+ var onFirstUpdate;
4048
+ var listeners = [];
4049
+ var debouncedOnMouseMove = debounce2(onMouseMove, props.interactiveDebounce);
4050
+ var currentTarget;
4051
+ var id = idCounter++;
4052
+ var popperInstance = null;
4053
+ var plugins = unique(props.plugins);
4054
+ var state = {
4055
+ isEnabled: true,
4056
+ isVisible: false,
4057
+ isDestroyed: false,
4058
+ isMounted: false,
4059
+ isShown: false
4060
+ };
4061
+ var instance = {
4062
+ id,
4063
+ reference: reference2,
4064
+ popper: div(),
4065
+ popperInstance,
4066
+ props,
4067
+ state,
4068
+ plugins,
4069
+ clearDelayTimeouts,
4070
+ setProps,
4071
+ setContent: setContent2,
4072
+ show,
4073
+ hide: hide2,
4074
+ hideWithInteractivity,
4075
+ enable,
4076
+ disable,
4077
+ unmount,
4078
+ destroy
4079
+ };
4080
+ if (!props.render) {
4081
+ if (true) {
4082
+ errorWhen(true, "render() function has not been supplied.");
4083
+ }
4084
+ return instance;
4085
+ }
4086
+ var _props$render = props.render(instance), popper2 = _props$render.popper, onUpdate = _props$render.onUpdate;
4087
+ popper2.setAttribute("data-tippy-root", "");
4088
+ popper2.id = "tippy-" + instance.id;
4089
+ instance.popper = popper2;
4090
+ reference2._tippy = instance;
4091
+ popper2._tippy = instance;
4092
+ var pluginsHooks = plugins.map(function(plugin) {
4093
+ return plugin.fn(instance);
4094
+ });
4095
+ var hasAriaExpanded = reference2.hasAttribute("aria-expanded");
4096
+ addListeners();
4097
+ handleAriaExpandedAttribute();
4098
+ handleStyles();
4099
+ invokeHook("onCreate", [instance]);
4100
+ if (props.showOnCreate) {
4101
+ scheduleShow();
4102
+ }
4103
+ popper2.addEventListener("mouseenter", function() {
4104
+ if (instance.props.interactive && instance.state.isVisible) {
4105
+ instance.clearDelayTimeouts();
4106
+ }
4107
+ });
4108
+ popper2.addEventListener("mouseleave", function() {
4109
+ if (instance.props.interactive && instance.props.trigger.indexOf("mouseenter") >= 0) {
4110
+ getDocument().addEventListener("mousemove", debouncedOnMouseMove);
4111
+ }
4112
+ });
4113
+ return instance;
4114
+ function getNormalizedTouchSettings() {
4115
+ var touch = instance.props.touch;
4116
+ return Array.isArray(touch) ? touch : [touch, 0];
4117
+ }
4118
+ function getIsCustomTouchBehavior() {
4119
+ return getNormalizedTouchSettings()[0] === "hold";
4120
+ }
4121
+ function getIsDefaultRenderFn() {
4122
+ var _instance$props$rende;
4123
+ return !!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy);
4124
+ }
4125
+ function getCurrentTarget() {
4126
+ return currentTarget || reference2;
4127
+ }
4128
+ function getDocument() {
4129
+ var parent = getCurrentTarget().parentNode;
4130
+ return parent ? getOwnerDocument(parent) : document;
4131
+ }
4132
+ function getDefaultTemplateChildren() {
4133
+ return getChildren(popper2);
4134
+ }
4135
+ function getDelay(isShow) {
4136
+ if (instance.state.isMounted && !instance.state.isVisible || currentInput.isTouch || lastTriggerEvent && lastTriggerEvent.type === "focus") {
4137
+ return 0;
4138
+ }
4139
+ return getValueAtIndexOrReturn(instance.props.delay, isShow ? 0 : 1, defaultProps.delay);
4140
+ }
4141
+ function handleStyles(fromHide) {
4142
+ if (fromHide === void 0) {
4143
+ fromHide = false;
4144
+ }
4145
+ popper2.style.pointerEvents = instance.props.interactive && !fromHide ? "" : "none";
4146
+ popper2.style.zIndex = "" + instance.props.zIndex;
4147
+ }
4148
+ function invokeHook(hook, args, shouldInvokePropsHook) {
4149
+ if (shouldInvokePropsHook === void 0) {
4150
+ shouldInvokePropsHook = true;
4151
+ }
4152
+ pluginsHooks.forEach(function(pluginHooks) {
4153
+ if (pluginHooks[hook]) {
4154
+ pluginHooks[hook].apply(pluginHooks, args);
4155
+ }
4156
+ });
4157
+ if (shouldInvokePropsHook) {
4158
+ var _instance$props;
4159
+ (_instance$props = instance.props)[hook].apply(_instance$props, args);
4160
+ }
4161
+ }
4162
+ function handleAriaContentAttribute() {
4163
+ var aria = instance.props.aria;
4164
+ if (!aria.content) {
4165
+ return;
4166
+ }
4167
+ var attr = "aria-" + aria.content;
4168
+ var id2 = popper2.id;
4169
+ var nodes = normalizeToArray(instance.props.triggerTarget || reference2);
4170
+ nodes.forEach(function(node) {
4171
+ var currentValue = node.getAttribute(attr);
4172
+ if (instance.state.isVisible) {
4173
+ node.setAttribute(attr, currentValue ? currentValue + " " + id2 : id2);
4174
+ } else {
4175
+ var nextValue = currentValue && currentValue.replace(id2, "").trim();
4176
+ if (nextValue) {
4177
+ node.setAttribute(attr, nextValue);
4178
+ } else {
4179
+ node.removeAttribute(attr);
4180
+ }
4181
+ }
4182
+ });
4183
+ }
4184
+ function handleAriaExpandedAttribute() {
4185
+ if (hasAriaExpanded || !instance.props.aria.expanded) {
4186
+ return;
4187
+ }
4188
+ var nodes = normalizeToArray(instance.props.triggerTarget || reference2);
4189
+ nodes.forEach(function(node) {
4190
+ if (instance.props.interactive) {
4191
+ node.setAttribute("aria-expanded", instance.state.isVisible && node === getCurrentTarget() ? "true" : "false");
4192
+ } else {
4193
+ node.removeAttribute("aria-expanded");
4194
+ }
4195
+ });
4196
+ }
4197
+ function cleanupInteractiveMouseListeners() {
4198
+ getDocument().removeEventListener("mousemove", debouncedOnMouseMove);
4199
+ mouseMoveListeners = mouseMoveListeners.filter(function(listener) {
4200
+ return listener !== debouncedOnMouseMove;
4201
+ });
4202
+ }
4203
+ function onDocumentPress(event) {
4204
+ if (currentInput.isTouch) {
4205
+ if (didTouchMove || event.type === "mousedown") {
4206
+ return;
4207
+ }
4208
+ }
4209
+ var actualTarget = event.composedPath && event.composedPath()[0] || event.target;
4210
+ if (instance.props.interactive && actualContains(popper2, actualTarget)) {
4211
+ return;
4212
+ }
4213
+ if (normalizeToArray(instance.props.triggerTarget || reference2).some(function(el) {
4214
+ return actualContains(el, actualTarget);
4215
+ })) {
4216
+ if (currentInput.isTouch) {
4217
+ return;
4218
+ }
4219
+ if (instance.state.isVisible && instance.props.trigger.indexOf("click") >= 0) {
4220
+ return;
4221
+ }
4222
+ } else {
4223
+ invokeHook("onClickOutside", [instance, event]);
4224
+ }
4225
+ if (instance.props.hideOnClick === true) {
4226
+ instance.clearDelayTimeouts();
4227
+ instance.hide();
4228
+ didHideDueToDocumentMouseDown = true;
4229
+ setTimeout(function() {
4230
+ didHideDueToDocumentMouseDown = false;
4231
+ });
4232
+ if (!instance.state.isMounted) {
4233
+ removeDocumentPress();
4234
+ }
4235
+ }
4236
+ }
4237
+ function onTouchMove() {
4238
+ didTouchMove = true;
4239
+ }
4240
+ function onTouchStart() {
4241
+ didTouchMove = false;
4242
+ }
4243
+ function addDocumentPress() {
4244
+ var doc = getDocument();
4245
+ doc.addEventListener("mousedown", onDocumentPress, true);
4246
+ doc.addEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
4247
+ doc.addEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
4248
+ doc.addEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
4249
+ }
4250
+ function removeDocumentPress() {
4251
+ var doc = getDocument();
4252
+ doc.removeEventListener("mousedown", onDocumentPress, true);
4253
+ doc.removeEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
4254
+ doc.removeEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
4255
+ doc.removeEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
4256
+ }
4257
+ function onTransitionedOut(duration, callback) {
4258
+ onTransitionEnd(duration, function() {
4259
+ if (!instance.state.isVisible && popper2.parentNode && popper2.parentNode.contains(popper2)) {
4260
+ callback();
4261
+ }
4262
+ });
4263
+ }
4264
+ function onTransitionedIn(duration, callback) {
4265
+ onTransitionEnd(duration, callback);
4266
+ }
4267
+ function onTransitionEnd(duration, callback) {
4268
+ var box = getDefaultTemplateChildren().box;
4269
+ function listener(event) {
4270
+ if (event.target === box) {
4271
+ updateTransitionEndListener(box, "remove", listener);
4272
+ callback();
4273
+ }
4274
+ }
4275
+ if (duration === 0) {
4276
+ return callback();
4277
+ }
4278
+ updateTransitionEndListener(box, "remove", currentTransitionEndListener);
4279
+ updateTransitionEndListener(box, "add", listener);
4280
+ currentTransitionEndListener = listener;
4281
+ }
4282
+ function on(eventType, handler, options) {
4283
+ if (options === void 0) {
4284
+ options = false;
4285
+ }
4286
+ var nodes = normalizeToArray(instance.props.triggerTarget || reference2);
4287
+ nodes.forEach(function(node) {
4288
+ node.addEventListener(eventType, handler, options);
4289
+ listeners.push({
4290
+ node,
4291
+ eventType,
4292
+ handler,
4293
+ options
4294
+ });
4295
+ });
4296
+ }
4297
+ function addListeners() {
4298
+ if (getIsCustomTouchBehavior()) {
4299
+ on("touchstart", onTrigger2, {
4300
+ passive: true
4301
+ });
4302
+ on("touchend", onMouseLeave, {
4303
+ passive: true
4304
+ });
4305
+ }
4306
+ splitBySpaces(instance.props.trigger).forEach(function(eventType) {
4307
+ if (eventType === "manual") {
4308
+ return;
4309
+ }
4310
+ on(eventType, onTrigger2);
4311
+ switch (eventType) {
4312
+ case "mouseenter":
4313
+ on("mouseleave", onMouseLeave);
4314
+ break;
4315
+ case "focus":
4316
+ on(isIE11 ? "focusout" : "blur", onBlurOrFocusOut);
4317
+ break;
4318
+ case "focusin":
4319
+ on("focusout", onBlurOrFocusOut);
4320
+ break;
4321
+ }
4322
+ });
4323
+ }
4324
+ function removeListeners() {
4325
+ listeners.forEach(function(_ref) {
4326
+ var node = _ref.node, eventType = _ref.eventType, handler = _ref.handler, options = _ref.options;
4327
+ node.removeEventListener(eventType, handler, options);
4328
+ });
4329
+ listeners = [];
4330
+ }
4331
+ function onTrigger2(event) {
4332
+ var _lastTriggerEvent;
4333
+ var shouldScheduleClickHide = false;
4334
+ if (!instance.state.isEnabled || isEventListenerStopped(event) || didHideDueToDocumentMouseDown) {
4335
+ return;
4336
+ }
4337
+ var wasFocused = ((_lastTriggerEvent = lastTriggerEvent) == null ? void 0 : _lastTriggerEvent.type) === "focus";
4338
+ lastTriggerEvent = event;
4339
+ currentTarget = event.currentTarget;
4340
+ handleAriaExpandedAttribute();
4341
+ if (!instance.state.isVisible && isMouseEvent(event)) {
4342
+ mouseMoveListeners.forEach(function(listener) {
4343
+ return listener(event);
4344
+ });
4345
+ }
4346
+ if (event.type === "click" && (instance.props.trigger.indexOf("mouseenter") < 0 || isVisibleFromClick) && instance.props.hideOnClick !== false && instance.state.isVisible) {
4347
+ shouldScheduleClickHide = true;
4348
+ } else {
4349
+ scheduleShow(event);
4350
+ }
4351
+ if (event.type === "click") {
4352
+ isVisibleFromClick = !shouldScheduleClickHide;
4353
+ }
4354
+ if (shouldScheduleClickHide && !wasFocused) {
4355
+ scheduleHide(event);
4356
+ }
4357
+ }
4358
+ function onMouseMove(event) {
4359
+ var target = event.target;
4360
+ var isCursorOverReferenceOrPopper = getCurrentTarget().contains(target) || popper2.contains(target);
4361
+ if (event.type === "mousemove" && isCursorOverReferenceOrPopper) {
4362
+ return;
4363
+ }
4364
+ var popperTreeData = getNestedPopperTree().concat(popper2).map(function(popper3) {
4365
+ var _instance$popperInsta;
4366
+ var instance2 = popper3._tippy;
4367
+ var state2 = (_instance$popperInsta = instance2.popperInstance) == null ? void 0 : _instance$popperInsta.state;
4368
+ if (state2) {
4369
+ return {
4370
+ popperRect: popper3.getBoundingClientRect(),
4371
+ popperState: state2,
4372
+ props
4373
+ };
4374
+ }
4375
+ return null;
4376
+ }).filter(Boolean);
4377
+ if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {
4378
+ cleanupInteractiveMouseListeners();
4379
+ scheduleHide(event);
4380
+ }
4381
+ }
4382
+ function onMouseLeave(event) {
4383
+ var shouldBail = isEventListenerStopped(event) || instance.props.trigger.indexOf("click") >= 0 && isVisibleFromClick;
4384
+ if (shouldBail) {
4385
+ return;
4386
+ }
4387
+ if (instance.props.interactive) {
4388
+ instance.hideWithInteractivity(event);
4389
+ return;
4390
+ }
4391
+ scheduleHide(event);
4392
+ }
4393
+ function onBlurOrFocusOut(event) {
4394
+ if (instance.props.trigger.indexOf("focusin") < 0 && event.target !== getCurrentTarget()) {
4395
+ return;
4396
+ }
4397
+ if (instance.props.interactive && event.relatedTarget && popper2.contains(event.relatedTarget)) {
4398
+ return;
4399
+ }
4400
+ scheduleHide(event);
4401
+ }
4402
+ function isEventListenerStopped(event) {
4403
+ return currentInput.isTouch ? getIsCustomTouchBehavior() !== event.type.indexOf("touch") >= 0 : false;
4404
+ }
4405
+ function createPopperInstance() {
4406
+ destroyPopperInstance();
4407
+ var _instance$props2 = instance.props, popperOptions = _instance$props2.popperOptions, placement = _instance$props2.placement, offset2 = _instance$props2.offset, getReferenceClientRect = _instance$props2.getReferenceClientRect, moveTransition = _instance$props2.moveTransition;
4408
+ var arrow2 = getIsDefaultRenderFn() ? getChildren(popper2).arrow : null;
4409
+ var computedReference = getReferenceClientRect ? {
4410
+ getBoundingClientRect: getReferenceClientRect,
4411
+ contextElement: getReferenceClientRect.contextElement || getCurrentTarget()
4412
+ } : reference2;
4413
+ var tippyModifier = {
4414
+ name: "$$tippy",
4415
+ enabled: true,
4416
+ phase: "beforeWrite",
4417
+ requires: ["computeStyles"],
4418
+ fn: function fn2(_ref2) {
4419
+ var state2 = _ref2.state;
4420
+ if (getIsDefaultRenderFn()) {
4421
+ var _getDefaultTemplateCh = getDefaultTemplateChildren(), box = _getDefaultTemplateCh.box;
4422
+ ["placement", "reference-hidden", "escaped"].forEach(function(attr) {
4423
+ if (attr === "placement") {
4424
+ box.setAttribute("data-placement", state2.placement);
4425
+ } else {
4426
+ if (state2.attributes.popper["data-popper-" + attr]) {
4427
+ box.setAttribute("data-" + attr, "");
4428
+ } else {
4429
+ box.removeAttribute("data-" + attr);
4430
+ }
4431
+ }
4432
+ });
4433
+ state2.attributes.popper = {};
4434
+ }
4435
+ }
4436
+ };
4437
+ var modifiers = [{
4438
+ name: "offset",
4439
+ options: {
4440
+ offset: offset2
4441
+ }
4442
+ }, {
4443
+ name: "preventOverflow",
4444
+ options: {
4445
+ padding: {
4446
+ top: 2,
4447
+ bottom: 2,
4448
+ left: 5,
4449
+ right: 5
4450
+ }
4451
+ }
4452
+ }, {
4453
+ name: "flip",
4454
+ options: {
4455
+ padding: 5
4456
+ }
4457
+ }, {
4458
+ name: "computeStyles",
4459
+ options: {
4460
+ adaptive: !moveTransition
4461
+ }
4462
+ }, tippyModifier];
4463
+ if (getIsDefaultRenderFn() && arrow2) {
4464
+ modifiers.push({
4465
+ name: "arrow",
4466
+ options: {
4467
+ element: arrow2,
4468
+ padding: 3
4469
+ }
4470
+ });
4471
+ }
4472
+ modifiers.push.apply(modifiers, (popperOptions == null ? void 0 : popperOptions.modifiers) || []);
4473
+ instance.popperInstance = createPopper(computedReference, popper2, Object.assign({}, popperOptions, {
4474
+ placement,
4475
+ onFirstUpdate,
4476
+ modifiers
4477
+ }));
4478
+ }
4479
+ function destroyPopperInstance() {
4480
+ if (instance.popperInstance) {
4481
+ instance.popperInstance.destroy();
4482
+ instance.popperInstance = null;
4483
+ }
4484
+ }
4485
+ function mount2() {
4486
+ var appendTo = instance.props.appendTo;
4487
+ var parentNode;
4488
+ var node = getCurrentTarget();
4489
+ if (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO || appendTo === "parent") {
4490
+ parentNode = node.parentNode;
4491
+ } else {
4492
+ parentNode = invokeWithArgsOrReturn(appendTo, [node]);
4493
+ }
4494
+ if (!parentNode.contains(popper2)) {
4495
+ parentNode.appendChild(popper2);
4496
+ }
4497
+ instance.state.isMounted = true;
4498
+ createPopperInstance();
4499
+ if (true) {
4500
+ warnWhen(instance.props.interactive && appendTo === defaultProps.appendTo && node.nextElementSibling !== popper2, ["Interactive tippy element may not be accessible via keyboard", "navigation because it is not directly after the reference element", "in the DOM source order.", "\n\n", "Using a wrapper <div> or <span> tag around the reference element", "solves this by creating a new parentNode context.", "\n\n", "Specifying `appendTo: document.body` silences this warning, but it", "assumes you are using a focus management solution to handle", "keyboard navigation.", "\n\n", "See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity"].join(" "));
4501
+ }
4502
+ }
4503
+ function getNestedPopperTree() {
4504
+ return arrayFrom(popper2.querySelectorAll("[data-tippy-root]"));
4505
+ }
4506
+ function scheduleShow(event) {
4507
+ instance.clearDelayTimeouts();
4508
+ if (event) {
4509
+ invokeHook("onTrigger", [instance, event]);
4510
+ }
4511
+ addDocumentPress();
4512
+ var delay = getDelay(true);
4513
+ var _getNormalizedTouchSe = getNormalizedTouchSettings(), touchValue = _getNormalizedTouchSe[0], touchDelay = _getNormalizedTouchSe[1];
4514
+ if (currentInput.isTouch && touchValue === "hold" && touchDelay) {
4515
+ delay = touchDelay;
4516
+ }
4517
+ if (delay) {
4518
+ showTimeout = setTimeout(function() {
4519
+ instance.show();
4520
+ }, delay);
4521
+ } else {
4522
+ instance.show();
4523
+ }
4524
+ }
4525
+ function scheduleHide(event) {
4526
+ instance.clearDelayTimeouts();
4527
+ invokeHook("onUntrigger", [instance, event]);
4528
+ if (!instance.state.isVisible) {
4529
+ removeDocumentPress();
4530
+ return;
4531
+ }
4532
+ if (instance.props.trigger.indexOf("mouseenter") >= 0 && instance.props.trigger.indexOf("click") >= 0 && ["mouseleave", "mousemove"].indexOf(event.type) >= 0 && isVisibleFromClick) {
4533
+ return;
4534
+ }
4535
+ var delay = getDelay(false);
4536
+ if (delay) {
4537
+ hideTimeout = setTimeout(function() {
4538
+ if (instance.state.isVisible) {
4539
+ instance.hide();
4540
+ }
4541
+ }, delay);
4542
+ } else {
4543
+ scheduleHideAnimationFrame = requestAnimationFrame(function() {
4544
+ instance.hide();
4545
+ });
4546
+ }
4547
+ }
4548
+ function enable() {
4549
+ instance.state.isEnabled = true;
4550
+ }
4551
+ function disable() {
4552
+ instance.hide();
4553
+ instance.state.isEnabled = false;
4554
+ }
4555
+ function clearDelayTimeouts() {
4556
+ clearTimeout(showTimeout);
4557
+ clearTimeout(hideTimeout);
4558
+ cancelAnimationFrame(scheduleHideAnimationFrame);
4559
+ }
4560
+ function setProps(partialProps) {
4561
+ if (true) {
4562
+ warnWhen(instance.state.isDestroyed, createMemoryLeakWarning("setProps"));
4563
+ }
4564
+ if (instance.state.isDestroyed) {
4565
+ return;
4566
+ }
4567
+ invokeHook("onBeforeUpdate", [instance, partialProps]);
4568
+ removeListeners();
4569
+ var prevProps = instance.props;
4570
+ var nextProps = evaluateProps(reference2, Object.assign({}, prevProps, removeUndefinedProps(partialProps), {
4571
+ ignoreAttributes: true
4572
+ }));
4573
+ instance.props = nextProps;
4574
+ addListeners();
4575
+ if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {
4576
+ cleanupInteractiveMouseListeners();
4577
+ debouncedOnMouseMove = debounce2(onMouseMove, nextProps.interactiveDebounce);
4578
+ }
4579
+ if (prevProps.triggerTarget && !nextProps.triggerTarget) {
4580
+ normalizeToArray(prevProps.triggerTarget).forEach(function(node) {
4581
+ node.removeAttribute("aria-expanded");
4582
+ });
4583
+ } else if (nextProps.triggerTarget) {
4584
+ reference2.removeAttribute("aria-expanded");
4585
+ }
4586
+ handleAriaExpandedAttribute();
4587
+ handleStyles();
4588
+ if (onUpdate) {
4589
+ onUpdate(prevProps, nextProps);
4590
+ }
4591
+ if (instance.popperInstance) {
4592
+ createPopperInstance();
4593
+ getNestedPopperTree().forEach(function(nestedPopper) {
4594
+ requestAnimationFrame(nestedPopper._tippy.popperInstance.forceUpdate);
4595
+ });
4596
+ }
4597
+ invokeHook("onAfterUpdate", [instance, partialProps]);
4598
+ }
4599
+ function setContent2(content) {
4600
+ instance.setProps({
4601
+ content
4602
+ });
4603
+ }
4604
+ function show() {
4605
+ if (true) {
4606
+ warnWhen(instance.state.isDestroyed, createMemoryLeakWarning("show"));
4607
+ }
4608
+ var isAlreadyVisible = instance.state.isVisible;
4609
+ var isDestroyed = instance.state.isDestroyed;
4610
+ var isDisabled = !instance.state.isEnabled;
4611
+ var isTouchAndTouchDisabled = currentInput.isTouch && !instance.props.touch;
4612
+ var duration = getValueAtIndexOrReturn(instance.props.duration, 0, defaultProps.duration);
4613
+ if (isAlreadyVisible || isDestroyed || isDisabled || isTouchAndTouchDisabled) {
4614
+ return;
4615
+ }
4616
+ if (getCurrentTarget().hasAttribute("disabled")) {
4617
+ return;
4618
+ }
4619
+ invokeHook("onShow", [instance], false);
4620
+ if (instance.props.onShow(instance) === false) {
4621
+ return;
4622
+ }
4623
+ instance.state.isVisible = true;
4624
+ if (getIsDefaultRenderFn()) {
4625
+ popper2.style.visibility = "visible";
4626
+ }
4627
+ handleStyles();
4628
+ addDocumentPress();
4629
+ if (!instance.state.isMounted) {
4630
+ popper2.style.transition = "none";
4631
+ }
4632
+ if (getIsDefaultRenderFn()) {
4633
+ var _getDefaultTemplateCh2 = getDefaultTemplateChildren(), box = _getDefaultTemplateCh2.box, content = _getDefaultTemplateCh2.content;
4634
+ setTransitionDuration([box, content], 0);
4635
+ }
4636
+ onFirstUpdate = function onFirstUpdate2() {
4637
+ var _instance$popperInsta2;
4638
+ if (!instance.state.isVisible || ignoreOnFirstUpdate) {
4639
+ return;
4640
+ }
4641
+ ignoreOnFirstUpdate = true;
4642
+ void popper2.offsetHeight;
4643
+ popper2.style.transition = instance.props.moveTransition;
4644
+ if (getIsDefaultRenderFn() && instance.props.animation) {
4645
+ var _getDefaultTemplateCh3 = getDefaultTemplateChildren(), _box = _getDefaultTemplateCh3.box, _content = _getDefaultTemplateCh3.content;
4646
+ setTransitionDuration([_box, _content], duration);
4647
+ setVisibilityState([_box, _content], "visible");
4648
+ }
4649
+ handleAriaContentAttribute();
4650
+ handleAriaExpandedAttribute();
4651
+ pushIfUnique(mountedInstances, instance);
4652
+ (_instance$popperInsta2 = instance.popperInstance) == null ? void 0 : _instance$popperInsta2.forceUpdate();
4653
+ invokeHook("onMount", [instance]);
4654
+ if (instance.props.animation && getIsDefaultRenderFn()) {
4655
+ onTransitionedIn(duration, function() {
4656
+ instance.state.isShown = true;
4657
+ invokeHook("onShown", [instance]);
4658
+ });
4659
+ }
4660
+ };
4661
+ mount2();
4662
+ }
4663
+ function hide2() {
4664
+ if (true) {
4665
+ warnWhen(instance.state.isDestroyed, createMemoryLeakWarning("hide"));
4666
+ }
4667
+ var isAlreadyHidden = !instance.state.isVisible;
4668
+ var isDestroyed = instance.state.isDestroyed;
4669
+ var isDisabled = !instance.state.isEnabled;
4670
+ var duration = getValueAtIndexOrReturn(instance.props.duration, 1, defaultProps.duration);
4671
+ if (isAlreadyHidden || isDestroyed || isDisabled) {
4672
+ return;
4673
+ }
4674
+ invokeHook("onHide", [instance], false);
4675
+ if (instance.props.onHide(instance) === false) {
4676
+ return;
4677
+ }
4678
+ instance.state.isVisible = false;
4679
+ instance.state.isShown = false;
4680
+ ignoreOnFirstUpdate = false;
4681
+ isVisibleFromClick = false;
4682
+ if (getIsDefaultRenderFn()) {
4683
+ popper2.style.visibility = "hidden";
4684
+ }
4685
+ cleanupInteractiveMouseListeners();
4686
+ removeDocumentPress();
4687
+ handleStyles(true);
4688
+ if (getIsDefaultRenderFn()) {
4689
+ var _getDefaultTemplateCh4 = getDefaultTemplateChildren(), box = _getDefaultTemplateCh4.box, content = _getDefaultTemplateCh4.content;
4690
+ if (instance.props.animation) {
4691
+ setTransitionDuration([box, content], duration);
4692
+ setVisibilityState([box, content], "hidden");
4693
+ }
4694
+ }
4695
+ handleAriaContentAttribute();
4696
+ handleAriaExpandedAttribute();
4697
+ if (instance.props.animation) {
4698
+ if (getIsDefaultRenderFn()) {
4699
+ onTransitionedOut(duration, instance.unmount);
4700
+ }
4701
+ } else {
4702
+ instance.unmount();
4703
+ }
4704
+ }
4705
+ function hideWithInteractivity(event) {
4706
+ if (true) {
4707
+ warnWhen(instance.state.isDestroyed, createMemoryLeakWarning("hideWithInteractivity"));
4708
+ }
4709
+ getDocument().addEventListener("mousemove", debouncedOnMouseMove);
4710
+ pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);
4711
+ debouncedOnMouseMove(event);
4712
+ }
4713
+ function unmount() {
4714
+ if (true) {
4715
+ warnWhen(instance.state.isDestroyed, createMemoryLeakWarning("unmount"));
4716
+ }
4717
+ if (instance.state.isVisible) {
4718
+ instance.hide();
4719
+ }
4720
+ if (!instance.state.isMounted) {
4721
+ return;
4722
+ }
4723
+ destroyPopperInstance();
4724
+ getNestedPopperTree().forEach(function(nestedPopper) {
4725
+ nestedPopper._tippy.unmount();
4726
+ });
4727
+ if (popper2.parentNode) {
4728
+ popper2.parentNode.removeChild(popper2);
4729
+ }
4730
+ mountedInstances = mountedInstances.filter(function(i) {
4731
+ return i !== instance;
4732
+ });
4733
+ instance.state.isMounted = false;
4734
+ invokeHook("onHidden", [instance]);
4735
+ }
4736
+ function destroy() {
4737
+ if (true) {
4738
+ warnWhen(instance.state.isDestroyed, createMemoryLeakWarning("destroy"));
4739
+ }
4740
+ if (instance.state.isDestroyed) {
4741
+ return;
4742
+ }
4743
+ instance.clearDelayTimeouts();
4744
+ instance.unmount();
4745
+ removeListeners();
4746
+ delete reference2._tippy;
4747
+ instance.state.isDestroyed = true;
4748
+ invokeHook("onDestroy", [instance]);
4749
+ }
4750
+ }
4751
+ function tippy(targets, optionalProps) {
4752
+ if (optionalProps === void 0) {
4753
+ optionalProps = {};
4754
+ }
4755
+ var plugins = defaultProps.plugins.concat(optionalProps.plugins || []);
4756
+ if (true) {
4757
+ validateTargets(targets);
4758
+ validateProps(optionalProps, plugins);
4759
+ }
4760
+ bindGlobalEventListeners();
4761
+ var passedProps = Object.assign({}, optionalProps, {
4762
+ plugins
4763
+ });
4764
+ var elements = getArrayOfElements(targets);
4765
+ if (true) {
4766
+ var isSingleContentElement = isElement2(passedProps.content);
4767
+ var isMoreThanOneReferenceElement = elements.length > 1;
4768
+ warnWhen(isSingleContentElement && isMoreThanOneReferenceElement, ["tippy() was passed an Element as the `content` prop, but more than", "one tippy instance was created by this invocation. This means the", "content element will only be appended to the last tippy instance.", "\n\n", "Instead, pass the .innerHTML of the element, or use a function that", "returns a cloned version of the element instead.", "\n\n", "1) content: element.innerHTML\n", "2) content: () => element.cloneNode(true)"].join(" "));
4769
+ }
4770
+ var instances2 = elements.reduce(function(acc, reference2) {
4771
+ var instance = reference2 && createTippy(reference2, passedProps);
4772
+ if (instance) {
4773
+ acc.push(instance);
4774
+ }
4775
+ return acc;
4776
+ }, []);
4777
+ return isElement2(targets) ? instances2[0] : instances2;
4778
+ }
4779
+ tippy.defaultProps = defaultProps;
4780
+ tippy.setDefaultProps = setDefaultProps;
4781
+ tippy.currentInput = currentInput;
4782
+ var applyStylesModifier = Object.assign({}, applyStyles_default, {
4783
+ effect: function effect4(_ref) {
4784
+ var state = _ref.state;
4785
+ var initialStyles = {
4786
+ popper: {
4787
+ position: state.options.strategy,
4788
+ left: "0",
4789
+ top: "0",
4790
+ margin: "0"
4791
+ },
4792
+ arrow: {
4793
+ position: "absolute"
4794
+ },
4795
+ reference: {}
4796
+ };
4797
+ Object.assign(state.elements.popper.style, initialStyles.popper);
4798
+ state.styles = initialStyles;
4799
+ if (state.elements.arrow) {
4800
+ Object.assign(state.elements.arrow.style, initialStyles.arrow);
4801
+ }
4802
+ }
4803
+ });
4804
+ tippy.setDefaultProps({
4805
+ render
4806
+ });
4807
+ var tippy_esm_default = tippy;
4808
+
4809
+ // src/components/tippy-util.ts
4810
+ var instances = /* @__PURE__ */ new Set();
4811
+ function onCreate2(instance) {
4812
+ instances.add(instance);
4813
+ }
4814
+ function onDestroy2(instance) {
4815
+ instances.delete(instance);
4816
+ }
4817
+ tippy_esm_default.setDefaultProps({ onCreate: onCreate2, onDestroy: onDestroy2 });
4818
+ function hideAll() {
4819
+ instances.forEach((instance) => instance.hide());
4820
+ }
4821
+
4822
+ // src/components/Fastboard.tsx
4823
+ var Fastboard = /* @__PURE__ */ forwardRef3(function Fastboard2(_a, ref) {
4824
+ var _b = _a, { app, theme, layout, language } = _b, restProps = __objRest(_b, ["app", "theme", "layout", "language"]);
4825
+ if (!app) {
4826
+ return /* @__PURE__ */ React50.createElement("div", __spreadValues({
4827
+ className: "fastboard-root",
4828
+ ref
4829
+ }, restProps));
4830
+ }
4831
+ return /* @__PURE__ */ React50.createElement(FastboardAppContext.Provider, {
4832
+ value: app
4833
+ }, /* @__PURE__ */ React50.createElement(FastboardInternal, __spreadValues(__spreadValues({
4834
+ forwardedRef: ref
4835
+ }, { theme, layout, language }), restProps)));
4836
+ });
4837
+ function FastboardInternal(_a) {
4838
+ var _b = _a, {
4839
+ forwardedRef,
4840
+ language,
4841
+ layout = {},
4842
+ theme = "light",
4843
+ children
4844
+ } = _b, restProps = __objRest(_b, [
4845
+ "forwardedRef",
4846
+ "language",
4847
+ "layout",
4848
+ "theme",
4849
+ "children"
4850
+ ]);
4851
+ const app = useFastboardApp();
4852
+ const forceUpdate = useForceUpdate();
4853
+ const i18n = useAsyncValue(() => createI18n({ language }));
4854
+ useEffect6(() => {
4855
+ if (i18n)
4856
+ i18n.changeLanguage(language);
4857
+ forceUpdate();
4858
+ }, [forceUpdate, i18n, language]);
4859
+ useEffect6(() => {
4860
+ app.manager.setPrefersColorScheme(theme);
4861
+ }, [app, theme]);
4862
+ const useWhiteboard = useCallback13((container) => {
4863
+ if (container && app)
4864
+ app.bindContainer(container);
4865
+ }, [app]);
4866
+ const hideControls = useHideControls();
4867
+ const showControls = !hideControls;
4868
+ const {
4869
+ Toolbar: toolbar = showControls || hideControls === "toolbar-only",
4870
+ RedoUndo: redo_undo = showControls,
4871
+ ZoomControl: zoom_control = showControls,
4872
+ PageControl: page_control = showControls
4873
+ } = layout;
4874
+ return /* @__PURE__ */ React50.createElement(ThemeContext.Provider, {
4875
+ value: theme
4876
+ }, /* @__PURE__ */ React50.createElement(I18nContext.Provider, {
4877
+ value: i18n
4878
+ }, /* @__PURE__ */ React50.createElement("div", __spreadProps(__spreadValues({}, restProps), {
4879
+ className: "fastboard-root",
4880
+ ref: forwardedRef
4881
+ }), /* @__PURE__ */ React50.createElement("div", {
4882
+ className: "fastboard-view",
4883
+ ref: useWhiteboard,
4884
+ onTouchStartCapture: hideAll
4885
+ }), children ? children : /* @__PURE__ */ React50.createElement(React50.Fragment, null, toolbar && /* @__PURE__ */ React50.createElement("div", {
4886
+ className: "fastboard-left"
4887
+ }, /* @__PURE__ */ React50.createElement(Toolbar, null)), (redo_undo || zoom_control) && /* @__PURE__ */ React50.createElement("div", {
4888
+ className: "fastboard-bottom-left"
4889
+ }, redo_undo && /* @__PURE__ */ React50.createElement(RedoUndo, null), zoom_control && /* @__PURE__ */ React50.createElement(ZoomControl, null)), page_control && /* @__PURE__ */ React50.createElement("div", {
4890
+ className: "fastboard-bottom-right"
4891
+ }, /* @__PURE__ */ React50.createElement(PageControl, null))))));
4892
+ }
4893
+
4894
+ // src/components/ReplayFastboard.tsx
4895
+ import React51, { forwardRef as forwardRef4, useCallback as useCallback14 } from "react";
4896
+ var ReplayFastboard = /* @__PURE__ */ forwardRef4(function ReplayFastboard2(_a, ref) {
4897
+ var _b = _a, { player, theme = "light", autoHideControl = false } = _b, restProps = __objRest(_b, ["player", "theme", "autoHideControl"]);
4898
+ const useWhiteboard = useCallback14((container) => {
4899
+ if (container && player)
4900
+ player.bindContainer(container);
4901
+ }, [player]);
4902
+ if (!player) {
4903
+ return /* @__PURE__ */ React51.createElement("div", __spreadValues({
4904
+ className: "fastboard-root",
4905
+ ref
4906
+ }, restProps));
4907
+ }
4908
+ return /* @__PURE__ */ React51.createElement("div", __spreadValues({
4909
+ className: "fastboard-root",
4910
+ ref
4911
+ }, restProps), /* @__PURE__ */ React51.createElement("div", {
4912
+ className: "fastboard-view",
4913
+ ref: useWhiteboard
4914
+ }), /* @__PURE__ */ React51.createElement("div", {
4915
+ className: "fastboard-bottom"
4916
+ }, /* @__PURE__ */ React51.createElement(PlayerControl, {
4917
+ player,
4918
+ theme,
4919
+ autoHide: autoHideControl
4920
+ })));
4921
+ });
4922
+
4923
+ // src/vanilla/index.tsx
4924
+ import React52 from "react";
4925
+ import ReactDOM from "react-dom";
4926
+ function mount(app, dom, props) {
4927
+ ReactDOM.render(/* @__PURE__ */ React52.createElement(Fastboard, __spreadValues({
4928
+ app
4929
+ }, props)), dom);
4930
+ return {
4931
+ update(props2) {
4932
+ ReactDOM.render(/* @__PURE__ */ React52.createElement(Fastboard, __spreadValues({
4933
+ app
4934
+ }, props2)), dom);
4935
+ },
4936
+ destroy() {
4937
+ ReactDOM.unmountComponentAtNode(dom);
4938
+ }
4939
+ };
2003
4940
  }
2004
4941
  export {
2005
4942
  EmptyToolbarHook,
@@ -2008,11 +4945,13 @@ export {
2008
4945
  PageControl,
2009
4946
  PlayerControl,
2010
4947
  RedoUndo,
4948
+ ReplayFastboard,
2011
4949
  ScalePoints,
2012
4950
  ThemeContext,
2013
4951
  Toolbar,
2014
4952
  ZoomControl,
2015
4953
  mount,
4954
+ useAppsStatus,
2016
4955
  useBoxState,
2017
4956
  useFastboardApp,
2018
4957
  useFastboardValue,