coveragebook_components 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/build/coco/app.css +7 -5
  3. data/app/assets/build/coco/app.js +95 -48
  4. data/app/assets/build/coco/book.css +3 -0
  5. data/app/assets/build/coco/book.js +2 -2
  6. data/app/assets/js/helpers/path.js +9 -1
  7. data/app/components/coco/app/blocks/slide_editor/slide_editor.css +4 -0
  8. data/app/components/coco/app/blocks/slide_editor/slide_editor.html.erb +145 -190
  9. data/app/components/coco/app/blocks/slide_editor/slide_editor.js +70 -17
  10. data/app/components/coco/app/blocks/slide_editor/slide_editor.rb +37 -86
  11. data/app/components/coco/app/elements/alert/alert.css +1 -1
  12. data/app/components/coco/app/elements/color_picker_button/color_picker_button.html.erb +17 -16
  13. data/app/components/coco/app/elements/color_picker_button/color_picker_button.js +0 -8
  14. data/app/components/coco/app/elements/color_picker_button/color_picker_button.rb +2 -15
  15. data/app/components/coco/app/elements/image_picker/image_picker.html.erb +4 -4
  16. data/app/components/coco/app/elements/image_picker/image_picker.js +18 -6
  17. data/app/components/coco/app/elements/image_picker/image_picker.rb +2 -11
  18. data/app/components/coco/app/elements/image_picker_button/image_picker_button.html.erb +9 -8
  19. data/app/components/coco/app/elements/image_picker_button/image_picker_button.js +10 -23
  20. data/app/components/coco/app/elements/image_picker_button/image_picker_button.rb +19 -35
  21. data/app/components/coco/app/elements/seamless_textarea/seamless_textarea.html.erb +7 -4
  22. data/app/components/coco/app/elements/seamless_textarea/seamless_textarea.js +9 -3
  23. data/app/components/coco/app/elements/seamless_textarea/seamless_textarea.rb +5 -20
  24. data/app/components/coco/base/image_uploader/image_uploader.html.erb +3 -2
  25. data/app/components/coco/base/image_uploader/image_uploader.rb +2 -12
  26. data/app/components/coco/book/blocks/slides/media_slide/media_slide.css +1 -1
  27. data/lib/coco.rb +1 -1
  28. metadata +2 -6
  29. data/app/assets/build/coco/app.dev.css +0 -3427
  30. data/app/assets/build/coco/app.dev.js +0 -24891
  31. data/app/assets/build/coco/book.dev.css +0 -992
  32. data/app/assets/build/coco/book.dev.js +0 -19840
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04a58eafadfb3d9bee3046676b58625cb101d3e84d183127aeb4e4dea3b056c8
4
- data.tar.gz: cd33aac0b97a797b050346e55f31aa4ae6cce296dc0fc20b110f5924a79b3d3a
3
+ metadata.gz: ca789167f2fc08234f31ced3e398aca21017d7f1ade9e98ee6e50f0538f415f5
4
+ data.tar.gz: d0a3d173a36a8ba61c1763946dee9156a67ff6f7c20326611bf0f5fbd1dc2a4a
5
5
  SHA512:
6
- metadata.gz: 152a325a617afd527e8607a669c85a1a4e09b9542fe23d1eeae53558726af33df1a2914c9848198d454427252c80c792ac2e13588ea216451d72e0cabdc35b07
7
- data.tar.gz: 4f18b57a7909ab4308497e492bc5be2a6a0f1ccfc66b36dff6675d48438c126800554e1106c53414bc225ee7092afaa463a354a4c7114d6658f24c32edd3e60d
6
+ metadata.gz: e7881aee94a056a450875ae8d4982cdd78b529501b88295f94efcb91f383ede55dcc5fc7e1e8ac78a6614f2f20e93bb154bb4b1f3fc3c4e0a5ef134655618072
7
+ data.tar.gz: 8237eeb07c6d3ebc9756ce07afd1d5502502c6a0acc80bdc667f91d5c5f1b6f56c97431cc05e5582d3e67bd4fae38c2f95e029d609ef8a6451c786900ea725e7
@@ -1104,6 +1104,8 @@ select{
1104
1104
 
1105
1105
  [data-coco][data-component="app-slide-editor"] .editor-toolbar{
1106
1106
  margin-bottom: 1.5rem}}
1107
+ [data-coco][data-component="app-slide-editor"] .editor-form form{
1108
+ display: none}
1107
1109
  [data-coco][data-component="app-slide-editor"] .editor-slide{
1108
1110
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1109
1111
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
@@ -1113,9 +1115,6 @@ select{
1113
1115
  flex: none}
1114
1116
  [data-coco][data-component="app-slide-editor"] .coco-button.editor-saving{
1115
1117
  cursor: not-allowed}
1116
- [data-coco][data-component="app-slide-editor"] .editor-thumbnail-file{
1117
- pointer-events: none;
1118
- display: none}
1119
1118
  [data-coco][data-component="app-slide-editor"] .editor-screenshot-wrapper{
1120
1119
  position: relative;
1121
1120
  width: 0px;
@@ -1184,7 +1183,7 @@ select{
1184
1183
  line-height: 24px}
1185
1184
  [data-coco][data-component="app-alert"] .alert-message a{
1186
1185
  color: currentColor}
1187
- [data-coco][data-component="app-alert"]:not(.with-title) .alert-message{
1186
+ [data-coco][data-component="app-alert"].with-title .alert-message{
1188
1187
  margin-top: 0.25rem}
1189
1188
  [data-coco][data-component="app-alert"] .alert-actions{
1190
1189
  display: flex;
@@ -3150,8 +3149,11 @@ select{
3150
3149
  line-height: 1.4;
3151
3150
  font-size: var(--text-font-size)}
3152
3151
  [data-coco][data-component="book-media-slide"] img{
3152
+ height: 100%;
3153
3153
  width: 100%;
3154
- border-radius: 0.375rem}
3154
+ border-radius: 0.375rem;
3155
+ -o-object-fit: contain;
3156
+ object-fit: contain}
3155
3157
  .static{
3156
3158
  position: static}
3157
3159
  .fixed{
@@ -21587,14 +21587,14 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
21587
21587
  };
21588
21588
  });
21589
21589
 
21590
- // import-glob:/home/runner/work/coco/coco/app/assets/js/base|@baseComponents/**/*.js
21590
+ // import-glob:/Users/mark/Projects/coveragebook/coco/app/assets/js/base|@baseComponents/**/*.js
21591
21591
  var modules = [button_exports, dropdown_exports, icon_exports, image_uploader_exports];
21592
21592
  var __default = modules;
21593
21593
 
21594
21594
  // base/components.js
21595
21595
  var components_default = registerComponents(__default);
21596
21596
 
21597
- // import-glob:/home/runner/work/coco/coco/app/assets/js/book|@bookComponents/**/*.js
21597
+ // import-glob:/Users/mark/Projects/coveragebook/coco/app/assets/js/book|@bookComponents/**/*.js
21598
21598
  var modules2 = [];
21599
21599
  var __default2 = modules2;
21600
21600
 
@@ -22425,6 +22425,9 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22425
22425
  function stripExtension(filename) {
22426
22426
  return filename.substring(0, filename.lastIndexOf(".")) || filename;
22427
22427
  }
22428
+ function basename(path) {
22429
+ return path ? path.replace(/.*\//, "") : path;
22430
+ }
22428
22431
 
22429
22432
  // helpers/file.js
22430
22433
  function blobToFile(blob, fileName, type) {
@@ -22498,10 +22501,21 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22498
22501
  pixelRatio: 1
22499
22502
  };
22500
22503
  var slide_editor_default = CocoComponent("appSlideEditor", (data2) => {
22504
+ const initialData = {
22505
+ layout: data2.layout,
22506
+ title: data2.title,
22507
+ text1: data2.text1,
22508
+ bgColor: data2.bgColor,
22509
+ textColor: data2.textColor,
22510
+ bgImage: {
22511
+ name: data2.bgImage,
22512
+ data: data2.bgImage
22513
+ }
22514
+ };
22501
22515
  return __spreadProps(__spreadValues({
22502
22516
  use: [withUndo()]
22503
- }, data2), {
22504
- saved: __spreadValues({}, data2),
22517
+ }, initialData), {
22518
+ saved: __spreadValues({}, initialData),
22505
22519
  saving: false,
22506
22520
  ready: false,
22507
22521
  dragging: false,
@@ -22511,17 +22525,19 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22511
22525
  return getData(this.$root.querySelector("[data-role='bg-image-picker']"));
22512
22526
  },
22513
22527
  init() {
22514
- this._fields.forEach((name) => {
22515
- this.$watch(
22516
- name,
22517
- (value, oldValue) => this.history.add(name, value, oldValue)
22518
- );
22519
- });
22520
22528
  this.$watch("thumbnailFile", () => this._syncThumbnailField());
22521
22529
  this.$watch("errors", (errors) => {
22522
22530
  errors.forEach((error2) => console.error(error2.message));
22523
22531
  });
22524
- this.$nextTick(() => this.ready = true);
22532
+ this.$nextTick(() => {
22533
+ this._fields.forEach((name) => {
22534
+ this.$watch(
22535
+ name,
22536
+ (value, oldValue) => this.history.add(name, value, oldValue)
22537
+ );
22538
+ });
22539
+ this.ready = true;
22540
+ });
22525
22541
  },
22526
22542
  undo(name, value) {
22527
22543
  this[name] = value;
@@ -22550,7 +22566,11 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22550
22566
  return;
22551
22567
  }
22552
22568
  }
22553
- this.$refs.form.requestSubmit();
22569
+ if (this.$refs.form) {
22570
+ this.$refs.form.querySelector("form").requestSubmit();
22571
+ } else {
22572
+ this.submitSuccess();
22573
+ }
22554
22574
  },
22555
22575
  submitEnd(event) {
22556
22576
  handler = wasSuccessful(event) ? "submitSuccess" : "submitError";
@@ -22571,11 +22591,36 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22571
22591
  $event.preventDefault();
22572
22592
  this._handleSaveError($event.detail.error, { event: $event });
22573
22593
  },
22594
+ syncImageField(el, image) {
22595
+ const dataTransfer = new DataTransfer();
22596
+ if (image.file && image.file instanceof File) {
22597
+ dataTransfer.items.add(image.file);
22598
+ }
22599
+ el.files = dataTransfer.files;
22600
+ },
22601
+ input: {
22602
+ layout: { "x-model.fill": "layout" },
22603
+ title: { "x-model.fill": "title" },
22604
+ text1: { "x-model.fill": "text1" },
22605
+ bgColor: { "x-model.fill": "bgColorHex" },
22606
+ textColor: { "x-model.fill": "textColorHex" },
22607
+ bgImage: { "x-effect": "syncImageField($el, bgImage)" },
22608
+ bgImagePurge: { ":checked": "!hasBgImage" }
22609
+ },
22610
+ get hasBgImage() {
22611
+ return !!(this.bgImage && this.bgImage.data);
22612
+ },
22613
+ get bgColorHex() {
22614
+ return this.bgColor.replace("#", "");
22615
+ },
22616
+ get textColorHex() {
22617
+ return this.textColor.replace("#", "");
22618
+ },
22574
22619
  get slideStyles() {
22575
22620
  return {
22576
22621
  backgroundColor: this.bgColor,
22577
22622
  color: this.textColor,
22578
- backgroundImage: this.bgImage && this.bgImage.data && `url('${this.bgImage.data}')`
22623
+ backgroundImage: this.hasBgImage ? `url('${this.bgImage.data}')` : "none"
22579
22624
  };
22580
22625
  },
22581
22626
  get slideClasses() {
@@ -22585,13 +22630,13 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22585
22630
  };
22586
22631
  },
22587
22632
  get isDarkBg() {
22588
- return this.bgImage && this.bgImage.data || this.bgColor ? isDark(this.bgColor) : false;
22633
+ return this.hasBgImage || this.bgColor ? isDark(this.bgColor) : false;
22589
22634
  },
22590
22635
  get shouldGenerateThumbnail() {
22591
22636
  return !!this.$refs.thumbnail;
22592
22637
  },
22593
22638
  get _fields() {
22594
- return Object.keys(data2);
22639
+ return Object.keys(initialData);
22595
22640
  },
22596
22641
  async _generateThumbnail() {
22597
22642
  const screenshotSlide = this.$refs.screenshot.firstElementChild;
@@ -22620,6 +22665,9 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
22620
22665
  },
22621
22666
  _handleSaveError(message2 = "Error saving slide", context = {}) {
22622
22667
  this.errors.push({ message: message2, context });
22668
+ this.errors.forEach((err) => {
22669
+ console.log(err.message);
22670
+ });
22623
22671
  this.saving = false;
22624
22672
  this.$dispatch("slide:save-end", { success: false });
22625
22673
  }
@@ -24542,12 +24590,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24542
24590
  this.$root.querySelector("[data-role='color-picker']").firstElementChild
24543
24591
  );
24544
24592
  },
24545
- get selectedColorHex() {
24546
- return this.selectedColor && this.selectedColor.replace("#", "");
24547
- },
24548
- set selectedColorHex(value) {
24549
- this.selectedColor == "#" + value.replace("#", "");
24550
- },
24551
24593
  onDropdownMount() {
24552
24594
  this.getPicker().setSelectedColor(this.selectedColor);
24553
24595
  }
@@ -24575,15 +24617,19 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24575
24617
  __export(image_picker_exports, {
24576
24618
  default: () => image_picker_default
24577
24619
  });
24578
- var image_picker_default = CocoComponent("appImagePicker", ({ image }) => {
24620
+ var image_picker_default = CocoComponent("appImagePicker", ({ src }) => {
24579
24621
  return {
24580
24622
  use: [],
24581
- image: null,
24623
+ image: {
24624
+ name: basename(src),
24625
+ file: null,
24626
+ data: src
24627
+ },
24582
24628
  get name() {
24583
- return this.image && this.image.name;
24629
+ return this.image.name;
24584
24630
  },
24585
24631
  get src() {
24586
- return this.image && this.image.data;
24632
+ return this.image.data;
24587
24633
  },
24588
24634
  get hasImage() {
24589
24635
  return !!this.src;
@@ -24592,7 +24638,11 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24592
24638
  return getComponent(this.$refs.uploader.firstElementChild);
24593
24639
  },
24594
24640
  setImage(file, silent = false) {
24595
- this.image = file;
24641
+ this.image = {
24642
+ file: file.file,
24643
+ name: file.name,
24644
+ data: file.data
24645
+ };
24596
24646
  this.uploader.setFile(file);
24597
24647
  if (silent === false) {
24598
24648
  this.$dispatch("image-picker:select", { image: this.image });
@@ -24600,7 +24650,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24600
24650
  },
24601
24651
  clearImage(silent = false) {
24602
24652
  this.uploader.clear();
24603
- this.image = null;
24653
+ this.image = { name: null, data: null, file: null };
24604
24654
  if (silent === false) {
24605
24655
  this.$dispatch("image-picker:clear");
24606
24656
  }
@@ -24619,21 +24669,12 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24619
24669
  __export(image_picker_button_exports, {
24620
24670
  default: () => image_picker_button_default
24621
24671
  });
24622
- var image_picker_button_default = CocoComponent("appImagePickerButton", ({ image }) => {
24672
+ var image_picker_button_default = CocoComponent("appImagePickerButton", ({ src }) => {
24623
24673
  return {
24624
- selectedImage: image,
24625
- dropdown: null,
24626
- init() {
24627
- this.$watch("selectedImage", (file) => {
24628
- const dataTransfer = new DataTransfer();
24629
- if (file && file.file instanceof File) {
24630
- dataTransfer.items.add(file.file);
24631
- }
24632
- this.$refs.fileInput.files = dataTransfer.files;
24633
- if (this.dropdown) {
24634
- this.dropdown.hide();
24635
- }
24636
- });
24674
+ selectedImage: {
24675
+ name: basename(src),
24676
+ file: null,
24677
+ data: src
24637
24678
  },
24638
24679
  getPicker() {
24639
24680
  return getData(
@@ -24651,16 +24692,17 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24651
24692
  file,
24652
24693
  data: reader.result
24653
24694
  };
24695
+ this.dropdown.hide();
24654
24696
  });
24655
24697
  reader.readAsDataURL(file);
24656
24698
  },
24657
24699
  clearSelectedImage() {
24658
24700
  this.dropdown.hide();
24659
- this.selectedImage = null;
24701
+ this.selectedImage = { name: null, data: null, file: null };
24660
24702
  },
24661
- setSelectedImage(image2) {
24703
+ setSelectedImage(image) {
24662
24704
  this.dropdown.hide();
24663
- this.selectedImage = image2;
24705
+ this.selectedImage = image;
24664
24706
  },
24665
24707
  onDropdownMount({ detail }) {
24666
24708
  this.dropdown = detail.dropdown;
@@ -24698,11 +24740,16 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24698
24740
  height: null,
24699
24741
  observer: null,
24700
24742
  value: null,
24701
- get singleLine() {
24702
- return this.assertData("multiline", "false");
24703
- },
24743
+ options: ["multiline", "focus"],
24704
24744
  init() {
24705
24745
  this.value = this.$refs.textarea.value;
24746
+ this.$nextTick(() => {
24747
+ this.onResize();
24748
+ if (this.$options.focus) {
24749
+ this.$refs.textarea.focus();
24750
+ this.$refs.textarea.selectionStart = this.$refs.textarea.value.length;
24751
+ }
24752
+ });
24706
24753
  },
24707
24754
  onResize() {
24708
24755
  const textarea = this.$refs.textarea;
@@ -24827,7 +24874,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
24827
24874
  };
24828
24875
  });
24829
24876
 
24830
- // import-glob:/home/runner/work/coco/coco/app/assets/js/app|@appComponents/**/*.js
24877
+ // import-glob:/Users/mark/Projects/coveragebook/coco/app/assets/js/app|@appComponents/**/*.js
24831
24878
  var modules3 = [nav_bar_exports, nav_drawer_exports, slide_editor_exports, alert_exports, button_group_exports, color_picker_exports, color_picker_button_exports, confirm_panel_exports, image_picker_exports, image_picker_button_exports, menu_button_exports, notice_exports, seamless_textarea_exports, snackbar_exports, system_banner_exports, toast_exports, toolbar_exports];
24832
24879
  var __default3 = modules3;
24833
24880
 
@@ -893,8 +893,11 @@ select {
893
893
  font-size: var(--text-font-size);
894
894
  }
895
895
  [data-coco][data-component="book-media-slide"] img {
896
+ height: 100%;
896
897
  width: 100%;
897
898
  border-radius: 0.375rem;
899
+ -o-object-fit: contain;
900
+ object-fit: contain;
898
901
  }
899
902
  .static {
900
903
  position: static;
@@ -19802,14 +19802,14 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
19802
19802
  };
19803
19803
  });
19804
19804
 
19805
- // import-glob:/home/runner/work/coco/coco/app/assets/js/base|@baseComponents/**/*.js
19805
+ // import-glob:/Users/mark/Projects/coveragebook/coco/app/assets/js/base|@baseComponents/**/*.js
19806
19806
  var modules = [button_exports, dropdown_exports, icon_exports, image_uploader_exports];
19807
19807
  var __default = modules;
19808
19808
 
19809
19809
  // base/components.js
19810
19810
  var components_default = registerComponents(__default);
19811
19811
 
19812
- // import-glob:/home/runner/work/coco/coco/app/assets/js/book|@bookComponents/**/*.js
19812
+ // import-glob:/Users/mark/Projects/coveragebook/coco/app/assets/js/book|@bookComponents/**/*.js
19813
19813
  var modules2 = [];
19814
19814
  var __default2 = modules2;
19815
19815
 
@@ -2,4 +2,12 @@ function stripExtension(filename) {
2
2
  return filename.substring(0, filename.lastIndexOf(".")) || filename;
3
3
  }
4
4
 
5
- export { stripExtension };
5
+ function dirname(path) {
6
+ return path ? path.match(/.*\//) : path;
7
+ }
8
+
9
+ function basename(path) {
10
+ return path ? path.replace(/.*\//, "") : path;
11
+ }
12
+
13
+ export { stripExtension, dirname, basename };
@@ -8,6 +8,10 @@
8
8
  @apply mb-4 xl:mb-6;
9
9
  }
10
10
 
11
+ .editor-form form {
12
+ @apply hidden;
13
+ }
14
+
11
15
  .editor-slide {
12
16
  @apply shadow-lg;
13
17