@lion/ui 0.7.5 → 0.7.7
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 +1 -2
- package/components/button/test-suites/LionButton.suite.js +3 -1
- package/components/combobox/src/LionCombobox.js +33 -9
- package/components/combobox/test/lion-combobox.test.js +134 -7
- package/components/dialog/test/lion-dialog.test.js +59 -1
- package/components/input-datepicker/test/lion-input-datepicker.test.js +3 -3
- package/components/input-file/src/FileHandle.js +1 -1
- package/components/input-file/src/LionInputFile.js +1 -3
- package/components/input-file/test/lion-input-file.test.js +11 -14
- package/components/input-stepper/src/LionInputStepper.js +6 -5
- package/components/input-stepper/test/lion-input-stepper-integrations.test.js +20 -0
- package/components/input-stepper/test/lion-input-stepper.test.js +48 -3
- package/components/overlays/src/OverlayController.js +29 -7
- package/components/overlays/src/OverlayMixin.js +5 -1
- package/components/overlays/src/utils/deep-contains.js +134 -3
- package/components/overlays/test/OverlayController.test.js +57 -0
- package/components/overlays/test/utils-tests/deep-contains.test.js +98 -0
- package/components/select-rich/src/LionSelectRich.js +12 -0
- package/components/select-rich/test/lion-select-rich.test.js +26 -0
- package/custom-elements.json +140 -115
- package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
- package/dist-types/components/combobox/src/LionCombobox.d.ts +9 -0
- package/dist-types/components/combobox/src/LionCombobox.d.ts.map +1 -1
- package/dist-types/components/input-file/src/LionInputFile.d.ts.map +1 -1
- package/dist-types/components/input-stepper/src/LionInputStepper.d.ts +4 -1
- package/dist-types/components/input-stepper/src/LionInputStepper.d.ts.map +1 -1
- package/dist-types/components/input-stepper/test/lion-input-stepper-integrations.test.d.ts +2 -0
- package/dist-types/components/input-stepper/test/lion-input-stepper-integrations.test.d.ts.map +1 -0
- package/dist-types/components/input-stepper/test/lion-input-stepper.test.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlayController.d.ts +7 -0
- package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
- package/dist-types/components/overlays/src/utils/deep-contains.d.ts +15 -1
- package/dist-types/components/overlays/src/utils/deep-contains.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/button/use-cases.md +2 -2
- package/docs/components/calendar/use-cases.md +4 -4
- package/docs/components/checkbox-group/api-table.md +49 -55
- package/docs/components/checkbox-group/overview.md +5 -5
- package/docs/components/checkbox-group/use-cases.md +33 -33
- package/docs/components/collapsible/overview.md +1 -1
- package/docs/components/collapsible/use-cases.md +3 -3
- package/docs/components/combobox/api-table.md +84 -89
- package/docs/components/combobox/extensions.md +20 -20
- package/docs/components/combobox/overview.md +1 -1
- package/docs/components/combobox/use-cases.md +6 -6
- package/docs/components/dialog/api-table.md +3 -3
- package/docs/components/dialog/overview.md +2 -2
- package/docs/components/dialog/src/external-dialog.js +32 -0
- package/docs/components/dialog/src/slots-dialog-content.js +1 -1
- package/docs/components/dialog/src/styled-dialog-content.js +1 -1
- package/docs/components/dialog/use-cases.md +49 -3
- package/docs/components/drawer/use-cases.md +3 -3
- package/docs/components/fieldset/api-table.md +45 -51
- package/docs/components/fieldset/overview.md +7 -7
- package/docs/components/fieldset/use-cases.md +15 -15
- package/docs/components/form/overview.md +7 -7
- package/docs/components/form/use-cases.md +4 -4
- package/docs/components/icon/use-cases.md +1 -1
- package/docs/components/input/overview.md +1 -1
- package/docs/components/input/use-cases.md +3 -3
- package/docs/components/input-amount/overview.md +3 -3
- package/docs/components/input-amount/use-cases.md +8 -8
- package/docs/components/input-date/overview.md +3 -3
- package/docs/components/input-date/use-cases.md +8 -8
- package/docs/components/input-datepicker/api-table.md +1 -1
- package/docs/components/input-datepicker/overview.md +5 -5
- package/docs/components/input-datepicker/use-cases.md +5 -5
- package/docs/components/input-email/overview.md +2 -2
- package/docs/components/input-email/use-cases.md +3 -3
- package/docs/components/input-file/overview.md +1 -1
- package/docs/components/input-iban/overview.md +2 -2
- package/docs/components/input-iban/use-cases.md +8 -8
- package/docs/components/input-range/overview.md +2 -2
- package/docs/components/input-stepper/api-table.md +65 -69
- package/docs/components/input-stepper/overview.md +1 -1
- package/docs/components/input-stepper/use-cases.md +21 -0
- package/docs/components/input-tel/overview.md +1 -1
- package/docs/components/input-tel/use-cases.md +9 -9
- package/docs/components/input-tel-dropdown/api-table.md +70 -73
- package/docs/components/input-tel-dropdown/extensions.md +1 -1
- package/docs/components/input-tel-dropdown/overview.md +1 -1
- package/docs/components/input-tel-dropdown/use-cases.md +5 -5
- package/docs/components/listbox/api-table.md +64 -70
- package/docs/components/listbox/overview.md +5 -5
- package/docs/components/listbox/use-cases.md +61 -61
- package/docs/components/pagination/use-cases.md +5 -5
- package/docs/components/radio-group/api-table.md +49 -55
- package/docs/components/radio-group/overview.md +6 -6
- package/docs/components/radio-group/use-cases.md +18 -18
- package/docs/components/select/use-cases.md +2 -2
- package/docs/components/select-rich/api-table.md +79 -85
- package/docs/components/select-rich/overview.md +3 -3
- package/docs/components/select-rich/use-cases.md +33 -33
- package/docs/components/steps/overview.md +4 -4
- package/docs/components/steps/use-cases.md +7 -7
- package/docs/components/tabs/examples.md +1 -1
- package/docs/components/tabs/use-cases.md +1 -1
- package/docs/components/textarea/use-cases.md +3 -3
- package/docs/components/tooltip/api-table.md +3 -3
- package/docs/components/tooltip/use-cases.md +6 -6
- package/docs/fundamentals/index.md +4 -4
- package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/overview.md +3 -3
- package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
- package/docs/fundamentals/rationales/accessibility.md +1 -1
- package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
- package/docs/fundamentals/systems/core/overview.md +1 -1
- package/docs/fundamentals/systems/form/formatting-and-parsing.md +8 -8
- package/docs/fundamentals/systems/form/model-value.md +1 -1
- package/docs/fundamentals/systems/form/overview.md +28 -28
- package/docs/fundamentals/systems/form/use-cases.md +19 -19
- package/docs/fundamentals/systems/form/validate.md +50 -50
- package/docs/fundamentals/systems/localize/api-table.md +10 -17
- package/docs/fundamentals/systems/localize/overview.md +4 -4
- package/docs/fundamentals/systems/localize/use-cases.md +4 -4
- package/docs/fundamentals/systems/overlays/_configuration-positioning.md +4 -4
- package/docs/fundamentals/systems/overlays/api-table.md +34 -90
- package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +9 -9
- package/docs/fundamentals/systems/overlays/configuration.md +55 -29
- package/docs/fundamentals/systems/overlays/overview.md +6 -6
- package/docs/fundamentals/systems/overlays/use-cases.md +30 -30
- package/docs/fundamentals/tools/ajax/use-cases.md +20 -20
- package/docs/fundamentals/tools/helpers/action-logger.md +3 -3
- package/docs/fundamentals/tools/helpers/overview.md +1 -1
- package/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js +2 -2
- package/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js +2 -2
- package/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js +2 -2
- package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
- package/docs/guides/how-to/create-a-custom-field.md +7 -7
- package/docs/guides/how-to/create-a-form.md +4 -4
- package/docs/guides/how-to/extend-a-native-input.md +2 -2
- package/docs/guides/index.md +8 -8
- package/docs/guides/principles/index.md +5 -5
- package/docs/guides/principles/scoped-elements.md +1 -1
- package/docs/guides/principles/styling.md +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { html } from '@mdjs/mdjs-preview';
|
|
5
5
|
import './assets/demo-el-using-overlaymixin.mjs';
|
|
6
6
|
import './assets/applyDemoOverlayStyles.mjs';
|
|
7
|
-
import { withDropdownConfig, withTooltipConfig } from '@lion/ui/overlays.js';
|
|
7
|
+
import { withDropdownConfig, withModalDialogConfig, withTooltipConfig } from '@lion/ui/overlays.js';
|
|
8
8
|
```
|
|
9
9
|
|
|
10
10
|
The `OverlayController` has many configuration options.
|
|
@@ -29,13 +29,13 @@ export const placementLocal = () => {
|
|
|
29
29
|
border: 1px solid black;
|
|
30
30
|
}
|
|
31
31
|
</style>
|
|
32
|
-
<demo-el-using-overlaymixin .config
|
|
32
|
+
<demo-el-using-overlaymixin .config="${placementModeLocalConfig}">
|
|
33
33
|
<button slot="invoker">Click me to open the local overlay!</button>
|
|
34
34
|
<div slot="content" class="demo-overlay">
|
|
35
35
|
Hello! You can close this notification here:
|
|
36
36
|
<button
|
|
37
37
|
class="close-button"
|
|
38
|
-
@click
|
|
38
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
39
39
|
>
|
|
40
40
|
⨯
|
|
41
41
|
</button>
|
|
@@ -51,13 +51,13 @@ export const placementLocal = () => {
|
|
|
51
51
|
export const placementGlobal = () => {
|
|
52
52
|
const placementModeGlobalConfig = { placementMode: 'global' };
|
|
53
53
|
return html`
|
|
54
|
-
<demo-el-using-overlaymixin .config
|
|
54
|
+
<demo-el-using-overlaymixin .config="${placementModeGlobalConfig}">
|
|
55
55
|
<button slot="invoker">Click me to open the global overlay!</button>
|
|
56
56
|
<div slot="content" class="demo-overlay">
|
|
57
57
|
Hello! You can close this notification here:
|
|
58
58
|
<button
|
|
59
59
|
class="close-button"
|
|
60
|
-
@click
|
|
60
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
61
61
|
>
|
|
62
62
|
⨯
|
|
63
63
|
</button>
|
|
@@ -69,7 +69,7 @@ export const placementGlobal = () => {
|
|
|
69
69
|
|
|
70
70
|
## isTooltip (placementMode: 'local')
|
|
71
71
|
|
|
72
|
-
As specified in the [overlay rationale](https://github.com/ing-bank/lion/blob/
|
|
72
|
+
As specified in the [overlay rationale](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/rationale.md) there are only two official types of overlays: dialogs and tooltips. And their main differences are:
|
|
73
73
|
|
|
74
74
|
- Dialogs have a modal option, tooltips don’t
|
|
75
75
|
- Dialogs have interactive content, tooltips don’t
|
|
@@ -82,7 +82,7 @@ export const usingTooltipConfig = () => {
|
|
|
82
82
|
const tooltipConfig = { ...withTooltipConfig() };
|
|
83
83
|
|
|
84
84
|
return html`
|
|
85
|
-
<demo-el-using-overlaymixin id="tooltip" .config
|
|
85
|
+
<demo-el-using-overlaymixin id="tooltip" .config="${tooltipConfig}">
|
|
86
86
|
<button slot="invoker">Hover me to open the tooltip!</button>
|
|
87
87
|
<div slot="content" class="demo-overlay">Hello!</div>
|
|
88
88
|
</demo-el-using-overlaymixin>
|
|
@@ -103,7 +103,7 @@ You use the feature on any type of overlay.
|
|
|
103
103
|
export const trapsKeyboardFocus = () => {
|
|
104
104
|
const trapsKeyboardFocusConfig = { ...withDropdownConfig(), trapsKeyboardFocus: true };
|
|
105
105
|
return html`
|
|
106
|
-
<demo-el-using-overlaymixin .config
|
|
106
|
+
<demo-el-using-overlaymixin .config="${trapsKeyboardFocusConfig}">
|
|
107
107
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
108
108
|
<div slot="content" class="demo-overlay">
|
|
109
109
|
<div><a href="#">A focusable anchor</a></div>
|
|
@@ -111,7 +111,7 @@ export const trapsKeyboardFocus = () => {
|
|
|
111
111
|
Hello! You can close this notification here:
|
|
112
112
|
<button
|
|
113
113
|
class="close-button"
|
|
114
|
-
@click
|
|
114
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
115
115
|
>
|
|
116
116
|
⨯
|
|
117
117
|
</button>
|
|
@@ -129,13 +129,39 @@ Boolean property. Will allow closing the overlay on ESC key when enabled.
|
|
|
129
129
|
export const hidesOnEsc = () => {
|
|
130
130
|
const hidesOnEscConfig = { ...withDropdownConfig(), hidesOnEsc: true };
|
|
131
131
|
return html`
|
|
132
|
-
<demo-el-using-overlaymixin .config
|
|
132
|
+
<demo-el-using-overlaymixin .config="${hidesOnEscConfig}">
|
|
133
133
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
134
134
|
<div slot="content" class="demo-overlay">
|
|
135
135
|
Hello! You can close this notification here:
|
|
136
136
|
<button
|
|
137
137
|
class="close-button"
|
|
138
|
-
@click
|
|
138
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
139
|
+
>
|
|
140
|
+
⨯
|
|
141
|
+
</button>
|
|
142
|
+
</div>
|
|
143
|
+
</demo-el-using-overlaymixin>
|
|
144
|
+
`;
|
|
145
|
+
};
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
And how it works if `hidesOnEsc` is disabled. In most cases `hidesOnOutsideEsc` needs also to be set to `false`.
|
|
149
|
+
|
|
150
|
+
```js preview-story
|
|
151
|
+
export const hidesOnEscFalse = () => {
|
|
152
|
+
const hidesOnEscConfig = {
|
|
153
|
+
...withModalDialogConfig(),
|
|
154
|
+
hidesOnEsc: false,
|
|
155
|
+
hidesOnOutsideEsc: false,
|
|
156
|
+
};
|
|
157
|
+
return html`
|
|
158
|
+
<demo-el-using-overlaymixin .config="${hidesOnEscConfig}">
|
|
159
|
+
<button slot="invoker">Click me to open the overlay!</button>
|
|
160
|
+
<div slot="content" class="demo-overlay">
|
|
161
|
+
Hello! You can close this notification here:
|
|
162
|
+
<button
|
|
163
|
+
class="close-button"
|
|
164
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
139
165
|
>
|
|
140
166
|
⨯
|
|
141
167
|
</button>
|
|
@@ -153,13 +179,13 @@ Boolean property. When enabled allows closing the overlay on ESC key, even when
|
|
|
153
179
|
export const hidesOnOutsideEsc = () => {
|
|
154
180
|
const hidesOnEscConfig = { ...withDropdownConfig(), hidesOnOutsideEsc: true };
|
|
155
181
|
return html`
|
|
156
|
-
<demo-el-using-overlaymixin .config
|
|
182
|
+
<demo-el-using-overlaymixin .config="${hidesOnEscConfig}">
|
|
157
183
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
158
184
|
<div slot="content" class="demo-overlay">
|
|
159
185
|
Hello! You can close this notification here:
|
|
160
186
|
<button
|
|
161
187
|
class="close-button"
|
|
162
|
-
@click
|
|
188
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
163
189
|
>
|
|
164
190
|
⨯
|
|
165
191
|
</button>
|
|
@@ -177,14 +203,14 @@ Boolean property. Will allow closing the overlay by clicking outside the `conten
|
|
|
177
203
|
export const hidesOnOutsideClick = () => {
|
|
178
204
|
const hidesOnOutsideClickConfig = { ...withDropdownConfig(), hidesOnOutsideClick: true };
|
|
179
205
|
return html`
|
|
180
|
-
<demo-el-using-overlaymixin .config
|
|
206
|
+
<demo-el-using-overlaymixin .config="${hidesOnOutsideClickConfig}">
|
|
181
207
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
182
208
|
<div slot="content" class="demo-overlay">
|
|
183
209
|
<label for="myInput">Clicking this label should not trigger close</label>
|
|
184
210
|
<input id="myInput" />
|
|
185
211
|
<button
|
|
186
212
|
class="close-button"
|
|
187
|
-
@click
|
|
213
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
188
214
|
>
|
|
189
215
|
⨯
|
|
190
216
|
</button>
|
|
@@ -207,13 +233,13 @@ export const elementToFocusAfterHide = () => {
|
|
|
207
233
|
|
|
208
234
|
const elementToFocusAfterHideConfig = { ...withDropdownConfig(), elementToFocusAfterHide: btn };
|
|
209
235
|
return html`
|
|
210
|
-
<demo-el-using-overlaymixin .config
|
|
236
|
+
<demo-el-using-overlaymixin .config="${elementToFocusAfterHideConfig}">
|
|
211
237
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
212
238
|
<div slot="content" class="demo-overlay">
|
|
213
239
|
Hello! You can close this notification here:
|
|
214
240
|
<button
|
|
215
241
|
class="close-button"
|
|
216
|
-
@click
|
|
242
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
217
243
|
>
|
|
218
244
|
⨯
|
|
219
245
|
</button>
|
|
@@ -243,13 +269,13 @@ This currently only supports CSS Animations, because it relies on the `animation
|
|
|
243
269
|
export const hasBackdrop = () => {
|
|
244
270
|
const hasBackdropConfig = { ...withDropdownConfig(), hasBackdrop: true };
|
|
245
271
|
return html`
|
|
246
|
-
<demo-el-using-overlaymixin .config
|
|
272
|
+
<demo-el-using-overlaymixin .config="${hasBackdropConfig}">
|
|
247
273
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
248
274
|
<div slot="content" class="demo-overlay">
|
|
249
275
|
Hello! You can close this notification here:
|
|
250
276
|
<button
|
|
251
277
|
class="close-button"
|
|
252
|
-
@click
|
|
278
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
253
279
|
>
|
|
254
280
|
⨯
|
|
255
281
|
</button>
|
|
@@ -273,19 +299,19 @@ export const isBlocking = () => {
|
|
|
273
299
|
This overlay gets closed when overlay B gets opened
|
|
274
300
|
<button
|
|
275
301
|
class="close-button"
|
|
276
|
-
@click
|
|
302
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
277
303
|
>
|
|
278
304
|
⨯
|
|
279
305
|
</button>
|
|
280
306
|
</div>
|
|
281
307
|
</demo-el-using-overlaymixin>
|
|
282
|
-
<demo-el-using-overlaymixin .config
|
|
308
|
+
<demo-el-using-overlaymixin .config="${isBlockingConfig}">
|
|
283
309
|
<button slot="invoker">Overlay B: open second</button>
|
|
284
310
|
<div slot="content" class="demo-overlay demo-overlay--blocking">
|
|
285
311
|
Overlay A is hidden... now close me and see overlay A again.
|
|
286
312
|
<button
|
|
287
313
|
class="close-button"
|
|
288
|
-
@click
|
|
314
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
289
315
|
>
|
|
290
316
|
⨯
|
|
291
317
|
</button>
|
|
@@ -306,13 +332,13 @@ Boolean property. When true, prevents scrolling content that is outside of the `
|
|
|
306
332
|
export const preventsScroll = () => {
|
|
307
333
|
const preventsScrollConfig = { preventsScroll: true };
|
|
308
334
|
return html`
|
|
309
|
-
<demo-el-using-overlaymixin .config
|
|
335
|
+
<demo-el-using-overlaymixin .config="${preventsScrollConfig}">
|
|
310
336
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
311
337
|
<div slot="content" class="demo-overlay">
|
|
312
338
|
Hello! You can close this notification here:
|
|
313
339
|
<button
|
|
314
340
|
class="close-button"
|
|
315
|
-
@click
|
|
341
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
316
342
|
>
|
|
317
343
|
⨯
|
|
318
344
|
</button>
|
|
@@ -345,13 +371,13 @@ export const viewportConfig = () => {
|
|
|
345
371
|
viewportConfig: { placement: 'bottom-left' },
|
|
346
372
|
};
|
|
347
373
|
return html`
|
|
348
|
-
<demo-el-using-overlaymixin .config
|
|
374
|
+
<demo-el-using-overlaymixin .config="${viewportConfig}">
|
|
349
375
|
<button slot="invoker">Click me to open the overlay in the bottom left corner!</button>
|
|
350
376
|
<div slot="content" class="demo-overlay">
|
|
351
377
|
Hello! You can close this notification here:
|
|
352
378
|
<button
|
|
353
379
|
class="close-button"
|
|
354
|
-
@click
|
|
380
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
355
381
|
>
|
|
356
382
|
⨯
|
|
357
383
|
</button>
|
|
@@ -374,7 +400,7 @@ Features:
|
|
|
374
400
|
|
|
375
401
|
> Popper strictly is scoped on positioning. **It does not change the dimensions of the content node nor the invoker node**.
|
|
376
402
|
> This also means that if you use the arrow feature, you are in charge of styling it properly, use the data-popper-placement attribute for this.
|
|
377
|
-
> An example implementation can be found in [lion-tooltip](https://github.com/ing-bank/lion/blob/
|
|
403
|
+
> An example implementation can be found in [lion-tooltip](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/components/tooltip/overview.md), where an arrow is set by default.
|
|
378
404
|
|
|
379
405
|
To override the default options we set for local mode, you add a `popperConfig` object to the config passed to the OverlayController.
|
|
380
406
|
Here's a succinct overview of some often used popper properties:
|
|
@@ -425,13 +451,13 @@ export const popperConfig = () => {
|
|
|
425
451
|
border: 1px solid black;
|
|
426
452
|
}
|
|
427
453
|
</style>
|
|
428
|
-
<demo-el-using-overlaymixin .config
|
|
454
|
+
<demo-el-using-overlaymixin .config="${popperConfig}">
|
|
429
455
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
430
456
|
<div slot="content" class="demo-overlay">
|
|
431
457
|
Hello! You can close this notification here:
|
|
432
458
|
<button
|
|
433
459
|
class="close-button"
|
|
434
|
-
@click
|
|
460
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
435
461
|
>
|
|
436
462
|
⨯
|
|
437
463
|
</button>
|
|
@@ -6,7 +6,7 @@ Manages their position on the screen relative to other elements, including other
|
|
|
6
6
|
|
|
7
7
|
Its purpose is to make it easy to use our Overlay System declaratively. It can be easily extended where needed, to override event listeners and more.
|
|
8
8
|
|
|
9
|
-
See [lion-dialog](../../../components/dialog/overview.md) and [lion-tooltip](https://github.com/ing-bank/lion/blob/
|
|
9
|
+
See [lion-dialog](../../../components/dialog/overview.md) and [lion-tooltip](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/components/tooltip/overview.md) for example Web Component implementations using the Overlay System.
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
@@ -18,9 +18,9 @@ See [lion-dialog](../../../components/dialog/overview.md) and [lion-tooltip](htt
|
|
|
18
18
|
- lion-overlay web component:
|
|
19
19
|
- Show content when clicking the invoker
|
|
20
20
|
- Have a `.config` object to set or update the OverlayController's configuration
|
|
21
|
-
- [**OverlaysManager**](https://github.com/ing-bank/lion/blob/
|
|
22
|
-
- [**OverlayController**](https://github.com/ing-bank/lion/blob/
|
|
23
|
-
- [**OverlayMixin**](https://github.com/ing-bank/lion/blob/
|
|
21
|
+
- [**OverlaysManager**](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/use-cases.md#overlaysmanager), a global repository keeping track of all different types of overlays
|
|
22
|
+
- [**OverlayController**](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/use-cases.md#overlaycontroller), a single controller class for handling overlays
|
|
23
|
+
- [**OverlayMixin**](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/use-cases.md#overlaymixin), a mixin that can be used to create webcomponents that use the OverlayController under the hood
|
|
24
24
|
|
|
25
25
|
Usually you will use `lion-dialog` (or `lion-tooltip` if this makes more sense).
|
|
26
26
|
|
|
@@ -43,7 +43,7 @@ html`
|
|
|
43
43
|
<div slot="content">
|
|
44
44
|
This is an overlay
|
|
45
45
|
<button
|
|
46
|
-
@click
|
|
46
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
47
47
|
>x</button>
|
|
48
48
|
<div>
|
|
49
49
|
<button slot="invoker">
|
|
@@ -110,4 +110,4 @@ class MyOverlayComponent extends OverlayMixin(LitElement) {
|
|
|
110
110
|
|
|
111
111
|
## Rationales
|
|
112
112
|
|
|
113
|
-
Please check the [system rationals](https://github.com/ing-bank/lion/blob/
|
|
113
|
+
Please check the [system rationals](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/rationale.md) folder, where we go more in-depth.
|
|
@@ -21,7 +21,7 @@ The overlay system allows to create different types of overlays like dialogs, to
|
|
|
21
21
|
It's designed to be highly flexible, while still delivering sensible defaults.
|
|
22
22
|
On top of this, the system was built having accessibility in mind.
|
|
23
23
|
|
|
24
|
-
For a detailed rationale, please consult [Rationale](https://github.com/ing-bank/lion/blob/
|
|
24
|
+
For a detailed rationale, please consult [Rationale](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/rationale.md).
|
|
25
25
|
|
|
26
26
|
```js preview-story
|
|
27
27
|
export const main = () => html`
|
|
@@ -29,7 +29,7 @@ export const main = () => html`
|
|
|
29
29
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
30
30
|
<div slot="content" class="demo-overlay">
|
|
31
31
|
Hello! You can close this notification here:
|
|
32
|
-
<button @click
|
|
32
|
+
<button @click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}">
|
|
33
33
|
⨯
|
|
34
34
|
</button>
|
|
35
35
|
</div>
|
|
@@ -67,7 +67,7 @@ Global refers to overlays where the content is positioned in a global root node
|
|
|
67
67
|
|
|
68
68
|
Overlays can be configured in many ways to suit your needs. We go in-depth into each option in the Overlay System - Configuration chapter.
|
|
69
69
|
|
|
70
|
-
We also export a few [preset configuration objects](https://github.com/ing-bank/lion/blob/
|
|
70
|
+
We also export a few [preset configuration objects](https://github.com/ing-bank/lion/blob/a59d362cc1228fc855b426440f4bed3bd21d594b/docs/fundamentals/systems/overlays/configuration.md).
|
|
71
71
|
|
|
72
72
|
- withModalDialogConfig
|
|
73
73
|
- withDropdownConfig
|
|
@@ -152,13 +152,13 @@ The easiest way is declarative. This can be achieved by adding a `<slot name="ba
|
|
|
152
152
|
export const backdrop = () => {
|
|
153
153
|
const responsiveModalDialogConfig = { ...withModalDialogConfig() };
|
|
154
154
|
return html`
|
|
155
|
-
<demo-el-using-overlaymixin .config
|
|
155
|
+
<demo-el-using-overlaymixin .config="${responsiveModalDialogConfig}">
|
|
156
156
|
<demo-overlay-backdrop slot="backdrop"></demo-overlay-backdrop>
|
|
157
157
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
158
158
|
<div slot="content" class="demo-overlay">
|
|
159
159
|
Hello! You can close this notification here:
|
|
160
160
|
<button
|
|
161
|
-
@click
|
|
161
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
162
162
|
>
|
|
163
163
|
⨯
|
|
164
164
|
</button>
|
|
@@ -176,12 +176,12 @@ export const backdropImperative = () => {
|
|
|
176
176
|
const backdropNode = document.createElement('demo-overlay-backdrop');
|
|
177
177
|
const responsiveModalDialogConfig = { ...withModalDialogConfig(), backdropNode };
|
|
178
178
|
return html`
|
|
179
|
-
<demo-el-using-overlaymixin .config
|
|
179
|
+
<demo-el-using-overlaymixin .config="${responsiveModalDialogConfig}">
|
|
180
180
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
181
181
|
<div slot="content" class="demo-overlay">
|
|
182
182
|
Hello! You can close this notification here:
|
|
183
183
|
<button
|
|
184
|
-
@click
|
|
184
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
185
185
|
>
|
|
186
186
|
⨯
|
|
187
187
|
</button>
|
|
@@ -231,13 +231,13 @@ Under the hood, the OverlayController listens to `animationend` event, only then
|
|
|
231
231
|
export const backdropAnimation = () => {
|
|
232
232
|
const responsiveModalDialogConfig = { ...withModalDialogConfig() };
|
|
233
233
|
return html`
|
|
234
|
-
<demo-el-using-overlaymixin .config
|
|
234
|
+
<demo-el-using-overlaymixin .config="${responsiveModalDialogConfig}">
|
|
235
235
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
236
236
|
<demo-overlay-backdrop slot="backdrop"></demo-overlay-backdrop>
|
|
237
237
|
<div slot="content" class="demo-overlay">
|
|
238
238
|
Hello! You can close this notification here:
|
|
239
239
|
<button
|
|
240
|
-
@click
|
|
240
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
241
241
|
>
|
|
242
242
|
⨯
|
|
243
243
|
</button>
|
|
@@ -262,7 +262,7 @@ export const responsiveSwitching = () => {
|
|
|
262
262
|
const responsiveBottomSheetConfig = { ...withBottomSheetConfig() };
|
|
263
263
|
return html`
|
|
264
264
|
<demo-el-using-overlaymixin
|
|
265
|
-
.config
|
|
265
|
+
.config="${responsiveBottomSheetConfig}"
|
|
266
266
|
@before-opened=${e => {
|
|
267
267
|
if (window.innerWidth >= 600) {
|
|
268
268
|
e.target.config = { ...withModalDialogConfig() };
|
|
@@ -275,7 +275,7 @@ export const responsiveSwitching = () => {
|
|
|
275
275
|
<div slot="content" class="demo-overlay">
|
|
276
276
|
Hello! You can close this notification here:
|
|
277
277
|
<button
|
|
278
|
-
@click
|
|
278
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
279
279
|
>
|
|
280
280
|
⨯
|
|
281
281
|
</button>
|
|
@@ -362,12 +362,12 @@ export const responsiveSwitching2 = () => {
|
|
|
362
362
|
</select>
|
|
363
363
|
|
|
364
364
|
<br />
|
|
365
|
-
<demo-el-using-overlaymixin ${ref(overlayRef)} .config
|
|
365
|
+
<demo-el-using-overlaymixin ${ref(overlayRef)} .config="${getConfig(selectRef.value?.value)}">
|
|
366
366
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
367
367
|
<div slot="content" class="demo-overlay">
|
|
368
368
|
Hello! You can close this notification here:
|
|
369
369
|
<button
|
|
370
|
-
@click
|
|
370
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
371
371
|
>
|
|
372
372
|
⨯
|
|
373
373
|
</button>
|
|
@@ -401,13 +401,13 @@ export const openedState = () => {
|
|
|
401
401
|
<demo-el-using-overlaymixin
|
|
402
402
|
${ref(myRefs.overlay)}
|
|
403
403
|
.opened="${appState.opened}"
|
|
404
|
-
@opened-changed
|
|
404
|
+
@opened-changed="${onOpenClosed}"
|
|
405
405
|
>
|
|
406
406
|
<button slot="invoker">Overlay</button>
|
|
407
407
|
<div slot="content" class="demo-overlay">
|
|
408
408
|
Hello! You can close this notification here:
|
|
409
409
|
<button
|
|
410
|
-
@click
|
|
410
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
411
411
|
>
|
|
412
412
|
⨯
|
|
413
413
|
</button>
|
|
@@ -448,8 +448,8 @@ export const interceptingOpenClose = () => {
|
|
|
448
448
|
</button>
|
|
449
449
|
<demo-el-using-overlaymixin
|
|
450
450
|
${ref(myRefs.overlay)}
|
|
451
|
-
@before-closed
|
|
452
|
-
@before-opened
|
|
451
|
+
@before-closed="${intercept}"
|
|
452
|
+
@before-opened="${intercept}"
|
|
453
453
|
>
|
|
454
454
|
<button
|
|
455
455
|
slot="invoker"
|
|
@@ -460,7 +460,7 @@ export const interceptingOpenClose = () => {
|
|
|
460
460
|
</button>
|
|
461
461
|
<div slot="content" class="demo-overlay">
|
|
462
462
|
Hello! You can close this notification here:
|
|
463
|
-
<button @click
|
|
463
|
+
<button @click="${() => (myRefs.overlay.value.opened = false)}">⨯</button>
|
|
464
464
|
</div>
|
|
465
465
|
</demo-el-using-overlaymixin>
|
|
466
466
|
`;
|
|
@@ -538,29 +538,29 @@ Below an example is shown with the `isBlocking` option, which makes use of the O
|
|
|
538
538
|
export const overlayManager = () => {
|
|
539
539
|
const hasBackdropConfig = { ...withModalDialogConfig(), hasBackdrop: true };
|
|
540
540
|
return html`
|
|
541
|
-
<demo-el-using-overlaymixin .config
|
|
541
|
+
<demo-el-using-overlaymixin .config="${hasBackdropConfig}">
|
|
542
542
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
543
543
|
<div slot="content" class="demo-overlay">
|
|
544
544
|
Hello! You can close this notification here:
|
|
545
545
|
<button
|
|
546
|
-
@click
|
|
546
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
547
547
|
>
|
|
548
548
|
⨯
|
|
549
549
|
</button>
|
|
550
550
|
<br />
|
|
551
|
-
<button @click
|
|
551
|
+
<button @click="${e => (document.querySelector('#secondOverlay').opened = true)}">
|
|
552
552
|
Click me to open another overlay which is blocking
|
|
553
553
|
</button>
|
|
554
554
|
</div>
|
|
555
555
|
</demo-el-using-overlaymixin>
|
|
556
556
|
<demo-el-using-overlaymixin
|
|
557
557
|
id="secondOverlay"
|
|
558
|
-
.config
|
|
558
|
+
.config="${{ ...withModalDialogConfig(), hasBackdrop: true, isBlocking: true }}"
|
|
559
559
|
>
|
|
560
560
|
<div slot="content" class="demo-overlay demo-overlay--second">
|
|
561
561
|
Hello! You can close this notification here:
|
|
562
562
|
<button
|
|
563
|
-
@click
|
|
563
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
564
564
|
>
|
|
565
565
|
⨯
|
|
566
566
|
</button>
|
|
@@ -580,13 +580,13 @@ Here is the example below
|
|
|
580
580
|
export const localBackdrop = () => {
|
|
581
581
|
const localBackdropConfig = { ...withDropdownConfig() };
|
|
582
582
|
return html`
|
|
583
|
-
<demo-el-using-overlaymixin .config
|
|
583
|
+
<demo-el-using-overlaymixin .config="${localBackdropConfig}">
|
|
584
584
|
<demo-overlay-backdrop slot="backdrop"></demo-overlay-backdrop>
|
|
585
585
|
<button slot="invoker">Click me to open the overlay!</button>
|
|
586
586
|
<div slot="content" class="demo-overlay">
|
|
587
587
|
Hello! You can close this notification here:
|
|
588
588
|
<button
|
|
589
|
-
@click
|
|
589
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
590
590
|
>
|
|
591
591
|
⨯
|
|
592
592
|
</button>
|
|
@@ -611,7 +611,7 @@ export const nestedOverlays = () => {
|
|
|
611
611
|
<div slot="content" id="nestedContent" class="demo-overlay">
|
|
612
612
|
Nested content
|
|
613
613
|
<button
|
|
614
|
-
@click
|
|
614
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
615
615
|
>
|
|
616
616
|
⨯
|
|
617
617
|
</button>
|
|
@@ -619,7 +619,7 @@ export const nestedOverlays = () => {
|
|
|
619
619
|
<button slot="invoker" id="nestedInvoker">nested invoker button</button>
|
|
620
620
|
</demo-el-using-overlaymixin>
|
|
621
621
|
<button
|
|
622
|
-
@click
|
|
622
|
+
@click="${e => e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
|
|
623
623
|
>
|
|
624
624
|
⨯
|
|
625
625
|
</button>
|
|
@@ -684,15 +684,15 @@ export const LocalWithArrow = () => {
|
|
|
684
684
|
<button slot="invoker">Top</button>
|
|
685
685
|
<div slot="content">This is a tooltip with an arrow</div>
|
|
686
686
|
</arrow-example>
|
|
687
|
-
<arrow-example .config
|
|
687
|
+
<arrow-example .config="${placementRightConfig}">
|
|
688
688
|
<button slot="invoker">Right</button>
|
|
689
689
|
<div slot="content">This is a tooltip with an arrow</div>
|
|
690
690
|
</arrow-example>
|
|
691
|
-
<arrow-example .config
|
|
691
|
+
<arrow-example .config="${placementBottomConfig}">
|
|
692
692
|
<button slot="invoker">Bottom</button>
|
|
693
693
|
<div slot="content">This is a tooltip with an arrow</div>
|
|
694
694
|
</arrow-example>
|
|
695
|
-
<arrow-example .config
|
|
695
|
+
<arrow-example .config="${placementLeftConfig}">
|
|
696
696
|
<button slot="invoker">Left</button>
|
|
697
697
|
<div slot="content">This is a tooltip with an arrow</div>
|
|
698
698
|
</arrow-example>
|
|
@@ -52,8 +52,8 @@ export const getRequest = () => {
|
|
|
52
52
|
--sb-action-logger-max-height: 300px;
|
|
53
53
|
}
|
|
54
54
|
</style>
|
|
55
|
-
<button @click
|
|
56
|
-
<button @click
|
|
55
|
+
<button @click="${() => fetchHandler('pabu')}">Fetch Pabu</button>
|
|
56
|
+
<button @click="${() => fetchHandler('naga')}">Fetch Naga</button>
|
|
57
57
|
${actionLogger}
|
|
58
58
|
`;
|
|
59
59
|
};
|
|
@@ -101,8 +101,8 @@ export const getJsonRequest = () => {
|
|
|
101
101
|
--sb-action-logger-max-height: 300px;
|
|
102
102
|
}
|
|
103
103
|
</style>
|
|
104
|
-
<button @click
|
|
105
|
-
<button @click
|
|
104
|
+
<button @click="${() => fetchHandler('pabu')}">Fetch Pabu</button>
|
|
105
|
+
<button @click="${() => fetchHandler('naga')}">Fetch Naga</button>
|
|
106
106
|
${actionLogger}
|
|
107
107
|
`;
|
|
108
108
|
};
|
|
@@ -151,7 +151,7 @@ export const errorHandling = () => {
|
|
|
151
151
|
--sb-action-logger-max-height: 300px;
|
|
152
152
|
}
|
|
153
153
|
</style>
|
|
154
|
-
<button @click
|
|
154
|
+
<button @click="${fetchHandler}">Fetch</button>
|
|
155
155
|
${actionLogger}
|
|
156
156
|
`;
|
|
157
157
|
};
|
|
@@ -239,8 +239,8 @@ export const cache = () => {
|
|
|
239
239
|
--sb-action-logger-max-height: 300px;
|
|
240
240
|
}
|
|
241
241
|
</style>
|
|
242
|
-
<button @click
|
|
243
|
-
<button @click
|
|
242
|
+
<button @click="${() => fetchHandler('pabu')}">Fetch Pabu</button>
|
|
243
|
+
<button @click="${() => fetchHandler('naga')}">Fetch Naga</button>
|
|
244
244
|
${actionLogger}
|
|
245
245
|
`;
|
|
246
246
|
};
|
|
@@ -274,8 +274,8 @@ export const cacheActionOptions = () => {
|
|
|
274
274
|
--sb-action-logger-max-height: 300px;
|
|
275
275
|
}
|
|
276
276
|
</style>
|
|
277
|
-
<button @click
|
|
278
|
-
<button @click
|
|
277
|
+
<button @click="${() => fetchHandler('pabu')}">Fetch Pabu</button>
|
|
278
|
+
<button @click="${() => fetchHandler('naga')}">Fetch Naga</button>
|
|
279
279
|
${actionLogger}
|
|
280
280
|
`;
|
|
281
281
|
};
|
|
@@ -321,7 +321,7 @@ export const cacheMaxAge = () => {
|
|
|
321
321
|
--sb-action-logger-max-height: 300px;
|
|
322
322
|
}
|
|
323
323
|
</style>
|
|
324
|
-
<button @click
|
|
324
|
+
<button @click="${fetchHandler}">Fetch Pabu</button>
|
|
325
325
|
${actionLogger}
|
|
326
326
|
`;
|
|
327
327
|
};
|
|
@@ -355,8 +355,8 @@ export const changeCacheIdentifier = () => {
|
|
|
355
355
|
--sb-action-logger-max-height: 300px;
|
|
356
356
|
}
|
|
357
357
|
</style>
|
|
358
|
-
<button @click
|
|
359
|
-
<button @click
|
|
358
|
+
<button @click="${fetchHandler}">Fetch Pabu</button>
|
|
359
|
+
<button @click="${changeUserHandler}">Change user</button>
|
|
360
360
|
${actionLogger}
|
|
361
361
|
`;
|
|
362
362
|
};
|
|
@@ -392,10 +392,10 @@ export const nonGETRequest = () => {
|
|
|
392
392
|
--sb-action-logger-max-height: 300px;
|
|
393
393
|
}
|
|
394
394
|
</style>
|
|
395
|
-
<button @click
|
|
396
|
-
<button @click
|
|
397
|
-
<button @click
|
|
398
|
-
<button @click
|
|
395
|
+
<button @click="${() => fetchHandler('pabu', 'GET')}">GET Pabu</button>
|
|
396
|
+
<button @click="${() => fetchHandler('pabu', 'PATCH')}">PATCH Pabu</button>
|
|
397
|
+
<button @click="${() => fetchHandler('naga', 'GET')}">GET Naga</button>
|
|
398
|
+
<button @click="${() => fetchHandler('naga', 'PATCH')}">PATCH Naga</button>
|
|
399
399
|
${actionLogger}
|
|
400
400
|
`;
|
|
401
401
|
};
|
|
@@ -446,10 +446,10 @@ export const invalidateRules = () => {
|
|
|
446
446
|
--sb-action-logger-max-height: 300px;
|
|
447
447
|
}
|
|
448
448
|
</style>
|
|
449
|
-
<button @click
|
|
450
|
-
<button @click
|
|
451
|
-
<button @click
|
|
452
|
-
<button @click
|
|
449
|
+
<button @click="${() => fetchHandler('pabu', 'GET')}">GET Pabu</button>
|
|
450
|
+
<button @click="${() => fetchHandler('pabu', 'PATCH')}">PATCH Pabu</button>
|
|
451
|
+
<button @click="${() => fetchHandler('naga', 'GET')}">GET Naga</button>
|
|
452
|
+
<button @click="${() => fetchHandler('naga', 'PATCH')}">PATCH Naga</button>
|
|
453
453
|
${actionLogger}
|
|
454
454
|
`;
|
|
455
455
|
};
|
|
@@ -112,17 +112,17 @@ export const customTitle = () => {
|
|
|
112
112
|
const uid = Math.random().toString(36).substr(2, 10);
|
|
113
113
|
return html`
|
|
114
114
|
<button
|
|
115
|
-
@click
|
|
115
|
+
@click="${e => e.target.parentElement.querySelector(`#logger-${uid}`).log('Hello, World!')}"
|
|
116
116
|
>
|
|
117
117
|
Log
|
|
118
118
|
</button>
|
|
119
|
-
<sb-action-logger id="logger-${uid}" .title
|
|
119
|
+
<sb-action-logger id="logger-${uid}" .title="${'Hello World'}"></sb-action-logger>
|
|
120
120
|
`;
|
|
121
121
|
};
|
|
122
122
|
```
|
|
123
123
|
|
|
124
124
|
```html
|
|
125
|
-
<sb-action-logger .title
|
|
125
|
+
<sb-action-logger .title="${'Hello World'}"></sb-action-logger>
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
## Rationale
|