@netless/app-slide 0.0.32 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.es.js CHANGED
@@ -35471,9 +35471,9 @@ cs.get.rgb = function(string) {
35471
35471
  }
35472
35472
  var abbr = /^#([a-f0-9]{3,4})$/i;
35473
35473
  var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;
35474
- var rgba = /^rgba?\(\s*([+-]?\d+)\s*,?\s*([+-]?\d+)\s*,?\s*([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
35474
+ var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
35475
35475
  var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
35476
- var keyword = /(\w+)/;
35476
+ var keyword = /^(\w+)$/;
35477
35477
  var rgb = [0, 0, 0, 1];
35478
35478
  var match;
35479
35479
  var i;
@@ -35503,7 +35503,7 @@ cs.get.rgb = function(string) {
35503
35503
  }
35504
35504
  if (match[4]) {
35505
35505
  if (match[5]) {
35506
- rgb[3] = parseInt(match[4], 0) * 0.01;
35506
+ rgb[3] = parseFloat(match[4]) * 0.01;
35507
35507
  } else {
35508
35508
  rgb[3] = parseFloat(match[4]);
35509
35509
  }
@@ -35514,7 +35514,7 @@ cs.get.rgb = function(string) {
35514
35514
  }
35515
35515
  if (match[4]) {
35516
35516
  if (match[5]) {
35517
- rgb[3] = parseInt(match[4], 0) * 0.01;
35517
+ rgb[3] = parseFloat(match[4]) * 0.01;
35518
35518
  } else {
35519
35519
  rgb[3] = parseFloat(match[4]);
35520
35520
  }
@@ -35542,7 +35542,7 @@ cs.get.hsl = function(string) {
35542
35542
  if (!string) {
35543
35543
  return null;
35544
35544
  }
35545
- var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?[\d\.]+)\s*)?\)$/;
35545
+ var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
35546
35546
  var match = string.match(hsl);
35547
35547
  if (match) {
35548
35548
  var alpha = parseFloat(match[4]);
@@ -35558,7 +35558,7 @@ cs.get.hwb = function(string) {
35558
35558
  if (!string) {
35559
35559
  return null;
35560
35560
  }
35561
- var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/;
35561
+ var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
35562
35562
  var match = string.match(hwb);
35563
35563
  if (match) {
35564
35564
  var alpha = parseFloat(match[4]);
@@ -36638,7 +36638,7 @@ if (runningOnBrowser) {
36638
36638
  autoInitialize(LazyLoad, window.lazyLoadOptions);
36639
36639
  }
36640
36640
  class DocsViewer {
36641
- constructor({ readonly, box, onNewPageIndex, onPlay }) {
36641
+ constructor({ readonly, onNewPageIndex, onPlay }) {
36642
36642
  this._pages = [];
36643
36643
  this.pageIndex = 0;
36644
36644
  this.setPaused = () => {
@@ -36652,7 +36652,6 @@ class DocsViewer {
36652
36652
  this.isSmallBox = false;
36653
36653
  this.sideEffect = new o();
36654
36654
  this.readonly = readonly;
36655
- this.box = box;
36656
36655
  this.onNewPageIndex = onNewPageIndex;
36657
36656
  this.onPlay = onPlay;
36658
36657
  this.render();
@@ -36666,10 +36665,6 @@ class DocsViewer {
36666
36665
  get pages() {
36667
36666
  return this._pages;
36668
36667
  }
36669
- mount() {
36670
- this.box.mountContent(this.$content);
36671
- this.box.mountFooter(this.$footer);
36672
- }
36673
36668
  unmount() {
36674
36669
  this.$content.remove();
36675
36670
  this.$footer.remove();
@@ -36962,7 +36957,6 @@ class SlideDocsViewer {
36962
36957
  this.mountSlideController = mountSlideController;
36963
36958
  this.mountWhiteboard = mountWhiteboard;
36964
36959
  this.viewer = new DocsViewer({
36965
- box,
36966
36960
  readonly: box.readonly,
36967
36961
  onNewPageIndex: this.onNewPageIndex,
36968
36962
  onPlay: this.onPlay
@@ -37013,7 +37007,8 @@ class SlideDocsViewer {
37013
37007
  return this.$whiteboardView;
37014
37008
  }
37015
37009
  mount() {
37016
- this.viewer.mount();
37010
+ this.box.mountContent(this.viewer.$content);
37011
+ this.box.mountFooter(this.viewer.$footer);
37017
37012
  this.slideController = this.mountSlideController({
37018
37013
  anchor: this.$slide,
37019
37014
  onTransitionStart: this.viewer.setPlaying,
@@ -37102,6 +37097,157 @@ const addHooks = (emitter) => {
37102
37097
  });
37103
37098
  };
37104
37099
  var styles = ".netless-app-slide-content{position:relative;height:100%;overflow:hidden}.netless-app-slide-preview-mask{display:none;position:absolute;z-index:200;top:0;left:0;width:100%;height:100%}.netless-app-slide-preview{display:flex;flex-direction:column;align-items:center;position:absolute;z-index:300;top:0;left:0;width:33%;max-width:200px;height:100%;padding-top:10px;transform:translate(-100%);background:rgba(237,237,240,.9);box-shadow:inset -1px 0 #0000001c;transition:transform .4s}.netless-app-slide-preview-active .netless-app-slide-preview-mask{display:block}.netless-app-slide-preview-active .netless-app-slide-preview{transform:translate(0)}.netless-app-slide-preview-page{position:relative;display:block;width:55%;margin-bottom:10px;font-size:0;color:transparent;outline:none;border:7px solid transparent;border-radius:4px;transition:border-color .3s;user-select:none}.netless-app-slide-preview-page:hover,.netless-app-slide-preview-page.netless-app-slide-preview-page-active{border-color:#444e601a}.netless-app-slide-preview-page>img{width:100%;height:auto;box-sizing:border-box;border:1px solid rgba(0,0,0,.5);border-radius:1px;background-color:#fff;box-shadow:0 2px 8px #0000004d}.netless-app-slide-preview-page-name{position:absolute;top:1px;left:-10px;transform:translate(-100%);text-align:right;font-size:12px;color:#5f5f5f;user-select:none}.netless-app-slide-footer{box-sizing:border-box;height:26px;display:flex;align-items:center;padding:0 16px;border-top:1px solid #eeeef7;color:#191919}.netless-app-slide-float-footer{width:100%;min-height:26px;position:absolute;left:0;bottom:0;z-index:2000;background:rgba(249,249,252,.9);transition:opacity .4s}.netless-app-slide-footer-btn{box-sizing:border-box;width:26px;height:26px;font-size:0;margin:0;padding:3px;border:none;border-radius:1px;outline:none;color:currentColor;background:transparent;transition:background .4s;cursor:pointer;user-select:none}.netless-app-slide-footer-btn:hover{background:rgba(237,237,240,.9)}.netless-app-slide-footer-btn>svg{width:100%;height:100%}.netless-app-slide-footer-btn>svg:nth-of-type(2){display:none}.netless-app-slide-footer-btn.netless-app-slide-footer-btn-playing>svg:nth-of-type(1){display:none}.netless-app-slide-footer-btn.netless-app-slide-footer-btn-playing>svg:nth-of-type(2){display:initial}.netless-app-slide-footer-btn~.netless-app-slide-footer-btn{margin-left:15px}.netless-app-slide-page-jumps{flex:1;display:flex;justify-content:center;align-items:center}.netless-app-slide-page-number{margin-left:auto;font-size:13px;user-select:none;white-space:nowrap;word-break:keep-all}.netless-app-slide-page-number-input{border:none;outline:none;width:1.5em;text-align:right;border-radius:2px;color:currentColor;background:transparent;transition:background .4s;user-select:text}.netless-app-slide-page-number-input:hover,.netless-app-slide-page-number-input:focus,.netless-app-slide-page-number-input:active{background:#fff;box-shadow:#63636333 0 2px 8px}.netless-app-slide-readonly .netless-app-slide-footer-btn{cursor:not-allowed}.netless-app-slide-readonly .netless-app-slide-footer-btn:hover{background:transparent}.netless-app-slide-readonly .netless-app-slide-page-number-input{cursor:not-allowed}.netless-app-slide-readonly .netless-app-slide-page-number-input:hover,.netless-app-slide-readonly .netless-app-slide-page-number-input:focus,.netless-app-slide-readonly .netless-app-slide-page-number-input:active{background:transparent;box-shadow:none}.netless-app-slide-readonly .netless-app-slide-page-number-input:disabled{color:inherit}.netless-app-slide-readonly.netless-app-slide-float-footer{display:none}.netless-app-slide-wb-view{position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;overflow:hidden}.netless-app-slide-slide{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.netless-app-slide-slide canvas{transform:scale(var(--netless-app-slide-scale, 1))}\n";
37100
+ function previewSlide({
37101
+ container,
37102
+ taskId,
37103
+ url = DefaultUrl,
37104
+ debug = false
37105
+ }) {
37106
+ if (!taskId) {
37107
+ throw new Error("[Slide] taskId is required");
37108
+ }
37109
+ container.style.cssText += `display:flex;flex-direction:column`;
37110
+ const previewer = new SlidePreviewer({ target: container });
37111
+ previewer.debug = !!debug;
37112
+ previewer.mount(taskId, url);
37113
+ return previewer;
37114
+ }
37115
+ class SlidePreviewer {
37116
+ constructor(config) {
37117
+ this.slide = null;
37118
+ this.debug = false;
37119
+ this.sideEffect = new o();
37120
+ this.ready = false;
37121
+ this.readyPromise = new Promise((resolve) => {
37122
+ this.resolveReady = () => {
37123
+ this.ready = true;
37124
+ resolve();
37125
+ };
37126
+ });
37127
+ this.onPageChanged = (page) => {
37128
+ this.viewer.setPageIndex(page - 1);
37129
+ };
37130
+ this.onTransitionStart = () => {
37131
+ this.viewer.setPlaying();
37132
+ };
37133
+ this.onTransitionEnd = () => {
37134
+ this.viewer.setPaused();
37135
+ };
37136
+ this.onError = ({ error }) => {
37137
+ this.viewer.setPaused();
37138
+ console.warn("[Slide] render error", error);
37139
+ };
37140
+ this.destroyed = false;
37141
+ this.refreshPages = () => {
37142
+ if (this.slide) {
37143
+ this.viewer.pages = createDocsViewerPages(this.slide);
37144
+ this.viewer.setPageIndex(this.getPageIndex(this.slide.slideState.currentSlideIndex));
37145
+ }
37146
+ };
37147
+ this.onPlay = () => {
37148
+ if (this.slide) {
37149
+ this.slide.nextStep();
37150
+ }
37151
+ };
37152
+ this.onNewPageIndex = (index) => {
37153
+ if (this.slide && this.slide.slideCount > 0) {
37154
+ this.slide.renderSlide(clamp$1(index + 1, 1, this.slide.slideCount));
37155
+ }
37156
+ };
37157
+ this.namespace = "netless-app-slide";
37158
+ this.target = config.target;
37159
+ this.bgColor = cachedGetBgColor(this.target);
37160
+ this.viewer = new DocsViewer({
37161
+ readonly: false,
37162
+ onNewPageIndex: this.onNewPageIndex,
37163
+ onPlay: this.onPlay
37164
+ });
37165
+ this.render();
37166
+ }
37167
+ render() {
37168
+ this.viewer.$content.appendChild(this.renderSlideContainer());
37169
+ this.sideEffect.addEventListener(window, "keydown", (ev) => {
37170
+ if (this.slide) {
37171
+ switch (ev.key) {
37172
+ case "ArrowUp":
37173
+ case "ArrowLeft": {
37174
+ this.slide.prevStep();
37175
+ break;
37176
+ }
37177
+ case "ArrowRight":
37178
+ case "ArrowDown": {
37179
+ this.slide.nextStep();
37180
+ break;
37181
+ }
37182
+ }
37183
+ }
37184
+ });
37185
+ }
37186
+ mount(taskId, url) {
37187
+ this.target.appendChild(this.renderStyle());
37188
+ this.target.appendChild(this.viewer.$content);
37189
+ this.target.appendChild(this.viewer.$footer);
37190
+ this.slide = new Slide.Slide({
37191
+ anchor: this.$slide,
37192
+ interactive: false,
37193
+ mode: "local",
37194
+ resize: true,
37195
+ controller: this.debug,
37196
+ renderOptions: {
37197
+ minFPS: 25,
37198
+ maxFPS: 30,
37199
+ autoFPS: true,
37200
+ autoResolution: true,
37201
+ transactionBgColor: this.bgColor
37202
+ }
37203
+ });
37204
+ this.registerEventListeners();
37205
+ this.slide.setResource(taskId, url);
37206
+ this.slide.renderSlide(1);
37207
+ }
37208
+ renderStyle() {
37209
+ const element = document.createElement("style");
37210
+ element.appendChild(document.createTextNode(styles));
37211
+ return element;
37212
+ }
37213
+ registerEventListeners() {
37214
+ if (!this.slide)
37215
+ return;
37216
+ const { slide } = this;
37217
+ slide.on(Slide.SLIDE_EVENTS.slideChange, this.onPageChanged);
37218
+ slide.on(Slide.SLIDE_EVENTS.renderStart, this.onTransitionStart);
37219
+ slide.on(Slide.SLIDE_EVENTS.renderEnd, this.onTransitionEnd);
37220
+ slide.on(Slide.SLIDE_EVENTS.mainSeqStepStart, this.onTransitionStart);
37221
+ slide.on(Slide.SLIDE_EVENTS.mainSeqStepEnd, this.onTransitionEnd);
37222
+ slide.on(Slide.SLIDE_EVENTS.renderError, this.onError);
37223
+ slide.on(Slide.SLIDE_EVENTS.renderEnd, this.resolveReady);
37224
+ this.readyPromise.then(this.refreshPages);
37225
+ }
37226
+ destroy() {
37227
+ this.sideEffect.flushAll();
37228
+ if (this.slide && !this.destroyed) {
37229
+ log("[Slide] destroy slide (once)");
37230
+ this.slide.destroy();
37231
+ this.destroyed = true;
37232
+ }
37233
+ this.viewer.destroy();
37234
+ }
37235
+ getPageIndex(page) {
37236
+ return (page > 0 ? page : 1) - 1;
37237
+ }
37238
+ renderSlideContainer() {
37239
+ if (!this.$slide) {
37240
+ const $slide = document.createElement("div");
37241
+ $slide.className = this.wrapClassName("slide");
37242
+ $slide.dataset.appKind = "Slide";
37243
+ this.$slide = $slide;
37244
+ }
37245
+ return this.$slide;
37246
+ }
37247
+ wrapClassName(className) {
37248
+ return `${this.namespace}-${className}`;
37249
+ }
37250
+ }
37105
37251
  const SlideApp = {
37106
37252
  kind: "Slide",
37107
37253
  setup(context) {
@@ -37184,5 +37330,5 @@ const SlideApp = {
37184
37330
  docsViewer.mount();
37185
37331
  }
37186
37332
  };
37187
- export { DefaultUrl, FreezerLength, addHooks, apps, SlideApp as default };
37333
+ export { DefaultUrl, FreezerLength, SlidePreviewer, addHooks, apps, SlideApp as default, previewSlide };
37188
37334
  //# sourceMappingURL=main.es.js.map