c.b2d11fca.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import{_ as t,j as o,e,E as i,G as a,y as s,a4 as r,d as n,n as h,t as c,af as l,r as d,g as p,a5 as u,aL as f,aM as v,aN as y,aO as b,aP as m,aQ as k,c as g}from"./main-ec7846c8.js";import{e as _}from"./c.50bfd408.js";import"./c.3db34379.js";import"./c.fbbe4b73.js";import{s as w}from"./c.cb96fbc8.js";import{r as x,a as $}from"./c.0193255c.js";import{c as z}from"./c.eea05cf6.js";import"./c.48e5c8c7.js";import{f as j}from"./c.fe747ba2.js";import{m as L}from"./c.551b8e45.js";import"./c.27e9c060.js";import"./c.f2bb3724.js";import"./c.8e28b461.js";import"./c.743a15a1.js";t([h("hass-subpage")],(function(t,o){class h extends o{constructor(...o){super(...o),t(this)}}return{F:h,d:[{kind:"field",decorators:[e({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[e()],key:"header",value:void 0},{kind:"field",decorators:[e({type:Boolean,attribute:"main-page"})],key:"mainPage",value:()=>!1},{kind:"field",decorators:[e({type:String,attribute:"back-path"})],key:"backPath",value:void 0},{kind:"field",decorators:[e()],key:"backCallback",value:void 0},{kind:"field",decorators:[e({type:Boolean,reflect:!0})],key:"narrow",value:()=>!1},{kind:"field",decorators:[e({type:Boolean})],key:"supervisor",value:()=>!1},{kind:"field",decorators:[x(".content")],key:"_savedScrollPos",value:void 0},{kind:"method",key:"willUpdate",value:function(t){if(i(a(h.prototype),"willUpdate",this).call(this,t),!t.has("hass"))return;const o=t.get("hass");var e,s,r;o&&o.locale===this.hass.locale||(e=this,s="rtl",void 0!==(r=z(this.hass))&&(r=!!r),e.hasAttribute(s)?r||e.removeAttribute(s):!1!==r&&e.setAttribute(s,""))}},{kind:"method",key:"render",value:function(){var t;return s`
  2. <div class="toolbar">
  3. ${this.mainPage||null!==(t=history.state)&&void 0!==t&&t.root?s`
  4. <ha-menu-button
  5. .hassio=${this.supervisor}
  6. .hass=${this.hass}
  7. .narrow=${this.narrow}
  8. ></ha-menu-button>
  9. `:this.backPath?s`
  10. <a href=${this.backPath}>
  11. <ha-icon-button-arrow-prev
  12. .hass=${this.hass}
  13. ></ha-icon-button-arrow-prev>
  14. </a>
  15. `:s`
  16. <ha-icon-button-arrow-prev
  17. .hass=${this.hass}
  18. @click=${this._backTapped}
  19. ></ha-icon-button-arrow-prev>
  20. `}
  21. <div class="main-title">${this.header}</div>
  22. <slot name="toolbar-icon"></slot>
  23. </div>
  24. <div class="content" @scroll=${this._saveScrollPos}><slot></slot></div>
  25. <div id="fab">
  26. <slot name="fab"></slot>
  27. </div>
  28. `}},{kind:"method",decorators:[r({passive:!0})],key:"_saveScrollPos",value:function(t){this._savedScrollPos=t.target.scrollTop}},{kind:"method",key:"_backTapped",value:function(){this.backCallback?this.backCallback():history.back()}},{kind:"get",static:!0,key:"styles",value:function(){return n`
  29. :host {
  30. display: block;
  31. height: 100%;
  32. background-color: var(--primary-background-color);
  33. }
  34. :host([narrow]) {
  35. width: 100%;
  36. position: fixed;
  37. }
  38. .toolbar {
  39. display: flex;
  40. align-items: center;
  41. font-size: 20px;
  42. height: var(--header-height);
  43. padding: 0 16px;
  44. pointer-events: none;
  45. background-color: var(--app-header-background-color);
  46. font-weight: 400;
  47. color: var(--app-header-text-color, white);
  48. border-bottom: var(--app-header-border-bottom, none);
  49. box-sizing: border-box;
  50. }
  51. .toolbar a {
  52. color: var(--sidebar-text-color);
  53. text-decoration: none;
  54. }
  55. ha-menu-button,
  56. ha-icon-button-arrow-prev,
  57. ::slotted([slot="toolbar-icon"]) {
  58. pointer-events: auto;
  59. color: var(--sidebar-icon-color);
  60. }
  61. .main-title {
  62. margin: 0 0 0 24px;
  63. line-height: 20px;
  64. flex-grow: 1;
  65. }
  66. .content {
  67. position: relative;
  68. width: 100%;
  69. height: calc(100% - 1px - var(--header-height));
  70. overflow-y: auto;
  71. overflow: auto;
  72. -webkit-overflow-scrolling: touch;
  73. }
  74. #fab {
  75. position: fixed;
  76. right: calc(16px + env(safe-area-inset-right));
  77. bottom: calc(16px + env(safe-area-inset-bottom));
  78. z-index: 1;
  79. }
  80. :host([narrow]) #fab.tabs {
  81. bottom: calc(84px + env(safe-area-inset-bottom));
  82. }
  83. #fab[is-wide] {
  84. bottom: 24px;
  85. right: 24px;
  86. }
  87. :host([rtl]) #fab {
  88. right: auto;
  89. left: calc(16px + env(safe-area-inset-left));
  90. }
  91. :host([rtl][is-wide]) #fab {
  92. bottom: 24px;
  93. left: 24px;
  94. right: auto;
  95. }
  96. `}}]}}),o);let C=t([h("hacs-repository-panel")],(function(t,o){class r extends o{constructor(...o){super(...o),t(this)}}return{F:r,d:[{kind:"field",decorators:[e({attribute:!1})],key:"hacs",value:void 0},{kind:"field",decorators:[e({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[e({attribute:!1})],key:"narrow",value:void 0},{kind:"field",decorators:[e({attribute:!1})],key:"isWide",value:void 0},{kind:"field",decorators:[e({attribute:!1})],key:"route",value:void 0},{kind:"field",decorators:[e({attribute:!1})],key:"_repository",value:void 0},{kind:"field",decorators:[c()],key:"_error",value:void 0},{kind:"method",key:"connectedCallback",value:function(){i(a(r.prototype),"connectedCallback",this).call(this),document.body.addEventListener("keydown",this._generateMyLink)}},{kind:"method",key:"disconnectedCallback",value:function(){i(a(r.prototype),"disconnectedCallback",this).call(this),document.body.removeEventListener("keydown",this._generateMyLink)}},{kind:"field",key:"_generateMyLink",value(){return t=>{if(!(t.ctrlKey||t.shiftKey||t.metaKey||t.altKey)&&"m"===t.key&&l.location.pathname.startsWith("/hacs/repository/")){if(!this._repository)return;const t=new URLSearchParams({redirect:"hacs_repository",owner:this._repository.full_name.split("/")[0],repository:this._repository.full_name.split("/")[1],category:this._repository.category});window.open(`https://my.home-assistant.io/create-link/?${t.toString()}`,"_blank")}}}},{kind:"method",key:"firstUpdated",value:async function(t){i(a(r.prototype),"firstUpdated",this).call(this,t);const o=_();if(Object.entries(o).length){let t;const e=`${o.owner}/${o.repository}`;if(t=this.hacs.repositories.find((t=>t.full_name.toLocaleLowerCase()===e.toLocaleLowerCase())),!t&&o.category){if(!await w(this,{title:this.hacs.localize("my.add_repository_title"),text:this.hacs.localize("my.add_repository_description",{repository:e}),confirmText:this.hacs.localize("common.add"),dismissText:this.hacs.localize("common.cancel")}))return void(this._error=this.hacs.localize("my.repository_not_found",{repository:e}));try{await d(this.hass,e,o.category),this.hacs.repositories=await p(this.hass),t=this.hacs.repositories.find((t=>t.full_name.toLocaleLowerCase()===e.toLocaleLowerCase()))}catch(t){return void(this._error=t)}}t?this._fetchRepository(String(t.id)):this._error=this.hacs.localize("my.repository_not_found",{repository:e})}else{const t=this.route.path.indexOf("/",1),o=this.route.path.substr(t+1);if(!o)return void(this._error="Missing repositoryId from route");this._fetchRepository(o)}}},{kind:"method",key:"updated",value:function(t){i(a(r.prototype),"updated",this).call(this,t),t.has("repositories")&&this._repository&&this._fetchRepository()}},{kind:"method",key:"_fetchRepository",value:async function(t){try{this._repository=await j(this.hass,t||String(this._repository.id))}catch(t){this._error=null==t?void 0:t.message}}},{kind:"field",key:"_getAuthors",value:()=>u((t=>{const o=[];if(!t.authors)return o;if(t.authors.forEach((t=>o.push(t.replace("@","")))),0===o.length){const e=t.full_name.split("/")[0];if(["custom-cards","custom-components","home-assistant-community-themes"].includes(e))return o;o.push(e)}return o}))},{kind:"method",key:"render",value:function(){if(this._error)return s`<hass-error-screen .error=${this._error}></hass-error-screen>`;if(!this._repository)return s`<hass-loading-screen></hass-loading-screen>`;const t=this._getAuthors(this._repository);return s`
  97. <hass-subpage
  98. .hass=${this.hass}
  99. .narrow=${this.narrow}
  100. .route=${this.route}
  101. .header=${this._repository.name}
  102. hasFab
  103. >
  104. <ha-icon-overflow-menu
  105. .hass=${this.hass}
  106. slot="toolbar-icon"
  107. narrow
  108. .items=${$(this,this._repository)}
  109. >
  110. </ha-icon-overflow-menu>
  111. <div class="content">
  112. <div class="chips">
  113. ${this._repository.installed?s`
  114. <ha-chip title="${this.hacs.localize("dialog_info.version_installed")}" hasIcon>
  115. <ha-svg-icon slot="icon" .path=${f}></ha-svg-icon>
  116. ${this._repository.installed_version}
  117. </ha-chip>
  118. `:""}
  119. ${t?t.map((t=>s`<hacs-link .url="https://github.com/${t}">
  120. <ha-chip title="${this.hacs.localize("dialog_info.author")}" hasIcon>
  121. <ha-svg-icon slot="icon" .path=${v}></ha-svg-icon>
  122. @${t}
  123. </ha-chip>
  124. </hacs-link>`)):""}
  125. ${this._repository.downloads?s` <ha-chip hasIcon title="${this.hacs.localize("dialog_info.downloads")}">
  126. <ha-svg-icon slot="icon" .path=${y}></ha-svg-icon>
  127. ${this._repository.downloads}
  128. </ha-chip>`:""}
  129. <ha-chip title="${this.hacs.localize("dialog_info.stars")}" hasIcon>
  130. <ha-svg-icon slot="icon" .path=${b}></ha-svg-icon>
  131. ${this._repository.stars}
  132. </ha-chip>
  133. <hacs-link .url="https://github.com/${this._repository.full_name}/issues">
  134. <ha-chip title="${this.hacs.localize("dialog_info.open_issues")}" hasIcon>
  135. <ha-svg-icon slot="icon" .path=${m}></ha-svg-icon>
  136. ${this._repository.issues}
  137. </ha-chip>
  138. </hacs-link>
  139. </div>
  140. ${L.html(this._repository.additional_info||this.hacs.localize("dialog_info.no_info"),this._repository)}
  141. </div>
  142. ${this._repository.installed_version?"":s`<ha-fab
  143. .label=${this.hacs.localize("common.download")}
  144. .extended=${!this.narrow}
  145. @click=${this._downloadRepositoryDialog}
  146. >
  147. <ha-svg-icon slot="icon" .path=${k}></ha-svg-icon>
  148. </ha-fab>`}
  149. </hass-subpage>
  150. `}},{kind:"method",key:"_downloadRepositoryDialog",value:function(){this.dispatchEvent(new CustomEvent("hacs-dialog",{detail:{type:"download",repository:this._repository.id},bubbles:!0,composed:!0}))}},{kind:"get",static:!0,key:"styles",value:function(){return[g,n`
  151. hass-loading-screen {
  152. --app-header-background-color: var(--sidebar-background-color);
  153. --app-header-text-color: var(--sidebar-text-color);
  154. height: 100vh;
  155. }
  156. hass-subpage {
  157. position: absolute;
  158. width: 100vw;
  159. }
  160. ha-svg-icon {
  161. color: var(--hcv-text-color-on-background);
  162. }
  163. ha-fab {
  164. position: fixed;
  165. float: right;
  166. right: calc(18px + env(safe-area-inset-right));
  167. bottom: calc(16px + env(safe-area-inset-bottom));
  168. z-index: 1;
  169. }
  170. ha-fab.rtl {
  171. float: left;
  172. right: auto;
  173. left: calc(18px + env(safe-area-inset-left));
  174. }
  175. .content {
  176. padding: 12px;
  177. margin-bottom: 64px;
  178. }
  179. .chips {
  180. display: flex;
  181. flex-wrap: wrap;
  182. padding-bottom: 8px;
  183. gap: 4px;
  184. }
  185. @media all and (max-width: 500px) {
  186. .content {
  187. margin: 8px 4px 64px;
  188. }
  189. }
  190. `]}}]}}),o);export{C as HacsRepositoryPanel};