@spectrum-web-components/overlay 0.35.0 → 0.35.1-rc.24
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/README.md +237 -150
- package/package.json +49 -22
- package/sp-overlay.d.ts +6 -0
- package/sp-overlay.dev.js +5 -0
- package/{active-overlay.dev.js.map → sp-overlay.dev.js.map} +3 -3
- package/sp-overlay.js +2 -0
- package/{active-overlay.js.map → sp-overlay.js.map} +4 -4
- package/src/AbstractOverlay.d.ts +56 -0
- package/src/AbstractOverlay.dev.js +198 -0
- package/src/AbstractOverlay.dev.js.map +7 -0
- package/src/AbstractOverlay.js +2 -0
- package/src/AbstractOverlay.js.map +7 -0
- package/src/Overlay.d.ts +147 -0
- package/src/Overlay.dev.js +770 -0
- package/src/Overlay.dev.js.map +7 -0
- package/src/Overlay.js +31 -0
- package/src/Overlay.js.map +7 -0
- package/src/OverlayDialog.d.ts +4 -0
- package/src/OverlayDialog.dev.js +135 -0
- package/src/OverlayDialog.dev.js.map +7 -0
- package/src/OverlayDialog.js +2 -0
- package/src/OverlayDialog.js.map +7 -0
- package/src/OverlayNoPopover.d.ts +4 -0
- package/src/OverlayNoPopover.dev.js +110 -0
- package/src/OverlayNoPopover.dev.js.map +7 -0
- package/src/OverlayNoPopover.js +2 -0
- package/src/OverlayNoPopover.js.map +7 -0
- package/src/OverlayPopover.d.ts +4 -0
- package/src/OverlayPopover.dev.js +169 -0
- package/src/OverlayPopover.dev.js.map +7 -0
- package/src/OverlayPopover.js +2 -0
- package/src/OverlayPopover.js.map +7 -0
- package/src/OverlayStack.d.ts +43 -0
- package/src/OverlayStack.dev.js +150 -0
- package/src/OverlayStack.dev.js.map +7 -0
- package/src/OverlayStack.js +2 -0
- package/src/OverlayStack.js.map +7 -0
- package/src/OverlayTrigger.d.ts +25 -41
- package/src/OverlayTrigger.dev.js +132 -289
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +52 -22
- package/src/OverlayTrigger.js.map +3 -3
- package/src/PlacementController.d.ts +38 -0
- package/src/PlacementController.dev.js +199 -0
- package/src/PlacementController.dev.js.map +7 -0
- package/src/PlacementController.js +2 -0
- package/src/PlacementController.js.map +7 -0
- package/src/VirtualTrigger.dev.js +2 -1
- package/src/VirtualTrigger.dev.js.map +2 -2
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +2 -2
- package/src/fullSizePlugin.d.ts +12 -0
- package/src/fullSizePlugin.dev.js +39 -0
- package/src/fullSizePlugin.dev.js.map +7 -0
- package/src/fullSizePlugin.js +2 -0
- package/src/fullSizePlugin.js.map +7 -0
- package/src/index.d.ts +2 -3
- package/src/index.dev.js +2 -3
- package/src/index.dev.js.map +2 -2
- package/src/index.js +1 -1
- package/src/index.js.map +2 -2
- package/src/loader.d.ts +1 -2
- package/src/loader.dev.js +2 -19
- package/src/loader.dev.js.map +2 -2
- package/src/loader.js +1 -1
- package/src/loader.js.map +3 -3
- package/src/overlay-timer.dev.js.map +2 -2
- package/src/overlay-timer.js.map +2 -2
- package/src/overlay-trigger.css.dev.js +1 -1
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +1 -1
- package/src/overlay-types.d.ts +25 -31
- package/src/overlay-types.dev.js +1 -0
- package/src/overlay-types.dev.js.map +3 -3
- package/src/overlay-types.js +1 -1
- package/src/overlay-types.js.map +3 -3
- package/src/overlay.css.dev.js +9 -0
- package/src/overlay.css.dev.js.map +7 -0
- package/src/overlay.css.js +6 -0
- package/src/overlay.css.js.map +7 -0
- package/src/topLayerOverTransforms.d.ts +2 -0
- package/src/topLayerOverTransforms.dev.js +84 -0
- package/src/topLayerOverTransforms.dev.js.map +7 -0
- package/src/topLayerOverTransforms.js +2 -0
- package/src/topLayerOverTransforms.js.map +7 -0
- package/stories/overlay-element.stories.js +243 -0
- package/stories/overlay-element.stories.js.map +7 -0
- package/stories/overlay-story-components.js +9 -8
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +808 -680
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +4 -0
- package/sync/overlay-trigger.dev.js +1 -4
- package/sync/overlay-trigger.dev.js.map +2 -2
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +3 -3
- package/test/benchmark/basic-test.js +1 -1
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/index.js +408 -377
- package/test/index.js.map +3 -3
- package/test/overlay-element.test-vrt.js +5 -0
- package/test/overlay-element.test-vrt.js.map +7 -0
- package/test/overlay-element.test.js +681 -0
- package/test/overlay-element.test.js.map +7 -0
- package/test/overlay-lifecycle.test.js +34 -106
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +11 -5
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +34 -34
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +27 -24
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +41 -35
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +147 -81
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-trigger-sync.test.js +1 -1
- package/test/overlay-trigger-sync.test.js.map +2 -2
- package/test/overlay-trigger.test.js +1 -1
- package/test/overlay-trigger.test.js.map +2 -2
- package/test/overlay-update.test.js +4 -4
- package/test/overlay-update.test.js.map +2 -2
- package/test/overlay-v1.test.js +648 -0
- package/test/overlay-v1.test.js.map +7 -0
- package/test/overlay.test.js +383 -268
- package/test/overlay.test.js.map +3 -3
- package/active-overlay.d.ts +0 -6
- package/active-overlay.dev.js +0 -5
- package/active-overlay.js +0 -2
- package/custom-elements.json +0 -1215
- package/src/ActiveOverlay.d.ts +0 -84
- package/src/ActiveOverlay.dev.js +0 -517
- package/src/ActiveOverlay.dev.js.map +0 -7
- package/src/ActiveOverlay.js +0 -16
- package/src/ActiveOverlay.js.map +0 -7
- package/src/active-overlay.css.dev.js +0 -13
- package/src/active-overlay.css.dev.js.map +0 -7
- package/src/active-overlay.css.js +0 -10
- package/src/active-overlay.css.js.map +0 -7
- package/src/overlay-stack.d.ts +0 -50
- package/src/overlay-stack.dev.js +0 -515
- package/src/overlay-stack.dev.js.map +0 -7
- package/src/overlay-stack.js +0 -34
- package/src/overlay-stack.js.map +0 -7
- package/src/overlay-utils.d.ts +0 -3
- package/src/overlay-utils.dev.js +0 -31
- package/src/overlay-utils.dev.js.map +0 -7
- package/src/overlay-utils.js +0 -2
- package/src/overlay-utils.js.map +0 -7
- package/src/overlay.d.ts +0 -59
- package/src/overlay.dev.js +0 -127
- package/src/overlay.dev.js.map +0 -7
- package/src/overlay.js +0 -2
- package/src/overlay.js.map +0 -7
- /package/src/{active-overlay.css.d.ts → overlay.css.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Description
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
An `<sp-overlay>` element is used to decorate content that you would like to present to your visitors as "overlaid" on the rest of the application. This includes dialogs (modal and not), pickers, tooltips, context menus, et al.
|
|
4
4
|
|
|
5
5
|
### Usage
|
|
6
6
|
|
|
@@ -11,190 +11,277 @@ Overlays in Spectrum Web Components are created via the `Overlay` class system,
|
|
|
11
11
|
yarn add @spectrum-web-components/overlay
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
Import the
|
|
14
|
+
Import the side effectful registration of `<sp-overlay>` as follows:
|
|
15
15
|
|
|
16
|
-
```
|
|
17
|
-
import
|
|
16
|
+
```
|
|
17
|
+
import '@spectrum-web-components/overlay/sp-overlay.js';
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
When looking to leverage the `Overlay` base class as a type and/or for extension purposes, do so via:
|
|
21
21
|
|
|
22
|
-
```js
|
|
23
|
-
Overlay.open(
|
|
24
|
-
(owner: HTMLElement), // the element to open the overlay in reference to, "trigger"
|
|
25
|
-
(interaction: TriggerInteractions), // the type of interaction type that opened the overlay
|
|
26
|
-
(overlayElement: HTMLElement), // the element that will be projected into the overlay, "content"
|
|
27
|
-
(options: OverlayOptions) // options to customize the overlay
|
|
28
|
-
);
|
|
29
22
|
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```js
|
|
34
|
-
(async () => {
|
|
35
|
-
const trigger = document.querySelector('#trigger');
|
|
36
|
-
const interaction = 'click';
|
|
37
|
-
const content = document.querySelector('#content');
|
|
38
|
-
const options = {
|
|
39
|
-
offset: 0,
|
|
40
|
-
placement: 'bottom',
|
|
41
|
-
};
|
|
42
|
-
const closeOverlay = await Overlay.open(
|
|
43
|
-
trigger,
|
|
44
|
-
interaction,
|
|
45
|
-
content,
|
|
46
|
-
options
|
|
47
|
-
);
|
|
48
|
-
})();
|
|
23
|
+
import {
|
|
24
|
+
Overlay
|
|
25
|
+
} from '@spectrum-web-components/overlay';
|
|
49
26
|
```
|
|
50
27
|
|
|
51
|
-
##
|
|
28
|
+
## Example
|
|
29
|
+
|
|
30
|
+
By leveraging the `trigger` attribute to pass an ID reference to another element with in the same DOM tree, your overlay will be positioned in relation to this element. When the ID reference is followed by an `@` symbol and interaction type, like `click`, `hover`, or `longpress`, the overlay will bind itself to the referenced element via the DOM events associated with that interaction. For example, the `<sp-button>` below has an id of `trigger`, and the `<sp-overlay>` is provided the `trigger` attribute with the value `trigger@click`. This creates an association between the overlay and the `<sp-button>` that opens the overlay when the button is clicked.
|
|
52
31
|
|
|
53
|
-
|
|
32
|
+
```html
|
|
33
|
+
<sp-button id="trigger">Overlay Trigger</sp-button>
|
|
34
|
+
<sp-overlay trigger="trigger@click">
|
|
35
|
+
<sp-popover>
|
|
36
|
+
<sp-dialog>
|
|
37
|
+
<h2 slot="heading">Clicking opens this popover...</h2>
|
|
38
|
+
<p>But, it really could be anything. Really.</p>
|
|
39
|
+
</sp-dialog>
|
|
40
|
+
</sp-popover>
|
|
41
|
+
</sp-overlay>
|
|
42
|
+
```
|
|
54
43
|
|
|
55
|
-
|
|
44
|
+
### Action bar
|
|
56
45
|
|
|
46
|
+
```html
|
|
47
|
+
<style>
|
|
48
|
+
.overlay-demo-popover sp-action-group {
|
|
49
|
+
padding: var(--spectrum-actiongroup-vertical-spacing-regular);
|
|
50
|
+
}
|
|
51
|
+
#overlay-demo {
|
|
52
|
+
position: static;
|
|
53
|
+
}
|
|
54
|
+
#overlay-demo:not(:defined),
|
|
55
|
+
#overlay-demo *:not(:defined) {
|
|
56
|
+
display: none;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
<sp-popover id="overlay-demo" class="overlay-demo-popover" open>
|
|
60
|
+
<sp-action-group vertical quiet emphasized selects="single">
|
|
61
|
+
<sp-action-button id="trigger-1" hold-affordance>
|
|
62
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
63
|
+
</sp-action-button>
|
|
64
|
+
<sp-action-button id="trigger-2" hold-affordance>
|
|
65
|
+
<sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
|
|
66
|
+
</sp-action-button>
|
|
67
|
+
<sp-action-button id="trigger-3" hold-affordance>
|
|
68
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
69
|
+
</sp-action-button>
|
|
70
|
+
</sp-action-group>
|
|
71
|
+
<sp-overlay trigger="trigger-1@hover">
|
|
72
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
73
|
+
</sp-overlay>
|
|
74
|
+
<sp-overlay
|
|
75
|
+
trigger="trigger-1@longpress"
|
|
76
|
+
type="auto"
|
|
77
|
+
placement="right-start"
|
|
78
|
+
>
|
|
79
|
+
<sp-popover class="overlay-demo-popover" tip>
|
|
80
|
+
<sp-action-group vertical quiet>
|
|
81
|
+
<sp-action-button>
|
|
82
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
83
|
+
</sp-action-button>
|
|
84
|
+
<sp-action-button>
|
|
85
|
+
<sp-icon-polygon-select
|
|
86
|
+
slot="icon"
|
|
87
|
+
></sp-icon-polygon-select>
|
|
88
|
+
</sp-action-button>
|
|
89
|
+
<sp-action-button>
|
|
90
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
91
|
+
</sp-action-button>
|
|
92
|
+
</sp-action-group>
|
|
93
|
+
</sp-popover>
|
|
94
|
+
</sp-overlay>
|
|
95
|
+
<sp-overlay trigger="trigger-2@hover">
|
|
96
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
97
|
+
</sp-overlay>
|
|
98
|
+
<sp-overlay
|
|
99
|
+
trigger="trigger-2@longpress"
|
|
100
|
+
type="auto"
|
|
101
|
+
placement="right-start"
|
|
102
|
+
>
|
|
103
|
+
<sp-popover class="overlay-demo-popover" tip>
|
|
104
|
+
<sp-action-group vertical quiet>
|
|
105
|
+
<sp-action-button>
|
|
106
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
107
|
+
</sp-action-button>
|
|
108
|
+
<sp-action-button>
|
|
109
|
+
<sp-icon-polygon-select
|
|
110
|
+
slot="icon"
|
|
111
|
+
></sp-icon-polygon-select>
|
|
112
|
+
</sp-action-button>
|
|
113
|
+
<sp-action-button>
|
|
114
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
115
|
+
</sp-action-button>
|
|
116
|
+
</sp-action-group>
|
|
117
|
+
</sp-popover>
|
|
118
|
+
</sp-overlay>
|
|
119
|
+
<sp-overlay trigger="trigger-3@hover">
|
|
120
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
121
|
+
</sp-overlay>
|
|
122
|
+
<sp-overlay
|
|
123
|
+
trigger="trigger-3@longpress"
|
|
124
|
+
type="auto"
|
|
125
|
+
placement="right-start"
|
|
126
|
+
>
|
|
127
|
+
<sp-popover class="overlay-demo-popover" tip>
|
|
128
|
+
<sp-action-group vertical quiet>
|
|
129
|
+
<sp-action-button>
|
|
130
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
131
|
+
</sp-action-button>
|
|
132
|
+
<sp-action-button>
|
|
133
|
+
<sp-icon-polygon-select
|
|
134
|
+
slot="icon"
|
|
135
|
+
></sp-icon-polygon-select>
|
|
136
|
+
</sp-action-button>
|
|
137
|
+
<sp-action-button>
|
|
138
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
139
|
+
</sp-action-button>
|
|
140
|
+
</sp-action-group>
|
|
141
|
+
</sp-popover>
|
|
142
|
+
</sp-overlay>
|
|
143
|
+
</sp-popover>
|
|
57
144
|
```
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
145
|
+
|
|
146
|
+
## API
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
<sp-overlay
|
|
150
|
+
?open=${boolean}
|
|
151
|
+
?delayed=${boolean}
|
|
152
|
+
offset=${Number | [Number, Number]}
|
|
153
|
+
placement=${Placement}
|
|
154
|
+
receives-focus=${'true' | 'false' | 'auto' (default)
|
|
155
|
+
trigger=${string | ${string}@${string}}
|
|
156
|
+
.triggerElement=${HTMLElement}
|
|
157
|
+
.triggerInteraction=${'click' | 'longpress' | 'hover'}
|
|
158
|
+
type=${'auto' | 'hint' | 'manual' | 'modal' | 'page'}
|
|
159
|
+
></sp-overlay>
|
|
65
160
|
```
|
|
66
161
|
|
|
67
|
-
|
|
162
|
+
# Events
|
|
68
163
|
|
|
69
|
-
`
|
|
164
|
+
When fully open the `<sp-overlay>` element will dispatch the `sp-opened` event, and when fully closed the `sp-closed` event will be dispatched. "Fully" in this context means that all CSS transitions that have dispatched `transitionrun` events on the direct children of the `<sp-overlay>` element have successfully dispatched their `transitionend` event. Keep in mind the following:
|
|
70
165
|
|
|
71
|
-
`
|
|
166
|
+
- `transition*` events bubble; this means that while transition events on light DOM content of those direct children will be heard, those events will not be taken into account
|
|
167
|
+
- `transition*` events are not composed; this means that transition events on shadow DOM content of the direct children will not propagate to a level in the DOM where they can be heard
|
|
72
168
|
|
|
73
|
-
|
|
169
|
+
This means that in both cases, if the transition is meant to be a part of the opening or closing of the overlay in question you will need to redispatch the `transitionrun` and `transitionend` events from that transition from the closest direct child of the `<sp-overlay>`.
|
|
74
170
|
|
|
75
|
-
|
|
171
|
+
## Styling
|
|
76
172
|
|
|
77
|
-
|
|
173
|
+
`<sp-overlay>` element will use the `<dialog>` element or `popover` attribute to project your content onto the top-layer of the browser, without being moved in the DOM tree. That means that you can style your overlay content with whatever techniques you are already leveraging to style the content that doesn't get overlaid. This means standard CSS selectors, CSS Custom Properties, and CSS Parts applied in your parent context will always apply to your overlaid content.
|
|
78
174
|
|
|
79
|
-
|
|
175
|
+
## Fallback support
|
|
80
176
|
|
|
81
|
-
|
|
82
|
-
type OverlayOptions = {
|
|
83
|
-
delayed?: boolean;
|
|
84
|
-
placement?: Placement;
|
|
85
|
-
offset?: number;
|
|
86
|
-
receivesFocus?: 'auto';
|
|
87
|
-
notImmediatelyClosable?: boolean;
|
|
88
|
-
}
|
|
89
|
-
```
|
|
177
|
+
While the [`<dialog>` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) is widely supported by browsers, the [`popover` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover) is still quite new. When leveraged in browsers that do not yet support the `popover` attribute, there may be additional intervention required to ensure your content is delivered to your visitors as expected.
|
|
90
178
|
|
|
91
|
-
|
|
179
|
+
### Complex layered
|
|
92
180
|
|
|
93
|
-
|
|
181
|
+
When an overlay is placed within a page with complex layering, the content therein can fall behind other content in the `z-index` stack. The following example is somewhat contrived but, imagine a toolbar next to a properties panel. If the toolbar has a lower `z-index` than the properties panel, any overlaid content (tooltips, etc.) within that toolbar will display underneath any content in the properties panel with which it may share pixels.
|
|
94
182
|
|
|
95
|
-
|
|
183
|
+
```html
|
|
184
|
+
<div class="complex-layered-demo">
|
|
185
|
+
<div class="complex-layered-holder">
|
|
186
|
+
<sp-action-button id="complex-layered">Trigger</sp-action-button>
|
|
187
|
+
<sp-overlay trigger="complex-layered@hover" placement="bottom-start">
|
|
188
|
+
<sp-tooltip>
|
|
189
|
+
I can be partially blocked when [popover] is not available
|
|
190
|
+
</sp-tooltip>
|
|
191
|
+
</sp-overlay>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="complex-layered-blocker"></div>
|
|
194
|
+
</div>
|
|
195
|
+
<style>
|
|
196
|
+
.complex-layered-demo {
|
|
197
|
+
position: relative;
|
|
198
|
+
}
|
|
199
|
+
.complex-layered-holder {
|
|
200
|
+
z-index: 1;
|
|
201
|
+
position: relative;
|
|
202
|
+
}
|
|
203
|
+
.complex-layered-blocker {
|
|
204
|
+
position: relative;
|
|
205
|
+
z-index: 10;
|
|
206
|
+
background: white;
|
|
207
|
+
width: 100%;
|
|
208
|
+
height: 40px;
|
|
209
|
+
}
|
|
210
|
+
</style>
|
|
211
|
+
```
|
|
96
212
|
|
|
97
|
-
`
|
|
213
|
+
Properly managed `z-index` values will support working around this issue while browsers work to adopt the `popover` attribute. In this demo, you can achieve the same output by sharing one `z-index` between the various pieces of content, removing `z-index` values altogether, or raising the `.complex-layered-holder` element to a higher `z-index` than the `.complex-layered-blocker` element.
|
|
98
214
|
|
|
99
|
-
|
|
215
|
+
### Contained
|
|
100
216
|
|
|
101
|
-
|
|
217
|
+
[CSS Containment](https://developer.mozilla.org/en-US/docs/Web/CSS/contain) gives a developer direct control over how the internals of one element affect the paint and layout of the internals of other elements on the same page. While leveraging some of its values can offer performance gains, they can interrupt the delivery of your overlaid content.
|
|
102
218
|
|
|
103
|
-
|
|
219
|
+
```html
|
|
220
|
+
<div class="contained-demo">
|
|
221
|
+
<sp-action-button id="contained">Trigger</sp-action-button>
|
|
222
|
+
<sp-overlay trigger="contained@hover" placement="bottom-start">
|
|
223
|
+
<sp-tooltip>
|
|
224
|
+
I can be blocked when [popover] is not available
|
|
225
|
+
</sp-tooltip>
|
|
226
|
+
</sp-overlay>
|
|
227
|
+
</div>
|
|
228
|
+
<style>
|
|
229
|
+
.contained-demo {
|
|
230
|
+
contain: content;
|
|
231
|
+
}
|
|
232
|
+
</style>
|
|
233
|
+
```
|
|
104
234
|
|
|
105
|
-
|
|
235
|
+
You could just _remove_ the `contain` rule. But, if you are not OK with simply removing the `contain` value, you still have options. If you would like to continue to leverage `contain`, you can place your "contained" content separately from your overlaid content, like so:
|
|
106
236
|
|
|
107
237
|
```html
|
|
108
|
-
<
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const closeOverlayPromise = Overlay.open(
|
|
120
|
-
trigger,
|
|
121
|
-
interaction,
|
|
122
|
-
content,
|
|
123
|
-
options
|
|
124
|
-
);
|
|
125
|
-
setTimeout(function () {
|
|
126
|
-
closeOverlayPromise.then(function(close) {
|
|
127
|
-
close();
|
|
128
|
-
content.open = false;
|
|
129
|
-
});
|
|
130
|
-
}, 5000);
|
|
131
|
-
"
|
|
132
|
-
>
|
|
133
|
-
Click me for a 5 second overlay!
|
|
134
|
-
</sp-button>
|
|
135
|
-
<sp-popover>
|
|
136
|
-
<sp-dialog size="medium">
|
|
137
|
-
<h2 slot="heading">Demo</h2>
|
|
138
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
|
139
|
-
tempor incididunt ut labore et dolore magna aliqua. Auctor augue mauris
|
|
140
|
-
augue neque gravida. Libero volutpat sed ornare arcu. Quisque egestas
|
|
141
|
-
diam in arcu cursus euismod quis viverra. Posuere ac ut consequat semper
|
|
142
|
-
viverra nam libero justo laoreet. Enim ut tellus elementum sagittis
|
|
143
|
-
vitae et leo duis ut. Neque laoreet suspendisse interdum consectetur
|
|
144
|
-
libero id faucibus nisl. Diam volutpat commodo sed egestas egestas.
|
|
145
|
-
Dolor magna eget est lorem ipsum dolor. Vitae suscipit tellus mauris a
|
|
146
|
-
diam maecenas sed. Turpis in eu mi bibendum neque egestas congue.
|
|
147
|
-
Rhoncus est pellentesque elit ullamcorper dignissim cras lobortis.
|
|
148
|
-
</sp-dialog>
|
|
149
|
-
</sp-popover>
|
|
238
|
+
<div class="contained-demo">
|
|
239
|
+
<sp-action-button id="contained-working">Trigger</sp-action-button>
|
|
240
|
+
</div>
|
|
241
|
+
<sp-overlay trigger="contained-working@hover" placement="bottom-start">
|
|
242
|
+
<sp-tooltip>I can be blocked when [popover] is not available</sp-tooltip>
|
|
243
|
+
</sp-overlay>
|
|
244
|
+
<style>
|
|
245
|
+
.contained-demo {
|
|
246
|
+
contain: content;
|
|
247
|
+
}
|
|
248
|
+
</style>
|
|
150
249
|
```
|
|
151
250
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
When an overlay is opened from within a styled DOM scope as created by an `<sp-theme>` element, this scope will be resolved and recreated with in the `<active-overlay>` element that is created to host the overlaid content directly in the `<body>`. By default, the generated `<sp-theme>` element will be supplied with settings of the scope from which the overlay is triggered, including any "app" centric CSS Custom Properties that might be applied via `Theme.registerThemeFragment('app', 'app', themeFragment)` therein. In the case that you have set CSS Custom Properties for the scope created by an `<sp-theme>` element via other methods, you can specify that those values should also be applied to overlay content using the `theme` part on the `<active-overlay>` element via the `active-overlay::part(theme) { /* styles */ }` selector.
|
|
251
|
+
`<sp-overlay>` accepts an ID reference via the `trigger` attribute to relate it to interactions and positioning in the DOM. To fulfill this reference the two elements need to be in the same DOM tree. However, `<sp-overlay>` alternatively accepts a `triggerElement` _property_ that opens even more flexibility in addressing this situation.
|
|
155
252
|
|
|
156
|
-
|
|
253
|
+
### Clip pathed
|
|
157
254
|
|
|
158
|
-
|
|
255
|
+
`clip-path` can also restrict how content in an element is surfaced at paint time. When overlaid content should display outside of the `clip-path`, without the `popover` attribute, that content could be _clipped_.
|
|
159
256
|
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
257
|
+
```html
|
|
258
|
+
<div class="clip-pathed-demo">
|
|
259
|
+
<sp-action-button id="clip-pathed">Trigger</sp-action-button>
|
|
260
|
+
<sp-overlay trigger="clip-pathed@hover" placement="bottom-start">
|
|
261
|
+
<sp-tooltip>
|
|
262
|
+
I can be blocked when [popover] is not available
|
|
263
|
+
</sp-tooltip>
|
|
264
|
+
</sp-overlay>
|
|
265
|
+
</div>
|
|
266
|
+
<style>
|
|
267
|
+
.clip-pathed-demo {
|
|
268
|
+
clip-path: inset(0 0);
|
|
269
|
+
}
|
|
270
|
+
</style>
|
|
172
271
|
```
|
|
173
272
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
placement: 'bottom',
|
|
189
|
-
};
|
|
190
|
-
const closeOverlayPromise = Overlay.open(
|
|
191
|
-
trigger,
|
|
192
|
-
interaction,
|
|
193
|
-
outterContent,
|
|
194
|
-
options
|
|
195
|
-
);
|
|
196
|
-
const closeOverlay = function () {
|
|
197
|
-
closeOverlayPromise.then((close) => close());
|
|
198
|
-
innerContentParent.replaceChild(placeholder, innerContent);
|
|
199
|
-
};
|
|
273
|
+
Here, again, working with your content needs (whether or not you want to leverage `clip-path`) or DOM structure (not colocating clipped and non-clipped content) will allow you to avoid this issue:
|
|
274
|
+
|
|
275
|
+
```html
|
|
276
|
+
<div class="clip-pathed-demo">
|
|
277
|
+
<sp-action-button id="clip-pathed-working">Trigger</sp-action-button>
|
|
278
|
+
</div>
|
|
279
|
+
<sp-overlay trigger="clip-pathed-working@hover" placement="bottom-start">
|
|
280
|
+
<sp-tooltip>I can be blocked when [popover] is not available</sp-tooltip>
|
|
281
|
+
</sp-overlay>
|
|
282
|
+
<style>
|
|
283
|
+
.clip-pathed-demo {
|
|
284
|
+
clip-path: inset(0 0);
|
|
285
|
+
}
|
|
286
|
+
</style>
|
|
200
287
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/overlay",
|
|
3
|
-
"version": "0.35.
|
|
3
|
+
"version": "0.35.1-rc.24+e3649e123",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -25,19 +25,46 @@
|
|
|
25
25
|
"default": "./src/index.js"
|
|
26
26
|
},
|
|
27
27
|
"./package.json": "./package.json",
|
|
28
|
-
"./src/
|
|
29
|
-
"development": "./src/
|
|
30
|
-
"default": "./src/
|
|
28
|
+
"./src/AbstractOverlay.js": {
|
|
29
|
+
"development": "./src/AbstractOverlay.dev.js",
|
|
30
|
+
"default": "./src/AbstractOverlay.js"
|
|
31
|
+
},
|
|
32
|
+
"./src/Overlay.js": {
|
|
33
|
+
"development": "./src/Overlay.dev.js",
|
|
34
|
+
"default": "./src/Overlay.js"
|
|
35
|
+
},
|
|
36
|
+
"./src/OverlayDialog.js": {
|
|
37
|
+
"development": "./src/OverlayDialog.dev.js",
|
|
38
|
+
"default": "./src/OverlayDialog.js"
|
|
39
|
+
},
|
|
40
|
+
"./src/OverlayNoPopover.js": {
|
|
41
|
+
"development": "./src/OverlayNoPopover.dev.js",
|
|
42
|
+
"default": "./src/OverlayNoPopover.js"
|
|
43
|
+
},
|
|
44
|
+
"./src/OverlayPopover.js": {
|
|
45
|
+
"development": "./src/OverlayPopover.dev.js",
|
|
46
|
+
"default": "./src/OverlayPopover.js"
|
|
47
|
+
},
|
|
48
|
+
"./src/OverlayStack.js": {
|
|
49
|
+
"development": "./src/OverlayStack.dev.js",
|
|
50
|
+
"default": "./src/OverlayStack.js"
|
|
31
51
|
},
|
|
32
52
|
"./src/OverlayTrigger.js": {
|
|
33
53
|
"development": "./src/OverlayTrigger.dev.js",
|
|
34
54
|
"default": "./src/OverlayTrigger.js"
|
|
35
55
|
},
|
|
56
|
+
"./src/PlacementController.js": {
|
|
57
|
+
"development": "./src/PlacementController.dev.js",
|
|
58
|
+
"default": "./src/PlacementController.js"
|
|
59
|
+
},
|
|
36
60
|
"./src/VirtualTrigger.js": {
|
|
37
61
|
"development": "./src/VirtualTrigger.dev.js",
|
|
38
62
|
"default": "./src/VirtualTrigger.js"
|
|
39
63
|
},
|
|
40
|
-
"./src/
|
|
64
|
+
"./src/fullSizePlugin.js": {
|
|
65
|
+
"development": "./src/fullSizePlugin.dev.js",
|
|
66
|
+
"default": "./src/fullSizePlugin.js"
|
|
67
|
+
},
|
|
41
68
|
"./src/index.js": {
|
|
42
69
|
"development": "./src/index.dev.js",
|
|
43
70
|
"default": "./src/index.js"
|
|
@@ -50,10 +77,6 @@
|
|
|
50
77
|
"development": "./src/overlay-events.dev.js",
|
|
51
78
|
"default": "./src/overlay-events.js"
|
|
52
79
|
},
|
|
53
|
-
"./src/overlay-stack.js": {
|
|
54
|
-
"development": "./src/overlay-stack.dev.js",
|
|
55
|
-
"default": "./src/overlay-stack.js"
|
|
56
|
-
},
|
|
57
80
|
"./src/overlay-timer.js": {
|
|
58
81
|
"development": "./src/overlay-timer.dev.js",
|
|
59
82
|
"default": "./src/overlay-timer.js"
|
|
@@ -63,13 +86,10 @@
|
|
|
63
86
|
"development": "./src/overlay-types.dev.js",
|
|
64
87
|
"default": "./src/overlay-types.js"
|
|
65
88
|
},
|
|
66
|
-
"./src/overlay
|
|
67
|
-
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
"./src/overlay.js": {
|
|
71
|
-
"development": "./src/overlay.dev.js",
|
|
72
|
-
"default": "./src/overlay.js"
|
|
89
|
+
"./src/overlay.css.js": "./src/overlay.css.js",
|
|
90
|
+
"./src/topLayerOverTransforms.js": {
|
|
91
|
+
"development": "./src/topLayerOverTransforms.dev.js",
|
|
92
|
+
"default": "./src/topLayerOverTransforms.js"
|
|
73
93
|
},
|
|
74
94
|
"./active-overlay.js": {
|
|
75
95
|
"development": "./active-overlay.dev.js",
|
|
@@ -82,6 +102,10 @@
|
|
|
82
102
|
"./sync/overlay-trigger.js": {
|
|
83
103
|
"development": "./sync/overlay-trigger.dev.js",
|
|
84
104
|
"default": "./sync/overlay-trigger.js"
|
|
105
|
+
},
|
|
106
|
+
"./sp-overlay.js": {
|
|
107
|
+
"development": "./sp-overlay.dev.js",
|
|
108
|
+
"default": "./sp-overlay.js"
|
|
85
109
|
}
|
|
86
110
|
},
|
|
87
111
|
"scripts": {
|
|
@@ -102,20 +126,23 @@
|
|
|
102
126
|
"lit-html"
|
|
103
127
|
],
|
|
104
128
|
"dependencies": {
|
|
105
|
-
"@floating-ui/dom": "^1.
|
|
106
|
-
"@
|
|
107
|
-
"@spectrum-web-components/
|
|
108
|
-
"@spectrum-web-components/
|
|
109
|
-
"@spectrum-web-components/
|
|
129
|
+
"@floating-ui/dom": "^1.5.1",
|
|
130
|
+
"@floating-ui/utils": "0.1.1",
|
|
131
|
+
"@spectrum-web-components/action-button": "^0.35.1-rc.24+e3649e123",
|
|
132
|
+
"@spectrum-web-components/base": "^0.35.1-rc.24+e3649e123",
|
|
133
|
+
"@spectrum-web-components/reactive-controllers": "^0.35.1-rc.24+e3649e123",
|
|
134
|
+
"@spectrum-web-components/shared": "^0.35.1-rc.24+e3649e123",
|
|
135
|
+
"@spectrum-web-components/theme": "^0.35.1-rc.24+e3649e123"
|
|
110
136
|
},
|
|
111
137
|
"types": "./src/index.d.ts",
|
|
112
138
|
"customElements": "custom-elements.json",
|
|
113
139
|
"sideEffects": [
|
|
114
140
|
"./active-overlay.js",
|
|
115
141
|
"./overlay-trigger.js",
|
|
142
|
+
"./sp-overlay.js",
|
|
116
143
|
"./sync/overlay-trigger.js",
|
|
117
144
|
"./stories/overlay-story-components.js",
|
|
118
145
|
"./**/*.dev.js"
|
|
119
146
|
],
|
|
120
|
-
"gitHead": "
|
|
147
|
+
"gitHead": "e3649e1230ed727048988a452969c38ced5467ac"
|
|
121
148
|
}
|
package/sp-overlay.d.ts
ADDED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
4
|
-
"sourcesContent": ["/*\nCopyright
|
|
5
|
-
"mappings": ";AAWA,SAAS,qBAAqB;AAC9B,SAAS,
|
|
3
|
+
"sources": ["sp-overlay.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\nimport { Overlay } from './src/Overlay.dev.js'\n\ndefineElement('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': Overlay;\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAWA,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AAExB,cAAc,cAAc,OAAO;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/sp-overlay.js
ADDED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
4
|
-
"sourcesContent": ["/*\nCopyright
|
|
5
|
-
"mappings": "aAWA,OAAS,iBAAAA,MAAqB,sDAC9B,OAAS,
|
|
6
|
-
"names": ["defineElement", "
|
|
3
|
+
"sources": ["sp-overlay.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\nimport { Overlay } from './src/Overlay.js';\n\ndefineElement('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': Overlay;\n }\n}\n"],
|
|
5
|
+
"mappings": "aAWA,OAAS,iBAAAA,MAAqB,sDAC9B,OAAS,WAAAC,MAAe,mBAExBD,EAAc,aAAcC,CAAO",
|
|
6
|
+
"names": ["defineElement", "Overlay"]
|
|
7
7
|
}
|