js-cloudimage-360-view 3.0.3 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/.env +3 -0
  2. package/CHANGELOG.md +167 -156
  3. package/LICENSE +27 -33
  4. package/README.md +820 -806
  5. package/bin/deploy-bundle.js +63 -0
  6. package/dist/ci360.service.js +65 -245
  7. package/dist/ci360.utils.js +2 -14
  8. package/dist/constants/index.js +0 -4
  9. package/dist/constants/props-require-reload.js +24 -12
  10. package/dist/index.js +0 -27
  11. package/dist/static/css/hotspots.css +221 -221
  12. package/dist/static/css/style.css +229 -229
  13. package/dist/utils/auto-play/get-speed-factor.js +0 -2
  14. package/dist/utils/auto-play/is-completed-one-cycle.js +0 -5
  15. package/dist/utils/auto-play/loop.js +3 -14
  16. package/dist/utils/class-names/add-class.js +0 -3
  17. package/dist/utils/class-names/remove-class.js +0 -2
  18. package/dist/utils/container-elements/apply-styles-to-container.js +0 -2
  19. package/dist/utils/container-elements/create-360-view-circle-icon.js +0 -2
  20. package/dist/utils/container-elements/create-360-view-icon.js +0 -2
  21. package/dist/utils/container-elements/create-box-shadow.js +0 -2
  22. package/dist/utils/container-elements/create-canvas.js +0 -2
  23. package/dist/utils/container-elements/create-close-fullscreen-icon.js +0 -2
  24. package/dist/utils/container-elements/create-fullscreen-icon.js +0 -2
  25. package/dist/utils/container-elements/create-fullscreen-modal.js +0 -2
  26. package/dist/utils/container-elements/create-icons-container.js +0 -2
  27. package/dist/utils/container-elements/create-inner-box.js +0 -2
  28. package/dist/utils/container-elements/create-loader.js +0 -2
  29. package/dist/utils/container-elements/create-magnifier-icon.js +0 -2
  30. package/dist/utils/container-elements/index.js +0 -13
  31. package/dist/utils/container-elements/remove-child-from-parent.js +0 -2
  32. package/dist/utils/controls/get-item-skipped.js +0 -2
  33. package/dist/utils/controls/init-controls.js +7 -16
  34. package/dist/utils/hotspots/attach-events/hide-popup.js +0 -2
  35. package/dist/utils/hotspots/attach-events/show-popup.js +0 -2
  36. package/dist/utils/hotspots/configs-error-handler.js +6 -10
  37. package/dist/utils/hotspots/create-popper-instace.js +1 -4
  38. package/dist/utils/hotspots/elements/create-carousel-dot.js +0 -6
  39. package/dist/utils/hotspots/elements/create-carousel-image.js +0 -4
  40. package/dist/utils/hotspots/elements/create-hotspot-icon.js +3 -14
  41. package/dist/utils/hotspots/elements/create-hotspot-popup-link.js +2 -6
  42. package/dist/utils/hotspots/elements/create-hotspots.js +0 -5
  43. package/dist/utils/hotspots/elements/create-images-carousel.js +0 -4
  44. package/dist/utils/hotspots/elements/create-modal-description.js +0 -2
  45. package/dist/utils/hotspots/elements/create-modal-title.js +0 -2
  46. package/dist/utils/hotspots/elements/create-model-elements.js +8 -25
  47. package/dist/utils/hotspots/elements/create-popup-arrow.js +0 -2
  48. package/dist/utils/hotspots/elements/create-popup.js +6 -18
  49. package/dist/utils/hotspots/elements/create-read-more-btn.js +0 -2
  50. package/dist/utils/hotspots/fill-empty-coord-with-previous.js +1 -6
  51. package/dist/utils/hotspots/generate-hotspots-configs.js +11 -21
  52. package/dist/utils/hotspots/generate-popup-config.js +9 -11
  53. package/dist/utils/hotspots/get-hotspot-icon.js +0 -2
  54. package/dist/utils/hotspots/get-hotspot-orientation.js +0 -4
  55. package/dist/utils/hotspots/get-hotspot-popup-node.js +0 -2
  56. package/dist/utils/hotspots/get-popup-node.js +0 -2
  57. package/dist/utils/hotspots/hide-hotspot-icon.js +0 -2
  58. package/dist/utils/hotspots/hide-hotspots-icons.js +0 -3
  59. package/dist/utils/hotspots/is-mouse-on-hotspot.js +0 -2
  60. package/dist/utils/hotspots/prepare-hotspots-positions.js +0 -6
  61. package/dist/utils/hotspots/set-current-slide.js +0 -2
  62. package/dist/utils/hotspots/toggle-popup-events.js +0 -4
  63. package/dist/utils/hotspots/update-hotspot-icon-position.js +0 -2
  64. package/dist/utils/hotspots/update-hotspots.js +6 -14
  65. package/dist/utils/image-src/generate-images-path.js +8 -17
  66. package/dist/utils/image-src/is-props-change-require-reload.js +0 -5
  67. package/dist/utils/index.js +0 -26
  68. package/dist/utils/load-images/images-from-folder/prepare-images-from-folder.js +2 -11
  69. package/dist/utils/load-images/images-from-list/prepare-images-from-list.js +0 -8
  70. package/dist/utils/load-images/lazyload/init-lazyload.js +3 -11
  71. package/dist/utils/load-images/lazyload/prepare-first-image/prepare-first-image-from-folder.js +1 -5
  72. package/dist/utils/load-images/lazyload/prepare-first-image/prepare-first-image-from-list.js +0 -9
  73. package/dist/utils/load-images/load-image-as-promise.js +8 -46
  74. package/dist/utils/load-images/load-images-relative-to-container-size.js +10 -49
  75. package/dist/utils/load-images/load-original-images.js +23 -37
  76. package/dist/utils/load-images/pad.js +0 -2
  77. package/dist/utils/load-images/preload-images.js +2 -9
  78. package/dist/utils/load-images/preload-original-images.js +2 -9
  79. package/dist/utils/magnify/get-current-original-image.js +0 -6
  80. package/dist/utils/magnify/get-cursor-position.js +0 -2
  81. package/dist/utils/magnify/magnify.js +4 -11
  82. package/dist/utils/magnify/move-magnifier.js +6 -14
  83. package/dist/utils/responsive/contain.js +0 -2
  84. package/dist/utils/responsive/fit.js +0 -4
  85. package/dist/utils/responsive/get-image-aspect-ratio.js +0 -8
  86. package/dist/utils/responsive/get-responsive-width-of-container.js +0 -3
  87. package/dist/utils/responsive/get-size-according-to-pixel-ratio.js +0 -2
  88. package/dist/utils/responsive/get-size-limit.js +0 -2
  89. package/dist/utils/spin-y/get-moving-direction.js +0 -3
  90. package/dist/utils/zoom/generate-zoom-in-steps.js +0 -2
  91. package/dist/utils/zoom/generate-zoom-out-steps.js +0 -2
  92. package/package.json +67 -62
  93. package/yarn-error.log +101 -0
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.setView360Icon = exports.isTrue = exports.get360ViewProps = exports.debounce = exports.attr = void 0;
7
-
8
7
  var _constants = require("./constants");
9
-
10
8
  var _this = void 0;
11
-
12
9
  //TODO [deprecated]: remove filename, amount in the upcoming versions
13
10
  var get360ViewProps = function get360ViewProps(image) {
14
11
  return {
@@ -47,44 +44,35 @@ var get360ViewProps = function get360ViewProps(image) {
47
44
  hide360Logo: isTrue(image, 'hide-360-logo'),
48
45
  logoSrc: attr(image, 'logo-src') || 'https://scaleflex.cloudimg.io/v7/filerobot/js-cloudimage-360-view/360_view.svg',
49
46
  ratio: attr(image, 'ratio') || attr(image, 'data-ratio'),
50
- imageInfo: attr(image, 'info') || attr(image, 'data-info') || isTrue(image, 'info')
47
+ imageInfo: attr(image, 'info') || attr(image, 'data-info') || isTrue(image, 'info'),
48
+ requestResponsiveImages: isTrue(image, 'request-responsive-images')
51
49
  };
52
50
  };
53
-
54
51
  exports.get360ViewProps = get360ViewProps;
55
-
56
52
  var isTrue = function isTrue(image, type) {
57
53
  var imgProp = attr(image, type);
58
54
  var imgDataProp = attr(image, "data-".concat(type));
59
55
  return imgProp !== null && imgProp !== 'false' || imgDataProp !== null && imgDataProp !== 'false';
60
56
  };
61
-
62
57
  exports.isTrue = isTrue;
63
-
64
58
  var attr = function attr(element, attribute) {
65
59
  return element.getAttribute(attribute);
66
60
  };
67
-
68
61
  exports.attr = attr;
69
-
70
62
  var setView360Icon = function setView360Icon(view360Icon, logoSrc) {
71
63
  view360Icon.style.background = "rgba(255,255,255,0.8) url('".concat(logoSrc, "') 50% 50% / contain no-repeat");
72
64
  };
73
-
74
65
  exports.setView360Icon = setView360Icon;
75
-
76
66
  var debounce = function debounce(func, timeout) {
77
67
  var timer;
78
68
  return function () {
79
69
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
80
70
  args[_key] = arguments[_key];
81
71
  }
82
-
83
72
  clearTimeout(timer);
84
73
  timer = setTimeout(function () {
85
74
  func.apply(_this, args);
86
75
  }, timeout);
87
76
  };
88
77
  };
89
-
90
78
  exports.debounce = debounce;
@@ -33,11 +33,7 @@ Object.defineProperty(exports, "ORIENTATIONS", {
33
33
  return _orientations.ORIENTATIONS;
34
34
  }
35
35
  });
36
-
37
36
  var _autoPlayBehavior = require("./auto-play-behavior");
38
-
39
37
  var _falsyValues = require("./falsy-values");
40
-
41
38
  var _orientations = require("./orientations");
42
-
43
39
  var _regex = require("./regex");
@@ -4,18 +4,30 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PROPS_REQUIRE_RELOAD = void 0;
7
- var PROPS_REQUIRE_RELOAD = ['folder', //images source
8
- 'filenameX', //images source
9
- 'filenameY', //images source
10
- 'apiVersion', //images source
11
- 'imageListX', //images source
12
- 'imageListY', //images source
13
- 'indexZeroBase', //images source
14
- 'lazySelector', //images source
15
- 'keys', // events
16
- 'stopAtEdges', // events
17
- 'disableDrag', // events
18
- 'controlReverse', // events
7
+ var PROPS_REQUIRE_RELOAD = ['folder',
8
+ //images source
9
+ 'filenameX',
10
+ //images source
11
+ 'filenameY',
12
+ //images source
13
+ 'apiVersion',
14
+ //images source
15
+ 'imageListX',
16
+ //images source
17
+ 'imageListY',
18
+ //images source
19
+ 'indexZeroBase',
20
+ //images source
21
+ 'lazySelector',
22
+ //images source
23
+ 'keys',
24
+ // events
25
+ 'stopAtEdges',
26
+ // events
27
+ 'disableDrag',
28
+ // events
29
+ 'controlReverse',
30
+ // events
19
31
  'disableDrag' // events
20
32
  ];
21
33
  exports.PROPS_REQUIRE_RELOAD = PROPS_REQUIRE_RELOAD;
package/dist/index.js CHANGED
@@ -1,70 +1,51 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  require("core-js/features/array/for-each");
6
-
7
5
  require("core-js/features/array/filter");
8
-
9
6
  require("core-js/features/array/includes");
10
-
11
7
  var _ci = _interopRequireDefault(require("./ci360.service"));
12
-
13
8
  var _ci2 = require("./ci360.utils");
14
-
15
9
  function getContainerWithId(container) {
16
10
  var containerId = container.id;
17
-
18
11
  if (!containerId) {
19
12
  var uniqueId = Math.floor(Math.random() * 10000);
20
13
  var generatedContainerId = "cloudimage-360-view-".concat(uniqueId);
21
14
  container.id = generatedContainerId;
22
15
  }
23
-
24
16
  return container;
25
17
  }
26
-
27
18
  function init() {
28
19
  var viewers = [];
29
20
  var view360Array = document.querySelectorAll('.cloudimage-360:not(.initialized)');
30
21
  [].slice.call(view360Array).forEach(function (_container) {
31
22
  var container = getContainerWithId(_container);
32
23
  var isHotspotsEnabled = (0, _ci2.isTrue)(container, 'hotspots');
33
-
34
24
  if (!isHotspotsEnabled) {
35
25
  viewers.push(new _ci.default(container));
36
26
  }
37
27
  });
38
28
  window.CI360._viewers = viewers;
39
29
  }
40
-
41
30
  function destroy() {
42
31
  if (isNoViewers()) return;
43
-
44
32
  window.CI360._viewers.forEach(function (viewer) {
45
33
  viewer.destroy();
46
34
  });
47
-
48
35
  window.CI360._viewers = [];
49
36
  }
50
-
51
37
  function getActiveIndexByID(id, oriantation) {
52
38
  if (isNoViewers()) return;
53
-
54
39
  var currentViewer = window.CI360._viewers.filter(function (viewer) {
55
40
  return viewer.id === id;
56
41
  })[0];
57
-
58
42
  if (oriantation === 'y') {
59
43
  return currentViewer && currentViewer.activeImageY - 1;
60
44
  }
61
-
62
45
  return currentViewer && currentViewer.activeImageX - 1;
63
46
  }
64
-
65
47
  function add(id) {
66
48
  var view360Array = Array.from(document.querySelectorAll('.cloudimage-360:not(.initialized)'));
67
-
68
49
  if (view360Array.length && id) {
69
50
  var newViewContainer = view360Array.filter(function (viewer) {
70
51
  return viewer.id === id;
@@ -72,16 +53,13 @@ function add(id) {
72
53
  newViewContainer && window.CI360._viewers.push(new _ci.default(newViewContainer));
73
54
  }
74
55
  }
75
-
76
56
  function update() {
77
57
  var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
78
58
  var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
79
-
80
59
  if (id) {
81
60
  var view = window.CI360._viewers.filter(function (viewer) {
82
61
  return viewer.id === id;
83
62
  })[0];
84
-
85
63
  view.updateView(forceUpdate, window.CI360._viewers);
86
64
  } else {
87
65
  window.CI360._viewers.forEach(function (viewer) {
@@ -89,22 +67,18 @@ function update() {
89
67
  });
90
68
  }
91
69
  }
92
-
93
70
  function isNoViewers() {
94
71
  return !(window.CI360._viewers && window.CI360._viewers.length > 0);
95
72
  }
96
-
97
73
  function addHotspots(instanceId, config) {
98
74
  var view360Array = document.querySelectorAll('.cloudimage-360:not(.initialized)');
99
75
  var container = Array.from(view360Array).find(function (view) {
100
76
  return view.id === instanceId;
101
77
  });
102
-
103
78
  if (container) {
104
79
  window.CI360._viewers.push(new _ci.default(container, false, config));
105
80
  }
106
81
  }
107
-
108
82
  window.CI360 = window.CI360 || {};
109
83
  window.CI360.init = init;
110
84
  window.CI360.destroy = destroy;
@@ -112,7 +86,6 @@ window.CI360.getActiveIndexByID = getActiveIndexByID;
112
86
  window.CI360.update = update;
113
87
  window.CI360.add = add;
114
88
  window.CI360.addHotspots = addHotspots;
115
-
116
89
  if (!window.CI360.notInitOnLoad) {
117
90
  init();
118
91
  }
@@ -1,222 +1,222 @@
1
- .cloudimage-360-hotspot-link-icon {
2
- width: 42px;
3
- height: 42px;
4
- background: rgba(12, 109, 199, 0.2);
5
- border: 1px solid rgba(255, 255, 255, 0.2);
6
- border-radius: 50%;
7
- box-sizing: border-box;
8
- transition: opacity 600ms ease-in-out;
9
- cursor: auto;
10
- }
11
-
12
- .cloudimage-360-hotspot-link-icon::before {
13
- content: '';
14
- position: absolute;
15
- width: 16px;
16
- height: 16px;
17
- background-image: url('https://scaleflex.cloudimg.io/v7/plugins/js-cloudimage-360-view/assets/img/link-hotspot.svg');
18
- background-color: #0C6DC7;
19
- background-repeat: no-repeat;
20
- background-size: 17px 7px;
21
- background-position: center;
22
- left: 50%;
23
- top: 50%;
24
- transform: translate(-50%, -50%);
25
- box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.25);
26
- border-radius: 50%;
27
- animation: pulse 2s infinite;
28
- cursor: auto;
29
- }
30
-
31
- .cloudimage-360-hotspot-custom-icon {
32
- width: 42px;
33
- height: 42px;
34
- background: #76AD0133;
35
- border: 1px solid #FFFFFF33;
36
- border-radius: 50%;
37
- box-sizing: border-box;
38
- transition: opacity 300ms ease-in-out;
39
- cursor: auto;
40
- }
41
-
42
- .cloudimage-360-hotspot-custom-icon::before {
43
- content: '';
44
- position: absolute;
45
- width: 16px;
46
- height: 16px;
47
- background-image: url('https://scaleflex.cloudimg.io/v7/plugins/js-cloudimage-360-view/assets/img/plus.svg');
48
- background-color: #76AD01;
49
- background-repeat: no-repeat;
50
- background-size: 17px 7px;
51
- background-position: center;
52
- left: 50%;
53
- top: 50%;
54
- transform: translate(-50%, -50%);
55
- box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.25);
56
- border-radius: 50%;
57
- animation: pulse 2s infinite;
58
- cursor: auto;
59
- }
60
-
61
- .cloudimage-360-hotspot-popup {
62
- visibility: hidden;
63
- opacity: 0;
64
- background-color: #FFFFFF;
65
- padding: 6px;
66
- border-radius: 2px;
67
- box-shadow: 0px 4px 4px 0px #00000040;
68
- z-index: 999;
69
- }
70
-
71
- .cloudimage-360-hotspot-popup[data-show] {
72
- visibility: visible;
73
- opacity: 1;
74
- }
75
-
76
- .cloudimage-360-popup-arrow,
77
- .cloudimage-360-popup-arrow::before {
78
- position: absolute;
79
- width: 8px;
80
- height: 8px;
81
- background: inherit;
82
- cursor: 'auto';
83
- }
84
-
85
- .cloudimage-360-popup-arrow {
86
- visibility: hidden;
87
- }
88
-
89
- .cloudimage-360-popup-arrow::before {
90
- visibility: visible;
91
- content: '';
92
- transform: rotate(45deg);
93
- }
94
-
95
- .cloudimage-360-hotspot-popup[data-popper-placement^='top']
96
- > .cloudimage-360-popup-arrow {
97
- bottom: -4px;
98
- }
99
-
100
- .cloudimage-360-hotspot-popup[data-popper-placement^='bottom']
101
- > .cloudimage-360-popup-arrow {
102
- top: -4px;
103
- }
104
-
105
- .cloudimage-360-hotspot-popup[data-popper-placement^='left']
106
- > .cloudimage-360-popup-arrow {
107
- right: -4px;
108
- }
109
-
110
- .cloudimage-360-hotspot-popup[data-popper-placement^='right']
111
- > .cloudimage-360-popup-arrow {
112
- left: -4px;
113
- }
114
-
115
- .cloudimage-360-modal-wrapper {
116
- max-width: 222px;
117
- }
118
-
119
- .cloudimage-360-images-carousel-wrapper {
120
- margin: 0 auto;
121
- }
122
-
123
- .cloudimage-360-images-carousel {
124
- background-color: #f5f4f4;
125
- border-radius: 2px;
126
- }
127
-
128
- .cloudimage-360-images-carousel .cloudimage-360-carousel-image {
129
- display: none;
130
- object-fit: contain;
131
- min-height: 187px;
132
- max-width: 100%;
133
- max-height: 100%;
134
- }
135
-
136
- .cloudimage-360-images-carousel .cloudimage-360-carousel-image.active-image {
137
- display: block;
138
- animation-name: fade-active-image;
139
- animation-duration: 1.5s;
140
- }
141
-
142
- .cloudimage-360-carousel-dots {
143
- display: flex;
144
- column-gap: 6px;
145
- justify-content: center;
146
- flex-wrap: wrap;
147
- margin: 5px auto;
148
- row-gap: 3px;
149
- padding: 0 6px;
150
- width: 50%;
151
- }
152
-
153
- .cloudimage-360-carousel-dot {
154
- width: 6px;
155
- height: 6px;
156
- background-color: #C9D0DE;
157
- border-radius: 50%;
158
- cursor: pointer;
159
- transition: background-color 0.6s ease;
160
- border: 0;
161
- padding: 0;
162
- }
163
-
164
- .cloudimage-360-carousel-dot.active-dot {
165
- background-color: #76AD01;
166
- }
167
-
168
- .cloudimage-360-carousel-dot:focus,
169
- .cloudimage-360-carousel-dot:focus-visible {
170
- border: 0;
171
- outline: 0;
172
- }
173
-
174
- .cloudimage-360-modal-title {
175
- font-size: 12px;
176
- font-weight: 700;
177
- line-height: 16px;
178
- margin: 4px 0;
179
- }
180
-
181
- .cloudimage-360-modal-description {
182
- font-size: 10px;
183
- font-weight: 400;
184
- line-height: 16px;
185
- margin: 4px 0;
186
- }
187
-
188
- .cloudimage-360-modal-more-details {
189
- color: #76AD01;
190
- background-color: #ECFAE6;
191
- font-size: 10px;
192
- line-height: 16px;
193
- font-weight: 400;
194
- padding: 4px 8px;
195
- transition: background-color 200ms ease-in-out;
196
- border-radius: 2px;
197
- text-decoration: none;
198
- }
199
-
200
- .cloudimage-360-modal-more-details:hover {
201
- color: #76AD01;
202
- background-color: #e1f5d8;
203
- }
204
-
205
- @keyframes pulse {
206
- 0% {
207
- box-shadow: 0 0 0 0 rgba(99, 99, 99, 0.7);
208
- }
209
-
210
- 70% {
211
- box-shadow: 0 0 0 10px rgba(99, 99, 99, 0);
212
- }
213
-
214
- 100% {
215
- box-shadow: 0 0 0 0 rgba(99, 99, 99, 0);
216
- }
217
- }
218
-
219
- @keyframes fade-active-image {
220
- from { opacity: 0.7 }
221
- to { opacity: 1 }
1
+ .cloudimage-360-hotspot-link-icon {
2
+ width: 42px;
3
+ height: 42px;
4
+ background: rgba(12, 109, 199, 0.2);
5
+ border: 1px solid rgba(255, 255, 255, 0.2);
6
+ border-radius: 50%;
7
+ box-sizing: border-box;
8
+ transition: opacity 600ms ease-in-out;
9
+ cursor: auto;
10
+ }
11
+
12
+ .cloudimage-360-hotspot-link-icon::before {
13
+ content: '';
14
+ position: absolute;
15
+ width: 16px;
16
+ height: 16px;
17
+ background-image: url('https://scaleflex.cloudimg.io/v7/plugins/js-cloudimage-360-view/assets/img/link-hotspot.svg');
18
+ background-color: #0C6DC7;
19
+ background-repeat: no-repeat;
20
+ background-size: 9px;
21
+ background-position: center;
22
+ left: 50%;
23
+ top: 50%;
24
+ transform: translate(-50%, -50%);
25
+ box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.25);
26
+ border-radius: 50%;
27
+ animation: pulse 2s infinite;
28
+ cursor: auto;
29
+ }
30
+
31
+ .cloudimage-360-hotspot-custom-icon {
32
+ width: 42px;
33
+ height: 42px;
34
+ background: #76AD0133;
35
+ border: 1px solid #FFFFFF33;
36
+ border-radius: 50%;
37
+ box-sizing: border-box;
38
+ transition: opacity 300ms ease-in-out;
39
+ cursor: auto;
40
+ }
41
+
42
+ .cloudimage-360-hotspot-custom-icon::before {
43
+ content: '';
44
+ position: absolute;
45
+ width: 16px;
46
+ height: 16px;
47
+ background-image: url('https://scaleflex.cloudimg.io/v7/plugins/js-cloudimage-360-view/assets/img/plus.svg');
48
+ background-color: #76AD01;
49
+ background-repeat: no-repeat;
50
+ background-size: 9px;
51
+ background-position: center;
52
+ left: 50%;
53
+ top: 50%;
54
+ transform: translate(-50%, -50%);
55
+ box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.25);
56
+ border-radius: 50%;
57
+ animation: pulse 2s infinite;
58
+ cursor: auto;
59
+ }
60
+
61
+ .cloudimage-360-hotspot-popup {
62
+ visibility: hidden;
63
+ opacity: 0;
64
+ background-color: #FFFFFF;
65
+ padding: 6px;
66
+ border-radius: 2px;
67
+ box-shadow: 0px 4px 4px 0px #00000040;
68
+ z-index: 999;
69
+ }
70
+
71
+ .cloudimage-360-hotspot-popup[data-show] {
72
+ visibility: visible;
73
+ opacity: 1;
74
+ }
75
+
76
+ .cloudimage-360-popup-arrow,
77
+ .cloudimage-360-popup-arrow::before {
78
+ position: absolute;
79
+ width: 8px;
80
+ height: 8px;
81
+ background: inherit;
82
+ cursor: 'auto';
83
+ }
84
+
85
+ .cloudimage-360-popup-arrow {
86
+ visibility: hidden;
87
+ }
88
+
89
+ .cloudimage-360-popup-arrow::before {
90
+ visibility: visible;
91
+ content: '';
92
+ transform: rotate(45deg);
93
+ }
94
+
95
+ .cloudimage-360-hotspot-popup[data-popper-placement^='top']
96
+ > .cloudimage-360-popup-arrow {
97
+ bottom: -4px;
98
+ }
99
+
100
+ .cloudimage-360-hotspot-popup[data-popper-placement^='bottom']
101
+ > .cloudimage-360-popup-arrow {
102
+ top: -4px;
103
+ }
104
+
105
+ .cloudimage-360-hotspot-popup[data-popper-placement^='left']
106
+ > .cloudimage-360-popup-arrow {
107
+ right: -4px;
108
+ }
109
+
110
+ .cloudimage-360-hotspot-popup[data-popper-placement^='right']
111
+ > .cloudimage-360-popup-arrow {
112
+ left: -4px;
113
+ }
114
+
115
+ .cloudimage-360-modal-wrapper {
116
+ max-width: 222px;
117
+ }
118
+
119
+ .cloudimage-360-images-carousel-wrapper {
120
+ margin: 0 auto;
121
+ }
122
+
123
+ .cloudimage-360-images-carousel {
124
+ background-color: #f5f4f4;
125
+ border-radius: 2px;
126
+ }
127
+
128
+ .cloudimage-360-images-carousel .cloudimage-360-carousel-image {
129
+ display: none;
130
+ object-fit: contain;
131
+ min-height: 187px;
132
+ max-width: 100%;
133
+ max-height: 100%;
134
+ }
135
+
136
+ .cloudimage-360-images-carousel .cloudimage-360-carousel-image.active-image {
137
+ display: block;
138
+ animation-name: fade-active-image;
139
+ animation-duration: 1.5s;
140
+ }
141
+
142
+ .cloudimage-360-carousel-dots {
143
+ display: flex;
144
+ column-gap: 6px;
145
+ justify-content: center;
146
+ flex-wrap: wrap;
147
+ margin: 5px auto;
148
+ row-gap: 3px;
149
+ padding: 0 6px;
150
+ width: 50%;
151
+ }
152
+
153
+ .cloudimage-360-carousel-dot {
154
+ width: 6px;
155
+ height: 6px;
156
+ background-color: #C9D0DE;
157
+ border-radius: 50%;
158
+ cursor: pointer;
159
+ transition: background-color 0.6s ease;
160
+ border: 0;
161
+ padding: 0;
162
+ }
163
+
164
+ .cloudimage-360-carousel-dot.active-dot {
165
+ background-color: #76AD01;
166
+ }
167
+
168
+ .cloudimage-360-carousel-dot:focus,
169
+ .cloudimage-360-carousel-dot:focus-visible {
170
+ border: 0;
171
+ outline: 0;
172
+ }
173
+
174
+ .cloudimage-360-modal-title {
175
+ font-size: 12px;
176
+ font-weight: 700;
177
+ line-height: 16px;
178
+ margin: 4px 0;
179
+ }
180
+
181
+ .cloudimage-360-modal-description {
182
+ font-size: 10px;
183
+ font-weight: 400;
184
+ line-height: 16px;
185
+ margin: 4px 0;
186
+ }
187
+
188
+ .cloudimage-360-modal-more-details {
189
+ color: #76AD01;
190
+ background-color: #ECFAE6;
191
+ font-size: 10px;
192
+ line-height: 16px;
193
+ font-weight: 400;
194
+ padding: 4px 8px;
195
+ transition: background-color 200ms ease-in-out;
196
+ border-radius: 2px;
197
+ text-decoration: none;
198
+ }
199
+
200
+ .cloudimage-360-modal-more-details:hover {
201
+ color: #76AD01;
202
+ background-color: #e1f5d8;
203
+ }
204
+
205
+ @keyframes pulse {
206
+ 0% {
207
+ box-shadow: 0 0 0 0 rgba(99, 99, 99, 0.7);
208
+ }
209
+
210
+ 70% {
211
+ box-shadow: 0 0 0 10px rgba(99, 99, 99, 0);
212
+ }
213
+
214
+ 100% {
215
+ box-shadow: 0 0 0 0 rgba(99, 99, 99, 0);
216
+ }
217
+ }
218
+
219
+ @keyframes fade-active-image {
220
+ from { opacity: 0.7 }
221
+ to { opacity: 1 }
222
222
  }