@geotrekce/geotrek-rando-widget 0.0.2 → 0.0.5

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 (98) hide show
  1. package/dist/cjs/geotrek-rando-widget.cjs.js +2 -2
  2. package/dist/cjs/grw-app.cjs.entry.js +93 -0
  3. package/dist/cjs/{grw-app_7.cjs.entry.js → grw-filter_6.cjs.entry.js} +424 -384
  4. package/dist/cjs/grw-information-desk-detail_3.cjs.entry.js +52 -0
  5. package/dist/cjs/grw-trek-card.cjs.entry.js +47 -0
  6. package/dist/cjs/{index-c6f73e30.js → index-c2c4531d.js} +46 -1
  7. package/dist/cjs/length-d315d156.js +34 -0
  8. package/dist/cjs/loader.cjs.js +2 -2
  9. package/dist/cjs/store-972b8d2a.js +209 -0
  10. package/dist/collection/collection-manifest.json +4 -0
  11. package/dist/collection/components/grw-app/grw-app.css +70 -5
  12. package/dist/collection/components/grw-app/grw-app.js +139 -33
  13. package/dist/collection/components/grw-filter/grw-filter.css +29 -0
  14. package/dist/collection/components/grw-filter/grw-filter.js +132 -0
  15. package/dist/collection/components/grw-information-desk-detail/grw-information-desk-detail.css +31 -0
  16. package/dist/collection/components/grw-information-desk-detail/grw-information-desk-detail.js +53 -0
  17. package/dist/collection/components/grw-map/grw-map.css +99 -0
  18. package/dist/collection/components/grw-map/grw-map.js +315 -42
  19. package/dist/collection/components/grw-poi-detail/grw-poi-detail.css +31 -0
  20. package/dist/collection/components/grw-poi-detail/grw-poi-detail.js +41 -0
  21. package/dist/collection/components/grw-sensitive-area-detail/grw-sensitive-area-detail.css +39 -0
  22. package/dist/collection/components/grw-sensitive-area-detail/grw-sensitive-area-detail.js +52 -0
  23. package/dist/collection/components/grw-trek-card/grw-trek-card.css +67 -30
  24. package/dist/collection/components/grw-trek-card/grw-trek-card.js +37 -13
  25. package/dist/collection/components/grw-trek-detail/grw-trek-detail.css +160 -1
  26. package/dist/collection/components/grw-trek-detail/grw-trek-detail.js +123 -8
  27. package/dist/collection/components/grw-treks-list/grw-treks-list.css +17 -3
  28. package/dist/collection/components/grw-treks-list/grw-treks-list.js +29 -7
  29. package/dist/collection/store/grw-trek-provider.js +36 -8
  30. package/dist/collection/store/grw-treks-provider.js +16 -7
  31. package/dist/collection/store/store.js +10 -0
  32. package/dist/collection/stories/App.js +22 -16
  33. package/dist/collection/stories/App.stories.js +14 -9
  34. package/dist/collection/stories/TrekCard.js +2 -1
  35. package/dist/collection/stories/TrekCard.stories.js +4 -3
  36. package/dist/collection/stories/TrekDetail.js +3 -1
  37. package/dist/collection/stories/TrekDetail.stories.js +5 -3
  38. package/dist/collection/stories/TrekMap.js +6 -4
  39. package/dist/collection/stories/TrekMap.stories.js +10 -7
  40. package/dist/collection/stories/TreksList.js +10 -9
  41. package/dist/collection/stories/TreksList.stories.js +4 -3
  42. package/dist/collection/stories/TreksMap.stories.js +6 -5
  43. package/dist/collection/utils/utils.js +2 -2
  44. package/dist/components/grw-app.js +76 -11
  45. package/dist/components/grw-filter.d.ts +11 -0
  46. package/dist/components/grw-filter.js +6 -0
  47. package/dist/components/grw-filter2.js +95 -0
  48. package/dist/components/grw-information-desk-detail.d.ts +11 -0
  49. package/dist/components/grw-information-desk-detail.js +6 -0
  50. package/dist/components/grw-information-desk-detail2.js +34 -0
  51. package/dist/components/grw-map2.js +263 -39
  52. package/dist/components/grw-poi-detail.d.ts +11 -0
  53. package/dist/components/grw-poi-detail.js +6 -0
  54. package/dist/components/grw-poi-detail2.js +32 -0
  55. package/dist/components/grw-sensitive-area-detail.d.ts +11 -0
  56. package/dist/components/grw-sensitive-area-detail.js +6 -0
  57. package/dist/components/grw-sensitive-area-detail2.js +37 -0
  58. package/dist/components/grw-trek-card2.js +11 -6
  59. package/dist/components/grw-trek-detail2.js +40 -7
  60. package/dist/components/grw-trek-provider2.js +36 -8
  61. package/dist/components/grw-treks-list2.js +10 -7
  62. package/dist/components/grw-treks-provider2.js +16 -7
  63. package/dist/components/length.js +2 -2
  64. package/dist/components/store.js +10 -0
  65. package/dist/esm/geotrek-rando-widget.js +2 -2
  66. package/dist/esm/grw-app.entry.js +89 -0
  67. package/dist/esm/{grw-app_7.entry.js → grw-filter_6.entry.js} +398 -357
  68. package/dist/esm/grw-information-desk-detail_3.entry.js +46 -0
  69. package/dist/esm/grw-trek-card.entry.js +43 -0
  70. package/dist/esm/{index-7aa9e822.js → index-192d910f.js} +47 -2
  71. package/dist/esm/length-d82189db.js +27 -0
  72. package/dist/esm/loader.js +2 -2
  73. package/dist/esm/store-5a42b5d8.js +206 -0
  74. package/dist/geotrek-rando-widget/geotrek-rando-widget.css +1 -1
  75. package/dist/geotrek-rando-widget/geotrek-rando-widget.esm.js +1 -1
  76. package/dist/geotrek-rando-widget/p-206a52d9.entry.js +1 -0
  77. package/dist/geotrek-rando-widget/p-2d9ae918.entry.js +1 -0
  78. package/dist/geotrek-rando-widget/p-6dce5e6c.js +2 -0
  79. package/dist/geotrek-rando-widget/p-8cfa03c0.entry.js +1 -0
  80. package/dist/geotrek-rando-widget/p-d3aa9819.entry.js +1 -0
  81. package/dist/geotrek-rando-widget/p-e63213a9.js +1 -0
  82. package/dist/geotrek-rando-widget/p-f3f7d6be.js +1 -0
  83. package/dist/types/components/grw-app/grw-app.d.ts +13 -2
  84. package/dist/types/components/grw-filter/grw-filter.d.ts +9 -0
  85. package/dist/types/components/grw-information-desk-detail/grw-information-desk-detail.d.ts +5 -0
  86. package/dist/types/components/grw-map/grw-map.d.ts +14 -4
  87. package/dist/types/components/grw-poi-detail/grw-poi-detail.d.ts +5 -0
  88. package/dist/types/components/grw-sensitive-area-detail/grw-sensitive-area-detail.d.ts +5 -0
  89. package/dist/types/components/grw-trek-card/grw-trek-card.d.ts +6 -4
  90. package/dist/types/components/grw-trek-detail/grw-trek-detail.d.ts +10 -4
  91. package/dist/types/components/grw-treks-list/grw-treks-list.d.ts +1 -0
  92. package/dist/types/components.d.ts +88 -3
  93. package/dist/types/store/store.d.ts +21 -1
  94. package/dist/types/types/types.d.ts +119 -3
  95. package/package.json +9 -10
  96. package/readme.md +19 -1
  97. package/dist/geotrek-rando-widget/p-332ba9ab.js +0 -2
  98. package/dist/geotrek-rando-widget/p-b7c66d2d.entry.js +0 -1
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-c2c4531d.js');
6
+ const store = require('./store-972b8d2a.js');
7
+
8
+ const grwInformationDeskDetailCss = ":host{display:flex;flex-direction:column}:host a{color:var(--color-primary)}.information-desk-img{width:180px}.information-desk-img img{width:180px;border-radius:8px}.information-desk-sub-container{display:flex;flex-direction:column}.information-desk-name{color:var(--color-primary);font-size:24px;font-weight:bold;padding:12px 0px}.information-desk-description{font-size:16px}";
9
+
10
+ const GrwInformationDeskDetail = class {
11
+ constructor(hostRef) {
12
+ index.registerInstance(this, hostRef);
13
+ }
14
+ render() {
15
+ return (index.h(index.Host, null, this.informationDesk.photo_url && (index.h("div", { class: "information-desk-img" }, index.h("img", { src: this.informationDesk.photo_url, loading: "lazy" }))), index.h("div", { class: "information-desk-sub-container" }, this.informationDesk.name && index.h("div", { class: "information-desk-name" }, this.informationDesk.name), this.informationDesk.description && index.h("div", { class: "information-desk-description", innerHTML: this.informationDesk.description }), this.informationDesk.postal_code ||
16
+ this.informationDesk.municipality ||
17
+ (this.informationDesk.street && (index.h("div", null, this.informationDesk.postal_code, ` ${this.informationDesk.municipality}`, ` ${this.informationDesk.street}`))), this.informationDesk.phone && (index.h("div", null, index.h("a", { href: `tel:${this.informationDesk.phone}` }, this.informationDesk.phone))), this.informationDesk.email && (index.h("div", null, index.h("a", { href: `mailto:${this.informationDesk.email}` }, this.informationDesk.email))), this.informationDesk.website && (index.h("div", null, index.h("a", { href: `${this.informationDesk.website}` }, this.informationDesk.website))))));
18
+ }
19
+ };
20
+ GrwInformationDeskDetail.style = grwInformationDeskDetailCss;
21
+
22
+ const grwPoiDetailCss = ":host{display:flex;flex-direction:column}:host a{color:var(--color-primary)}.poi-img{width:180px}.poi-img img{width:180px;border-radius:8px}.poi-sub-container{display:flex;flex-direction:column}.poi-name{color:var(--color-primary);font-size:24px;font-weight:bold;padding:12px 0px}.poi-description{font-size:16px}";
23
+
24
+ const GrwPoiDetail = class {
25
+ constructor(hostRef) {
26
+ index.registerInstance(this, hostRef);
27
+ }
28
+ render() {
29
+ return (index.h(index.Host, null, this.poi.attachments && this.poi.attachments[0] && this.poi.attachments[0].thumbnail && (index.h("div", { class: "poi-img" }, index.h("img", { src: this.poi.attachments[0].thumbnail, loading: "lazy" }))), index.h("div", { class: "poi-sub-container" }, index.h("div", { class: "poi-name" }, this.poi.name), index.h("div", { class: "poi-description", innerHTML: this.poi.description }))));
30
+ }
31
+ };
32
+ GrwPoiDetail.style = grwPoiDetailCss;
33
+
34
+ const grwSensitiveAreaDetailCss = ":host{display:flex;flex-direction:column}:host a{color:var(--color-primary)}.sensitive-area-title{color:var(--color-primary);font-size:24px;padding:12px 0px}.sensitive-area-description{font-size:16px}.sensitive-area-period-container .sensitive-area-period-title,.sensitive-area-period-container .sensitive-area-practice-title,.sensitive-area-period-container .sensitive-area-contact-title,.sensitive-area-practice-container .sensitive-area-period-title,.sensitive-area-practice-container .sensitive-area-practice-title,.sensitive-area-practice-container .sensitive-area-contact-title,.sensitive-area-contact-container .sensitive-area-period-title,.sensitive-area-contact-container .sensitive-area-practice-title,.sensitive-area-contact-container .sensitive-area-contact-title{color:var(--color-primary);font-size:24px;padding:12px 0px}.sensitive-area-period-container .sensitive-area-period-values,.sensitive-area-period-container .sensitive-area-practice-values,.sensitive-area-practice-container .sensitive-area-period-values,.sensitive-area-practice-container .sensitive-area-practice-values,.sensitive-area-contact-container .sensitive-area-period-values,.sensitive-area-contact-container .sensitive-area-practice-values{display:flex}";
35
+
36
+ const GrwSensitiveAreaDetail = class {
37
+ constructor(hostRef) {
38
+ index.registerInstance(this, hostRef);
39
+ }
40
+ render() {
41
+ return (index.h(index.Host, null, index.h("div", { class: "sensitive-area-title" }, this.sensitiveArea.name), index.h("div", { class: "sensitive-area-description", innerHTML: this.sensitiveArea.description }), this.sensitiveArea.practices && this.sensitiveArea.practices.length > 0 && (index.h("div", { class: "sensitive-area-practice-container" }, index.h("div", { class: "sensitive-area-practice-title" }, "Domaines d'activit\u00E9s concern\u00E9s :"), index.h("div", { class: "sensitive-area-practice-values" }, this.sensitiveArea.practices.map((practice, index$1) => (index.h("div", { innerHTML: `${store.state.practices.find(statePractice => statePractice.id === practice).name.toUpperCase()}${index$1 + 1 !== this.sensitiveArea.practices.length ? ' - ' : ''}` })))))), this.sensitiveArea.period && this.sensitiveArea.period.length > 0 && (index.h("div", { class: "sensitive-area-period-container" }, index.h("div", { class: "sensitive-area-period-title" }, "P\u00E9riodes de sensibilit\u00E9"), index.h("div", { class: "sensitive-area-period-values" }, this.sensitiveArea.period.map((month, index$1) => {
42
+ if (month) {
43
+ return (index.h("div", { innerHTML: `${new Date(0, index$1 + 1, 0).toLocaleDateString('fr', { month: 'long' }).toUpperCase()}${this.sensitiveArea.period.slice(index$1 + 1).find(month => month) ? ' - ' : ''}` }));
44
+ }
45
+ })))), index.h("div", { class: "sensitive-area-contact-container" }, index.h("div", { class: "sensitive-area-contact-title" }, "Contact"), index.h("div", { innerHTML: this.sensitiveArea.contact, class: "sensitive-area-contact-value" }))));
46
+ }
47
+ };
48
+ GrwSensitiveAreaDetail.style = grwSensitiveAreaDetailCss;
49
+
50
+ exports.grw_information_desk_detail = GrwInformationDeskDetail;
51
+ exports.grw_poi_detail = GrwPoiDetail;
52
+ exports.grw_sensitive_area_detail = GrwSensitiveAreaDetail;
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-c2c4531d.js');
6
+ const store = require('./store-972b8d2a.js');
7
+ const length = require('./length-d315d156.js');
8
+
9
+ const grwTrekCardCss = ".trek-card-container,.trek-card-large-view-container{font-family:\"Roboto\";border-radius:8px;box-shadow:4px 8px 24px rgba(0, 0, 0, 0.25);cursor:pointer}.trek-card-container .image,.trek-card-large-view-container .image{object-fit:cover}.trek-card-container .sub-container,.trek-card-large-view-container .sub-container{display:flex;flex-direction:column;justify-content:center;padding:12px}.trek-card-container .sub-container .name,.trek-card-large-view-container .sub-container .name{color:var(--color-primary);font-size:24px;font-weight:bold;margin-bottom:8px}.trek-card-container .sub-container .departure,.trek-card-large-view-container .sub-container .departure{color:rgba(0, 0, 0, 0.7);font-size:16px;margin:4px 0px}.trek-card-container .sub-container .themes-container,.trek-card-large-view-container .sub-container .themes-container{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}.trek-card-container .sub-container .themes-container .theme,.trek-card-large-view-container .sub-container .themes-container .theme{background-color:var(--color-primary-tint);color:#ffffff;border-radius:8px;padding:8px;margin:0px 8px 8px 0px}.trek-card-container .sub-container .icons-labels-container,.trek-card-large-view-container .sub-container .icons-labels-container{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}.trek-card-container .sub-container .icons-labels-container .row,.trek-card-large-view-container .sub-container .icons-labels-container .row{display:flex;justify-content:space-between;align-items:center;width:100%}.trek-card-container .sub-container .icons-labels-container .row:not(:last-child),.trek-card-large-view-container .sub-container .icons-labels-container .row:not(:last-child){margin-bottom:12px}.trek-card-container .sub-container .icons-labels-container .row .icon-label,.trek-card-large-view-container .sub-container .icons-labels-container .row .icon-label{display:flex;align-items:center;width:50%}.trek-card-container .sub-container .icons-labels-container .row .icon-label:nth-child(2),.trek-card-large-view-container .sub-container .icons-labels-container .row .icon-label:nth-child(2){margin:0px 4px}.trek-card-container .sub-container .icons-labels-container .row .icon-label img,.trek-card-container .sub-container .icons-labels-container .row .icon-label .svg-icon svg,.trek-card-large-view-container .sub-container .icons-labels-container .row .icon-label img,.trek-card-large-view-container .sub-container .icons-labels-container .row .icon-label .svg-icon svg{width:24px;height:auto;margin-right:8px}.trek-card-container .sub-container .icons-labels-container .row .practice img,.trek-card-large-view-container .sub-container .icons-labels-container .row .practice img{background-color:var(--color-primary)}.trek-card-container{width:350px;height:auto}.trek-card-container .image{width:100%}.trek-card-large-view-container{height:auto;display:flex;flex-direction:row}.trek-card-large-view-container .image{width:250px}";
10
+
11
+ const GrwTrekCard = class {
12
+ constructor(hostRef) {
13
+ index.registerInstance(this, hostRef);
14
+ this.trekCardPress = index.createEvent(this, "trekCardPress", 7);
15
+ this.colorPrimary = '#6b0030';
16
+ this.colorPrimaryTint = '#974c6e';
17
+ this.isLargeView = false;
18
+ }
19
+ componentWillLoad() {
20
+ this.currentTrek = this.trek ? this.trek : store.state.currentTrek;
21
+ if (this.currentTrek) {
22
+ this.difficulty = store.state.difficulties.find(difficulty => difficulty.id === this.currentTrek.difficulty);
23
+ this.route = store.state.routes.find(route => route.id === this.currentTrek.route);
24
+ this.practice = store.state.practices.find(practice => practice.id === this.currentTrek.practice);
25
+ this.themes = store.state.themes.filter(theme => this.currentTrek.themes.includes(theme.id));
26
+ }
27
+ store.onChange('currentTrek', () => {
28
+ this.currentTrek = this.trek ? this.trek : store.state.currentTrek;
29
+ if (this.currentTrek) {
30
+ this.difficulty = store.state.difficulties.find(difficulty => difficulty.id === this.currentTrek.difficulty);
31
+ this.route = store.state.routes.find(route => route.id === this.currentTrek.route);
32
+ this.practice = store.state.practices.find(practice => practice.id === this.currentTrek.practice);
33
+ this.themes = store.state.themes.filter(theme => this.currentTrek.themes.includes(theme.id));
34
+ }
35
+ });
36
+ }
37
+ render() {
38
+ var _a, _b, _c, _d, _e, _f, _g, _h;
39
+ return (index.h(index.Host, { onClick: () => this.trekCardPress.emit(this.currentTrek.id), style: { 'width': this.isLargeView ? '100%' : 'auto', '--color-primary': this.colorPrimary, '--color-primary-tint': this.colorPrimaryTint } }, this.currentTrek && (index.h("div", { class: this.isLargeView ? 'trek-card-large-view-container' : 'trek-card-container' }, this.currentTrek.attachments && this.currentTrek.attachments[0] && this.currentTrek.attachments[0].thumbnail && (index.h("img", { class: "image", src: `${this.currentTrek.attachments[0].thumbnail}`, loading: "lazy" })), index.h("div", { class: "sub-container" }, index.h("div", { class: "departure" }, (_a = this.currentTrek) === null || _a === void 0 ? void 0 : _a.departure), index.h("div", { class: "name" }, (_b = this.currentTrek) === null || _b === void 0 ? void 0 : _b.name), index.h("div", { class: "themes-container" }, this.themes.map(theme => (index.h("div", { class: "theme" }, theme.label)))), index.h("div", { class: "icons-labels-container" }, index.h("div", { class: "row" }, index.h("div", { class: "icon-label difficulty" }, ((_c = this.difficulty) === null || _c === void 0 ? void 0 : _c.pictogram) && index.h("img", { src: this.difficulty.pictogram }), (_d = this.difficulty) === null || _d === void 0 ? void 0 :
40
+ _d.label), index.h("div", { class: "icon-label duration" }, index.h("div", { class: "svg-icon", innerHTML: length.durationImage }), length.formatDuration(this.currentTrek.duration))), index.h("div", { class: "row" }, index.h("div", { class: "icon-label length" }, index.h("div", { class: "svg-icon", innerHTML: length.lengthImage }), length.formatLength(this.currentTrek.length_2d)), index.h("div", { class: "icon-label ascent" }, index.h("div", { class: "svg-icon", innerHTML: length.ascentImage }), length.formatAscent(this.currentTrek.ascent))), index.h("div", { class: "row" }, index.h("div", { class: "icon-label route" }, ((_e = this.route) === null || _e === void 0 ? void 0 : _e.pictogram) && index.h("img", { src: this.route.pictogram }), (_f = this.route) === null || _f === void 0 ? void 0 :
41
+ _f.route), index.h("div", { class: "icon-label practice" }, ((_g = this.practice) === null || _g === void 0 ? void 0 : _g.pictogram) && index.h("img", { src: this.practice.pictogram }), (_h = this.practice) === null || _h === void 0 ? void 0 :
42
+ _h.name))))))));
43
+ }
44
+ };
45
+ GrwTrekCard.style = grwTrekCardCss;
46
+
47
+ exports.grw_trek_card = GrwTrekCard;
@@ -189,6 +189,7 @@ const isComplexType = (o) => {
189
189
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, ...children: d.ChildType[]): d.VNode;
190
190
  const h = (nodeName, vnodeData, ...children) => {
191
191
  let child = null;
192
+ let key = null;
192
193
  let simple = false;
193
194
  let lastSimple = false;
194
195
  const vNodeChildren = [];
@@ -216,6 +217,10 @@ const h = (nodeName, vnodeData, ...children) => {
216
217
  };
217
218
  walk(children);
218
219
  if (vnodeData) {
220
+ // normalize class / classname attributes
221
+ if (vnodeData.key) {
222
+ key = vnodeData.key;
223
+ }
219
224
  {
220
225
  const classData = vnodeData.className || vnodeData.class;
221
226
  if (classData) {
@@ -233,6 +238,9 @@ const h = (nodeName, vnodeData, ...children) => {
233
238
  if (vNodeChildren.length > 0) {
234
239
  vnode.$children$ = vNodeChildren;
235
240
  }
241
+ {
242
+ vnode.$key$ = key;
243
+ }
236
244
  return vnode;
237
245
  };
238
246
  const newVNode = (tag, text) => {
@@ -246,6 +254,9 @@ const newVNode = (tag, text) => {
246
254
  {
247
255
  vnode.$attrs$ = null;
248
256
  }
257
+ {
258
+ vnode.$key$ = null;
259
+ }
249
260
  return vnode;
250
261
  };
251
262
  const Host = {};
@@ -294,6 +305,8 @@ const setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags) => {
294
305
  }
295
306
  }
296
307
  }
308
+ else if (memberName === 'key')
309
+ ;
297
310
  else if ((!isProp ) &&
298
311
  memberName[0] === 'o' &&
299
312
  memberName[1] === 'n') {
@@ -458,6 +471,8 @@ const removeVnodes = (vnodes, startIdx, endIdx, vnode, elm) => {
458
471
  const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
459
472
  let oldStartIdx = 0;
460
473
  let newStartIdx = 0;
474
+ let idxInOld = 0;
475
+ let i = 0;
461
476
  let oldEndIdx = oldCh.length - 1;
462
477
  let oldStartVnode = oldCh[0];
463
478
  let oldEndVnode = oldCh[oldEndIdx];
@@ -465,6 +480,7 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
465
480
  let newStartVnode = newCh[0];
466
481
  let newEndVnode = newCh[newEndIdx];
467
482
  let node;
483
+ let elmToMove;
468
484
  while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
469
485
  if (oldStartVnode == null) {
470
486
  // Vnode might have been moved left
@@ -502,7 +518,29 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
502
518
  newStartVnode = newCh[++newStartIdx];
503
519
  }
504
520
  else {
521
+ // createKeyToOldIdx
522
+ idxInOld = -1;
505
523
  {
524
+ for (i = oldStartIdx; i <= oldEndIdx; ++i) {
525
+ if (oldCh[i] && oldCh[i].$key$ !== null && oldCh[i].$key$ === newStartVnode.$key$) {
526
+ idxInOld = i;
527
+ break;
528
+ }
529
+ }
530
+ }
531
+ if (idxInOld >= 0) {
532
+ elmToMove = oldCh[idxInOld];
533
+ if (elmToMove.$tag$ !== newStartVnode.$tag$) {
534
+ node = createElm(oldCh && oldCh[newStartIdx], newVNode, idxInOld);
535
+ }
536
+ else {
537
+ patch(elmToMove, newStartVnode);
538
+ oldCh[idxInOld] = undefined;
539
+ node = elmToMove.$elm$;
540
+ }
541
+ newStartVnode = newCh[++newStartIdx];
542
+ }
543
+ else {
506
544
  // new element
507
545
  node = createElm(oldCh && oldCh[newStartIdx], newVNode, newStartIdx);
508
546
  newStartVnode = newCh[++newStartIdx];
@@ -525,7 +563,9 @@ const isSameVnode = (vnode1, vnode2) => {
525
563
  // compare if two vnode to see if they're "technically" the same
526
564
  // need to have the same element tag, and same key to be the same
527
565
  if (vnode1.$tag$ === vnode2.$tag$) {
528
- return true;
566
+ {
567
+ return vnode1.$key$ === vnode2.$key$;
568
+ }
529
569
  }
530
570
  return false;
531
571
  };
@@ -815,6 +855,11 @@ const addHydratedFlag = (elm) => elm.classList.add('hydrated')
815
855
  const parsePropertyValue = (propValue, propType) => {
816
856
  // ensure this value is of the correct prop type
817
857
  if (propValue != null && !isComplexType(propValue)) {
858
+ if (propType & 4 /* Boolean */) {
859
+ // per the HTML spec, any string value means it is a boolean true value
860
+ // but we'll cheat here and say that the string "false" is the boolean false
861
+ return propValue === 'false' ? false : propValue === '' || !!propValue;
862
+ }
818
863
  if (propType & 2 /* Number */) {
819
864
  // force it to be a number
820
865
  return parseFloat(propValue);
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ function formatDuration(duration) {
4
+ let formattedDuration;
5
+ if (duration < 24) {
6
+ formattedDuration = `${Math.floor(duration)}h`;
7
+ if (duration % 1 > 0) {
8
+ formattedDuration += `${Math.round(60 * (duration % 1))}min`;
9
+ }
10
+ }
11
+ else {
12
+ formattedDuration = `${duration / 24}j`;
13
+ }
14
+ return formattedDuration;
15
+ }
16
+ function formatLength(length) {
17
+ return `${Math.round(length / 1000)}km`;
18
+ }
19
+ function formatAscent(ascent) {
20
+ return `${ascent}m`;
21
+ }
22
+
23
+ const ascentImage = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><polyline points="352 144 464 144 464 256" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/><path d="M48,368,169.37,246.63a32,32,0,0,1,45.26,0l50.74,50.74a32,32,0,0,0,45.26,0L448,160" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/></svg>`;
24
+
25
+ const durationImage = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><path d="M145.61,464H366.39c19.8,0,35.55-16.29,33.42-35.06C386.06,308,304,310,304,256s83.11-51,95.8-172.94c2-18.78-13.61-35.06-33.41-35.06H145.61c-19.8,0-35.37,16.28-33.41,35.06C124.89,205,208,201,208,256s-82.06,52-95.8,172.94C110.06,447.71,125.81,464,145.61,464Z" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/><path d="M343.3,432H169.13c-15.6,0-20-18-9.06-29.16C186.55,376,240,356.78,240,326V224c0-19.85-38-35-61.51-67.2-3.88-5.31-3.49-12.8,6.37-12.8H327.59c8.41,0,10.23,7.43,6.4,12.75C310.82,189,272,204.05,272,224V326c0,30.53,55.71,47,80.4,76.87C362.35,414.91,358.87,432,343.3,432Z"/></svg>`;
26
+
27
+ const lengthImage = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><polyline points="304 96 416 96 416 208" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/><line x1="405.77" y1="106.2" x2="111.98" y2="400.02" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/><polyline points="208 416 96 416 96 304" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/></svg>`;
28
+
29
+ exports.ascentImage = ascentImage;
30
+ exports.durationImage = durationImage;
31
+ exports.formatAscent = formatAscent;
32
+ exports.formatDuration = formatDuration;
33
+ exports.formatLength = formatLength;
34
+ exports.lengthImage = lengthImage;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-c6f73e30.js');
5
+ const index = require('./index-c2c4531d.js');
6
6
 
7
7
  /*
8
8
  Stencil Client Patch Esm v2.16.1 | MIT Licensed | https://stenciljs.com
@@ -14,7 +14,7 @@ const patchEsm = () => {
14
14
  const defineCustomElements = (win, options) => {
15
15
  if (typeof window === 'undefined') return Promise.resolve();
16
16
  return patchEsm().then(() => {
17
- return index.bootstrapLazy([["grw-app_7.cjs",[[1,"grw-app",{"api":[1],"inBbox":[1,"in-bbox"],"cities":[1],"districts":[1],"structures":[1],"themes":[1],"portals":[1],"routes":[1],"practices":[1],"appName":[1,"app-name"],"urlLayer":[1,"url-layer"],"center":[1],"zoom":[8],"attribution":[1],"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"colorTrekLine":[1,"color-trek-line"],"colorDepartureIcon":[1,"color-departure-icon"],"colorArrivalIcon":[1,"color-arrival-icon"],"showTrek":[32],"showMap":[32],"isLargeView":[32],"currentTrekId":[32]},[[0,"trekCardPress","onTrekCardPress"],[9,"resize","onWindowResize"]]],[1,"grw-treks-list",{"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"treksToDisplay":[32]}],[0,"grw-map",{"urlLayer":[1,"url-layer"],"attribution":[1],"center":[1],"zoom":[2],"colorTrekLine":[1,"color-trek-line"],"colorDepartureIcon":[1,"color-departure-icon"],"colorArrivalIcon":[1,"color-arrival-icon"],"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"mapIsReady":[32]}],[1,"grw-trek-detail",{"trek":[16],"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"currentTrek":[32],"difficulty":[32],"route":[32],"practice":[32]}],[1,"grw-trek-provider",{"language":[1],"api":[1],"trekId":[1,"trek-id"]}],[1,"grw-treks-provider",{"language":[1],"api":[1],"inBbox":[1,"in-bbox"],"cities":[1],"districts":[1],"structures":[1],"themes":[1],"portals":[1],"routes":[1],"practices":[1]}],[1,"grw-trek-card",{"trek":[16],"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"currentTrek":[32],"difficulty":[32],"route":[32],"practice":[32]}]]]], options);
17
+ return index.bootstrapLazy([["grw-trek-card.cjs",[[1,"grw-trek-card",{"trek":[16],"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"isLargeView":[4,"is-large-view"],"currentTrek":[32],"difficulty":[32],"route":[32],"practice":[32],"themes":[32]}]]],["grw-information-desk-detail_3.cjs",[[1,"grw-information-desk-detail",{"informationDesk":[16]}],[1,"grw-poi-detail",{"poi":[16]}],[1,"grw-sensitive-area-detail",{"sensitiveArea":[16]}]]],["grw-filter_6.cjs",[[1,"grw-trek-detail",{"trek":[16],"colorPrimary":[1,"color-primary"],"colorPrimaryShade":[1,"color-primary-shade"],"colorPrimaryTint":[1,"color-primary-tint"],"difficulty":[32],"route":[32],"practice":[32],"themes":[32],"labels":[32],"sources":[32],"accessibilities":[32],"accessibilityLevel":[32],"currentTrek":[32]}],[1,"grw-treks-list",{"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"isLargeView":[4,"is-large-view"],"treksToDisplay":[32]}],[1,"grw-filter",{"filterType":[1,"filter-type"],"filterName":[1,"filter-name"],"filterNameProperty":[1,"filter-name-property"]}],[0,"grw-map",{"urlLayer":[1,"url-layer"],"attribution":[1],"center":[1],"zoom":[2],"colorPrimary":[1,"color-primary"],"colorPrimaryTint":[1,"color-primary-tint"],"colorTrekLine":[1,"color-trek-line"],"colorDepartureIcon":[1,"color-departure-icon"],"colorArrivalIcon":[1,"color-arrival-icon"],"colorSensitiveArea":[1,"color-sensitive-area"],"colorPoiIcon":[1,"color-poi-icon"],"mapIsReady":[32]}],[1,"grw-trek-provider",{"language":[1],"api":[1],"trekId":[1,"trek-id"]}],[1,"grw-treks-provider",{"language":[1],"api":[1],"inBbox":[1,"in-bbox"],"cities":[1],"districts":[1],"structures":[1],"themes":[1],"portals":[1],"routes":[1],"practices":[1]}]]],["grw-app.cjs",[[1,"grw-app",{"api":[1],"language":[1],"inBbox":[1,"in-bbox"],"cities":[1],"districts":[1],"structures":[1],"themes":[1],"portals":[1],"routes":[1],"practices":[1],"urlLayer":[1,"url-layer"],"center":[1],"zoom":[8],"attribution":[1],"colorPrimary":[1,"color-primary"],"colorPrimaryShade":[1,"color-primary-shade"],"colorPrimaryTint":[1,"color-primary-tint"],"colorTrekLine":[1,"color-trek-line"],"colorDepartureIcon":[1,"color-departure-icon"],"colorArrivalIcon":[1,"color-arrival-icon"],"colorSensitiveArea":[1,"color-sensitive-area"],"colorPoiIcon":[1,"color-poi-icon"],"showTrek":[32],"showTreksMap":[32],"showTrekMap":[32],"showFilters":[32],"isLargeView":[32],"currentTrekId":[32]},[[0,"trekCardPress","onTrekCardPress"],[9,"resize","onWindowResize"]]]]]], options);
18
18
  });
19
19
  };
20
20
 
@@ -0,0 +1,209 @@
1
+ 'use strict';
2
+
3
+ const index = require('./index-c2c4531d.js');
4
+
5
+ const appendToMap = (map, propName, value) => {
6
+ const items = map.get(propName);
7
+ if (!items) {
8
+ map.set(propName, [value]);
9
+ }
10
+ else if (!items.includes(value)) {
11
+ items.push(value);
12
+ }
13
+ };
14
+ const debounce = (fn, ms) => {
15
+ let timeoutId;
16
+ return (...args) => {
17
+ if (timeoutId) {
18
+ clearTimeout(timeoutId);
19
+ }
20
+ timeoutId = setTimeout(() => {
21
+ timeoutId = 0;
22
+ fn(...args);
23
+ }, ms);
24
+ };
25
+ };
26
+
27
+ /**
28
+ * Check if a possible element isConnected.
29
+ * The property might not be there, so we check for it.
30
+ *
31
+ * We want it to return true if isConnected is not a property,
32
+ * otherwise we would remove these elements and would not update.
33
+ *
34
+ * Better leak in Edge than to be useless.
35
+ */
36
+ const isConnected = (maybeElement) => !('isConnected' in maybeElement) || maybeElement.isConnected;
37
+ const cleanupElements = debounce((map) => {
38
+ for (let key of map.keys()) {
39
+ map.set(key, map.get(key).filter(isConnected));
40
+ }
41
+ }, 2000);
42
+ const stencilSubscription = () => {
43
+ if (typeof index.getRenderingRef !== 'function') {
44
+ // If we are not in a stencil project, we do nothing.
45
+ // This function is not really exported by @stencil/core.
46
+ return {};
47
+ }
48
+ const elmsToUpdate = new Map();
49
+ return {
50
+ dispose: () => elmsToUpdate.clear(),
51
+ get: (propName) => {
52
+ const elm = index.getRenderingRef();
53
+ if (elm) {
54
+ appendToMap(elmsToUpdate, propName, elm);
55
+ }
56
+ },
57
+ set: (propName) => {
58
+ const elements = elmsToUpdate.get(propName);
59
+ if (elements) {
60
+ elmsToUpdate.set(propName, elements.filter(index.forceUpdate));
61
+ }
62
+ cleanupElements(elmsToUpdate);
63
+ },
64
+ reset: () => {
65
+ elmsToUpdate.forEach((elms) => elms.forEach(index.forceUpdate));
66
+ cleanupElements(elmsToUpdate);
67
+ },
68
+ };
69
+ };
70
+
71
+ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => {
72
+ let states = new Map(Object.entries(defaultState !== null && defaultState !== void 0 ? defaultState : {}));
73
+ const handlers = {
74
+ dispose: [],
75
+ get: [],
76
+ set: [],
77
+ reset: [],
78
+ };
79
+ const reset = () => {
80
+ states = new Map(Object.entries(defaultState !== null && defaultState !== void 0 ? defaultState : {}));
81
+ handlers.reset.forEach((cb) => cb());
82
+ };
83
+ const dispose = () => {
84
+ // Call first dispose as resetting the state would
85
+ // cause less updates ;)
86
+ handlers.dispose.forEach((cb) => cb());
87
+ reset();
88
+ };
89
+ const get = (propName) => {
90
+ handlers.get.forEach((cb) => cb(propName));
91
+ return states.get(propName);
92
+ };
93
+ const set = (propName, value) => {
94
+ const oldValue = states.get(propName);
95
+ if (shouldUpdate(value, oldValue, propName)) {
96
+ states.set(propName, value);
97
+ handlers.set.forEach((cb) => cb(propName, value, oldValue));
98
+ }
99
+ };
100
+ const state = (typeof Proxy === 'undefined'
101
+ ? {}
102
+ : new Proxy(defaultState, {
103
+ get(_, propName) {
104
+ return get(propName);
105
+ },
106
+ ownKeys(_) {
107
+ return Array.from(states.keys());
108
+ },
109
+ getOwnPropertyDescriptor() {
110
+ return {
111
+ enumerable: true,
112
+ configurable: true,
113
+ };
114
+ },
115
+ has(_, propName) {
116
+ return states.has(propName);
117
+ },
118
+ set(_, propName, value) {
119
+ set(propName, value);
120
+ return true;
121
+ },
122
+ }));
123
+ const on = (eventName, callback) => {
124
+ handlers[eventName].push(callback);
125
+ return () => {
126
+ removeFromArray(handlers[eventName], callback);
127
+ };
128
+ };
129
+ const onChange = (propName, cb) => {
130
+ const unSet = on('set', (key, newValue) => {
131
+ if (key === propName) {
132
+ cb(newValue);
133
+ }
134
+ });
135
+ const unReset = on('reset', () => cb(defaultState[propName]));
136
+ return () => {
137
+ unSet();
138
+ unReset();
139
+ };
140
+ };
141
+ const use = (...subscriptions) => {
142
+ const unsubs = subscriptions.reduce((unsubs, subscription) => {
143
+ if (subscription.set) {
144
+ unsubs.push(on('set', subscription.set));
145
+ }
146
+ if (subscription.get) {
147
+ unsubs.push(on('get', subscription.get));
148
+ }
149
+ if (subscription.reset) {
150
+ unsubs.push(on('reset', subscription.reset));
151
+ }
152
+ if (subscription.dispose) {
153
+ unsubs.push(on('dispose', subscription.dispose));
154
+ }
155
+ return unsubs;
156
+ }, []);
157
+ return () => unsubs.forEach((unsub) => unsub());
158
+ };
159
+ const forceUpdate = (key) => {
160
+ const oldValue = states.get(key);
161
+ handlers.set.forEach((cb) => cb(key, oldValue, oldValue));
162
+ };
163
+ return {
164
+ state,
165
+ get,
166
+ set,
167
+ on,
168
+ onChange,
169
+ use,
170
+ dispose,
171
+ reset,
172
+ forceUpdate,
173
+ };
174
+ };
175
+ const removeFromArray = (array, item) => {
176
+ const index = array.indexOf(item);
177
+ if (index >= 0) {
178
+ array[index] = array[array.length - 1];
179
+ array.length--;
180
+ }
181
+ };
182
+
183
+ const createStore = (defaultState, shouldUpdate) => {
184
+ const map = createObservableMap(defaultState, shouldUpdate);
185
+ map.use(stencilSubscription());
186
+ return map;
187
+ };
188
+
189
+ const { state, onChange } = createStore({
190
+ api: '',
191
+ treks: [],
192
+ currentTreks: [],
193
+ difficulties: [],
194
+ routes: [],
195
+ practices: [],
196
+ themes: [],
197
+ durations: [],
198
+ currentSensitiveAreas: null,
199
+ labels: null,
200
+ sources: null,
201
+ accessibilities: null,
202
+ accessibilitiesLevel: null,
203
+ currentTrek: null,
204
+ currentPois: null,
205
+ currentInformationDesks: null,
206
+ });
207
+
208
+ exports.onChange = onChange;
209
+ exports.state = state;
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "entries": [
3
3
  "./components/grw-app/grw-app.js",
4
+ "./components/grw-filter/grw-filter.js",
5
+ "./components/grw-information-desk-detail/grw-information-desk-detail.js",
4
6
  "./components/grw-map/grw-map.js",
7
+ "./components/grw-poi-detail/grw-poi-detail.js",
8
+ "./components/grw-sensitive-area-detail/grw-sensitive-area-detail.js",
5
9
  "./components/grw-trek-card/grw-trek-card.js",
6
10
  "./components/grw-trek-detail/grw-trek-detail.js",
7
11
  "./components/grw-treks-list/grw-treks-list.js",
@@ -2,6 +2,7 @@
2
2
  position: relative;
3
3
  height: 100%;
4
4
  max-height: 100vh;
5
+ font-family: "Roboto";
5
6
  }
6
7
 
7
8
  .header-container,
@@ -11,11 +12,6 @@
11
12
  background-color: var(--color-primary);
12
13
  height: 64px;
13
14
  }
14
- .header-container .title,
15
- .large-view-header-container .title {
16
- color: #ffffff;
17
- margin-left: 24px;
18
- }
19
15
  .header-container .arrow-back-icon,
20
16
  .large-view-header-container .arrow-back-icon {
21
17
  width: 48px;
@@ -28,6 +24,75 @@
28
24
  width: 48px;
29
25
  height: auto;
30
26
  }
27
+ .header-container .handle-filters-button,
28
+ .large-view-header-container .handle-filters-button {
29
+ user-select: none;
30
+ cursor: pointer;
31
+ color: var(--color-primary);
32
+ background-color: #ffffff;
33
+ margin-left: 36px;
34
+ border-radius: 8px;
35
+ padding: 8px;
36
+ }
37
+ .header-container .attribution-container,
38
+ .large-view-header-container .attribution-container {
39
+ position: absolute;
40
+ right: 24px;
41
+ }
42
+ .header-container .attribution-container a,
43
+ .large-view-header-container .attribution-container a {
44
+ color: #ffffff;
45
+ text-decoration: none;
46
+ }
47
+
48
+ .options-container {
49
+ height: calc(100% - 64px);
50
+ position: absolute;
51
+ width: 100%;
52
+ z-index: 1100;
53
+ top: 64px;
54
+ }
55
+
56
+ .filters-container {
57
+ position: absolute;
58
+ width: 100%;
59
+ background-color: #ffffff;
60
+ padding: 36px 0px;
61
+ z-index: 1100;
62
+ }
63
+ .filters-container .close-filters-button {
64
+ cursor: pointer;
65
+ font-weight: bold;
66
+ position: absolute;
67
+ top: 12px;
68
+ right: 12px;
69
+ padding: 12px;
70
+ border-radius: 12px;
71
+ color: var(--color-primary);
72
+ border: 1px var(--color-primary) solid;
73
+ }
74
+ .filters-container .close-filters-button:hover {
75
+ background-color: var(--color-primary);
76
+ color: #ffffff;
77
+ }
78
+ .filters-container .filter-margin-top {
79
+ margin-top: 24px;
80
+ }
81
+ .filters-container .current-treks-length {
82
+ margin: 0px 0px 32px 8px;
83
+ color: var(--color-primary);
84
+ font-size: 24px;
85
+ font-weight: bold;
86
+ }
87
+
88
+ .back-filters-container {
89
+ background-color: rgba(0, 0, 0, 0.5);
90
+ width: 100%;
91
+ height: calc(100% - 64px);
92
+ position: absolute;
93
+ z-index: 1099;
94
+ top: 64px;
95
+ }
31
96
 
32
97
  .loader-container,
33
98
  .large-view-loader-container {