@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
@@ -8,90 +8,96 @@ import { pbMixin } from './pb-mixin.js';
8
8
  * @appliesMixin pbMixin
9
9
  */
10
10
  export class PbImageStrip extends pbMixin(LitElement) {
11
- static get properties() {
12
- return {
13
- ...super.properties,
14
- /**
15
- * Array of image
16
- *
17
- */
18
- items: {
19
- type: Array
20
- },
21
- imageWidth: {
22
- attribute: 'image-width',
23
- type: Number
24
- },
25
- imageHeight: {
26
- attribute: 'image-height',
27
- type: Number
28
- },
29
- baseUri: {
30
- attribute: 'base-uri',
31
- type: String
32
- }
33
- };
34
- }
11
+ static get properties() {
12
+ return {
13
+ ...super.properties,
14
+ /**
15
+ * Array of image
16
+ *
17
+ */
18
+ items: {
19
+ type: Array,
20
+ },
21
+ imageWidth: {
22
+ attribute: 'image-width',
23
+ type: Number,
24
+ },
25
+ imageHeight: {
26
+ attribute: 'image-height',
27
+ type: Number,
28
+ },
29
+ baseUri: {
30
+ attribute: 'base-uri',
31
+ type: String,
32
+ },
33
+ };
34
+ }
35
35
 
36
- constructor() {
37
- super();
38
- this.items = []
39
- this.urls = new Set()
40
- this.imageHeight = 80
41
- this.imageWidth = 64
42
- }
36
+ constructor() {
37
+ super();
38
+ this.items = [];
39
+ this.urls = new Set();
40
+ this.imageHeight = 80;
41
+ this.imageWidth = 64;
42
+ }
43
43
 
44
- connectedCallback() {
45
- super.connectedCallback();
46
- this.subscribeTo('pb-start-update', () => {
47
- this.items = []
48
- this.urls = new Set()
49
- this.requestUpdate(this.items)
50
- });
51
- this.subscribeTo('pb-load-facsimile', e => {
52
- const { element, order } = e.detail
53
- const url = element.getImage()
54
- if (this.urls.has(url)) { return }
44
+ connectedCallback() {
45
+ super.connectedCallback();
46
+ this.subscribeTo('pb-start-update', () => {
47
+ this.items = [];
48
+ this.urls = new Set();
49
+ this.requestUpdate(this.items);
50
+ });
51
+ this.subscribeTo('pb-load-facsimile', e => {
52
+ const { element, order } = e.detail;
53
+ const url = element.getImage();
54
+ if (this.urls.has(url)) {
55
+ return;
56
+ }
55
57
 
56
- this.urls.add(url)
57
- const itemOrder = this.items.map(item => item.getOrder())
58
- const insertAt = itemOrder.reduce((result, next, index) => {
59
- if (order < next) return result;
60
- if (order === next) return index;
61
- return index + 1;
62
- }, 0)
63
-
64
- this.items.splice(insertAt, 0, element)
65
- this.requestUpdate()
66
- });
67
- }
58
+ this.urls.add(url);
59
+ const itemOrder = this.items.map(item => item.getOrder());
60
+ const insertAt = itemOrder.reduce((result, next, index) => {
61
+ if (order < next) return result;
62
+ if (order === next) return index;
63
+ return index + 1;
64
+ }, 0);
68
65
 
69
- showIt(element) {
70
- this.emitTo('pb-show-annotation', { file: element.getImage(), element })
71
- }
66
+ this.items.splice(insertAt, 0, element);
67
+ this.requestUpdate();
68
+ });
69
+ }
72
70
 
73
- renderItem(item) {
74
- return html`
75
- <figure class="strip-item" @click="${() => this.showIt(item)}">
76
- <img height="${this.imageHeight}" width="${this.imageWidth}"
77
- src="${this.baseUri}${item.getImage()}/full/${this.imageWidth},${this.imageHeight}/0/default.jpg">
78
- <figcaption>${item.getLabel()}</figcaption>
79
- </figure>
80
- `
81
- }
71
+ showIt(element) {
72
+ this.emitTo('pb-show-annotation', { file: element.getImage(), element });
73
+ }
82
74
 
83
- render() {
84
- return html`${this.items.map(item => this.renderItem(item))}`;
85
- }
75
+ renderItem(item) {
76
+ return html`
77
+ <figure class="strip-item" @click="${() => this.showIt(item)}">
78
+ <img
79
+ height="${this.imageHeight}"
80
+ width="${this.imageWidth}"
81
+ src="${this.baseUri}${item.getImage()}/full/${this.imageWidth},${this
82
+ .imageHeight}/0/default.jpg"
83
+ />
84
+ <figcaption>${item.getLabel()}</figcaption>
85
+ </figure>
86
+ `;
87
+ }
86
88
 
87
- static get styles() {
88
- return css`
89
- :host {
90
- display: block;
91
- }
92
- `;
93
- }
89
+ render() {
90
+ return html`${this.items.map(item => this.renderItem(item))}`;
91
+ }
92
+
93
+ static get styles() {
94
+ return css`
95
+ :host {
96
+ display: block;
97
+ }
98
+ `;
99
+ }
94
100
  }
95
101
  if (!customElements.get('pb-image-strip')) {
96
- customElements.define('pb-image-strip', PbImageStrip);
97
- }
102
+ customElements.define('pb-image-strip', PbImageStrip);
103
+ }
package/src/pb-lang.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { LitElement, html, css } from 'lit-element';
2
2
  import { pbMixin, waitOnce } from './pb-mixin.js';
3
- import { translate } from "./pb-i18n.js";
3
+ import { translate } from './pb-i18n.js';
4
4
  import { themableMixin } from './theming.js';
5
5
 
6
6
  /**
@@ -13,142 +13,146 @@ import { themableMixin } from './theming.js';
13
13
  * @cssprop --pb-lang-input-color - Color of the text in the language field
14
14
  */
15
15
  export class PbLang extends themableMixin(pbMixin(LitElement)) {
16
- static get styles() {
17
- return css`
18
- :host {
19
- display: inline-block;
20
- }
21
- ::slotted(*) {
22
- display: none;
23
- }
24
- details {
25
- position: relative;
26
- display: inline-block;
27
- }
28
- summary {
29
- color: var(--pb-lang-input-color, inherit);
30
- cursor: pointer;
31
- list-style: none;
32
- padding: 0.5em;
33
- }
34
- summary::-webkit-details-marker {
35
- display: none;
36
- }
37
- ul {
38
- position: absolute;
39
- top: 100%;
40
- left: 0;
41
- max-height: 80vh;
42
- overflow-y: auto;
43
- margin: 0;
44
- padding: 0;
45
- list-style: none;
46
- background: white;
47
- border: 1px solid #ccc;
48
- border-radius: 4px;
49
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
50
- z-index: 1000;
51
- }
52
- li {
53
- list-style: none;
54
- padding: 0.5em 1em;
55
- cursor: pointer;
56
- }
57
- li:hover {
58
- background: #f0f0f0;
59
- }
60
- `;
61
- }
16
+ static get styles() {
17
+ return css`
18
+ :host {
19
+ display: inline-block;
20
+ }
21
+ ::slotted(*) {
22
+ display: none;
23
+ }
24
+ details {
25
+ position: relative;
26
+ display: inline-block;
27
+ }
28
+ summary {
29
+ color: var(--pb-lang-input-color, inherit);
30
+ cursor: pointer;
31
+ list-style: none;
32
+ padding: 0.5em;
33
+ }
34
+ summary::-webkit-details-marker {
35
+ display: none;
36
+ }
37
+ ul {
38
+ position: absolute;
39
+ top: 100%;
40
+ left: 0;
41
+ max-height: 80vh;
42
+ overflow-y: auto;
43
+ margin: 0;
44
+ padding: 0;
45
+ list-style: none;
46
+ background: white;
47
+ border: 1px solid #ccc;
48
+ border-radius: 4px;
49
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
50
+ z-index: 1000;
51
+ }
52
+ li {
53
+ list-style: none;
54
+ padding: 0.5em 1em;
55
+ cursor: pointer;
56
+ }
57
+ li:hover {
58
+ background: #f0f0f0;
59
+ }
60
+ `;
61
+ }
62
62
 
63
- static get properties() {
64
- return {
65
- ...super.properties,
66
- /**
67
- * The label for a language in the dropdown
68
- */
69
- label: {
70
- type: String
71
- },
72
- selected: {
73
- type: String
74
- },
75
- /**
76
- * How should the selected value be displayed?
77
- *
78
- * - `text` - Display the text content of the selected option
79
- * - other - Attribute name to use
80
- */
81
- display: {
82
- type: String,
83
- default: 'value'
84
- }
85
- };
86
- }
63
+ static get properties() {
64
+ return {
65
+ ...super.properties,
66
+ /**
67
+ * The label for a language in the dropdown
68
+ */
69
+ label: {
70
+ type: String,
71
+ },
72
+ selected: {
73
+ type: String,
74
+ },
75
+ /**
76
+ * How should the selected value be displayed?
77
+ *
78
+ * - `text` - Display the text content of the selected option
79
+ * - other - Attribute name to use
80
+ */
81
+ display: {
82
+ type: String,
83
+ default: 'value',
84
+ },
85
+ };
86
+ }
87
87
 
88
- constructor() {
89
- super();
90
- this.label = 'language';
91
- this.display = 'value';
92
- }
88
+ constructor() {
89
+ super();
90
+ this.label = 'language';
91
+ this.display = 'value';
92
+ }
93
93
 
94
- connectedCallback() {
95
- super.connectedCallback();
94
+ connectedCallback() {
95
+ super.connectedCallback();
96
96
 
97
- this.subscribeTo('pb-i18n-update', (ev) => {
98
- this.selected = ev.detail.language.replace(/^([^-]+).*$/, '$1');
99
- this._syncOptions();
100
- }, []);
101
- waitOnce('pb-i18n-update', (options) => {
102
- this.selected = options.language.replace(/^([^-]+).*$/, '$1');
103
- this._syncOptions();
104
- });
105
- }
97
+ this.subscribeTo(
98
+ 'pb-i18n-update',
99
+ ev => {
100
+ this.selected = ev.detail.language.replace(/^([^-]+).*$/, '$1');
101
+ this._syncOptions();
102
+ },
103
+ [],
104
+ );
105
+ waitOnce('pb-i18n-update', options => {
106
+ this.selected = options.language.replace(/^([^-]+).*$/, '$1');
107
+ this._syncOptions();
108
+ });
109
+ }
106
110
 
107
- render() {
108
- return html`
109
- <details>
110
- <summary aria-label="${translate(this.label)}" title="${translate(this.label)}"></summary>
111
- <ul></ul>
112
- </details>
113
- <slot @slotchange="${this._syncOptions}"></slot>
114
- `;
115
- }
111
+ render() {
112
+ return html`
113
+ <details>
114
+ <summary aria-label="${translate(this.label)}" title="${translate(this.label)}"></summary>
115
+ <ul></ul>
116
+ </details>
117
+ <slot @slotchange="${this._syncOptions}"></slot>
118
+ `;
119
+ }
116
120
 
117
- _syncOptions() {
118
- const ul = this.shadowRoot.querySelector('ul');
119
- const summary = this.shadowRoot.querySelector('summary');
120
- if (!ul || !summary) return;
121
+ _syncOptions() {
122
+ const ul = this.shadowRoot.querySelector('ul');
123
+ const summary = this.shadowRoot.querySelector('summary');
124
+ if (!ul || !summary) return;
121
125
 
122
- // Clear existing options
123
- ul.innerHTML = '';
126
+ // Clear existing options
127
+ ul.innerHTML = '';
124
128
 
125
- // Get all option elements from the light DOM
126
- const options = Array.from(this.querySelectorAll('option, paper-item'));
127
- options.forEach(option => {
128
- const li = document.createElement('li');
129
- li.textContent = option.textContent;
130
- li.dataset.value = option.value || option.getAttribute('value');
131
-
132
- if (li.dataset.value === this.selected) {
133
- summary.textContent = this.display === 'text' ? option.textContent : option[this.display];
134
- }
135
-
136
- li.addEventListener('click', () => {
137
- this._changed({ target: { value: li.dataset.value } });
138
- this.shadowRoot.querySelector('details').removeAttribute('open');
139
- });
140
-
141
- ul.appendChild(li);
142
- });
143
- }
129
+ // Get all option elements from the light DOM
130
+ const options = Array.from(this.querySelectorAll('option, paper-item'));
131
+ options.forEach(option => {
132
+ const li = document.createElement('li');
133
+ li.textContent = option.textContent;
134
+ li.dataset.value = option.value || option.getAttribute('value');
135
+
136
+ if (li.dataset.value === this.selected) {
137
+ summary.textContent = this.display === 'text' ? option.textContent : option[this.display];
138
+ }
139
+
140
+ li.addEventListener('click', () => {
141
+ this._changed({ target: { value: li.dataset.value } });
142
+ this.shadowRoot.querySelector('details').removeAttribute('open');
143
+ });
144
+
145
+ ul.appendChild(li);
146
+ });
147
+ }
144
148
 
145
- _changed(e) {
146
- const lang = e.target.value;
147
- if (lang !== this.selected) {
148
- console.log('<pb-lang> Language changed to %s', lang);
149
- this.emitTo('pb-i18n-language', { 'language': lang });
150
- this.selected = lang;
151
- }
149
+ _changed(e) {
150
+ const lang = e.target.value;
151
+ if (lang !== this.selected) {
152
+ console.log('<pb-lang> Language changed to %s', lang);
153
+ this.emitTo('pb-i18n-language', { language: lang });
154
+ this.selected = lang;
152
155
  }
156
+ }
153
157
  }
154
158
  customElements.define('pb-lang', PbLang);