{"version":3,"sources":["lib/littleHeader/headerSimple.ts"],"names":[],"mappings":"AAKA,OAAO,2BAA2B,CAAC;AAEnC,OAAO,EAAoC,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEtG,OAAO,sBAAsB,CAAC;AAG9B,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AACnE,eAAO,MAAM,YAAY,uDAAuD,CAAC;AASjF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAsDD;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC;IAEjB,IAAI,KAAK,QAKR;IAED;;;;;SAKK;IACE,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAyB3C;;;OAGG;IACH,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAAsB;IAExD,wBAAwB,IAAI,IAAI;IAKvC;;;OAGG;IACI,OAAO,IAAI,IAAI;CAKvB","file":"../../../lib/littleHeader/headerSimple.d.ts","sourcesContent":["import { singletonProvider } from '../../common/provider.js';\nimport AppContext, { getTools } from '../../common/appContext/appContext.js';\nimport { deepCopy } from '../../common/mutexHelper.js';\nimport { aliasName as loggerAlias, Logger } from '../../common/appContext/logging.js';\nimport { singleton as styleHelper } from '../styleGuide/styleGuide.js';\nimport '../authMgr/authControl.js';\nimport { providerName as authUiProvider } from '../authMgr/authUi.js';\nimport { providerName as dropDownProvider, DropDownModel } from '../littleDropDown/littleDropDown.js';\nimport { html, render } from '../../../../../lit-html/lit-html.js';\nimport './googleAnalytics.js';\nimport { css } from './headerSimple.css.js';\n\nexport const contextConfigPath = 'littleware/lib/lw-header-simple';\nexport const providerName = 'driver/littleware/little-elements/lw-header-simple';\n\ninterface Tools {\n  log: Logger;\n}\n\n// eslint-disable-next-line\nlet tools: Tools = null; // initialized below\n\nexport interface HeaderModel {\n  hamburger: DropDownModel;\n  logo: {\n    text: string,\n    iconUrl: string,\n  },\n}\n\nconst defaultModel: HeaderModel = deepCopy({\n  hamburger: {\n    items: [\n      {\n        className: 'lw-header-simple__hamburger-item',\n        href: '/littleware/index.html',\n        labelKey: 'Littleware',\n      },\n      {\n        className: 'lw-header-simple__hamburger-item',\n        href: '/connect/index.html',\n        labelKey: 'Connect',\n      },\n      {\n        className: 'lw-header-simple__hamburger-item',\n        href: '/apps/index.html',\n        labelKey: 'Apps',\n      },\n    ],\n    root: {\n      className: 'lw-header-simple__hamburger',\n      href: '#hamburger',\n      labelKey: 'little-hamburger',\n    },\n  },\n  logo: {\n    text: 'Logo',\n    iconUrl: '',\n  },\n}, true);\n\nfunction templateFactory(header: SimpleHeader) {\n  const titleStr = (header.getAttribute('title') || 'Home').replace(/[<>\\r\\n]+/g, '');\n  return html`\n  <div class=\"lw-nav-block lw-nav-block_gradient lw-header\">\n      <div class=\"lw-header__logo\">\n                <a href=\"/\" class=\"pure-menu-link\"><i class=\"fas fa-home\"></i>  ${header.model.logo.text}</a>\n      </div>\n      <div class=\"lw-header__title\">\n                ${titleStr}\n      </div>\n      <div class=\"lw-header__authui\">\n        <lw-auth-ui></lw-auth-ui>\n        <lw-auth-control></lw-auth-control>      \n      </div>\n      <div class=\"lw-header__hamburger\">\n          <lw-drop-down .model=${header.model.hamburger}></lw-drop-down>\n      </div>\n    </div>\n  `;\n}\n\n/**\n * SimpleHeader custom element - just has a nav \"home\" button, and a title\n */\nexport class SimpleHeader extends HTMLElement {\n  private modelVal;\n\n  get model() {\n    if (this.modelVal == null) {\n      this.modelVal = defaultModel;\n    }\n    return this.modelVal;\n  }\n\n  /**\n     * Helper initializes the  model property from the\n     * context path if not already set\n     *\n     * @returns\n     */\n  public fetchModel(): Promise<DropDownModel> {\n    if (!this.modelVal) {\n      return AppContext.get().then(\n        (cx) => cx.getConfig(contextConfigPath),\n      ).then(\n        (entry) => (\n          {\n            ...defaultModel,\n            ...entry.defaults,\n            ...entry.overrides,\n          } as HeaderModel\n        ),\n      ).then(\n        (newModel: HeaderModel) => {\n          if (!this.modelVal) {\n            this.modelVal = newModel;\n          }\n          return this.model;\n        },\n      );\n    }\n    return Promise.resolve(this.model);\n  }\n\n\n  /**\n   *  Monitor the 'name' attribute for changes, see:\n   *     https://developer.mozilla.org/en-US/docs/Web/Web_Components/Custom_Elements\n   */\n  static get observedAttributes(): string[] { return ['title']; }\n\n  public attributeChangedCallback(): void {\n    // console.log( \"Attribute change! \" + attrName );\n    this._render();\n  }\n\n  /**\n   * Rebuild the path elements under the arrpie-pielist group\n   * Note: only public to fascilitate testing\n   */\n  public _render(): void {\n    this.fetchModel().then(\n      () => render(templateFactory(this), this),\n    );\n  }\n}\n\nAppContext.get().then(\n  (cx) => {\n    cx.putDefaultConfig(contextConfigPath, defaultModel);\n    cx.putProvider(\n      providerName,\n      {\n        log: loggerAlias,\n        'lw-drop-down': dropDownProvider,\n        'lw-auth-ui': authUiProvider,\n      },\n      async (toolBox) => {\n        // eslint-disable-next-line\n        tools = await getTools(toolBox) as Tools;\n        window.customElements.define('lw-header-simple', SimpleHeader);\n        styleHelper.componentCss.push(css);\n        styleHelper.render();\n        return singletonProvider(() => 'lw-header-simple');\n      },\n    );\n    // force instantiation - otherwise default is lazy\n    cx.onStart({ 'lw-header-simple': providerName }, () => {});\n  },\n);\n"]}