@teipublisher/pb-components 2.26.1-next.3 → 3.0.0

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 (154) 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 +4 -4
  4. package/.releaserc.json +2 -2
  5. package/CHANGELOG.md +262 -11
  6. package/Dockerfile +78 -70
  7. package/css/components.css +5 -5
  8. package/css/leaflet/images/layers.png +0 -0
  9. package/dist/demo/components.css +46 -1
  10. package/dist/demo/pb-browse-docs2.html +1 -1
  11. package/dist/demo/pb-dialog.html +3 -5
  12. package/dist/demo/pb-drawer2.html +1 -1
  13. package/dist/demo/pb-facsimile.html +2 -2
  14. package/dist/demo/pb-grid.html +19 -6
  15. package/dist/demo/pb-leaflet-map.html +1 -1
  16. package/dist/demo/pb-login.html +0 -2
  17. package/dist/demo/pb-message.html +1 -2
  18. package/dist/demo/pb-progress.html +2 -2
  19. package/dist/demo/pb-repeat.html +1 -3
  20. package/dist/demo/pb-search.html +7 -4
  21. package/dist/demo/pb-search3.html +1 -1
  22. package/dist/demo/pb-search4.html +2 -2
  23. package/dist/demo/pb-view3.html +1 -1
  24. package/dist/{iron-form-3b8dcaa7.js → iron-form-dfb3e3b1.js} +95 -95
  25. package/dist/paper-checkbox-645e1077.js +200 -0
  26. package/dist/{paper-icon-button-b1d31571.js → paper-icon-button-984162bd.js} +1 -1
  27. package/dist/{paper-checkbox-515a5284.js → paper-inky-focus-behavior-fa16796b.js} +58 -247
  28. package/dist/{paper-listbox-a3b7175c.js → paper-listbox-5f5d1cec.js} +152 -162
  29. package/dist/pb-code-editor.js +25 -20
  30. package/dist/pb-component-docs.js +68 -64
  31. package/dist/pb-components-bundle.js +1983 -2293
  32. package/dist/pb-edit-app.js +167 -107
  33. package/dist/pb-elements.json +176 -120
  34. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  35. package/dist/pb-leaflet-map.js +23 -23
  36. package/dist/pb-mei.js +56 -41
  37. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  38. package/dist/pb-odd-editor.js +1023 -782
  39. package/dist/pb-tify.js +2 -2
  40. package/dist/vaadin-element-mixin-beb74ffd.js +545 -0
  41. package/gh-pages.js +5 -3
  42. package/i18n/common/en.json +6 -0
  43. package/i18n/common/pl.json +2 -2
  44. package/lib/openseadragon.min.js +6 -6
  45. package/package.json +3 -3
  46. package/pb-elements.json +176 -120
  47. package/src/assets/components.css +5 -5
  48. package/src/authority/airtable.js +20 -21
  49. package/src/authority/anton.js +129 -129
  50. package/src/authority/custom.js +23 -21
  51. package/src/authority/geonames.js +38 -32
  52. package/src/authority/gnd.js +50 -42
  53. package/src/authority/kbga.js +137 -134
  54. package/src/authority/metagrid.js +44 -46
  55. package/src/authority/reconciliation.js +66 -67
  56. package/src/authority/registry.js +4 -4
  57. package/src/docs/pb-component-docs.js +2 -2
  58. package/src/docs/pb-component-view.js +5 -5
  59. package/src/docs/pb-components-list.js +2 -2
  60. package/src/docs/pb-demo-snippet.js +2 -2
  61. package/src/dts-client.js +299 -297
  62. package/src/dts-select-endpoint.js +90 -82
  63. package/src/parse-date-service.js +184 -135
  64. package/src/pb-ajax.js +158 -171
  65. package/src/pb-authority-lookup.js +191 -156
  66. package/src/pb-autocomplete.js +292 -280
  67. package/src/pb-blacklab-highlight.js +264 -259
  68. package/src/pb-blacklab-results.js +236 -221
  69. package/src/pb-browse-docs.js +540 -475
  70. package/src/pb-browse.js +68 -65
  71. package/src/pb-clipboard.js +79 -76
  72. package/src/pb-code-editor.js +110 -102
  73. package/src/pb-code-highlight.js +209 -204
  74. package/src/pb-codepen.js +79 -72
  75. package/src/pb-collapse.js +211 -151
  76. package/src/pb-combo-box.js +190 -190
  77. package/src/pb-components-bundle.js +1 -1
  78. package/src/pb-components.js +1 -0
  79. package/src/pb-custom-form.js +173 -153
  80. package/src/pb-dialog.js +98 -62
  81. package/src/pb-document.js +89 -90
  82. package/src/pb-download.js +212 -196
  83. package/src/pb-drawer.js +145 -148
  84. package/src/pb-edit-app.js +301 -229
  85. package/src/pb-edit-xml.js +100 -97
  86. package/src/pb-events.js +114 -107
  87. package/src/pb-facs-link.js +104 -102
  88. package/src/pb-facsimile.js +474 -410
  89. package/src/pb-formula.js +151 -153
  90. package/src/pb-geolocation.js +129 -131
  91. package/src/pb-grid-action.js +53 -56
  92. package/src/pb-grid.js +231 -228
  93. package/src/pb-highlight.js +140 -140
  94. package/src/pb-hotkeys.js +40 -42
  95. package/src/pb-i18n.js +101 -104
  96. package/src/pb-image-strip.js +84 -78
  97. package/src/pb-lang.js +142 -57
  98. package/src/pb-leaflet-map.js +488 -485
  99. package/src/pb-link.js +126 -124
  100. package/src/pb-load.js +431 -429
  101. package/src/pb-login.js +299 -244
  102. package/src/pb-manage-odds.js +352 -336
  103. package/src/pb-map-icon.js +89 -89
  104. package/src/pb-map-layer.js +85 -85
  105. package/src/pb-markdown.js +90 -99
  106. package/src/pb-media-query.js +74 -72
  107. package/src/pb-mei.js +306 -295
  108. package/src/pb-message.js +139 -97
  109. package/src/pb-mixin.js +269 -264
  110. package/src/pb-navigation.js +80 -95
  111. package/src/pb-observable.js +38 -38
  112. package/src/pb-odd-editor.js +1054 -958
  113. package/src/pb-odd-elementspec-editor.js +349 -298
  114. package/src/pb-odd-model-editor.js +1075 -909
  115. package/src/pb-odd-parameter-editor.js +200 -178
  116. package/src/pb-odd-rendition-editor.js +136 -124
  117. package/src/pb-page.js +431 -422
  118. package/src/pb-paginate.js +228 -179
  119. package/src/pb-panel.js +198 -182
  120. package/src/pb-popover-themes.js +15 -8
  121. package/src/pb-popover.js +296 -287
  122. package/src/pb-print-preview.js +127 -127
  123. package/src/pb-progress.js +51 -51
  124. package/src/pb-repeat.js +105 -104
  125. package/src/pb-restricted.js +84 -77
  126. package/src/pb-search.js +256 -228
  127. package/src/pb-select-feature.js +127 -120
  128. package/src/pb-select-odd.js +132 -124
  129. package/src/pb-select-template.js +89 -78
  130. package/src/pb-select.js +251 -227
  131. package/src/pb-split-list.js +179 -174
  132. package/src/pb-svg.js +80 -79
  133. package/src/pb-table-column.js +54 -54
  134. package/src/pb-table-grid.js +221 -203
  135. package/src/pb-tabs.js +61 -63
  136. package/src/pb-tify.js +154 -154
  137. package/src/pb-timeline.js +382 -249
  138. package/src/pb-toggle-feature.js +195 -187
  139. package/src/pb-upload.js +184 -174
  140. package/src/pb-version.js +30 -30
  141. package/src/pb-view-annotate.js +135 -98
  142. package/src/pb-view.js +1282 -1270
  143. package/src/pb-zoom.js +127 -45
  144. package/src/polymer-hack.js +1 -1
  145. package/src/search-result-service.js +256 -223
  146. package/src/seed-element.js +13 -20
  147. package/src/settings.js +4 -4
  148. package/src/theming.js +98 -91
  149. package/src/urls.js +289 -289
  150. package/src/utils.js +53 -51
  151. package/css/pb-styles.css +0 -51
  152. package/dist/vaadin-element-mixin-fe4a4883.js +0 -527
  153. package/src/assets/pb-styles.css +0 -51
  154. package/src/pb-light-dom.js +0 -41
@@ -8,29 +8,22 @@ import { LitElement, html, css } from 'lit-element';
8
8
  * @demo demo/seed-element.html
9
9
  */
10
10
  export class SeedElement extends LitElement {
11
+ static get styles() {
12
+ return css``;
13
+ }
11
14
 
12
- static get styles() {
13
- return css`
14
- `;
15
- }
15
+ static get properties() {
16
+ return {};
17
+ }
16
18
 
17
- static get properties() {
18
- return {
19
- };
20
- }
21
-
22
- constructor(){
23
- super();
24
- }
25
-
26
- render() {
27
- return html`
28
- `;
29
- }
30
-
31
- firstUpdated(_changedProperties) {
32
- }
19
+ constructor() {
20
+ super();
21
+ }
33
22
 
23
+ render() {
24
+ return html``;
25
+ }
34
26
 
27
+ firstUpdated(_changedProperties) {}
35
28
  }
36
29
  customElements.define('seed-element', SeedElement);
package/src/settings.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export const settings = {
2
- /**
3
- * absolute Url to Publisher installation
4
- */
5
- publisherLocation:"http://localhost:8080/exist/apps/tei-publisher"
2
+ /**
3
+ * absolute Url to Publisher installation
4
+ */
5
+ publisherLocation: 'http://localhost:8080/exist/apps/tei-publisher',
6
6
  };
package/src/theming.js CHANGED
@@ -1,9 +1,9 @@
1
- import { waitOnce } from "./pb-mixin.js";
1
+ import { waitOnce } from './pb-mixin.js';
2
2
  import 'construct-style-sheets-polyfill';
3
3
 
4
4
  /**
5
5
  * Maps theme selector to CSSStyleSheet or null.
6
- *
6
+ *
7
7
  * @type {Map<string,(CSSStyleSheet|null)>}
8
8
  */
9
9
  const themeMap = new Map();
@@ -12,138 +12,145 @@ const themeMap = new Map();
12
12
  * Load one or more CSS stylesheet from the given URL and return
13
13
  * a CSSStyleSheet. The returned stylesheet can be assigned
14
14
  * to `adoptedStyleSheets`.
15
- *
15
+ *
16
16
  * @param {string[]} urls absolute URL
17
17
  * @returns {Promise<CSSStyleSheet|null>} constructed CSSStyleSheet or null
18
18
  */
19
19
  export async function loadStylesheets(urls) {
20
- const output = [];
21
- for (const url of urls) {
22
- const css = await loadResource(url);
23
- if (css) {
24
- output.push(css);
25
- }
26
- }
27
- if (output.length > 0) {
28
- const sheet = new CSSStyleSheet();
29
- return sheet.replace(output.join(''));
20
+ const output = [];
21
+ for (const url of urls) {
22
+ const css = await loadResource(url);
23
+ if (css) {
24
+ output.push(css);
30
25
  }
31
- return null;
26
+ }
27
+ if (output.length > 0) {
28
+ const sheet = new CSSStyleSheet();
29
+ return sheet.replace(output.join(''));
30
+ }
31
+ return null;
32
32
  }
33
33
 
34
34
  function loadResource(url) {
35
- return fetch(url)
36
- .then(response => {
37
- if (response.ok) {
38
- return response.text();
39
- }
40
- console.warn('<theming> Component stylesheet not found: %s', url);
41
- return null;
42
- })
43
- .then(text => text)
44
- .catch(error => {
45
- console.error('<theming> Error loading stylesheet %s: %o', url, error);
46
- return null;
47
- });
35
+ return fetch(url)
36
+ .then(response => {
37
+ if (response.ok) {
38
+ return response.text();
39
+ }
40
+ console.warn('<theming> Component stylesheet not found: %s', url);
41
+ return null;
42
+ })
43
+ .then(text => text)
44
+ .catch(error => {
45
+ console.error('<theming> Error loading stylesheet %s: %o', url, error);
46
+ return null;
47
+ });
48
48
  }
49
49
 
50
50
  /**
51
51
  * From the global component theme, import all rules which would apply to the
52
52
  * given element into a new CSSStyleSheet and return it.
53
- *
53
+ *
54
54
  * @param {HTMLElement} elem a web component or HTML element
55
55
  * @returns {CSSStyleSheet|null} a new CSSStylesheet or null
56
56
  */
57
57
  export function importStyles(elem) {
58
- const page = document.querySelector('pb-page');
59
- if (!page) {
60
- return null;
61
- }
62
- const theme = page.stylesheet;
63
- if (!theme) {
64
- // no component styles defined
65
- return null;
66
- }
58
+ const theme = getThemeCSS();
59
+ if (!theme) {
60
+ return null;
61
+ }
62
+ const selectors = getSelectors(elem).join('|');
63
+ if (themeMap.has(selectors)) {
64
+ return themeMap.get(selectors);
65
+ }
66
+ const prefixRegex = new RegExp(`^(${selectors})\\b`);
67
+ let adoptedSheet = null;
68
+ const rules = theme.cssRules;
69
+ const newCSS = copyStyles(rules, prefixRegex, []);
70
+ if (newCSS.length > 0) {
71
+ adoptedSheet = new CSSStyleSheet();
72
+ adoptedSheet.replaceSync(newCSS.join(''));
73
+ }
74
+ console.log('<theming> caching stylesheet for %s', selectors);
75
+ themeMap.set(selectors, adoptedSheet);
76
+ return adoptedSheet;
77
+ }
67
78
 
68
- const selectors = getSelectors(elem).join('|');
69
- if (themeMap.has(selectors)) {
70
- return themeMap.get(selectors);
71
- }
72
- const prefixRegex = new RegExp(`^(${selectors})\\b`);
73
- let adoptedSheet = null;
74
- const rules = theme.cssRules;
75
- const newCSS = copyStyles(rules, prefixRegex, []);
76
- if (newCSS.length > 0) {
77
- adoptedSheet = new CSSStyleSheet();
78
- adoptedSheet.replaceSync(newCSS.join(''));
79
- }
80
- console.log('<theming> caching stylesheet for %s', selectors);
81
- themeMap.set(selectors, adoptedSheet);
82
- return adoptedSheet;
79
+ export function getThemeCSS() {
80
+ const page = document.querySelector('pb-page');
81
+ if (!page) {
82
+ return null;
83
+ }
84
+ const theme = page.stylesheet;
85
+ if (!theme) {
86
+ // no component styles defined
87
+ return null;
88
+ }
89
+ return theme;
83
90
  }
84
91
 
85
92
  /**
86
93
  * Recursively copy matching styles from the theme CSS
87
94
  * to create a new CSS stylesheet having all styles required
88
95
  * by the component.
89
- *
90
- * @param {CSSRule[]} rules
91
- * @param {RegExp} prefixRegex
92
- * @param {string[]} output
96
+ *
97
+ * @param {CSSRule[]} rules
98
+ * @param {RegExp} prefixRegex
99
+ * @param {string[]} output
93
100
  * @returns {string[]}
94
101
  */
95
102
  function copyStyles(rules, prefixRegex, output) {
96
- for (let i = 0; i < rules.length; i++) {
97
- const rule = rules[i];
98
- if (rule instanceof CSSStyleRule) {
99
- if (prefixRegex.test(rule.selectorText)) {
100
- const css = rule.cssText.replace(prefixRegex, `:host($1) `);
101
- output.push(css);
102
- }
103
- } else if (rule instanceof CSSMediaRule) {
104
- output.push(`\n@media ${rule.conditionText} {\n`);
105
- copyStyles(rule.cssRules, prefixRegex, output);
106
- output.push('\n}\n');
107
- } else if (rule instanceof CSSFontFaceRule) {
108
- // not allowed in constructed stylesheets
109
- } else {
110
- output.push(rule.cssText);
111
- }
103
+ for (let i = 0; i < rules.length; i++) {
104
+ const rule = rules[i];
105
+ if (rule instanceof CSSStyleRule) {
106
+ if (prefixRegex.test(rule.selectorText)) {
107
+ const css = rule.cssText.replace(prefixRegex, `:host($1) `);
108
+ output.push(css);
109
+ }
110
+ } else if (rule instanceof CSSMediaRule) {
111
+ output.push(`\n@media ${rule.conditionText} {\n`);
112
+ copyStyles(rule.cssRules, prefixRegex, output);
113
+ output.push('\n}\n');
114
+ } else if (rule instanceof CSSFontFaceRule) {
115
+ // not allowed in constructed stylesheets
116
+ } else {
117
+ output.push(rule.cssText);
112
118
  }
113
- return output;
119
+ }
120
+ return output;
114
121
  }
115
122
 
116
123
  /**
117
124
  * Get a list of selectors, which could match the given component.
118
125
  * This will return the local name of the component, a selector for the id
119
126
  * and all classes assigned.
120
- *
127
+ *
121
128
  * @param {HTMLElement} component the web component
122
129
  * @returns {string[]} list of selectors
123
130
  */
124
131
  function getSelectors(component) {
125
- const prefixes = [component.localName];
126
- if (component.id) {
127
- prefixes.push(`#${component.id}`);
128
- }
129
- component.classList.forEach((cls) => prefixes.push(`.${cls}`));
130
- return prefixes;
132
+ const prefixes = [component.localName];
133
+ if (component.id) {
134
+ prefixes.push(`#${component.id}`);
135
+ }
136
+ component.classList.forEach(cls => prefixes.push(`.${cls}`));
137
+ return prefixes;
131
138
  }
132
139
 
133
140
  /**
134
141
  * Implements support for injecting user-defined styles into a web component's shadow DOM.
135
- * Styles will be copied from the global component theme CSS imported by `pb-page`
142
+ * Styles will be copied from the global component theme CSS imported by `pb-page`
136
143
  * (see `theme` property on `pb-page`)
137
144
  */
138
- export const themableMixin = (superclass) => class ThemableMixin extends superclass {
139
-
145
+ export const themableMixin = superclass =>
146
+ class ThemableMixin extends superclass {
140
147
  connectedCallback() {
141
- super.connectedCallback();
142
- waitOnce('pb-page-ready', (options) => {
143
- const theme = importStyles(this);
144
- if (theme) {
145
- this.shadowRoot.adoptedStyleSheets = [...this.shadowRoot.adoptedStyleSheets, theme];
146
- }
147
- });
148
+ super.connectedCallback();
149
+ waitOnce('pb-page-ready', options => {
150
+ const theme = getThemeCSS();
151
+ if (theme) {
152
+ this.shadowRoot.adoptedStyleSheets = [...this.shadowRoot.adoptedStyleSheets, theme];
153
+ }
154
+ });
148
155
  }
149
- };
156
+ };