@dso-toolkit/core 34.0.0 → 34.2.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 (58) hide show
  1. package/dist/cjs/dso-date-picker.cjs.entry.js +47 -25
  2. package/dist/cjs/dso-header.cjs.entry.js +1 -1
  3. package/dist/cjs/dso-info_2.cjs.entry.js +4 -1
  4. package/dist/cjs/dso-map-base-layers.cjs.entry.js +14 -1
  5. package/dist/cjs/dso-map-controls.cjs.entry.js +1 -1
  6. package/dist/cjs/dso-map-overlays.cjs.entry.js +14 -1
  7. package/dist/cjs/dso-toolkit.cjs.js +1 -1
  8. package/dist/cjs/dso-viewer-grid.cjs.entry.js +56 -19
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/collection/collection-manifest.json +2 -2
  11. package/dist/collection/components/date-picker/date-picker.css +3 -2
  12. package/dist/collection/components/date-picker/date-picker.js +47 -25
  13. package/dist/collection/components/date-picker/date-picker.template.js +2 -1
  14. package/dist/collection/components/header/header.css +21 -13
  15. package/dist/collection/components/info/info.css +20 -0
  16. package/dist/collection/components/map-base-layers/map-base-layers.js +16 -1
  17. package/dist/collection/components/map-controls/map-controls.css +12 -0
  18. package/dist/collection/components/map-overlays/map-overlays.js +16 -1
  19. package/dist/collection/components/selectable/selectable.js +25 -1
  20. package/dist/collection/components/viewer-grid/viewer-grid-filterpanel-buttons.js +7 -0
  21. package/dist/collection/components/viewer-grid/viewer-grid.css +480 -25
  22. package/dist/collection/components/viewer-grid/viewer-grid.js +112 -21
  23. package/dist/collection/components/viewer-grid/viewer-grid.template.js +7 -3
  24. package/dist/custom-elements/index.js +138 -50
  25. package/dist/dso-toolkit/dso-toolkit.css +1 -1
  26. package/dist/dso-toolkit/dso-toolkit.esm.js +1 -1
  27. package/dist/dso-toolkit/p-3c4dbd89.entry.js +1 -0
  28. package/dist/dso-toolkit/p-50b63cf4.entry.js +1 -0
  29. package/dist/dso-toolkit/{p-10aa1fba.entry.js → p-88bc5873.entry.js} +1 -1
  30. package/dist/dso-toolkit/p-8b6e3abc.entry.js +1 -0
  31. package/dist/dso-toolkit/p-94b79e43.entry.js +1 -0
  32. package/dist/dso-toolkit/p-ad540748.entry.js +1 -0
  33. package/dist/dso-toolkit/p-de3ab027.entry.js +5 -0
  34. package/dist/esm/dso-date-picker.entry.js +47 -25
  35. package/dist/esm/dso-header.entry.js +1 -1
  36. package/dist/esm/dso-info_2.entry.js +4 -1
  37. package/dist/esm/dso-map-base-layers.entry.js +14 -1
  38. package/dist/esm/dso-map-controls.entry.js +1 -1
  39. package/dist/esm/dso-map-overlays.entry.js +14 -1
  40. package/dist/esm/dso-toolkit.js +1 -1
  41. package/dist/esm/dso-viewer-grid.entry.js +57 -20
  42. package/dist/esm/loader.js +1 -1
  43. package/dist/types/components/date-picker/date-picker.d.ts +3 -1
  44. package/dist/types/components/date-picker/date-picker.template.d.ts +1 -1
  45. package/dist/types/components/map-base-layers/map-base-layers.d.ts +7 -2
  46. package/dist/types/components/map-overlays/map-overlays.d.ts +7 -2
  47. package/dist/types/components/selectable/selectable.d.ts +1 -0
  48. package/dist/types/components/viewer-grid/viewer-grid-filterpanel-buttons.d.ts +6 -0
  49. package/dist/types/components/viewer-grid/viewer-grid.d.ts +14 -3
  50. package/dist/types/components/viewer-grid/viewer-grid.template.d.ts +1 -1
  51. package/dist/types/components.d.ts +6 -0
  52. package/package.json +1 -1
  53. package/dist/dso-toolkit/p-06de0fa1.entry.js +0 -1
  54. package/dist/dso-toolkit/p-17f073d1.entry.js +0 -1
  55. package/dist/dso-toolkit/p-7b006b11.entry.js +0 -1
  56. package/dist/dso-toolkit/p-8f21d07d.entry.js +0 -5
  57. package/dist/dso-toolkit/p-a6c9e063.entry.js +0 -1
  58. package/dist/dso-toolkit/p-aadc4f8e.entry.js +0 -1
@@ -23,7 +23,7 @@ const keyCode = {
23
23
  RIGHT: 39,
24
24
  DOWN: 40,
25
25
  };
26
- const DISALLOWED_CHARACTERS = /[^0-9\.\/\-]+/g;
26
+ const DISALLOWED_CHARACTERS = /[^0-9\-]+/g;
27
27
  const TRANSITION_MS = 300;
28
28
  export class DsoDatePicker {
29
29
  constructor() {
@@ -229,7 +229,49 @@ export class DsoDatePicker {
229
229
  };
230
230
  this.handleInputChange = (e) => {
231
231
  const target = e.target;
232
- this.setValue(target.value.replace(DISALLOWED_CHARACTERS, ""));
232
+ this.setValue(target.value);
233
+ };
234
+ this.handleKeyPress = (e) => {
235
+ if (e.key.search(DISALLOWED_CHARACTERS) > -1) {
236
+ e.preventDefault();
237
+ }
238
+ };
239
+ this.prepareEvent = (value) => {
240
+ var event = {
241
+ component: "dso-date-picker",
242
+ value: "",
243
+ valueAsDate: undefined
244
+ };
245
+ if (value instanceof Date) {
246
+ event.valueAsDate = value;
247
+ }
248
+ else {
249
+ event.value = value;
250
+ event.valueAsDate = parseDutchDate(value);
251
+ }
252
+ if (event.valueAsDate) {
253
+ event.value = printDutchDate(event.valueAsDate);
254
+ }
255
+ if (!event.valueAsDate && this.required) {
256
+ event.error = "required";
257
+ }
258
+ if (event.value && !event.valueAsDate) {
259
+ event.error = "invalid";
260
+ }
261
+ if (event.valueAsDate && (this.min || this.max)) {
262
+ const min = parseDutchDate(this.min);
263
+ const max = parseDutchDate(this.max);
264
+ const clampValue = clamp(event.valueAsDate, min, max);
265
+ if (clampValue !== event.valueAsDate && clampValue === min) {
266
+ event.valueAsDate = undefined;
267
+ event.error = "min-range";
268
+ }
269
+ else if (clampValue !== event.valueAsDate && clampValue === max) {
270
+ event.valueAsDate = undefined;
271
+ event.error = "max-range";
272
+ }
273
+ }
274
+ return event;
233
275
  };
234
276
  this.processFocusedDayNode = (element) => {
235
277
  this.focusedDayNode = element;
@@ -321,27 +363,7 @@ export class DsoDatePicker {
321
363
  this.focusedDay = clamp(day, parseDutchDate(this.min), parseDutchDate(this.max));
322
364
  }
323
365
  setValue(value) {
324
- var event = {
325
- component: "dso-date-picker",
326
- value: "",
327
- valueAsDate: undefined
328
- };
329
- if (value instanceof Date) {
330
- event.valueAsDate = value;
331
- }
332
- else {
333
- event.value = value;
334
- event.valueAsDate = parseDutchDate(value);
335
- }
336
- if (event.valueAsDate) {
337
- event.value = printDutchDate(event.valueAsDate);
338
- }
339
- if (!event.valueAsDate && this.required) {
340
- event.error = "required";
341
- }
342
- if (event.value && !event.valueAsDate) {
343
- event.error = "invalid";
344
- }
366
+ const event = this.prepareEvent(value);
345
367
  this.value = event.value;
346
368
  this.dateChange.emit(event);
347
369
  }
@@ -379,7 +401,7 @@ export class DsoDatePicker {
379
401
  return (h(Host, null,
380
402
  h("div", { class: "dso-date" },
381
403
  h("div", { class: "dso-date__input-wrapper" },
382
- h("input", { class: "dso-date__input", value: this.value, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }),
404
+ h("input", { class: "dso-date__input", value: this.value, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onKeyPress: this.handleKeyPress, onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }),
383
405
  h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: element => (this.datePickerButton = element) },
384
406
  h("span", { class: "dso-date__toggle-icon" },
385
407
  h("dso-icon", { icon: "calendar" })),
@@ -636,7 +658,7 @@ export class DsoDatePicker {
636
658
  },
637
659
  "complexType": {
638
660
  "original": "DsoDatePickerChangeEvent",
639
- "resolved": "{ component: \"dso-date-picker\"; valueAsDate: Date | undefined; value: string; error?: \"invalid\" | \"required\" | undefined; }",
661
+ "resolved": "{ component: \"dso-date-picker\"; valueAsDate: Date | undefined; value: string; error?: \"invalid\" | \"required\" | \"min-range\" | \"max-range\" | undefined; }",
640
662
  "references": {
641
663
  "DsoDatePickerChangeEvent": {
642
664
  "location": "local"
@@ -1,9 +1,10 @@
1
1
  import { html } from 'lit-html';
2
2
  import { ifDefined } from 'lit-html/directives/if-defined';
3
- export function datePickerTemplate({ id, onDateChange, value, min, max, disabled, autofocus }) {
3
+ export function datePickerTemplate({ id, onDateChange, value, min, max, disabled, autofocus, direction }) {
4
4
  return html `
5
5
  <dso-date-picker
6
6
  @dateChange=${(e) => onDateChange(e)}
7
+ direction=${ifDefined(direction)}
7
8
  identifier=${ifDefined(id)}
8
9
  value=${ifDefined(value || undefined)}
9
10
  min=${ifDefined(min || undefined)}
@@ -8,6 +8,8 @@
8
8
  border-bottom: 1px solid #ccc;
9
9
  display: flex;
10
10
  flex-wrap: wrap;
11
+ padding: 0 16px;
12
+ position: relative;
11
13
  }
12
14
  @media screen and (min-width: 768px) {
13
15
  .dso-header {
@@ -26,6 +28,14 @@
26
28
  padding-bottom: 16px;
27
29
  padding-top: 16px;
28
30
  }
31
+ @media screen and (max-width: 767px) {
32
+ .logo-container {
33
+ max-width: 200px;
34
+ }
35
+ }
36
+ .logo-container + .dropdown dso-dropdown-menu {
37
+ position: static;
38
+ }
29
39
 
30
40
  @media screen and (min-width: 768px) {
31
41
  .sub-logo {
@@ -277,11 +287,6 @@ dso-dropdown-menu button::after {
277
287
  top: 50%;
278
288
  transform: translateY(-50%);
279
289
  }
280
- @media screen and (max-width: 991px) {
281
- dso-dropdown-menu[dropdown-align=right] .dso-dropdown-options {
282
- right: -16px;
283
- }
284
- }
285
290
  @media screen and (max-width: 767px) {
286
291
  dso-dropdown-menu {
287
292
  top: 12px;
@@ -296,7 +301,7 @@ dso-dropdown-menu .dso-dropdown-options dso-dropdown-options ul {
296
301
  }
297
302
  @media screen and (max-width: 991px) {
298
303
  dso-dropdown-menu .dso-dropdown-options dso-dropdown-options ul {
299
- width: 100vw;
304
+ width: 100%;
300
305
  }
301
306
  }
302
307
  dso-dropdown-menu .dso-dropdown-options dso-dropdown-options li a {
@@ -304,6 +309,11 @@ dso-dropdown-menu .dso-dropdown-options dso-dropdown-options li a {
304
309
  font-size: 1.25rem;
305
310
  padding: 16px;
306
311
  }
312
+ dso-dropdown-menu .dso-dropdown-options dso-dropdown-options li a:hover {
313
+ background-color: #fff;
314
+ color: #275937;
315
+ text-decoration: underline;
316
+ }
307
317
  dso-dropdown-menu .dso-dropdown-options dso-dropdown-options li.dso-active a {
308
318
  font-weight: 600;
309
319
  }
@@ -316,16 +326,13 @@ dso-dropdown-menu .dso-dropdown-options dso-dropdown-options li + li {
316
326
  }
317
327
  @media screen and (max-width: 767px) {
318
328
  .dropdown dso-dropdown-menu {
319
- top: 28px;
329
+ margin-top: 28px;
320
330
  }
321
331
  }
322
332
  .dropdown dso-dropdown-menu .dso-dropdown-options {
323
- top: calc(100% + 29px);
324
- }
325
- @media screen and (max-width: 767px) {
326
- .dropdown dso-dropdown-menu .dso-dropdown-options {
327
- top: 72px;
328
- }
333
+ left: 0;
334
+ right: 0;
335
+ top: 100%;
329
336
  }
330
337
  .dropdown dso-dropdown-menu[open] button::after {
331
338
  background: var(--dso-icon, var(--di-chevron-up)) no-repeat;
@@ -339,6 +346,7 @@ dso-dropdown-menu .dso-dropdown-options dso-dropdown-options li + li {
339
346
  color: #39870c;
340
347
  font-size: 16px;
341
348
  font-weight: 600;
349
+ position: relative;
342
350
  }
343
351
  .dropdown dso-dropdown-menu button:hover, .dropdown dso-dropdown-menu button:active {
344
352
  cursor: pointer;
@@ -1,3 +1,23 @@
1
+ button {
2
+ -webkit-appearance: button;
3
+ color: inherit;
4
+ cursor: pointer;
5
+ font: inherit;
6
+ font-family: inherit;
7
+ font-size: inherit;
8
+ line-height: inherit;
9
+ margin: 0;
10
+ overflow: visible;
11
+ text-transform: none;
12
+ }
13
+ button[disabled] {
14
+ cursor: default;
15
+ }
16
+ button::-moz-focus-inner {
17
+ border: 0;
18
+ padding: 0;
19
+ }
20
+
1
21
  :host {
2
22
  --di-times-grijs90: url("data:image/svg+xml,%3csvg id='times' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23191919%3b'%3e %3cpath fill='currentColor' d='M13.36%2c12l3.3-3.3A1%2c1%2c0%2c1%2c0%2c15.3%2c7.34L12%2c10.64%2c8.7%2c7.34A1%2c1%2c0%2c1%2c0%2c7.34%2c8.7l3.3%2c3.3-3.3%2c3.3A1%2c1%2c0%2c1%2c0%2c8.7%2c16.66l3.3-3.3%2c3.3%2c3.3a1%2c1%2c0%2c1%2c0%2c1.36-1.36Z'/%3e %3c/svg%3e");
3
23
  display: block;
@@ -1,14 +1,29 @@
1
1
  import { Component, h, Prop, Event } from '@stencil/core';
2
2
  export class MapBaseLayers {
3
+ constructor() {
4
+ this.selectableRefs = {};
5
+ }
3
6
  baseLayerChangeHandler(baseLayer) {
4
7
  this.baseLayerChange.emit({ activeBaseLayer: baseLayer });
5
8
  }
9
+ componentDidRender() {
10
+ this.baseLayers
11
+ .filter(l => { var _a, _b; return !l.disabled && ((_b = (_a = this.previousBaselayers) === null || _a === void 0 ? void 0 : _a.find(p => p.id === l.id)) === null || _b === void 0 ? void 0 : _b.disabled) === true; })
12
+ .forEach(o => {
13
+ var _a;
14
+ (_a = this.selectableRefs[o.id]) === null || _a === void 0 ? void 0 : _a.toggleInfo(false);
15
+ });
16
+ this.previousBaselayers = this.baseLayers;
17
+ }
6
18
  render() {
19
+ for (const ref in this.selectableRefs) {
20
+ delete this.selectableRefs[ref];
21
+ }
7
22
  return (h("fieldset", { class: "form-group dso-radios" },
8
23
  h("legend", { class: "sr-only" }, "Achtergrond"),
9
24
  h("div", { class: "dso-label-container" },
10
25
  h("span", { class: "control-label", "aria-hidden": "true" }, "Achtergrond")),
11
- h("div", { class: "dso-field-container" }, this.baseLayers.map(baseLayer => (h("dso-selectable", { key: baseLayer.id, type: "radio", value: baseLayer.name, checked: baseLayer.checked, disabled: baseLayer.disabled, onDsoChange: () => this.baseLayerChangeHandler(baseLayer) },
26
+ h("div", { class: "dso-field-container" }, this.baseLayers.map(baseLayer => (h("dso-selectable", { key: baseLayer.id, type: "radio", value: baseLayer.name, checked: baseLayer.checked, disabled: baseLayer.disabled, ref: ref => this.selectableRefs[baseLayer.id] = ref, onDsoChange: () => this.baseLayerChangeHandler(baseLayer) },
12
27
  baseLayer.name,
13
28
  baseLayer.info
14
29
  ? h("p", { slot: "info" }, baseLayer.info)
@@ -375,6 +375,12 @@ button::-moz-focus-inner {
375
375
  border: 0;
376
376
  }
377
377
 
378
+ section {
379
+ display: flex;
380
+ flex-direction: column;
381
+ height: 100%;
382
+ }
383
+
378
384
  header,
379
385
  .content {
380
386
  padding: 16px;
@@ -382,6 +388,7 @@ header,
382
388
 
383
389
  header {
384
390
  border-bottom: 1px solid #ccc;
391
+ flex-grow: 0;
385
392
  position: relative;
386
393
  }
387
394
  header h2 {
@@ -389,4 +396,9 @@ header h2 {
389
396
  font-family: "Asap", sans-serif;
390
397
  line-height: 1;
391
398
  margin: 0;
399
+ }
400
+
401
+ .content {
402
+ flex-grow: 1;
403
+ overflow-y: auto;
392
404
  }
@@ -1,15 +1,30 @@
1
1
  import { Component, Event, Prop, h } from '@stencil/core';
2
2
  export class MapOverlays {
3
+ constructor() {
4
+ this.selectableRefs = {};
5
+ }
3
6
  overlayChangeHandler(overlay, e) {
4
7
  const checked = e.detail.target instanceof HTMLInputElement ? !!e.detail.target.checked : false;
5
8
  this.toggleOverlay.emit({ overlay, checked });
6
9
  }
10
+ componentDidRender() {
11
+ this.overlays
12
+ .filter(o => { var _a, _b; return !o.disabled && ((_b = (_a = this.previousOverlays) === null || _a === void 0 ? void 0 : _a.find(p => p.id === o.id)) === null || _b === void 0 ? void 0 : _b.disabled) === true; })
13
+ .forEach(o => {
14
+ var _a;
15
+ (_a = this.selectableRefs[o.id]) === null || _a === void 0 ? void 0 : _a.toggleInfo(false);
16
+ });
17
+ this.previousOverlays = this.overlays;
18
+ }
7
19
  render() {
20
+ for (const ref in this.selectableRefs) {
21
+ delete this.selectableRefs[ref];
22
+ }
8
23
  return (h("fieldset", { class: "form-group dso-checkboxes" },
9
24
  h("legend", { class: "sr-only" }, "Kaartlagen"),
10
25
  h("div", { class: "dso-label-container" },
11
26
  h("span", { class: "control-label", "aria-hidden": "true" }, "Kaartlagen")),
12
- h("div", { class: "dso-field-container" }, this.overlays.map(overlay => (h("dso-selectable", { type: "checkbox", value: overlay.name, checked: overlay.checked, disabled: overlay.disabled, onDsoChange: e => this.overlayChangeHandler(overlay, e) },
27
+ h("div", { class: "dso-field-container" }, this.overlays.map(overlay => (h("dso-selectable", { key: overlay.id, type: "checkbox", value: overlay.name, checked: overlay.checked, disabled: overlay.disabled, ref: ref => this.selectableRefs[overlay.id] = ref, onDsoChange: e => this.overlayChangeHandler(overlay, e) },
13
28
  overlay.name,
14
29
  overlay.info
15
30
  ? h("p", { slot: "info" }, overlay.info)
@@ -1,10 +1,13 @@
1
- import { h, Component, Prop, Event, Fragment, Element, State, forceUpdate, Watch } from '@stencil/core';
1
+ import { h, Component, Prop, Event, Fragment, Element, State, forceUpdate, Watch, Method } from '@stencil/core';
2
2
  import { createIdentifier } from '../../utils/create-identifier';
3
3
  export class Selectable {
4
4
  constructor() {
5
5
  this.infoActive = false;
6
6
  this.fallbackIdentifier = createIdentifier('DsoSelectable');
7
7
  }
8
+ async toggleInfo(active) {
9
+ this.infoActive = active !== null && active !== void 0 ? active : !this.infoActive;
10
+ }
8
11
  componentDidLoad() {
9
12
  var _a;
10
13
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
@@ -260,6 +263,27 @@ export class Selectable {
260
263
  }
261
264
  }
262
265
  }]; }
266
+ static get methods() { return {
267
+ "toggleInfo": {
268
+ "complexType": {
269
+ "signature": "(active?: boolean | undefined) => Promise<void>",
270
+ "parameters": [{
271
+ "tags": [],
272
+ "text": ""
273
+ }],
274
+ "references": {
275
+ "Promise": {
276
+ "location": "global"
277
+ }
278
+ },
279
+ "return": "Promise<void>"
280
+ },
281
+ "docs": {
282
+ "text": "",
283
+ "tags": []
284
+ }
285
+ }
286
+ }; }
263
287
  static get elementRef() { return "host"; }
264
288
  static get watchers() { return [{
265
289
  "propName": "indeterminate",
@@ -0,0 +1,7 @@
1
+ import { h } from '@stencil/core';
2
+ export const ViewerGridFilterpanelButtons = ({ onApply, onCancel }) => (h("div", { class: "filterpanel-buttons" },
3
+ h("button", { type: "button", class: "cancel-button", onClick: onCancel },
4
+ h("span", null, "Annuleren")),
5
+ h("button", { type: "button", class: "apply-button", onClick: onApply },
6
+ h("span", null, "Toepassen"),
7
+ h("dso-icon", { icon: "chevron-right" }))));