@teipublisher/pb-components 2.26.1-next.3 → 3.0.0-next-4.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.
- package/.github/workflows/docker-cypress.yml +54 -0
- package/.github/workflows/main.yml +6 -4
- package/.github/workflows/node.js.yml +56 -21
- package/.github/workflows/release.js.yml +19 -17
- package/.releaserc.json +1 -1
- package/CHANGELOG.md +346 -11
- package/Dockerfile +78 -70
- package/README.md +112 -4
- package/css/components.css +5 -5
- package/css/gridjs/mermaid.min.css +1 -1
- package/css/leaflet/Control.Geocoder.css +1 -126
- package/css/leaflet/images/layers.png +0 -0
- package/css/tify/tify.css +6 -5
- package/css/tom-select/tom-select.bootstrap4.min.css +1 -1
- package/css/tom-select/tom-select.bootstrap5.min.css +1 -1
- package/css/tom-select/tom-select.default.min.css +1 -1
- package/css/tom-select/tom-select.default.min.css.map +1 -0
- package/css/tom-select/tom-select.min.css +1 -1
- package/cypress.config.js +84 -0
- package/dist/api.html +1 -1
- package/dist/css/design-system.css +607 -0
- package/dist/demo/bundle-test.html +4 -3
- package/dist/demo/components.css +46 -1
- package/dist/demo/design-system.html +710 -0
- package/dist/demo/dts-client.html +2 -2
- package/dist/demo/pb-autocomplete.html +23 -11
- package/dist/demo/pb-autocomplete2.html +66 -55
- package/dist/demo/pb-autocomplete3.html +17 -8
- package/dist/demo/pb-blacklab-highlight.html +28 -11
- package/dist/demo/pb-blacklab-results.html +3 -2
- package/dist/demo/pb-browse-docs.html +24 -24
- package/dist/demo/pb-browse-docs2.html +3 -3
- package/dist/demo/pb-clipboard.html +32 -28
- package/dist/demo/pb-code-editor.html +6 -6
- package/dist/demo/pb-code-highlight.html +63 -63
- package/dist/demo/pb-codepen.html +1 -1
- package/dist/demo/pb-collapse.html +1 -1
- package/dist/demo/pb-collapse2.html +2 -2
- package/dist/demo/pb-combo-box.html +135 -130
- package/dist/demo/pb-custom-form.html +64 -55
- package/dist/demo/pb-dialog.html +12 -6
- package/dist/demo/pb-document.html +1 -1
- package/dist/demo/pb-download.html +68 -59
- package/dist/demo/pb-drawer.html +67 -46
- package/dist/demo/pb-drawer2.html +65 -58
- package/dist/demo/pb-edit-app.html +2 -2
- package/dist/demo/pb-edit-xml.html +1 -1
- package/dist/demo/pb-facsimile-2.html +26 -11
- package/dist/demo/pb-facsimile-3.html +25 -10
- package/dist/demo/pb-facsimile-dedup-test-2.html +48 -0
- package/dist/demo/pb-facsimile-dedup-test.html +48 -0
- package/dist/demo/pb-facsimile.html +4 -4
- package/dist/demo/pb-formula.html +1 -1
- package/dist/demo/pb-grid.html +22 -8
- package/dist/demo/pb-highlight.html +2 -2
- package/dist/demo/pb-i18n-simple.html +1 -0
- package/dist/demo/pb-i18n.html +15 -5
- package/dist/demo/pb-image-strip-standalone.html +2 -2
- package/dist/demo/pb-image-strip-view.html +2 -2
- package/dist/demo/pb-leaflet-map.html +3 -3
- package/dist/demo/pb-leaflet-map2.html +2 -2
- package/dist/demo/pb-leaflet-map3.html +3 -3
- package/dist/demo/pb-link.html +1 -1
- package/dist/demo/pb-load.html +2 -6
- package/dist/demo/pb-login.html +1 -3
- package/dist/demo/pb-manage-odds.html +9 -4
- package/dist/demo/pb-markdown.html +1 -1
- package/dist/demo/pb-media-query.html +2 -2
- package/dist/demo/pb-mei.html +2 -2
- package/dist/demo/pb-mei2.html +2 -2
- package/dist/demo/pb-message.html +2 -3
- package/dist/demo/pb-odd-editor.html +54 -52
- package/dist/demo/pb-page-header.html +27 -0
- package/dist/demo/pb-popover.html +1 -1
- package/dist/demo/pb-print-preview.html +2 -2
- package/dist/demo/pb-progress.html +4 -4
- package/dist/demo/pb-repeat.html +32 -36
- package/dist/demo/pb-search.html +16 -5
- package/dist/demo/pb-search2.html +4 -4
- package/dist/demo/pb-search3.html +3 -3
- package/dist/demo/pb-search4.html +3 -3
- package/dist/demo/pb-select-feature.html +4 -4
- package/dist/demo/pb-select-feature2.html +4 -4
- package/dist/demo/pb-select-feature3.html +2 -2
- package/dist/demo/pb-select-i18n.html +58 -53
- package/dist/demo/pb-select-odd.html +1 -1
- package/dist/demo/pb-select.html +190 -75
- package/dist/demo/pb-select2.html +91 -37
- package/dist/demo/pb-select3.html +109 -41
- package/dist/demo/pb-svg.html +1 -1
- package/dist/demo/pb-table-grid.html +26 -15
- package/dist/demo/pb-tabs.html +15 -7
- package/dist/demo/pb-tify.html +7 -7
- package/dist/demo/pb-timeline.html +1 -1
- package/dist/demo/pb-timeline2.html +1 -1
- package/dist/demo/pb-toggle-feature.html +26 -23
- package/dist/demo/pb-toggle-feature2.html +4 -4
- package/dist/demo/pb-toggle-feature3.html +2 -2
- package/dist/demo/pb-toggle-feature4.html +56 -54
- package/dist/demo/pb-version.html +2 -2
- package/dist/demo/pb-view.html +78 -40
- package/dist/demo/pb-view2.html +69 -46
- package/dist/demo/pb-view3.html +53 -48
- package/dist/demo/pb-view4.html +70 -49
- package/dist/demo/pb-zoom.html +2 -2
- package/dist/{es-global-bridge-d8ce175d.js → es-global-bridge-D8ZcUcx_.js} +0 -4
- package/dist/focus-mixin-VCsFap6b.js +768 -0
- package/dist/images/icons.svg +217 -0
- package/dist/jinn-codemirror-DETLdm08.js +1 -0
- package/dist/lib/openseadragon.min.js +80 -0
- package/dist/lib/openseadragon.min.js.map +1 -0
- package/dist/pb-code-editor.js +25 -20
- package/dist/pb-component-docs.js +414 -3225
- package/dist/pb-components-bundle.js +3046 -4402
- package/dist/pb-dialog-tklYGWfc.js +121 -0
- package/dist/pb-edit-app.js +208 -107
- package/dist/pb-elements.json +716 -249
- package/dist/pb-facsimile.js +46 -0
- package/dist/pb-i18n-C0NDma4h.js +1 -0
- package/dist/pb-leaflet-map.js +23 -23
- package/dist/pb-mei.js +152 -134
- package/dist/pb-mixin-DHoWQheB.js +1 -0
- package/dist/pb-odd-editor.js +1671 -1231
- package/dist/pb-tify.js +1 -27
- package/dist/unsafe-html-D5VGo9Oq.js +1 -0
- package/dist/urls-BEONu_g4.js +1 -0
- package/eslint.config.mjs +92 -0
- package/gh-pages.js +5 -3
- package/i18n/common/en.json +6 -0
- package/i18n/common/pl.json +2 -2
- package/images/icons.svg +217 -0
- package/index.html +0 -5
- package/lib/leaflet-src.js.map +1 -0
- package/lib/leaflet.markercluster-src.js.map +1 -0
- package/lib/openseadragon.min.js +6 -6
- package/package.json +56 -81
- package/pb-elements.json +716 -249
- package/rollup.config.mjs +312 -0
- package/src/assets/components.css +5 -5
- package/src/assets/design-system.css +607 -0
- package/src/authority/airtable.js +20 -21
- package/src/authority/anton.js +129 -129
- package/src/authority/custom.js +70 -27
- package/src/authority/geonames.js +38 -32
- package/src/authority/gnd.js +50 -42
- package/src/authority/kbga.js +136 -134
- package/src/authority/metagrid.js +44 -46
- package/src/authority/reconciliation.js +66 -68
- package/src/authority/registry.js +4 -4
- package/src/docs/demo-utils.js +91 -0
- package/src/docs/pb-component-docs.js +287 -147
- package/src/docs/pb-component-view.js +380 -273
- package/src/docs/pb-components-list.js +115 -51
- package/src/docs/pb-demo-snippet.js +199 -174
- package/src/dts-client.js +306 -303
- package/src/dts-select-endpoint.js +125 -85
- package/src/parse-date-service.js +184 -135
- package/src/pb-ajax.js +175 -173
- package/src/pb-authority-lookup.js +198 -158
- package/src/pb-autocomplete.js +731 -313
- package/src/pb-blacklab-highlight.js +266 -260
- package/src/pb-blacklab-results.js +230 -225
- package/src/pb-browse-docs.js +601 -484
- package/src/pb-browse.js +68 -65
- package/src/pb-clipboard.js +97 -76
- package/src/pb-code-editor.js +111 -103
- package/src/pb-code-highlight.js +234 -204
- package/src/pb-codepen.js +81 -73
- package/src/pb-collapse.js +265 -152
- package/src/pb-combo-box.js +191 -191
- package/src/pb-components-bundle.js +1 -7
- package/src/pb-components.js +2 -6
- package/src/pb-custom-form.js +230 -141
- package/src/pb-dialog.js +99 -63
- package/src/pb-document.js +118 -91
- package/src/pb-download.js +214 -198
- package/src/pb-drawer.js +146 -149
- package/src/pb-edit-app.js +471 -240
- package/src/pb-edit-xml.js +101 -98
- package/src/pb-events.js +126 -107
- package/src/pb-facs-link.js +130 -101
- package/src/pb-facsimile.js +494 -410
- package/src/pb-fetch.js +389 -0
- package/src/pb-formula.js +152 -154
- package/src/pb-geolocation.js +130 -132
- package/src/pb-grid-action.js +59 -56
- package/src/pb-grid.js +388 -228
- package/src/pb-highlight.js +142 -142
- package/src/pb-hotkeys.js +40 -42
- package/src/pb-i18n.js +115 -127
- package/src/pb-icon-button.js +108 -0
- package/src/pb-icon.js +283 -0
- package/src/pb-image-strip.js +85 -79
- package/src/pb-lang.js +142 -57
- package/src/pb-leaflet-map.js +551 -483
- package/src/pb-link.js +132 -126
- package/src/pb-load.js +495 -428
- package/src/pb-login.js +303 -248
- package/src/pb-manage-odds.js +384 -338
- package/src/pb-map-icon.js +90 -90
- package/src/pb-map-layer.js +86 -86
- package/src/pb-markdown.js +107 -110
- package/src/pb-media-query.js +75 -73
- package/src/pb-mei.js +523 -303
- package/src/pb-message.js +144 -98
- package/src/pb-mixin.js +268 -265
- package/src/pb-navigation.js +83 -96
- package/src/pb-observable.js +39 -39
- package/src/pb-odd-editor.js +1209 -948
- package/src/pb-odd-elementspec-editor.js +375 -310
- package/src/pb-odd-model-editor.js +1189 -941
- package/src/pb-odd-parameter-editor.js +269 -170
- package/src/pb-odd-rendition-editor.js +184 -131
- package/src/pb-page.js +451 -422
- package/src/pb-paginate.js +260 -178
- package/src/pb-panel.js +217 -183
- package/src/pb-popover-themes.js +16 -9
- package/src/pb-popover.js +297 -288
- package/src/pb-print-preview.js +128 -128
- package/src/pb-progress.js +52 -52
- package/src/pb-repeat.js +141 -108
- package/src/pb-restricted.js +85 -78
- package/src/pb-search.js +258 -230
- package/src/pb-select-feature.js +210 -126
- package/src/pb-select-odd.js +184 -118
- package/src/pb-select-template.js +113 -78
- package/src/pb-select.js +330 -229
- package/src/pb-split-list.js +181 -176
- package/src/pb-svg.js +81 -80
- package/src/pb-table-column.js +55 -55
- package/src/pb-table-grid.js +334 -205
- package/src/pb-tabs.js +238 -61
- package/src/pb-tify.js +3331 -126
- package/src/pb-timeline.js +394 -255
- package/src/pb-toggle-feature.js +196 -188
- package/src/pb-upload.js +201 -176
- package/src/pb-version.js +22 -34
- package/src/pb-view-annotate.js +138 -102
- package/src/pb-view.js +1722 -1272
- package/src/pb-zoom.js +144 -46
- package/src/search-result-service.js +256 -223
- package/src/seed-element.js +14 -22
- package/src/settings.js +4 -4
- package/src/theming.js +98 -91
- package/src/urls.js +403 -289
- package/src/utils.js +53 -51
- package/vite.config.js +86 -0
- package/css/pb-styles.css +0 -51
- package/dist/iron-form-3b8dcaa7.js +0 -210
- package/dist/jinn-codemirror-da0e2d1f.js +0 -1
- package/dist/paper-checkbox-515a5284.js +0 -1597
- package/dist/paper-icon-button-b1d31571.js +0 -398
- package/dist/paper-listbox-a3b7175c.js +0 -1265
- package/dist/pb-i18n-0611135a.js +0 -1
- package/dist/pb-mixin-b1caa22e.js +0 -158
- package/dist/polymer-hack.js +0 -1
- package/dist/vaadin-element-mixin-fe4a4883.js +0 -527
- package/lib/Control.Geocoder.min.js +0 -2
- package/lib/Control.Geocoder.min.js.map +0 -1
- package/src/assets/pb-styles.css +0 -51
- package/src/pb-light-dom.js +0 -41
- package/src/polymer-hack.js +0 -6
package/src/pb-popover.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { LitElement, html, css } from 'lit
|
|
1
|
+
import { LitElement, html, css } from 'lit';
|
|
2
2
|
import tippy from 'tippy.js';
|
|
3
3
|
import { pbMixin } from './pb-mixin.js';
|
|
4
|
-
import { getCSSProperty } from
|
|
4
|
+
import { getCSSProperty } from './utils.js';
|
|
5
5
|
import * as themes from './pb-popover-themes.js';
|
|
6
6
|
|
|
7
7
|
function _injectStylesheet(root, name, cssCode) {
|
|
8
8
|
const style = root.querySelector(`#pb-popover-${name}`);
|
|
9
9
|
if (!style) {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const container = root.nodeType === Node.DOCUMENT_NODE ? document.head : root;
|
|
11
|
+
console.log('Loading tippy styles for theme %s into %o', name, container);
|
|
12
12
|
const elem = document.createElement('style');
|
|
13
13
|
elem.type = 'text/css';
|
|
14
14
|
elem.id = `pb-popover-${name}`;
|
|
@@ -18,28 +18,28 @@ function _injectStylesheet(root, name, cssCode) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export function loadTippyStyles(root, theme) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
21
|
+
_injectStylesheet(root, 'base', themes.base);
|
|
22
|
+
if (theme && theme !== 'none') {
|
|
23
|
+
const name = themes.camelize(theme);
|
|
24
|
+
const themeCSS = themes[name];
|
|
25
|
+
if (themeCSS) {
|
|
26
|
+
_injectStylesheet(root, name, themeCSS);
|
|
28
27
|
}
|
|
28
|
+
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
* Show a popover. It may either
|
|
33
|
-
*
|
|
32
|
+
* Show a popover. It may either
|
|
33
|
+
*
|
|
34
34
|
* 1. be attached to another element on the page which serves as a trigger. For this the
|
|
35
|
-
* `for` property must be specified and should contain the ID of the trigger element.
|
|
35
|
+
* `for` property must be specified and should contain the ID of the trigger element.
|
|
36
36
|
* The whole content of the `pb-popover` element will be shown in the popup.
|
|
37
|
-
*
|
|
37
|
+
*
|
|
38
38
|
* 2. if no `for` property is specified, the `pb-popover` acts itself as the trigger. The trigger
|
|
39
39
|
* text is either taken from a slot named `default` - or the default slot (i.e. the content of the element).
|
|
40
40
|
* The content to show in the popup should be supplied in a slot named `alternate`. It is recommended to use an
|
|
41
41
|
* HTML `template` to specify the alternate, so it is ignored by the browser:
|
|
42
|
-
*
|
|
42
|
+
*
|
|
43
43
|
* ```html
|
|
44
44
|
* <pb-popover theme="material">
|
|
45
45
|
* <span slot="default">ipsum dolor sit amet</span>
|
|
@@ -49,21 +49,21 @@ export function loadTippyStyles(root, theme) {
|
|
|
49
49
|
* </template>
|
|
50
50
|
* </pb-popover>
|
|
51
51
|
* ```
|
|
52
|
-
*
|
|
52
|
+
*
|
|
53
53
|
* If you would like popovers to contain nested popovers, choose approach 1 above and use `for`.
|
|
54
|
-
*
|
|
54
|
+
*
|
|
55
55
|
* If property `persistent` is true, the popover will be shown
|
|
56
56
|
* on click. Otherwise display a tooltip on mouseover.
|
|
57
|
-
*
|
|
57
|
+
*
|
|
58
58
|
* `pb-popover` uses the tippy.js library for the popup.
|
|
59
|
-
*
|
|
59
|
+
*
|
|
60
60
|
* ## Styling
|
|
61
|
-
*
|
|
61
|
+
*
|
|
62
62
|
* When showing the popup, the popup content will either be added to the parent shadow DOM - if the `pb-popover`
|
|
63
63
|
* is located inside the shadow DOM of another element like `pb-view`; or the document body. This has an
|
|
64
64
|
* effect on where CSS styles can be defined: within a `pb-view`, only the styles specified inside the
|
|
65
65
|
* CSS attached to the ODD are applied.
|
|
66
|
-
*
|
|
66
|
+
*
|
|
67
67
|
* @prop {String} for - The id of a trigger element (e.g. a link) to which the popover will
|
|
68
68
|
* be attached. If not set, the trigger is the pb-popover itself.
|
|
69
69
|
* @prop {"material" | "light" | "translucent" | "light-border"} theme - The tippy theme to use.
|
|
@@ -81,12 +81,12 @@ export function loadTippyStyles(root, theme) {
|
|
|
81
81
|
* be loaded after the popover is displayed. The downloaded HTML content will replace the text set via the alternate slot.
|
|
82
82
|
* @prop {Boolean} stopPropagation - If you have nested pb-popover, set this property to
|
|
83
83
|
* only show the innermost popover when triggered
|
|
84
|
-
*
|
|
84
|
+
*
|
|
85
85
|
* @slot default - the content to show for the trigger. If not specified, this will fall back to the unnamed slot.
|
|
86
86
|
* @slot alternate - the content to show in the popup
|
|
87
|
-
*
|
|
87
|
+
*
|
|
88
88
|
* @csspart trigger - the inline element used as trigger
|
|
89
|
-
*
|
|
89
|
+
*
|
|
90
90
|
* @cssprop [--pb-popover-theme=none] - popup theme to use. One of 'material', 'light', 'translucent' or 'light-border'
|
|
91
91
|
* @cssprop [--pb-popover-link-decoration=inherit] - text decoration for the trigger
|
|
92
92
|
* @cssprop [--pb-popover-max-height=calc(100vh - 60px)] - limit the maximum height of the popup
|
|
@@ -100,300 +100,309 @@ export function loadTippyStyles(root, theme) {
|
|
|
100
100
|
* @cssprop --pb-popover-persistent - switch to persistent behaviour, see property `persistent`
|
|
101
101
|
*/
|
|
102
102
|
export class PbPopover extends pbMixin(LitElement) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
103
|
+
static get properties() {
|
|
104
|
+
return {
|
|
105
|
+
...super.properties,
|
|
106
|
+
for: {
|
|
107
|
+
type: String,
|
|
108
|
+
},
|
|
109
|
+
theme: {
|
|
110
|
+
type: String,
|
|
111
|
+
},
|
|
112
|
+
placement: {
|
|
113
|
+
type: String,
|
|
114
|
+
},
|
|
115
|
+
fallbackPlacement: {
|
|
116
|
+
type: String,
|
|
117
|
+
attribute: 'fallback-placement',
|
|
118
|
+
},
|
|
119
|
+
persistent: {
|
|
120
|
+
type: Boolean,
|
|
121
|
+
},
|
|
122
|
+
trigger: {
|
|
123
|
+
type: String,
|
|
124
|
+
},
|
|
125
|
+
touch: {
|
|
126
|
+
type: String,
|
|
127
|
+
},
|
|
128
|
+
popupClass: {
|
|
129
|
+
type: String,
|
|
130
|
+
attribute: 'popup-class',
|
|
131
|
+
},
|
|
132
|
+
remote: {
|
|
133
|
+
type: String,
|
|
134
|
+
},
|
|
135
|
+
stopPropagation: {
|
|
136
|
+
type: Boolean,
|
|
137
|
+
attribute: 'stop-propagation',
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
142
|
+
constructor() {
|
|
143
|
+
super();
|
|
144
|
+
this.persistent = false;
|
|
145
|
+
this.trigger = null;
|
|
146
|
+
this.for = null;
|
|
147
|
+
this.theme = null;
|
|
148
|
+
this.placement = null;
|
|
149
|
+
this.touch = null;
|
|
150
|
+
this.fallbackPlacement = null;
|
|
151
|
+
this.popupClass = null;
|
|
152
|
+
this.stopPropagation = false;
|
|
153
|
+
this._tippy = null;
|
|
154
|
+
this._content = null;
|
|
155
|
+
}
|
|
156
156
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
return html`<span id="link" part="trigger" class="${this.persistent ? 'persistent' : ''}"><slot name="default"><slot></slot></slot></span><span class="hidden"><slot name="alternate"></slot></span>`;
|
|
157
|
+
render() {
|
|
158
|
+
if (this.for) {
|
|
159
|
+
return html`<div class="hidden"><slot></slot></div>`;
|
|
162
160
|
}
|
|
161
|
+
return html`<span id="link" part="trigger" class="${this.persistent ? 'persistent' : ''}"
|
|
162
|
+
><slot name="default"><slot></slot></slot></span
|
|
163
|
+
><span class="hidden"><slot name="alternate"></slot></span>`;
|
|
164
|
+
}
|
|
163
165
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
if (this._observer) {
|
|
170
|
-
this._observer.disconnect();
|
|
171
|
-
}
|
|
166
|
+
disconnectedCallback() {
|
|
167
|
+
super.disconnectedCallback();
|
|
168
|
+
if (this._tippy) {
|
|
169
|
+
this._tippy.destroy();
|
|
172
170
|
}
|
|
171
|
+
if (this._observer) {
|
|
172
|
+
this._observer.disconnect();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
173
175
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
if (!this.persistent) {
|
|
185
|
-
this.persistent = getCSSProperty(this, '--pb-popover-persistent', false);
|
|
186
|
-
}
|
|
187
|
-
if (!this.trigger) {
|
|
188
|
-
this.trigger = getCSSProperty(this, '--pb-popover-trigger', null);
|
|
189
|
-
}
|
|
190
|
-
if (!this.touch) {
|
|
191
|
-
const prop = getCSSProperty(this, '--pb-popover-touch', 'hold');
|
|
192
|
-
this.touch = prop === "true" ? true : prop;
|
|
193
|
-
}
|
|
176
|
+
_checkCSSProperties() {
|
|
177
|
+
if (!this.theme && this.theme !== 'none') {
|
|
178
|
+
this.theme = getCSSProperty(this, '--pb-popover-theme', 'none');
|
|
179
|
+
}
|
|
180
|
+
if (!this.placement) {
|
|
181
|
+
this.placement = getCSSProperty(this, '--pb-popover-placement', 'auto');
|
|
182
|
+
}
|
|
183
|
+
if (!this.fallbackPlacement) {
|
|
184
|
+
this.fallbackPlacement = getCSSProperty(this, '--pb-popover-fallback-placement', null);
|
|
194
185
|
}
|
|
186
|
+
if (!this.persistent) {
|
|
187
|
+
this.persistent = getCSSProperty(this, '--pb-popover-persistent', false);
|
|
188
|
+
}
|
|
189
|
+
if (!this.trigger) {
|
|
190
|
+
this.trigger = getCSSProperty(this, '--pb-popover-trigger', null);
|
|
191
|
+
}
|
|
192
|
+
if (!this.touch) {
|
|
193
|
+
const prop = getCSSProperty(this, '--pb-popover-touch', 'hold');
|
|
194
|
+
this.touch = prop === 'true' ? true : prop;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
195
197
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
+
_injectStyles() {
|
|
199
|
+
this._checkCSSProperties();
|
|
198
200
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
+
loadTippyStyles(this.getRootNode(), this.theme);
|
|
202
|
+
}
|
|
201
203
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
return null;
|
|
204
|
+
_getContent() {
|
|
205
|
+
if (this._content) {
|
|
206
|
+
return this._content;
|
|
207
|
+
}
|
|
208
|
+
const slot = this._getSlot();
|
|
209
|
+
if (slot) {
|
|
210
|
+
const content = document.createElement('div');
|
|
211
|
+
slot.assignedNodes().forEach(node => {
|
|
212
|
+
content.appendChild(node.content ? node.content.cloneNode(true) : node.cloneNode(true));
|
|
213
|
+
});
|
|
214
|
+
this._content = content;
|
|
215
|
+
return content;
|
|
216
216
|
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
217
219
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
return this.shadowRoot.querySelector('[name=alternate]');
|
|
220
|
+
_getSlot() {
|
|
221
|
+
if (this.for) {
|
|
222
|
+
return this.shadowRoot.querySelector('slot');
|
|
223
223
|
}
|
|
224
|
+
return this.shadowRoot.querySelector('[name=alternate]');
|
|
225
|
+
}
|
|
224
226
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
227
|
+
/**
|
|
228
|
+
* Listen for changes of the current element or its alternate slot
|
|
229
|
+
* and update popover content accordingly.
|
|
230
|
+
*/
|
|
231
|
+
_registerMutationObserver() {
|
|
232
|
+
const slot = this._getSlot();
|
|
233
|
+
this._observer = new MutationObserver(() => {
|
|
234
|
+
this.alternate = this._getContent();
|
|
235
|
+
console.log('alternate changed');
|
|
236
|
+
this.emitTo('pb-popover-changed', this.alternate);
|
|
237
|
+
});
|
|
238
|
+
this._observer.observe(this, { subtree: true, childList: true, characterData: true });
|
|
239
|
+
if (slot) {
|
|
240
|
+
slot.assignedNodes().forEach(node => {
|
|
241
|
+
this._observer.observe(node.content ? node.content : node, {
|
|
242
|
+
subtree: true,
|
|
243
|
+
childList: true,
|
|
244
|
+
characterData: true,
|
|
235
245
|
});
|
|
236
|
-
|
|
237
|
-
if (slot) {
|
|
238
|
-
slot.assignedNodes().forEach((node) => {
|
|
239
|
-
this._observer.observe(node.content ? node.content : node, {subtree: true, childList: true, characterData: true})
|
|
240
|
-
});
|
|
241
|
-
}
|
|
246
|
+
});
|
|
242
247
|
}
|
|
248
|
+
}
|
|
243
249
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
/**
|
|
251
|
+
* Returns the root element of the alternate content currently shown in the popover.
|
|
252
|
+
* This will be initialized from either the default slot or the slot with name 'alternate' (if present).
|
|
253
|
+
* The returned element is always a `div` and can be modified.
|
|
254
|
+
*/
|
|
255
|
+
get alternate() {
|
|
256
|
+
return this._getContent();
|
|
257
|
+
}
|
|
252
258
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
259
|
+
/**
|
|
260
|
+
* Set the element to be shown in the popover. Use this to set popover
|
|
261
|
+
* content dynamically. Alternatively you can also modify the DOM of the slots
|
|
262
|
+
* directly and the changes should be picked up by the component.
|
|
263
|
+
*/
|
|
264
|
+
set alternate(content) {
|
|
265
|
+
this._content = content;
|
|
266
|
+
if (this._tippy) {
|
|
267
|
+
this._tippy.setContent(this._content);
|
|
263
268
|
}
|
|
269
|
+
}
|
|
264
270
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
}
|
|
277
|
-
}
|
|
271
|
+
/**
|
|
272
|
+
* Overwrite to enable/disable tippy instance
|
|
273
|
+
*/
|
|
274
|
+
command(command, state) {
|
|
275
|
+
if (command === 'disable') {
|
|
276
|
+
this.disabled = state;
|
|
277
|
+
if (this._tippy) {
|
|
278
|
+
if (state) {
|
|
279
|
+
this._tippy.disable();
|
|
280
|
+
} else {
|
|
281
|
+
this._tippy.enable();
|
|
278
282
|
}
|
|
283
|
+
}
|
|
279
284
|
}
|
|
285
|
+
}
|
|
280
286
|
|
|
281
|
-
|
|
282
|
-
|
|
287
|
+
firstUpdated() {
|
|
288
|
+
super.firstUpdated();
|
|
283
289
|
|
|
284
|
-
|
|
290
|
+
this._injectStyles();
|
|
285
291
|
|
|
286
|
-
|
|
292
|
+
this._registerMutationObserver();
|
|
287
293
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
294
|
+
if (!this.trigger) {
|
|
295
|
+
this.trigger = this.persistent ? 'click' : 'mouseenter';
|
|
296
|
+
}
|
|
291
297
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
298
|
+
const root = this.getRootNode();
|
|
299
|
+
let target;
|
|
300
|
+
if (this.for) {
|
|
301
|
+
target = root.getElementById(this.for);
|
|
302
|
+
if (!target) {
|
|
303
|
+
console.error('<pb-popover> target element %s not found', this.for);
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
target = this.shadowRoot.getElementById('link');
|
|
307
|
+
}
|
|
308
|
+
if (target) {
|
|
309
|
+
const options = {
|
|
310
|
+
allowHTML: true,
|
|
311
|
+
appendTo: root.nodeType === Node.DOCUMENT_NODE ? document.body : root,
|
|
312
|
+
placement: this.placement,
|
|
313
|
+
interactive: true,
|
|
314
|
+
ignoreAttributes: true,
|
|
315
|
+
boundary: 'viewport',
|
|
316
|
+
maxWidth: 'none',
|
|
317
|
+
touch: this.touch,
|
|
318
|
+
hideOnClick: false,
|
|
319
|
+
trigger: this.trigger,
|
|
320
|
+
};
|
|
321
|
+
if (this.stopPropagation) {
|
|
322
|
+
options.onTrigger = (instance, ev) => {
|
|
323
|
+
ev.stopPropagation();
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
if (this.persistent) {
|
|
327
|
+
options.onClickOutside = (instance, ev) => {
|
|
328
|
+
instance.hideWithInteractivity(ev);
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
if (this.theme && this.theme !== 'none') {
|
|
332
|
+
options.theme = this.theme;
|
|
333
|
+
}
|
|
334
|
+
if (this.fallbackPlacement) {
|
|
335
|
+
const placements = this.fallbackPlacement.split(' ');
|
|
336
|
+
options.popperOptions = {
|
|
337
|
+
modifiers: [
|
|
338
|
+
{
|
|
339
|
+
name: 'flip',
|
|
340
|
+
options: {
|
|
341
|
+
fallbackPlacements: placements,
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
],
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
if (this.popupClass) {
|
|
348
|
+
options.onCreate = instance => {
|
|
349
|
+
instance.popper.classList.add(this.popupClass);
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
options.onShow = instance => {
|
|
353
|
+
if (this.remote) {
|
|
354
|
+
this._loadRemoteContent();
|
|
299
355
|
} else {
|
|
300
|
-
|
|
356
|
+
instance.setContent(this._getContent());
|
|
301
357
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
allowHTML: true,
|
|
305
|
-
appendTo: root.nodeType === Node.DOCUMENT_NODE ? document.body : root,
|
|
306
|
-
placement: this.placement,
|
|
307
|
-
interactive: true,
|
|
308
|
-
ignoreAttributes: true,
|
|
309
|
-
boundary: 'viewport',
|
|
310
|
-
maxWidth: 'none',
|
|
311
|
-
touch: this.touch,
|
|
312
|
-
hideOnClick: false,
|
|
313
|
-
trigger: this.trigger
|
|
314
|
-
};
|
|
315
|
-
if (this.stopPropagation) {
|
|
316
|
-
options.onTrigger = (instance, ev) => {
|
|
317
|
-
ev.stopPropagation();
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
if (this.persistent) {
|
|
321
|
-
options.onClickOutside = (instance, ev) => {
|
|
322
|
-
instance.hideWithInteractivity(ev);
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
if (this.theme && this.theme !== 'none') {
|
|
326
|
-
options.theme = this.theme;
|
|
327
|
-
}
|
|
328
|
-
if (this.fallbackPlacement) {
|
|
329
|
-
const placements = this.fallbackPlacement.split(' ');
|
|
330
|
-
options.popperOptions = {
|
|
331
|
-
modifiers: [
|
|
332
|
-
{
|
|
333
|
-
name: 'flip',
|
|
334
|
-
options: {
|
|
335
|
-
fallbackPlacements: placements
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
]
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
if (this.popupClass) {
|
|
342
|
-
options.onCreate = (instance) => {
|
|
343
|
-
instance.popper.classList.add(this.popupClass);
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
options.onShow = (instance) => {
|
|
347
|
-
if (this.remote) {
|
|
348
|
-
this._loadRemoteContent();
|
|
349
|
-
} else {
|
|
350
|
-
instance.setContent(this._getContent());
|
|
351
|
-
}
|
|
352
|
-
this.emitTo('pb-popover-show', { source: this, popup: instance });
|
|
353
|
-
};
|
|
358
|
+
this.emitTo('pb-popover-show', { source: this, popup: instance });
|
|
359
|
+
};
|
|
354
360
|
|
|
355
|
-
|
|
356
|
-
}
|
|
361
|
+
this._tippy = tippy(target, options);
|
|
357
362
|
}
|
|
363
|
+
}
|
|
358
364
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
365
|
+
_loadRemoteContent() {
|
|
366
|
+
const url = this.toAbsoluteURL(this.remote);
|
|
367
|
+
fetch(url, {
|
|
368
|
+
method: 'GET',
|
|
369
|
+
mode: 'cors',
|
|
370
|
+
credentials: 'same-origin',
|
|
371
|
+
})
|
|
372
|
+
.then(response => response.text())
|
|
373
|
+
.then(data => {
|
|
374
|
+
this.alternate = data;
|
|
375
|
+
})
|
|
376
|
+
.catch(error => {
|
|
377
|
+
console.error('<pb-popover> Error retrieving remote content: %o', error);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
374
380
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
381
|
+
static get styles() {
|
|
382
|
+
return [
|
|
383
|
+
css`
|
|
384
|
+
:host {
|
|
385
|
+
display: inline;
|
|
386
|
+
}
|
|
387
|
+
.hidden {
|
|
388
|
+
display: none;
|
|
389
|
+
}
|
|
390
|
+
div {
|
|
391
|
+
float: left;
|
|
392
|
+
}
|
|
393
|
+
#link {
|
|
394
|
+
display: inline;
|
|
395
|
+
color: inherit;
|
|
396
|
+
text-decoration: var(
|
|
397
|
+
--pb-popover-link-decoration,
|
|
398
|
+
var(--pb-link-text-decoration, inherit)
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
#link.persistent {
|
|
402
|
+
cursor: pointer;
|
|
403
|
+
}
|
|
404
|
+
`,
|
|
405
|
+
];
|
|
406
|
+
}
|
|
398
407
|
}
|
|
399
|
-
customElements.define('pb-popover', PbPopover);
|
|
408
|
+
customElements.define('pb-popover', PbPopover);
|