@teipublisher/pb-components 2.26.0-next-3.12 → 2.26.0-next-3.13

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 (132) hide show
  1. package/.github/workflows/main.yml +3 -3
  2. package/.github/workflows/node.js.yml +3 -3
  3. package/.github/workflows/release.js.yml +3 -3
  4. package/CHANGELOG.md +30 -0
  5. package/Dockerfile +78 -70
  6. package/css/components.css +5 -5
  7. package/dist/demo/pb-drawer2.html +1 -1
  8. package/dist/demo/pb-leaflet-map.html +1 -1
  9. package/dist/demo/pb-progress.html +2 -2
  10. package/dist/demo/pb-repeat.html +1 -3
  11. package/dist/demo/pb-view3.html +1 -1
  12. package/dist/{paper-icon-button-0fb125c4.js → paper-icon-button-72125e67.js} +1 -1
  13. package/dist/pb-code-editor.js +25 -20
  14. package/dist/pb-component-docs.js +58 -54
  15. package/dist/pb-components-bundle.js +1937 -1782
  16. package/dist/pb-edit-app.js +167 -107
  17. package/dist/pb-elements.json +45 -45
  18. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  19. package/dist/pb-leaflet-map.js +23 -23
  20. package/dist/pb-mei.js +56 -41
  21. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  22. package/dist/pb-odd-editor.js +923 -756
  23. package/dist/pb-tify.js +2 -2
  24. package/dist/{vaadin-element-mixin-49ab4037.js → vaadin-element-mixin-84fb7d82.js} +178 -163
  25. package/gh-pages.js +5 -3
  26. package/i18n/common/pl.json +2 -2
  27. package/lib/openseadragon.min.js +1 -1
  28. package/package.json +2 -2
  29. package/pb-elements.json +45 -45
  30. package/src/assets/components.css +5 -5
  31. package/src/authority/airtable.js +20 -21
  32. package/src/authority/anton.js +129 -129
  33. package/src/authority/custom.js +23 -21
  34. package/src/authority/geonames.js +38 -32
  35. package/src/authority/gnd.js +47 -42
  36. package/src/authority/kbga.js +137 -134
  37. package/src/authority/metagrid.js +44 -46
  38. package/src/authority/reconciliation.js +66 -67
  39. package/src/authority/registry.js +4 -4
  40. package/src/docs/pb-component-docs.js +2 -2
  41. package/src/docs/pb-component-view.js +5 -5
  42. package/src/docs/pb-components-list.js +2 -2
  43. package/src/docs/pb-demo-snippet.js +2 -2
  44. package/src/dts-client.js +299 -297
  45. package/src/dts-select-endpoint.js +90 -82
  46. package/src/parse-date-service.js +184 -135
  47. package/src/pb-ajax.js +150 -146
  48. package/src/pb-authority-lookup.js +183 -146
  49. package/src/pb-autocomplete.js +292 -280
  50. package/src/pb-blacklab-highlight.js +264 -259
  51. package/src/pb-blacklab-results.js +236 -221
  52. package/src/pb-browse-docs.js +540 -475
  53. package/src/pb-browse.js +68 -65
  54. package/src/pb-clipboard.js +79 -76
  55. package/src/pb-code-editor.js +110 -102
  56. package/src/pb-code-highlight.js +209 -204
  57. package/src/pb-codepen.js +79 -72
  58. package/src/pb-collapse.js +212 -207
  59. package/src/pb-combo-box.js +190 -190
  60. package/src/pb-components-bundle.js +1 -1
  61. package/src/pb-custom-form.js +151 -149
  62. package/src/pb-dialog.js +94 -85
  63. package/src/pb-document.js +89 -90
  64. package/src/pb-download.js +210 -198
  65. package/src/pb-drawer.js +145 -148
  66. package/src/pb-edit-app.js +301 -229
  67. package/src/pb-edit-xml.js +98 -96
  68. package/src/pb-events.js +114 -107
  69. package/src/pb-facs-link.js +104 -102
  70. package/src/pb-facsimile.js +411 -413
  71. package/src/pb-formula.js +151 -153
  72. package/src/pb-geolocation.js +129 -131
  73. package/src/pb-grid-action.js +53 -56
  74. package/src/pb-grid.js +231 -228
  75. package/src/pb-highlight.js +140 -140
  76. package/src/pb-hotkeys.js +40 -42
  77. package/src/pb-i18n.js +101 -104
  78. package/src/pb-image-strip.js +84 -78
  79. package/src/pb-lang.js +132 -128
  80. package/src/pb-leaflet-map.js +488 -485
  81. package/src/pb-link.js +126 -124
  82. package/src/pb-load.js +431 -426
  83. package/src/pb-login.js +291 -248
  84. package/src/pb-manage-odds.js +364 -318
  85. package/src/pb-map-icon.js +89 -89
  86. package/src/pb-map-layer.js +85 -85
  87. package/src/pb-markdown.js +90 -99
  88. package/src/pb-media-query.js +74 -72
  89. package/src/pb-mei.js +306 -295
  90. package/src/pb-message.js +144 -144
  91. package/src/pb-mixin.js +269 -264
  92. package/src/pb-navigation.js +80 -82
  93. package/src/pb-observable.js +38 -38
  94. package/src/pb-odd-editor.js +1053 -955
  95. package/src/pb-odd-elementspec-editor.js +348 -297
  96. package/src/pb-odd-model-editor.js +1061 -901
  97. package/src/pb-odd-parameter-editor.js +200 -178
  98. package/src/pb-odd-rendition-editor.js +136 -124
  99. package/src/pb-page.js +431 -421
  100. package/src/pb-paginate.js +202 -190
  101. package/src/pb-panel.js +191 -179
  102. package/src/pb-popover-themes.js +7 -5
  103. package/src/pb-popover.js +296 -287
  104. package/src/pb-print-preview.js +127 -127
  105. package/src/pb-progress.js +51 -51
  106. package/src/pb-repeat.js +105 -104
  107. package/src/pb-restricted.js +84 -77
  108. package/src/pb-search.js +252 -241
  109. package/src/pb-select-feature.js +127 -120
  110. package/src/pb-select-odd.js +132 -124
  111. package/src/pb-select-template.js +89 -78
  112. package/src/pb-select.js +251 -227
  113. package/src/pb-split-list.js +179 -174
  114. package/src/pb-svg.js +80 -79
  115. package/src/pb-table-column.js +54 -54
  116. package/src/pb-table-grid.js +221 -203
  117. package/src/pb-tabs.js +61 -63
  118. package/src/pb-tify.js +154 -154
  119. package/src/pb-timeline.js +271 -229
  120. package/src/pb-toggle-feature.js +182 -175
  121. package/src/pb-upload.js +184 -174
  122. package/src/pb-version.js +30 -30
  123. package/src/pb-view-annotate.js +132 -98
  124. package/src/pb-view.js +1289 -1270
  125. package/src/pb-zoom.js +75 -59
  126. package/src/polymer-hack.js +1 -1
  127. package/src/search-result-service.js +256 -223
  128. package/src/seed-element.js +13 -20
  129. package/src/settings.js +4 -4
  130. package/src/theming.js +96 -96
  131. package/src/urls.js +289 -289
  132. package/src/utils.js +53 -51
@@ -1,213 +1,213 @@
1
1
  import { LitElement } from 'lit-element';
2
- import TomSelect from "tom-select";
2
+ import TomSelect from 'tom-select';
3
3
  import { pbMixin, waitOnce } from './pb-mixin.js';
4
4
  import { resolveURL } from './utils.js';
5
- import { get as i18n } from "./pb-i18n.js";
5
+ import { get as i18n } from './pb-i18n.js';
6
6
 
7
7
  function importTheme(theme) {
8
- if (document.getElementById('__pb-multi-select-css')) {
9
- return;
10
- }
11
- const themes = resolveURL('../css/tom-select');
12
- const link = document.createElement('link');
13
- link.id = '__pb-multi-select-css';
14
- link.href = `${themes}/tom-select.${theme}.min.css`;
15
- link.rel = 'stylesheet';
16
- document.head.appendChild(link);
8
+ if (document.getElementById('__pb-multi-select-css')) {
9
+ return;
10
+ }
11
+ const themes = resolveURL('../css/tom-select');
12
+ const link = document.createElement('link');
13
+ link.id = '__pb-multi-select-css';
14
+ link.href = `${themes}/tom-select.${theme}.min.css`;
15
+ link.rel = 'stylesheet';
16
+ document.head.appendChild(link);
17
17
  }
18
18
 
19
- const renderDefault = (data) =>
20
- data ? `<div>${i18n(data.text)}</div>` : '';
19
+ const renderDefault = data => (data ? `<div>${i18n(data.text)}</div>` : '');
21
20
 
22
21
  /**
23
22
  * Provides a combo box, i.e. a combination of an input with a dropdown.
24
23
  * Items to select from may be obtained from a remote data source.
25
- *
26
- * The form control to be used (either a select or input) should be passed
24
+ *
25
+ * The form control to be used (either a select or input) should be passed
27
26
  * in the content of the element. If no control is provided, a simple `<input>`
28
27
  * will be created.
29
- *
28
+ *
30
29
  */
31
30
  export class PbComboBox extends pbMixin(LitElement) {
32
- static get properties() {
33
- return {
34
- ...super.properties,
35
- /**
36
- * The placeholder text to display in the control. May contain text or an i18n key to be
37
- * translated automatically.
38
- */
39
- placeholder: {
40
- type: String
41
- },
42
- /**
43
- * A remote data source to use. The component will pass the text entered by the user
44
- * in parameter `query`. It expects a JSON array of objects with each object describing
45
- * one item:
46
- *
47
- * ```json
48
- * {
49
- * "text": "Text to show as label",
50
- * "value": "value-to-use"
51
- * }
52
- * ```
53
- */
54
- source: {
55
- type: String
56
- },
57
- /**
58
- * Automatically close the dropdown once the user made a selection
59
- */
60
- closeAfterSelect: {
61
- type: Boolean,
62
- attribute: 'close-after-select'
63
- },
64
- /**
65
- * Preload all items from the remote data source at startup
66
- * Must be of type string because tom-select supports setting
67
- * that property to "focus" (load data on focus)
68
- */
69
- preload: {
70
- type: String
71
- },
72
- /**
73
- * Name of the event to be emitted when the user leaves the form control
74
- */
75
- onBlur: {
76
- type: String,
77
- attribute: 'on-blur'
78
- },
79
- /**
80
- * Name of the event to be emitted when the value of the form control has changed
81
- */
82
- onChange: {
83
- type: String,
84
- attribute: 'on-change'
85
- }
86
- };
31
+ static get properties() {
32
+ return {
33
+ ...super.properties,
34
+ /**
35
+ * The placeholder text to display in the control. May contain text or an i18n key to be
36
+ * translated automatically.
37
+ */
38
+ placeholder: {
39
+ type: String,
40
+ },
41
+ /**
42
+ * A remote data source to use. The component will pass the text entered by the user
43
+ * in parameter `query`. It expects a JSON array of objects with each object describing
44
+ * one item:
45
+ *
46
+ * ```json
47
+ * {
48
+ * "text": "Text to show as label",
49
+ * "value": "value-to-use"
50
+ * }
51
+ * ```
52
+ */
53
+ source: {
54
+ type: String,
55
+ },
56
+ /**
57
+ * Automatically close the dropdown once the user made a selection
58
+ */
59
+ closeAfterSelect: {
60
+ type: Boolean,
61
+ attribute: 'close-after-select',
62
+ },
63
+ /**
64
+ * Preload all items from the remote data source at startup
65
+ * Must be of type string because tom-select supports setting
66
+ * that property to "focus" (load data on focus)
67
+ */
68
+ preload: {
69
+ type: String,
70
+ },
71
+ /**
72
+ * Name of the event to be emitted when the user leaves the form control
73
+ */
74
+ onBlur: {
75
+ type: String,
76
+ attribute: 'on-blur',
77
+ },
78
+ /**
79
+ * Name of the event to be emitted when the value of the form control has changed
80
+ */
81
+ onChange: {
82
+ type: String,
83
+ attribute: 'on-change',
84
+ },
85
+ };
86
+ }
87
+
88
+ get value() {
89
+ return this._select ? this._select.getValue() : null;
90
+ }
91
+
92
+ set value(value) {
93
+ if (!this._select) {
94
+ return;
87
95
  }
88
-
89
- get value() {
90
- return this._select ? this._select.getValue() : null;
91
- }
92
-
93
- set value(value) {
94
- if (!this._select) {
95
- return;
96
+ this._select.clear(true);
97
+ this._select.sync();
98
+
99
+ this._select.setValue(value, false);
100
+ this._select.sync();
101
+ }
102
+
103
+ /**
104
+ * Set a javascript function to be called whenever an item
105
+ * needs to be rendered. The function will be passed the data
106
+ * object of the current item as argument.
107
+ *
108
+ * @param {Function} callbackFunction
109
+ */
110
+ set renderItem(callbackFunction) {
111
+ this.renderFunction = callbackFunction;
112
+ }
113
+
114
+ constructor() {
115
+ super();
116
+ this.theme = 'default';
117
+ this.source = null;
118
+ this.closeAfterSelect = false;
119
+ this.preload = false;
120
+ this.renderFunction = renderDefault;
121
+ this.onBlur = 'pb-combo-box-blur';
122
+ this.onChange = 'pb-combo-box-change';
123
+ this.placeholder = '';
124
+ }
125
+
126
+ connectedCallback() {
127
+ super.connectedCallback();
128
+ this.subscribeTo('pb-i18n-update', () => {
129
+ if (this._select) {
130
+ this._select.settings.placeholder = i18n(this.placeholder);
131
+ this._select.inputState();
132
+
133
+ if (this.source) {
134
+ this._select.refreshOptions(false);
135
+ } else {
136
+ this._select.clearOptions();
137
+ this._select.sync();
96
138
  }
97
- this._select.clear(true);
98
- this._select.sync();
139
+ }
140
+ });
141
+ }
99
142
 
100
- this._select.setValue(value, false);
101
- this._select.sync();
102
- }
103
-
104
- /**
105
- * Set a javascript function to be called whenever an item
106
- * needs to be rendered. The function will be passed the data
107
- * object of the current item as argument.
108
- *
109
- * @param {Function} callbackFunction
110
- */
111
- set renderItem(callbackFunction) {
112
- this.renderFunction = callbackFunction;
113
- }
143
+ firstUpdated() {
144
+ importTheme(this.theme);
114
145
 
115
- constructor() {
116
- super();
117
- this.theme = 'default';
118
- this.source = null;
119
- this.closeAfterSelect = false;
120
- this.preload = false;
121
- this.renderFunction = renderDefault;
122
- this.onBlur = 'pb-combo-box-blur';
123
- this.onChange = 'pb-combo-box-change';
124
- this.placeholder = '';
125
- }
146
+ let input = this.querySelector('select,input');
126
147
 
127
- connectedCallback() {
128
- super.connectedCallback();
129
- this.subscribeTo('pb-i18n-update', () => {
130
- if (this._select) {
131
- this._select.settings.placeholder = i18n(this.placeholder);
132
- this._select.inputState();
133
-
134
- if (this.source) {
135
- this._select.refreshOptions(false);
136
- } else {
137
- this._select.clearOptions();
138
- this._select.sync();
139
- }
140
- }
141
- });
148
+ if (!input) {
149
+ // create input if none was passed
150
+ input = document.createElement('input');
151
+ this.appendChild(input);
142
152
  }
143
-
144
- firstUpdated() {
145
- importTheme(this.theme);
146
-
147
- let input = this.querySelector('select,input');
148
-
149
- if (!input) {
150
- // create input if none was passed
151
- input = document.createElement('input');
152
- this.appendChild(input);
153
+ input.autocomplete = false;
154
+
155
+ waitOnce('pb-page-ready', () => {
156
+ const options = {};
157
+ if (this.source) {
158
+ let controller = new AbortController();
159
+ const url = this.toAbsoluteURL(this.source);
160
+ options.labelField = 'text';
161
+ options.valueField = 'value';
162
+ options.searchField = [];
163
+ options.preload = this.preload;
164
+ // Make sure options are loaded even if the user clears the search field
165
+ if (this.preload) {
166
+ options.shouldLoad = () => true;
153
167
  }
154
- input.autocomplete = false;
155
-
156
- waitOnce('pb-page-ready', () => {
157
- const options = {};
158
- if (this.source) {
159
- let controller = new AbortController()
160
- const url = this.toAbsoluteURL(this.source);
161
- options.labelField = 'text';
162
- options.valueField = 'value';
163
- options.searchField = [];
164
- options.preload = this.preload;
165
- // Make sure options are loaded even if the user clears the search field
166
- if(this.preload) {
167
- options.shouldLoad = () => true
168
- }
169
- options.load = (query, callback) => {
170
- if (this._select) {
171
- // The default behaviour of tom-select is to keep existing items when loading
172
- // again from the source. We want to show only items the server provides, so
173
- // we need to clear "stale" items before fetching.
174
- this._select.clearOptions();
175
- }
176
- // Abort previous request (if any)
177
- if (controller) {
178
- controller.abort();
179
- }
180
- controller = new AbortController();
181
- fetch(`${url}?query=${encodeURIComponent(query)}`, {
182
- method: 'GET',
183
- mode: 'cors',
184
- credentials: 'same-origin',
185
- signal: controller.signal
186
- })
187
- .then(response => response.json())
188
- .then(json => {
189
- callback(json);
190
- }).catch(()=>{
191
- callback();
192
- });
193
- };
194
- options.render = {
195
- option: this.renderFunction,
196
- item: this.renderFunction
197
- };
198
- }
199
- options.placeholder = i18n(this.placeholder);
200
- options.closeAfterSelect = this.closeAfterSelect;
201
- options.onBlur = () => this.emitTo(this.onBlur, { value: this.value });
202
- options.onChange = () => this.emitTo(this.onChange, { value: this.value });
203
- // options.plugins = ['change_listener'];
204
-
205
- this._select = new TomSelect(input, options);
206
- });
207
- }
208
-
209
- createRenderRoot() {
210
- return this;
211
- }
168
+ options.load = (query, callback) => {
169
+ if (this._select) {
170
+ // The default behaviour of tom-select is to keep existing items when loading
171
+ // again from the source. We want to show only items the server provides, so
172
+ // we need to clear "stale" items before fetching.
173
+ this._select.clearOptions();
174
+ }
175
+ // Abort previous request (if any)
176
+ if (controller) {
177
+ controller.abort();
178
+ }
179
+ controller = new AbortController();
180
+ fetch(`${url}?query=${encodeURIComponent(query)}`, {
181
+ method: 'GET',
182
+ mode: 'cors',
183
+ credentials: 'same-origin',
184
+ signal: controller.signal,
185
+ })
186
+ .then(response => response.json())
187
+ .then(json => {
188
+ callback(json);
189
+ })
190
+ .catch(() => {
191
+ callback();
192
+ });
193
+ };
194
+ options.render = {
195
+ option: this.renderFunction,
196
+ item: this.renderFunction,
197
+ };
198
+ }
199
+ options.placeholder = i18n(this.placeholder);
200
+ options.closeAfterSelect = this.closeAfterSelect;
201
+ options.onBlur = () => this.emitTo(this.onBlur, { value: this.value });
202
+ options.onChange = () => this.emitTo(this.onChange, { value: this.value });
203
+ // options.plugins = ['change_listener'];
204
+
205
+ this._select = new TomSelect(input, options);
206
+ });
207
+ }
208
+
209
+ createRenderRoot() {
210
+ return this;
211
+ }
212
212
  }
213
- customElements.define('pb-combo-box', PbComboBox);
213
+ customElements.define('pb-combo-box', PbComboBox);
@@ -5,4 +5,4 @@ import '@polymer/paper-tooltip/paper-tooltip.js';
5
5
  import '@polymer/paper-fab';
6
6
  import '@polymer/paper-card';
7
7
  import './docs/pb-demo-snippet.js';
8
- import './pb-components.js';
8
+ import './pb-components.js';