@vcmap/ui 5.0.0-rc.21 → 5.0.0-rc.22

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 (101) hide show
  1. package/build/buildHelpers.js +1 -0
  2. package/build/commonViteConfig.js +1 -0
  3. package/config/www.config.json +25 -14
  4. package/dist/assets/cesium.js +1 -1
  5. package/dist/assets/{core.59d4d1.js → core.a66593.js} +2443 -2457
  6. package/dist/assets/core.js +1 -1
  7. package/dist/assets/favicon.decf54cc.svg +10 -0
  8. package/dist/assets/{index.a3861d4e.js → index.8b833ead.js} +1 -1
  9. package/dist/assets/{ol.c1c512.js → ol.d4539f.js} +12406 -12152
  10. package/dist/assets/ol.js +1 -1
  11. package/dist/assets/ui.d760e4.css +5 -0
  12. package/dist/assets/{ui.80175f.js → ui.d760e4.js} +5218 -4240
  13. package/dist/assets/ui.js +1 -1
  14. package/dist/assets/vue.js +2 -2
  15. package/dist/assets/vuetify.427322.css +5 -0
  16. package/dist/assets/{vuetify.efc158.js → vuetify.427322.js} +1 -1
  17. package/dist/assets/vuetify.js +2 -2
  18. package/dist/index.html +6 -1
  19. package/index.html +5 -0
  20. package/index.js +2 -1
  21. package/lib/olLib.js +15 -1
  22. package/package.json +4 -3
  23. package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +1 -1
  24. package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +10 -4
  25. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +75 -81
  26. package/plugins/@vcmap-show-case/form-inputs-example/index.js +7 -3
  27. package/plugins/@vcmap-show-case/form-inputs-example/validation.js +1 -1
  28. package/plugins/@vcmap-show-case/list-example/ListExample.vue +5 -2
  29. package/plugins/@vcmap-show-case/wizard-example/wizardExample.vue +57 -23
  30. package/plugins/package.json +2 -1
  31. package/src/application/VcsApp.vue +13 -5
  32. package/src/application/VcsAttributions.vue +2 -3
  33. package/src/application/VcsAttributionsFooter.vue +10 -16
  34. package/src/application/VcsNavbar.vue +1 -2
  35. package/src/application/VcsSettings.vue +21 -8
  36. package/src/assets/favicon-128.png +0 -0
  37. package/src/assets/favicon-180.png +0 -0
  38. package/src/assets/favicon-192.png +0 -0
  39. package/src/assets/favicon-32.png +0 -0
  40. package/src/assets/favicon.svg +10 -0
  41. package/src/components/buttons/VcsButton.vue +2 -3
  42. package/src/components/form-inputs-controls/VcsCheckbox.vue +46 -26
  43. package/src/components/form-inputs-controls/VcsFormSection.vue +15 -13
  44. package/src/components/form-inputs-controls/VcsLabel.vue +10 -1
  45. package/src/components/form-inputs-controls/VcsRadio.vue +38 -18
  46. package/src/components/form-inputs-controls/VcsSelect.vue +117 -59
  47. package/src/components/form-inputs-controls/VcsTextArea.vue +101 -60
  48. package/src/components/form-inputs-controls/VcsTextField.vue +171 -69
  49. package/src/components/form-inputs-controls/VcsWizard.vue +20 -14
  50. package/src/components/form-inputs-controls/VcsWizardStep.vue +18 -16
  51. package/src/components/form-inputs-controls/composables.js +26 -0
  52. package/src/components/form-output/VcsFormattedNumber.vue +1 -1
  53. package/src/components/icons/2DDistanceIcon.vue +0 -3
  54. package/src/components/icons/3DDistanceIcon.vue +0 -3
  55. package/src/components/icons/3DHeightIcon.vue +0 -3
  56. package/src/components/icons/CheckboxCheckedIcon.vue +4 -11
  57. package/src/components/icons/CheckboxIcon.vue +9 -2
  58. package/src/components/icons/CheckboxIndeterminateIcon.vue +4 -21
  59. package/src/components/icons/CommentIcon.vue +1 -5
  60. package/src/components/icons/ObliqueViewIcon.vue +6 -8
  61. package/src/components/icons/SimpleCircleOutlinedIcon.vue +1 -1
  62. package/src/components/icons/SplitViewIcon.vue +0 -4
  63. package/src/components/icons/ToolsIcon.vue +2 -4
  64. package/src/components/lists/VcsActionList.vue +0 -1
  65. package/src/components/lists/VcsList.vue +6 -25
  66. package/src/components/lists/VcsTreeview.vue +2 -2
  67. package/src/components/lists/VcsTreeviewLeaf.vue +3 -9
  68. package/src/components/lists/VcsTreeviewSearchbar.vue +4 -4
  69. package/src/components/notification/VcsBadge.vue +6 -2
  70. package/src/components/notification/VcsHelp.vue +39 -0
  71. package/src/components/tables/VcsTable.vue +70 -24
  72. package/src/featureInfo/AddressBalloonComponent.vue +1 -1
  73. package/src/featureInfo/BalloonComponent.vue +14 -9
  74. package/src/featureInfo/featureInfo.js +25 -7
  75. package/src/featureInfo/tableFeatureInfoView.js +4 -0
  76. package/src/i18n/de.js +5 -1
  77. package/src/i18n/en.js +5 -1
  78. package/src/legend/styleLegendItem.vue +24 -2
  79. package/src/legend/vcsLegend.vue +24 -31
  80. package/src/manager/toolbox/GroupToolboxComponent.vue +2 -3
  81. package/src/manager/toolbox/SelectToolboxComponent.vue +11 -5
  82. package/src/manager/toolbox/ToolboxManager.vue +0 -7
  83. package/src/manager/window/WindowComponent.vue +0 -1
  84. package/src/manager/window/WindowComponentHeader.vue +2 -2
  85. package/src/navigation/overviewMap.js +6 -15
  86. package/src/navigation/tiltSlider.vue +30 -6
  87. package/src/search/resultsComponent.vue +0 -1
  88. package/src/search/search.js +7 -17
  89. package/src/search/searchComponent.vue +6 -7
  90. package/src/styles/_theming.scss +72 -3
  91. package/src/styles/_typography.scss +0 -5
  92. package/src/styles/main.scss +1 -0
  93. package/src/styles/shades.scss +2 -0
  94. package/src/styles/variables.scss +40 -4
  95. package/src/uiConfig.js +1 -0
  96. package/src/vcsUiApp.js +5 -0
  97. package/src/vuePlugins/vuetify.js +59 -13
  98. package/dist/assets/ui.80175f.css +0 -1
  99. package/dist/assets/vuetify.efc158.css +0 -5
  100. /package/dist/assets/{cesium.49585c.js → cesium.88cffd.js} +0 -0
  101. /package/dist/assets/{vue.a08ab1.js → vue.db5102.js} +0 -0
@@ -13,7 +13,7 @@ function loadCss(href) {
13
13
  elem.onerror = reject;
14
14
  document.head.appendChild(elem);
15
15
  });
16
- } await loadCss('./assets/vuetify.efc158.css');import v from "./vue.a08ab1.js";
16
+ } await loadCss('./assets/vuetify.427322.css');import v from "./vue.db5102.js";
17
17
  const Ne = v.extend().extend({
18
18
  name: "themeable",
19
19
  provide() {
@@ -1,5 +1,5 @@
1
- export * from "./vuetify.efc158.js";
2
- import { default as f } from "./vuetify.efc158.js";
1
+ export * from "./vuetify.427322.js";
2
+ import { default as f } from "./vuetify.427322.js";
3
3
  export {
4
4
  f as default
5
5
  };
package/dist/index.html CHANGED
@@ -3,7 +3,12 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
6
- <script type="module" crossorigin src="./assets/index.a3861d4e.js"></script>
6
+ <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc9JREFUeNpiYBgFo2AUjHTA6DC3LAxINwIxHyka////z/zg9n22l08eM/iaPPtnqPT5Jxn2r2IBEmGkWg4Cnz9+Znl498F3EHvtcTGWH7+ZOC3VP34n0ZgwJiAxh5yg+/vnz38Y+98/xj9bTov+2HBCjIvUEGA6kNy1A8hIBuJPlMTl//8M/0/f4ftOgiNWVfl/KASFAAPUESF0dEQ9yHIQgwkmAnTEVWo6YsFeKa4fv5gYsSgpBFoOj3YmZBlqOuLWM65vQEdwojkCZPkqZLVM6JqhjjAH4quU5vFHbzjAjvj+i+kzNsuxOgDqiE/QkKDcERyWf5s/L31e9X4VVrOYcGmkiiNkDNkZ9IP/MjAxqwF5axgW7NIm2gFojlhFsuUKlpxgyxmZ/kBF+LA5gpFY84BFdj+01ASD92/esV08feEXVsW6AVwM8qbAUpHxPxZZiKcS3K4SDAG00CgkKiTwWw4LiV3AkAgjKQSQQgJUcaVgDQHClmOUCUykOgAYEvUgjSiCrByMDOYJpFoOAv1M5CRuoCNW8fLzFbKwsjAycAoyM5glcDKIqn0j0XIQuMpIUSYPMZFlcK1SYmDn+UWmCRSXM6NgFIwCigFAgAEAmHnAVoDNAXoAAAAASUVORK5CYII=" sizes="32x32">
7
+ <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABMJJREFUeNrs3c1rHGUAx/FnZpPNbogbQyXa0KStRRBqWwqxEkTxUDQHJVFD8FQi7T8QBA9eSi8eCm3/AZWec/DtFIWCINKCHrysUCkiJsbGvLi10uxud12fiZuw2mZ3Znbmmed55vuFEGjeWH6fpLtt5lkhiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiEj3HD/v9NKH747KV6/Il0Fbbni9Vu9dXbntljY2Hymtr945+eRdd+q5tYpl+y6+N1UqdgVAjn9OvrpgE/rNtY38j8WblfJWub77h45wDuwr59564XZ1aKBWt+j2LkgE86EAWDi++P231f4fvi/e2+vtA7l639unV+r7hyq1NCBw24xfkK/esWn8arWald/5W+3e569ypvLx9WFRrrqORTd99v3PHp0IBEA2KV8KNgHYWF13avdrjU7v9+tGX+2jayNZyxBMBgUwats93nK53PD7vsvrucrVayN5ixAcDQog9f2ynrtnGYJAAIoQsArBYiAAX5296H3AEgSsQPCnfPkizF8BZ5sfDAKzEZyXDwOXAgOQPwW8vwZmQGA0gnk5/kKY+wAgMB9B2/F9PwoAgZEIOo4f6GEgCIxC4Gv8wP8OAAIjEPgePzCAFgTnmV9LBIHGDwWgicD7IvPMrxWCwOOHBgAC7RCEGr8rACDQBsEHYcfvGgAIEkfg/aJHV/fHIvnfQBAkgqDtr3opBQAC5QgiGT9SACBQhiCy8SMHAILYEUQ6fiwAQLA3At3Gjw0ACB6O4JMbw3mdxo8VAAge7LtbhfKnN4b7dRk/dgAg+G+Nhmh8e6uwFQBBrOMrAQCC0AhiH18ZABAERqBkfKUAQOAbgbLxlQMAQUcESsf3yiRxw3/+/Jvioannl8Ue16vFVWnzj8ydzZJ2l36v3B38e3nw9NrCma+nVX/txC4N4ydBs96c0zg113dzYPoxcfXLK6kBAIJ/xxen5vJiaGznvIJZ1QgSvzg0tQgeHF8kgUCLq4ObCC4zvnoE2lweLhFc8u4FM75aBFqdDyARzFuP4PjrWR/jK0Og3QERViM4/kZW7D8W9Ci6WBFoeUKIlQiOTfeLsfFqyI+ODYG2R8RYhcAb/+CzW11+llgQaH1GkBUIdsd3GhF8tsgRaH9IlNEIoh0/FgRGnBJmJIJ4xo8cgTHHxBmFIN7xI0Vg1DmBRiBQM35kCIw7KFJrBGrHjwSBkSeFaokgmfFbEZxLDQDtECQ7/k4XJILZ1ADQBoEe4+90JSgC4w+LThSBXuOHQmDFaeGJINBz/MAIrDkuXikCvccPhMCq5wtQgsCM8X0jsO4JI2JFYNb4vhBY+YwhsSAwc/xWBKOpAdCCYJHxd5tNFYBmHoIi4283kToA8qeAd6j1TGgE9oyfnjuB7RDkcjn/BzUdmshaNv5SKgG0Inh85IliT29PZwQHTvaIZ169b9l3/kJqAewgcDPua4efOvJTh/H7xIk3hWXjL4q5l68/7A2OSFsz44Xth0X/vzTdu2Ln6cm8GBuvCMe16tnD5fjhnj3ccghHtxHsO+yKoYMZceRFVyKoWHYrve98ngCUiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjI/P4RYAALhItUNRV1FwAAAABJRU5ErkJggg==" sizes="128x128">
8
+ <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABh9JREFUeNrs3d1rW2UcwPEnJ+lJMrt0RfbSru0oMmTE6d686I1MHVu9UmcpeDfdX5AJXnhTvfFCGL3ybpvDG2EI6o2usoFXdrghohS8qLq+rRd26ys2SfPiiU0hdmty2pxznpfz/cIhrE1S+D0fHk4SsiMEERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERFpX2SnDzx99f20c9PPCOtXKpZi8w8fxZYWFouzE3+J3v1Z66X0/Frv/tUS06nbonOMfPD6wpSvoB3IFcQfOkc3M9+6crkcm52ebZn8434+u5ot1v4uapXtE88sR187MZdN2KUy06rbqHNk3MKObBPzoHMzzIzrl8/l47/e/aW4srxSqHe/3cli8sKrD9Y62nMFpla3JecYcFCPeQYazC5PMUol++cf75UaYd6oNVGMv3PmQRHUrlCfbbRTWy4xp5ybj5hp4ybG70fdYq60ko3mPrvVGZ2dj8eYXt1SbjZUy+WT9VefkOrvzvGZyensdh8Hatf1ffzNnm4vQJ9jli5elj9aKBfWCjt6kQdq96i9AN3GHF2gXF6JNPX4Kups3oowzS3zZIcmFxUKhabfgqugvnrrIKh3GKAVbOZhvHDtdqcN6ief2XkB+iZzDLbpuUTu+u3OJKgfa9QL0CNi/X1ACrDJucQ/oP4/5kYfrrgC/cPFTypvZl9hnqCW3JBn59AO6svOzQ1mCmpJZdx89L2tF4UO6gyoQS0Jsyt3236XA9SgVhXzjkCDGtSqYt4xaFCDWkXMTYEGNahVw9w0aFCDWiXMnoAGNahVwewZaFCDWgXMnoKuQT0KMVDLwOw56GrvOscYxEAdNGZfQDu79H/f0AU1qIPG7NcODWpQS8HsG2hQg7pBV/zA7CtoUIN6i244mIf8enLfv4IFalBvwpzx8w8E8p1CUMtH/dWdfbbpmAMDDWr5/TbRmnNQJ03GHChoUMvv3ngq+/WdfbtMxRw4aFDLrVwW5bvjqdUAUQeKWQpoUIcGdeCYpYEGtfGopWCWChrUxqKWhlk6aFAbh1oqZiVAg9oY1NIxKwMa1NqjVgKzUqBBrS1qZTArBxrU2qFWCrOSoEGtDWrlMCsLGtTKo1YSs9KgN6GegpkyqJXFrDzoGtQXBf/hugqolcasBegq6rHqTg1qSag///PNv1XHrA1oUEtGffR8y+/tb+8V178fBjSo9e7587boOZWv/mtQddTaXdYN1AF29I1doufk2qafKo1ay+sUgjogzIdeXBUi8qSLiSqLWtsLb4JaGmalUWt9JVlQS8OsLGrtL40MammYlURtxLW+QS0Ncy3q9wANahMwb3TJQT0IaFCbgHmjYdmoLdPWB9TSMCuB2jJxnUAtDbN01Jap6wVqaZilorZMXjdQS8MsDbVl+vqBWhpmKaitMKwjqKVhDhy1FZb1DDVquZgDRW2FaV1DiVoNzIGhDhXo0KFWC3MgqEMHugb1EJjNQx1K0FXUlevkZcBsFurQgjYW9eGX4xpg9g11qEEbh7rreEw8eyavCWZfUIcetDGoK5iPDRQ1w+w5akCbgLrreFy88JbQFLOnqAGtO+p1zEURsQoGLEHTqAGtM2qzMHuCGtC6ojYTc9OoAa0jarMxN4Ua0LqhDgfmWtR9gDYVdbgwb3TNQZ0GtGmow4m5Uso5vnSLGtA6oA4v5s2ouwGtO2ow16IeBrTOqMG8ub5GuzSgVUUN5q06B2jdUIO5Xm2A1gk1mJsK0B6ibmvfEwGz7y0COiDUrbtbRawlFgGzr40COiDUdtz+9GBPVwLMPmK+cHYM0MGhHjrQ1fFFIpmIgtmXLje6Q5QZedvMdz99u/eVY4dWlpaPgNnTMs7uPNLoThHm5FMDp/rF+idbqcd+l2yPisOnbdF9cg3MDZuqYh51c2dA+4u6grkCOy3sp54TB9K2eLq3LDrSzsleLM+A6jZWPWe+ySiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIGvevAAMAlVPPQtniZxQAAAAASUVORK5CYII=" sizes="180x180">
9
+ <link rel="icon" type="image/png" href="data:image/png;base64,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" sizes="192x192">
10
+ <link rel="icon" type="image/svg+xml" href="./assets/favicon.decf54cc.svg" />
11
+ <script type="module" crossorigin src="./assets/index.8b833ead.js"></script>
7
12
  </head>
8
13
  <body style="height: 100vH;">
9
14
  <noscript>
package/index.html CHANGED
@@ -3,6 +3,11 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
6
+ <link rel="icon" type="image/png" href="src/assets/favicon-32.png" sizes="32x32">
7
+ <link rel="icon" type="image/png" href="src/assets/favicon-128.png" sizes="128x128">
8
+ <link rel="icon" type="image/png" href="src/assets/favicon-180.png" sizes="180x180">
9
+ <link rel="icon" type="image/png" href="src/assets/favicon-192.png" sizes="192x192">
10
+ <link rel="icon" type="image/svg+xml" href="src/assets/favicon.svg" />
6
11
  </head>
7
12
  <body style="height: 100vH;">
8
13
  <noscript>
package/index.js CHANGED
@@ -100,7 +100,7 @@ export { default as VcsCompass } from './src/navigation/vcsCompass.vue';
100
100
  export { default as VcsZoomButton } from './src/navigation/vcsZoomButton.vue';
101
101
 
102
102
  export { createVueI18n, setupI18n } from './src/vuePlugins/i18n.js';
103
- export { createVuetify, vuetify } from './src/vuePlugins/vuetify.js';
103
+ export { createVuetify, vuetify, getColorByKey, getDefaultPrimaryColor } from './src/vuePlugins/vuetify.js';
104
104
  export { default as initApp } from './src/init.js';
105
105
  export {
106
106
  vcsAppSymbol,
@@ -120,6 +120,7 @@ export { default as Icons } from './src/components/icons/+all.js';
120
120
  export { default as VcsButton } from './src/components/buttons/VcsButton.vue';
121
121
  export { default as VcsActionButtonList } from './src/components/buttons/VcsActionButtonList.vue';
122
122
  export { default as VcsTooltip } from './src/components/notification/VcsTooltip.vue';
123
+ export { default as VcsHelp } from './src/components/notification/VcsHelp.vue';
123
124
 
124
125
  export { default as VcsTable } from './src/components/tables/VcsTable.vue';
125
126
 
package/lib/olLib.js CHANGED
@@ -3,10 +3,14 @@ export {default as ol$AssertionError} from 'ol/AssertionError';
3
3
  export {CollectionEvent as ol$Collection$CollectionEvent} from 'ol/Collection';
4
4
  export {default as ol$Collection} from 'ol/Collection';
5
5
  export {default as ol$CollectionEventType} from 'ol/CollectionEventType';
6
+ export {asImageLike as ol$DataTile$asImageLike} from 'ol/DataTile';
7
+ export {asArrayLike as ol$DataTile$asArrayLike} from 'ol/DataTile';
8
+ export {toArray as ol$DataTile$toArray} from 'ol/DataTile';
6
9
  export {default as ol$DataTile} from 'ol/DataTile';
7
10
  export {default as ol$Disposable} from 'ol/Disposable';
8
11
  export {default as ol$Feature} from 'ol/Feature';
9
12
  export {createStyleFunction as ol$Feature$createStyleFunction} from 'ol/Feature';
13
+ export {GeolocationError as ol$Geolocation$GeolocationError} from 'ol/Geolocation';
10
14
  export {default as ol$Geolocation} from 'ol/Geolocation';
11
15
  export {listenImage as ol$Image$listenImage} from 'ol/Image';
12
16
  export {default as ol$Image} from 'ol/Image';
@@ -45,7 +49,7 @@ export {isNoopAnimation as ol$View$isNoopAnimation} from 'ol/View';
45
49
  export {default as ol$ViewHint} from 'ol/ViewHint';
46
50
  export {default as ol$ViewProperty} from 'ol/ViewProperty';
47
51
  export {binarySearch as ol$array$binarySearch} from 'ol/array';
48
- export {numberSafeCompareFunction as ol$array$numberSafeCompareFunction} from 'ol/array';
52
+ export {ascending as ol$array$ascending} from 'ol/array';
49
53
  export {linearFindNearest as ol$array$linearFindNearest} from 'ol/array';
50
54
  export {reverseSubArray as ol$array$reverseSubArray} from 'ol/array';
51
55
  export {extend as ol$array$extend} from 'ol/array';
@@ -63,6 +67,10 @@ export {normalize as ol$color$normalize} from 'ol/color';
63
67
  export {toString as ol$color$toString} from 'ol/color';
64
68
  export {isStringColor as ol$color$isStringColor} from 'ol/color';
65
69
  export {asColorLike as ol$colorlike$asColorLike} from 'ol/colorlike';
70
+ export {setLevel as ol$console$setLevel} from 'ol/console';
71
+ export {log as ol$console$log} from 'ol/console';
72
+ export {warn as ol$console$warn} from 'ol/console';
73
+ export {error as ol$console$error} from 'ol/console';
66
74
  export {default as ol$control$Attribution} from 'ol/control/Attribution';
67
75
  export {default as ol$control$Control} from 'ol/control/Control';
68
76
  export {default as ol$control$FullScreen} from 'ol/control/FullScreen';
@@ -492,7 +500,12 @@ export {RADIUS as ol$proj$epsg4326$RADIUS} from 'ol/proj/epsg4326';
492
500
  export {EXTENT as ol$proj$epsg4326$EXTENT} from 'ol/proj/epsg4326';
493
501
  export {METERS_PER_UNIT as ol$proj$epsg4326$METERS_PER_UNIT} from 'ol/proj/epsg4326';
494
502
  export {PROJECTIONS as ol$proj$epsg4326$PROJECTIONS} from 'ol/proj/epsg4326';
503
+ export {isRegistered as ol$proj$proj4$isRegistered} from 'ol/proj/proj4';
504
+ export {unregister as ol$proj$proj4$unregister} from 'ol/proj/proj4';
495
505
  export {register as ol$proj$proj4$register} from 'ol/proj/proj4';
506
+ export {setEPSGLookup as ol$proj$proj4$setEPSGLookup} from 'ol/proj/proj4';
507
+ export {getEPSGLookup as ol$proj$proj4$getEPSGLookup} from 'ol/proj/proj4';
508
+ export {fromEPSGCode as ol$proj$proj4$fromEPSGCode} from 'ol/proj/proj4';
496
509
  export {clear as ol$proj$projections$clear} from 'ol/proj/projections';
497
510
  export {get as ol$proj$projections$get} from 'ol/proj/projections';
498
511
  export {add as ol$proj$projections$add} from 'ol/proj/projections';
@@ -626,6 +639,7 @@ export {STROKE_VERTEX_SHADER as ol$renderer$webgl$shaders$STROKE_VERTEX_SHADER}
626
639
  export {STROKE_FRAGMENT_SHADER as ol$renderer$webgl$shaders$STROKE_FRAGMENT_SHADER} from 'ol/renderer/webgl/shaders';
627
640
  export {POINT_VERTEX_SHADER as ol$renderer$webgl$shaders$POINT_VERTEX_SHADER} from 'ol/renderer/webgl/shaders';
628
641
  export {POINT_FRAGMENT_SHADER as ol$renderer$webgl$shaders$POINT_FRAGMENT_SHADER} from 'ol/renderer/webgl/shaders';
642
+ export {default as ol$reproj$DataTile} from 'ol/reproj/DataTile';
629
643
  export {default as ol$reproj$Image} from 'ol/reproj/Image';
630
644
  export {default as ol$reproj$Tile} from 'ol/reproj/Tile';
631
645
  export {default as ol$reproj$Triangulation} from 'ol/reproj/Triangulation';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/ui",
3
- "version": "5.0.0-rc.21",
3
+ "version": "5.0.0-rc.22",
4
4
  "author": "Virtual City Systems",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -42,8 +42,8 @@
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@vcmap-cesium/engine": "~1.1.2",
45
- "@vcmap/core": "~5.0.0-rc.26",
46
- "ol": "~7.1.0",
45
+ "@vcmap/core": "~5.0.0-rc.27",
46
+ "ol": "~7.2.2",
47
47
  "vue": "~2.7.3",
48
48
  "vuetify": "~2.6.7"
49
49
  },
@@ -59,6 +59,7 @@
59
59
  "jsdoc-plugin-intersection": "^1.0.4",
60
60
  "jsdoc-plugin-typescript": "^2.0.6",
61
61
  "jsdom": "^19.0.0",
62
+ "resize-observer-polyfill": "1.5.1",
62
63
  "rollup-plugin-strip-pragma": "^1.0.0",
63
64
  "sass": "1.32.13",
64
65
  "typescript": "^4.2.4",
@@ -7,7 +7,7 @@
7
7
  >
8
8
  <v-card
9
9
  class="ma-1"
10
- :color="project.active ? 'accent' : undefined"
10
+ :color="project.active ? 'base lighten-3' : undefined"
11
11
  @click="selectProject(project)"
12
12
  hover
13
13
  outlined
@@ -38,22 +38,28 @@
38
38
  </v-list-item-action>
39
39
  </v-list-item>
40
40
  <v-card class="my-1 ma-1 py-1 white">
41
+ <h2>
42
+ light
43
+ </h2>
41
44
  <v-chip
42
45
  class="mx-1"
43
46
  label
44
- :color="theme.dark[key]"
45
- v-for="(key, index) in Object.keys(theme.dark)"
47
+ :color="theme.light[key]?.base || theme.light[key]"
48
+ v-for="(key, index) in Object.keys(theme.light)"
46
49
  :key="index"
47
50
  >
48
51
  {{ key }}
49
52
  </v-chip>
50
53
  </v-card>
51
54
  <v-card class="my-1 ma-1 py-1 black">
55
+ <h2 class="white--text">
56
+ dark
57
+ </h2>
52
58
  <v-chip
53
59
  class="mx-1"
54
60
  label
55
- :color="theme.light[key]"
56
- v-for="(key, index) in Object.keys(theme.light)"
61
+ :color="theme.dark[key]?.base || theme.dark[key]"
62
+ v-for="(key, index) in Object.keys(theme.dark)"
57
63
  :key="index"
58
64
  >
59
65
  {{ key }}
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <v-form v-model="isValid">
2
+ <v-form v-model="isValid" ref="form">
3
3
  <VcsFormSection
4
4
  heading="VcsFormSection Select & Text Inputs"
5
5
  :header-actions="actions"
@@ -16,9 +16,8 @@
16
16
  </ol>
17
17
  </template>
18
18
  <template #default v-if="showSection">
19
- <v-container class="pa-2">
19
+ <v-container class="py-0 px-1">
20
20
  <v-row
21
- :dense="dense"
22
21
  no-gutters
23
22
  align="center"
24
23
  >
@@ -32,13 +31,13 @@
32
31
  id="selectInput"
33
32
  :items="selectOptions"
34
33
  :dense="dense"
35
- :rules="[conditionalTest(state.conditionalInput, state.selected)]"
34
+ :rules="[v => v !== 'D' || 'D is not allowed']"
36
35
  v-model="state.selected"
36
+ color="purple"
37
37
  />
38
38
  </v-col>
39
39
  </v-row>
40
40
  <v-row
41
- :dense="dense"
42
41
  no-gutters
43
42
  align="center"
44
43
  >
@@ -54,44 +53,38 @@
54
53
  :dense="dense"
55
54
  :rules="[conditionalTest(state.conditionalInput, state.selected)]"
56
55
  v-model="state.conditionalInput"
56
+ placeholder="conditional"
57
57
  />
58
58
  </v-col>
59
59
  </v-row>
60
60
  <v-row
61
- :dense="dense"
62
61
  no-gutters
63
62
  align="center"
64
63
  >
65
64
  <v-col>
66
65
  <VcsTextField
67
66
  :dense="dense"
68
- v-model="initialTextInput"
67
+ v-model="state.initialTextInput"
68
+ :rules="[isValidText]"
69
+ :loading="state.initialTextInput === 'myInitialText'"
70
+ :error-messages="!state.checkboxInput ? ['manual error message depending on checkbox'] : undefined"
69
71
  />
70
72
  </v-col>
71
73
  </v-row>
72
74
  <v-row
73
- :dense="dense"
74
75
  no-gutters
75
76
  align="center"
76
77
  >
77
78
  <v-col>
78
- <VcsLabel html-for="initialTextInput" :dense="dense">
79
- InitialTextInput
80
- </VcsLabel>
81
- </v-col>
82
- <v-col>
83
- <VcsTextField
84
- id="initialTextInput"
79
+ <VcsTextArea
85
80
  :dense="dense"
86
- :rules="[isValidText]"
87
- :loading="state.initialTextInput === 'myInitialText'"
88
- v-model="state.initialTextInput"
89
- :error-messages="!state.checkboxInput ? ['manual error message depending on checkbox'] : undefined"
81
+ :rules="[v => !!v || 'text area must not be empty']"
82
+ placeholder="This is a text area"
83
+ rows="2"
90
84
  />
91
85
  </v-col>
92
86
  </v-row>
93
87
  <v-row
94
- :dense="dense"
95
88
  no-gutters
96
89
  align="center"
97
90
  >
@@ -107,11 +100,12 @@
107
100
  type="email"
108
101
  :rules="[isValidEmail]"
109
102
  v-model="state.email"
103
+ color="blue"
104
+ placeholder="Email address"
110
105
  />
111
106
  </v-col>
112
107
  </v-row>
113
108
  <v-row
114
- :dense="dense"
115
109
  no-gutters
116
110
  align="center"
117
111
  >
@@ -126,17 +120,17 @@
126
120
  :dense="dense"
127
121
  prepend-icon="mdi-map-marker"
128
122
  v-model="state.prependedInput"
123
+ label="text"
129
124
  />
130
125
  </v-col>
131
126
  </v-row>
132
127
  <v-row
133
- :dense="dense"
134
128
  no-gutters
135
129
  align="center"
136
130
  >
137
131
  <v-col>
138
132
  <VcsLabel html-for="fileInput" :dense="dense">
139
- Email
133
+ File input
140
134
  </VcsLabel>
141
135
  </v-col>
142
136
  <v-col>
@@ -157,9 +151,8 @@
157
151
  help-text="form-inputs-example.help"
158
152
  >
159
153
  <template #default>
160
- <v-container>
154
+ <v-container class="py-0 px-1">
161
155
  <v-row
162
- :dense="dense"
163
156
  no-gutters
164
157
  align="center"
165
158
  >
@@ -173,14 +166,14 @@
173
166
  id="numberInput"
174
167
  :dense="dense"
175
168
  type="number"
176
- step="10"
177
- suffix="cm"
169
+ step="1"
170
+ unit="cm"
178
171
  v-model.number="state.numberInput"
172
+ show-spin-buttons
179
173
  />
180
174
  </v-col>
181
175
  </v-row>
182
176
  <v-row
183
- :dense="dense"
184
177
  no-gutters
185
178
  align="center"
186
179
  >
@@ -200,52 +193,39 @@
200
193
  </v-col>
201
194
  </v-row>
202
195
  <v-row
203
- :dense="dense"
204
196
  no-gutters
205
197
  align="center"
206
198
  >
207
- <v-col cols="1" class="px-1">
208
- <VcsLabel html-for="coordinateX" :dense="dense">
209
- X
210
- </VcsLabel>
211
- </v-col>
212
199
  <v-col>
213
200
  <VcsTextField
214
201
  id="coordinateX"
215
202
  :dense="dense"
216
203
  type="number"
217
204
  step="10"
218
- suffix="m"
205
+ prefix="X"
206
+ unit="m"
219
207
  v-model.number="state.numberInput"
220
208
  />
221
209
  </v-col>
222
- <v-col cols="1" class="px-1">
223
- <VcsLabel html-for="coordinateY" :dense="dense">
224
- Y
225
- </VcsLabel>
226
- </v-col>
227
- <v-col>
210
+ <v-col class="px-2">
228
211
  <VcsTextField
229
212
  id="coordinateY"
230
213
  :dense="dense"
231
214
  type="number"
232
215
  step="10"
233
- suffix="m"
216
+ prefix="Y"
217
+ unit="m"
234
218
  v-model.number="state.numberInput"
235
219
  />
236
220
  </v-col>
237
- <v-col cols="1" class="px-1">
238
- <VcsLabel html-for="coordinateZ" :dense="dense">
239
- Z
240
- </VcsLabel>
241
- </v-col>
242
221
  <v-col>
243
222
  <VcsTextField
244
223
  id="coordinateZ"
245
224
  :dense="dense"
246
225
  type="number"
247
226
  step="10"
248
- suffix="m"
227
+ unit="m"
228
+ prefix="Z"
249
229
  v-model.number="state.numberInput"
250
230
  />
251
231
  </v-col>
@@ -257,9 +237,8 @@
257
237
  heading="VcsFormSection Radio & Checkbox"
258
238
  >
259
239
  <template #default>
260
- <v-container>
240
+ <v-container class="py-0 px-1">
261
241
  <v-row
262
- :dense="dense"
263
242
  no-gutters
264
243
  align="center"
265
244
  >
@@ -268,12 +247,17 @@
268
247
  :dense="dense"
269
248
  :items="[...selectOptions, { label: 'Radio Option E colored', color: 'primary', value: 'E' }]"
270
249
  v-model="state.selected"
250
+ :rules="[v => v !== 'D' || 'D is not allowed']"
271
251
  row
272
252
  />
273
253
  </v-col>
274
254
  </v-row>
255
+ <v-row no-gutters>
256
+ <v-col>
257
+ <VcsLabel :dense="dense">Text</VcsLabel>
258
+ </v-col>
259
+ </v-row>
275
260
  <v-row
276
- :dense="dense"
277
261
  no-gutters
278
262
  align="center"
279
263
  >
@@ -307,15 +291,14 @@
307
291
  heading="VcsFormSection Mixed Inputs"
308
292
  >
309
293
  <template #header="{ heading }">
310
- <article class="pa-2 secondary text--primary">
294
+ <article class="pa-2 text--primary">
311
295
  {{ heading }}
312
296
  <h3>This is a custom header using header slot</h3>
313
297
  </article>
314
298
  </template>
315
299
  <template #default>
316
- <v-container>
300
+ <v-container class="py-0 px-1">
317
301
  <v-row
318
- :dense="dense"
319
302
  align="center"
320
303
  >
321
304
  <v-col cols="1">
@@ -323,7 +306,7 @@
323
306
  1
324
307
  </VcsLabel>
325
308
  </v-col>
326
- <v-col cols="3">
309
+ <v-col>
327
310
  <VcsSelect
328
311
  :items="[
329
312
  {value: 'one', i18n: 'form-inputs-example.numbers.one'},
@@ -331,9 +314,10 @@
331
314
  {value: 'three', i18n: 'form-inputs-example.numbers.three'}]"
332
315
  :item-text="item => item.i18n"
333
316
  :dense="dense"
317
+ placeholder="Numbers"
334
318
  />
335
319
  </v-col>
336
- <v-col cols="3">
320
+ <v-col>
337
321
  <VcsSelect
338
322
  :items="[
339
323
  {value: 'Anna', fullName: 'Annabella'},
@@ -343,35 +327,35 @@
343
327
  :dense="dense"
344
328
  multiple
345
329
  v-model="state.selectedMultiple"
346
- />
347
- </v-col>
348
- <v-col cols="5">
349
- <VcsTextField
350
- id="textInput"
351
- clearable
352
- :dense="dense"
353
- v-model="state.conditionalInput"
330
+ :rules="[v => !!v.length || 'Please select at least one option.']"
354
331
  />
355
332
  </v-col>
356
333
  </v-row>
357
334
  </v-container>
358
335
  </template>
359
336
  </VcsFormSection>
360
- <VcsButton
361
- @click="logState(state)"
362
- :disabled="!isValid"
363
- :tooltip="'Log current state in console'"
364
- :has-update="isValid && newUpdate"
365
- class="mx-2 mb-2"
366
- >
367
- Log State
368
- </VcsButton>
369
- <VcsButton
370
- type="reset"
371
- icon="$vcsReturn"
372
- >
373
- Reset
374
- </VcsButton>
337
+ <div class="d-flex justify-space-between px-2">
338
+ <VcsButton
339
+ @click="logState(state)"
340
+ :disabled="!isValid"
341
+ :tooltip="'Log current state in console'"
342
+ :has-update="isValid && newUpdate"
343
+ class="mx-2 mb-2"
344
+ >
345
+ Log State
346
+ </VcsButton>
347
+ <VcsButton
348
+ @click="validate();"
349
+ >
350
+ Val
351
+ </VcsButton>
352
+ <VcsButton
353
+ @click="resetState();"
354
+ icon="$vcsReturn"
355
+ >
356
+ Reset
357
+ </VcsButton>
358
+ </div>
375
359
  </v-form>
376
360
  </template>
377
361
  <script>
@@ -385,6 +369,7 @@
385
369
  VcsFormattedNumber,
386
370
  VcsFormSection,
387
371
  VcsLabel,
372
+ VcsTextArea,
388
373
  } from '@vcmap/ui';
389
374
  import { VCol, VContainer, VForm, VRow } from 'vuetify/lib';
390
375
  import packageJSON from './package.json';
@@ -401,6 +386,7 @@
401
386
  VcsFormattedNumber,
402
387
  VcsFormSection,
403
388
  VcsLabel,
389
+ VcsTextArea,
404
390
  VForm,
405
391
  VRow,
406
392
  VCol,
@@ -425,18 +411,26 @@
425
411
  const plugin = app.plugins.getByKey(packageJSON.name);
426
412
  const newUpdate = ref(true);
427
413
  watch(plugin.state, () => { newUpdate.value = true; });
414
+ const form = ref();
428
415
 
429
416
  return {
430
417
  // no object-destruction of reactive objects! or use toRef()
431
418
  state: plugin.state,
432
419
  // do not put the whole config here, since it would become reactive
433
420
  selectOptions: plugin.config.selectOptions,
434
- initialTextInput: plugin.config.initialTextInput,
435
- isValid: false,
421
+ form,
422
+ isValid: ref(true),
436
423
  isValidText,
437
424
  conditionalTest,
438
425
  isValidEmail,
439
426
  newUpdate,
427
+ resetState() {
428
+ plugin.resetState();
429
+ form.value.resetValidation();
430
+ },
431
+ validate() {
432
+ form.value.validate();
433
+ },
440
434
  logState() {
441
435
  // eslint-disable-next-line no-console
442
436
  console.log(plugin.getSerializedState());
@@ -74,7 +74,7 @@ export default function (config) {
74
74
  /**
75
75
  * @type {FormInputsExampleState}
76
76
  */
77
- const pluginState = reactive({
77
+ const pluginState = {
78
78
  selected: pluginConfig.selectOptions.value[0],
79
79
  selectedMultiple: [],
80
80
  conditionalInput: '',
@@ -84,7 +84,10 @@ export default function (config) {
84
84
  email: '',
85
85
  prependedInput: '',
86
86
  files: [],
87
- });
87
+ };
88
+
89
+ /** @type {FormInputsExampleState} */
90
+ const defaultState = JSON.parse(JSON.stringify(pluginState));
88
91
 
89
92
 
90
93
  /**
@@ -149,7 +152,8 @@ export default function (config) {
149
152
  get version() { return packageJSON.version; },
150
153
  get vcMapVersion() { return packageJSON.vcMapVersion; },
151
154
  config: pluginConfig,
152
- state: pluginState,
155
+ state: reactive(pluginState),
156
+ resetState: () => Object.assign(pluginState, JSON.parse(JSON.stringify(defaultState))),
153
157
  getSerializedState,
154
158
  setSerializedState,
155
159
  onVcsAppMounted(app) {
@@ -13,7 +13,7 @@ export function isValidText(value) {
13
13
  * @returns {boolean|string}
14
14
  */
15
15
  export function conditionalTest(value, condition) {
16
- if (condition === 'Option A') {
16
+ if (condition === 'B') {
17
17
  return value === 'test' || `input ${value} must be "test"`;
18
18
  } else {
19
19
  return true;
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <v-sheet>
3
- <v-sheet class="pa-2">
3
+ <v-sheet class="px-2 d-grid">
4
4
  <v-switch
5
5
  v-model="selectable"
6
6
  label="Selectable"
@@ -286,5 +286,8 @@
286
286
  </script>
287
287
 
288
288
  <style lang="scss" scoped>
289
-
289
+ .d-grid{
290
+ display: grid;
291
+ grid-template-columns: 1fr 1fr;
292
+ }
290
293
  </style>