c.cacb2283.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. import{_ as e,e as i,t,i as a,y as d,eG as s,b0 as n,aB as c,k as r,eH as o,I as l,J as h,d as p,a2 as u,n as v,j as _,a5 as m,E as y,G as k}from"./main-ec7846c8.js";import{b as g,s as f,d as b,a as $,g as x}from"./c.84dcc549.js";import{f as j,a as F,b as D}from"./c.6f18200a.js";import{S as z}from"./c.79c8c092.js";import{c as C}from"./c.3db34379.js";import"./c.27e9c060.js";import{e as w}from"./c.3f62d98e.js";import{c as I}from"./c.d2f13ac1.js";import{c as P}from"./c.6eb9fcd4.js";import"./c.980b1140.js";import"./c.2f01b935.js";import"./c.15aadbf5.js";import"./c.541a83df.js";import"./c.0e3055bd.js";import"./c.8e28b461.js";import"./c.eea05cf6.js";import"./c.874c8cfd.js";import"./c.fa0ef026.js";import"./c.1024e243.js";import"./c.227858d9.js";import"./c.811f664e.js";import"./c.04ecc0ad.js";import"./c.2610e8cd.js";import"./c.cb96fbc8.js";e([v("ha-target-picker")],(function(e,v){return{F:class extends v{constructor(...i){super(...i),e(this)}},d:[{kind:"field",decorators:[i({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[i({attribute:!1})],key:"value",value:void 0},{kind:"field",decorators:[i()],key:"label",value:void 0},{kind:"field",decorators:[i()],key:"helper",value:void 0},{kind:"field",decorators:[i({type:Array,attribute:"include-domains"})],key:"includeDomains",value:void 0},{kind:"field",decorators:[i({type:Array,attribute:"include-device-classes"})],key:"includeDeviceClasses",value:void 0},{kind:"field",decorators:[i()],key:"deviceFilter",value:void 0},{kind:"field",decorators:[i()],key:"entityRegFilter",value:void 0},{kind:"field",decorators:[i()],key:"entityFilter",value:void 0},{kind:"field",decorators:[i({type:Boolean,reflect:!0})],key:"disabled",value:()=>!1},{kind:"field",decorators:[i({type:Boolean})],key:"horizontal",value:()=>!1},{kind:"field",decorators:[t()],key:"_areas",value:void 0},{kind:"field",decorators:[t()],key:"_devices",value:void 0},{kind:"field",decorators:[t()],key:"_entities",value:void 0},{kind:"field",decorators:[t()],key:"_addMode",value:void 0},{kind:"field",decorators:[a("#input")],key:"_inputElement",value:void 0},{kind:"method",key:"hassSubscribe",value:function(){return[g(this.hass.connection,(e=>{const i={};for(const t of e)i[t.area_id]=t;this._areas=i})),f(this.hass.connection,(e=>{const i={};for(const t of e)i[t.id]=t;this._devices=i})),b(this.hass.connection,(e=>{this._entities=e}))]}},{kind:"method",key:"render",value:function(){return this._areas&&this._devices&&this._entities?d`
  2. ${this.horizontal?d`
  3. <div class="horizontal-container">
  4. ${this._renderChips()} ${this._renderPicker()}
  5. </div>
  6. ${this._renderItems()}
  7. `:d`
  8. <div>
  9. ${this._renderItems()} ${this._renderPicker()}
  10. ${this._renderChips()}
  11. </div>
  12. `}
  13. `:d``}},{kind:"method",key:"_renderItems",value:function(){var e,i,t;return d`
  14. <div class="mdc-chip-set items">
  15. ${null!==(e=this.value)&&void 0!==e&&e.area_id?w(this.value.area_id).map((e=>{const i=this._areas[e];return this._renderChip("area_id",e,(null==i?void 0:i.name)||e,void 0,s)})):""}
  16. ${null!==(i=this.value)&&void 0!==i&&i.device_id?w(this.value.device_id).map((e=>{const i=this._devices[e];return this._renderChip("device_id",e,i?$(i,this.hass):e,void 0,n)})):""}
  17. ${null!==(t=this.value)&&void 0!==t&&t.entity_id?w(this.value.entity_id).map((e=>{const i=this.hass.states[e];return this._renderChip("entity_id",e,i?P(i):e,i)})):""}
  18. </div>
  19. `}},{kind:"method",key:"_renderChips",value:function(){return d`
  20. <div class="mdc-chip-set">
  21. <div
  22. class="mdc-chip area_id add"
  23. .type=${"area_id"}
  24. @click=${this._showPicker}
  25. >
  26. <div class="mdc-chip__ripple"></div>
  27. <ha-svg-icon
  28. class="mdc-chip__icon mdc-chip__icon--leading"
  29. .path=${c}
  30. ></ha-svg-icon>
  31. <span role="gridcell">
  32. <span role="button" tabindex="0" class="mdc-chip__primary-action">
  33. <span class="mdc-chip__text"
  34. >${this.hass.localize("ui.components.target-picker.add_area_id")}</span
  35. >
  36. </span>
  37. </span>
  38. </div>
  39. <div
  40. class="mdc-chip device_id add"
  41. .type=${"device_id"}
  42. @click=${this._showPicker}
  43. >
  44. <div class="mdc-chip__ripple"></div>
  45. <ha-svg-icon
  46. class="mdc-chip__icon mdc-chip__icon--leading"
  47. .path=${c}
  48. ></ha-svg-icon>
  49. <span role="gridcell">
  50. <span role="button" tabindex="0" class="mdc-chip__primary-action">
  51. <span class="mdc-chip__text"
  52. >${this.hass.localize("ui.components.target-picker.add_device_id")}</span
  53. >
  54. </span>
  55. </span>
  56. </div>
  57. <div
  58. class="mdc-chip entity_id add"
  59. .type=${"entity_id"}
  60. @click=${this._showPicker}
  61. >
  62. <div class="mdc-chip__ripple"></div>
  63. <ha-svg-icon
  64. class="mdc-chip__icon mdc-chip__icon--leading"
  65. .path=${c}
  66. ></ha-svg-icon>
  67. <span role="gridcell">
  68. <span role="button" tabindex="0" class="mdc-chip__primary-action">
  69. <span class="mdc-chip__text"
  70. >${this.hass.localize("ui.components.target-picker.add_entity_id")}</span
  71. >
  72. </span>
  73. </span>
  74. </div>
  75. </div>
  76. ${this.helper?d`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:""}
  77. `}},{kind:"method",key:"_showPicker",value:async function(e){var i,t;this._addMode=e.currentTarget.type,await this.updateComplete,await(null===(i=this._inputElement)||void 0===i?void 0:i.focus()),await(null===(t=this._inputElement)||void 0===t?void 0:t.open())}},{kind:"method",key:"_renderChip",value:function(e,i,t,a,s){return d`
  78. <div
  79. class="mdc-chip ${r({[e]:!0})}"
  80. >
  81. ${s?d`<ha-svg-icon
  82. class="mdc-chip__icon mdc-chip__icon--leading"
  83. .path=${s}
  84. ></ha-svg-icon>`:""}
  85. ${a?d`<ha-state-icon
  86. class="mdc-chip__icon mdc-chip__icon--leading"
  87. .state=${a}
  88. ></ha-state-icon>`:""}
  89. <span role="gridcell">
  90. <span role="button" tabindex="0" class="mdc-chip__primary-action">
  91. <span class="mdc-chip__text">${t}</span>
  92. </span>
  93. </span>
  94. ${"entity_id"===e?"":d` <span role="gridcell">
  95. <ha-icon-button
  96. class="expand-btn mdc-chip__icon mdc-chip__icon--trailing"
  97. tabindex="-1"
  98. role="button"
  99. .label=${this.hass.localize("ui.components.target-picker.expand")}
  100. .path=${o}
  101. hideTooltip
  102. .id=${i}
  103. .type=${e}
  104. @click=${this._handleExpand}
  105. ></ha-icon-button>
  106. <paper-tooltip class="expand" animation-delay="0"
  107. >${this.hass.localize(`ui.components.target-picker.expand_${e}`)}</paper-tooltip
  108. >
  109. </span>`}
  110. <span role="gridcell">
  111. <ha-icon-button
  112. class="mdc-chip__icon mdc-chip__icon--trailing"
  113. tabindex="-1"
  114. role="button"
  115. .label=${this.hass.localize("ui.components.target-picker.remove")}
  116. .path=${l}
  117. hideTooltip
  118. .id=${i}
  119. .type=${e}
  120. @click=${this._handleRemove}
  121. ></ha-icon-button>
  122. <paper-tooltip animation-delay="0"
  123. >${this.hass.localize(`ui.components.target-picker.remove_${e}`)}</paper-tooltip
  124. >
  125. </span>
  126. </div>
  127. `}},{kind:"method",key:"_renderPicker",value:function(){switch(this._addMode){case"area_id":return d`
  128. <ha-area-picker
  129. .hass=${this.hass}
  130. id="input"
  131. .type=${"area_id"}
  132. .label=${this.hass.localize("ui.components.target-picker.add_area_id")}
  133. no-add
  134. .deviceFilter=${this.deviceFilter}
  135. .entityFilter=${this.entityRegFilter}
  136. .includeDeviceClasses=${this.includeDeviceClasses}
  137. .includeDomains=${this.includeDomains}
  138. @value-changed=${this._targetPicked}
  139. ></ha-area-picker>
  140. `;case"device_id":return d`
  141. <ha-device-picker
  142. .hass=${this.hass}
  143. id="input"
  144. .type=${"device_id"}
  145. .label=${this.hass.localize("ui.components.target-picker.add_device_id")}
  146. .deviceFilter=${this.deviceFilter}
  147. .entityFilter=${this.entityRegFilter}
  148. .includeDeviceClasses=${this.includeDeviceClasses}
  149. .includeDomains=${this.includeDomains}
  150. @value-changed=${this._targetPicked}
  151. ></ha-device-picker>
  152. `;case"entity_id":return d`
  153. <ha-entity-picker
  154. .hass=${this.hass}
  155. id="input"
  156. .type=${"entity_id"}
  157. .label=${this.hass.localize("ui.components.target-picker.add_entity_id")}
  158. .entityFilter=${this.entityFilter}
  159. .includeDeviceClasses=${this.includeDeviceClasses}
  160. .includeDomains=${this.includeDomains}
  161. @value-changed=${this._targetPicked}
  162. allow-custom-entity
  163. ></ha-entity-picker>
  164. `}return d``}},{kind:"method",key:"_targetPicked",value:function(e){if(e.stopPropagation(),!e.detail.value)return;const i=e.detail.value,t=e.currentTarget;t.value="",this._addMode=void 0,h(this,"value-changed",{value:this.value?{...this.value,[t.type]:this.value[t.type]?[...w(this.value[t.type]),i]:i}:{[t.type]:i}})}},{kind:"method",key:"_handleExpand",value:function(e){const i=e.currentTarget,t=[],a=[];if("area_id"===i.type)Object.values(this._devices).forEach((e=>{var a;e.area_id!==i.id||null!==(a=this.value.device_id)&&void 0!==a&&a.includes(e.id)||!this._deviceMeetsFilter(e)||t.push(e.id)})),this._entities.forEach((e=>{var t;e.area_id!==i.id||null!==(t=this.value.entity_id)&&void 0!==t&&t.includes(e.entity_id)||!this._entityRegMeetsFilter(e)||a.push(e.entity_id)}));else{if("device_id"!==i.type)return;this._entities.forEach((e=>{var t;e.device_id!==i.id||null!==(t=this.value.entity_id)&&void 0!==t&&t.includes(e.entity_id)||!this._entityRegMeetsFilter(e)||a.push(e.entity_id)}))}let d=this.value;a.length&&(d=this._addItems(d,"entity_id",a)),t.length&&(d=this._addItems(d,"device_id",t)),d=this._removeItem(d,i.type,i.id),h(this,"value-changed",{value:d})}},{kind:"method",key:"_handleRemove",value:function(e){const i=e.currentTarget;h(this,"value-changed",{value:this._removeItem(this.value,i.type,i.id)})}},{kind:"method",key:"_addItems",value:function(e,i,t){return{...e,[i]:e[i]?w(e[i]).concat(t):t}}},{kind:"method",key:"_removeItem",value:function(e,i,t){const a=w(e[i]).filter((e=>String(e)!==t));if(a.length)return{...e,[i]:a};const d={...e};return delete d[i],Object.keys(d).length?d:void 0}},{kind:"method",key:"_deviceMeetsFilter",value:function(e){var i;const t=null===(i=this._entities)||void 0===i?void 0:i.filter((i=>i.device_id===e.id));if(this.includeDomains){if(!t||!t.length)return!1;if(!t.some((e=>this.includeDomains.includes(I(e.entity_id)))))return!1}if(this.includeDeviceClasses){if(!t||!t.length)return!1;if(!t.some((e=>{const i=this.hass.states[e.entity_id];return!!i&&(i.attributes.device_class&&this.includeDeviceClasses.includes(i.attributes.device_class))})))return!1}return!this.deviceFilter||this.deviceFilter(e)}},{kind:"method",key:"_entityRegMeetsFilter",value:function(e){if(e.entity_category)return!1;if(this.includeDomains&&!this.includeDomains.includes(I(e.entity_id)))return!1;if(this.includeDeviceClasses){const i=this.hass.states[e.entity_id];if(!i)return!1;if(!i.attributes.device_class||!this.includeDeviceClasses.includes(i.attributes.device_class))return!1}return!this.entityRegFilter||this.entityRegFilter(e)}},{kind:"get",static:!0,key:"styles",value:function(){return p`
  165. ${u(C)}
  166. .horizontal-container {
  167. display: flex;
  168. flex-wrap: wrap;
  169. min-height: 56px;
  170. align-items: center;
  171. }
  172. .mdc-chip {
  173. color: var(--primary-text-color);
  174. }
  175. .items {
  176. z-index: 2;
  177. }
  178. .mdc-chip-set {
  179. padding: 4px 0;
  180. }
  181. .mdc-chip.add {
  182. color: rgba(0, 0, 0, 0.87);
  183. }
  184. .mdc-chip:not(.add) {
  185. cursor: default;
  186. }
  187. .mdc-chip ha-icon-button {
  188. --mdc-icon-button-size: 24px;
  189. display: flex;
  190. align-items: center;
  191. outline: none;
  192. }
  193. .mdc-chip ha-icon-button ha-svg-icon {
  194. border-radius: 50%;
  195. background: var(--secondary-text-color);
  196. }
  197. .mdc-chip__icon.mdc-chip__icon--trailing {
  198. width: 16px;
  199. height: 16px;
  200. --mdc-icon-size: 14px;
  201. color: var(--secondary-text-color);
  202. margin-inline-start: 4px !important;
  203. margin-inline-end: -4px !important;
  204. direction: var(--direction);
  205. }
  206. .mdc-chip__icon--leading {
  207. display: flex;
  208. align-items: center;
  209. justify-content: center;
  210. --mdc-icon-size: 20px;
  211. border-radius: 50%;
  212. padding: 6px;
  213. margin-left: -14px !important;
  214. margin-inline-start: -14px !important;
  215. margin-inline-end: 4px !important;
  216. direction: var(--direction);
  217. }
  218. .expand-btn {
  219. margin-right: 0;
  220. }
  221. .mdc-chip.area_id:not(.add) {
  222. border: 2px solid #fed6a4;
  223. background: var(--card-background-color);
  224. }
  225. .mdc-chip.area_id:not(.add) .mdc-chip__icon--leading,
  226. .mdc-chip.area_id.add {
  227. background: #fed6a4;
  228. }
  229. .mdc-chip.device_id:not(.add) {
  230. border: 2px solid #a8e1fb;
  231. background: var(--card-background-color);
  232. }
  233. .mdc-chip.device_id:not(.add) .mdc-chip__icon--leading,
  234. .mdc-chip.device_id.add {
  235. background: #a8e1fb;
  236. }
  237. .mdc-chip.entity_id:not(.add) {
  238. border: 2px solid #d2e7b9;
  239. background: var(--card-background-color);
  240. }
  241. .mdc-chip.entity_id:not(.add) .mdc-chip__icon--leading,
  242. .mdc-chip.entity_id.add {
  243. background: #d2e7b9;
  244. }
  245. .mdc-chip:hover {
  246. z-index: 5;
  247. }
  248. paper-tooltip.expand {
  249. min-width: 200px;
  250. }
  251. :host([disabled]) .mdc-chip {
  252. opacity: var(--light-disabled-opacity);
  253. pointer-events: none;
  254. }
  255. `}}]}}),z(_));let E=e([v("ha-selector-target")],(function(e,a){class s extends a{constructor(...i){super(...i),e(this)}}return{F:s,d:[{kind:"field",decorators:[i()],key:"hass",value:void 0},{kind:"field",decorators:[i()],key:"selector",value:void 0},{kind:"field",decorators:[i()],key:"value",value:void 0},{kind:"field",decorators:[i()],key:"label",value:void 0},{kind:"field",decorators:[i()],key:"helper",value:void 0},{kind:"field",decorators:[i({type:Boolean})],key:"disabled",value:()=>!1},{kind:"field",decorators:[t()],key:"_entitySources",value:void 0},{kind:"field",decorators:[t()],key:"_entities",value:void 0},{kind:"field",key:"_deviceIntegrationLookup",value:()=>m(x)},{kind:"method",key:"hassSubscribe",value:function(){return[b(this.hass.connection,(e=>{this._entities=e.filter((e=>null!==e.device_id))}))]}},{kind:"method",key:"updated",value:function(e){var i,t;y(k(s.prototype),"updated",this).call(this,e),e.has("selector")&&(null!==(i=this.selector.target.device)&&void 0!==i&&i.integration||null!==(t=this.selector.target.entity)&&void 0!==t&&t.integration)&&!this._entitySources&&j(this.hass).then((e=>{this._entitySources=e}))}},{kind:"method",key:"render",value:function(){var e,i;return(null!==(e=this.selector.target.device)&&void 0!==e&&e.integration||null!==(i=this.selector.target.entity)&&void 0!==i&&i.integration)&&!this._entitySources?d``:d`<ha-target-picker
  256. .hass=${this.hass}
  257. .value=${this.value}
  258. .helper=${this.helper}
  259. .deviceFilter=${this._filterDevices}
  260. .entityFilter=${this._filterEntities}
  261. .disabled=${this.disabled}
  262. ></ha-target-picker>`}},{kind:"field",key:"_filterEntities",value(){return e=>!this.selector.target.entity||F(this.selector.target.entity,e,this._entitySources)}},{kind:"field",key:"_filterDevices",value(){return e=>{if(!this.selector.target.device)return!0;const i=this._entitySources&&this._entities?this._deviceIntegrationLookup(this._entitySources,this._entities):void 0;return D(this.selector.target.device,e,i)}}},{kind:"get",static:!0,key:"styles",value:function(){return p`
  263. ha-target-picker {
  264. display: block;
  265. }
  266. `}}]}}),z(_));export{E as HaTargetSelector};