UNPKG

duoyun-ui

Version:

A lightweight desktop UI component library, implemented using Gem

295 lines (291 loc) 12.6 kB
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; import { mediaQuery } from '@mantou/gem/helper/mediaquery'; import { adoptedStyle, customElement, globalemitter, property } from '@mantou/gem/lib/decorators'; import { css, GemElement, html } from '@mantou/gem/lib/element'; import { icons } from '../lib/icons'; import { focusStyle } from '../lib/styles'; import { theme } from '../lib/theme'; import { isRemoteIcon } from '../lib/utils'; import '../elements/divider'; import '../elements/link'; import '../elements/use'; const style = css ` :scope { display: block; background: ${theme.lightBackgroundColor}; line-height: 1.7; } dy-link { outline-offset: 0; display: inline-flex; align-items: center; gap: 0.5em; } .outward { width: 1.2em; } footer { container-type: inline-size; max-width: 80em; margin: auto; } @container (width < 80em) { :is(.social, .links, .terms-wrap) { padding-inline: 1em; } .outward { display: none; } } ul { display: contents; padding: 0; margin: 0; } li { list-style: none; } :is(.terms, .social) { display: flex; flex-wrap: wrap; align-items: center; gap: 2em; } :is(.terms-nav, .help, .social ul) { display: flex; flex-wrap: wrap; align-items: center; gap: 1.5em; } :is(.links, .terms-nav, .help) :where(dy-link, select):not(:hover) { opacity: 0.65; } .social { padding-block: 1.5em; } .social li { display: contents; } h3 { margin: 0; font-weight: 500; font-size: 1em; } .icon { width: 2em; } .links { padding-block: 2.5em; display: flex; flex-wrap: wrap; gap: 1em; } .column { width: 0; min-width: 10em; flex-grow: 1; display: flex; flex-direction: column; gap: 0.6em; } h4 { font-weight: 500; margin-block: 0 1em; font-size: 1em; } .terms-wrap { display: flex; gap: 2em; justify-content: space-between; flex-wrap: wrap; padding-block: 1.5em 3em; } .logo { height: 4em; } .languages { min-width: 10em; font-size: 1em; border: none; border-bottom: 1px solid; background: transparent; padding-block: 0.25em; } `; const mobileStyle = css(mediaQuery.PHONE, /*css*/ ` :scope { .column { width: 100%; } .column + .column { border-block-start: 1px solid ${theme.borderColor}; padding-block-start: 1em; } } `); let DyPatFooterElement = (() => { let _classDecorators = [customElement('dy-pat-footer'), adoptedStyle(mobileStyle), adoptedStyle(style), adoptedStyle(focusStyle)]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = GemElement; let _social_decorators; let _social_initializers = []; let _social_extraInitializers = []; let _links_decorators; let _links_initializers = []; let _links_extraInitializers = []; let _logo_decorators; let _logo_initializers = []; let _logo_extraInitializers = []; let _terms_decorators; let _terms_initializers = []; let _terms_extraInitializers = []; let _help_decorators; let _help_initializers = []; let _help_extraInitializers = []; let _languages_decorators; let _languages_initializers = []; let _languages_extraInitializers = []; let _languagechange_decorators; let _languagechange_initializers = []; let _languagechange_extraInitializers = []; var DyPatFooterElement = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _social_decorators = [property]; _links_decorators = [property]; _logo_decorators = [property]; _terms_decorators = [property]; _help_decorators = [property]; _languages_decorators = [property]; _languagechange_decorators = [globalemitter]; __esDecorate(null, null, _social_decorators, { kind: "field", name: "social", static: false, private: false, access: { has: obj => "social" in obj, get: obj => obj.social, set: (obj, value) => { obj.social = value; } }, metadata: _metadata }, _social_initializers, _social_extraInitializers); __esDecorate(null, null, _links_decorators, { kind: "field", name: "links", static: false, private: false, access: { has: obj => "links" in obj, get: obj => obj.links, set: (obj, value) => { obj.links = value; } }, metadata: _metadata }, _links_initializers, _links_extraInitializers); __esDecorate(null, null, _logo_decorators, { kind: "field", name: "logo", static: false, private: false, access: { has: obj => "logo" in obj, get: obj => obj.logo, set: (obj, value) => { obj.logo = value; } }, metadata: _metadata }, _logo_initializers, _logo_extraInitializers); __esDecorate(null, null, _terms_decorators, { kind: "field", name: "terms", static: false, private: false, access: { has: obj => "terms" in obj, get: obj => obj.terms, set: (obj, value) => { obj.terms = value; } }, metadata: _metadata }, _terms_initializers, _terms_extraInitializers); __esDecorate(null, null, _help_decorators, { kind: "field", name: "help", static: false, private: false, access: { has: obj => "help" in obj, get: obj => obj.help, set: (obj, value) => { obj.help = value; } }, metadata: _metadata }, _help_initializers, _help_extraInitializers); __esDecorate(null, null, _languages_decorators, { kind: "field", name: "languages", static: false, private: false, access: { has: obj => "languages" in obj, get: obj => obj.languages, set: (obj, value) => { obj.languages = value; } }, metadata: _metadata }, _languages_initializers, _languages_extraInitializers); __esDecorate(null, null, _languagechange_decorators, { kind: "field", name: "languagechange", static: false, private: false, access: { has: obj => "languagechange" in obj, get: obj => obj.languagechange, set: (obj, value) => { obj.languagechange = value; } }, metadata: _metadata }, _languagechange_initializers, _languagechange_extraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); DyPatFooterElement = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers(_classThis, _classExtraInitializers); } social = __runInitializers(this, _social_initializers, void 0); links = (__runInitializers(this, _social_extraInitializers), __runInitializers(this, _links_initializers, void 0)); logo = (__runInitializers(this, _links_extraInitializers), __runInitializers(this, _logo_initializers, void 0)); terms = (__runInitializers(this, _logo_extraInitializers), __runInitializers(this, _terms_initializers, void 0)); help = (__runInitializers(this, _terms_extraInitializers), __runInitializers(this, _help_initializers, void 0)); languages = (__runInitializers(this, _help_extraInitializers), __runInitializers(this, _languages_initializers, void 0)); languagechange = (__runInitializers(this, _languages_extraInitializers), __runInitializers(this, _languagechange_initializers, void 0)); #isOutwardLink(href) { return new URL(href, location.origin).origin !== location.origin; } #onChange = (__runInitializers(this, _languagechange_extraInitializers), (evt) => { evt.stopPropagation(); this.languagechange(evt.target.value); }); #renderIcon({ icon, label }, className = '') { return isRemoteIcon(icon) ? html `<img title=${label} class=${className} src=${icon}></img>` : html `<dy-use title=${label} class=${className} .element=${icon}></dy-use>`; } #renderLinks(items, renderOutward = false) { return html ` <ul> ${items.map((item) => html ` <li> <dy-link href=${item.href}> ${'icon' in item ? this.#renderIcon(item, 'icon') : html ` ${item.label} <dy-use v-if=${renderOutward && this.#isOutwardLink(item.href)} class="outward" .element=${icons.outward} ></dy-use> `} </dy-link> </li> `)} </ul> `; } render = () => { return html ` <footer> <div v-if=${!!this.social} class="social"> <h3>${this.social?.label}</h3> ${this.social && this.#renderLinks(this.social.items)} </div> <dy-divider v-if=${!!this.social} size="small"></dy-divider> <nav class="links"> ${this.links?.map(({ label, items }) => html ` <div class="column"> <h4>${label}</h4> ${items && this.#renderLinks(items, true)} </div> `)} </nav> <dy-divider size="small"></dy-divider> <div class="terms-wrap"> <div class="terms"> <div v-if=${!!this.logo}>${this.#renderIcon({ icon: this.logo || '', label: 'Logo' }, 'logo')}</div> <nav v-if=${!!this.terms} class="terms-nav">${this.terms && this.#renderLinks(this.terms)}</nav> </div> <div class="help"> <dy-link v-if=${!!this.help} href=${this.help?.href || ''}> <dy-use .element=${icons.help} style="gap: 0.5em">${this.help?.label}</dy-use> </dy-link> <select v-if=${!!this.languages} class="languages" @change=${this.#onChange}> ${Object.entries(this.languages?.names || {}).map(([lang, name]) => html ` <option ?selected=${this.languages?.current === lang} value=${lang}>${name}</option> `)} </select> </div> </div> </footer> `; }; }; return DyPatFooterElement = _classThis; })(); export { DyPatFooterElement }; //# sourceMappingURL=footer.js.map