@lion/ui 0.18.1 → 0.20.0-menu-system.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/collapsible.js +1 -0
- package/components/button/src/LionButton.js +4 -0
- package/components/button/test-suites/LionButton.suite.js +1 -0
- package/components/calendar/src/LionCalendar.js +2 -0
- package/components/collapsible/src/DisclosureMixin.js +313 -0
- package/components/collapsible/test-suites/DisclosureMixin.suite.js +30 -0
- package/components/collapsible/types/DisclosureMixinTypes.ts +48 -0
- package/components/combobox/test/lion-combobox.test.js +1 -0
- package/components/form-core/src/form-group/FormGroupMixin.js +7 -0
- package/components/form-core/src/registration/FormRegistrarMixin.js +11 -0
- package/components/form-core/test/FormControlMixin.test.js +1 -0
- package/components/form-core/test/validate/Validator.test.js +2 -0
- package/components/form-core/test-suites/ValidateMixin.suite.js +2 -0
- package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +1 -0
- package/components/input-amount-dropdown/src/LionInputAmountDropdown.js +6 -4
- package/components/input-amount-dropdown/test/LionInputAmountDropdown.test.js +20 -1
- package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +24 -0
- package/components/input-datepicker/src/localizeNamespaceLoader.js +1 -0
- package/components/input-datepicker/test/lion-input-datepicker.test.js +5 -6
- package/components/localize/test/date/formatDate.test.js +1 -0
- package/components/menu/CHANGELOG.md +37 -0
- package/components/menu/README.md +335 -0
- package/components/menu/index.js +2 -0
- package/components/menu/lion-menu-overlay.js +3 -0
- package/components/menu/lion-menu.js +3 -0
- package/components/menu/lion-spinbutton.js +3 -0
- package/components/menu/lion-toolbar.js +3 -0
- package/components/menu/lion-tree.js +3 -0
- package/components/menu/package.json +46 -0
- package/components/menu/requirements.temp.md +12 -0
- package/components/menu/src/InteractiveListMixin.js +840 -0
- package/components/menu/src/LionMenu.js +250 -0
- package/components/menu/src/LionMenuHybrid.js +46 -0
- package/components/menu/src/LionMenuOverlay.js +155 -0
- package/components/menu/src/LionSpinbutton.js +213 -0
- package/components/menu/src/LionToolbar.js +94 -0
- package/components/menu/src/LionTree.js +52 -0
- package/components/menu/src/MoreButtonMenuMixin.js +278 -0
- package/components/menu/src/MultiLevelListMixin.js +311 -0
- package/components/menu/src/utils/isInView.js +26 -0
- package/components/menu/src/utils/listItemInteractions.js +124 -0
- package/components/menu/test/InteractiveListMixin.test.js +3 -0
- package/components/menu/test/MoreButtonMenuMixin.test.js +4 -0
- package/components/menu/test/MultiLevelListMixin.test.js +3 -0
- package/components/menu/test/lion-menu-hybrid.test.js +3 -0
- package/components/menu/test/lion-menu.test.js +11 -0
- package/components/menu/test/lion-toolbar.test.js +8 -0
- package/components/menu/test/lion-tree.test.js +7 -0
- package/components/menu/test-helpers/mimicKeyPress.js +9 -0
- package/components/menu/test-suites/InteractiveListMixin.suite.js +454 -0
- package/components/menu/test-suites/LionMenu.suite.js +113 -0
- package/components/menu/test-suites/LionMenuHybrid.suite.js +583 -0
- package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +372 -0
- package/components/menu/test-suites/MultiLevelListMixin.suite.js +303 -0
- package/components/menu/types/InteractiveListMixinTypes.d.ts +84 -0
- package/components/navigation-bar/README.md +1 -0
- package/components/navigation-bar/src/LionNavigationBar.js +439 -0
- package/components/navigation-bar/src/types.js +41 -0
- package/components/overlays/NEXT.md +49 -0
- package/components/overlays/src/OverlayController.js +278 -110
- package/components/overlays/src/OverlayMixin.js +58 -11
- package/components/overlays/src/OverlaysManager.js +2 -2
- package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +100 -26
- package/components/overlays/src/utils/adopt-styles.js +3 -2
- package/components/overlays/src/utils/get-focusable-elements.js +4 -0
- package/components/overlays/src/utils/is-equal-config.js +10 -6
- package/components/overlays/test/OverlayController.test.js +127 -14
- package/components/overlays/test/utils-tests/is-equal-config.test.js +1 -1
- package/components/overlays/test/withHoverInteraction.test.js +90 -0
- package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
- package/components/overlays/types/ArrowMixinTypes.ts +3 -1
- package/components/overlays/types/OverlayConfig.ts +20 -5
- package/components/overlays/types/OverlayMixinTypes.ts +2 -0
- package/components/select-rich/test/lion-select-rich.test.js +3 -0
- package/custom-elements.json +30446 -17381
- package/dist-types/components/button/src/LionButton.d.ts +1 -0
- package/dist-types/components/button/src/LionButton.d.ts.map +1 -1
- package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
- package/dist-types/components/calendar/src/LionCalendar.d.ts.map +1 -1
- package/dist-types/components/collapsible/src/DisclosureMixin.d.ts +3 -0
- package/dist-types/components/collapsible/src/DisclosureMixin.d.ts.map +1 -0
- package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts +2 -0
- package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts.map +1 -0
- package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts +24 -0
- package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts.map +1 -0
- package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
- package/dist-types/components/dialog/src/LionDialog.d.ts +6 -2
- package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
- package/dist-types/components/form-core/src/form-group/FormGroupMixin.d.ts.map +1 -1
- package/dist-types/components/form-core/src/registration/FormRegistrarMixin.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
- package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts +0 -9
- package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts.map +1 -1
- package/dist-types/components/input-amount-dropdown/test/LionInputAmountDropdown.test.d.ts.map +1 -1
- package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
- package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -1
- package/dist-types/components/menu/index.d.ts +3 -0
- package/dist-types/components/menu/index.d.ts.map +1 -0
- package/dist-types/components/menu/lion-menu-overlay.d.ts +2 -0
- package/dist-types/components/menu/lion-menu-overlay.d.ts.map +1 -0
- package/dist-types/components/menu/lion-menu.d.ts +2 -0
- package/dist-types/components/menu/lion-menu.d.ts.map +1 -0
- package/dist-types/components/menu/lion-spinbutton.d.ts +2 -0
- package/dist-types/components/menu/lion-spinbutton.d.ts.map +1 -0
- package/dist-types/components/menu/lion-toolbar.d.ts +2 -0
- package/dist-types/components/menu/lion-toolbar.d.ts.map +1 -0
- package/dist-types/components/menu/lion-tree.d.ts +2 -0
- package/dist-types/components/menu/lion-tree.d.ts.map +1 -0
- package/dist-types/components/menu/src/InteractiveListMixin.d.ts +617 -0
- package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionMenu.d.ts +635 -0
- package/dist-types/components/menu/src/LionMenu.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionMenuHybrid.d.ts +19 -0
- package/dist-types/components/menu/src/LionMenuHybrid.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionMenuOverlay.d.ts +1015 -0
- package/dist-types/components/menu/src/LionMenuOverlay.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionSpinbutton.d.ts +58 -0
- package/dist-types/components/menu/src/LionSpinbutton.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionToolbar.d.ts +8 -0
- package/dist-types/components/menu/src/LionToolbar.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionTree.d.ts +447 -0
- package/dist-types/components/menu/src/LionTree.d.ts.map +1 -0
- package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +39 -0
- package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +503 -0
- package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/utils/isInView.d.ts +9 -0
- package/dist-types/components/menu/src/utils/isInView.d.ts.map +1 -0
- package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +48 -0
- package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +1 -0
- package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-menu.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-menu.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-toolbar.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-toolbar.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-tree.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-tree.test.d.ts.map +1 -0
- package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +7 -0
- package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +14 -0
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +9 -0
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts +5 -0
- package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +14 -0
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -0
- package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts +238 -0
- package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts.map +1 -0
- package/dist-types/components/navigation-bar/src/types.d.ts +85 -0
- package/dist-types/components/navigation-bar/src/types.d.ts.map +1 -0
- package/dist-types/components/overlays/src/OverlayController.d.ts +24 -12
- 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/configurations/visibility-trigger-partials/withHoverInteraction.d.ts +8 -2
- package/dist-types/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.d.ts.map +1 -1
- package/dist-types/components/overlays/src/utils/get-focusable-elements.d.ts.map +1 -1
- package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
- package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts +2 -0
- package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts.map +1 -0
- package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayConfig.d.ts +12 -2
- package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -0
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts +11 -3
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
- package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
- package/dist-types/exports/define/lion-item.d.ts +2 -0
- package/dist-types/exports/define/lion-item.d.ts.map +1 -0
- package/dist-types/exports/define/lion-menu-overlay.d.ts +2 -0
- package/dist-types/exports/define/lion-menu-overlay.d.ts.map +1 -0
- package/dist-types/exports/define/lion-menu.d.ts +2 -0
- package/dist-types/exports/define/lion-menu.d.ts.map +1 -0
- package/dist-types/exports/define/lion-navigation-bar.d.ts +2 -0
- package/dist-types/exports/define/lion-navigation-bar.d.ts.map +1 -0
- package/dist-types/exports/define/lion-toolbar.d.ts +2 -0
- package/dist-types/exports/define/lion-toolbar.d.ts.map +1 -0
- package/dist-types/exports/define/lion-tree.d.ts +2 -0
- package/dist-types/exports/define/lion-tree.d.ts.map +1 -0
- package/dist-types/exports/menu-test-suites.d.ts +4 -0
- package/dist-types/exports/menu-test-suites.d.ts.map +1 -0
- package/dist-types/exports/menu.d.ts +7 -0
- package/dist-types/exports/menu.d.ts.map +1 -0
- package/dist-types/exports/navigation-bar.d.ts +2 -0
- package/dist-types/exports/navigation-bar.d.ts.map +1 -0
- package/dist-types/exports/overlays.d.ts +3 -0
- package/dist-types/exports/overlays.d.ts.map +1 -1
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/checkbox-group/overview.md +2 -2
- package/docs/components/collapsible/overview.md +1 -1
- package/docs/components/combobox/api-table.md +21 -8
- package/docs/components/combobox/overview.md +1 -1
- package/docs/components/combobox/use-cases.md +1 -1
- package/docs/components/dialog/api-table.md +31 -6
- package/docs/components/dialog/overview.md +1 -1
- package/docs/components/fieldset/overview.md +5 -5
- package/docs/components/form/overview.md +3 -3
- package/docs/components/form/use-cases.md +2 -2
- package/docs/components/icon/use-cases.md +1 -1
- package/docs/components/input/overview.md +1 -1
- package/docs/components/input-amount/overview.md +3 -3
- package/docs/components/input-amount-dropdown/api-table.md +1 -1
- package/docs/components/input-date/overview.md +3 -3
- package/docs/components/input-datepicker/api-table.md +21 -4
- package/docs/components/input-datepicker/overview.md +5 -5
- package/docs/components/input-email/overview.md +2 -2
- package/docs/components/input-file/overview.md +1 -1
- package/docs/components/input-iban/overview.md +2 -2
- package/docs/components/input-range/overview.md +2 -2
- package/docs/components/input-stepper/overview.md +1 -1
- package/docs/components/input-tel/overview.md +1 -1
- package/docs/components/input-tel/use-cases.md +6 -6
- package/docs/components/input-tel-dropdown/overview.md +1 -1
- package/docs/components/listbox/use-cases.md +1 -1
- package/docs/components/menu/api-table.md +460 -0
- package/docs/components/menu/applyMenuDemoStyles.js +173 -0
- package/docs/components/menu/extensions.md +262 -0
- package/docs/components/menu/index.md +13 -0
- package/docs/components/menu/overview.md +422 -0
- package/docs/components/menu/use-cases.md +77 -0
- package/docs/components/radio-group/overview.md +3 -3
- package/docs/components/select/use-cases.md +1 -1
- package/docs/components/select-rich/api-table.md +21 -5
- package/docs/components/select-rich/use-cases.md +2 -2
- package/docs/components/tabs/examples.md +1 -1
- package/docs/components/tooltip/api-table.md +36 -11
- package/docs/components/tooltip/use-cases.md +22 -0
- package/docs/fundamentals/index.md +4 -4
- 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 +4 -4
- package/docs/fundamentals/systems/form/model-value.md +1 -1
- package/docs/fundamentals/systems/form/overview.md +28 -28
- package/docs/fundamentals/systems/form/validate.md +2 -2
- package/docs/fundamentals/systems/localize/overview.md +4 -4
- package/docs/fundamentals/systems/overlays/api-table.md +36 -34
- package/docs/fundamentals/systems/overlays/configuration.md +2 -2
- package/docs/fundamentals/systems/overlays/overview.md +5 -5
- package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
- package/docs/fundamentals/tools/helpers/overview.md +1 -1
- package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
- package/docs/guides/how-to/create-a-custom-field.md +5 -5
- 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/how-to/index.md +1 -1
- package/docs/guides/index.md +8 -8
- package/docs/guides/principles/index.md +5 -5
- package/docs/guides/principles/styling.md +1 -1
- package/exports/collapsible.js +1 -0
- package/exports/define/lion-item.js +3 -0
- package/exports/define/lion-menu-overlay.js +3 -0
- package/exports/define/lion-menu.js +3 -0
- package/exports/define/lion-navigation-bar.js +3 -0
- package/exports/define/lion-toolbar.js +3 -0
- package/exports/define/lion-tree.js +3 -0
- package/exports/menu-test-suites.js +4 -0
- package/exports/menu.js +7 -0
- package/exports/navigation-bar.js +1 -0
- package/exports/overlays.js +6 -0
- package/menu-test-suites.js +4 -0
- package/menu.js +7 -0
- package/navigation-bar.js +1 -0
- package/overlays.js +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { OverlayController } from '@lion/ui/overlays.js';
|
|
2
|
+
import { expect, fixtureSync, html } from '@open-wc/testing';
|
|
3
|
+
import sinon from 'sinon';
|
|
4
|
+
import { withHoverInteraction } from '../src/configurations/visibility-trigger-partials/withHoverInteraction.js';
|
|
5
|
+
|
|
6
|
+
function makeCtrl(opts = {}) {
|
|
7
|
+
return new OverlayController({
|
|
8
|
+
placementMode: 'local',
|
|
9
|
+
contentNode: /** @type {HTMLElement} */ (fixtureSync(html`<div>content</div>`)),
|
|
10
|
+
invokerNode: /** @type {HTMLElement} */ (fixtureSync(html`<button>invoker</button>`)),
|
|
11
|
+
...withHoverInteraction(opts),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
describe('withHoverInteraction (isHoverSupported: false)', () => {
|
|
16
|
+
/** @type {sinon.SinonFakeTimers} */
|
|
17
|
+
let clock;
|
|
18
|
+
/** @type {OverlayController} */
|
|
19
|
+
let ctrl;
|
|
20
|
+
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
clock = sinon.useFakeTimers();
|
|
23
|
+
ctrl = makeCtrl({ isHoverSupported: false });
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
ctrl.teardown();
|
|
28
|
+
clock.restore();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('opens after holding for longpressDuration (500ms)', async () => {
|
|
32
|
+
ctrl.invokerNode?.dispatchEvent(
|
|
33
|
+
new PointerEvent('pointerdown', { pointerType: 'touch', bubbles: true }),
|
|
34
|
+
);
|
|
35
|
+
clock.runAll();
|
|
36
|
+
await Promise.resolve();
|
|
37
|
+
expect(ctrl.isShown).to.equal(true);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('stays hidden on brief touch: pointerup cancels the timer', () => {
|
|
41
|
+
ctrl.invokerNode?.dispatchEvent(
|
|
42
|
+
new PointerEvent('pointerdown', { pointerType: 'touch', bubbles: true }),
|
|
43
|
+
);
|
|
44
|
+
ctrl.invokerNode?.dispatchEvent(
|
|
45
|
+
new PointerEvent('pointerup', { pointerType: 'touch', bubbles: true }),
|
|
46
|
+
);
|
|
47
|
+
clock.tick(500);
|
|
48
|
+
expect(ctrl.isShown).to.equal(false);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('ignores non-touch pointer events (mouse)', () => {
|
|
52
|
+
ctrl.invokerNode?.dispatchEvent(
|
|
53
|
+
new PointerEvent('pointerdown', { pointerType: 'mouse', bubbles: true }),
|
|
54
|
+
);
|
|
55
|
+
clock.tick(500);
|
|
56
|
+
expect(ctrl.isShown).to.equal(false);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('auto-closes after longpressDuration once press ends', async () => {
|
|
60
|
+
ctrl.invokerNode?.dispatchEvent(
|
|
61
|
+
new PointerEvent('pointerdown', { pointerType: 'touch', bubbles: true }),
|
|
62
|
+
);
|
|
63
|
+
clock.runAll();
|
|
64
|
+
await Promise.resolve();
|
|
65
|
+
expect(ctrl.isShown).to.equal(true);
|
|
66
|
+
|
|
67
|
+
ctrl.invokerNode?.dispatchEvent(
|
|
68
|
+
new PointerEvent('pointerup', { pointerType: 'touch', bubbles: true }),
|
|
69
|
+
);
|
|
70
|
+
await clock.tickAsync(501);
|
|
71
|
+
expect(ctrl.isShown).to.equal(false);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('disables text selection on the invoker on init and restores it on teardown', () => {
|
|
75
|
+
const { invokerNode } = ctrl;
|
|
76
|
+
const getUserSelect = () =>
|
|
77
|
+
invokerNode?.style.getPropertyValue('user-select') ||
|
|
78
|
+
invokerNode?.style.getPropertyValue('-webkit-user-select');
|
|
79
|
+
expect(getUserSelect()).to.equal('none');
|
|
80
|
+
|
|
81
|
+
ctrl.teardown();
|
|
82
|
+
expect(getUserSelect()).to.equal('');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('does not open on tap-triggered focusin', () => {
|
|
86
|
+
ctrl.invokerNode?.dispatchEvent(new Event('focusin', { bubbles: true }));
|
|
87
|
+
clock.tick(300);
|
|
88
|
+
expect(ctrl.isShown).to.equal(false);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
@@ -537,13 +537,13 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
|
|
|
537
537
|
it('works with cache directive when reconnected', async () => {
|
|
538
538
|
class CachingContext extends LitElement {
|
|
539
539
|
static properties = {
|
|
540
|
-
|
|
540
|
+
showOverlay: { type: Boolean },
|
|
541
541
|
};
|
|
542
542
|
|
|
543
543
|
constructor() {
|
|
544
544
|
super();
|
|
545
545
|
|
|
546
|
-
this.
|
|
546
|
+
this.showOverlay = true;
|
|
547
547
|
}
|
|
548
548
|
|
|
549
549
|
get overlayEl() {
|
|
@@ -552,12 +552,12 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
|
|
|
552
552
|
|
|
553
553
|
render() {
|
|
554
554
|
return html`${cache(
|
|
555
|
-
this.
|
|
556
|
-
? html
|
|
557
|
-
: html`<${tag} id="myOverlay">
|
|
555
|
+
this.showOverlay
|
|
556
|
+
? html`<${tag} id="myOverlay">
|
|
558
557
|
<div slot="content">content b</div>
|
|
559
558
|
<button slot="invoker">invoker button b</button>
|
|
560
|
-
</${tag}
|
|
559
|
+
</${tag}>`
|
|
560
|
+
: html`something else`,
|
|
561
561
|
)}`;
|
|
562
562
|
}
|
|
563
563
|
}
|
|
@@ -578,7 +578,7 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
|
|
|
578
578
|
// @ts-expect-error [allow-protected] in tests
|
|
579
579
|
const setupSpy = sinon.spy(el.overlayEl, '_setupOverlayCtrl');
|
|
580
580
|
|
|
581
|
-
el.
|
|
581
|
+
el.showOverlay = false;
|
|
582
582
|
// render the new content
|
|
583
583
|
await el.updateComplete;
|
|
584
584
|
// wait for the teardown to complete
|
|
@@ -588,7 +588,7 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
|
|
|
588
588
|
expect(teardownSpy.callCount).to.equal(1);
|
|
589
589
|
expect(setupSpy.callCount).to.equal(0);
|
|
590
590
|
|
|
591
|
-
el.
|
|
591
|
+
el.showOverlay = true;
|
|
592
592
|
await el.updateComplete;
|
|
593
593
|
expect(setupSpy.callCount).to.equal(1);
|
|
594
594
|
|
|
@@ -26,7 +26,9 @@ export declare class ArrowHost {
|
|
|
26
26
|
|
|
27
27
|
protected _defineOverlayConfig(): OverlayConfig;
|
|
28
28
|
|
|
29
|
-
protected _getPopperArrowConfig(
|
|
29
|
+
protected _getPopperArrowConfig(
|
|
30
|
+
popperConfigToExtendFrom: Partial<PopperOptions>,
|
|
31
|
+
): Partial<PopperOptions>;
|
|
30
32
|
|
|
31
33
|
private __setupRepositionCompletePromise(): void;
|
|
32
34
|
|
|
@@ -21,7 +21,6 @@ export type OverlayPhase =
|
|
|
21
21
|
| 'add'
|
|
22
22
|
| 'remove';
|
|
23
23
|
|
|
24
|
-
|
|
25
24
|
export interface ViewportConfig {
|
|
26
25
|
placement: ViewportPlacement;
|
|
27
26
|
}
|
|
@@ -97,14 +96,30 @@ export interface OverlayConfig {
|
|
|
97
96
|
/** By default, the tooltip content is a 'description' for the invoker (uses aria-describedby) Setting this property to 'label' makes the content function as a label (via aria-labelledby) */
|
|
98
97
|
invokerRelation?: 'label' | 'description';
|
|
99
98
|
|
|
100
|
-
/** render a div instead of dialog */
|
|
101
|
-
_noDialogEl?: Boolean;
|
|
102
|
-
|
|
103
99
|
/**
|
|
104
100
|
* Determines the conditions hiding/showing should be based on. It gets the OverlayController as input and returns an object with
|
|
105
101
|
* functions with Overlay phases as keys
|
|
106
102
|
*/
|
|
107
103
|
visibilityTriggerFunction?: Function;
|
|
108
|
-
}
|
|
109
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Whether the overlay content should receive focus when shown.
|
|
107
|
+
*/
|
|
108
|
+
focusContentOnOpen?: boolean;
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* By default, we function either as overlay or disclosure. In some cases, this should be dynamically set (think of responsive changes).
|
|
112
|
+
* or it depends on the context (a top level menu is not openable (unless it's a context menu), its children menus are).
|
|
113
|
+
*/
|
|
114
|
+
isActivated?: boolean;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* By default, an error is thrown when contentNode is not connected to the DOM.
|
|
118
|
+
* This allows to prepare nodes and later connect them to dom.
|
|
119
|
+
*/
|
|
120
|
+
requireConnectedNodes?: boolean;
|
|
121
|
+
|
|
122
|
+
syncChildrenCloseState?: boolean;
|
|
110
123
|
|
|
124
|
+
_shouldTeardownDomStructure?: boolean;
|
|
125
|
+
}
|
|
@@ -17,6 +17,8 @@ export interface DefineOverlayConfig {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export declare class OverlayHost {
|
|
20
|
+
static _getFocusableInvokerEl(focusableElOrWrapper: Element): Element | null;
|
|
21
|
+
|
|
20
22
|
opened: Boolean;
|
|
21
23
|
get config(): Partial<OverlayConfig>;
|
|
22
24
|
set config(value: Partial<OverlayConfig>);
|
|
@@ -832,6 +832,7 @@ describe('lion-select-rich', () => {
|
|
|
832
832
|
await waitUntil(isSelectRichRendered);
|
|
833
833
|
getInvoker()?.click();
|
|
834
834
|
await waitUntil(isDialogVisible);
|
|
835
|
+
// @ts-ignore - NodeList array access
|
|
835
836
|
const optionBlue = /** @type { HTMLElement | undefined } */ (
|
|
836
837
|
wrapperElementShadowRoot?.querySelectorAll('lion-option')
|
|
837
838
|
)?.[1];
|
|
@@ -955,6 +956,7 @@ describe('lion-select-rich', () => {
|
|
|
955
956
|
await waitUntil(isSelectRichRendered);
|
|
956
957
|
getInvoker()?.click();
|
|
957
958
|
await waitUntil(isDialogVisible);
|
|
959
|
+
// @ts-ignore - NodeList array access
|
|
958
960
|
const optionBlue = /** @type { HTMLElement | undefined } */ (
|
|
959
961
|
wrapperElementShadowRoot?.querySelectorAll('lion-option')
|
|
960
962
|
)?.[1];
|
|
@@ -1082,6 +1084,7 @@ describe('lion-select-rich', () => {
|
|
|
1082
1084
|
await waitUntil(isSelectRichRendered);
|
|
1083
1085
|
getInvoker()?.click();
|
|
1084
1086
|
await waitUntil(isDialogVisible);
|
|
1087
|
+
// @ts-ignore - NodeList array access
|
|
1085
1088
|
const optionBlue = /** @type { HTMLElement | undefined } */ (
|
|
1086
1089
|
wrapperElementShadowRoot?.querySelectorAll('lion-option')
|
|
1087
1090
|
)?.[1];
|