@itcenteratunihelsinki/huds-lib 0.8.61 → 0.8.63

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 (44) hide show
  1. package/components/hy-hero-carousel.js +328 -1
  2. package/components/hy-hero-carousel.js.map +1 -1
  3. package/components/hy-menu-main-group2.js +20 -27
  4. package/components/hy-menu-main-group2.js.map +1 -1
  5. package/components/menu-language.js +4 -3
  6. package/components/menu-language.js.map +1 -1
  7. package/components/site-search.js +14 -78
  8. package/components/site-search.js.map +1 -1
  9. package/dist/cjs/huds-lib.cjs.js +1 -1
  10. package/dist/cjs/hy-breadcrumbs_15.cjs.entry.js +17 -80
  11. package/dist/cjs/hy-breadcrumbs_15.cjs.entry.js.map +1 -1
  12. package/dist/cjs/hy-hero-carousel.cjs.entry.js +328 -1
  13. package/dist/cjs/hy-hero-carousel.cjs.entry.js.map +1 -1
  14. package/dist/cjs/hy-menu-main-group.cjs.entry.js +19 -26
  15. package/dist/cjs/hy-menu-main-group.cjs.entry.js.map +1 -1
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/collection/components/hy-hero-carousel/hy-hero-carousel.js +5 -2
  18. package/dist/collection/components/hy-hero-carousel/hy-hero-carousel.js.map +1 -1
  19. package/dist/collection/components/hy-navigation/hy-menu-main-group/hy-menu-main-group.js +24 -31
  20. package/dist/collection/components/hy-navigation/hy-menu-main-group/hy-menu-main-group.js.map +1 -1
  21. package/dist/collection/components/hy-navigation/menu-language/menu-language.js +4 -3
  22. package/dist/collection/components/hy-navigation/menu-language/menu-language.js.map +1 -1
  23. package/dist/collection/components/hy-site-header/site-search/site-search.css +13 -2
  24. package/dist/collection/components/hy-site-header/site-search/site-search.js +36 -82
  25. package/dist/collection/components/hy-site-header/site-search/site-search.js.map +1 -1
  26. package/dist/esm/huds-lib.js +1 -1
  27. package/dist/esm/hy-breadcrumbs_15.entry.js +17 -80
  28. package/dist/esm/hy-breadcrumbs_15.entry.js.map +1 -1
  29. package/dist/esm/hy-hero-carousel.entry.js +328 -1
  30. package/dist/esm/hy-hero-carousel.entry.js.map +1 -1
  31. package/dist/esm/hy-menu-main-group.entry.js +19 -26
  32. package/dist/esm/hy-menu-main-group.entry.js.map +1 -1
  33. package/dist/esm/loader.js +1 -1
  34. package/dist/huds-lib/huds-lib.esm.js +1 -1
  35. package/dist/huds-lib/huds-lib.esm.js.map +1 -1
  36. package/dist/huds-lib/hy-breadcrumbs_15.entry.js +1 -1
  37. package/dist/huds-lib/hy-breadcrumbs_15.entry.js.map +1 -1
  38. package/dist/huds-lib/hy-hero-carousel.entry.js +1 -1
  39. package/dist/huds-lib/hy-hero-carousel.entry.js.map +1 -1
  40. package/dist/huds-lib/hy-menu-main-group.entry.js +1 -1
  41. package/dist/huds-lib/hy-menu-main-group.entry.js.map +1 -1
  42. package/dist/types/components/hy-navigation/hy-menu-main-group/hy-menu-main-group.d.ts +2 -5
  43. package/dist/types/components/hy-site-header/site-search/site-search.d.ts +1 -6
  44. package/package.json +2 -2
@@ -3865,6 +3865,330 @@ Object.keys(prototypes).forEach(prototypeGroup => {
3865
3865
  });
3866
3866
  Swiper.use([Resize, Observer]);
3867
3867
 
3868
+ function Virtual({
3869
+ swiper,
3870
+ extendParams,
3871
+ on,
3872
+ emit
3873
+ }) {
3874
+ extendParams({
3875
+ virtual: {
3876
+ enabled: false,
3877
+ slides: [],
3878
+ cache: true,
3879
+ renderSlide: null,
3880
+ renderExternal: null,
3881
+ renderExternalUpdate: true,
3882
+ addSlidesBefore: 0,
3883
+ addSlidesAfter: 0
3884
+ }
3885
+ });
3886
+ let cssModeTimeout;
3887
+ const document = getDocument();
3888
+ swiper.virtual = {
3889
+ cache: {},
3890
+ from: undefined,
3891
+ to: undefined,
3892
+ slides: [],
3893
+ offset: 0,
3894
+ slidesGrid: []
3895
+ };
3896
+ const tempDOM = document.createElement('div');
3897
+ function renderSlide(slide, index) {
3898
+ const params = swiper.params.virtual;
3899
+ if (params.cache && swiper.virtual.cache[index]) {
3900
+ return swiper.virtual.cache[index];
3901
+ }
3902
+ // eslint-disable-next-line
3903
+ let slideEl;
3904
+ if (params.renderSlide) {
3905
+ slideEl = params.renderSlide.call(swiper, slide, index);
3906
+ if (typeof slideEl === 'string') {
3907
+ tempDOM.innerHTML = slideEl;
3908
+ slideEl = tempDOM.children[0];
3909
+ }
3910
+ } else if (swiper.isElement) {
3911
+ slideEl = createElement('swiper-slide');
3912
+ } else {
3913
+ slideEl = createElement('div', swiper.params.slideClass);
3914
+ }
3915
+ slideEl.setAttribute('data-swiper-slide-index', index);
3916
+ if (!params.renderSlide) {
3917
+ slideEl.innerHTML = slide;
3918
+ }
3919
+ if (params.cache) swiper.virtual.cache[index] = slideEl;
3920
+ return slideEl;
3921
+ }
3922
+ function update(force) {
3923
+ const {
3924
+ slidesPerView,
3925
+ slidesPerGroup,
3926
+ centeredSlides,
3927
+ loop: isLoop
3928
+ } = swiper.params;
3929
+ const {
3930
+ addSlidesBefore,
3931
+ addSlidesAfter
3932
+ } = swiper.params.virtual;
3933
+ const {
3934
+ from: previousFrom,
3935
+ to: previousTo,
3936
+ slides,
3937
+ slidesGrid: previousSlidesGrid,
3938
+ offset: previousOffset
3939
+ } = swiper.virtual;
3940
+ if (!swiper.params.cssMode) {
3941
+ swiper.updateActiveIndex();
3942
+ }
3943
+ const activeIndex = swiper.activeIndex || 0;
3944
+ let offsetProp;
3945
+ if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
3946
+ let slidesAfter;
3947
+ let slidesBefore;
3948
+ if (centeredSlides) {
3949
+ slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
3950
+ slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
3951
+ } else {
3952
+ slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
3953
+ slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;
3954
+ }
3955
+ let from = activeIndex - slidesBefore;
3956
+ let to = activeIndex + slidesAfter;
3957
+ if (!isLoop) {
3958
+ from = Math.max(from, 0);
3959
+ to = Math.min(to, slides.length - 1);
3960
+ }
3961
+ let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
3962
+ if (isLoop && activeIndex >= slidesBefore) {
3963
+ from -= slidesBefore;
3964
+ if (!centeredSlides) offset += swiper.slidesGrid[0];
3965
+ } else if (isLoop && activeIndex < slidesBefore) {
3966
+ from = -slidesBefore;
3967
+ if (centeredSlides) offset += swiper.slidesGrid[0];
3968
+ }
3969
+ Object.assign(swiper.virtual, {
3970
+ from,
3971
+ to,
3972
+ offset,
3973
+ slidesGrid: swiper.slidesGrid,
3974
+ slidesBefore,
3975
+ slidesAfter
3976
+ });
3977
+ function onRendered() {
3978
+ swiper.updateSlides();
3979
+ swiper.updateProgress();
3980
+ swiper.updateSlidesClasses();
3981
+ emit('virtualUpdate');
3982
+ }
3983
+ if (previousFrom === from && previousTo === to && !force) {
3984
+ if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
3985
+ swiper.slides.forEach(slideEl => {
3986
+ slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
3987
+ });
3988
+ }
3989
+ swiper.updateProgress();
3990
+ emit('virtualUpdate');
3991
+ return;
3992
+ }
3993
+ if (swiper.params.virtual.renderExternal) {
3994
+ swiper.params.virtual.renderExternal.call(swiper, {
3995
+ offset,
3996
+ from,
3997
+ to,
3998
+ slides: function getSlides() {
3999
+ const slidesToRender = [];
4000
+ for (let i = from; i <= to; i += 1) {
4001
+ slidesToRender.push(slides[i]);
4002
+ }
4003
+ return slidesToRender;
4004
+ }()
4005
+ });
4006
+ if (swiper.params.virtual.renderExternalUpdate) {
4007
+ onRendered();
4008
+ } else {
4009
+ emit('virtualUpdate');
4010
+ }
4011
+ return;
4012
+ }
4013
+ const prependIndexes = [];
4014
+ const appendIndexes = [];
4015
+ const getSlideIndex = index => {
4016
+ let slideIndex = index;
4017
+ if (index < 0) {
4018
+ slideIndex = slides.length + index;
4019
+ } else if (slideIndex >= slides.length) {
4020
+ // eslint-disable-next-line
4021
+ slideIndex = slideIndex - slides.length;
4022
+ }
4023
+ return slideIndex;
4024
+ };
4025
+ if (force) {
4026
+ swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`).forEach(slideEl => {
4027
+ slideEl.remove();
4028
+ });
4029
+ } else {
4030
+ for (let i = previousFrom; i <= previousTo; i += 1) {
4031
+ if (i < from || i > to) {
4032
+ const slideIndex = getSlideIndex(i);
4033
+ swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`).forEach(slideEl => {
4034
+ slideEl.remove();
4035
+ });
4036
+ }
4037
+ }
4038
+ }
4039
+ const loopFrom = isLoop ? -slides.length : 0;
4040
+ const loopTo = isLoop ? slides.length * 2 : slides.length;
4041
+ for (let i = loopFrom; i < loopTo; i += 1) {
4042
+ if (i >= from && i <= to) {
4043
+ const slideIndex = getSlideIndex(i);
4044
+ if (typeof previousTo === 'undefined' || force) {
4045
+ appendIndexes.push(slideIndex);
4046
+ } else {
4047
+ if (i > previousTo) appendIndexes.push(slideIndex);
4048
+ if (i < previousFrom) prependIndexes.push(slideIndex);
4049
+ }
4050
+ }
4051
+ }
4052
+ appendIndexes.forEach(index => {
4053
+ swiper.slidesEl.append(renderSlide(slides[index], index));
4054
+ });
4055
+ if (isLoop) {
4056
+ for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {
4057
+ const index = prependIndexes[i];
4058
+ swiper.slidesEl.prepend(renderSlide(slides[index], index));
4059
+ }
4060
+ } else {
4061
+ prependIndexes.sort((a, b) => b - a);
4062
+ prependIndexes.forEach(index => {
4063
+ swiper.slidesEl.prepend(renderSlide(slides[index], index));
4064
+ });
4065
+ }
4066
+ elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {
4067
+ slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
4068
+ });
4069
+ onRendered();
4070
+ }
4071
+ function appendSlide(slides) {
4072
+ if (typeof slides === 'object' && 'length' in slides) {
4073
+ for (let i = 0; i < slides.length; i += 1) {
4074
+ if (slides[i]) swiper.virtual.slides.push(slides[i]);
4075
+ }
4076
+ } else {
4077
+ swiper.virtual.slides.push(slides);
4078
+ }
4079
+ update(true);
4080
+ }
4081
+ function prependSlide(slides) {
4082
+ const activeIndex = swiper.activeIndex;
4083
+ let newActiveIndex = activeIndex + 1;
4084
+ let numberOfNewSlides = 1;
4085
+ if (Array.isArray(slides)) {
4086
+ for (let i = 0; i < slides.length; i += 1) {
4087
+ if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
4088
+ }
4089
+ newActiveIndex = activeIndex + slides.length;
4090
+ numberOfNewSlides = slides.length;
4091
+ } else {
4092
+ swiper.virtual.slides.unshift(slides);
4093
+ }
4094
+ if (swiper.params.virtual.cache) {
4095
+ const cache = swiper.virtual.cache;
4096
+ const newCache = {};
4097
+ Object.keys(cache).forEach(cachedIndex => {
4098
+ const cachedEl = cache[cachedIndex];
4099
+ const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');
4100
+ if (cachedElIndex) {
4101
+ cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);
4102
+ }
4103
+ newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;
4104
+ });
4105
+ swiper.virtual.cache = newCache;
4106
+ }
4107
+ update(true);
4108
+ swiper.slideTo(newActiveIndex, 0);
4109
+ }
4110
+ function removeSlide(slidesIndexes) {
4111
+ if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
4112
+ let activeIndex = swiper.activeIndex;
4113
+ if (Array.isArray(slidesIndexes)) {
4114
+ for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
4115
+ swiper.virtual.slides.splice(slidesIndexes[i], 1);
4116
+ if (swiper.params.virtual.cache) {
4117
+ delete swiper.virtual.cache[slidesIndexes[i]];
4118
+ }
4119
+ if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
4120
+ activeIndex = Math.max(activeIndex, 0);
4121
+ }
4122
+ } else {
4123
+ swiper.virtual.slides.splice(slidesIndexes, 1);
4124
+ if (swiper.params.virtual.cache) {
4125
+ delete swiper.virtual.cache[slidesIndexes];
4126
+ }
4127
+ if (slidesIndexes < activeIndex) activeIndex -= 1;
4128
+ activeIndex = Math.max(activeIndex, 0);
4129
+ }
4130
+ update(true);
4131
+ swiper.slideTo(activeIndex, 0);
4132
+ }
4133
+ function removeAllSlides() {
4134
+ swiper.virtual.slides = [];
4135
+ if (swiper.params.virtual.cache) {
4136
+ swiper.virtual.cache = {};
4137
+ }
4138
+ update(true);
4139
+ swiper.slideTo(0, 0);
4140
+ }
4141
+ on('beforeInit', () => {
4142
+ if (!swiper.params.virtual.enabled) return;
4143
+ let domSlidesAssigned;
4144
+ if (typeof swiper.passedParams.virtual.slides === 'undefined') {
4145
+ const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));
4146
+ if (slides && slides.length) {
4147
+ swiper.virtual.slides = [...slides];
4148
+ domSlidesAssigned = true;
4149
+ slides.forEach((slideEl, slideIndex) => {
4150
+ slideEl.setAttribute('data-swiper-slide-index', slideIndex);
4151
+ swiper.virtual.cache[slideIndex] = slideEl;
4152
+ slideEl.remove();
4153
+ });
4154
+ }
4155
+ }
4156
+ if (!domSlidesAssigned) {
4157
+ swiper.virtual.slides = swiper.params.virtual.slides;
4158
+ }
4159
+ swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
4160
+ swiper.params.watchSlidesProgress = true;
4161
+ swiper.originalParams.watchSlidesProgress = true;
4162
+ if (!swiper.params.initialSlide) {
4163
+ update();
4164
+ }
4165
+ });
4166
+ on('setTranslate', () => {
4167
+ if (!swiper.params.virtual.enabled) return;
4168
+ if (swiper.params.cssMode && !swiper._immediateVirtual) {
4169
+ clearTimeout(cssModeTimeout);
4170
+ cssModeTimeout = setTimeout(() => {
4171
+ update();
4172
+ }, 100);
4173
+ } else {
4174
+ update();
4175
+ }
4176
+ });
4177
+ on('init update resize', () => {
4178
+ if (!swiper.params.virtual.enabled) return;
4179
+ if (swiper.params.cssMode) {
4180
+ setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);
4181
+ }
4182
+ });
4183
+ Object.assign(swiper.virtual, {
4184
+ appendSlide,
4185
+ prependSlide,
4186
+ removeSlide,
4187
+ removeAllSlides,
4188
+ update
4189
+ });
4190
+ }
4191
+
3868
4192
  function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
3869
4193
  if (swiper.params.createElements) {
3870
4194
  Object.keys(checkProps).forEach(key => {
@@ -5055,7 +5379,7 @@ const HyHeroCarousel = class {
5055
5379
  }
5056
5380
  componentDidLoad() {
5057
5381
  new Swiper(".swiper", {
5058
- modules: [Navigation, Pagination, A11y, EffectFade],
5382
+ modules: [Navigation, Pagination, A11y, EffectFade, Virtual],
5059
5383
  enabled: true,
5060
5384
  effect: 'fade',
5061
5385
  fadeEffect: {
@@ -5066,6 +5390,9 @@ const HyHeroCarousel = class {
5066
5390
  spaceBetween: 50,
5067
5391
  virtual: {
5068
5392
  enabled: true,
5393
+ cache: true,
5394
+ addSlidesAfter: 0,
5395
+ addSlidesBefore: 0,
5069
5396
  },
5070
5397
  navigation: {
5071
5398
  nextEl: ".swiper-button-next",