homebridge-config-ui-x 5.3.1-beta.9 → 5.4.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/CHANGELOG.md +28 -4
  2. package/dist/bin/standalone.d.ts +2 -0
  3. package/dist/bin/standalone.js +58 -0
  4. package/dist/bin/standalone.js.map +1 -0
  5. package/dist/modules/platform-tools/terminal/terminal.service.js +26 -26
  6. package/dist/modules/platform-tools/terminal/terminal.service.js.map +1 -1
  7. package/dist/modules/server/server.service.js +1 -1
  8. package/package.json +4 -4
  9. package/public/assets/monaco-0.21.3/LICENSE +21 -0
  10. package/public/assets/monaco-0.21.3/README.md +96 -0
  11. package/public/assets/monaco-0.21.3/ThirdPartyNotices.txt +283 -0
  12. package/public/assets/monaco-0.21.3/package.json +38 -0
  13. package/public/assets/service-icons/air-purifier.svg +50 -0
  14. package/public/assets/{hap-icons → service-icons}/air-quality-sensor.svg +2 -2
  15. package/public/assets/service-icons/carbon-dioxide-sensor.svg +53 -0
  16. package/public/assets/service-icons/carbon-monoxide-sensor.svg +53 -0
  17. package/public/assets/service-icons/contact-sensor.svg +45 -0
  18. package/public/assets/service-icons/door.svg +28 -0
  19. package/public/assets/service-icons/doorbell.svg +7 -0
  20. package/public/assets/service-icons/fan.svg +15 -0
  21. package/public/assets/service-icons/filter-maintenance.svg +54 -0
  22. package/public/assets/service-icons/garage-door.svg +120 -0
  23. package/public/assets/service-icons/lock-mechanism.svg +39 -0
  24. package/public/assets/service-icons/microphone.svg +12 -0
  25. package/public/assets/service-icons/security-system.svg +19 -0
  26. package/public/assets/service-icons/smoke-sensor.svg +38 -0
  27. package/public/assets/service-icons/speaker.svg +28 -0
  28. package/public/assets/service-icons/stateless-programmable-switch.svg +18 -0
  29. package/public/assets/service-icons/television.svg +17 -0
  30. package/public/assets/service-icons/washing-machine.svg +34 -0
  31. package/public/assets/service-icons/window-covering.svg +44 -0
  32. package/public/assets/service-icons/window.svg +67 -0
  33. package/public/{chunk-F3MG6UU6.js → chunk-2C3X2ESN.js} +1 -1
  34. package/public/{chunk-KZE6PFIV.js → chunk-2OCOAM4A.js} +1 -1
  35. package/public/{chunk-6WLDPZET.js → chunk-2ZNT5NFF.js} +1 -1
  36. package/public/{chunk-TP4NTACL.js → chunk-374Z43YT.js} +1 -1
  37. package/public/{chunk-O64A5SOM.js → chunk-4MSMCRWY.js} +1 -1
  38. package/public/{chunk-UPWD7C23.js → chunk-5E4D6S2D.js} +1 -1
  39. package/public/{chunk-7OOZYU5L.js → chunk-6GNRMPYG.js} +1 -1
  40. package/public/{chunk-GBILZGBS.js → chunk-6SCVQL7O.js} +1 -1
  41. package/public/{chunk-WYH2UWLZ.js → chunk-6Z4BC2RF.js} +1 -1
  42. package/public/{chunk-VPU5FNT3.js → chunk-7EQFLCW4.js} +1 -1
  43. package/public/{chunk-HC4PHBTI.js → chunk-A6R22QNC.js} +1 -1
  44. package/public/{chunk-FG353N2G.js → chunk-ABYZJSK6.js} +1 -1
  45. package/public/{chunk-GYBGIQ6I.js → chunk-AVU6QUI7.js} +1 -1
  46. package/public/chunk-BFTOQBAD.js +1 -0
  47. package/public/{chunk-2FTHA637.js → chunk-CMOVUX6R.js} +1 -1
  48. package/public/{chunk-AKD24HZC.js → chunk-D7VCPH6W.js} +1 -1
  49. package/public/{chunk-TVRTT63H.js → chunk-DARPEPKA.js} +1 -1
  50. package/public/{chunk-B5AYH2BC.js → chunk-DBWFIET4.js} +1 -1
  51. package/public/{chunk-25NXLXGL.js → chunk-DFFTJVRY.js} +1 -1
  52. package/public/{chunk-GEXFURZE.js → chunk-E65H7FZB.js} +1 -1
  53. package/public/{chunk-S5VOLN5S.js → chunk-EPQYDY7D.js} +1 -1
  54. package/public/{chunk-H337OZRD.js → chunk-FVKMBZOU.js} +1 -1
  55. package/public/{chunk-O4DNLPYF.js → chunk-FXJWZ2UF.js} +1 -1
  56. package/public/{chunk-HWXVYPUM.js → chunk-G3NJOEY5.js} +3 -3
  57. package/public/{chunk-RPRM66DV.js → chunk-H45DK7IX.js} +1 -1
  58. package/public/{chunk-KB5AKZT6.js → chunk-H577TIGW.js} +1 -1
  59. package/public/{chunk-IMT3YYMD.js → chunk-H5WTK5UT.js} +1 -1
  60. package/public/{chunk-NO7RIAKI.js → chunk-HWAWBYVQ.js} +1 -1
  61. package/public/{chunk-23XH7HBN.js → chunk-ID5T5AYQ.js} +1 -1
  62. package/public/chunk-IOKYXV5M.js +4 -0
  63. package/public/{chunk-FXOH6MUI.js → chunk-IVOTC2PL.js} +1 -1
  64. package/public/{chunk-YP6XHKAT.js → chunk-IVW2QO2K.js} +1 -1
  65. package/public/{chunk-MJK6N6PA.js → chunk-IWFKJHPR.js} +1 -1
  66. package/public/{chunk-S7AIVWKK.js → chunk-J6CJ26QN.js} +1 -1
  67. package/public/chunk-JLROZUWO.js +1 -0
  68. package/public/{chunk-7G2YYPIL.js → chunk-KOXOFXQT.js} +1 -1
  69. package/public/chunk-KZKL7DGI.js +1 -0
  70. package/public/{chunk-5DCA7TNW.js → chunk-LMT24EZF.js} +1 -1
  71. package/public/{chunk-DE76AGV3.js → chunk-LUDY7LZF.js} +1 -1
  72. package/public/{chunk-G6OT66TG.js → chunk-LVFD4QWO.js} +1 -1
  73. package/public/{chunk-O3ZUJHYU.js → chunk-M4MHMWN6.js} +1 -1
  74. package/public/{chunk-5KQOUNSC.js → chunk-MDKPA3TY.js} +1 -1
  75. package/public/{chunk-T5INXMWC.js → chunk-MYKATCOT.js} +1 -1
  76. package/public/{chunk-OFGO6QZU.js → chunk-N6IDOKML.js} +1 -1
  77. package/public/chunk-NGOAZV2I.js +1 -0
  78. package/public/chunk-OA7Y3E5A.js +2 -0
  79. package/public/{chunk-Y6FHYF3A.js → chunk-OTN4VCOA.js} +1 -1
  80. package/public/{chunk-2APX6TML.js → chunk-PEVTQRDC.js} +1 -1
  81. package/public/chunk-Q3FVCDIV.js +4 -0
  82. package/public/{chunk-S7D4ALZN.js → chunk-QX6BFGHZ.js} +1 -1
  83. package/public/{chunk-RYQXCZEW.js → chunk-RRR64OMY.js} +1 -1
  84. package/public/{chunk-6TXOJ5PS.js → chunk-RUSXMBPM.js} +1 -1
  85. package/public/{chunk-P72KTIAV.js → chunk-RWJLVKQ2.js} +1 -1
  86. package/public/{chunk-3E7ISGPA.js → chunk-SXGEZIU3.js} +1 -1
  87. package/public/chunk-T2KT7MKM.js +1 -0
  88. package/public/{chunk-KKMV35EJ.js → chunk-V6JVOQNN.js} +1 -1
  89. package/public/{chunk-VWWI5W24.js → chunk-VAECASQ2.js} +1 -1
  90. package/public/{chunk-HJ4A27B3.js → chunk-VGFL2OLU.js} +1 -1
  91. package/public/{chunk-UKEZ5GGN.js → chunk-WCOLHYTR.js} +1 -1
  92. package/public/{chunk-E3QIV2NC.js → chunk-WP7COPMO.js} +1 -1
  93. package/public/chunk-WQRMVCIC.js +12 -0
  94. package/public/{chunk-RHCMG64A.js → chunk-WTDK2HE6.js} +1 -1
  95. package/public/{chunk-AJZXTLH5.js → chunk-XPBU4MVM.js} +1 -1
  96. package/public/{chunk-IH6TCZKW.js → chunk-XWUCC7S4.js} +1 -1
  97. package/public/chunk-Y4MINXYD.js +1 -0
  98. package/public/{chunk-CYSLA66J.js → chunk-YU73VG73.js} +1 -1
  99. package/public/{chunk-V2JQMGNW.js → chunk-Z2T4OZ7I.js} +1 -1
  100. package/public/{chunk-OH5DGT3H.js → chunk-ZMOWQI2Q.js} +1 -1
  101. package/public/{chunk-3T4CLJZB.js → chunk-ZUTM7S4U.js} +1 -1
  102. package/public/index.html +2 -2
  103. package/public/main-KJQYL5FU.js +1 -0
  104. package/public/media/fa-brands-400-Q3XCMWHQ.woff2 +0 -0
  105. package/public/media/fa-brands-400-R2XQZCET.ttf +0 -0
  106. package/public/media/fa-regular-400-QSNYFYRT.woff2 +0 -0
  107. package/public/media/fa-regular-400-XUOPSR7E.ttf +0 -0
  108. package/public/media/fa-solid-900-5ZUYHGA7.woff2 +0 -0
  109. package/public/media/fa-solid-900-PJNKLK6W.ttf +0 -0
  110. package/public/styles-XESJTHVW.css +1 -0
  111. package/public/assets/hap-icons/air-purifier.svg +0 -62
  112. package/public/assets/hap-icons/carbon-dioxide-sensor.svg +0 -72
  113. package/public/assets/hap-icons/carbon-monoxide-sensor.svg +0 -72
  114. package/public/assets/hap-icons/contact-sensor-closed.svg +0 -36
  115. package/public/assets/hap-icons/contact-sensor-open.svg +0 -81
  116. package/public/assets/hap-icons/door-closed.svg +0 -33
  117. package/public/assets/hap-icons/door-open.svg +0 -49
  118. package/public/assets/hap-icons/doorbell.svg +0 -9
  119. package/public/assets/hap-icons/fan-off.svg +0 -25
  120. package/public/assets/hap-icons/fan-on.svg +0 -25
  121. package/public/assets/hap-icons/filter-maintenance.svg +0 -26
  122. package/public/assets/hap-icons/garage-door.svg +0 -25
  123. package/public/assets/hap-icons/microphone.svg +0 -14
  124. package/public/assets/hap-icons/security-system-active.svg +0 -103
  125. package/public/assets/hap-icons/security-system-off.svg +0 -69
  126. package/public/assets/hap-icons/security-system-triggered.svg +0 -103
  127. package/public/assets/hap-icons/smoke-sensor.svg +0 -59
  128. package/public/assets/hap-icons/speaker.svg +0 -46
  129. package/public/assets/hap-icons/stateless-programmable-switch.svg +0 -52
  130. package/public/assets/hap-icons/television.svg +0 -16
  131. package/public/assets/hap-icons/window-closed.svg +0 -86
  132. package/public/assets/hap-icons/window-covering-closed.svg +0 -49
  133. package/public/assets/hap-icons/window-covering-open.svg +0 -44
  134. package/public/assets/hap-icons/window-open.svg +0 -137
  135. package/public/chunk-3MXSPHL2.js +0 -1
  136. package/public/chunk-7SQCM466.js +0 -1
  137. package/public/chunk-CFYGJBJN.js +0 -1
  138. package/public/chunk-CPAHENLQ.js +0 -1
  139. package/public/chunk-DEQA7IOH.js +0 -4
  140. package/public/chunk-HVZJ7SFU.js +0 -1
  141. package/public/chunk-IDOLIFNQ.js +0 -1
  142. package/public/chunk-MADTYIL6.js +0 -12
  143. package/public/chunk-RJOGO4M5.js +0 -2
  144. package/public/chunk-WEVBEUAJ.js +0 -4
  145. package/public/main-KCMESMSJ.js +0 -1
  146. package/public/media/fa-brands-400-WVWUIHCX.woff2 +0 -0
  147. package/public/media/fa-regular-400-I5DJMINO.woff2 +0 -0
  148. package/public/media/fa-solid-900-C5F6UWGT.woff2 +0 -0
  149. package/public/styles-LG2MDN7O.css +0 -1
  150. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  151. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/base/worker/workerMain.js +0 -0
  152. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/basic-languages/shell/shell.js +0 -0
  153. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/editor/editor.main.css +0 -0
  154. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/editor/editor.main.js +0 -0
  155. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/editor/editor.main.nls.js +0 -0
  156. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/language/json/jsonMode.js +0 -0
  157. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/language/json/jsonWorker.js +0 -0
  158. /package/public/assets/{monaco → monaco-0.21.3}/min/vs/loader.js +0 -0
  159. /package/public/assets/{hap-icons → service-icons}/robot-vacuum.svg +0 -0
@@ -0,0 +1,54 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- top outer ellipse -->
3
+ <ellipse
4
+ class="status"
5
+ cx="16"
6
+ cy="7"
7
+ rx="11"
8
+ ry="5"
9
+ stroke="#7f7f7f"
10
+ stroke-width="1.75"
11
+ fill="#4caf50"
12
+ fill-opacity="0.5"
13
+ />
14
+
15
+ <!-- top inner ellipse -->
16
+ <ellipse
17
+ class="back"
18
+ cx="16"
19
+ cy="7"
20
+ rx="6"
21
+ ry="2"
22
+ stroke="#7f7f7f"
23
+ stroke-width="1"
24
+ fill="#e0e0e0"
25
+ fill-opacity="1"
26
+ />
27
+
28
+ <!-- side walls -->
29
+ <line x1="5" y1="7" x2="5" y2="27.7" stroke="#7f7f7f" stroke-width="1.75" />
30
+ <line x1="27" y1="7" x2="27" y2="27.7" stroke="#7f7f7f" stroke-width="1.75" />
31
+
32
+ <!-- base arc -->
33
+ <path d="M4.7,27 A13,6.9 0 0,0 27.3,27" stroke="#7f7f7f" stroke-width="1.75" fill="none" />
34
+
35
+ <!-- outer front lines -->
36
+ <line x1="7" y1="10" x2="7" y2="29" stroke="#7f7f7f" stroke-width="1" />
37
+ <line x1="9" y1="11" x2="9" y2="29" stroke="#7f7f7f" stroke-width="1" />
38
+ <line x1="11" y1="12" x2="11" y2="30" stroke="#7f7f7f" stroke-width="1" />
39
+ <line x1="13" y1="12" x2="13" y2="30" stroke="#7f7f7f" stroke-width="1" />
40
+ <line x1="15" y1="12" x2="15" y2="30" stroke="#7f7f7f" stroke-width="1" />
41
+ <line x1="17" y1="12" x2="17" y2="30" stroke="#7f7f7f" stroke-width="1" />
42
+ <line x1="19" y1="12" x2="19" y2="30" stroke="#7f7f7f" stroke-width="1" />
43
+ <line x1="21" y1="12" x2="21" y2="30" stroke="#7f7f7f" stroke-width="1" />
44
+ <line x1="23" y1="11" x2="23" y2="29" stroke="#7f7f7f" stroke-width="1" />
45
+ <line x1="25" y1="10" x2="25" y2="29" stroke="#7f7f7f" stroke-width="1" />
46
+
47
+ <!-- inner back lines -->
48
+ <line x1="11" y1="6" x2="11" y2="8" stroke="#7f7f7f" stroke-width="1" />
49
+ <line x1="13" y1="5" x2="13" y2="9" stroke="#7f7f7f" stroke-width="1" />
50
+ <line x1="15" y1="5" x2="15" y2="9" stroke="#7f7f7f" stroke-width="1" />
51
+ <line x1="17" y1="5" x2="17" y2="9" stroke="#7f7f7f" stroke-width="1" />
52
+ <line x1="19" y1="5" x2="19" y2="9" stroke="#7f7f7f" stroke-width="1" />
53
+ <line x1="21" y1="6" x2="21" y2="8" stroke="#7f7f7f" stroke-width="1" />
54
+ </svg>
@@ -0,0 +1,120 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- circle in roof -->
3
+ <circle
4
+ class="window"
5
+ cx="15.5"
6
+ cy="10.25"
7
+ r="3"
8
+ stroke="#7f7f7f"
9
+ stroke-width="0.5"
10
+ fill="#1976d2"
11
+ fill-opacity="0.5"
12
+ />
13
+
14
+ <!-- left roof line -->
15
+ <line x1="1" y1="12" x2="15" y2="1" stroke="#7f7f7f" stroke-width="1.5" stroke-linecap="round" />
16
+
17
+ <!-- right roof line -->
18
+ <line x1="31" y1="12" x2="16" y2="1" stroke="#7f7f7f" stroke-width="1.5" stroke-linecap="round" />
19
+
20
+ <!-- roof summit -->
21
+ <circle cx="15.5" cy="1.3" r="0.5" stroke="#7f7f7f" stroke-width="1.5" />
22
+
23
+ <!-- side left line -->
24
+ <line x1="3" y1="11" x2="3" y2="31" stroke="#7f7f7f" stroke-width="1.5" stroke-linecap="round" />
25
+
26
+ <!-- right side line -->
27
+ <line x1="29" y1="11" x2="29" y2="31" stroke="#7f7f7f" stroke-width="1.5" stroke-linecap="round" />
28
+
29
+ <!-- bottom left horizontal line -->
30
+ <line x1="3" y1="31" x2="6" y2="31" stroke="#7f7f7f" stroke-width="1.5" stroke-linecap="round" />
31
+
32
+ <!-- bottom right horizontal line -->
33
+ <line x1="26" y1="31" x2="29" y2="31" stroke="#7f7f7f" stroke-width="1.5" stroke-linecap="round" />
34
+
35
+ <!-- left garage line -->
36
+ <line x1="6" y1="17" x2="6" y2="31" stroke="#7f7f7f" stroke-width="1.5" />
37
+
38
+ <!-- right garage line -->
39
+ <line x1="26" y1="17" x2="26" y2="31" stroke="#7f7f7f" stroke-width="1.5" />
40
+
41
+ <!-- garage door lines -->
42
+ <line x1="5.25" y1="17" x2="26.75" y2="17" stroke="#7f7f7f" stroke-width="1" />
43
+ <line
44
+ class="line line1"
45
+ x1="6.75"
46
+ y1="18"
47
+ x2="25.25"
48
+ y2="18"
49
+ stroke="#1976d2"
50
+ stroke-width="1"
51
+ stroke-opacity="0.5"
52
+ />
53
+ <line class="line line2" x1="5.25" y1="19" x2="26.75" y2="19" stroke="#7f7f7f" stroke-width="1" />
54
+ <line
55
+ class="line line3"
56
+ x1="6.75"
57
+ y1="20"
58
+ x2="25.25"
59
+ y2="20"
60
+ stroke="#1976d2"
61
+ stroke-width="1"
62
+ stroke-opacity="0.5"
63
+ />
64
+ <line class="line line4" x1="5.25" y1="21" x2="26.75" y2="21" stroke="#7f7f7f" stroke-width="1" />
65
+ <line
66
+ class="line line5"
67
+ x1="6.75"
68
+ y1="22"
69
+ x2="25.25"
70
+ y2="22"
71
+ stroke="#1976d2"
72
+ stroke-width="1"
73
+ stroke-opacity="0.5"
74
+ />
75
+ <line class="line line6" x1="5.25" y1="23" x2="26.75" y2="23" stroke="#7f7f7f" stroke-width="1" />
76
+ <line
77
+ class="line line7"
78
+ x1="6.75"
79
+ y1="24"
80
+ x2="25.25"
81
+ y2="24"
82
+ stroke="#1976d2"
83
+ stroke-width="1"
84
+ stroke-opacity="0.5"
85
+ />
86
+ <line class="line line8" x1="5.25" y1="25" x2="26.75" y2="25" stroke="#7f7f7f" stroke-width="1" />
87
+ <line
88
+ class="line line9"
89
+ x1="6.75"
90
+ y1="26"
91
+ x2="25.25"
92
+ y2="26"
93
+ stroke="#1976d2"
94
+ stroke-width="1"
95
+ stroke-opacity="0.5"
96
+ />
97
+ <line class="line line10" x1="5.25" y1="27" x2="26.75" y2="27" stroke="#7f7f7f" stroke-width="1" />
98
+ <line
99
+ class="line line11"
100
+ x1="6.75"
101
+ y1="28"
102
+ x2="25.25"
103
+ y2="28"
104
+ stroke="#1976d2"
105
+ stroke-width="1"
106
+ stroke-opacity="0.5"
107
+ />
108
+ <line class="line line12" x1="5.25" y1="29" x2="26.75" y2="29" stroke="#7f7f7f" stroke-width="1" />
109
+ <line
110
+ class="line line13"
111
+ x1="6.75"
112
+ y1="30"
113
+ x2="25.25"
114
+ y2="30"
115
+ stroke="#1976d2"
116
+ stroke-width="1"
117
+ stroke-opacity="0.5"
118
+ />
119
+ <line class="line line14" x1="5.25" y1="31" x2="26.75" y2="31" stroke="#7f7f7f" stroke-width="1" />
120
+ </svg>
@@ -0,0 +1,39 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- shackle, locked -->
3
+ <path
4
+ d="M8 16 C10 -4, 22 -4, 24 16"
5
+ fill="none"
6
+ stroke="#7f7f7f"
7
+ stroke-width="2"
8
+ class="shackle-locked"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ />
12
+
13
+ <!-- shackle, unlocked -->
14
+ <path
15
+ d="M8 16 C10 -4, 22 -1, 22 8"
16
+ fill="none"
17
+ stroke="#7f7f7f"
18
+ stroke-width="2"
19
+ class="shackle-unlocked"
20
+ stroke-linecap="round"
21
+ stroke-linejoin="round"
22
+ stroke-opacity="0"
23
+ />
24
+
25
+ <!-- main lock -->
26
+ <rect x="5" y="16" width="22" height="15" rx="3" fill="none" stroke="#7f7f7f" stroke-width="2" />
27
+
28
+ <!-- status keyhole -->
29
+ <circle
30
+ cx="16"
31
+ cy="23.5"
32
+ r="3"
33
+ stroke="#7f7f7f"
34
+ stroke-width="0.5"
35
+ fill="#4caf50"
36
+ fill-opacity="0.5"
37
+ class="keyhole"
38
+ />
39
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- outer casing -->
3
+ <rect x="6" y="1" width="18" height="30" rx="3" stroke="#7f7f7f" fill="none" stroke-width="2" />
4
+
5
+ <!-- grille lines -->
6
+ <line stroke-linecap="round" x1="10" y1="6" x2="20" y2="6" stroke="#7f7f7f" stroke-width="2" />
7
+ <line stroke-linecap="round" x1="10" y1="10" x2="20" y2="10" stroke="#7f7f7f" stroke-width="2" />
8
+ <line stroke-linecap="round" x1="10" y1="14" x2="20" y2="14" stroke="#7f7f7f" stroke-width="2" />
9
+
10
+ <!-- power button -->
11
+ <circle cx="15" cy="23" r="3" stroke="#7f7f7f" stroke-width="2" fill="#1976d2" fill-opacity="0.5" />
12
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- siren dome -->
3
+ <path
4
+ class="dome"
5
+ d="M7 18 C7 5, 25 5, 25 18 V26 H7 V18 Z"
6
+ fill="none"
7
+ stroke="#7f7f7f"
8
+ stroke-width="1.5"
9
+ fill-opacity="0.5"
10
+ />
11
+
12
+ <!-- base -->
13
+ <rect x="2" y="26" width="28" height="4" fill="none" stroke="#7f7f7f" stroke-width="1.5" rx="1" />
14
+
15
+ <!-- light waves left to right -->
16
+ <line class="ray" x1="6" y1="3" x2="10" y2="7" stroke-width="3" />
17
+ <line class="ray" x1="16" y1="0" x2="16" y2="5" stroke-width="3" />
18
+ <line class="ray" x1="26" y1="3" x2="22" y2="7" stroke-width="3" />
19
+ </svg>
@@ -0,0 +1,38 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- outer casing -->
3
+ <rect x="1" y="1" width="30" height="12" rx="1" stroke="#7f7f7f" fill="none" stroke-width="1.25" />
4
+
5
+ <!-- alarm type -->
6
+ <text
7
+ class="type"
8
+ text-anchor="middle"
9
+ dominant-baseline="middle"
10
+ font-family="Arial"
11
+ font-size="7.5"
12
+ x="16"
13
+ y="7.7"
14
+ fill="#7f7f7f"
15
+ stroke-width="0.6"
16
+ font-weight="900"
17
+ >
18
+ SMOKE
19
+ </text>
20
+
21
+ <!-- grille blue background -->
22
+ <line x1="6" y1="14.5" x2="25.5" y2="14.5" stroke="#1976d2" stroke-opacity="0.5" stroke-width="2" />
23
+
24
+ <!-- grille vertical lines -->
25
+ <line stroke-linecap="round" x1="5" y1="13" x2="6.5" y2="16" stroke="#7f7f7f" stroke-width="1.25" />
26
+ <line stroke-linecap="round" x1="11" y1="13" x2="11" y2="16" stroke="#7f7f7f" stroke-width="1" />
27
+ <line stroke-linecap="round" x1="15.5" y1="13" x2="15.5" y2="16" stroke="#7f7f7f" stroke-width="1" />
28
+ <line stroke-linecap="round" x1="20" y1="13" x2="20" y2="16" stroke="#7f7f7f" stroke-width="1" />
29
+ <line stroke-linecap="round" x1="26" y1="13" x2="24.5" y2="16" stroke="#7f7f7f" stroke-width="1.25" />
30
+
31
+ <!-- grille horizontal lines -->
32
+ <line stroke-linecap="round" x1="6.5" y1="16" x2="24.5" y2="16" stroke="#7f7f7f" stroke-width="1.25" />
33
+
34
+ <!-- left to right air lines -->
35
+ <line stroke-linecap="round" x1="11" y1="21" x2="6" y2="27" stroke="#7f7f7f" stroke-width="1.25" class="air-line" />
36
+ <line stroke-linecap="round" x1="16" y1="21" x2="16" y2="31" stroke="#7f7f7f" stroke-width="1.25" class="air-line" />
37
+ <line stroke-linecap="round" x1="21" y1="21" x2="26" y2="27" stroke="#7f7f7f" stroke-width="1.25" class="air-line" />
38
+ </svg>
@@ -0,0 +1,28 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- outer casing -->
3
+ <rect x="6" y="1" width="20" height="30" rx="3" stroke="#7f7f7f" fill="none" stroke-width="1" />
4
+
5
+ <!-- outer top speaker circle -->
6
+ <circle cx="16" cy="9" r="4.5" stroke="#7f7f7f" stroke-width="0" fill="#7f7f7f" />
7
+
8
+ <!-- inner top speaker circle -->
9
+ <circle class="inner" cx="16" cy="9" r="1.5" stroke="#7f7f7f" stroke-width="0" fill="#e1e1e1" />
10
+
11
+ <!-- outer bottom speaker circle -->
12
+ <circle cx="16" cy="22" r="6" stroke="#7f7f7f" stroke-width="0" fill="#7f7f7f" />
13
+
14
+ <!-- inner bottom speaker circle -->
15
+ <circle class="inner" cx="16" cy="22" r="2" stroke="#7f7f7f" stroke-width="0" fill="#e1e1e1" />
16
+
17
+ <!-- inner left sound wave -->
18
+ <path class="wave-inner" d="M4,12 Q1,16 4,20" stroke="#1976d2" fill="none" stroke-width="1" stroke-opacity="0" />
19
+
20
+ <!-- outer left sound wave -->
21
+ <path class="wave-outer" d="M3,10 Q-2,16 3,22" stroke="#1976d2" fill="none" stroke-width="1" stroke-opacity="0" />
22
+
23
+ <!-- inner right sound wave -->
24
+ <path class="wave-inner" d="M28,12 Q31,16 28,20" stroke="#1976d2" fill="none" stroke-width="1" stroke-opacity="0" />
25
+
26
+ <!-- outer right sound wave -->
27
+ <path class="wave-outer" d="M29,10 Q34,16 29,22" stroke="#1976d2" fill="none" stroke-width="1" stroke-opacity="0" />
28
+ </svg>
@@ -0,0 +1,18 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- frame -->
3
+ <rect x="1" y="1" width="30" height="30" rx="3" stroke="#7f7f7f" fill="none" stroke-width="2" />
4
+
5
+ <!-- single click -->
6
+ <circle class="single" cx="8.5" cy="9.5" r="5" stroke="#7f7f7f" stroke-width="1" fill="none" fill-opacity="0.5" />
7
+
8
+ <!-- double click, outer then inner -->
9
+ <circle class="double" cx="23.5" cy="9.5" r="5" stroke="#7f7f7f" stroke-width="1" fill="none" fill-opacity="0.5" />
10
+ <circle cx="23.5" cy="9.5" r="3" stroke="#7f7f7f" stroke-width="1" fill="none" />
11
+
12
+ <!-- long click -->
13
+ <circle class="long" cx="16" cy="23.5" r="5" stroke="#7f7f7f" stroke-width="1" fill="none" fill-opacity="0.5" />
14
+
15
+ <!-- long click lies, left then right -->
16
+ <line x1="5" y1="23.5" x2="11" y2="23.5" stroke="#7f7f7f" stroke-width="0.5" />
17
+ <line x1="21" y1="23.5" x2="27" y2="23.5" stroke="#7f7f7f" stroke-width="0.5" />
18
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- stand -->
3
+ <line
4
+ class="stand"
5
+ x1="10"
6
+ y1="27.25"
7
+ x2="22"
8
+ y2="27.25"
9
+ stroke="#d32f2f"
10
+ stroke-width="4"
11
+ stroke-linecap="round"
12
+ stroke-opacity="0.75"
13
+ />
14
+
15
+ <!-- frame -->
16
+ <rect class="screen" x="1" y="6" width="30" height="20" rx="2" stroke="#7f7f7f" fill="#808080" stroke-width="1.5" />
17
+ </svg>
@@ -0,0 +1,34 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- outer casing -->
3
+ <rect x="3" y="1" width="25" height="30" rx="2" stroke="#7f7f7f" fill="none" stroke-width="1.2" />
4
+
5
+ <!-- top drawer -->
6
+ <rect x="6" y="4" width="5" rx="0.5" height="4" stroke="#7f7f7f" fill="none" stroke-width="0.5" />
7
+ <rect x="7" y="6" width="3" rx="0.25" height="1" stroke="#7f7f7f" fill="none" stroke-width="0.25" />
8
+
9
+ <!-- control panel + buttons -->
10
+ <rect x="14" y="4" width="11" height="4" rx="0.5" fill="none" stroke="#7f7f7f" stroke-width="0.5" />
11
+ <rect
12
+ x="19"
13
+ y="5"
14
+ width="5"
15
+ height="2"
16
+ rx="0.25"
17
+ fill="#1976d2"
18
+ fill-opacity="0.5"
19
+ stroke="#7f7f7f"
20
+ stroke-width="0.25"
21
+ />
22
+ <rect x="15" y="5" width="1" height="1" rx="0.25" fill="none" stroke="#7f7f7f" stroke-width="0.25" />
23
+ <rect x="16" y="5" width="1" height="1" rx="0.25" fill="none" stroke="#7f7f7f" stroke-width="0.25" />
24
+ <rect x="17" y="5" width="1" height="1" rx="0.25" fill="none" stroke="#7f7f7f" stroke-width="0.25" />
25
+ <rect x="15" y="6" width="1" height="1" rx="0.25" fill="none" stroke="#7f7f7f" stroke-width="0.25" />
26
+ <rect x="16" y="6" width="1" height="1" rx="0.25" fill="none" stroke="#7f7f7f" stroke-width="0.25" />
27
+ <rect x="17" y="6" width="1" height="1" rx="0.25" fill="none" stroke="#7f7f7f" stroke-width="0.25" />
28
+
29
+ <!-- drum handle -->
30
+ <rect class="handle" x="19" y="15.5" rx="1" width="3" height="3" fill="#7f7f7f" />
31
+
32
+ <!-- drum -->
33
+ <circle cx="15.5" cy="17" r="6.5" stroke="#7f7f7f" fill="none" stroke-width="1.2" />
34
+ </svg>
@@ -0,0 +1,44 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- outer frame -->
3
+ <rect x="1" y="0.8" width="30" height="30.2" rx="0.5" stroke="#7f7f7f" fill="none" stroke-width="1.5" />
4
+
5
+ <!-- left window frame -->
6
+ <rect x="2.8" y="2.6" width="12.4" height="26.6" stroke="#7f7f7f" fill="none" stroke-width="1" />
7
+
8
+ <!-- left window divider -->
9
+ <rect x="3.66" y="15.65" width="10.68" height="0.5" stroke="#7f7f7f" fill="none" stroke-width="0.5" />
10
+
11
+ <!-- right window frame -->
12
+ <rect x="16.8" y="2.6" width="12.4" height="26.6" stroke="#7f7f7f" fill="none" stroke-width="1" />
13
+
14
+ <!-- right window divider -->
15
+ <rect x="17.66" y="15.65" width="10.68" height="0.5" stroke="#7f7f7f" fill="none" stroke-width="0.5" />
16
+
17
+ <!-- blind -->
18
+ <rect
19
+ class="c-blinds"
20
+ x="2.3"
21
+ y="2.1"
22
+ width="27.4"
23
+ height="27.6"
24
+ stroke="#808080"
25
+ fill="#808080"
26
+ stroke-width="0.5"
27
+ stroke-opacity="0.9"
28
+ fill-opacity="0.9"
29
+ />
30
+
31
+ <!-- light -->
32
+ <rect
33
+ class="c-light"
34
+ x="2.05"
35
+ y="29.9"
36
+ width="27.9"
37
+ height="0"
38
+ stroke="#ffffff"
39
+ fill="#ffffff"
40
+ stroke-width="0.5"
41
+ stroke-opacity="0"
42
+ fill-opacity="0.5"
43
+ />
44
+ </svg>
@@ -0,0 +1,67 @@
1
+ <svg width="32px" height="32px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- outer frame -->
3
+ <rect x="1" y="0.8" width="30" height="30.2" rx="0.5" stroke="#7f7f7f" fill="none" stroke-width="1.5" />
4
+
5
+ <!-- left window frame -->
6
+ <rect class="outline-left" x="2.8" y="2.6" width="12.4" height="26.6" stroke="#7f7f7f" fill="none" stroke-width="1" />
7
+
8
+ <!-- left window divider -->
9
+ <rect
10
+ class="divider-left"
11
+ x="3.66"
12
+ y="15.65"
13
+ width="10.68"
14
+ height="0.5"
15
+ stroke="#7f7f7f"
16
+ fill="none"
17
+ stroke-width="0.5"
18
+ />
19
+
20
+ <!-- left window handle -->
21
+ <rect
22
+ class="handle-left"
23
+ x="15.16"
24
+ y="13.6"
25
+ width="0.1"
26
+ height="4.6"
27
+ stroke="#1976d2"
28
+ fill="none"
29
+ stroke-width="0.5"
30
+ />
31
+
32
+ <!-- right window frame -->
33
+ <rect
34
+ class="outline-right"
35
+ x="16.8"
36
+ y="2.6"
37
+ width="12.4"
38
+ height="26.6"
39
+ stroke="#7f7f7f"
40
+ fill="none"
41
+ stroke-width="1"
42
+ />
43
+
44
+ <!-- right window divider -->
45
+ <rect
46
+ class="divider-right"
47
+ x="17.66"
48
+ y="15.65"
49
+ width="10.68"
50
+ height="0.5"
51
+ stroke="#7f7f7f"
52
+ fill="none"
53
+ stroke-width="0.5"
54
+ />
55
+
56
+ <!-- right window handle -->
57
+ <rect
58
+ class="handle-right"
59
+ x="16.76"
60
+ y="13.6"
61
+ width="0.1"
62
+ height="4.6"
63
+ stroke="#1976d2"
64
+ fill="none"
65
+ stroke-width="0.5"
66
+ />
67
+ </svg>
@@ -1,2 +1,2 @@
1
- import{a as D}from"./chunk-VPU5FNT3.js";import{Bc as N,Da as l,E as c,Ub as g,fa as _,ha as M,hc as y,ic as b,ja as v,jc as E,la as a,mb as h,nb as w,qb as u,rd as O,ub as C,vb as f}from"./chunk-WEVBEUAJ.js";var T=["editorContainer"],z="[_nghost-%COMP%]{display:block;height:200px}.editor-container[_ngcontent-%COMP%]{width:100%;height:98%}",I=new v("NGX_MONACO_EDITOR_CONFIG"),R=!1,q,x=(()=>{let i=class i{constructor(){this.config=a(I),this.onInit=new C,this._insideNg=!1}set insideNg(e){this._insideNg=e,this._editor&&(this._editor.dispose(),this.initMonaco(this._options,this.insideNg))}get insideNg(){return this._insideNg}ngAfterViewInit(){R?q.then(()=>{this.initMonaco(this._options,this.insideNg)}):(R=!0,q=new Promise(e=>{let t=this.config.baseUrl;if((t==="assets"||!t)&&(t="./assets/monaco/min/vs"),typeof window.monaco=="object"){this.initMonaco(this._options,this.insideNg),e();return}let o=r=>{let m=r||window.require,p={paths:{vs:`${t}`}};Object.assign(p,this.config.requireConfig||{}),m.config(p),m(["vs/editor/editor.main"],()=>{typeof this.config.onMonacoLoad=="function"&&this.config.onMonacoLoad(),this.initMonaco(this._options,this.insideNg),e()})};if(this.config.monacoRequire)o(this.config.monacoRequire);else if(window.require)if(window.require.config)o();else{var s=`${t}/loader.js`,d=new XMLHttpRequest;d.addEventListener("load",()=>{let r=document.createElement("script");r.type="text/javascript",r.text=["var nodeRequire = require;",d.responseText.replace('"use strict";',""),"var monacoAmdRequire = require;","require = nodeRequire;","require.nodeRequire = require;"].join(`
1
+ import{a as D}from"./chunk-7EQFLCW4.js";import{Bc as N,Da as l,E as c,Ub as g,fa as _,ha as M,hc as y,ic as b,ja as v,jc as E,la as a,mb as h,nb as w,qb as u,td as O,ub as C,vb as f}from"./chunk-IOKYXV5M.js";var T=["editorContainer"],z="[_nghost-%COMP%]{display:block;height:200px}.editor-container[_ngcontent-%COMP%]{width:100%;height:98%}",I=new v("NGX_MONACO_EDITOR_CONFIG"),R=!1,q,x=(()=>{let i=class i{constructor(){this.config=a(I),this.onInit=new C,this._insideNg=!1}set insideNg(e){this._insideNg=e,this._editor&&(this._editor.dispose(),this.initMonaco(this._options,this.insideNg))}get insideNg(){return this._insideNg}ngAfterViewInit(){R?q.then(()=>{this.initMonaco(this._options,this.insideNg)}):(R=!0,q=new Promise(e=>{let t=this.config.baseUrl;if((t==="assets"||!t)&&(t="./assets/monaco-0.21.3/min/vs"),typeof window.monaco=="object"){this.initMonaco(this._options,this.insideNg),e();return}let o=r=>{let m=r||window.require,p={paths:{vs:`${t}`}};Object.assign(p,this.config.requireConfig||{}),m.config(p),m(["vs/editor/editor.main"],()=>{typeof this.config.onMonacoLoad=="function"&&this.config.onMonacoLoad(),this.initMonaco(this._options,this.insideNg),e()})};if(this.config.monacoRequire)o(this.config.monacoRequire);else if(window.require)if(window.require.config)o();else{var s=`${t}/loader.js`,d=new XMLHttpRequest;d.addEventListener("load",()=>{let r=document.createElement("script");r.type="text/javascript",r.text=["var nodeRequire = require;",d.responseText.replace('"use strict";',""),"var monacoAmdRequire = require;","require = nodeRequire;","require.nodeRequire = require;"].join(`
2
2
  `),document.body.appendChild(r),o(window.monacoAmdRequire)}),d.open("GET",s),d.send()}else{let r=document.createElement("script");r.type="text/javascript",r.src=`${t}/loader.js`,r.addEventListener("load",()=>{o()}),document.body.appendChild(r)}}))}ngOnDestroy(){this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._editor&&(this._editor.dispose(),this._editor=void 0)}};i.\u0275fac=function(t){return new(t||i)},i.\u0275cmp=h({type:i,selectors:[["ng-component"]],viewQuery:function(t,o){if(t&1&&y(T,7),t&2){let s;b(s=E())&&(o._editorContainer=s.first)}},inputs:{insideNg:"insideNg"},outputs:{onInit:"onInit"},standalone:!1,decls:0,vars:0,template:function(t,o){},encapsulation:2});let n=i;return n})(),X=(()=>{let i=class i extends x{constructor(){super(...arguments),this.zone=a(f),this._value="",this.propagateChange=e=>{},this.onTouched=()=>{}}set options(e){this._options=Object.assign({},this.config.defaultOptions,e),this._editor&&(this._editor.dispose(),this.initMonaco(this._options,this.insideNg))}get options(){return this._options}set model(e){this.options.model=e,this._editor&&(this._editor.dispose(),this.initMonaco(this.options,this.insideNg))}writeValue(e){this._value=e||"",setTimeout(()=>{this._editor&&!this.options.model&&this._editor.setValue(this._value)})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){this.options.readOnly=e}initMonaco(e,t){let o=!!e.model;if(o){let s=monaco.editor.getModel(e.model.uri||"");s?(e.model=s,e.model.setValue(this._value)):e.model=monaco.editor.createModel(e.model.value,e.model.language,e.model.uri)}t?this._editor=monaco.editor.create(this._editorContainer.nativeElement,e):this.zone.runOutsideAngular(()=>{this._editor=monaco.editor.create(this._editorContainer.nativeElement,e)}),o||this._editor.setValue(this._value),this._editor.onDidChangeModelContent(s=>{let d=this._editor.getValue();this.zone.run(()=>{this.propagateChange(d),this._value=d})}),this._editor.onDidBlurEditorWidget(()=>{this.onTouched()}),this._editor.setTheme=s=>{this.options.theme=s,monaco.editor.setTheme(s)},this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._windowResizeSubscription=c(window,"resize").subscribe(()=>this._editor.layout()),this.onInit.emit(this._editor)}};i.\u0275fac=(()=>{let e;return function(o){return(e||(e=l(i)))(o||i)}})(),i.\u0275cmp=h({type:i,selectors:[["ngx-monaco-editor"]],inputs:{options:"options",model:"model"},features:[N([{provide:D,useExisting:_(()=>i),multi:!0}]),u],decls:2,vars:0,consts:[["editorContainer",""],[1,"editor-container"]],template:function(t,o){t&1&&g(0,"div",1,0)},styles:["[_nghost-%COMP%]{display:block;height:200px}.editor-container[_ngcontent-%COMP%]{width:100%;height:98%}"],changeDetection:0});let n=i;return n})(),$=(()=>{let i=class i extends x{constructor(){super(...arguments),this.zone=a(f)}set options(e){this._options=Object.assign({},this.config.defaultOptions,e),this._editor&&(this._editor.dispose(),this.initMonaco(this._options,this.insideNg))}get options(){return this._options}set originalModel(e){this._originalModel=e,this._editor&&(this._editor.dispose(),this.initMonaco(this.options,this.insideNg))}set modifiedModel(e){this._modifiedModel=e,this._editor&&(this._editor.dispose(),this.initMonaco(this.options,this.insideNg))}initMonaco(e,t){if(!this._originalModel||!this._modifiedModel)throw new Error("originalModel or modifiedModel not found for ngx-monaco-diff-editor");this._originalModel.language=this._originalModel.language||e.language,this._modifiedModel.language=this._modifiedModel.language||e.language;let o=monaco.editor.createModel(this._originalModel.code,this._originalModel.language),s=monaco.editor.createModel(this._modifiedModel.code,this._modifiedModel.language);this._editorContainer.nativeElement.innerHTML="";let d=e.theme;t?this._editor=monaco.editor.createDiffEditor(this._editorContainer.nativeElement,e):this.zone.runOutsideAngular(()=>{this._editor=monaco.editor.createDiffEditor(this._editorContainer.nativeElement,e)}),e.theme=d,this._editor.setModel({original:o,modified:s}),this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._windowResizeSubscription=c(window,"resize").subscribe(()=>this._editor.layout()),this.onInit.emit(this._editor)}};i.\u0275fac=(()=>{let e;return function(o){return(e||(e=l(i)))(o||i)}})(),i.\u0275cmp=h({type:i,selectors:[["ngx-monaco-diff-editor"]],inputs:{options:"options",originalModel:"originalModel",modifiedModel:"modifiedModel"},features:[u],decls:2,vars:0,consts:[["editorContainer",""],[1,"editor-container"]],template:function(t,o){t&1&&g(0,"div",1,0)},styles:[z],changeDetection:0});let n=i;return n})(),H=(()=>{let i=class i{static forRoot(e={}){return{ngModule:i,providers:[{provide:I,useValue:e}]}}};i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=w({type:i}),i.\u0275inj=M({imports:[O]});let n=i;return n})();export{X as a,$ as b,H as c};
@@ -1 +1 @@
1
- import{c as t}from"./chunk-3E7ISGPA.js";import{b as i}from"./chunk-S7AIVWKK.js";import{ha as o,nb as r}from"./chunk-WEVBEUAJ.js";var f=(()=>{class e{static \u0275fac=function(s){return new(s||e)};static \u0275mod=r({type:e});static \u0275inj=o({providers:[t],imports:[i]})}return e})();export{f as a};
1
+ import{c as t}from"./chunk-SXGEZIU3.js";import{b as i}from"./chunk-J6CJ26QN.js";import{ha as o,nb as r}from"./chunk-IOKYXV5M.js";var f=(()=>{class e{static \u0275fac=function(s){return new(s||e)};static \u0275mod=r({type:e});static \u0275inj=o({providers:[t],imports:[i]})}return e})();export{f as a};
@@ -1,4 +1,4 @@
1
- import{a as we}from"./chunk-S7D4ALZN.js";import{b as A,e as ye,f as Ce,g as Re}from"./chunk-P72KTIAV.js";import{a as fe,b as he}from"./chunk-F3MG6UU6.js";import{a as _e}from"./chunk-AKD24HZC.js";import{a as De}from"./chunk-IMT3YYMD.js";import{m as pe,n as ge,t as D}from"./chunk-MJK6N6PA.js";import{A as me,c as se,e as le,l as de,z as ce}from"./chunk-VPU5FNT3.js";import{b as ue,d as j}from"./chunk-25NXLXGL.js";import{b as be}from"./chunk-KB5AKZT6.js";import{k as I,n as H}from"./chunk-CFYGJBJN.js";import{a as R,b as P}from"./chunk-CPAHENLQ.js";import"./chunk-RJOGO4M5.js";import{Ec as z,Hb as C,Hc as s,Ib as w,Ic as d,Jb as v,Jc as K,Lb as Z,Mb as ee,Nb as te,Ob as f,Pb as a,Qb as l,Rb as p,_b as x,ab as r,bc as b,d as G,dc as m,fb as X,g as Q,h as E,id as re,la as g,mb as B,pd as ae,qc as _,ra as h,rc as k,sa as u,sc as M,w as $,xc as ie,yc as oe,zc as ne}from"./chunk-WEVBEUAJ.js";var ke=Q(Re(),1);var ve=Q(De(),1);var Ee=(n,y)=>({"fa-trash":n,"fa-cog fa-spin":y});function Ie(n,y){n&1&&(a(0,"div",13),p(1,"i",20),l())}function je(n,y){if(n&1){let e=x();a(0,"li",9)(1,"span"),_(2),s(3,"date"),p(4,"br"),a(5,"span",21),_(6),s(7,"date"),l()(),a(8,"span",22)(9,"button",25),s(10,"translate"),s(11,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.restore(i.id))}),p(12,"i",26),l(),a(13,"button",27),s(14,"translate"),s(15,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.download(i.id))}),p(16,"i",28),l(),a(17,"button",23),s(18,"translate"),s(19,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.delete(i.id))}),p(20,"i",24),l()()()}if(n&2){let e=y.$implicit,t=m(2);r(2),M(" ",K(3,15,e.timestamp,"mediumDate")),r(4),k(K(7,18,e.timestamp,"shortTime")),r(3),f("disabled",t.clicked||t.deleting)("ngbTooltip",d(10,21,"config.restore.copy_to_editor"))("openDelay",150),C("aria-label",d(11,23,"config.restore.copy_to_editor")),r(4),f("disabled",t.clicked||t.deleting)("ngbTooltip",d(14,25,"form.button_download"))("openDelay",150),C("aria-label",d(15,27,"form.button_download")),r(4),f("disabled",t.clicked||t.deleting)("ngbTooltip",d(18,29,"form.button_delete"))("openDelay",150),C("aria-label",d(19,31,"form.button_delete")),r(3),f("ngClass",z(33,Ee,e.id!==t.deleting,e.id===t.deleting))}}function He(n,y){if(n&1){let e=x();a(0,"ul",14),ee(1,je,21,36,"li",9,Z),a(3,"li",9)(4,"span"),_(5),s(6,"translate"),p(7,"br"),a(8,"span",21),_(9),s(10,"translate"),l()(),a(11,"span",22)(12,"button",23),s(13,"translate"),s(14,"translate"),b("click",function(){h(e);let i=m();return u(i.deleteAllBackups())}),p(15,"i",24),l()()()()}if(n&2){let e=m();r(),te(e.backupList),r(4),M(" ",d(6,7,"form.button_delete_all")),r(4),M(" ",d(10,9,"common.labels.no_confirmation")," "),r(3),f("disabled",e.clicked||e.deleting)("ngbTooltip",d(13,11,"form.button_delete_all"))("openDelay",150),C("aria-label",d(14,13,"form.button_delete")),r(3),f("ngClass",z(15,Ee,e.deleting!=="all",e.deleting==="all"))}}var xe=(()=>{class n{$activeModal=g(pe);$api=g(H);$router=g(j);$toastr=g(I);$translate=g(R);currentConfig;fromSettings=!1;loading=!0;backupList=[];clicked=!1;deleting=null;ngOnInit(){this.getConfigBackups()}getConfigBackups(){return E(this,null,function*(){try{let e=yield $(this.$api.get("/config-editor/backups"));this.loading=!1,this.backupList=e}catch(e){this.loading=!1,console.error(e),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(e){return this.$activeModal.close(e)}download(e){return E(this,null,function*(){this.clicked=!0;try{let t=yield $(this.$api.get(`/config-editor/backups/${e}`)),i=JSON.stringify(t,null,4),o=new Blob([i],{type:"application/json"}),T=`config-backup-${e}.json`;(0,ve.saveAs)(o,T),this.clicked=!1}catch(t){this.clicked=!1,this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t)}})}downloadCurrentConfig(){let e=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download","config.json"),document.body.appendChild(t),t.click(),t.remove()}delete(e){return E(this,null,function*(){this.deleting=e;try{yield $(this.$api.delete(`/config-editor/backups/${e}`)),yield this.getConfigBackups(),this.deleting=null}catch(t){this.deleting=null,this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t)}})}deleteAllBackups(){return E(this,null,function*(){this.deleting="all";try{yield $(this.$api.delete("/config-editor/backups")),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList=[],this.deleting=null}catch(e){this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e),this.deleting=null}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=B({type:n,selectors:[["ng-component"]],inputs:{currentConfig:"currentConfig",fromSettings:"fromSettings"},decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3",3,"click","disabled"],[1,"fas","fa-fw","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-fw","fa-cog","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw",3,"ngClass"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw","fa-download"]],template:function(t,i){t&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),_(3),s(4,"translate"),l(),a(5,"button",3),s(6,"translate"),b("click",function(){return i.dismissModal()}),l()(),a(7,"div",4)(8,"div",5),p(9,"i",6),l(),a(10,"ul",7)(11,"li"),_(12),s(13,"translate"),l(),a(14,"li"),_(15),s(16,"translate"),l()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),_(21),s(22,"translate"),l(),p(23,"br"),a(24,"small",10),_(25),s(26,"translate"),l()(),a(27,"button",11),s(28,"translate"),b("click",function(){return i.downloadCurrentConfig()}),p(29,"i",12),l()()(),w(30,Ie,2,0,"div",13)(31,He,16,18,"ul",14),l(),a(32,"div",15),p(33,"div",16),a(34,"div",17)(35,"button",18),s(36,"translate"),b("click",function(){return i.dismissModal()}),_(37),s(38,"translate"),l()(),p(39,"div",19),l()()),t&2&&(r(3),k(d(4,13,"config.restore.title")),r(2),f("disabled",i.clicked||i.deleting),C("aria-label",d(6,15,"form.button_close")),r(7),k(d(13,17,"config.restore.help_1")),r(3),k(d(16,19,"config.restore.help_2")),r(6),k(d(22,21,"form.button_download")),r(4),k(d(26,23,"config.restore.download")),r(2),f("disabled",i.clicked||i.deleting),C("aria-label",d(28,25,"backup.backup_now")),r(3),v(i.loading?30:i.backupList.length?31:-1),r(5),f("disabled",i.clicked||i.deleting),C("aria-label",d(36,27,"form.button_close")),r(2),M(" ",d(38,29,"form.button_close")," "))},dependencies:[D,re,me,ae,P],encapsulation:2})}return n})();function Oe(n,y){if(n&1){let e=x();a(0,"button",13),s(1,"translate"),s(2,"translate"),b("click",function(){h(e);let i=m();return u(i.onCancelRestore())}),p(3,"i",14),l()}if(n&2){let e=m();f("disabled",e.saveInProgress)("openDelay",150)("ngbTooltip",d(1,4,"form.button_cancel")),C("aria-label",d(2,6,"form.button_cancel"))}}function Ne(n,y){if(n&1){let e=x();a(0,"button",15),s(1,"translate"),s(2,"translate"),b("click",function(){h(e);let i=m();return u(i.onRestore())}),p(3,"i",16),l()}n&2&&(f("openDelay",150)("ngbTooltip",d(1,3,"form.button_restore")),C("aria-label",d(2,5,"form.button_restore")))}function qe(n,y){n&1&&p(0,"i",8)}function Fe(n,y){n&1&&p(0,"i",9)}function Le(n,y){if(n&1){let e=x();a(0,"ngx-monaco-editor",17),b("onInit",function(i){h(e);let o=m();return u(o.onEditorInit(i))})("keydown.control.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())})("keydown.meta.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())}),l()}if(n&2){let e=m();f("options",e.editorOptions)("model",e.monacoEditorModel)}}function Je(n,y){if(n&1){let e=x();a(0,"ngx-monaco-diff-editor",18),b("onInit",function(i){h(e);let o=m();return u(o.onInitDiffEditor(i))})("keydown.control.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())})("keydown.meta.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())}),l()}if(n&2){let e=m();f("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function ze(n,y){if(n&1){let e=x();a(0,"textarea",19),ne("ngModelChange",function(i){h(e);let o=m();return oe(o.homebridgeConfig,i)||(o.homebridgeConfig=i),u(i)}),_(1," "),l()}if(n&2){let e=m();ie("ngModel",e.homebridgeConfig)}}var xt=(()=>{class n{$api=g(H);$md=g(_e);$modal=g(ge);$monacoEditor=g(we);$route=g(ue);$renderer=g(X);$router=g(j);$settings=g(be);$toastr=g(I);$translate=g(R);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(i=>{this.homebridgeConfig=i.config,this.latestSavedConfig=JSON.parse(i.config)}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>{this.setMonacoEditorModel()}});let{action:t}=this.$router.parseUrl(this.$router.url).queryParams;if(t){switch(t){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}onEditorInit(e){window.editor=e,this.monacoEditor=e,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(e){this.monacoEditor=e.modifiedEditor,e.getModel().original.setValue(this.originalConfig),e.getModel().modified.setValue(this.homebridgeConfig),window.editor=e}onSave(){return E(this,null,function*(){if(!this.saveInProgress){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress=!0;try{if(!this.isMobile){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let t=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of t)if(i.message==="Duplicate object key"){this.saveInProgress=!1,this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig=this.monacoEditor.getModel().getValue()}let e=this.parseConfigFromEditor();this.homebridgeConfig=JSON.stringify(e,null,4),typeof e.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(e.bridge.username)?e.accessories&&!Array.isArray(e.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&!Array.isArray(e.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&Array.isArray(e.platforms)&&!this.validateSection(e.platforms,"platform")||e.accessories&&Array.isArray(e.accessories)&&!this.validateSection(e.accessories,"accessory")||e.plugins&&Array.isArray(e.plugins)&&!this.validatePlugins(e.plugins,"plugins")||e.disabledPlugins&&Array.isArray(e.disabledPlugins)&&!this.validatePlugins(e.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(e),this.originalConfig=""):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress=!1}})}onRestore(e=!1){let t=this.$modal.open(xe,{size:"lg",backdrop:"static"});t.componentInstance.currentConfig=this.homebridgeConfig,t.componentInstance.fromSettings=e,t.result.then(i=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig),this.$api.get(`/config-editor/backups/${i}`).subscribe({next:o=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(o,null,4),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig,forceMoveMarkers:!0}]))},error:o=>{console.error(o),this.$toastr.error(o.error?.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onCancelRestore(){this.homebridgeConfig=this.originalConfig,this.originalConfig="",this.onRestore()}ngOnDestroy(){let e=document.querySelector(".content");this.$renderer.removeStyle(e,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove()),this.monacoEditor&&this.monacoEditor.dispose()}validateSection(e,t){for(let i of e){if(typeof i!="object"||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(!i[t])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(typeof i[t]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1}return!0}validatePlugins(e,t){for(let i of e)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:t}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(e){this.monacoEditor&&(e=JSON.stringify(e,null,4).split(`
1
+ import{a as we}from"./chunk-QX6BFGHZ.js";import{b as A,e as ye,f as Ce,g as Re}from"./chunk-RWJLVKQ2.js";import{a as fe,b as he}from"./chunk-2C3X2ESN.js";import{a as _e}from"./chunk-D7VCPH6W.js";import{a as De}from"./chunk-H5WTK5UT.js";import{m as pe,n as ge,t as D}from"./chunk-IWFKJHPR.js";import{A as me,c as se,e as le,l as de,z as ce}from"./chunk-7EQFLCW4.js";import{b as ue,d as j}from"./chunk-DFFTJVRY.js";import{b as be}from"./chunk-H577TIGW.js";import{k as I,n as H}from"./chunk-NGOAZV2I.js";import{a as R,b as P}from"./chunk-KZKL7DGI.js";import"./chunk-OA7Y3E5A.js";import{Ec as z,Hb as C,Ib as w,Jb as v,Jc as s,Kc as d,Lb as Z,Lc as K,Mb as ee,Nb as te,Ob as f,Pb as a,Qb as l,Rb as p,_b as x,ab as r,bc as b,d as G,dc as m,fb as X,g as Q,h as E,kd as re,la as g,mb as B,qc as _,ra as h,rc as k,rd as ae,sa as u,sc as M,w as $,xc as ie,yc as oe,zc as ne}from"./chunk-IOKYXV5M.js";var ke=Q(Re(),1);var ve=Q(De(),1);var Ee=(n,y)=>({"fa-trash":n,"fa-cog fa-spin":y});function Ie(n,y){n&1&&(a(0,"div",13),p(1,"i",20),l())}function je(n,y){if(n&1){let e=x();a(0,"li",9)(1,"span"),_(2),s(3,"date"),p(4,"br"),a(5,"span",21),_(6),s(7,"date"),l()(),a(8,"span",22)(9,"button",25),s(10,"translate"),s(11,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.restore(i.id))}),p(12,"i",26),l(),a(13,"button",27),s(14,"translate"),s(15,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.download(i.id))}),p(16,"i",28),l(),a(17,"button",23),s(18,"translate"),s(19,"translate"),b("click",function(){let i=h(e).$implicit,o=m(2);return u(o.delete(i.id))}),p(20,"i",24),l()()()}if(n&2){let e=y.$implicit,t=m(2);r(2),M(" ",K(3,15,e.timestamp,"mediumDate")),r(4),k(K(7,18,e.timestamp,"shortTime")),r(3),f("disabled",t.clicked||t.deleting)("ngbTooltip",d(10,21,"config.restore.copy_to_editor"))("openDelay",150),C("aria-label",d(11,23,"config.restore.copy_to_editor")),r(4),f("disabled",t.clicked||t.deleting)("ngbTooltip",d(14,25,"form.button_download"))("openDelay",150),C("aria-label",d(15,27,"form.button_download")),r(4),f("disabled",t.clicked||t.deleting)("ngbTooltip",d(18,29,"form.button_delete"))("openDelay",150),C("aria-label",d(19,31,"form.button_delete")),r(3),f("ngClass",z(33,Ee,e.id!==t.deleting,e.id===t.deleting))}}function He(n,y){if(n&1){let e=x();a(0,"ul",14),ee(1,je,21,36,"li",9,Z),a(3,"li",9)(4,"span"),_(5),s(6,"translate"),p(7,"br"),a(8,"span",21),_(9),s(10,"translate"),l()(),a(11,"span",22)(12,"button",23),s(13,"translate"),s(14,"translate"),b("click",function(){h(e);let i=m();return u(i.deleteAllBackups())}),p(15,"i",24),l()()()()}if(n&2){let e=m();r(),te(e.backupList),r(4),M(" ",d(6,7,"form.button_delete_all")),r(4),M(" ",d(10,9,"common.labels.no_confirmation")," "),r(3),f("disabled",e.clicked||e.deleting)("ngbTooltip",d(13,11,"form.button_delete_all"))("openDelay",150),C("aria-label",d(14,13,"form.button_delete")),r(3),f("ngClass",z(15,Ee,e.deleting!=="all",e.deleting==="all"))}}var xe=(()=>{class n{$activeModal=g(pe);$api=g(H);$router=g(j);$toastr=g(I);$translate=g(R);currentConfig;fromSettings=!1;loading=!0;backupList=[];clicked=!1;deleting=null;ngOnInit(){this.getConfigBackups()}getConfigBackups(){return E(this,null,function*(){try{let e=yield $(this.$api.get("/config-editor/backups"));this.loading=!1,this.backupList=e}catch(e){this.loading=!1,console.error(e),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(e){return this.$activeModal.close(e)}download(e){return E(this,null,function*(){this.clicked=!0;try{let t=yield $(this.$api.get(`/config-editor/backups/${e}`)),i=JSON.stringify(t,null,4),o=new Blob([i],{type:"application/json"}),T=`config-backup-${e}.json`;(0,ve.saveAs)(o,T),this.clicked=!1}catch(t){this.clicked=!1,this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t)}})}downloadCurrentConfig(){let e=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download","config.json"),document.body.appendChild(t),t.click(),t.remove()}delete(e){return E(this,null,function*(){this.deleting=e;try{yield $(this.$api.delete(`/config-editor/backups/${e}`)),yield this.getConfigBackups(),this.deleting=null}catch(t){this.deleting=null,this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t)}})}deleteAllBackups(){return E(this,null,function*(){this.deleting="all";try{yield $(this.$api.delete("/config-editor/backups")),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList=[],this.deleting=null}catch(e){this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e),this.deleting=null}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=B({type:n,selectors:[["ng-component"]],inputs:{currentConfig:"currentConfig",fromSettings:"fromSettings"},decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3",3,"click","disabled"],[1,"fas","fa-fw","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-fw","fa-cog","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw",3,"ngClass"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-fw","fa-download"]],template:function(t,i){t&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),_(3),s(4,"translate"),l(),a(5,"button",3),s(6,"translate"),b("click",function(){return i.dismissModal()}),l()(),a(7,"div",4)(8,"div",5),p(9,"i",6),l(),a(10,"ul",7)(11,"li"),_(12),s(13,"translate"),l(),a(14,"li"),_(15),s(16,"translate"),l()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),_(21),s(22,"translate"),l(),p(23,"br"),a(24,"small",10),_(25),s(26,"translate"),l()(),a(27,"button",11),s(28,"translate"),b("click",function(){return i.downloadCurrentConfig()}),p(29,"i",12),l()()(),w(30,Ie,2,0,"div",13)(31,He,16,18,"ul",14),l(),a(32,"div",15),p(33,"div",16),a(34,"div",17)(35,"button",18),s(36,"translate"),b("click",function(){return i.dismissModal()}),_(37),s(38,"translate"),l()(),p(39,"div",19),l()()),t&2&&(r(3),k(d(4,13,"config.restore.title")),r(2),f("disabled",i.clicked||i.deleting),C("aria-label",d(6,15,"form.button_close")),r(7),k(d(13,17,"config.restore.help_1")),r(3),k(d(16,19,"config.restore.help_2")),r(6),k(d(22,21,"form.button_download")),r(4),k(d(26,23,"config.restore.download")),r(2),f("disabled",i.clicked||i.deleting),C("aria-label",d(28,25,"backup.backup_now")),r(3),v(i.loading?30:i.backupList.length?31:-1),r(5),f("disabled",i.clicked||i.deleting),C("aria-label",d(36,27,"form.button_close")),r(2),M(" ",d(38,29,"form.button_close")," "))},dependencies:[D,re,me,ae,P],encapsulation:2})}return n})();function Oe(n,y){if(n&1){let e=x();a(0,"button",13),s(1,"translate"),s(2,"translate"),b("click",function(){h(e);let i=m();return u(i.onCancelRestore())}),p(3,"i",14),l()}if(n&2){let e=m();f("disabled",e.saveInProgress)("openDelay",150)("ngbTooltip",d(1,4,"form.button_cancel")),C("aria-label",d(2,6,"form.button_cancel"))}}function Ne(n,y){if(n&1){let e=x();a(0,"button",15),s(1,"translate"),s(2,"translate"),b("click",function(){h(e);let i=m();return u(i.onRestore())}),p(3,"i",16),l()}n&2&&(f("openDelay",150)("ngbTooltip",d(1,3,"form.button_restore")),C("aria-label",d(2,5,"form.button_restore")))}function qe(n,y){n&1&&p(0,"i",8)}function Fe(n,y){n&1&&p(0,"i",9)}function Le(n,y){if(n&1){let e=x();a(0,"ngx-monaco-editor",17),b("onInit",function(i){h(e);let o=m();return u(o.onEditorInit(i))})("keydown.control.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())})("keydown.meta.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())}),l()}if(n&2){let e=m();f("options",e.editorOptions)("model",e.monacoEditorModel)}}function Je(n,y){if(n&1){let e=x();a(0,"ngx-monaco-diff-editor",18),b("onInit",function(i){h(e);let o=m();return u(o.onInitDiffEditor(i))})("keydown.control.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())})("keydown.meta.s",function(i){h(e);let o=m();return i.preventDefault(),u(o.onSave())}),l()}if(n&2){let e=m();f("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function ze(n,y){if(n&1){let e=x();a(0,"textarea",19),ne("ngModelChange",function(i){h(e);let o=m();return oe(o.homebridgeConfig,i)||(o.homebridgeConfig=i),u(i)}),_(1," "),l()}if(n&2){let e=m();ie("ngModel",e.homebridgeConfig)}}var xt=(()=>{class n{$api=g(H);$md=g(_e);$modal=g(ge);$monacoEditor=g(we);$route=g(ue);$renderer=g(X);$router=g(j);$settings=g(be);$toastr=g(I);$translate=g(R);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(i=>{this.homebridgeConfig=i.config,this.latestSavedConfig=JSON.parse(i.config)}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>{this.setMonacoEditorModel()}});let{action:t}=this.$router.parseUrl(this.$router.url).queryParams;if(t){switch(t){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}onEditorInit(e){window.editor=e,this.monacoEditor=e,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(e){this.monacoEditor=e.modifiedEditor,e.getModel().original.setValue(this.originalConfig),e.getModel().modified.setValue(this.homebridgeConfig),window.editor=e}onSave(){return E(this,null,function*(){if(!this.saveInProgress){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress=!0;try{if(!this.isMobile){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let t=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of t)if(i.message==="Duplicate object key"){this.saveInProgress=!1,this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig=this.monacoEditor.getModel().getValue()}let e=this.parseConfigFromEditor();this.homebridgeConfig=JSON.stringify(e,null,4),typeof e.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(e.bridge.username)?e.accessories&&!Array.isArray(e.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&!Array.isArray(e.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&Array.isArray(e.platforms)&&!this.validateSection(e.platforms,"platform")||e.accessories&&Array.isArray(e.accessories)&&!this.validateSection(e.accessories,"accessory")||e.plugins&&Array.isArray(e.plugins)&&!this.validatePlugins(e.plugins,"plugins")||e.disabledPlugins&&Array.isArray(e.disabledPlugins)&&!this.validatePlugins(e.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(e),this.originalConfig=""):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress=!1}})}onRestore(e=!1){let t=this.$modal.open(xe,{size:"lg",backdrop:"static"});t.componentInstance.currentConfig=this.homebridgeConfig,t.componentInstance.fromSettings=e,t.result.then(i=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig),this.$api.get(`/config-editor/backups/${i}`).subscribe({next:o=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(o,null,4),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig,forceMoveMarkers:!0}]))},error:o=>{console.error(o),this.$toastr.error(o.error?.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onCancelRestore(){this.homebridgeConfig=this.originalConfig,this.originalConfig="",this.onRestore()}ngOnDestroy(){let e=document.querySelector(".content");this.$renderer.removeStyle(e,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove()),this.monacoEditor&&this.monacoEditor.dispose()}validateSection(e,t){for(let i of e){if(typeof i!="object"||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(!i[t])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(typeof i[t]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:t}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1}return!0}validatePlugins(e,t){for(let i of e)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:t}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(e){this.monacoEditor&&(e=JSON.stringify(e,null,4).split(`
2
2
  `).map(t=>` ${t}`).join(`
3
3
  `),setTimeout(()=>{let t=this.monacoEditor.getModel().findMatches(e);if(t.length){let i=t[0].range,o=new monaco.Range(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:o,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}},200))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(t=>t.uri==="http://homebridge/config.json"))return;let e=monaco.Uri.parse("a://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[e.toString()],schema:{type:"object",required:["bridge"],properties:{bridge:{type:"object",required:["name","username","port","pin"],properties:{name:{type:"string",description:`The Homebridge instance name.
4
4
  This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",description:`Homebridge username must be 6 pairs of colon-separated hexadecimal characters (A-F 0-9).