diff --git a/components/page/README.md b/components/page/README.md new file mode 100644 index 00000000000..11d630c5402 --- /dev/null +++ b/components/page/README.md @@ -0,0 +1,5 @@ +# Page + +The `d2l-page` and page layout components are in progress. + +Please reach out before using them! diff --git a/components/page/demo/page-component.js b/components/page/demo/page-component.js new file mode 100644 index 00000000000..03fd59ddc2b --- /dev/null +++ b/components/page/demo/page-component.js @@ -0,0 +1,192 @@ +import '../../collapsible-panel/collapsible-panel.js'; +import '../page.js'; +import { css, html, LitElement, nothing } from 'lit'; +import { navStyles } from './temp-nav-styles.js'; +import { selectStyles } from '../../inputs/input-select-styles.js'; + +/** + * Component for d2l-page demos and tests + */ +class PageDemo extends LitElement { + + static properties = { + demoMode: { type: Boolean, attribute: 'demo-mode' }, + hasFooter: { type: Boolean, attribute: 'has-footer' }, + hasSideNavPanel: { type: Boolean, attribute: 'has-side-nav-panel' }, + hasSupportingPanel: { type: Boolean, attribute: 'has-supporting-panel' }, + navType: { type: String, attribute: 'nav-type' }, + widthType: { type: String, attribute: 'width-type' }, + _allowThreePanels: { state: true } + }; + + static styles = [navStyles, selectStyles, css` + .demo-controls { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + } + `]; + + constructor() { + super(); + this._allowThreePanels = false; // Temp for dev/testing + this.demoMode = false; + this.hasFooter = false; + this.hasSideNavPanel = false; + this.hasSupportingPanel = false; + this.navType = 'full'; + /** @type {'normal'|'wide'|'fullscreen'} */ + this.widthType = 'normal'; + } + + render() { + return html` + + ${this.navType === 'full' ? this.#renderFullNav() : this.#renderImmersiveNav()} + ${this.#renderSideNavPanel()} + ${this.#renderMainPanel()} + ${this.#renderSupportingPanel()} + ${this.#renderFooter()} + + `; + } + + #handleAllowThreePanelsChange(e) { + this._allowThreePanels = e.target.on; + if (!this._allowThreePanels && this.hasSideNavPanel && this.hasSupportingPanel) { + this.hasSupportingPanel = false; + } + } + + #handleNavTypeChange(e) { + this.navType = e.target.on ? 'immersive' : 'full'; + } + + #handleVisibilityChange(e) { + const key = e.target.dataset.key; + this[key] = e.target.on; + + if (this._allowThreePanels) return; + if (e.target.on && key === 'hasSideNavPanel' && this.hasSupportingPanel) { + this.hasSupportingPanel = false; + } else if (e.target.on && key === 'hasSupportingPanel' && this.hasSideNavPanel) { + this.hasSideNavPanel = false; + } + } + + #handleWidthTypeChange(e) { + this.widthType = e.target.value; + } + + #renderDemoMainControls() { + return this.demoMode ? html` + +
+ + + + + + +
+
+ ` : nothing; + } + + #renderFooter() { + return this.hasFooter ? html` +
+ I'm in the footer slot of the d2l-page component! +
+ ` : nothing; + } + + #renderFullNav() { + // Update with navigation components once available + return html` +
+ +
+
+ +
+ +
+
+
+ + + +
+
+ + +
+ `; + } + + #renderImmersiveNav() { + // Update with navigation components once available + return html` +
+ +
+ +
+ Assignment 1 - Introduction to Economics +
+
+ + +
+
+ +
+ `; + } + + #renderMainPanel() { + return html` +
+

I'm in the default slot of the d2l-page component!

+ ${this.#renderDemoMainControls()} +
End of Content
+
+ `; + } + + #renderSideNavPanel() { + return this.hasSideNavPanel ? html` +
+ I'm in the side-nav slot of the d2l-page component! +
+ ` : nothing; + } + + #renderSupportingPanel() { + return this.hasSupportingPanel ? html` +
+ I'm in the supporting slot of the d2l-page component! +
+ ` : nothing; + } +} + +customElements.define('d2l-page-demo', PageDemo); diff --git a/components/page/demo/page.html b/components/page/demo/page.html new file mode 100644 index 00000000000..b1638548781 --- /dev/null +++ b/components/page/demo/page.html @@ -0,0 +1,16 @@ + + + + d2l-page + + + + + + + + + diff --git a/components/page/demo/temp-nav-styles.js b/components/page/demo/temp-nav-styles.js new file mode 100644 index 00000000000..da3a126dd38 --- /dev/null +++ b/components/page/demo/temp-nav-styles.js @@ -0,0 +1,219 @@ +/** + * Temporary navigation demo styles + * These can be removed once we have official navigation components to use + */ + +import { css } from 'lit'; + +export const navStyles = css` + + /* Shared Styles */ + .nav-shadow { + background-color: rgba(0, 0, 0, 0.02); + bottom: -4px; + display: block; + height: 4px; + pointer-events: none; + position: absolute; + width: 100%; + z-index: 1; + } + .nav-band { + background: linear-gradient(180deg, var(--d2l-color-celestine) 1.5rem, #ffffff 0%); + min-height: 4px; + } + .nav-icon-btn { + align-items: center; + background: none; + border: none; + border-radius: 4px; + color: var(--d2l-color-ferrite); + cursor: pointer; + display: inline-flex; + font-size: 0.8rem; + gap: 4px; + justify-content: center; + min-height: 42px; + min-width: 42px; + padding: 6px; + } + .nav-icon-btn:hover, + .nav-icon-btn:focus-visible { + background-color: var(--d2l-color-gypsum); + color: var(--d2l-color-celestine); + } + + /* Full Nav Styles */ + .full-nav-wrapper { + background-color: white; + position: relative; + } + .full-nav-header { + align-items: center; + display: flex; + height: 90px; + margin-inline: var(--d2l-page-margin-inline); + max-width: var(--d2l-page-header-max-width); + padding: 0 30px; + } + @media (max-width: 767px) { + .full-nav-header { + height: 72px; + } + } + @media (max-width: 615px) { + .full-nav-header { + padding: 0 15px; + } + } + .full-nav-header-left { + align-items: center; + display: flex; + flex: 0 1 auto; + gap: 12px; + height: 100%; + } + .full-nav-header-spacer { + flex: 1 1 auto; + min-width: 30px; + } + @media (max-width: 615px) { + .full-nav-header-spacer { + min-width: 15px; + } + } + .full-nav-header-right { + align-items: center; + display: flex; + flex: 0 0 auto; + gap: 6px; + height: 100%; + } + .full-nav-logo { + background-color: var(--d2l-color-celestine); + border-radius: 4px; + color: white; + font-size: 0.8rem; + font-weight: 700; + padding: 8px 14px; + } + .full-nav-separator { + background-color: var(--d2l-color-mica); + height: 26px; + margin: 0 6px; + width: 1px; + } + .full-nav-footer { + border-bottom: 1px solid rgba(124, 134, 149, 0.18); + border-top: 1px solid rgba(124, 134, 149, 0.18); + } + .full-nav-footer-inner { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 4px; + margin-inline: var(--d2l-page-margin-inline); + max-width: var(--d2l-page-header-max-width); + padding: 0 30px; + } + @media (max-width: 615px) { + .full-nav-footer-inner { + padding: 0 15px; + } + } + .full-nav-footer-link { + border-bottom: 4px solid transparent; + color: var(--d2l-color-ferrite); + display: inline-block; + font-size: 0.7rem; + padding: 8px 12px; + text-decoration: none; + } + .full-nav-footer-link:hover, + .full-nav-footer-link:focus-visible { + border-bottom-color: var(--d2l-color-celestine); + color: var(--d2l-color-celestine); + } + + /* Immersive Nav Styles */ + .immersive-wrapper { + background-color: white; + border-bottom: 1px solid var(--d2l-color-mica); + position: relative; + } + .immersive-container { + align-items: center; + display: flex; + height: 3.1rem; + justify-content: space-between; + margin-inline: var(--d2l-page-margin-inline); + max-width: var(--d2l-page-header-max-width); + overflow: hidden; + padding: 0 30px; + } + @media (max-width: 929px) { + .immersive-container { + padding: 0 24px; + } + } + @media (max-width: 767px) { + .immersive-container { + padding: 0 18px; + } + } + @media (max-width: 615px) { + .immersive-container { + height: 2.8rem; + } + } + .immersive-left { + align-items: center; + color: var(--d2l-color-tungsten); + display: flex; + flex: 0 0 auto; + font-size: 0.8rem; + letter-spacing: 0.2px; + } + .immersive-back-link { + align-items: center; + color: var(--d2l-color-tungsten); + display: inline-flex; + gap: 4px; + text-decoration: none; + } + .immersive-back-link:hover, + .immersive-back-link:focus-visible { + color: var(--d2l-color-celestine); + } + .immersive-back-icon { + font-size: 1rem; + } + .immersive-middle { + border-inline-end: 1px solid var(--d2l-color-gypsum); + border-inline-start: 1px solid var(--d2l-color-gypsum); + flex: 0 1 auto; + font-size: 0.8rem; + margin: 0 24px; + min-width: 0; + overflow: hidden; + padding: 0 24px; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + } + @media (max-width: 615px) { + .immersive-middle { + margin: 0 18px; + padding: 0 18px; + } + } + .immersive-right { + align-items: center; + display: flex; + flex: 0 0 auto; + gap: 8px; + } + .immersive-right .nav-icon-btn { + font-size: 0.7rem; + } +`; diff --git a/components/page/page.js b/components/page/page.js new file mode 100644 index 00000000000..9157c2a78af --- /dev/null +++ b/components/page/page.js @@ -0,0 +1,213 @@ +import '../colors/colors.js'; +import '../button/floating-buttons.js'; +import { css, html, LitElement, nothing } from 'lit'; +import { classMap } from 'lit/directives/class-map.js'; +import { LocalizeCoreElement } from '../../helpers/localize-core-element.js'; + +/** + * Component for laying out a page, with header, optional footer and optional navigation or supporting panels + * @slot - The main content of the page (expecting d2l-page-main) + * @slot header - The header content of the page (expecting d2l-page-header-*) + * @slot side-nav - The side navigation content of the page (expecting d2l-page-side-nav) + * @slot supporting - The supporting content of the page (expecting d2l-page-supporting) + * @slot footer - The footer content of the page (expecting d2l-page-footer) + */ +class Page extends LocalizeCoreElement(LitElement) { + + static properties = { + /** + * Width type of the page and its underlying pieces + * @type {'normal'|'wide'|'fullscreen'} + */ + widthType: { type: String, attribute: 'width-type' }, + _headerIsSticky: { state: true }, + _slotVisibility: { state: true } + }; + + static styles = css` + :host { + --d2l-page-header-max-width: 1230px; + --d2l-page-content-max-width: 1230px; + --d2l-page-footer-max-width: 1230px; + --d2l-page-margin-inline: auto; + } + + :host([width-type="wide"]) { + --d2l-page-header-max-width: 1440px; + --d2l-page-content-max-width: 1440px; + --d2l-page-footer-max-width: 1440px; + } + + :host([width-type="fullscreen"]) { + --d2l-page-header-max-width: 100%; + --d2l-page-content-max-width: 100%; + --d2l-page-footer-max-width: 100%; + } + + .page.header-sticky .header { + position: sticky; + top: 0; + z-index: 15; /* To be over sticky content of our core components */ + } + + .content { + display: flex; + margin-inline: var(--d2l-page-margin-inline, 0); + max-width: var(--d2l-page-content-max-width, 100%); + padding-bottom: var(--d2l-page-footer-height, 0); /* Reserve space for fixed footer */ + } + + main { + flex: 1; + min-width: min(400px, 100%); /* Actual min width TBD */ + } + + .side-nav-panel, + .supporting-panel { + height: calc(100vh - var(--d2l-page-header-height, 0) - var(--d2l-page-footer-height, 0)); + overflow: clip auto; + position: sticky; + top: var(--d2l-page-header-height, 0); + } + + .divider { + background-color: var(--d2l-color-gypsum); + flex: none; + width: 4px; + } + + .footer:not([hidden]), + .floating-buttons-container { + display: inline; + } + .fixed-footer { + background-color: white; + box-shadow: 0 -2px 4px rgba(32, 33, 34, 0.2); /* ferrite */ + inset: auto 0 0; + padding: 0.75rem 0; + position: fixed; + z-index: 10; /* To be over sticky content of our core components */ + } + .footer-contents { + margin-inline: var(--d2l-page-margin-inline, 0); + max-width: var(--d2l-page-footer-max-width, 100%); + } + `; + + constructor() { + super(); + + this.widthType = 'normal'; + this._headerIsSticky = false; + this._slotVisibility = {}; + this.#resizeObserver = new ResizeObserver(entries => { + for (const entry of entries) { + if (entry.target.classList.contains('header')) { + const height = this._headerIsSticky ? entry.target.offsetHeight : 0; + this.style.setProperty('--d2l-page-header-height', `${height}px`); + } else if (entry.target.classList.contains('footer')) { + const height = entry.target.classList.contains('fixed-footer') ? entry.target.offsetHeight : 0; + this.style.setProperty('--d2l-page-footer-height', `${height}px`); + } + } + }); + } + + disconnectedCallback() { + super.disconnectedCallback(); + this.#resizeObserver.disconnect(); + } + + firstUpdated() { + const header = this.shadowRoot.querySelector('.header'); + const footer = this.shadowRoot.querySelector('.footer'); + if (header) this.#resizeObserver.observe(header); + if (footer) this.#resizeObserver.observe(footer); + } + + render() { + const pageClasses = { + 'page': true, + 'header-sticky': this._headerIsSticky + }; + + return html` +
+ ${this.#renderHeader()} +
+ ${this.#renderSideNavPanel()} +
+ ${this.#renderSupportingPanel()} +
+ ${this.#renderFooter()} +
+ `; + } + + #resizeObserver; + + #handleHeaderSlotChange(e) { + const nodes = e.target.assignedNodes(); + //this._headerIsSticky = nodes.some(node => node.tagName.toLowerCase() === 'd2l-page-header-immersive'); + this._headerIsSticky = nodes.some(node => node.id === 'immersive-nav'); // temp until the official component exists + } + + #handleSlotVisibilityChange(e) { + const key = e.target.name; + const nodes = e.target.assignedNodes(); + this._slotVisibility = { ...this._slotVisibility, [key]: nodes.length !== 0 }; + } + + #renderFloatingButtons(footerContents) { + // Floating buttons needs to be wrapped as it spawns a sibling element that should be cleaned up as one by Lit + return html` +
+ + ${footerContents} + +
+ `; + } + + #renderFooter() { + const fixedFooter = this._slotVisibility['side-nav'] || this._slotVisibility['supporting']; + const footerContainerClasses = { 'footer': true, 'fixed-footer': fixedFooter }; + const footerContents = html``; + return html` +
+ ${fixedFooter ? footerContents : this.#renderFloatingButtons(footerContents)} +
+ `; + } + + #renderHeader() { + return html` +
+ +
+ `; + } + + #renderSideNavPanel() { + return html` + + ${this._slotVisibility['side-nav'] ? html`
` : nothing} + `; + } + + #renderSupportingPanel() { + return html` + ${this._slotVisibility['supporting'] ? html`
` : nothing} + + `; + } + +} + +customElements.define('d2l-page', Page); diff --git a/components/page/test/page.axe.js b/components/page/test/page.axe.js new file mode 100644 index 00000000000..0cb23386687 --- /dev/null +++ b/components/page/test/page.axe.js @@ -0,0 +1,40 @@ +import '../page.js'; +import { expect, fixture, html } from '@brightspace-ui/testing'; + +describe('page', () => { + + it('single panel', async() => { + const elem = await fixture(html` + +
Header
+
Content
+
Footer
+
+ `); + await expect(elem).to.be.accessible(); + }); + + it('with side-nav panel', async() => { + const elem = await fixture(html` + +
Header
+
Content
+
Side Nav
+
Footer
+
+ `); + await expect(elem).to.be.accessible(); + }); + + it('with supporting panel', async() => { + const elem = await fixture(html` + +
Header
+
Content
+
Supporting
+
Footer
+
+ `); + await expect(elem).to.be.accessible(); + }); +}); diff --git a/components/page/test/page.test.js b/components/page/test/page.test.js new file mode 100644 index 00000000000..2b8bce6f0e7 --- /dev/null +++ b/components/page/test/page.test.js @@ -0,0 +1,10 @@ +import '../page.js'; +import { runConstructor } from '@brightspace-ui/testing'; + +describe('page', () => { + + it('should construct', () => { + runConstructor('d2l-page'); + }); + +}); diff --git a/index.html b/index.html index fdc60242b71..517691d84f9 100644 --- a/index.html +++ b/index.html @@ -153,6 +153,7 @@

Components

  • d2l-more-less
  • d2l-object-property-list
  • d2l-offscreen
  • +
  • d2l-page
  • d2l-progress
  • d2l-overflow-group
  • d2l-pager-load-more
  • diff --git a/lang/ar.js b/lang/ar.js index e76318e0c36..fe4a4c0d3a6 100644 --- a/lang/ar.js +++ b/lang/ar.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "المزيد", "components.object-property-list.item-placeholder-text": "عنصر نائب", "components.overflow-group.moreActions": "مزيد من الإجراءات", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} مادة واحد} diff --git a/lang/ca.js b/lang/ca.js index 569d4558a69..7b465df428a 100644 --- a/lang/ca.js +++ b/lang/ca.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "more", "components.object-property-list.item-placeholder-text": "Placeholder Item", "components.overflow-group.moreActions": "More Actions", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} item} diff --git a/lang/cy.js b/lang/cy.js index 4a2343d3c01..80f1dedb897 100644 --- a/lang/cy.js +++ b/lang/cy.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "mwy", "components.object-property-list.item-placeholder-text": "Eitem Dalfan", "components.overflow-group.moreActions": "Rhagor o Gamau Gweithredu", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} eitem} diff --git a/lang/da.js b/lang/da.js index 5d1b1c5e6df..37c60f9326d 100644 --- a/lang/da.js +++ b/lang/da.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "flere", "components.object-property-list.item-placeholder-text": "Pladsholder-element", "components.overflow-group.moreActions": "Flere handlinger", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} element} diff --git a/lang/de.js b/lang/de.js index 89d29dc533b..80e362ab3a0 100644 --- a/lang/de.js +++ b/lang/de.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "mehr", "components.object-property-list.item-placeholder-text": "Platzhalterelement", "components.overflow-group.moreActions": "Weitere Aktionen", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} Element} diff --git a/lang/en-gb.js b/lang/en-gb.js index 4830e2e5336..26ca60cb2f9 100644 --- a/lang/en-gb.js +++ b/lang/en-gb.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "more", "components.object-property-list.item-placeholder-text": "Placeholder Item", "components.overflow-group.moreActions": "More Actions", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} item} diff --git a/lang/en.js b/lang/en.js index 569d4558a69..7b465df428a 100644 --- a/lang/en.js +++ b/lang/en.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "more", "components.object-property-list.item-placeholder-text": "Placeholder Item", "components.overflow-group.moreActions": "More Actions", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} item} diff --git a/lang/es-es.js b/lang/es-es.js index fff3d714103..cfb60447b5a 100644 --- a/lang/es-es.js +++ b/lang/es-es.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "más", "components.object-property-list.item-placeholder-text": "Elemento de marcador de posición", "components.overflow-group.moreActions": "Más acciones", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} elemento} diff --git a/lang/es.js b/lang/es.js index 22356ee0d91..8a848f05bb4 100644 --- a/lang/es.js +++ b/lang/es.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "más", "components.object-property-list.item-placeholder-text": "Elemento de marcador de posición", "components.overflow-group.moreActions": "Más acciones", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} elemento} diff --git a/lang/fr-fr.js b/lang/fr-fr.js index 6b15ef59e1e..a87745a48b3 100644 --- a/lang/fr-fr.js +++ b/lang/fr-fr.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "plus", "components.object-property-list.item-placeholder-text": "Élément d’espace réservé", "components.overflow-group.moreActions": "Plus d’actions", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} élément} diff --git a/lang/fr.js b/lang/fr.js index 0f3cc881a93..f8979e193f2 100644 --- a/lang/fr.js +++ b/lang/fr.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "plus", "components.object-property-list.item-placeholder-text": "Élément de paramètre fictif", "components.overflow-group.moreActions": "Plus d’actions", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} élément} diff --git a/lang/haw.js b/lang/haw.js index de2d20a99b9..846b1a0ee09 100644 --- a/lang/haw.js +++ b/lang/haw.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "hou aku", "components.object-property-list.item-placeholder-text": "Mea Paʻa Wahi", "components.overflow-group.moreActions": "Nā Hana Hou", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} mea} diff --git a/lang/hi.js b/lang/hi.js index d4a5947e1f7..16303fc1082 100644 --- a/lang/hi.js +++ b/lang/hi.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "अधिक", "components.object-property-list.item-placeholder-text": "प्लेसहोल्डर आइटम", "components.overflow-group.moreActions": "अधिक क्रियाएँ", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} आइटम} diff --git a/lang/ja.js b/lang/ja.js index c8195d72ca8..57ee858f7fb 100644 --- a/lang/ja.js +++ b/lang/ja.js @@ -147,6 +147,8 @@ export default { "components.more-less.more": "増やす", "components.object-property-list.item-placeholder-text": "プレースホルダの項目", "components.overflow-group.moreActions": "その他のアクション", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, other {{countFormatted} 個の項目} diff --git a/lang/ko.js b/lang/ko.js index f4bcf45798a..a32f2ebbc33 100644 --- a/lang/ko.js +++ b/lang/ko.js @@ -147,6 +147,8 @@ export default { "components.more-less.more": "더 보기", "components.object-property-list.item-placeholder-text": "자리표시자 항목", "components.overflow-group.moreActions": "추가 작업", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, other {해당 항목 수 {countFormatted}개} diff --git a/lang/mi.js b/lang/mi.js index 322c2cb3d8a..7dbfbef6103 100644 --- a/lang/mi.js +++ b/lang/mi.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "ētahi atu", "components.object-property-list.item-placeholder-text": "Tūemi Puriwāhi", "components.overflow-group.moreActions": "Ētahi atu Hohenga", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} Tūemi} diff --git a/lang/nl.js b/lang/nl.js index 3d3e9401311..35ca1a3fe25 100644 --- a/lang/nl.js +++ b/lang/nl.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "meer", "components.object-property-list.item-placeholder-text": "Item tijdelijke aanduiding", "components.overflow-group.moreActions": "Meer acties", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} item} diff --git a/lang/pt.js b/lang/pt.js index 9da99f9b552..26ede4348b6 100644 --- a/lang/pt.js +++ b/lang/pt.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "mais", "components.object-property-list.item-placeholder-text": "Item de espaço reservado", "components.overflow-group.moreActions": "Mais ações", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} item} diff --git a/lang/sv.js b/lang/sv.js index 7d107505040..1e9f65dd9b1 100644 --- a/lang/sv.js +++ b/lang/sv.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "mer", "components.object-property-list.item-placeholder-text": "Platshållarobjekt", "components.overflow-group.moreActions": "Fler åtgärder", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} objekt} diff --git a/lang/th.js b/lang/th.js index 69e39a595ce..899f502c5a6 100644 --- a/lang/th.js +++ b/lang/th.js @@ -148,6 +148,8 @@ export default { "components.more-less.more": "เพิ่มเติม", "components.object-property-list.item-placeholder-text": "รายการตัวแทน", "components.overflow-group.moreActions": "การดำเนินการเพิ่มเติม", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, other {{countFormatted} รายการ} diff --git a/lang/tr.js b/lang/tr.js index 9dfe17ae411..e090ada5e4d 100644 --- a/lang/tr.js +++ b/lang/tr.js @@ -152,6 +152,8 @@ export default { "components.more-less.more": "daha fazla", "components.object-property-list.item-placeholder-text": "Yer Tutucu Öğesi", "components.overflow-group.moreActions": "Daha Fazla Eylem", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, one {{countFormatted} öğe} diff --git a/lang/vi.js b/lang/vi.js index 4d038ec17f0..587270ad2de 100644 --- a/lang/vi.js +++ b/lang/vi.js @@ -146,6 +146,8 @@ export default { "components.more-less.more": "thêm", "components.object-property-list.item-placeholder-text": "Mục giữ chỗ", "components.overflow-group.moreActions": "Thêm các Tác vụ", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, other {{countFormatted} mục} diff --git a/lang/zh-cn.js b/lang/zh-cn.js index 3658b14a471..0129e96669a 100644 --- a/lang/zh-cn.js +++ b/lang/zh-cn.js @@ -147,6 +147,8 @@ export default { "components.more-less.more": "更多", "components.object-property-list.item-placeholder-text": "占位符项目", "components.overflow-group.moreActions": "更多操作", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, other {{countFormatted} 项} diff --git a/lang/zh-tw.js b/lang/zh-tw.js index ac27fda0215..54d8b207006 100644 --- a/lang/zh-tw.js +++ b/lang/zh-tw.js @@ -148,6 +148,8 @@ export default { "components.more-less.more": "較多", "components.object-property-list.item-placeholder-text": "預留位置項目", "components.overflow-group.moreActions": "其他動作", + "components.page.header-nav-label": "Main", + "components.page.side-nav-label": "Side", "components.pageable.info": `{count, plural, other {{countFormatted} 個項目}