@momentum-design/components 0.80.3 → 0.80.5
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/dist/browser/index.js +601 -317
- package/dist/browser/index.js.map +4 -4
- package/dist/components/list/list.component.d.ts +1 -1
- package/dist/components/listitem/listitem.component.js +10 -3
- package/dist/components/menupopover/menupopover.component.js +3 -1
- package/dist/components/navitem/index.d.ts +11 -0
- package/dist/components/navitem/index.js +8 -0
- package/dist/components/navitem/navitem.component.d.ts +125 -0
- package/dist/components/navitem/navitem.component.js +251 -0
- package/dist/components/navitem/navitem.constants.d.ts +16 -0
- package/dist/components/navitem/navitem.constants.js +21 -0
- package/dist/components/navitem/navitem.styles.d.ts +2 -0
- package/dist/components/navitem/navitem.styles.js +146 -0
- package/dist/components/navitem/navitem.types.d.ts +11 -0
- package/dist/components/navitem/navitem.types.js +1 -0
- package/dist/components/navitemlist/index.d.ts +7 -0
- package/dist/components/navitemlist/index.js +4 -0
- package/dist/components/navitemlist/navitemlist.component.d.ts +51 -0
- package/dist/components/navitemlist/navitemlist.component.js +92 -0
- package/dist/components/navitemlist/navitemlist.constants.d.ts +2 -0
- package/dist/components/navitemlist/navitemlist.constants.js +3 -0
- package/dist/components/navitemlist/navitemlist.styles.d.ts +2 -0
- package/dist/components/navitemlist/navitemlist.styles.js +23 -0
- package/dist/components/sidenavigation/index.d.ts +10 -0
- package/dist/components/sidenavigation/index.js +7 -0
- package/dist/components/sidenavigation/sidenavigation.component.d.ts +144 -0
- package/dist/components/sidenavigation/sidenavigation.component.js +244 -0
- package/dist/components/sidenavigation/sidenavigation.constants.d.ts +11 -0
- package/dist/components/sidenavigation/sidenavigation.constants.js +12 -0
- package/dist/components/sidenavigation/sidenavigation.context.d.ts +15 -0
- package/dist/components/sidenavigation/sidenavigation.context.js +78 -0
- package/dist/components/sidenavigation/sidenavigation.styles.d.ts +2 -0
- package/dist/components/sidenavigation/sidenavigation.styles.js +68 -0
- package/dist/components/sidenavigation/sidenavigation.types.d.ts +7 -0
- package/dist/components/sidenavigation/sidenavigation.types.js +1 -0
- package/dist/custom-elements.json +5820 -3900
- package/dist/index.d.ts +4 -1
- package/dist/index.js +4 -1
- package/dist/react/index.d.ts +8 -5
- package/dist/react/index.js +8 -5
- package/dist/react/navitem/index.d.ts +43 -0
- package/dist/react/navitem/index.js +51 -0
- package/dist/react/navitemlist/index.d.ts +13 -0
- package/dist/react/navitemlist/index.js +22 -0
- package/dist/react/sidenavigation/index.d.ts +56 -0
- package/dist/react/sidenavigation/index.js +64 -0
- package/dist/utils/mixins/MenuMixin.js +45 -33
- package/dist/utils/roles.d.ts +1 -0
- package/dist/utils/roles.js +1 -0
- package/package.json +1 -1
@@ -0,0 +1,78 @@
|
|
1
|
+
import { createContext } from '@lit/context';
|
2
|
+
import { TAG_NAME as MENUPOPOVER_TAGNAME } from '../menupopover/menupopover.constants';
|
3
|
+
import { TAG_NAME as NAVITEM_TAGNAME } from '../navitem/navitem.constants';
|
4
|
+
import { POPOVER_PLACEMENT } from '../popover/popover.constants';
|
5
|
+
import { TAG_NAME } from './sidenavigation.constants';
|
6
|
+
class SideNavigationContext {
|
7
|
+
constructor(defaultVariant, defaultExpanded, defaultParentNavTooltipText) {
|
8
|
+
this.variant = defaultVariant;
|
9
|
+
this.expanded = defaultExpanded;
|
10
|
+
this.parentNavTooltipText = defaultParentNavTooltipText;
|
11
|
+
}
|
12
|
+
hasSiblingWithTriggerId(navItem) {
|
13
|
+
var _a, _b;
|
14
|
+
const id = navItem === null || navItem === void 0 ? void 0 : navItem.getAttribute('id');
|
15
|
+
if (!id)
|
16
|
+
return false;
|
17
|
+
const siblings = Array.from((_b = (_a = navItem === null || navItem === void 0 ? void 0 : navItem.parentElement) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : []);
|
18
|
+
return siblings.some((sibling) => sibling !== navItem
|
19
|
+
&& sibling.tagName.toLowerCase() === MENUPOPOVER_TAGNAME
|
20
|
+
&& sibling.getAttribute('triggerid') === id);
|
21
|
+
}
|
22
|
+
getParentNavItems(navItem) {
|
23
|
+
if (!navItem)
|
24
|
+
return [];
|
25
|
+
const parents = [];
|
26
|
+
let current = navItem;
|
27
|
+
while (current) {
|
28
|
+
// Walk up to find the menupopover
|
29
|
+
const popover = current === null || current === void 0 ? void 0 : current.closest(MENUPOPOVER_TAGNAME);
|
30
|
+
if (!popover)
|
31
|
+
break;
|
32
|
+
const triggerId = popover.getAttribute('triggerid');
|
33
|
+
if (!triggerId)
|
34
|
+
break;
|
35
|
+
// Find the NavItem that triggered this menupopover
|
36
|
+
const triggeringNavItem = document.getElementById(triggerId);
|
37
|
+
if (triggeringNavItem && triggeringNavItem.tagName.toLowerCase() === NAVITEM_TAGNAME) {
|
38
|
+
parents.push(triggeringNavItem);
|
39
|
+
current = triggeringNavItem;
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
break;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return parents;
|
46
|
+
}
|
47
|
+
setCurrentActiveNavItem(navItem) {
|
48
|
+
var _a;
|
49
|
+
const isSameItem = ((_a = this.currentActiveNavItem) === null || _a === void 0 ? void 0 : _a.navId) === (navItem === null || navItem === void 0 ? void 0 : navItem.navId);
|
50
|
+
const shouldSkip = (navItem === null || navItem === void 0 ? void 0 : navItem.disableAriaCurrent) || this.hasSiblingWithTriggerId(navItem);
|
51
|
+
if (isSameItem || shouldSkip)
|
52
|
+
return;
|
53
|
+
// Clean up previous active item
|
54
|
+
if (this.currentActiveNavItem) {
|
55
|
+
this.currentActiveNavItem.removeAttribute('aria-current');
|
56
|
+
this.currentActiveNavItem.removeAttribute('active');
|
57
|
+
const previousParents = this.getParentNavItems(this.currentActiveNavItem);
|
58
|
+
previousParents.forEach((parent) => {
|
59
|
+
parent.removeAttribute('tooltip-text');
|
60
|
+
parent.removeAttribute('active');
|
61
|
+
});
|
62
|
+
}
|
63
|
+
// Apply attributes to new active item
|
64
|
+
if (!navItem)
|
65
|
+
return;
|
66
|
+
this.currentActiveNavItem = navItem;
|
67
|
+
navItem.setAttribute('aria-current', 'page');
|
68
|
+
navItem.setAttribute('active', '');
|
69
|
+
const newParents = this.getParentNavItems(navItem);
|
70
|
+
newParents.forEach((parent) => {
|
71
|
+
parent.setAttribute('tooltip-text', this.parentNavTooltipText || '');
|
72
|
+
parent.setAttribute('tooltip-placement', POPOVER_PLACEMENT.BOTTOM);
|
73
|
+
parent.setAttribute('active', '');
|
74
|
+
});
|
75
|
+
}
|
76
|
+
}
|
77
|
+
SideNavigationContext.context = createContext(TAG_NAME);
|
78
|
+
export default SideNavigationContext;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import { css } from 'lit';
|
2
|
+
const styles = css `
|
3
|
+
:host {
|
4
|
+
--mdc-sidenavigation-expanded-width: 15rem;
|
5
|
+
--mdc-sidenavigation-collapsed-width: 4.5rem;
|
6
|
+
|
7
|
+
display: flex;
|
8
|
+
height: 100%;
|
9
|
+
}
|
10
|
+
|
11
|
+
:host([expanded]) {
|
12
|
+
width: var(--mdc-sidenavigation-expanded-width);
|
13
|
+
}
|
14
|
+
|
15
|
+
:host(:not([expanded])) {
|
16
|
+
width: var(--mdc-sidenavigation-collapsed-width);
|
17
|
+
}
|
18
|
+
|
19
|
+
:host::part(side-navigation-container) {
|
20
|
+
display: flex;
|
21
|
+
flex-direction: column;
|
22
|
+
width: 100%;
|
23
|
+
}
|
24
|
+
|
25
|
+
:host::part(scrollable-section) {
|
26
|
+
flex-grow: 1;
|
27
|
+
overflow: auto;
|
28
|
+
padding: 1rem 0;
|
29
|
+
min-height: 0;
|
30
|
+
}
|
31
|
+
|
32
|
+
:host::part(fixed-section) {
|
33
|
+
flex-shrink: 0;
|
34
|
+
display: flex;
|
35
|
+
flex-direction: column;
|
36
|
+
align-items: flex-start;
|
37
|
+
padding-bottom: 1rem;
|
38
|
+
gap: 0.5rem;
|
39
|
+
}
|
40
|
+
|
41
|
+
:host::part(brand-logo-container) {
|
42
|
+
display: flex;
|
43
|
+
align-items: center;
|
44
|
+
width: 100%;
|
45
|
+
gap: 0.5rem;
|
46
|
+
border-radius: 1.25rem;
|
47
|
+
}
|
48
|
+
|
49
|
+
:host(:dir(ltr))::part(brand-logo-container) {
|
50
|
+
padding: 0.5rem 0rem 0.5rem 1.5rem;
|
51
|
+
}
|
52
|
+
|
53
|
+
:host(:dir(rtl))::part(brand-logo-container) {
|
54
|
+
padding: 0.5rem 1.5rem 0.5rem 0rem;
|
55
|
+
}
|
56
|
+
|
57
|
+
::slotted([slot="brand-logo"]) {
|
58
|
+
width: 1.5rem;
|
59
|
+
height: 1.5rem;
|
60
|
+
flex-shrink: 0;
|
61
|
+
aspect-ratio: 1 / 1;
|
62
|
+
}
|
63
|
+
|
64
|
+
:host::part(separator) {
|
65
|
+
margin-bottom: 0.75rem;
|
66
|
+
}
|
67
|
+
`;
|
68
|
+
export default [styles];
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|