@ind-ds/core 0.1.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 (347) hide show
  1. package/README.md +41 -0
  2. package/dist/cjs/ind-alarm.cjs.entry.js +35 -0
  3. package/dist/cjs/ind-alarm.cjs.entry.js.map +1 -0
  4. package/dist/cjs/ind-app-header.cjs.entry.js +42 -0
  5. package/dist/cjs/ind-app-header.cjs.entry.js.map +1 -0
  6. package/dist/cjs/ind-button.cjs.entry.js +79 -0
  7. package/dist/cjs/ind-button.cjs.entry.js.map +1 -0
  8. package/dist/cjs/ind-checkbox.cjs.entry.js +49 -0
  9. package/dist/cjs/ind-checkbox.cjs.entry.js.map +1 -0
  10. package/dist/cjs/ind-dialog.cjs.entry.js +101 -0
  11. package/dist/cjs/ind-dialog.cjs.entry.js.map +1 -0
  12. package/dist/cjs/ind-divider.cjs.entry.js +21 -0
  13. package/dist/cjs/ind-divider.cjs.entry.js.map +1 -0
  14. package/dist/cjs/ind-ds.cjs.js +27 -0
  15. package/dist/cjs/ind-ds.cjs.js.map +1 -0
  16. package/dist/cjs/ind-fill-row.cjs.entry.js +34 -0
  17. package/dist/cjs/ind-fill-row.cjs.entry.js.map +1 -0
  18. package/dist/cjs/ind-health-card.cjs.entry.js +38 -0
  19. package/dist/cjs/ind-health-card.cjs.entry.js.map +1 -0
  20. package/dist/cjs/ind-input.cjs.entry.js +57 -0
  21. package/dist/cjs/ind-input.cjs.entry.js.map +1 -0
  22. package/dist/cjs/ind-led.cjs.entry.js +29 -0
  23. package/dist/cjs/ind-led.cjs.entry.js.map +1 -0
  24. package/dist/cjs/ind-mqtt-monitor.cjs.entry.js +75 -0
  25. package/dist/cjs/ind-mqtt-monitor.cjs.entry.js.map +1 -0
  26. package/dist/cjs/ind-nav-item.cjs.entry.js +48 -0
  27. package/dist/cjs/ind-nav-item.cjs.entry.js.map +1 -0
  28. package/dist/cjs/ind-progress.cjs.entry.js +48 -0
  29. package/dist/cjs/ind-progress.cjs.entry.js.map +1 -0
  30. package/dist/cjs/ind-scara-canvas.cjs.entry.js +57 -0
  31. package/dist/cjs/ind-scara-canvas.cjs.entry.js.map +1 -0
  32. package/dist/cjs/ind-select.cjs.entry.js +55 -0
  33. package/dist/cjs/ind-select.cjs.entry.js.map +1 -0
  34. package/dist/cjs/ind-shelf-canvas.cjs.entry.js +88 -0
  35. package/dist/cjs/ind-shelf-canvas.cjs.entry.js.map +1 -0
  36. package/dist/cjs/ind-sidebar-nav.cjs.entry.js +20 -0
  37. package/dist/cjs/ind-sidebar-nav.cjs.entry.js.map +1 -0
  38. package/dist/cjs/ind-status-bar.cjs.entry.js +22 -0
  39. package/dist/cjs/ind-status-bar.cjs.entry.js.map +1 -0
  40. package/dist/cjs/ind-status-dot.cjs.entry.js +31 -0
  41. package/dist/cjs/ind-status-dot.cjs.entry.js.map +1 -0
  42. package/dist/cjs/ind-textarea.cjs.entry.js +66 -0
  43. package/dist/cjs/ind-textarea.cjs.entry.js.map +1 -0
  44. package/dist/cjs/ind-toolbar-action.cjs.entry.js +23 -0
  45. package/dist/cjs/ind-toolbar-action.cjs.entry.js.map +1 -0
  46. package/dist/cjs/ind-value.cjs.entry.js +47 -0
  47. package/dist/cjs/ind-value.cjs.entry.js.map +1 -0
  48. package/dist/cjs/ind-valve.cjs.entry.js +31 -0
  49. package/dist/cjs/ind-valve.cjs.entry.js.map +1 -0
  50. package/dist/cjs/index-ph7ZTjuY.js +1638 -0
  51. package/dist/cjs/index-ph7ZTjuY.js.map +1 -0
  52. package/dist/cjs/index.cjs.js +5 -0
  53. package/dist/cjs/index.cjs.js.map +1 -0
  54. package/dist/cjs/loader.cjs.js +15 -0
  55. package/dist/cjs/loader.cjs.js.map +1 -0
  56. package/dist/collection/collection-manifest.json +35 -0
  57. package/dist/collection/components/atoms/alarm/alarm.css +87 -0
  58. package/dist/collection/components/atoms/alarm/alarm.js +122 -0
  59. package/dist/collection/components/atoms/alarm/alarm.js.map +1 -0
  60. package/dist/collection/components/atoms/button/button.css +110 -0
  61. package/dist/collection/components/atoms/button/button.js +215 -0
  62. package/dist/collection/components/atoms/button/button.js.map +1 -0
  63. package/dist/collection/components/atoms/checkbox/checkbox.css +92 -0
  64. package/dist/collection/components/atoms/checkbox/checkbox.js +214 -0
  65. package/dist/collection/components/atoms/checkbox/checkbox.js.map +1 -0
  66. package/dist/collection/components/atoms/dialog/dialog.css +85 -0
  67. package/dist/collection/components/atoms/dialog/dialog.js +265 -0
  68. package/dist/collection/components/atoms/dialog/dialog.js.map +1 -0
  69. package/dist/collection/components/atoms/divider/divider.css +16 -0
  70. package/dist/collection/components/atoms/divider/divider.js +50 -0
  71. package/dist/collection/components/atoms/divider/divider.js.map +1 -0
  72. package/dist/collection/components/atoms/input/input.css +92 -0
  73. package/dist/collection/components/atoms/input/input.js +427 -0
  74. package/dist/collection/components/atoms/input/input.js.map +1 -0
  75. package/dist/collection/components/atoms/led/led.css +91 -0
  76. package/dist/collection/components/atoms/led/led.js +123 -0
  77. package/dist/collection/components/atoms/led/led.js.map +1 -0
  78. package/dist/collection/components/atoms/progress/progress.css +69 -0
  79. package/dist/collection/components/atoms/progress/progress.js +221 -0
  80. package/dist/collection/components/atoms/progress/progress.js.map +1 -0
  81. package/dist/collection/components/atoms/scara-canvas/scara-canvas.css +100 -0
  82. package/dist/collection/components/atoms/scara-canvas/scara-canvas.js +138 -0
  83. package/dist/collection/components/atoms/scara-canvas/scara-canvas.js.map +1 -0
  84. package/dist/collection/components/atoms/select/select.css +88 -0
  85. package/dist/collection/components/atoms/select/select.js +244 -0
  86. package/dist/collection/components/atoms/select/select.js.map +1 -0
  87. package/dist/collection/components/atoms/shelf-canvas/shelf-canvas.css +67 -0
  88. package/dist/collection/components/atoms/shelf-canvas/shelf-canvas.js +184 -0
  89. package/dist/collection/components/atoms/shelf-canvas/shelf-canvas.js.map +1 -0
  90. package/dist/collection/components/atoms/status-dot/status-dot.css +69 -0
  91. package/dist/collection/components/atoms/status-dot/status-dot.js +125 -0
  92. package/dist/collection/components/atoms/status-dot/status-dot.js.map +1 -0
  93. package/dist/collection/components/atoms/textarea/textarea.css +74 -0
  94. package/dist/collection/components/atoms/textarea/textarea.js +331 -0
  95. package/dist/collection/components/atoms/textarea/textarea.js.map +1 -0
  96. package/dist/collection/components/atoms/value/value.css +115 -0
  97. package/dist/collection/components/atoms/value/value.js +223 -0
  98. package/dist/collection/components/atoms/value/value.js.map +1 -0
  99. package/dist/collection/components/atoms/valve/valve.css +101 -0
  100. package/dist/collection/components/atoms/valve/valve.js +150 -0
  101. package/dist/collection/components/atoms/valve/valve.js.map +1 -0
  102. package/dist/collection/components/molecules/fill-row/fill-row.css +70 -0
  103. package/dist/collection/components/molecules/fill-row/fill-row.js +181 -0
  104. package/dist/collection/components/molecules/fill-row/fill-row.js.map +1 -0
  105. package/dist/collection/components/molecules/health-card/health-card.css +53 -0
  106. package/dist/collection/components/molecules/health-card/health-card.js +124 -0
  107. package/dist/collection/components/molecules/health-card/health-card.js.map +1 -0
  108. package/dist/collection/components/molecules/nav-item/nav-item.css +82 -0
  109. package/dist/collection/components/molecules/nav-item/nav-item.js +165 -0
  110. package/dist/collection/components/molecules/nav-item/nav-item.js.map +1 -0
  111. package/dist/collection/components/molecules/toolbar-action/toolbar-action.css +36 -0
  112. package/dist/collection/components/molecules/toolbar-action/toolbar-action.js +45 -0
  113. package/dist/collection/components/molecules/toolbar-action/toolbar-action.js.map +1 -0
  114. package/dist/collection/components/organisms/app-header/app-header.css +127 -0
  115. package/dist/collection/components/organisms/app-header/app-header.js +256 -0
  116. package/dist/collection/components/organisms/app-header/app-header.js.map +1 -0
  117. package/dist/collection/components/organisms/mqtt-monitor/mqtt-monitor.css +96 -0
  118. package/dist/collection/components/organisms/mqtt-monitor/mqtt-monitor.js +205 -0
  119. package/dist/collection/components/organisms/mqtt-monitor/mqtt-monitor.js.map +1 -0
  120. package/dist/collection/components/organisms/sidebar-nav/sidebar-nav.css +39 -0
  121. package/dist/collection/components/organisms/sidebar-nav/sidebar-nav.js +26 -0
  122. package/dist/collection/components/organisms/sidebar-nav/sidebar-nav.js.map +1 -0
  123. package/dist/collection/components/organisms/status-bar/status-bar.css +34 -0
  124. package/dist/collection/components/organisms/status-bar/status-bar.js +76 -0
  125. package/dist/collection/components/organisms/status-bar/status-bar.js.map +1 -0
  126. package/dist/collection/index.js +2 -0
  127. package/dist/collection/index.js.map +1 -0
  128. package/dist/components/ind-alarm.d.ts +11 -0
  129. package/dist/components/ind-alarm.js +2 -0
  130. package/dist/components/ind-alarm.js.map +1 -0
  131. package/dist/components/ind-app-header.d.ts +11 -0
  132. package/dist/components/ind-app-header.js +2 -0
  133. package/dist/components/ind-app-header.js.map +1 -0
  134. package/dist/components/ind-button.d.ts +11 -0
  135. package/dist/components/ind-button.js +2 -0
  136. package/dist/components/ind-button.js.map +1 -0
  137. package/dist/components/ind-checkbox.d.ts +11 -0
  138. package/dist/components/ind-checkbox.js +2 -0
  139. package/dist/components/ind-checkbox.js.map +1 -0
  140. package/dist/components/ind-dialog.d.ts +11 -0
  141. package/dist/components/ind-dialog.js +2 -0
  142. package/dist/components/ind-dialog.js.map +1 -0
  143. package/dist/components/ind-divider.d.ts +11 -0
  144. package/dist/components/ind-divider.js +2 -0
  145. package/dist/components/ind-divider.js.map +1 -0
  146. package/dist/components/ind-fill-row.d.ts +11 -0
  147. package/dist/components/ind-fill-row.js +2 -0
  148. package/dist/components/ind-fill-row.js.map +1 -0
  149. package/dist/components/ind-health-card.d.ts +11 -0
  150. package/dist/components/ind-health-card.js +2 -0
  151. package/dist/components/ind-health-card.js.map +1 -0
  152. package/dist/components/ind-input.d.ts +11 -0
  153. package/dist/components/ind-input.js +2 -0
  154. package/dist/components/ind-input.js.map +1 -0
  155. package/dist/components/ind-led.d.ts +11 -0
  156. package/dist/components/ind-led.js +2 -0
  157. package/dist/components/ind-led.js.map +1 -0
  158. package/dist/components/ind-mqtt-monitor.d.ts +11 -0
  159. package/dist/components/ind-mqtt-monitor.js +2 -0
  160. package/dist/components/ind-mqtt-monitor.js.map +1 -0
  161. package/dist/components/ind-nav-item.d.ts +11 -0
  162. package/dist/components/ind-nav-item.js +2 -0
  163. package/dist/components/ind-nav-item.js.map +1 -0
  164. package/dist/components/ind-progress.d.ts +11 -0
  165. package/dist/components/ind-progress.js +2 -0
  166. package/dist/components/ind-progress.js.map +1 -0
  167. package/dist/components/ind-scara-canvas.d.ts +11 -0
  168. package/dist/components/ind-scara-canvas.js +2 -0
  169. package/dist/components/ind-scara-canvas.js.map +1 -0
  170. package/dist/components/ind-select.d.ts +11 -0
  171. package/dist/components/ind-select.js +2 -0
  172. package/dist/components/ind-select.js.map +1 -0
  173. package/dist/components/ind-shelf-canvas.d.ts +11 -0
  174. package/dist/components/ind-shelf-canvas.js +2 -0
  175. package/dist/components/ind-shelf-canvas.js.map +1 -0
  176. package/dist/components/ind-sidebar-nav.d.ts +11 -0
  177. package/dist/components/ind-sidebar-nav.js +2 -0
  178. package/dist/components/ind-sidebar-nav.js.map +1 -0
  179. package/dist/components/ind-status-bar.d.ts +11 -0
  180. package/dist/components/ind-status-bar.js +2 -0
  181. package/dist/components/ind-status-bar.js.map +1 -0
  182. package/dist/components/ind-status-dot.d.ts +11 -0
  183. package/dist/components/ind-status-dot.js +2 -0
  184. package/dist/components/ind-status-dot.js.map +1 -0
  185. package/dist/components/ind-textarea.d.ts +11 -0
  186. package/dist/components/ind-textarea.js +2 -0
  187. package/dist/components/ind-textarea.js.map +1 -0
  188. package/dist/components/ind-toolbar-action.d.ts +11 -0
  189. package/dist/components/ind-toolbar-action.js +2 -0
  190. package/dist/components/ind-toolbar-action.js.map +1 -0
  191. package/dist/components/ind-value.d.ts +11 -0
  192. package/dist/components/ind-value.js +2 -0
  193. package/dist/components/ind-value.js.map +1 -0
  194. package/dist/components/ind-valve.d.ts +11 -0
  195. package/dist/components/ind-valve.js +2 -0
  196. package/dist/components/ind-valve.js.map +1 -0
  197. package/dist/components/index.d.ts +35 -0
  198. package/dist/components/index.js +2 -0
  199. package/dist/components/index.js.map +1 -0
  200. package/dist/components/p-D-FsSjAC.js +2 -0
  201. package/dist/components/p-D-FsSjAC.js.map +1 -0
  202. package/dist/components/p-acsAzrRn.js +2 -0
  203. package/dist/components/p-acsAzrRn.js.map +1 -0
  204. package/dist/docs.d.ts +480 -0
  205. package/dist/docs.json +5360 -0
  206. package/dist/esm/ind-alarm.entry.js +33 -0
  207. package/dist/esm/ind-alarm.entry.js.map +1 -0
  208. package/dist/esm/ind-app-header.entry.js +40 -0
  209. package/dist/esm/ind-app-header.entry.js.map +1 -0
  210. package/dist/esm/ind-button.entry.js +77 -0
  211. package/dist/esm/ind-button.entry.js.map +1 -0
  212. package/dist/esm/ind-checkbox.entry.js +47 -0
  213. package/dist/esm/ind-checkbox.entry.js.map +1 -0
  214. package/dist/esm/ind-dialog.entry.js +99 -0
  215. package/dist/esm/ind-dialog.entry.js.map +1 -0
  216. package/dist/esm/ind-divider.entry.js +19 -0
  217. package/dist/esm/ind-divider.entry.js.map +1 -0
  218. package/dist/esm/ind-ds.js +23 -0
  219. package/dist/esm/ind-ds.js.map +1 -0
  220. package/dist/esm/ind-fill-row.entry.js +32 -0
  221. package/dist/esm/ind-fill-row.entry.js.map +1 -0
  222. package/dist/esm/ind-health-card.entry.js +36 -0
  223. package/dist/esm/ind-health-card.entry.js.map +1 -0
  224. package/dist/esm/ind-input.entry.js +55 -0
  225. package/dist/esm/ind-input.entry.js.map +1 -0
  226. package/dist/esm/ind-led.entry.js +27 -0
  227. package/dist/esm/ind-led.entry.js.map +1 -0
  228. package/dist/esm/ind-mqtt-monitor.entry.js +73 -0
  229. package/dist/esm/ind-mqtt-monitor.entry.js.map +1 -0
  230. package/dist/esm/ind-nav-item.entry.js +46 -0
  231. package/dist/esm/ind-nav-item.entry.js.map +1 -0
  232. package/dist/esm/ind-progress.entry.js +46 -0
  233. package/dist/esm/ind-progress.entry.js.map +1 -0
  234. package/dist/esm/ind-scara-canvas.entry.js +55 -0
  235. package/dist/esm/ind-scara-canvas.entry.js.map +1 -0
  236. package/dist/esm/ind-select.entry.js +53 -0
  237. package/dist/esm/ind-select.entry.js.map +1 -0
  238. package/dist/esm/ind-shelf-canvas.entry.js +86 -0
  239. package/dist/esm/ind-shelf-canvas.entry.js.map +1 -0
  240. package/dist/esm/ind-sidebar-nav.entry.js +18 -0
  241. package/dist/esm/ind-sidebar-nav.entry.js.map +1 -0
  242. package/dist/esm/ind-status-bar.entry.js +20 -0
  243. package/dist/esm/ind-status-bar.entry.js.map +1 -0
  244. package/dist/esm/ind-status-dot.entry.js +29 -0
  245. package/dist/esm/ind-status-dot.entry.js.map +1 -0
  246. package/dist/esm/ind-textarea.entry.js +64 -0
  247. package/dist/esm/ind-textarea.entry.js.map +1 -0
  248. package/dist/esm/ind-toolbar-action.entry.js +21 -0
  249. package/dist/esm/ind-toolbar-action.entry.js.map +1 -0
  250. package/dist/esm/ind-value.entry.js +45 -0
  251. package/dist/esm/ind-value.entry.js.map +1 -0
  252. package/dist/esm/ind-valve.entry.js +29 -0
  253. package/dist/esm/ind-valve.entry.js.map +1 -0
  254. package/dist/esm/index-D2yNiL0d.js +1628 -0
  255. package/dist/esm/index-D2yNiL0d.js.map +1 -0
  256. package/dist/esm/index.js +4 -0
  257. package/dist/esm/index.js.map +1 -0
  258. package/dist/esm/loader.js +13 -0
  259. package/dist/esm/loader.js.map +1 -0
  260. package/dist/ind-ds/ind-ds.css +1 -0
  261. package/dist/ind-ds/ind-ds.esm.js +2 -0
  262. package/dist/ind-ds/ind-ds.esm.js.map +1 -0
  263. package/dist/ind-ds/index.esm.js +2 -0
  264. package/dist/ind-ds/index.esm.js.map +1 -0
  265. package/dist/ind-ds/p-0840007d.entry.js +2 -0
  266. package/dist/ind-ds/p-0840007d.entry.js.map +1 -0
  267. package/dist/ind-ds/p-1727b403.entry.js +2 -0
  268. package/dist/ind-ds/p-1727b403.entry.js.map +1 -0
  269. package/dist/ind-ds/p-1d871f3f.entry.js +2 -0
  270. package/dist/ind-ds/p-1d871f3f.entry.js.map +1 -0
  271. package/dist/ind-ds/p-296b0c55.entry.js +2 -0
  272. package/dist/ind-ds/p-296b0c55.entry.js.map +1 -0
  273. package/dist/ind-ds/p-459405b6.entry.js +2 -0
  274. package/dist/ind-ds/p-459405b6.entry.js.map +1 -0
  275. package/dist/ind-ds/p-4a4811ab.entry.js +2 -0
  276. package/dist/ind-ds/p-4a4811ab.entry.js.map +1 -0
  277. package/dist/ind-ds/p-52b18003.entry.js +2 -0
  278. package/dist/ind-ds/p-52b18003.entry.js.map +1 -0
  279. package/dist/ind-ds/p-5369d63a.entry.js +2 -0
  280. package/dist/ind-ds/p-5369d63a.entry.js.map +1 -0
  281. package/dist/ind-ds/p-595ccdce.entry.js +2 -0
  282. package/dist/ind-ds/p-595ccdce.entry.js.map +1 -0
  283. package/dist/ind-ds/p-6c5c8053.entry.js +2 -0
  284. package/dist/ind-ds/p-6c5c8053.entry.js.map +1 -0
  285. package/dist/ind-ds/p-6c8f4bbd.entry.js +2 -0
  286. package/dist/ind-ds/p-6c8f4bbd.entry.js.map +1 -0
  287. package/dist/ind-ds/p-781e21df.entry.js +2 -0
  288. package/dist/ind-ds/p-781e21df.entry.js.map +1 -0
  289. package/dist/ind-ds/p-8817625a.entry.js +2 -0
  290. package/dist/ind-ds/p-8817625a.entry.js.map +1 -0
  291. package/dist/ind-ds/p-99f55d2a.entry.js +2 -0
  292. package/dist/ind-ds/p-99f55d2a.entry.js.map +1 -0
  293. package/dist/ind-ds/p-9b93fb09.entry.js +2 -0
  294. package/dist/ind-ds/p-9b93fb09.entry.js.map +1 -0
  295. package/dist/ind-ds/p-D2yNiL0d.js +3 -0
  296. package/dist/ind-ds/p-D2yNiL0d.js.map +1 -0
  297. package/dist/ind-ds/p-c8de42e9.entry.js +2 -0
  298. package/dist/ind-ds/p-c8de42e9.entry.js.map +1 -0
  299. package/dist/ind-ds/p-c9f752e6.entry.js +2 -0
  300. package/dist/ind-ds/p-c9f752e6.entry.js.map +1 -0
  301. package/dist/ind-ds/p-cee8bf2b.entry.js +2 -0
  302. package/dist/ind-ds/p-cee8bf2b.entry.js.map +1 -0
  303. package/dist/ind-ds/p-cf07b580.entry.js +2 -0
  304. package/dist/ind-ds/p-cf07b580.entry.js.map +1 -0
  305. package/dist/ind-ds/p-d1edc052.entry.js +2 -0
  306. package/dist/ind-ds/p-d1edc052.entry.js.map +1 -0
  307. package/dist/ind-ds/p-ea24a59d.entry.js +2 -0
  308. package/dist/ind-ds/p-ea24a59d.entry.js.map +1 -0
  309. package/dist/ind-ds/p-ec0b3785.entry.js +2 -0
  310. package/dist/ind-ds/p-ec0b3785.entry.js.map +1 -0
  311. package/dist/ind-ds/p-ee453874.entry.js +2 -0
  312. package/dist/ind-ds/p-ee453874.entry.js.map +1 -0
  313. package/dist/index.cjs.js +1 -0
  314. package/dist/index.js +1 -0
  315. package/dist/types/components/atoms/alarm/alarm.d.ts +13 -0
  316. package/dist/types/components/atoms/button/button.d.ts +31 -0
  317. package/dist/types/components/atoms/checkbox/checkbox.d.ts +18 -0
  318. package/dist/types/components/atoms/dialog/dialog.d.ts +29 -0
  319. package/dist/types/components/atoms/divider/divider.d.ts +6 -0
  320. package/dist/types/components/atoms/input/input.d.ts +34 -0
  321. package/dist/types/components/atoms/led/led.d.ts +14 -0
  322. package/dist/types/components/atoms/progress/progress.d.ts +24 -0
  323. package/dist/types/components/atoms/scara-canvas/scara-canvas.d.ts +21 -0
  324. package/dist/types/components/atoms/select/select.d.ts +27 -0
  325. package/dist/types/components/atoms/shelf-canvas/shelf-canvas.d.ts +29 -0
  326. package/dist/types/components/atoms/status-dot/status-dot.d.ts +14 -0
  327. package/dist/types/components/atoms/textarea/textarea.d.ts +28 -0
  328. package/dist/types/components/atoms/value/value.d.ts +24 -0
  329. package/dist/types/components/atoms/valve/valve.d.ts +17 -0
  330. package/dist/types/components/molecules/fill-row/fill-row.d.ts +19 -0
  331. package/dist/types/components/molecules/health-card/health-card.d.ts +13 -0
  332. package/dist/types/components/molecules/nav-item/nav-item.d.ts +17 -0
  333. package/dist/types/components/molecules/toolbar-action/toolbar-action.d.ts +6 -0
  334. package/dist/types/components/organisms/app-header/app-header.d.ts +26 -0
  335. package/dist/types/components/organisms/mqtt-monitor/mqtt-monitor.d.ts +23 -0
  336. package/dist/types/components/organisms/sidebar-nav/sidebar-nav.d.ts +11 -0
  337. package/dist/types/components/organisms/status-bar/status-bar.d.ts +13 -0
  338. package/dist/types/components.d.ts +1775 -0
  339. package/dist/types/index.d.ts +21 -0
  340. package/dist/types/stencil-public-runtime.d.ts +1861 -0
  341. package/loader/cdn.js +1 -0
  342. package/loader/index.cjs.js +1 -0
  343. package/loader/index.d.ts +24 -0
  344. package/loader/index.es2017.js +1 -0
  345. package/loader/index.js +2 -0
  346. package/package.json +87 -0
  347. package/utilities.css +324 -0
@@ -0,0 +1,4 @@
1
+
2
+ //# sourceMappingURL=index.js.map
3
+
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { g as globalScripts, b as bootstrapLazy } from './index-D2yNiL0d.js';
2
+ export { s as setNonce } from './index-D2yNiL0d.js';
3
+
4
+ const defineCustomElements = async (win, options) => {
5
+ if (typeof window === 'undefined') return undefined;
6
+ await globalScripts();
7
+ return bootstrapLazy([["ind-app-header",[[769,"ind-app-header",{"brand":[1],"subBrand":[1,"sub-brand"],"machineId":[1,"machine-id"],"mqttState":[1,"mqtt-state"],"mqttLabel":[1,"mqtt-label"],"version":[1],"docsUrl":[1,"docs-url"],"hideChangeMachine":[4,"hide-change-machine"],"hideDisconnect":[4,"hide-disconnect"]}]]],["ind-fill-row",[[769,"ind-fill-row",{"tag":[1],"label":[1],"value":[2],"max":[2],"unit":[1],"variant":[513],"severity":[4]}]]],["ind-health-card",[[513,"ind-health-card",{"heading":[1],"state":[513],"stateLabel":[1,"state-label"],"detail":[1]}]]],["ind-status-bar",[[769,"ind-status-bar",{"state":[513],"message":[1]}]]],["ind-alarm",[[513,"ind-alarm",{"priority":[513],"acknowledged":[516],"label":[1],"timestamp":[1]}]]],["ind-button",[[769,"ind-button",{"variant":[513],"size":[513],"disabled":[516],"label":[1],"holdToConfirmMs":[2,"hold-to-confirm-ms"],"progress":[32]}]]],["ind-checkbox",[[513,"ind-checkbox",{"checked":[1540],"indeterminate":[516],"disabled":[516],"size":[513],"label":[1],"name":[1],"value":[1]},null,{"indeterminate":[{"syncIndeterminate":0}]}]]],["ind-dialog",[[769,"ind-dialog",{"open":[1540],"heading":[1],"size":[513],"closeOnBackdrop":[4,"close-on-backdrop"],"hasFooter":[32],"show":[64],"close":[64]},null,{"open":[{"onOpenChange":0}]}]]],["ind-divider",[[513,"ind-divider",{"orientation":[513]}]]],["ind-input",[[769,"ind-input",{"type":[513],"size":[513],"value":[1025],"placeholder":[1],"disabled":[516],"readonly":[516],"invalid":[516],"label":[1],"name":[1],"min":[8],"max":[8],"step":[8],"pattern":[1],"autocomplete":[1],"mode":[1,"inputmode"],"hasFocus":[32],"setFocus":[64]}]]],["ind-led",[[513,"ind-led",{"state":[513],"size":[513],"blinking":[516],"label":[1]}]]],["ind-mqtt-monitor",[[513,"ind-mqtt-monitor",{"log":[1],"filterValue":[1025,"filter-value"],"paused":[1028],"rows":[2]},null,{"log":[{"onLogChange":0}]}]]],["ind-nav-item",[[769,"ind-nav-item",{"active":[516],"disabled":[516],"label":[1],"href":[1],"badge":[8]}]]],["ind-scara-canvas",[[513,"ind-scara-canvas",{"joints":[1],"linkLengths":[1,"link-lengths"],"state":[513]}]]],["ind-select",[[513,"ind-select",{"options":[1],"value":[1025],"placeholder":[1],"label":[1],"name":[1],"size":[513],"disabled":[516],"invalid":[516]}]]],["ind-shelf-canvas",[[513,"ind-shelf-canvas",{"slots":[1],"rows":[2],"cols":[2],"heading":[1]}]]],["ind-sidebar-nav",[[257,"ind-sidebar-nav"]]],["ind-textarea",[[513,"ind-textarea",{"value":[1025],"placeholder":[1],"label":[1],"name":[1],"rows":[2],"size":[513],"variant":[513],"disabled":[516],"readonly":[516],"invalid":[516],"autoScroll":[4,"auto-scroll"]},null,{"value":[{"onValueChange":0}]}]]],["ind-toolbar-action",[[769,"ind-toolbar-action",{"counter":[8]}]]],["ind-value",[[513,"ind-value",{"value":[8],"unit":[1],"precision":[2],"alarm":[513],"trend":[513],"size":[513],"label":[1],"tag":[1]}]]],["ind-valve",[[513,"ind-valve",{"state":[513],"orientation":[513],"size":[513],"label":[1],"tag":[1]}]]],["ind-progress",[[513,"ind-progress",{"value":[2],"max":[2],"variant":[513],"size":[513],"label":[1],"showValue":[4,"show-value"],"unit":[1],"indeterminate":[516]}]]],["ind-status-dot",[[513,"ind-status-dot",{"state":[513],"size":[513],"blinking":[516],"label":[1]}]]]], options);
8
+ };
9
+
10
+ export { defineCustomElements };
11
+ //# sourceMappingURL=loader.js.map
12
+
13
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sources":["@lazy-external-entrypoint?app-data=conditional"],"sourcesContent":["export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\nexport const defineCustomElements = async (win, options) => {\n if (typeof window === 'undefined') return undefined;\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n};\n"],"names":[],"mappings":";;;AAGY,MAAC,oBAAoB,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK;AAC5D,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,SAAS;AACrD,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D;;;;"}
@@ -0,0 +1 @@
1
+ :root,[data-theme="dark"]{--ind-color-palette-neutral-0:#000000;--ind-color-palette-neutral-50:#0a0d11;--ind-color-palette-neutral-100:#11161c;--ind-color-palette-neutral-200:#1a2129;--ind-color-palette-neutral-300:#2a3340;--ind-color-palette-neutral-400:#3d4856;--ind-color-palette-neutral-500:#5a6776;--ind-color-palette-neutral-600:#8390a0;--ind-color-palette-neutral-700:#aab5c2;--ind-color-palette-neutral-800:#d0d7e0;--ind-color-palette-neutral-900:#eef1f5;--ind-color-palette-neutral-1000:#ffffff;--ind-color-palette-green-300:#4ade80;--ind-color-palette-green-500:#16a34a;--ind-color-palette-amber-300:#fcd34d;--ind-color-palette-amber-500:#f59e0b;--ind-color-palette-red-300:#f87171;--ind-color-palette-red-500:#dc2626;--ind-color-palette-blue-300:#60a5fa;--ind-color-palette-blue-500:#2563eb;--ind-color-palette-purple-300:#a78bfa;--ind-color-palette-purple-500:#7c3aed;--ind-color-palette-cyan-300:#22d3ee;--ind-color-palette-cyan-500:#0891b2;--ind-motion-duration-instant:0ms;--ind-motion-duration-fast:120ms;--ind-motion-duration-base:200ms;--ind-motion-duration-slow:320ms;--ind-motion-blink-slow:1000ms;--ind-motion-blink-fast:400ms;--ind-motion-blink-urgent:200ms;--ind-motion-easing-linear:linear;--ind-motion-easing-standard:cubic-bezier(0.2, 0, 0.2, 1);--ind-size-button-sm:26px;--ind-size-button-md:32px;--ind-size-button-lg:38px;--ind-size-button-xl:42px;--ind-size-input-sm:24px;--ind-size-input-md:32px;--ind-size-input-lg:40px;--ind-size-sidebar-width:178px;--ind-size-canvas-robot-width:320px;--ind-size-canvas-robot-height:220px;--ind-size-canvas-shelves-width:480px;--ind-size-canvas-shelves-height:340px;--ind-size-window-min-width:820px;--ind-size-window-min-height:620px;--ind-spacing-0:0;--ind-spacing-1:2px;--ind-spacing-2:4px;--ind-spacing-3:6px;--ind-spacing-4:8px;--ind-spacing-5:12px;--ind-spacing-6:16px;--ind-spacing-7:20px;--ind-spacing-8:24px;--ind-spacing-9:32px;--ind-spacing-10:40px;--ind-radius-none:0;--ind-radius-sm:2px;--ind-radius-md:3px;--ind-radius-lg:6px;--ind-radius-full:9999px;--ind-font-family-sans:'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;--ind-font-family-mono:'JetBrains Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;--ind-font-size-xs:10px;--ind-font-size-sm:11px;--ind-font-size-base:12px;--ind-font-size-md:13px;--ind-font-size-lg:14px;--ind-font-size-xl:16px;--ind-font-size-2xl:20px;--ind-font-size-3xl:28px;--ind-font-weight-regular:400;--ind-font-weight-medium:500;--ind-font-weight-semibold:600;--ind-font-weight-bold:700;--ind-font-line-height-tight:1.1;--ind-font-line-height-normal:1.4;--ind-font-line-height-loose:1.6;--ind-font-feature-tabular:'tnum' 1, 'lnum' 1;--ind-alarm-high-high-priority:1;--ind-alarm-high-high-label:HH;--ind-alarm-high-priority:2;--ind-alarm-high-label:H;--ind-alarm-low-priority:3;--ind-alarm-low-label:L;--ind-alarm-low-low-priority:4;--ind-alarm-low-low-label:LL;--ind-button-ghost-bg:rgba(0, 0, 0, 0);--ind-state-running-glow:rgba(34, 197, 94, 0.6);--ind-state-stopped-glow:rgba(131, 144, 160, 0.35);--ind-state-fault-glow:rgba(220, 38, 38, 0.7);--ind-state-warning-glow:rgba(245, 158, 11, 0.6);--ind-state-maintenance-glow:rgba(37, 99, 235, 0.6);--ind-alarm-high-high-fg:var(--ind-color-palette-neutral-1000);--ind-alarm-high-high-bg:var(--ind-color-palette-red-500);--ind-alarm-high-high-border:var(--ind-color-palette-red-300);--ind-alarm-high-fg:var(--ind-color-palette-neutral-0);--ind-alarm-high-bg:var(--ind-color-palette-amber-500);--ind-alarm-high-border:var(--ind-color-palette-amber-300);--ind-alarm-low-fg:var(--ind-color-palette-neutral-1000);--ind-alarm-low-bg:var(--ind-color-palette-cyan-500);--ind-alarm-low-border:var(--ind-color-palette-cyan-300);--ind-alarm-low-low-fg:var(--ind-color-palette-neutral-1000);--ind-alarm-low-low-bg:var(--ind-color-palette-purple-500);--ind-alarm-low-low-border:var(--ind-color-palette-purple-300);--ind-button-default-bg:var(--ind-color-palette-neutral-200);--ind-button-default-bg-hover:var(--ind-color-palette-neutral-300);--ind-button-default-bg-active:var(--ind-color-palette-neutral-400);--ind-button-default-fg:var(--ind-color-palette-neutral-900);--ind-button-default-border:var(--ind-color-palette-neutral-400);--ind-button-primary-bg:var(--ind-color-palette-blue-500);--ind-button-primary-bg-hover:var(--ind-color-palette-blue-300);--ind-button-primary-bg-active:var(--ind-color-palette-blue-300);--ind-button-primary-fg:var(--ind-color-palette-neutral-1000);--ind-button-primary-border:var(--ind-color-palette-blue-300);--ind-button-danger-bg:var(--ind-color-palette-red-500);--ind-button-danger-bg-hover:var(--ind-color-palette-red-300);--ind-button-danger-bg-active:var(--ind-color-palette-red-300);--ind-button-danger-fg:var(--ind-color-palette-neutral-1000);--ind-button-danger-border:var(--ind-color-palette-red-300);--ind-button-ghost-bg-hover:var(--ind-color-palette-neutral-200);--ind-button-ghost-bg-active:var(--ind-color-palette-neutral-300);--ind-button-ghost-fg:var(--ind-color-palette-neutral-900);--ind-button-ghost-border:var(--ind-color-palette-neutral-400);--ind-feedback-success-fg:var(--ind-color-palette-neutral-1000);--ind-feedback-success-bg:var(--ind-color-palette-green-500);--ind-feedback-success-border:var(--ind-color-palette-green-300);--ind-feedback-warning-fg:var(--ind-color-palette-neutral-0);--ind-feedback-warning-bg:var(--ind-color-palette-amber-500);--ind-feedback-warning-border:var(--ind-color-palette-amber-300);--ind-feedback-error-fg:var(--ind-color-palette-neutral-1000);--ind-feedback-error-bg:var(--ind-color-palette-red-500);--ind-feedback-error-border:var(--ind-color-palette-red-300);--ind-feedback-info-fg:var(--ind-color-palette-neutral-1000);--ind-feedback-info-bg:var(--ind-color-palette-cyan-500);--ind-feedback-info-border:var(--ind-color-palette-cyan-300);--ind-state-running-fg:var(--ind-color-palette-neutral-1000);--ind-state-running-bg:var(--ind-color-palette-green-500);--ind-state-running-border:var(--ind-color-palette-green-300);--ind-state-stopped-fg:var(--ind-color-palette-neutral-900);--ind-state-stopped-bg:var(--ind-color-palette-neutral-500);--ind-state-stopped-border:var(--ind-color-palette-neutral-600);--ind-state-fault-fg:var(--ind-color-palette-neutral-1000);--ind-state-fault-bg:var(--ind-color-palette-red-500);--ind-state-fault-border:var(--ind-color-palette-red-300);--ind-state-warning-fg:var(--ind-color-palette-neutral-0);--ind-state-warning-bg:var(--ind-color-palette-amber-500);--ind-state-warning-border:var(--ind-color-palette-amber-300);--ind-state-maintenance-fg:var(--ind-color-palette-neutral-1000);--ind-state-maintenance-bg:var(--ind-color-palette-blue-500);--ind-state-maintenance-border:var(--ind-color-palette-blue-300);--ind-surface-background:var(--ind-color-palette-neutral-50);--ind-surface-panel:var(--ind-color-palette-neutral-100);--ind-surface-raised:var(--ind-color-palette-neutral-200);--ind-surface-sunken:var(--ind-color-palette-neutral-0);--ind-surface-border-subtle:var(--ind-color-palette-neutral-200);--ind-surface-border-default:var(--ind-color-palette-neutral-300);--ind-surface-border-strong:var(--ind-color-palette-neutral-500);--ind-surface-text-primary:var(--ind-color-palette-neutral-900);--ind-surface-text-secondary:var(--ind-color-palette-neutral-700);--ind-surface-text-muted:var(--ind-color-palette-neutral-600);--ind-surface-text-inverse:var(--ind-color-palette-neutral-50);--ind-surface-focus-ring:var(--ind-color-palette-cyan-300);--ind-trend-up-fg:var(--ind-color-palette-amber-300);--ind-trend-down-fg:var(--ind-color-palette-cyan-300);--ind-trend-stable-fg:var(--ind-color-palette-neutral-600);}:root,[data-theme="dark"]{color-scheme:dark}[data-theme="light"]{--ind-surface-background:#eef1f5;--ind-surface-panel:#ffffff;--ind-surface-raised:#d0d7e0;--ind-surface-sunken:#eef1f5;--ind-surface-border-subtle:#d0d7e0;--ind-surface-border-default:#aab5c2;--ind-surface-border-strong:#5a6776;--ind-surface-text-primary:#11161c;--ind-surface-text-secondary:#2a3340;--ind-surface-text-muted:#5a6776;--ind-surface-text-inverse:#ffffff}[data-theme="light"]{color-scheme:light}[data-theme="high-contrast"]{--ind-state-running-bg:#00ff00;--ind-state-running-border:#ffffff;--ind-state-stopped-bg:#808080;--ind-state-stopped-border:#ffffff;--ind-state-fault-bg:#ff0000;--ind-state-fault-border:#ffffff;--ind-state-warning-bg:#ffff00;--ind-state-warning-border:#000000;--ind-state-maintenance-bg:#00ffff;--ind-state-maintenance-border:#ffffff;--ind-surface-background:#000000;--ind-surface-panel:#000000;--ind-surface-raised:#11161c;--ind-surface-sunken:#000000;--ind-surface-border-subtle:#ffffff;--ind-surface-border-default:#ffffff;--ind-surface-border-strong:#ffffff;--ind-surface-text-primary:#ffffff;--ind-surface-text-secondary:#eef1f5;--ind-surface-text-muted:#d0d7e0;--ind-surface-text-inverse:#000000}[data-theme="high-contrast"]{color-scheme:dark}
@@ -0,0 +1,2 @@
1
+ import{p as e,g as a,b as n}from"./p-D2yNiL0d.js";export{s as setNonce}from"./p-D2yNiL0d.js";var i=()=>{const a=import.meta.url;const n={};if(a!==""){n.resourcesUrl=new URL(".",a).href}return e(n)};i().then((async e=>{await a();return n([["p-6c5c8053",[[769,"ind-app-header",{brand:[1],subBrand:[1,"sub-brand"],machineId:[1,"machine-id"],mqttState:[1,"mqtt-state"],mqttLabel:[1,"mqtt-label"],version:[1],docsUrl:[1,"docs-url"],hideChangeMachine:[4,"hide-change-machine"],hideDisconnect:[4,"hide-disconnect"]}]]],["p-1727b403",[[769,"ind-fill-row",{tag:[1],label:[1],value:[2],max:[2],unit:[1],variant:[513],severity:[4]}]]],["p-9b93fb09",[[513,"ind-health-card",{heading:[1],state:[513],stateLabel:[1,"state-label"],detail:[1]}]]],["p-296b0c55",[[769,"ind-status-bar",{state:[513],message:[1]}]]],["p-781e21df",[[513,"ind-alarm",{priority:[513],acknowledged:[516],label:[1],timestamp:[1]}]]],["p-cee8bf2b",[[769,"ind-button",{variant:[513],size:[513],disabled:[516],label:[1],holdToConfirmMs:[2,"hold-to-confirm-ms"],progress:[32]}]]],["p-0840007d",[[513,"ind-checkbox",{checked:[1540],indeterminate:[516],disabled:[516],size:[513],label:[1],name:[1],value:[1]},null,{indeterminate:[{syncIndeterminate:0}]}]]],["p-595ccdce",[[769,"ind-dialog",{open:[1540],heading:[1],size:[513],closeOnBackdrop:[4,"close-on-backdrop"],hasFooter:[32],show:[64],close:[64]},null,{open:[{onOpenChange:0}]}]]],["p-ec0b3785",[[513,"ind-divider",{orientation:[513]}]]],["p-d1edc052",[[769,"ind-input",{type:[513],size:[513],value:[1025],placeholder:[1],disabled:[516],readonly:[516],invalid:[516],label:[1],name:[1],min:[8],max:[8],step:[8],pattern:[1],autocomplete:[1],mode:[1,"inputmode"],hasFocus:[32],setFocus:[64]}]]],["p-4a4811ab",[[513,"ind-led",{state:[513],size:[513],blinking:[516],label:[1]}]]],["p-459405b6",[[513,"ind-mqtt-monitor",{log:[1],filterValue:[1025,"filter-value"],paused:[1028],rows:[2]},null,{log:[{onLogChange:0}]}]]],["p-5369d63a",[[769,"ind-nav-item",{active:[516],disabled:[516],label:[1],href:[1],badge:[8]}]]],["p-6c8f4bbd",[[513,"ind-scara-canvas",{joints:[1],linkLengths:[1,"link-lengths"],state:[513]}]]],["p-c9f752e6",[[513,"ind-select",{options:[1],value:[1025],placeholder:[1],label:[1],name:[1],size:[513],disabled:[516],invalid:[516]}]]],["p-c8de42e9",[[513,"ind-shelf-canvas",{slots:[1],rows:[2],cols:[2],heading:[1]}]]],["p-cf07b580",[[257,"ind-sidebar-nav"]]],["p-ee453874",[[513,"ind-textarea",{value:[1025],placeholder:[1],label:[1],name:[1],rows:[2],size:[513],variant:[513],disabled:[516],readonly:[516],invalid:[516],autoScroll:[4,"auto-scroll"]},null,{value:[{onValueChange:0}]}]]],["p-99f55d2a",[[769,"ind-toolbar-action",{counter:[8]}]]],["p-52b18003",[[513,"ind-value",{value:[8],unit:[1],precision:[2],alarm:[513],trend:[513],size:[513],label:[1],tag:[1]}]]],["p-ea24a59d",[[513,"ind-valve",{state:[513],orientation:[513],size:[513],label:[1],tag:[1]}]]],["p-1d871f3f",[[513,"ind-progress",{value:[2],max:[2],variant:[513],size:[513],label:[1],showValue:[4,"show-value"],unit:[1],indeterminate:[516]}]]],["p-8817625a",[[513,"ind-status-dot",{state:[513],size:[513],blinking:[516],label:[1]}]]]],e)}));
2
+ //# sourceMappingURL=ind-ds.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ind-ds.esm.js","sources":["../../node_modules/.pnpm/@stencil+core@4.43.5/node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.43.5 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as a,a as i,h as t,H as s}from"./p-D2yNiL0d.js";const r=()=>`:host{display:inline-flex;font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-base, 12px);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));--_size:16px}:host([size="sm"]){--_size:12px}:host([size="md"]){--_size:16px}:host([size="lg"]){--_size:20px}.wrap{display:inline-flex;align-items:center;gap:var(--ind-spacing-3, 6px);cursor:pointer;user-select:none}.box{position:relative;display:inline-block;width:var(--_size);height:var(--_size);flex-shrink:0}.native{position:absolute;inset:0;margin:0;opacity:0;cursor:inherit}.mark{position:relative;display:block;width:100%;height:100%;background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-sm, 2px);transition:background var(--ind-motion-duration-fast, 120ms), border-color var(--ind-motion-duration-fast, 120ms)}.mark::after{content:"";position:absolute;inset:0;display:block;background-position:center;background-repeat:no-repeat;background-size:70%;opacity:0;transition:opacity var(--ind-motion-duration-fast, 120ms)}:host([checked]) .mark,:host([indeterminate]) .mark{background:var(--ind-button-primary-bg, #2563eb);border-color:var(--ind-button-primary-border, #60a5fa)}:host([checked]) .mark::after{opacity:1;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' d='M3 8.5l3.5 3.5L13 5'/></svg>")}:host([indeterminate]) .mark::after{opacity:1;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' d='M3 8h10'/></svg>")}.native:focus-visible+.mark{outline:2px solid var(--ind-surface-focus-ring, #22d3ee);outline-offset:2px}:host([disabled]){opacity:0.5}:host([disabled]) .wrap{cursor:not-allowed}.label{line-height:1.2}`;const n=class{constructor(i){e(this,i);this.indChange=a(this,"indChange")}get host(){return i(this)}checked=false;indeterminate=false;disabled=false;size="md";label;name;value;indChange;componentDidLoad(){this.syncIndeterminate()}syncIndeterminate(){const e=this.host.shadowRoot?.querySelector("input");if(e)e.indeterminate=this.indeterminate}onChange=e=>{const a=e.target.checked;this.checked=a;this.indChange.emit(a)};render(){const e=this.indeterminate?"mixed":this.checked?"true":"false";return t(s,{key:"d4b48a80703ea584c4db306d26fcaebd990f9d87"},t("label",{key:"d101498325e34b2d4ce87189aaf82930f81fd831",class:"wrap",part:"wrap"},t("span",{key:"8363b37e0c6a9a082dbab4e0bb26b09506cb4b00",class:"box",part:"box"},t("input",{key:"2c2a0d2e10c70a97aa2c983941f14bd3c6bc30dd",type:"checkbox",class:"native",part:"native",checked:this.checked,disabled:this.disabled,name:this.name,value:this.value,"aria-checked":e,onChange:this.onChange}),t("span",{key:"41f5ba40d9c2e27e899366e9de111d3aa4a3817c",class:"mark",part:"mark","aria-hidden":"true"})),this.label&&t("span",{key:"c9955a662691ac94a2be379edc332f550f09b53e",class:"label",part:"label"},this.label)))}static get watchers(){return{indeterminate:[{syncIndeterminate:0}]}}};n.style=r();export{n as ind_checkbox};
2
+ //# sourceMappingURL=p-0840007d.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["checkboxCss","IndCheckbox","checked","indeterminate","disabled","size","label","name","value","indChange","componentDidLoad","this","syncIndeterminate","input","host","shadowRoot","querySelector","onChange","e","next","target","emit","render","ariaChecked","h","Host","key","class","part","type"],"sources":["src/components/atoms/checkbox/checkbox.css?tag=ind-checkbox&encapsulation=shadow","src/components/atoms/checkbox/checkbox.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-base, 12px);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n --_size: 16px;\n}\n\n:host([size=\"sm\"]) { --_size: 12px; }\n:host([size=\"md\"]) { --_size: 16px; }\n:host([size=\"lg\"]) { --_size: 20px; }\n\n.wrap {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n cursor: pointer;\n user-select: none;\n}\n\n.box {\n position: relative;\n display: inline-block;\n width: var(--_size);\n height: var(--_size);\n flex-shrink: 0;\n}\n\n.native {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: inherit;\n}\n\n.mark {\n position: relative;\n display: block;\n width: 100%;\n height: 100%;\n background: var(--ind-surface-sunken, light-dark(#ffffff, #000000));\n border: 1px solid var(--ind-surface-border-default, #2a3340);\n border-radius: var(--ind-radius-sm, 2px);\n transition:\n background var(--ind-motion-duration-fast, 120ms),\n border-color var(--ind-motion-duration-fast, 120ms);\n}\n\n.mark::after {\n content: \"\";\n position: absolute;\n inset: 0;\n display: block;\n background-position: center;\n background-repeat: no-repeat;\n background-size: 70%;\n opacity: 0;\n transition: opacity var(--ind-motion-duration-fast, 120ms);\n}\n\n:host([checked]) .mark,\n:host([indeterminate]) .mark {\n background: var(--ind-button-primary-bg, #2563eb);\n border-color: var(--ind-button-primary-border, #60a5fa);\n}\n\n:host([checked]) .mark::after {\n opacity: 1;\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' d='M3 8.5l3.5 3.5L13 5'/></svg>\");\n}\n\n:host([indeterminate]) .mark::after {\n opacity: 1;\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' d='M3 8h10'/></svg>\");\n}\n\n.native:focus-visible + .mark {\n outline: 2px solid var(--ind-surface-focus-ring, #22d3ee);\n outline-offset: 2px;\n}\n\n:host([disabled]) {\n opacity: 0.5;\n}\n:host([disabled]) .wrap {\n cursor: not-allowed;\n}\n\n.label {\n line-height: 1.2;\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-checkbox',\n styleUrl: 'checkbox.css',\n shadow: true,\n})\nexport class IndCheckbox {\n @Element() host!: HTMLElement;\n\n @Prop({ mutable: true, reflect: true }) checked: boolean = false;\n @Prop({ reflect: true }) indeterminate: boolean = false;\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) size: CheckboxSize = 'md';\n @Prop() label?: string;\n @Prop() name?: string;\n @Prop() value?: string;\n\n @Event() indChange!: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.syncIndeterminate();\n }\n\n @Watch('indeterminate')\n syncIndeterminate() {\n const input = this.host.shadowRoot?.querySelector('input');\n if (input) input.indeterminate = this.indeterminate;\n }\n\n private onChange = (e: Event) => {\n const next = (e.target as HTMLInputElement).checked;\n this.checked = next;\n this.indChange.emit(next);\n };\n\n render() {\n const ariaChecked = this.indeterminate ? 'mixed' : this.checked ? 'true' : 'false';\n return (\n <Host>\n <label class=\"wrap\" part=\"wrap\">\n <span class=\"box\" part=\"box\">\n <input\n type=\"checkbox\"\n class=\"native\"\n part=\"native\"\n checked={this.checked}\n disabled={this.disabled}\n name={this.name}\n value={this.value}\n aria-checked={ariaChecked}\n onChange={this.onChange}\n />\n <span class=\"mark\" part=\"mark\" aria-hidden=\"true\" />\n </span>\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n </label>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAc,IAAM,68D,MCkBbC,EAAW,M,sFAGkBC,QAAmB,MAClCC,cAAyB,MACzBC,SAAoB,MACpBC,KAAqB,KACtCC,MACAC,KACAC,MAECC,UAET,gBAAAC,GACEC,KAAKC,mB,CAIP,iBAAAA,GACE,MAAMC,EAAQF,KAAKG,KAAKC,YAAYC,cAAc,SAClD,GAAIH,EAAOA,EAAMV,cAAgBQ,KAAKR,a,CAGhCc,SAAYC,IAClB,MAAMC,EAAQD,EAAEE,OAA4BlB,QAC5CS,KAAKT,QAAUiB,EACfR,KAAKF,UAAUY,KAAKF,EAAK,EAG3B,MAAAG,GACE,MAAMC,EAAcZ,KAAKR,cAAgB,QAAUQ,KAAKT,QAAU,OAAS,QAC3E,OACEsB,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,SAAAE,IAAA,2CAAOC,MAAM,OAAOC,KAAK,QACvBJ,EAAA,QAAAE,IAAA,2CAAMC,MAAM,MAAMC,KAAK,OACrBJ,EAAA,SAAAE,IAAA,2CACEG,KAAK,WACLF,MAAM,SACNC,KAAK,SACL1B,QAASS,KAAKT,QACdE,SAAUO,KAAKP,SACfG,KAAMI,KAAKJ,KACXC,MAAOG,KAAKH,MAAK,eACHe,EACdN,SAAUN,KAAKM,WAEjBO,EAAA,QAAAE,IAAA,2CAAMC,MAAM,OAAOC,KAAK,OAAM,cAAa,UAE5CjB,KAAKL,OAASkB,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,SAASjB,KAAKL,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as e,H as t}from"./p-D2yNiL0d.js";const i=()=>`:host{display:grid;grid-template-columns:max-content minmax(80px, 1.2fr) minmax(160px, 2fr) max-content max-content auto;gap:var(--ind-spacing-4, 8px);align-items:center;padding:var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);background:var(--ind-surface-panel);border:1px solid var(--ind-surface-border-default);border-radius:var(--ind-radius-md, 3px);font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.tag{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600);font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));letter-spacing:0.04em;min-width:32px}.label{font-size:var(--ind-font-size-base, 12px)}.progress{display:block;width:100%}.value{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600);font-size:var(--ind-font-size-md, 13px);min-width:52px;text-align:right;white-space:nowrap}.severity{font-size:var(--ind-font-size-md, 13px);width:16px;text-align:center;color:var(--ind-feedback-warning-bg, #f59e0b);line-height:1}:host([variant="error"]) .severity{color:var(--ind-feedback-error-bg, #dc2626)}.actions{display:flex;gap:var(--ind-spacing-2, 4px)}::slotted(*){flex-shrink:0}@media (max-width: 640px){:host{grid-template-columns:max-content 1fr;grid-template-rows:auto auto auto}.progress{grid-column:1 / -1}.value,.severity,.actions{grid-column:1 / -1}}`;const r=class{constructor(e){a(this,e)}tag;label;value=0;max=100;unit="%";variant="default";severity=false;render(){return e(t,{key:"58a3405e85cdc048d8efe47d3f4c1c010bc94318"},this.tag&&e("span",{key:"afe363e1253cbf40db6e9a61001a5654d2b3dfcd",class:"tag",part:"tag"},this.tag),e("span",{key:"8854993e5011b07756acb62914e3cd8c16e17ea8",class:"label",part:"label"},this.label),e("ind-progress",{key:"67b5c4f3d210cbf1df3dd3765b9293482e47d040",class:"progress",part:"progress",value:this.value,max:this.max,variant:this.variant,size:"sm"}),e("span",{key:"4bfde6d18d08e3bd8ede25a769b2776a8720a80b",class:"value",part:"value"},Math.round(this.value),this.unit?" "+this.unit:""),this.severity&&e("span",{key:"fd0cf71dd4cae3e5c4404da29e0232e42e6e3642",class:"severity",part:"severity","aria-hidden":"true"},"⚠"),e("span",{key:"663240206f948685c4235fbb9057450bc0874c0f",class:"actions",part:"actions"},e("slot",{key:"7c924c36ed5e348bc7262a7c50c0673ce102b8ae"})))}};r.style=i();export{r as ind_fill_row};
2
+ //# sourceMappingURL=p-1727b403.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fillRowCss","IndFillRow","tag","label","value","max","unit","variant","severity","render","h","Host","key","this","class","part","size","Math","round"],"sources":["src/components/molecules/fill-row/fill-row.css?tag=ind-fill-row&encapsulation=shadow","src/components/molecules/fill-row/fill-row.tsx"],"sourcesContent":[":host {\n display: grid;\n grid-template-columns: max-content minmax(80px, 1.2fr) minmax(160px, 2fr) max-content max-content auto;\n gap: var(--ind-spacing-4, 8px);\n align-items: center;\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-panel);\n border: 1px solid var(--ind-surface-border-default);\n border-radius: var(--ind-radius-md, 3px);\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.tag {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n letter-spacing: 0.04em;\n min-width: 32px;\n}\n\n.label {\n font-size: var(--ind-font-size-base, 12px);\n}\n\n.progress {\n display: block;\n width: 100%;\n}\n\n.value {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n font-size: var(--ind-font-size-md, 13px);\n min-width: 52px;\n text-align: right;\n white-space: nowrap;\n}\n\n.severity {\n font-size: var(--ind-font-size-md, 13px);\n width: 16px;\n text-align: center;\n color: var(--ind-feedback-warning-bg, #f59e0b);\n line-height: 1;\n}\n\n:host([variant=\"error\"]) .severity {\n color: var(--ind-feedback-error-bg, #dc2626);\n}\n\n.actions {\n display: flex;\n gap: var(--ind-spacing-2, 4px);\n}\n\n::slotted(*) {\n flex-shrink: 0;\n}\n\n@media (max-width: 640px) {\n :host {\n grid-template-columns: max-content 1fr;\n grid-template-rows: auto auto auto;\n }\n .progress { grid-column: 1 / -1; }\n .value, .severity, .actions { grid-column: 1 / -1; }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type FillRowVariant = 'default' | 'success' | 'warning' | 'error';\n\n@Component({\n tag: 'ind-fill-row',\n styleUrl: 'fill-row.css',\n shadow: true,\n})\nexport class IndFillRow {\n /** Short ID rendered in mono (e.g. \"F1\", \"TK-101\"). */\n @Prop() tag?: string;\n /** Human description. */\n @Prop() label!: string;\n /** Current level. */\n @Prop() value: number = 0;\n /** Max value. Default 100. */\n @Prop() max: number = 100;\n /** Unit suffix on the numeric value (default `%`). */\n @Prop() unit: string = '%';\n /** Drives the progress color and the severity glyph. */\n @Prop({ reflect: true }) variant: FillRowVariant = 'default';\n /** Render the severity glyph between the value and the actions. */\n @Prop() severity: boolean = false;\n\n render() {\n return (\n <Host>\n {this.tag && <span class=\"tag\" part=\"tag\">{this.tag}</span>}\n <span class=\"label\" part=\"label\">{this.label}</span>\n <ind-progress\n class=\"progress\"\n part=\"progress\"\n value={this.value}\n max={this.max}\n variant={this.variant as 'default' | 'success' | 'warning' | 'error'}\n size=\"sm\"\n />\n <span class=\"value\" part=\"value\">\n {Math.round(this.value)}{this.unit ? ' ' + this.unit : ''}\n </span>\n {this.severity && (\n <span class=\"severity\" part=\"severity\" aria-hidden=\"true\">⚠</span>\n )}\n <span class=\"actions\" part=\"actions\">\n <slot />\n </span>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAa,IAAM,i/C,MCSZC,EAAU,M,yBAEbC,IAEAC,MAEAC,MAAgB,EAEhBC,IAAc,IAEdC,KAAe,IAEEC,QAA0B,UAE3CC,SAAoB,MAE5B,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACFC,KAAKX,KAAOQ,EAAA,QAAAE,IAAA,2CAAME,MAAM,MAAMC,KAAK,OAAOF,KAAKX,KAChDQ,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,SAASF,KAAKV,OACvCO,EAAA,gBAAAE,IAAA,2CACEE,MAAM,WACNC,KAAK,WACLX,MAAOS,KAAKT,MACZC,IAAKQ,KAAKR,IACVE,QAASM,KAAKN,QACdS,KAAK,OAEPN,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,SACtBE,KAAKC,MAAML,KAAKT,OAAQS,KAAKP,KAAO,IAAMO,KAAKP,KAAO,IAExDO,KAAKL,UACJE,EAAA,QAAAE,IAAA,2CAAME,MAAM,WAAWC,KAAK,WAAU,cAAa,QAAM,KAE3DL,EAAA,QAAAE,IAAA,2CAAME,MAAM,UAAUC,KAAK,WACzBL,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as e,H as i}from"./p-D2yNiL0d.js";const t=()=>`:host{display:block;font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));--_h:8px;--_fill:var(--ind-button-primary-bg, #2563eb)}:host([size="sm"]){--_h:4px}:host([size="md"]){--_h:8px}:host([size="lg"]){--_h:12px}:host([variant="success"]){--_fill:var(--ind-feedback-success-bg, #16a34a)}:host([variant="warning"]){--_fill:var(--ind-feedback-warning-bg, #f59e0b)}:host([variant="error"]){--_fill:var(--ind-feedback-error-bg, #dc2626)}.header{display:flex;justify-content:space-between;align-items:baseline;gap:var(--ind-spacing-3, 6px);margin-bottom:var(--ind-spacing-2, 4px)}.label{color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2))}.value{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.track{position:relative;width:100%;height:var(--_h);background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-sm, 2px);overflow:hidden}.fill{display:block;height:100%;background:var(--_fill);transition:width var(--ind-motion-duration-base, 200ms) var(--ind-motion-easing-standard, ease)}:host([indeterminate]) .fill{width:30%;animation:ind-progress-march 1.4s ease-in-out infinite}@keyframes ind-progress-march{0%{margin-left:-30%}100%{margin-left:100%}}@media (prefers-reduced-motion: reduce){:host([indeterminate]) .fill{animation:none;width:100%;opacity:0.5}}`;const r=class{constructor(e){a(this,e)}value=0;max=100;variant="default";size="md";label;showValue=false;unit;indeterminate=false;percent(){if(this.max<=0)return 0;return Math.min(100,Math.max(0,this.value/this.max*100))}valueLabel(){if(this.unit==="%"||this.max===100&&!this.unit){return`${Math.round(this.percent())} %`}return`${this.value}${this.unit?" "+this.unit:""} / ${this.max}`}render(){const a=this.percent();return e(i,{key:"0e74d2952b1fe8b2356927e0e38adbcb72d863c6",role:"progressbar","aria-valuenow":this.indeterminate?undefined:this.value,"aria-valuemin":0,"aria-valuemax":this.max,"aria-label":this.label},(this.label||this.showValue)&&e("div",{key:"1fbeb6fed63ac3fb1cb830408d6ee851ec9fe989",class:"header",part:"header"},this.label&&e("span",{key:"1a2a0e6bb58c4e69b5b19587906e7c53720587cb",class:"label",part:"label"},this.label),this.showValue&&!this.indeterminate&&e("span",{key:"7fa1c9ce1e0ec68abc1b478cfb373af8266467a3",class:"value",part:"value"},this.valueLabel())),e("div",{key:"e821a5f203432e33199d111ba807eb6106068b14",class:"track",part:"track"},e("div",{key:"88e1e2728d12adea9220b3cf8f68072e85bdc1dd",class:"fill",part:"fill",style:this.indeterminate?undefined:{width:`${a}%`}})))}};r.style=t();export{r as ind_progress};
2
+ //# sourceMappingURL=p-1d871f3f.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["progressCss","IndProgress","value","max","variant","size","label","showValue","unit","indeterminate","percent","this","Math","min","valueLabel","round","render","pct","h","Host","key","role","undefined","class","part","style","width"],"sources":["src/components/atoms/progress/progress.css?tag=ind-progress&encapsulation=shadow","src/components/atoms/progress/progress.tsx"],"sourcesContent":[":host {\n display: block;\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n --_h: 8px;\n --_fill: var(--ind-button-primary-bg, #2563eb);\n}\n\n:host([size=\"sm\"]) { --_h: 4px; }\n:host([size=\"md\"]) { --_h: 8px; }\n:host([size=\"lg\"]) { --_h: 12px; }\n\n:host([variant=\"success\"]) { --_fill: var(--ind-feedback-success-bg, #16a34a); }\n:host([variant=\"warning\"]) { --_fill: var(--ind-feedback-warning-bg, #f59e0b); }\n:host([variant=\"error\"]) { --_fill: var(--ind-feedback-error-bg, #dc2626); }\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: var(--ind-spacing-3, 6px);\n margin-bottom: var(--ind-spacing-2, 4px);\n}\n\n.label {\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n}\n\n.value {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.track {\n position: relative;\n width: 100%;\n height: var(--_h);\n background: var(--ind-surface-sunken, light-dark(#ffffff, #000000));\n border: 1px solid var(--ind-surface-border-default, #2a3340);\n border-radius: var(--ind-radius-sm, 2px);\n overflow: hidden;\n}\n\n.fill {\n display: block;\n height: 100%;\n background: var(--_fill);\n transition: width var(--ind-motion-duration-base, 200ms) var(--ind-motion-easing-standard, ease);\n}\n\n:host([indeterminate]) .fill {\n width: 30%;\n animation: ind-progress-march 1.4s ease-in-out infinite;\n}\n\n@keyframes ind-progress-march {\n 0% { margin-left: -30%; }\n 100% { margin-left: 100%; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([indeterminate]) .fill {\n animation: none;\n width: 100%;\n opacity: 0.5;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'error';\nexport type ProgressSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-progress',\n styleUrl: 'progress.css',\n shadow: true,\n})\nexport class IndProgress {\n /** Current value (0–`max`). */\n @Prop() value: number = 0;\n /** Max value. */\n @Prop() max: number = 100;\n /** Visual variant. Use `warning` / `error` for low / critical fill levels. */\n @Prop({ reflect: true }) variant: ProgressVariant = 'default';\n /** Size. */\n @Prop({ reflect: true }) size: ProgressSize = 'md';\n /** Optional label rendered above the bar. */\n @Prop() label?: string;\n /** Show numeric value next to the label. */\n @Prop() showValue: boolean = false;\n /** Unit suffix for the displayed value. */\n @Prop() unit?: string;\n /** Indeterminate (animated bar, no value). */\n @Prop({ reflect: true }) indeterminate: boolean = false;\n\n private percent(): number {\n if (this.max <= 0) return 0;\n return Math.min(100, Math.max(0, (this.value / this.max) * 100));\n }\n\n private valueLabel(): string {\n if (this.unit === '%' || (this.max === 100 && !this.unit)) {\n return `${Math.round(this.percent())} %`;\n }\n return `${this.value}${this.unit ? ' ' + this.unit : ''} / ${this.max}`;\n }\n\n render() {\n const pct = this.percent();\n return (\n <Host\n role=\"progressbar\"\n aria-valuenow={this.indeterminate ? undefined : this.value}\n aria-valuemin={0}\n aria-valuemax={this.max}\n aria-label={this.label}\n >\n {(this.label || this.showValue) && (\n <div class=\"header\" part=\"header\">\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n {this.showValue && !this.indeterminate && (\n <span class=\"value\" part=\"value\">{this.valueLabel()}</span>\n )}\n </div>\n )}\n <div class=\"track\" part=\"track\">\n <div\n class=\"fill\"\n part=\"fill\"\n style={this.indeterminate ? undefined : { width: `${pct}%` }}\n />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAc,IAAM,siD,MCUbC,EAAW,M,yBAEdC,MAAgB,EAEhBC,IAAc,IAEGC,QAA2B,UAE3BC,KAAqB,KAEtCC,MAEAC,UAAqB,MAErBC,KAEiBC,cAAyB,MAE1C,OAAAC,GACN,GAAIC,KAAKR,KAAO,EAAG,OAAO,EAC1B,OAAOS,KAAKC,IAAI,IAAKD,KAAKT,IAAI,EAAIQ,KAAKT,MAAQS,KAAKR,IAAO,K,CAGrD,UAAAW,GACN,GAAIH,KAAKH,OAAS,KAAQG,KAAKR,MAAQ,MAAQQ,KAAKH,KAAO,CACzD,MAAO,GAAGI,KAAKG,MAAMJ,KAAKD,c,CAE5B,MAAO,GAAGC,KAAKT,QAAQS,KAAKH,KAAO,IAAMG,KAAKH,KAAO,QAAQG,KAAKR,K,CAGpE,MAAAa,GACE,MAAMC,EAAMN,KAAKD,UACjB,OACEQ,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,cAAa,gBACHV,KAAKF,cAAgBa,UAAYX,KAAKT,MAAK,gBAC3C,EAAC,gBACDS,KAAKR,IAAG,aACXQ,KAAKL,QAEfK,KAAKL,OAASK,KAAKJ,YACnBW,EAAA,OAAAE,IAAA,2CAAKG,MAAM,SAASC,KAAK,UACtBb,KAAKL,OAASY,EAAA,QAAAE,IAAA,2CAAMG,MAAM,QAAQC,KAAK,SAASb,KAAKL,OACrDK,KAAKJ,YAAcI,KAAKF,eACvBS,EAAA,QAAAE,IAAA,2CAAMG,MAAM,QAAQC,KAAK,SAASb,KAAKG,eAI7CI,EAAA,OAAAE,IAAA,2CAAKG,MAAM,QAAQC,KAAK,SACtBN,EAAA,OAAAE,IAAA,2CACEG,MAAM,OACNC,KAAK,OACLC,MAAOd,KAAKF,cAAgBa,UAAY,CAAEI,MAAO,GAAGT,S","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,h as a,H as s}from"./p-D2yNiL0d.js";const t=()=>`:host{display:flex;align-items:center;gap:var(--ind-spacing-3, 6px);padding:var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);background:var(--ind-surface-panel);border-top:1px solid var(--ind-surface-border-default);font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));min-height:24px;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.message{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.spacer{flex:1}.end{display:inline-flex;align-items:center;gap:var(--ind-spacing-3, 6px)}::slotted(*){font-size:var(--ind-font-size-sm, 11px)}`;const i=class{constructor(a){e(this,a)}state="neutral";message;render(){return a(s,{key:"ea26634fed8ac15e259de910eb7bcd4e5ce3d094",role:"status","aria-live":"polite"},a("ind-status-dot",{key:"a9305e75e5b0e35c5cccf526020ed00177d729e4",state:this.state,size:"sm"}),this.message&&a("span",{key:"816506e0c34aaf66249bcca19fa0741841a1dae5",class:"message",part:"message"},this.message),a("span",{key:"15edfed427f793ad354d7b71e256149323ab59b4",class:"spacer"}),a("span",{key:"abd85f3229fbc9ad3e6257400a87bab0e9743dae",class:"end",part:"end"},a("slot",{key:"bc0a1f8844f91d9158ec4f265ae12cc27b443740"})))}};i.style=t();export{i as ind_status_bar};
2
+ //# sourceMappingURL=p-296b0c55.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["statusBarCss","IndStatusBar","state","message","render","h","Host","key","role","this","size","class","part"],"sources":["src/components/organisms/status-bar/status-bar.css?tag=ind-status-bar&encapsulation=shadow","src/components/organisms/status-bar/status-bar.tsx"],"sourcesContent":[":host {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n padding: var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-panel);\n border-top: 1px solid var(--ind-surface-border-default);\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n min-height: 24px;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.message {\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.spacer {\n flex: 1;\n}\n\n.end {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n}\n\n::slotted(*) {\n font-size: var(--ind-font-size-sm, 11px);\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type StatusBarState =\n | 'neutral' | 'running' | 'stopped' | 'fault' | 'warning' | 'maintenance' | 'success' | 'info' | 'error';\n\n/**\n * Global footer bar: status dot + message on the left, slotted content on the right.\n *\n * Sized to be unobtrusive (~24 px). Drop additional `<span>` / `<ind-button size=\"sm\">`\n * children for right-aligned context (timestamps, server identifiers, action buttons).\n */\n@Component({\n tag: 'ind-status-bar',\n styleUrl: 'status-bar.css',\n shadow: true,\n})\nexport class IndStatusBar {\n @Prop({ reflect: true }) state: StatusBarState = 'neutral';\n @Prop() message?: string;\n\n render() {\n return (\n <Host role=\"status\" aria-live=\"polite\">\n <ind-status-dot state={this.state} size=\"sm\" />\n {this.message && <span class=\"message\" part=\"message\">{this.message}</span>}\n <span class=\"spacer\" />\n <span class=\"end\" part=\"end\"><slot /></span>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAe,IAAM,kqB,MCgBdC,EAAY,M,yBACEC,MAAwB,UACzCC,QAER,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,KAAK,SAAQ,YAAW,UAC5BH,EAAA,kBAAAE,IAAA,2CAAgBL,MAAOO,KAAKP,MAAOQ,KAAK,OACvCD,KAAKN,SAAWE,EAAA,QAAAE,IAAA,2CAAMI,MAAM,UAAUC,KAAK,WAAWH,KAAKN,SAC5DE,EAAA,QAAAE,IAAA,2CAAMI,MAAM,WACZN,EAAA,QAAAE,IAAA,2CAAMI,MAAM,MAAMC,KAAK,OAAMP,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as a,a as r,h as i,H as n}from"./p-D2yNiL0d.js";const t=()=>`:host{display:flex;flex-direction:column;font-family:var(--ind-font-family-sans);background:var(--ind-surface-panel);border:1px solid var(--ind-surface-border-default);border-radius:var(--ind-radius-md, 3px);overflow:hidden;color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5))}.toolbar{display:flex;align-items:center;gap:var(--ind-spacing-4, 8px);padding:var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);border-bottom:1px solid var(--ind-surface-border-default);flex-wrap:wrap}.filter{flex:1;min-width:200px;height:var(--ind-size-input-sm, 24px);padding:0 var(--ind-spacing-4, 8px);background:var(--ind-surface-sunken);border:1px solid var(--ind-surface-border-default);border-radius:var(--ind-radius-md, 3px);font:inherit;font-size:var(--ind-font-size-sm, 11px);color:inherit;outline:none;box-sizing:border-box}.filter::placeholder{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.filter:focus{border-color:var(--ind-surface-focus-ring);box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring) 35%, transparent)}.check{display:inline-flex;align-items:center;gap:var(--ind-spacing-2, 4px);font-size:var(--ind-font-size-sm, 11px);cursor:pointer;user-select:none;white-space:nowrap}.spacer{flex:1}.counter{font-family:var(--ind-font-family-mono);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));font-size:var(--ind-font-size-sm, 11px);white-space:nowrap}.clear{height:var(--ind-size-button-sm, 26px);padding:0 var(--ind-spacing-5, 12px);background:var(--ind-button-default-bg);color:var(--ind-button-default-fg);border:1px solid var(--ind-button-default-border);border-radius:var(--ind-radius-md, 3px);font:inherit;font-size:var(--ind-font-size-sm, 11px);font-weight:var(--ind-font-weight-semibold, 600);cursor:pointer}.clear:hover{background:var(--ind-button-default-bg-hover)}.clear:focus-visible{outline:2px solid var(--ind-surface-focus-ring);outline-offset:2px}.log{flex:1;width:100%;box-sizing:border-box;padding:var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);background:var(--ind-color-palette-neutral-0, #000);color:var(--ind-color-palette-neutral-800, #d0d7e0);border:none;outline:none;font-family:var(--ind-font-family-mono);font-size:var(--ind-font-size-sm, 11px);line-height:var(--ind-font-line-height-normal, 1.4);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);resize:vertical;cursor:default}`;const o=class{constructor(r){e(this,r);this.indFilterChange=a(this,"indFilterChange");this.indPauseChange=a(this,"indPauseChange");this.indClear=a(this,"indClear")}get host(){return r(this)}log="";filterValue="";paused=false;rows=18;indFilterChange;indPauseChange;indClear;componentDidLoad(){this.scrollToBottom()}onLogChange(){if(!this.paused)this.scrollToBottom()}scrollToBottom(){requestAnimationFrame((()=>{const e=this.host.shadowRoot?.querySelector(".log");if(e)e.scrollTop=e.scrollHeight}))}filteredLines(){const e=this.log.split("\n");if(!this.filterValue)return e;const a=this.filterValue.toLowerCase();return e.filter((e=>e.toLowerCase().includes(a)))}onFilter=e=>{const a=e.target.value;this.filterValue=a;this.indFilterChange.emit(a)};onPause=e=>{const a=e.target.checked;this.paused=a;this.indPauseChange.emit(a)};render(){const e=this.filteredLines();const a=this.log?this.log.split("\n").filter((e=>e.length>0)).length:0;const r=e.filter((e=>e.length>0)).length;const t=this.filterValue?`${r} / ${a} msg`:`${a} msg`;return i(n,{key:"611c593c0c13009b372c0f3d8077c363c9801b97"},i("div",{key:"6552180414c9c06bf728b6d94eaa4ec282f9ecc9",class:"toolbar",part:"toolbar"},i("input",{key:"715c06c1dcd91764b619093804bd52dd9ebb512c",class:"filter",part:"filter",type:"search",placeholder:"Filter topic / payload...",value:this.filterValue,onInput:this.onFilter}),i("label",{key:"c7fc734cd7d0e08d28191804852ef7bf11ed01c7",class:"check"},i("input",{key:"6b250678c32e5e83b2925275cdd44579cf682933",type:"checkbox",checked:this.paused,onChange:this.onPause}),i("span",{key:"77f2a59bd50c2a8c48c27a719730ba2efc5e5b9e"},"Pause")),i("span",{key:"eb60e89a998c60548f62d982691ffbdc1ce08eb7",class:"spacer"}),i("span",{key:"298521f0328cb32523d63dd3a45248575313b6f6",class:"counter",part:"counter"},t),i("button",{key:"32a5aa35b0e622e8fac010a79bbd30cb434ba09e",type:"button",class:"clear",part:"clear",onClick:()=>this.indClear.emit()},"Clear")),i("textarea",{key:"7ca66e1a42cdd672faae4d14004af23c2cae7bae",class:"log",part:"log",readonly:true,rows:this.rows},e.join("\n")))}static get watchers(){return{log:[{onLogChange:0}]}}};o.style=t();export{o as ind_mqtt_monitor};
2
+ //# sourceMappingURL=p-459405b6.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mqttMonitorCss","IndMqttMonitor","log","filterValue","paused","rows","indFilterChange","indPauseChange","indClear","componentDidLoad","this","scrollToBottom","onLogChange","requestAnimationFrame","ta","host","shadowRoot","querySelector","scrollTop","scrollHeight","filteredLines","lines","split","f","toLowerCase","filter","l","includes","onFilter","e","v","target","value","emit","onPause","checked","render","filtered","total","length","visible","countLabel","h","Host","key","class","part","type","placeholder","onInput","onChange","onClick","readonly","join"],"sources":["src/components/organisms/mqtt-monitor/mqtt-monitor.css?tag=ind-mqtt-monitor&encapsulation=shadow","src/components/organisms/mqtt-monitor/mqtt-monitor.tsx"],"sourcesContent":[":host {\n display: flex;\n flex-direction: column;\n font-family: var(--ind-font-family-sans);\n background: var(--ind-surface-panel);\n border: 1px solid var(--ind-surface-border-default);\n border-radius: var(--ind-radius-md, 3px);\n overflow: hidden;\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n}\n\n.toolbar {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);\n border-bottom: 1px solid var(--ind-surface-border-default);\n flex-wrap: wrap;\n}\n\n.filter {\n flex: 1;\n min-width: 200px;\n height: var(--ind-size-input-sm, 24px);\n padding: 0 var(--ind-spacing-4, 8px);\n background: var(--ind-surface-sunken);\n border: 1px solid var(--ind-surface-border-default);\n border-radius: var(--ind-radius-md, 3px);\n font: inherit;\n font-size: var(--ind-font-size-sm, 11px);\n color: inherit;\n outline: none;\n box-sizing: border-box;\n}\n.filter::placeholder {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n.filter:focus {\n border-color: var(--ind-surface-focus-ring);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring) 35%, transparent);\n}\n\n.check {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-2, 4px);\n font-size: var(--ind-font-size-sm, 11px);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n}\n\n.spacer { flex: 1; }\n\n.counter {\n font-family: var(--ind-font-family-mono);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n font-size: var(--ind-font-size-sm, 11px);\n white-space: nowrap;\n}\n\n.clear {\n height: var(--ind-size-button-sm, 26px);\n padding: 0 var(--ind-spacing-5, 12px);\n background: var(--ind-button-default-bg);\n color: var(--ind-button-default-fg);\n border: 1px solid var(--ind-button-default-border);\n border-radius: var(--ind-radius-md, 3px);\n font: inherit;\n font-size: var(--ind-font-size-sm, 11px);\n font-weight: var(--ind-font-weight-semibold, 600);\n cursor: pointer;\n}\n.clear:hover { background: var(--ind-button-default-bg-hover); }\n.clear:focus-visible {\n outline: 2px solid var(--ind-surface-focus-ring);\n outline-offset: 2px;\n}\n\n.log {\n flex: 1;\n width: 100%;\n box-sizing: border-box;\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);\n background: var(--ind-color-palette-neutral-0, #000);\n color: var(--ind-color-palette-neutral-800, #d0d7e0);\n border: none;\n outline: none;\n font-family: var(--ind-font-family-mono);\n font-size: var(--ind-font-size-sm, 11px);\n line-height: var(--ind-font-line-height-normal, 1.4);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n resize: vertical;\n cursor: default;\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\n\n@Component({\n tag: 'ind-mqtt-monitor',\n styleUrl: 'mqtt-monitor.css',\n shadow: true,\n})\nexport class IndMqttMonitor {\n @Element() host!: HTMLElement;\n\n /** Full log content. Newline-separated lines. */\n @Prop() log: string = '';\n /** Active filter — substring match on each line, case-insensitive. */\n @Prop({ mutable: true }) filterValue: string = '';\n /** When true, the log doesn't auto-scroll on new content. */\n @Prop({ mutable: true }) paused: boolean = false;\n /** Visible rows of the log textarea. */\n @Prop() rows: number = 18;\n\n @Event() indFilterChange!: EventEmitter<string>;\n @Event() indPauseChange!: EventEmitter<boolean>;\n @Event() indClear!: EventEmitter<void>;\n\n componentDidLoad() {\n this.scrollToBottom();\n }\n\n @Watch('log')\n onLogChange() {\n if (!this.paused) this.scrollToBottom();\n }\n\n private scrollToBottom() {\n requestAnimationFrame(() => {\n const ta = this.host.shadowRoot?.querySelector<HTMLTextAreaElement>('.log');\n if (ta) ta.scrollTop = ta.scrollHeight;\n });\n }\n\n private filteredLines(): string[] {\n const lines = this.log.split('\\n');\n if (!this.filterValue) return lines;\n const f = this.filterValue.toLowerCase();\n return lines.filter((l) => l.toLowerCase().includes(f));\n }\n\n private onFilter = (e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n this.filterValue = v;\n this.indFilterChange.emit(v);\n };\n\n private onPause = (e: Event) => {\n const v = (e.target as HTMLInputElement).checked;\n this.paused = v;\n this.indPauseChange.emit(v);\n };\n\n render() {\n const filtered = this.filteredLines();\n const total = this.log ? this.log.split('\\n').filter((l) => l.length > 0).length : 0;\n const visible = filtered.filter((l) => l.length > 0).length;\n const countLabel = this.filterValue ? `${visible} / ${total} msg` : `${total} msg`;\n return (\n <Host>\n <div class=\"toolbar\" part=\"toolbar\">\n <input\n class=\"filter\"\n part=\"filter\"\n type=\"search\"\n placeholder=\"Filter topic / payload...\"\n value={this.filterValue}\n onInput={this.onFilter}\n />\n <label class=\"check\">\n <input type=\"checkbox\" checked={this.paused} onChange={this.onPause} />\n <span>Pause</span>\n </label>\n <span class=\"spacer\" />\n <span class=\"counter\" part=\"counter\">{countLabel}</span>\n <button\n type=\"button\"\n class=\"clear\"\n part=\"clear\"\n onClick={() => this.indClear.emit()}\n >Clear</button>\n </div>\n <textarea\n class=\"log\"\n part=\"log\"\n readonly\n rows={this.rows}\n >{filtered.join('\\n')}</textarea>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAiB,IAAM,+5E,MCgBhBC,EAAc,M,gLAIjBC,IAAc,GAEGC,YAAsB,GAEtBC,OAAkB,MAEnCC,KAAe,GAEdC,gBACAC,eACAC,SAET,gBAAAC,GACEC,KAAKC,gB,CAIP,WAAAC,GACE,IAAKF,KAAKN,OAAQM,KAAKC,gB,CAGjB,cAAAA,GACNE,uBAAsB,KACpB,MAAMC,EAAKJ,KAAKK,KAAKC,YAAYC,cAAmC,QACpE,GAAIH,EAAIA,EAAGI,UAAYJ,EAAGK,YAAY,G,CAIlC,aAAAC,GACN,MAAMC,EAAQX,KAAKR,IAAIoB,MAAM,MAC7B,IAAKZ,KAAKP,YAAa,OAAOkB,EAC9B,MAAME,EAAIb,KAAKP,YAAYqB,cAC3B,OAAOH,EAAMI,QAAQC,GAAMA,EAAEF,cAAcG,SAASJ,I,CAG9CK,SAAYC,IAClB,MAAMC,EAAKD,EAAEE,OAA4BC,MACzCtB,KAAKP,YAAc2B,EACnBpB,KAAKJ,gBAAgB2B,KAAKH,EAAE,EAGtBI,QAAWL,IACjB,MAAMC,EAAKD,EAAEE,OAA4BI,QACzCzB,KAAKN,OAAS0B,EACdpB,KAAKH,eAAe0B,KAAKH,EAAE,EAG7B,MAAAM,GACE,MAAMC,EAAW3B,KAAKU,gBACtB,MAAMkB,EAAQ5B,KAAKR,IAAMQ,KAAKR,IAAIoB,MAAM,MAAMG,QAAQC,GAAMA,EAAEa,OAAS,IAAGA,OAAS,EACnF,MAAMC,EAAUH,EAASZ,QAAQC,GAAMA,EAAEa,OAAS,IAAGA,OACrD,MAAME,EAAa/B,KAAKP,YAAc,GAAGqC,OAAaF,QAAc,GAAGA,QACvE,OACEI,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,UAAUC,KAAK,WACxBJ,EAAA,SAAAE,IAAA,2CACEC,MAAM,SACNC,KAAK,SACLC,KAAK,SACLC,YAAY,4BACZhB,MAAOtB,KAAKP,YACZ8C,QAASvC,KAAKkB,WAEhBc,EAAA,SAAAE,IAAA,2CAAOC,MAAM,SACXH,EAAA,SAAAE,IAAA,2CAAOG,KAAK,WAAWZ,QAASzB,KAAKN,OAAQ8C,SAAUxC,KAAKwB,UAC5DQ,EAAA,QAAAE,IAAA,sDAEFF,EAAA,QAAAE,IAAA,2CAAMC,MAAM,WACZH,EAAA,QAAAE,IAAA,2CAAMC,MAAM,UAAUC,KAAK,WAAWL,GACtCC,EAAA,UAAAE,IAAA,2CACEG,KAAK,SACLF,MAAM,QACNC,KAAK,QACLK,QAAS,IAAMzC,KAAKF,SAASyB,QAAM,UAGvCS,EAAA,YAAAE,IAAA,2CACEC,MAAM,MACNC,KAAK,MACLM,SAAQ,KACR/C,KAAMK,KAAKL,MACXgC,EAASgB,KAAK,O","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as e,H as t}from"./p-D2yNiL0d.js";const i=()=>`:host{display:inline-flex;align-items:center;gap:var(--ind-spacing-3, 6px);font-family:var(--ind-font-family-sans, system-ui, sans-serif);font-size:var(--ind-font-size-base, 12px);font-weight:var(--ind-font-weight-medium, 500);line-height:var(--ind-font-line-height-tight, 1.1);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.led{--_size:var(--ind-led-size, 12px);--_bg:var(--ind-state-stopped-bg, #5a6776);--_border:var(--ind-state-stopped-border, #8390a0);--_glow:var(--ind-state-stopped-glow, rgba(131, 144, 160, 0.35));display:inline-block;width:var(--_size);height:var(--_size);border-radius:50%;background:radial-gradient( circle at 30% 30%, color-mix(in srgb, var(--_bg) 65%, white), var(--_bg) 70% );border:1px solid var(--_border);box-shadow:0 0 0 1px color-mix(in srgb, var(--_bg) 25%, transparent), 0 0 8px var(--_glow), inset 0 1px 2px rgba(0, 0, 0, 0.45);transition:background-color var(--ind-motion-duration-base, 200ms) var(--ind-motion-easing-standard, ease)}:host([size="sm"]) .led{--_size:8px}:host([size="md"]) .led{--_size:12px}:host([size="lg"]) .led{--_size:18px}:host([state="running"]) .led{--_bg:var(--ind-state-running-bg, #16a34a);--_border:var(--ind-state-running-border, #4ade80);--_glow:var(--ind-state-running-glow, rgba(34, 197, 94, 0.6))}:host([state="stopped"]) .led{--_bg:var(--ind-state-stopped-bg, #5a6776);--_border:var(--ind-state-stopped-border, #8390a0);--_glow:var(--ind-state-stopped-glow, rgba(131, 144, 160, 0.35))}:host([state="fault"]) .led{--_bg:var(--ind-state-fault-bg, #dc2626);--_border:var(--ind-state-fault-border, #f87171);--_glow:var(--ind-state-fault-glow, rgba(220, 38, 38, 0.7))}:host([state="warning"]) .led{--_bg:var(--ind-state-warning-bg, #f59e0b);--_border:var(--ind-state-warning-border, #fcd34d);--_glow:var(--ind-state-warning-glow, rgba(245, 158, 11, 0.6))}:host([state="maintenance"]) .led{--_bg:var(--ind-state-maintenance-bg, #2563eb);--_border:var(--ind-state-maintenance-border, #60a5fa);--_glow:var(--ind-state-maintenance-glow, rgba(37, 99, 235, 0.6))}:host([blinking]) .led{animation:ind-led-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite}:host([blinking][state="fault"]) .led{animation-duration:var(--ind-motion-blink-urgent, 200ms)}@keyframes ind-led-blink{50%{opacity:0.2;box-shadow:none}}@media (prefers-reduced-motion: reduce){:host([blinking]) .led{animation:none;opacity:1;outline:2px solid var(--_border);outline-offset:2px}}`;const n=class{constructor(e){a(this,e)}state="stopped";size="md";blinking=false;label;render(){const a=this.label??`${this.state} indicator`;return e(t,{key:"babe0b6e1a80181397c53ec0234ce3ff8d5741b4",role:"status","aria-label":a,"aria-live":this.state==="fault"?"assertive":"polite"},e("span",{key:"d7ca8697299f70715fdbe101d541c3313508e434",class:"led",part:"led","aria-hidden":"true"}),this.label&&e("span",{key:"f39a9b21eabd4380db866e9bfb2591bcaeac3ce4",class:"label",part:"label"},this.label))}};n.style=i();export{n as ind_led};
2
+ //# sourceMappingURL=p-4a4811ab.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ledCss","IndLed","state","size","blinking","label","render","accessibleName","this","h","Host","key","role","class","part"],"sources":["src/components/atoms/led/led.css?tag=ind-led&encapsulation=shadow","src/components/atoms/led/led.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n font-family: var(--ind-font-family-sans, system-ui, sans-serif);\n font-size: var(--ind-font-size-base, 12px);\n font-weight: var(--ind-font-weight-medium, 500);\n line-height: var(--ind-font-line-height-tight, 1.1);\n /* `light-dark()` makes the label readable even if the LED lands on a surface\n * whose theme doesn't match the loaded tokens (Storybook autodocs, embedded\n * widget on a third-party site, etc.). */\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.led {\n --_size: var(--ind-led-size, 12px);\n --_bg: var(--ind-state-stopped-bg, #5a6776);\n --_border: var(--ind-state-stopped-border, #8390a0);\n --_glow: var(--ind-state-stopped-glow, rgba(131, 144, 160, 0.35));\n\n display: inline-block;\n width: var(--_size);\n height: var(--_size);\n border-radius: 50%;\n background: radial-gradient(\n circle at 30% 30%,\n color-mix(in srgb, var(--_bg) 65%, white),\n var(--_bg) 70%\n );\n border: 1px solid var(--_border);\n box-shadow:\n 0 0 0 1px color-mix(in srgb, var(--_bg) 25%, transparent),\n 0 0 8px var(--_glow),\n inset 0 1px 2px rgba(0, 0, 0, 0.45);\n transition: background-color var(--ind-motion-duration-base, 200ms) var(--ind-motion-easing-standard, ease);\n}\n\n:host([size=\"sm\"]) .led { --_size: 8px; }\n:host([size=\"md\"]) .led { --_size: 12px; }\n:host([size=\"lg\"]) .led { --_size: 18px; }\n\n/* Each state ships hard-coded fallbacks so the component stays visible even\n * if tokens fail to load (build-order glitch, sandbox without CSS imports).\n */\n:host([state=\"running\"]) .led {\n --_bg: var(--ind-state-running-bg, #16a34a);\n --_border: var(--ind-state-running-border, #4ade80);\n --_glow: var(--ind-state-running-glow, rgba(34, 197, 94, 0.6));\n}\n:host([state=\"stopped\"]) .led {\n --_bg: var(--ind-state-stopped-bg, #5a6776);\n --_border: var(--ind-state-stopped-border, #8390a0);\n --_glow: var(--ind-state-stopped-glow, rgba(131, 144, 160, 0.35));\n}\n:host([state=\"fault\"]) .led {\n --_bg: var(--ind-state-fault-bg, #dc2626);\n --_border: var(--ind-state-fault-border, #f87171);\n --_glow: var(--ind-state-fault-glow, rgba(220, 38, 38, 0.7));\n}\n:host([state=\"warning\"]) .led {\n --_bg: var(--ind-state-warning-bg, #f59e0b);\n --_border: var(--ind-state-warning-border, #fcd34d);\n --_glow: var(--ind-state-warning-glow, rgba(245, 158, 11, 0.6));\n}\n:host([state=\"maintenance\"]) .led {\n --_bg: var(--ind-state-maintenance-bg, #2563eb);\n --_border: var(--ind-state-maintenance-border, #60a5fa);\n --_glow: var(--ind-state-maintenance-glow, rgba(37, 99, 235, 0.6));\n}\n\n:host([blinking]) .led {\n animation: ind-led-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite;\n}\n:host([blinking][state=\"fault\"]) .led {\n animation-duration: var(--ind-motion-blink-urgent, 200ms);\n}\n\n@keyframes ind-led-blink {\n 50% { opacity: 0.2; box-shadow: none; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([blinking]) .led {\n animation: none;\n opacity: 1;\n /* Substitute: a solid outline ring so the alarm condition is still visible without motion. */\n outline: 2px solid var(--_border);\n outline-offset: 2px;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type LedState = 'running' | 'stopped' | 'fault' | 'warning' | 'maintenance';\nexport type LedSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-led',\n styleUrl: 'led.css',\n shadow: true,\n})\nexport class IndLed {\n /** Process state driving the LED color and ARIA live politeness. */\n @Prop({ reflect: true }) state: LedState = 'stopped';\n\n /** Visual size. */\n @Prop({ reflect: true }) size: LedSize = 'md';\n\n /** Blink. For SCADA, fast blink = unacknowledged condition. Stops respecting prefers-reduced-motion. */\n @Prop({ reflect: true }) blinking: boolean = false;\n\n /** Optional visible label rendered next to the LED. Always becomes the accessible name. */\n @Prop() label?: string;\n\n render() {\n const accessibleName = this.label ?? `${this.state} indicator`;\n return (\n <Host\n role=\"status\"\n aria-label={accessibleName}\n aria-live={this.state === 'fault' ? 'assertive' : 'polite'}\n >\n <span class=\"led\" part=\"led\" aria-hidden=\"true\" />\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAS,IAAM,y+E,MCURC,EAAM,M,yBAEQC,MAAkB,UAGlBC,KAAgB,KAGhBC,SAAoB,MAGrCC,MAER,MAAAC,GACE,MAAMC,EAAiBC,KAAKH,OAAS,GAAGG,KAAKN,kBAC7C,OACEO,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,SAAQ,aACDL,EAAc,YACfC,KAAKN,QAAU,QAAU,YAAc,UAElDO,EAAA,QAAAE,IAAA,2CAAME,MAAM,MAAMC,KAAK,MAAK,cAAa,SACxCN,KAAKH,OAASI,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,SAASN,KAAKH,O","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as r,H as n}from"./p-D2yNiL0d.js";const e=()=>`:host{display:inline-flex;flex-direction:column;gap:var(--ind-spacing-2, 4px);padding:var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px);background:var(--ind-surface-sunken, #000);border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-md, 3px);font-family:var(--ind-font-family-sans);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));min-width:96px;transition:background-color var(--ind-motion-duration-base, 200ms), border-color var(--ind-motion-duration-base, 200ms), color var(--ind-motion-duration-base, 200ms)}.header{display:flex;gap:var(--ind-spacing-3, 6px);align-items:baseline;font-size:var(--ind-font-size-sm, 11px);line-height:var(--ind-font-line-height-tight, 1.1);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2))}.tag{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600);letter-spacing:0.02em}.label{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.readout{display:flex;align-items:baseline;gap:var(--ind-spacing-2, 4px);line-height:1}.number{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-bold, 700);font-variant-numeric:tabular-nums}.unit{font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));font-weight:var(--ind-font-weight-medium, 500)}.trend{font-size:var(--ind-font-size-md, 13px);margin-left:var(--ind-spacing-2, 4px)}:host([size="sm"]) .number{font-size:var(--ind-font-size-xl, 16px)}:host([size="md"]) .number{font-size:var(--ind-font-size-2xl, 20px)}:host([size="lg"]) .number{font-size:var(--ind-font-size-3xl, 28px)}:host([alarm="high-high"]){background:var(--ind-alarm-high-high-bg, #dc2626);color:var(--ind-alarm-high-high-fg, #ffffff);border-color:var(--ind-alarm-high-high-border, #f87171)}:host([alarm="high"]){background:var(--ind-alarm-high-bg, #f59e0b);color:var(--ind-alarm-high-fg, #000000);border-color:var(--ind-alarm-high-border, #fcd34d)}:host([alarm="low"]){background:var(--ind-alarm-low-bg, #0891b2);color:var(--ind-alarm-low-fg, #ffffff);border-color:var(--ind-alarm-low-border, #22d3ee)}:host([alarm="low-low"]){background:var(--ind-alarm-low-low-bg, #7c3aed);color:var(--ind-alarm-low-low-fg, #ffffff);border-color:var(--ind-alarm-low-low-border, #a78bfa)}:host([alarm]:not([alarm="none"])) .header,:host([alarm]:not([alarm="none"])) .tag,:host([alarm]:not([alarm="none"])) .label,:host([alarm]:not([alarm="none"])) .unit{color:inherit}:host([alarm]:not([alarm="none"])) .label,:host([alarm]:not([alarm="none"])) .unit{opacity:0.85}:host([alarm]:not([alarm="none"])) .tag{opacity:1;font-weight:var(--ind-font-weight-bold, 700)}:host([trend="up"]) .trend{color:var(--ind-trend-up-fg, #fcd34d)}:host([trend="down"]) .trend{color:var(--ind-trend-down-fg, #22d3ee)}:host([trend="stable"]) .trend{color:var(--ind-trend-stable-fg, #8390a0)}`;const i=class{constructor(r){a(this,r)}value;unit;precision;alarm="none";trend="none";size="md";label;tag;formatted(){if(typeof this.value==="string")return this.value;if(!Number.isFinite(this.value))return"--";if(this.precision!==undefined)return this.value.toFixed(this.precision);return String(this.value)}render(){const a=this.label??this.tag??"process value";const e=this.alarm!=="none"?`, alarm ${this.alarm}`:"";return r(n,{key:"cda5c03f956f161e618626d2aef0aac40409281a",role:"group","aria-label":`${a}: ${this.formatted()}${this.unit?" "+this.unit:""}${e}`,"aria-live":this.alarm==="high-high"?"assertive":"polite"},(this.tag||this.label)&&r("div",{key:"8fe9dfd6fb733e6ba0e7e607efc5d023736cca9e",class:"header",part:"header"},this.tag&&r("span",{key:"adec308000bce2cee378504fffedf8662a091c8c",class:"tag",part:"tag"},this.tag),this.label&&r("span",{key:"4de4405dfbb798ca1781ade6fd7e1419089226ca",class:"label",part:"label"},this.label)),r("div",{key:"b7f9e66b333a6d7e3341585af4bba571dae65bf6",class:"readout",part:"readout"},r("span",{key:"c6a942f2a64187cf9acd75b112d262928556d84b",class:"number",part:"number"},this.formatted()),this.unit&&r("span",{key:"39714e17d50497d59afe6e81eca9b51cf2182332",class:"unit",part:"unit"},this.unit),this.trend!=="none"&&r("span",{key:"1e4f671cc86bf24617f26e3db4eb3709160291b3",class:"trend",part:"trend","aria-hidden":"true"},this.trend==="up"?"▲":this.trend==="down"?"▼":"◆")))}};i.style=e();export{i as ind_value};
2
+ //# sourceMappingURL=p-52b18003.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["valueCss","IndValue","value","unit","precision","alarm","trend","size","label","tag","formatted","this","Number","isFinite","undefined","toFixed","String","render","accessibleName","alarmSuffix","h","Host","key","role","class","part"],"sources":["src/components/atoms/value/value.css?tag=ind-value&encapsulation=shadow","src/components/atoms/value/value.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: column;\n gap: var(--ind-spacing-2, 4px);\n padding: var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-sunken, #000);\n border: 1px solid var(--ind-surface-border-default, #2a3340);\n border-radius: var(--ind-radius-md, 3px);\n font-family: var(--ind-font-family-sans);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n min-width: 96px;\n transition:\n background-color var(--ind-motion-duration-base, 200ms),\n border-color var(--ind-motion-duration-base, 200ms),\n color var(--ind-motion-duration-base, 200ms);\n}\n\n.header {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n align-items: baseline;\n font-size: var(--ind-font-size-sm, 11px);\n line-height: var(--ind-font-line-height-tight, 1.1);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n}\n\n.tag {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n letter-spacing: 0.02em;\n}\n\n.label {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n.readout {\n display: flex;\n align-items: baseline;\n gap: var(--ind-spacing-2, 4px);\n line-height: 1;\n}\n\n.number {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-bold, 700);\n font-variant-numeric: tabular-nums;\n}\n\n.unit {\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n font-weight: var(--ind-font-weight-medium, 500);\n}\n\n.trend {\n font-size: var(--ind-font-size-md, 13px);\n margin-left: var(--ind-spacing-2, 4px);\n}\n\n:host([size=\"sm\"]) .number { font-size: var(--ind-font-size-xl, 16px); }\n:host([size=\"md\"]) .number { font-size: var(--ind-font-size-2xl, 20px); }\n:host([size=\"lg\"]) .number { font-size: var(--ind-font-size-3xl, 28px); }\n\n/* Alarm highlight — uses the ISA-18.2 alarm tokens directly. */\n:host([alarm=\"high-high\"]) {\n background: var(--ind-alarm-high-high-bg, #dc2626);\n color: var(--ind-alarm-high-high-fg, #ffffff);\n border-color: var(--ind-alarm-high-high-border, #f87171);\n}\n:host([alarm=\"high\"]) {\n background: var(--ind-alarm-high-bg, #f59e0b);\n color: var(--ind-alarm-high-fg, #000000);\n border-color: var(--ind-alarm-high-border, #fcd34d);\n}\n:host([alarm=\"low\"]) {\n background: var(--ind-alarm-low-bg, #0891b2);\n color: var(--ind-alarm-low-fg, #ffffff);\n border-color: var(--ind-alarm-low-border, #22d3ee);\n}\n:host([alarm=\"low-low\"]) {\n background: var(--ind-alarm-low-low-bg, #7c3aed);\n color: var(--ind-alarm-low-low-fg, #ffffff);\n border-color: var(--ind-alarm-low-low-border, #a78bfa);\n}\n\n/* When in an alarm state, force every descendant to inherit the host color\n * (which is the high-contrast alarm fg, e.g. black on amber for \"high\").\n *\n * We have to override `.header` explicitly because it sets its own color —\n * otherwise `.label` and `.tag` inherit *from .header*, not from :host,\n * and stay at the original muted neutral color (broken contrast on alarm bg).\n */\n:host([alarm]:not([alarm=\"none\"])) .header,\n:host([alarm]:not([alarm=\"none\"])) .tag,\n:host([alarm]:not([alarm=\"none\"])) .label,\n:host([alarm]:not([alarm=\"none\"])) .unit {\n color: inherit;\n}\n\n/* The tag identifies WHICH instrument is alarming — keep it at full opacity\n * so operators can read it at a glance. Label/unit can be slightly faded. */\n:host([alarm]:not([alarm=\"none\"])) .label,\n:host([alarm]:not([alarm=\"none\"])) .unit {\n opacity: 0.85;\n}\n:host([alarm]:not([alarm=\"none\"])) .tag {\n opacity: 1;\n font-weight: var(--ind-font-weight-bold, 700);\n}\n\n:host([trend=\"up\"]) .trend { color: var(--ind-trend-up-fg, #fcd34d); }\n:host([trend=\"down\"]) .trend { color: var(--ind-trend-down-fg, #22d3ee); }\n:host([trend=\"stable\"]) .trend { color: var(--ind-trend-stable-fg, #8390a0); }\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ValueAlarm = 'none' | 'low-low' | 'low' | 'high' | 'high-high';\nexport type ValueTrend = 'none' | 'up' | 'down' | 'stable';\nexport type ValueSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-value',\n styleUrl: 'value.css',\n shadow: true,\n})\nexport class IndValue {\n /** Raw value to display. Numeric values are formatted with `precision`. */\n @Prop() value!: number | string;\n\n /** Engineering unit shown after the number (e.g. \"bar\", \"°C\", \"m³/h\"). */\n @Prop() unit?: string;\n\n /** Decimal places when `value` is numeric. Default: as-is. */\n @Prop() precision?: number;\n\n /** Active alarm priority. Highlights the readout with the ISA-18.2 color. */\n @Prop({ reflect: true }) alarm: ValueAlarm = 'none';\n\n /** Process trend direction. Renders a small arrow next to the unit. */\n @Prop({ reflect: true }) trend: ValueTrend = 'none';\n\n /** Readout size — `lg` is appropriate for primary KPIs (uses the 3xl font). */\n @Prop({ reflect: true }) size: ValueSize = 'md';\n\n /** Human label shown above the number (e.g. \"Discharge pressure\"). */\n @Prop() label?: string;\n\n /** Equipment tag shown above the number (e.g. \"PT-101\"). */\n @Prop() tag?: string;\n\n private formatted(): string {\n if (typeof this.value === 'string') return this.value;\n if (!Number.isFinite(this.value)) return '--';\n if (this.precision !== undefined) return this.value.toFixed(this.precision);\n return String(this.value);\n }\n\n render() {\n const accessibleName = this.label ?? this.tag ?? 'process value';\n const alarmSuffix = this.alarm !== 'none' ? `, alarm ${this.alarm}` : '';\n return (\n <Host\n role=\"group\"\n aria-label={`${accessibleName}: ${this.formatted()}${this.unit ? ' ' + this.unit : ''}${alarmSuffix}`}\n aria-live={this.alarm === 'high-high' ? 'assertive' : 'polite'}\n >\n {(this.tag || this.label) && (\n <div class=\"header\" part=\"header\">\n {this.tag && <span class=\"tag\" part=\"tag\">{this.tag}</span>}\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n </div>\n )}\n <div class=\"readout\" part=\"readout\">\n <span class=\"number\" part=\"number\">{this.formatted()}</span>\n {this.unit && <span class=\"unit\" part=\"unit\">{this.unit}</span>}\n {this.trend !== 'none' && (\n <span class=\"trend\" part=\"trend\" aria-hidden=\"true\">\n {this.trend === 'up' ? '▲' : this.trend === 'down' ? '▼' : '◆'}\n </span>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAW,IAAM,u5F,MCWVC,EAAQ,M,yBAEXC,MAGAC,KAGAC,UAGiBC,MAAoB,OAGpBC,MAAoB,OAGpBC,KAAkB,KAGnCC,MAGAC,IAEA,SAAAC,GACN,UAAWC,KAAKT,QAAU,SAAU,OAAOS,KAAKT,MAChD,IAAKU,OAAOC,SAASF,KAAKT,OAAQ,MAAO,KACzC,GAAIS,KAAKP,YAAcU,UAAW,OAAOH,KAAKT,MAAMa,QAAQJ,KAAKP,WACjE,OAAOY,OAAOL,KAAKT,M,CAGrB,MAAAe,GACE,MAAMC,EAAiBP,KAAKH,OAASG,KAAKF,KAAO,gBACjD,MAAMU,EAAcR,KAAKN,QAAU,OAAS,WAAWM,KAAKN,QAAU,GACtE,OACEe,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,QAAO,aACA,GAAGL,MAAmBP,KAAKD,cAAcC,KAAKR,KAAO,IAAMQ,KAAKR,KAAO,KAAKgB,IAAa,YAC1FR,KAAKN,QAAU,YAAc,YAAc,WAEpDM,KAAKF,KAAOE,KAAKH,QACjBY,EAAA,OAAAE,IAAA,2CAAKE,MAAM,SAASC,KAAK,UACtBd,KAAKF,KAAOW,EAAA,QAAAE,IAAA,2CAAME,MAAM,MAAMC,KAAK,OAAOd,KAAKF,KAC/CE,KAAKH,OAASY,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,SAASd,KAAKH,QAG1DY,EAAA,OAAAE,IAAA,2CAAKE,MAAM,UAAUC,KAAK,WACxBL,EAAA,QAAAE,IAAA,2CAAME,MAAM,SAASC,KAAK,UAAUd,KAAKD,aACxCC,KAAKR,MAAQiB,EAAA,QAAAE,IAAA,2CAAME,MAAM,OAAOC,KAAK,QAAQd,KAAKR,MAClDQ,KAAKL,QAAU,QACdc,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,QAAO,cAAa,QAC1Cd,KAAKL,QAAU,KAAO,IAAMK,KAAKL,QAAU,OAAS,IAAM,M","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as i,c as t,h as e,H as a}from"./p-D2yNiL0d.js";const n=()=>`:host{display:block;font-family:var(--ind-font-family-sans)}.item{position:relative;display:flex;align-items:center;gap:var(--ind-spacing-3, 6px);width:100%;height:var(--ind-nav-item-height, 38px);padding:0 var(--ind-spacing-5, 12px);background:transparent;border:none;color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));font:inherit;font-size:var(--ind-font-size-base, 12px);text-align:left;text-decoration:none;cursor:pointer;user-select:none;box-sizing:border-box;transition:background-color var(--ind-motion-duration-fast, 120ms), color var(--ind-motion-duration-fast, 120ms)}.indicator{width:10px;font-size:9px;color:var(--ind-feedback-info-bg, #0891b2);opacity:0;transition:opacity var(--ind-motion-duration-fast, 120ms);text-align:center}.content{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{font-size:var(--ind-font-size-xs, 10px);font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-bold, 700);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);padding:1px var(--ind-spacing-2, 4px);min-width:16px;text-align:center;border-radius:var(--ind-radius-sm, 2px);background:var(--ind-feedback-error-bg, #dc2626);color:var(--ind-feedback-error-fg, #ffffff);line-height:1.2}.item:hover:not(:disabled):not([aria-disabled="true"]){background:var(--ind-surface-raised);color:var(--ind-surface-text-primary)}.item:focus-visible{outline:2px solid var(--ind-surface-focus-ring, #22d3ee);outline-offset:-2px}:host([active]) .item{background:var(--ind-surface-raised);color:var(--ind-surface-text-primary);font-weight:var(--ind-font-weight-semibold, 600)}:host([active]) .indicator{opacity:1}:host([disabled]){opacity:0.4;pointer-events:none}`;const r=class{constructor(e){i(this,e);this.indSelect=t(this,"indSelect")}active=false;disabled=false;label;href;badge;indSelect;onClick=i=>{if(this.disabled){i.preventDefault();return}if(!this.href)i.preventDefault();this.indSelect.emit()};render(){const i=this.active?"page":undefined;const t=this.badge!==undefined&&this.badge!==""&&this.badge!==null;const n=[e("span",{key:"ad9e90d0aab88711ff9e5f5db2cd988a76520c3c",class:"indicator",part:"indicator","aria-hidden":"true"},"▶"),e("span",{key:"33fa94a1e111cfc992dbd20ec1c8cfc9a30b18c5",class:"content",part:"content"},e("slot",{key:"bfc5072816f07d0fc276d67621efa09d4ce421f4"},this.label)),t?e("span",{class:"badge",part:"badge"},this.badge):null];return e(a,{key:"895afdd6a1a347adadb7213e4b42ece2d3e32c65"},this.href?e("a",{class:"item",part:"item",href:this.href,"aria-current":i,"aria-disabled":this.disabled?"true":undefined,onClick:this.onClick},n):e("button",{type:"button",class:"item",part:"item",disabled:this.disabled,"aria-current":i,onClick:this.onClick},n))}};r.style=n();export{r as ind_nav_item};
2
+ //# sourceMappingURL=p-5369d63a.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["navItemCss","IndNavItem","active","disabled","label","href","badge","indSelect","onClick","e","this","preventDefault","emit","render","ariaCurrent","undefined","showBadge","inner","h","key","class","part","Host","type"],"sources":["src/components/molecules/nav-item/nav-item.css?tag=ind-nav-item&encapsulation=shadow","src/components/molecules/nav-item/nav-item.tsx"],"sourcesContent":[":host {\n display: block;\n font-family: var(--ind-font-family-sans);\n}\n\n.item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n width: 100%;\n height: var(--ind-nav-item-height, 38px);\n padding: 0 var(--ind-spacing-5, 12px);\n background: transparent;\n border: none;\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n font: inherit;\n font-size: var(--ind-font-size-base, 12px);\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n user-select: none;\n box-sizing: border-box;\n transition:\n background-color var(--ind-motion-duration-fast, 120ms),\n color var(--ind-motion-duration-fast, 120ms);\n}\n\n.indicator {\n width: 10px;\n font-size: 9px;\n color: var(--ind-feedback-info-bg, #0891b2);\n opacity: 0;\n transition: opacity var(--ind-motion-duration-fast, 120ms);\n text-align: center;\n}\n\n.content {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.badge {\n font-size: var(--ind-font-size-xs, 10px);\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-bold, 700);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n padding: 1px var(--ind-spacing-2, 4px);\n min-width: 16px;\n text-align: center;\n border-radius: var(--ind-radius-sm, 2px);\n background: var(--ind-feedback-error-bg, #dc2626);\n color: var(--ind-feedback-error-fg, #ffffff);\n line-height: 1.2;\n}\n\n.item:hover:not(:disabled):not([aria-disabled=\"true\"]) {\n background: var(--ind-surface-raised);\n color: var(--ind-surface-text-primary);\n}\n\n.item:focus-visible {\n outline: 2px solid var(--ind-surface-focus-ring, #22d3ee);\n outline-offset: -2px;\n}\n\n:host([active]) .item {\n background: var(--ind-surface-raised);\n color: var(--ind-surface-text-primary);\n font-weight: var(--ind-font-weight-semibold, 600);\n}\n\n:host([active]) .indicator {\n opacity: 1;\n}\n\n:host([disabled]) {\n opacity: 0.4;\n pointer-events: none;\n}\n","import { Component, Prop, h, Host, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'ind-nav-item',\n styleUrl: 'nav-item.css',\n shadow: true,\n})\nexport class IndNavItem {\n /** Current page indicator — gets the ▶ prefix and active styling. */\n @Prop({ reflect: true }) active: boolean = false;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Label text. Falls back to slotted content. */\n @Prop() label?: string;\n /** Optional href. When set, renders as `<a>` so middle-click / right-click open in new tab. */\n @Prop() href?: string;\n /** Optional badge — alarm count, unread messages, etc. */\n @Prop() badge?: string | number;\n\n /** Fires on click (or Enter / Space). Use this to drive client-side routers. */\n @Event() indSelect!: EventEmitter<void>;\n\n private onClick = (e: MouseEvent) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n if (!this.href) e.preventDefault();\n this.indSelect.emit();\n };\n\n render() {\n const ariaCurrent = this.active ? 'page' : undefined;\n const showBadge = this.badge !== undefined && this.badge !== '' && this.badge !== null;\n\n const inner = [\n <span class=\"indicator\" part=\"indicator\" aria-hidden=\"true\">▶</span>,\n <span class=\"content\" part=\"content\"><slot>{this.label}</slot></span>,\n showBadge ? <span class=\"badge\" part=\"badge\">{this.badge}</span> : null,\n ];\n\n return (\n <Host>\n {this.href ? (\n <a\n class=\"item\"\n part=\"item\"\n href={this.href}\n aria-current={ariaCurrent}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.onClick}\n >\n {inner}\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"item\"\n part=\"item\"\n disabled={this.disabled}\n aria-current={ariaCurrent}\n onClick={this.onClick}\n >\n {inner}\n </button>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAa,IAAM,msD,MCOZC,EAAU,M,4DAEIC,OAAkB,MAClBC,SAAoB,MAErCC,MAEAC,KAEAC,MAGCC,UAEDC,QAAWC,IACjB,GAAIC,KAAKP,SAAU,CACjBM,EAAEE,iBACF,M,CAEF,IAAKD,KAAKL,KAAMI,EAAEE,iBAClBD,KAAKH,UAAUK,MAAM,EAGvB,MAAAC,GACE,MAAMC,EAAcJ,KAAKR,OAAS,OAASa,UAC3C,MAAMC,EAAYN,KAAKJ,QAAUS,WAAaL,KAAKJ,QAAU,IAAMI,KAAKJ,QAAU,KAElF,MAAMW,EAAQ,CACZC,EAAA,QAAAC,IAAA,2CAAMC,MAAM,YAAYC,KAAK,YAAW,cAAa,QAAM,KAC3DH,EAAA,QAAAC,IAAA,2CAAMC,MAAM,UAAUC,KAAK,WAAUH,EAAA,QAAAC,IAAA,4CAAOT,KAAKN,QACjDY,EAAYE,EAAA,QAAME,MAAM,QAAQC,KAAK,SAASX,KAAKJ,OAAgB,MAGrE,OACEY,EAACI,EAAI,CAAAH,IAAA,4CACFT,KAAKL,KACJa,EAAA,KACEE,MAAM,OACNC,KAAK,OACLhB,KAAMK,KAAKL,KAAI,eACDS,EAAW,gBACVJ,KAAKP,SAAW,OAASY,UACxCP,QAASE,KAAKF,SAEbS,GAGHC,EAAA,UACEK,KAAK,SACLH,MAAM,OACNC,KAAK,OACLlB,SAAUO,KAAKP,SAAQ,eACTW,EACdN,QAASE,KAAKF,SAEbS,G","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as a,a as i,h as t,H as s}from"./p-D2yNiL0d.js";const n=()=>`:host{display:contents}.dialog{padding:0;border:none;background:transparent;color:inherit;max-width:90vw;max-height:90vh;overflow:visible}.dialog::backdrop{background:rgba(0, 0, 0, 0.55);backdrop-filter:blur(2px)}.content{display:flex;flex-direction:column;background:var(--ind-surface-raised, light-dark(#ffffff, #1a2129));border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-md, 3px);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-base, 12px);max-height:90vh;overflow:hidden}:host([size="sm"]) .content{width:320px}:host([size="md"]) .content{width:480px}:host([size="lg"]) .content{width:720px}.header{display:flex;align-items:center;justify-content:space-between;gap:var(--ind-spacing-4, 8px);padding:var(--ind-spacing-5, 12px) var(--ind-spacing-6, 16px);border-bottom:1px solid var(--ind-surface-border-subtle)}.heading{font-size:var(--ind-font-size-lg, 14px);font-weight:var(--ind-font-weight-semibold, 600);margin:0}.close{background:transparent;border:none;color:inherit;font-size:20px;line-height:1;cursor:pointer;padding:2px 8px;border-radius:var(--ind-radius-sm, 2px)}.close:hover{background:var(--ind-surface-panel)}.close:focus-visible{outline:2px solid var(--ind-surface-focus-ring, #22d3ee);outline-offset:2px}.body{flex:1;overflow:auto;padding:var(--ind-spacing-6, 16px);line-height:var(--ind-font-line-height-normal, 1.4)}.footer{display:flex;justify-content:flex-end;gap:var(--ind-spacing-3, 6px);padding:var(--ind-spacing-4, 8px) var(--ind-spacing-6, 16px);border-top:1px solid var(--ind-surface-border-subtle)}.footer.is-empty{display:none}`;const o=class{constructor(i){e(this,i);this.indOpen=a(this,"indOpen");this.indClose=a(this,"indClose")}get host(){return i(this)}open=false;heading;size="md";closeOnBackdrop=true;hasFooter=false;indOpen;indClose;componentDidLoad(){this.syncOpen();this.watchFooter()}onOpenChange(){this.syncOpen()}syncOpen(){const e=this.host.shadowRoot?.querySelector("dialog");if(!e)return;if(this.open&&!e.open){e.showModal();this.indOpen.emit()}else if(!this.open&&e.open){e.close()}}watchFooter(){const e=this.host.shadowRoot?.querySelector('slot[name="footer"]');if(!e)return;const a=()=>{this.hasFooter=e.assignedNodes({flatten:true}).some((e=>{if(e.nodeType===Node.ELEMENT_NODE)return true;return e.nodeType===Node.TEXT_NODE&&(e.textContent??"").trim().length>0}))};a();e.addEventListener("slotchange",a)}async show(){this.open=true}async close(){this.open=false}onNativeClose=()=>{if(this.open){this.open=false;this.indClose.emit()}};onClick=e=>{if(!this.closeOnBackdrop)return;const a=e.currentTarget;if(e.target!==a)return;const i=a.getBoundingClientRect();const t=e.clientX>=i.left&&e.clientX<=i.right&&e.clientY>=i.top&&e.clientY<=i.bottom;if(!t)this.close()};render(){return t(s,{key:"2fc6c8608a86b696f04a42989f9fa89e90c815ca"},t("dialog",{key:"2ace88391803eeacc9ab918906db7ff01f96af05",class:"dialog",part:"dialog","aria-label":this.heading,onClose:this.onNativeClose,onClick:this.onClick},t("div",{key:"01d6bcd48e243524bf657559407e58ec70995752",class:"content",part:"content"},this.heading&&t("header",{key:"930017b49c0ea7056eb5ec71efd30090bf5d2ef1",class:"header",part:"header"},t("h2",{key:"be329505ab6c8d2ae4b94ea399c1426c9bb2ca23",class:"heading",part:"heading"},this.heading),t("button",{key:"6943d296514bb4035bc44f292fd9a3be42b96bd7",type:"button",class:"close",part:"close","aria-label":"Close",onClick:()=>this.close()},"×")),t("div",{key:"79277205e3a87957a9f4885a80ff2d88ff250615",class:"body",part:"body"},t("slot",{key:"c1bf7607910c5d5dff0bdaa14f9285be09aecbce"})),t("footer",{key:"102f2ea37b063d77f4874c619e134abad87161c9",class:{footer:true,"is-empty":!this.hasFooter},part:"footer"},t("slot",{key:"d6068ca633c113c5a9bf6bd87e793a96928ae95e",name:"footer"})))))}static get watchers(){return{open:[{onOpenChange:0}]}}};o.style=n();export{o as ind_dialog};
2
+ //# sourceMappingURL=p-595ccdce.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["dialogCss","IndDialog","open","heading","size","closeOnBackdrop","hasFooter","indOpen","indClose","componentDidLoad","this","syncOpen","watchFooter","onOpenChange","dlg","host","shadowRoot","querySelector","showModal","emit","close","slot","update","assignedNodes","flatten","some","n","nodeType","Node","ELEMENT_NODE","TEXT_NODE","textContent","trim","length","addEventListener","show","onNativeClose","onClick","e","currentTarget","target","r","getBoundingClientRect","inside","clientX","left","right","clientY","top","bottom","render","h","Host","key","class","part","onClose","type","footer","name"],"sources":["src/components/atoms/dialog/dialog.css?tag=ind-dialog&encapsulation=shadow","src/components/atoms/dialog/dialog.tsx"],"sourcesContent":[":host {\n display: contents;\n}\n\n.dialog {\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n max-width: 90vw;\n max-height: 90vh;\n overflow: visible;\n}\n\n.dialog::backdrop {\n background: rgba(0, 0, 0, 0.55);\n backdrop-filter: blur(2px);\n}\n\n.content {\n display: flex;\n flex-direction: column;\n background: var(--ind-surface-raised, light-dark(#ffffff, #1a2129));\n border: 1px solid var(--ind-surface-border-default, #2a3340);\n border-radius: var(--ind-radius-md, 3px);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-base, 12px);\n max-height: 90vh;\n overflow: hidden;\n}\n\n:host([size=\"sm\"]) .content { width: 320px; }\n:host([size=\"md\"]) .content { width: 480px; }\n:host([size=\"lg\"]) .content { width: 720px; }\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ind-spacing-4, 8px);\n padding: var(--ind-spacing-5, 12px) var(--ind-spacing-6, 16px);\n border-bottom: 1px solid var(--ind-surface-border-subtle);\n}\n\n.heading {\n font-size: var(--ind-font-size-lg, 14px);\n font-weight: var(--ind-font-weight-semibold, 600);\n margin: 0;\n}\n\n.close {\n background: transparent;\n border: none;\n color: inherit;\n font-size: 20px;\n line-height: 1;\n cursor: pointer;\n padding: 2px 8px;\n border-radius: var(--ind-radius-sm, 2px);\n}\n.close:hover { background: var(--ind-surface-panel); }\n.close:focus-visible {\n outline: 2px solid var(--ind-surface-focus-ring, #22d3ee);\n outline-offset: 2px;\n}\n\n.body {\n flex: 1;\n overflow: auto;\n padding: var(--ind-spacing-6, 16px);\n line-height: var(--ind-font-line-height-normal, 1.4);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--ind-spacing-3, 6px);\n padding: var(--ind-spacing-4, 8px) var(--ind-spacing-6, 16px);\n border-top: 1px solid var(--ind-surface-border-subtle);\n}\n\n.footer.is-empty {\n display: none;\n}\n","import {\n Component,\n Prop,\n Method,\n Event,\n EventEmitter,\n Element,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\n\nexport type DialogSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-dialog',\n styleUrl: 'dialog.css',\n shadow: true,\n})\nexport class IndDialog {\n @Element() host!: HTMLElement;\n\n /** Open state. Two-way reflectable. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n /** Heading rendered in the header bar. Becomes the accessible name. */\n @Prop() heading?: string;\n /** Size of the dialog content. */\n @Prop({ reflect: true }) size: DialogSize = 'md';\n /** Close when the operator clicks outside the dialog content. */\n @Prop() closeOnBackdrop: boolean = true;\n\n @State() private hasFooter: boolean = false;\n\n @Event() indOpen!: EventEmitter<void>;\n /** Fires when the dialog closes — for any reason (ESC, backdrop, close button, .close()). */\n @Event() indClose!: EventEmitter<void>;\n\n componentDidLoad() {\n this.syncOpen();\n this.watchFooter();\n }\n\n @Watch('open')\n onOpenChange() {\n this.syncOpen();\n }\n\n private syncOpen() {\n const dlg = this.host.shadowRoot?.querySelector('dialog');\n if (!dlg) return;\n if (this.open && !dlg.open) {\n dlg.showModal();\n this.indOpen.emit();\n } else if (!this.open && dlg.open) {\n dlg.close();\n }\n }\n\n private watchFooter() {\n const slot = this.host.shadowRoot?.querySelector('slot[name=\"footer\"]') as HTMLSlotElement | null;\n if (!slot) return;\n const update = () => {\n this.hasFooter = slot.assignedNodes({ flatten: true }).some((n) => {\n if (n.nodeType === Node.ELEMENT_NODE) return true;\n return n.nodeType === Node.TEXT_NODE && (n.textContent ?? '').trim().length > 0;\n });\n };\n update();\n slot.addEventListener('slotchange', update);\n }\n\n /** Programmatically open. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /** Programmatically close. */\n @Method()\n async close(): Promise<void> {\n this.open = false;\n }\n\n private onNativeClose = () => {\n if (this.open) {\n this.open = false;\n this.indClose.emit();\n }\n };\n\n private onClick = (e: MouseEvent) => {\n if (!this.closeOnBackdrop) return;\n // The native <dialog> covers the whole viewport when open via showModal(),\n // but its bounding box is the content. Clicks outside that box are on the backdrop.\n const dlg = e.currentTarget as HTMLDialogElement;\n if (e.target !== dlg) return; // ignore clicks bubbling from inside .content\n const r = dlg.getBoundingClientRect();\n const inside =\n e.clientX >= r.left && e.clientX <= r.right &&\n e.clientY >= r.top && e.clientY <= r.bottom;\n if (!inside) this.close();\n };\n\n render() {\n return (\n <Host>\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n aria-label={this.heading}\n onClose={this.onNativeClose}\n onClick={this.onClick}\n >\n <div class=\"content\" part=\"content\">\n {this.heading && (\n <header class=\"header\" part=\"header\">\n <h2 class=\"heading\" part=\"heading\">{this.heading}</h2>\n <button\n type=\"button\"\n class=\"close\"\n part=\"close\"\n aria-label=\"Close\"\n onClick={() => this.close()}\n >×</button>\n </header>\n )}\n <div class=\"body\" part=\"body\">\n <slot />\n </div>\n <footer class={{ footer: true, 'is-empty': !this.hasFooter }} part=\"footer\">\n <slot name=\"footer\" />\n </footer>\n </div>\n </dialog>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAY,IAAM,4pD,MCoBXC,EAAS,M,mHAIoBC,KAAgB,MAEhDC,QAEiBC,KAAmB,KAEpCC,gBAA2B,KAElBC,UAAqB,MAE7BC,QAEAC,SAET,gBAAAC,GACEC,KAAKC,WACLD,KAAKE,a,CAIP,YAAAC,GACEH,KAAKC,U,CAGC,QAAAA,GACN,MAAMG,EAAMJ,KAAKK,KAAKC,YAAYC,cAAc,UAChD,IAAKH,EAAK,OACV,GAAIJ,KAAKR,OAASY,EAAIZ,KAAM,CAC1BY,EAAII,YACJR,KAAKH,QAAQY,M,MACR,IAAKT,KAAKR,MAAQY,EAAIZ,KAAM,CACjCY,EAAIM,O,EAIA,WAAAR,GACN,MAAMS,EAAOX,KAAKK,KAAKC,YAAYC,cAAc,uBACjD,IAAKI,EAAM,OACX,MAAMC,EAAS,KACbZ,KAAKJ,UAAYe,EAAKE,cAAc,CAAEC,QAAS,OAAQC,MAAMC,IAC3D,GAAIA,EAAEC,WAAaC,KAAKC,aAAc,OAAO,KAC7C,OAAOH,EAAEC,WAAaC,KAAKE,YAAcJ,EAAEK,aAAe,IAAIC,OAAOC,OAAS,CAAC,GAC/E,EAEJX,IACAD,EAAKa,iBAAiB,aAAcZ,E,CAKtC,UAAMa,GACJzB,KAAKR,KAAO,I,CAKd,WAAMkB,GACJV,KAAKR,KAAO,K,CAGNkC,cAAgB,KACtB,GAAI1B,KAAKR,KAAM,CACbQ,KAAKR,KAAO,MACZQ,KAAKF,SAASW,M,GAIVkB,QAAWC,IACjB,IAAK5B,KAAKL,gBAAiB,OAG3B,MAAMS,EAAMwB,EAAEC,cACd,GAAID,EAAEE,SAAW1B,EAAK,OACtB,MAAM2B,EAAI3B,EAAI4B,wBACd,MAAMC,EACJL,EAAEM,SAAWH,EAAEI,MAAQP,EAAEM,SAAWH,EAAEK,OACtCR,EAAES,SAAWN,EAAEO,KAAQV,EAAES,SAAWN,EAAEQ,OACxC,IAAKN,EAAQjC,KAAKU,OAAO,EAG3B,MAAA8B,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,UAAAE,IAAA,2CACEC,MAAM,SACNC,KAAK,SAAQ,aACD7C,KAAKP,QACjBqD,QAAS9C,KAAK0B,cACdC,QAAS3B,KAAK2B,SAEdc,EAAA,OAAAE,IAAA,2CAAKC,MAAM,UAAUC,KAAK,WACvB7C,KAAKP,SACJgD,EAAA,UAAAE,IAAA,2CAAQC,MAAM,SAASC,KAAK,UAC1BJ,EAAA,MAAAE,IAAA,2CAAIC,MAAM,UAAUC,KAAK,WAAW7C,KAAKP,SACzCgD,EAAA,UAAAE,IAAA,2CACEI,KAAK,SACLH,MAAM,QACNC,KAAK,QAAO,aACD,QACXlB,QAAS,IAAM3B,KAAKU,SAAO,MAIjC+B,EAAA,OAAAE,IAAA,2CAAKC,MAAM,OAAOC,KAAK,QACrBJ,EAAA,QAAAE,IAAA,8CAEFF,EAAA,UAAAE,IAAA,2CAAQC,MAAO,CAAEI,OAAQ,KAAM,YAAahD,KAAKJ,WAAaiD,KAAK,UACjEJ,EAAA,QAAAE,IAAA,2CAAMM,KAAK,c","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,c as e,h as n,H as t}from"./p-D2yNiL0d.js";const i=()=>`:host{display:flex;align-items:center;gap:var(--ind-spacing-6, 16px);padding:var(--ind-spacing-3, 6px) var(--ind-spacing-6, 16px);background:var(--ind-surface-panel);border-bottom:1px solid var(--ind-surface-border-default);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));font-family:var(--ind-font-family-sans);min-height:56px;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.brand{display:flex;align-items:center;gap:var(--ind-spacing-3, 6px)}.brand-logo{font-size:26px;line-height:1;color:var(--ind-button-primary-bg)}.brand-text{display:flex;flex-direction:column;line-height:1.1}.brand-name{font-size:var(--ind-font-size-lg, 14px);font-weight:var(--ind-font-weight-bold, 700);letter-spacing:0.05em;text-transform:uppercase}.brand-sub{font-size:var(--ind-font-size-xs, 10px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));text-transform:uppercase;letter-spacing:0.08em}.machine{display:flex;flex-direction:column;line-height:1.1;padding-left:var(--ind-spacing-5, 12px);border-left:1px solid var(--ind-surface-border-subtle)}.machine-label{font-size:var(--ind-font-size-xs, 10px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));text-transform:uppercase;letter-spacing:0.08em}.machine-id{font-family:var(--ind-font-family-mono);font-size:var(--ind-font-size-md, 13px);font-weight:var(--ind-font-weight-semibold, 600)}.mqtt{display:flex;align-items:center;gap:var(--ind-spacing-3, 6px)}.mqtt-label{font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2))}.spacer{flex:1}.meta{display:flex;align-items:center;gap:var(--ind-spacing-4, 8px);font-size:var(--ind-font-size-sm, 11px)}.version{font-family:var(--ind-font-family-mono);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.docs{color:var(--ind-feedback-info-bg);text-decoration:underline;text-underline-offset:2px}.docs:hover{text-decoration-thickness:2px}.actions{display:flex;gap:var(--ind-spacing-3, 6px)}.action{height:var(--ind-size-button-sm, 26px);padding:0 var(--ind-spacing-4, 8px);background:var(--ind-button-default-bg);color:var(--ind-button-default-fg);border:1px solid var(--ind-button-default-border);border-radius:var(--ind-radius-md, 3px);font-family:inherit;font-size:var(--ind-font-size-sm, 11px);font-weight:var(--ind-font-weight-semibold, 600);cursor:pointer;transition:background var(--ind-motion-duration-fast, 120ms)}.action:hover{background:var(--ind-button-default-bg-hover)}.action--danger{background:transparent;color:var(--ind-feedback-error-bg);border-color:var(--ind-feedback-error-border)}.action--danger:hover{background:var(--ind-feedback-error-bg);color:var(--ind-feedback-error-fg)}`;const r=class{constructor(n){a(this,n);this.indChangeMachine=e(this,"indChangeMachine");this.indDisconnect=e(this,"indDisconnect")}brand;subBrand;machineId;mqttState="neutral";mqttLabel;version;docsUrl;hideChangeMachine=false;hideDisconnect=false;indChangeMachine;indDisconnect;render(){return n(t,{key:"c65d79c697786cf1e17f3d13a1f5475da46e66ac",role:"banner"},n("div",{key:"4c17ab40581251748f4bfbdceb8553d736b9288b",class:"brand",part:"brand"},n("slot",{key:"2e4a11be914770ce6cf3b2e2a4cf7e92fbd95702",name:"logo"},n("span",{key:"ff2a98d37c5153a9169b188a2e77d24f49a505e5",class:"brand-logo","aria-hidden":"true"},"⬢")),n("div",{key:"a679a938ab050aa8e2c326a88e905563134fbbc5",class:"brand-text"},n("span",{key:"19b941fba9c4d7dbbda39242f3c6afb543c5ef6a",class:"brand-name"},this.brand),this.subBrand&&n("span",{key:"d77217db67b0384df179638cbf98ae38697a7071",class:"brand-sub"},this.subBrand))),this.machineId&&n("div",{key:"1e40da6c490185efe7423b1b82d5a5e56cd4cb9a",class:"machine",part:"machine"},n("span",{key:"5ca76acc4d270e8f6adc12d0077f1371e136aded",class:"machine-label"},"Machine"),n("span",{key:"a10840b72441bb7adabd0f152332bfa9e081eff5",class:"machine-id"},this.machineId)),n("div",{key:"5cfbdeb0e191cdbfa679fd0a1e205c4544065b10",class:"mqtt",part:"mqtt"},n("ind-status-dot",{key:"b80758c2a80a27b362651cd1251c92d3b510212e",state:this.mqttState,size:"md"}),this.mqttLabel&&n("span",{key:"a443524b51f9950e068bc815bc4e89f52bc9c296",class:"mqtt-label"},this.mqttLabel)),n("span",{key:"84028540ba07e5f4b400e9694a2c102c0ffcb618",class:"spacer"}),n("div",{key:"42e07d1726547c318367423708e9fd7078a771ed",class:"meta",part:"meta"},this.version&&n("span",{key:"9fc02e0f44f50126554fa70e127bf5e1819b09ee",class:"version"},this.version),this.docsUrl&&n("a",{key:"3839f6149b334591551124f4bb5eb296d0f4a296",class:"docs",href:this.docsUrl,target:"_blank",rel:"noopener noreferrer"},"Documentation")),n("div",{key:"4265851f62d3f66518a9e07b32933974a301376b",class:"actions",part:"actions"},n("slot",{key:"dffb5909cf929b3c04e47d598e746a6caf8d55f5",name:"actions"},!this.hideChangeMachine&&n("button",{key:"824c0c0b5419753e50d8ba002dee057ba2ec2b46",type:"button",class:"action",onClick:()=>this.indChangeMachine.emit()},"Change machine"),!this.hideDisconnect&&n("button",{key:"5269a1bed2754ca7f7bfd83f0f431cae2d4c1bf5",type:"button",class:"action action--danger",onClick:()=>this.indDisconnect.emit()},"Disconnect"))))}};r.style=i();export{r as ind_app_header};
2
+ //# sourceMappingURL=p-6c5c8053.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["appHeaderCss","IndAppHeader","brand","subBrand","machineId","mqttState","mqttLabel","version","docsUrl","hideChangeMachine","hideDisconnect","indChangeMachine","indDisconnect","render","h","Host","key","role","class","part","name","this","state","size","href","target","rel","type","onClick","emit"],"sources":["src/components/organisms/app-header/app-header.css?tag=ind-app-header&encapsulation=shadow","src/components/organisms/app-header/app-header.tsx"],"sourcesContent":[":host {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-6, 16px);\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-6, 16px);\n background: var(--ind-surface-panel);\n border-bottom: 1px solid var(--ind-surface-border-default);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n font-family: var(--ind-font-family-sans);\n min-height: 56px;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.brand {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n}\n\n.brand-logo {\n font-size: 26px;\n line-height: 1;\n color: var(--ind-button-primary-bg);\n}\n\n.brand-text {\n display: flex;\n flex-direction: column;\n line-height: 1.1;\n}\n\n.brand-name {\n font-size: var(--ind-font-size-lg, 14px);\n font-weight: var(--ind-font-weight-bold, 700);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n\n.brand-sub {\n font-size: var(--ind-font-size-xs, 10px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.machine {\n display: flex;\n flex-direction: column;\n line-height: 1.1;\n padding-left: var(--ind-spacing-5, 12px);\n border-left: 1px solid var(--ind-surface-border-subtle);\n}\n\n.machine-label {\n font-size: var(--ind-font-size-xs, 10px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.machine-id {\n font-family: var(--ind-font-family-mono);\n font-size: var(--ind-font-size-md, 13px);\n font-weight: var(--ind-font-weight-semibold, 600);\n}\n\n.mqtt {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n}\n\n.mqtt-label {\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n}\n\n.spacer { flex: 1; }\n\n.meta {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n font-size: var(--ind-font-size-sm, 11px);\n}\n\n.version {\n font-family: var(--ind-font-family-mono);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n.docs {\n color: var(--ind-feedback-info-bg);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.docs:hover { text-decoration-thickness: 2px; }\n\n.actions {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n}\n\n.action {\n height: var(--ind-size-button-sm, 26px);\n padding: 0 var(--ind-spacing-4, 8px);\n background: var(--ind-button-default-bg);\n color: var(--ind-button-default-fg);\n border: 1px solid var(--ind-button-default-border);\n border-radius: var(--ind-radius-md, 3px);\n font-family: inherit;\n font-size: var(--ind-font-size-sm, 11px);\n font-weight: var(--ind-font-weight-semibold, 600);\n cursor: pointer;\n transition: background var(--ind-motion-duration-fast, 120ms);\n}\n.action:hover { background: var(--ind-button-default-bg-hover); }\n\n.action--danger {\n background: transparent;\n color: var(--ind-feedback-error-bg);\n border-color: var(--ind-feedback-error-border);\n}\n.action--danger:hover {\n background: var(--ind-feedback-error-bg);\n color: var(--ind-feedback-error-fg);\n}\n","import { Component, Prop, Event, EventEmitter, h, Host } from '@stencil/core';\n\nexport type AppHeaderConnectionState =\n | 'running' | 'fault' | 'warning' | 'maintenance' | 'stopped' | 'neutral';\n\n@Component({\n tag: 'ind-app-header',\n styleUrl: 'app-header.css',\n shadow: true,\n})\nexport class IndAppHeader {\n /** Brand name (uppercase by convention). */\n @Prop() brand!: string;\n /** Sub-brand line (e.g. \"Maintenance Console\"). */\n @Prop() subBrand?: string;\n /** Machine identifier shown next to the brand. */\n @Prop() machineId?: string;\n /** Broker / realtime connection state — drives the dot. */\n @Prop() mqttState: AppHeaderConnectionState = 'neutral';\n /** Label rendered next to the dot (e.g. \"Connected\"). */\n @Prop() mqttLabel?: string;\n /** App version (e.g. \"v1.4.2\"). */\n @Prop() version?: string;\n /** Documentation URL. */\n @Prop() docsUrl?: string;\n /** Hide the built-in \"Change machine\" button. */\n @Prop() hideChangeMachine: boolean = false;\n /** Hide the built-in \"Disconnect\" button. */\n @Prop() hideDisconnect: boolean = false;\n\n @Event() indChangeMachine!: EventEmitter<void>;\n @Event() indDisconnect!: EventEmitter<void>;\n\n render() {\n return (\n <Host role=\"banner\">\n <div class=\"brand\" part=\"brand\">\n <slot name=\"logo\">\n <span class=\"brand-logo\" aria-hidden=\"true\">⬢</span>\n </slot>\n <div class=\"brand-text\">\n <span class=\"brand-name\">{this.brand}</span>\n {this.subBrand && <span class=\"brand-sub\">{this.subBrand}</span>}\n </div>\n </div>\n\n {this.machineId && (\n <div class=\"machine\" part=\"machine\">\n <span class=\"machine-label\">Machine</span>\n <span class=\"machine-id\">{this.machineId}</span>\n </div>\n )}\n\n <div class=\"mqtt\" part=\"mqtt\">\n <ind-status-dot state={this.mqttState} size=\"md\" />\n {this.mqttLabel && <span class=\"mqtt-label\">{this.mqttLabel}</span>}\n </div>\n\n <span class=\"spacer\" />\n\n <div class=\"meta\" part=\"meta\">\n {this.version && <span class=\"version\">{this.version}</span>}\n {this.docsUrl && (\n <a class=\"docs\" href={this.docsUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Documentation\n </a>\n )}\n </div>\n\n <div class=\"actions\" part=\"actions\">\n <slot name=\"actions\">\n {!this.hideChangeMachine && (\n <button\n type=\"button\"\n class=\"action\"\n onClick={() => this.indChangeMachine.emit()}\n >Change machine</button>\n )}\n {!this.hideDisconnect && (\n <button\n type=\"button\"\n class=\"action action--danger\"\n onClick={() => this.indDisconnect.emit()}\n >Disconnect</button>\n )}\n </slot>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAe,IAAM,+pF,MCUdC,EAAY,M,qHAEfC,MAEAC,SAEAC,UAEAC,UAAsC,UAEtCC,UAEAC,QAEAC,QAEAC,kBAA6B,MAE7BC,eAA0B,MAEzBC,iBACAC,cAET,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,KAAK,UACTH,EAAA,OAAAE,IAAA,2CAAKE,MAAM,QAAQC,KAAK,SACtBL,EAAA,QAAAE,IAAA,2CAAMI,KAAK,QACTN,EAAA,QAAAE,IAAA,2CAAME,MAAM,aAAY,cAAa,QAAM,MAE7CJ,EAAA,OAAAE,IAAA,2CAAKE,MAAM,cACTJ,EAAA,QAAAE,IAAA,2CAAME,MAAM,cAAcG,KAAKnB,OAC9BmB,KAAKlB,UAAYW,EAAA,QAAAE,IAAA,2CAAME,MAAM,aAAaG,KAAKlB,YAInDkB,KAAKjB,WACJU,EAAA,OAAAE,IAAA,2CAAKE,MAAM,UAAUC,KAAK,WACxBL,EAAA,QAAAE,IAAA,2CAAME,MAAM,iBAAe,WAC3BJ,EAAA,QAAAE,IAAA,2CAAME,MAAM,cAAcG,KAAKjB,YAInCU,EAAA,OAAAE,IAAA,2CAAKE,MAAM,OAAOC,KAAK,QACrBL,EAAA,kBAAAE,IAAA,2CAAgBM,MAAOD,KAAKhB,UAAWkB,KAAK,OAC3CF,KAAKf,WAAaQ,EAAA,QAAAE,IAAA,2CAAME,MAAM,cAAcG,KAAKf,YAGpDQ,EAAA,QAAAE,IAAA,2CAAME,MAAM,WAEZJ,EAAA,OAAAE,IAAA,2CAAKE,MAAM,OAAOC,KAAK,QACpBE,KAAKd,SAAWO,EAAA,QAAAE,IAAA,2CAAME,MAAM,WAAWG,KAAKd,SAC5Cc,KAAKb,SACJM,EAAA,KAAAE,IAAA,2CAAGE,MAAM,OAAOM,KAAMH,KAAKb,QAASiB,OAAO,SAASC,IAAI,uBAAqB,kBAMjFZ,EAAA,OAAAE,IAAA,2CAAKE,MAAM,UAAUC,KAAK,WACxBL,EAAA,QAAAE,IAAA,2CAAMI,KAAK,YACPC,KAAKZ,mBACLK,EAAA,UAAAE,IAAA,2CACEW,KAAK,SACLT,MAAM,SACNU,QAAS,IAAMP,KAAKV,iBAAiBkB,QAAM,mBAG7CR,KAAKX,gBACLI,EAAA,UAAAE,IAAA,2CACEW,KAAK,SACLT,MAAM,wBACNU,QAAS,IAAMP,KAAKT,cAAciB,QAAM,gB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,h as a,H as t}from"./p-D2yNiL0d.js";const r=()=>`:host{display:block;width:var(--ind-size-canvas-robot-width, 320px);height:var(--ind-size-canvas-robot-height, 220px);font-family:var(--ind-font-family-mono)}svg{display:block;width:100%;height:100%;background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default);border-radius:var(--ind-radius-md, 3px)}.envelope{fill:none;stroke:var(--ind-surface-border-subtle);stroke-dasharray:2 4}.envelope-inner{stroke-dasharray:1 3;opacity:0.6}.axis{stroke:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));stroke-width:1}.axis-label{font-family:var(--ind-font-family-mono);font-size:9px;fill:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.link{stroke-width:5;stroke-linecap:round;transition:stroke 240ms}.link-1{stroke:var(--ind-state-running-bg, #16a34a)}.link-2{stroke:var(--ind-state-running-border, #4ade80)}.wrist{stroke:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));stroke-width:2;stroke-linecap:round}.joint{fill:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));stroke:var(--ind-surface-border-strong);stroke-width:1}.joint.base{fill:var(--ind-state-stopped-bg, #5a6776);stroke:var(--ind-state-stopped-border, #8390a0)}.joint.effector{fill:var(--ind-state-warning-bg, #f59e0b);stroke:var(--ind-state-warning-border, #fcd34d)}.readout text{font-size:9px;fill:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));font-feature-settings:"tnum" 1}.readout tspan{fill:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));font-weight:700}:host([state="moving"]) .link{stroke-dasharray:4 2;animation:ind-scara-move 1.2s linear infinite}:host([state="fault"]) .link,:host([state="fault"]) .wrist{stroke:var(--ind-state-fault-bg, #dc2626)}:host([state="fault"]) .joint{stroke:var(--ind-state-fault-border, #f87171)}@keyframes ind-scara-move{to{stroke-dashoffset:-12}}@media (prefers-reduced-motion: reduce){:host([state="moving"]) .link{animation:none}}`;const s=class{constructor(a){e(this,a)}joints=[0,0,0];linkLengths=[110,90];state="idle";parseArr(e){if(Array.isArray(e))return e;if(typeof e==="string"&&e.trim()){try{const a=JSON.parse(e);return Array.isArray(a)?a:[]}catch{return[]}}return[]}render(){const e=this.parseArr(this.joints);const r=this.parseArr(this.linkLengths);const[s=0,c=0,n=0]=e;const[i=110,d=90]=r;const f=160;const o=105;const l=s*Math.PI/180;const b=c*Math.PI/180;const k=n*Math.PI/180;const y=f+i*Math.cos(l);const x=o+i*Math.sin(l);const h=y+d*Math.cos(l+b);const u=x+d*Math.sin(l+b);const v=14;const p=h+v*Math.cos(l+b+k);const g=u+v*Math.sin(l+b+k);const m=e=>e.toFixed(1);const w=e=>e.toFixed(0);return a(t,{key:"0634f9fc9b197f66bf334c43c38e85c19066d090",role:"img","aria-label":`SCARA arm: J1 ${m(s)}°, J2 ${m(c)}°, J3 ${m(n)}°`},a("svg",{key:"c16607c36459cfad670b9ab913d46c23daf99883",viewBox:"0 0 320 220",part:"svg"},a("circle",{key:"4fc539c4f5a658ffbb4a2a9594a864e04cd6e9fe",cx:f,cy:o,r:i+d,class:"envelope envelope-outer"}),a("circle",{key:"b493720a1f306e75dedf48dbd1ccb53850248230",cx:f,cy:o,r:Math.max(0,i-d),class:"envelope envelope-inner"}),a("line",{key:"e28c6dc2ac8e73bac4381bba4dfb4cdb983097c7",x1:"10",y1:o,x2:"22",y2:o,class:"axis"}),a("line",{key:"5f460ffa1860dd1484100e972d043fd9a1491621",x1:f,y1:"6",x2:f,y2:"18",class:"axis"}),a("text",{key:"f4cb4f52a3279f7924aea8d8e642a91be18c38a5",x:"24",y:o+3,class:"axis-label"},"X"),a("text",{key:"d3d18e860674380af133295b763c52bc0adf591b",x:f+4,y:"14",class:"axis-label"},"Y"),a("line",{key:"cfad2277909207ee8a0f99fc73cc823db20f4f8e",x1:f,y1:o,x2:y,y2:x,class:"link link-1"}),a("line",{key:"2ea11a2363123b2f6876179a2519dc38e9882126",x1:y,y1:x,x2:h,y2:u,class:"link link-2"}),a("line",{key:"ad0a714279eea710da7e72a2141aab8165576c34",x1:h,y1:u,x2:p,y2:g,class:"wrist"}),a("circle",{key:"89f2b18ca37ed7b0e67b0dee6ed28e0702cafa54",cx:f,cy:o,r:"8",class:"joint base"}),a("circle",{key:"44129fff9afa9becab60e20ab86933e4a111f854",cx:y,cy:x,r:"6",class:"joint elbow"}),a("circle",{key:"bfa99f679b71e28f58c244267e5876c73c9cd6aa",cx:h,cy:u,r:"7",class:"joint effector"}),a("g",{key:"3753b9117625a70389a12c518330660d943a237f",class:"readout"},a("text",{key:"420f362c46c764ea86fbf12128727600a1454e51",x:"10",y:"198"},"J1 ",a("tspan",{key:"4f1afe52d964043034d93d02eb27b4fc4e7b7f3c"},m(s),"°")),a("text",{key:"185d3d66158b63322153d59a97d79792e5105957",x:"74",y:"198"},"J2 ",a("tspan",{key:"9c6802f9ee9b2bb8ae3154880e2b7b1ffaf21167"},m(c),"°")),a("text",{key:"b6d0a5aa47c925997cc7efa0c1cadd067f184243",x:"138",y:"198"},"J3 ",a("tspan",{key:"5c06a24d477670deeceb6f80e3fb707b39b1b1e3"},m(n),"°")),a("text",{key:"99c96bf07d28555af967c4cb22a2856c1bdb46fb",x:"202",y:"198"},"X ",a("tspan",{key:"4097b0a431bed9c608f5a43994ad213bfdd56663"},w(h-f))),a("text",{key:"56ccbac660ea805f260977c0e64fdf424f1d40fe",x:"254",y:"198"},"Y ",a("tspan",{key:"d4cfa6e17fc0da8494f8f526e7d5f27cf233dc22"},w(u-o))))))}};s.style=r();export{s as ind_scara_canvas};
2
+ //# sourceMappingURL=p-6c8f4bbd.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["scaraCanvasCss","IndScaraCanvas","joints","linkLengths","state","parseArr","v","Array","isArray","trim","p","JSON","parse","render","j","this","l","j1","j2","j3","l1","l2","cx","cy","j1r","Math","PI","j2r","j3r","ex","cos","ey","sin","eex","eey","wlen","wx","wy","fmt","n","toFixed","fmt0","h","Host","key","role","viewBox","part","r","class","max","x1","y1","x2","y2","x","y"],"sources":["src/components/atoms/scara-canvas/scara-canvas.css?tag=ind-scara-canvas&encapsulation=shadow","src/components/atoms/scara-canvas/scara-canvas.tsx"],"sourcesContent":[":host {\n display: block;\n width: var(--ind-size-canvas-robot-width, 320px);\n height: var(--ind-size-canvas-robot-height, 220px);\n font-family: var(--ind-font-family-mono);\n}\n\nsvg {\n display: block;\n width: 100%;\n height: 100%;\n background: var(--ind-surface-sunken, light-dark(#ffffff, #000000));\n border: 1px solid var(--ind-surface-border-default);\n border-radius: var(--ind-radius-md, 3px);\n}\n\n.envelope {\n fill: none;\n stroke: var(--ind-surface-border-subtle);\n stroke-dasharray: 2 4;\n}\n\n.envelope-inner {\n stroke-dasharray: 1 3;\n opacity: 0.6;\n}\n\n.axis {\n stroke: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n stroke-width: 1;\n}\n\n.axis-label {\n font-family: var(--ind-font-family-mono);\n font-size: 9px;\n fill: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n.link {\n stroke-width: 5;\n stroke-linecap: round;\n transition: stroke 240ms;\n}\n.link-1 { stroke: var(--ind-state-running-bg, #16a34a); }\n.link-2 { stroke: var(--ind-state-running-border, #4ade80); }\n\n.wrist {\n stroke: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n.joint {\n fill: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n stroke: var(--ind-surface-border-strong);\n stroke-width: 1;\n}\n\n.joint.base {\n fill: var(--ind-state-stopped-bg, #5a6776);\n stroke: var(--ind-state-stopped-border, #8390a0);\n}\n\n.joint.effector {\n fill: var(--ind-state-warning-bg, #f59e0b);\n stroke: var(--ind-state-warning-border, #fcd34d);\n}\n\n.readout text {\n font-size: 9px;\n fill: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n font-feature-settings: \"tnum\" 1;\n}\n.readout tspan {\n fill: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n font-weight: 700;\n}\n\n:host([state=\"moving\"]) .link {\n stroke-dasharray: 4 2;\n animation: ind-scara-move 1.2s linear infinite;\n}\n\n:host([state=\"fault\"]) .link,\n:host([state=\"fault\"]) .wrist {\n stroke: var(--ind-state-fault-bg, #dc2626);\n}\n:host([state=\"fault\"]) .joint {\n stroke: var(--ind-state-fault-border, #f87171);\n}\n\n@keyframes ind-scara-move {\n to { stroke-dashoffset: -12; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([state=\"moving\"]) .link {\n animation: none;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ScaraState = 'idle' | 'moving' | 'fault';\n\n/**\n * 2D top-down SCARA arm view. Pure presentational — pass joint angles and\n * link lengths, the component computes forward kinematics in SVG space.\n *\n * <ind-scara-canvas .joints=${[30, 45, 0]} state=\"moving\"></ind-scara-canvas>\n *\n * - `joints[0]` (J1) — shoulder rotation in degrees, 0 = +X axis\n * - `joints[1]` (J2) — elbow rotation in degrees, relative to link 1\n * - `joints[2]` (J3) — wrist (end effector) rotation, drives the small indicator\n *\n * Z translation isn't represented — it would require a separate side view.\n */\n@Component({\n tag: 'ind-scara-canvas',\n styleUrl: 'scara-canvas.css',\n shadow: true,\n})\nexport class IndScaraCanvas {\n @Prop() joints: number[] | string = [0, 0, 0];\n @Prop() linkLengths: number[] | string = [110, 90];\n @Prop({ reflect: true }) state: ScaraState = 'idle';\n\n private parseArr(v: number[] | string): number[] {\n if (Array.isArray(v)) return v;\n if (typeof v === 'string' && v.trim()) {\n try {\n const p = JSON.parse(v);\n return Array.isArray(p) ? p : [];\n } catch {\n return [];\n }\n }\n return [];\n }\n\n render() {\n const j = this.parseArr(this.joints);\n const l = this.parseArr(this.linkLengths);\n const [j1 = 0, j2 = 0, j3 = 0] = j;\n const [l1 = 110, l2 = 90] = l;\n\n const cx = 160;\n const cy = 105;\n\n const j1r = (j1 * Math.PI) / 180;\n const j2r = (j2 * Math.PI) / 180;\n const j3r = (j3 * Math.PI) / 180;\n\n // Forward kinematics\n const ex = cx + l1 * Math.cos(j1r);\n const ey = cy + l1 * Math.sin(j1r);\n const eex = ex + l2 * Math.cos(j1r + j2r);\n const eey = ey + l2 * Math.sin(j1r + j2r);\n\n // Wrist indicator (J3)\n const wlen = 14;\n const wx = eex + wlen * Math.cos(j1r + j2r + j3r);\n const wy = eey + wlen * Math.sin(j1r + j2r + j3r);\n\n const fmt = (n: number) => n.toFixed(1);\n const fmt0 = (n: number) => n.toFixed(0);\n\n return (\n <Host\n role=\"img\"\n aria-label={`SCARA arm: J1 ${fmt(j1)}°, J2 ${fmt(j2)}°, J3 ${fmt(j3)}°`}\n >\n <svg viewBox=\"0 0 320 220\" part=\"svg\">\n {/* Working envelope */}\n <circle cx={cx} cy={cy} r={l1 + l2} class=\"envelope envelope-outer\" />\n <circle cx={cx} cy={cy} r={Math.max(0, l1 - l2)} class=\"envelope envelope-inner\" />\n\n {/* Reference axes */}\n <line x1=\"10\" y1={cy} x2=\"22\" y2={cy} class=\"axis\" />\n <line x1={cx} y1=\"6\" x2={cx} y2=\"18\" class=\"axis\" />\n <text x=\"24\" y={cy + 3} class=\"axis-label\">X</text>\n <text x={cx + 4} y=\"14\" class=\"axis-label\">Y</text>\n\n {/* Links */}\n <line x1={cx} y1={cy} x2={ex} y2={ey} class=\"link link-1\" />\n <line x1={ex} y1={ey} x2={eex} y2={eey} class=\"link link-2\" />\n <line x1={eex} y1={eey} x2={wx} y2={wy} class=\"wrist\" />\n\n {/* Joints */}\n <circle cx={cx} cy={cy} r=\"8\" class=\"joint base\" />\n <circle cx={ex} cy={ey} r=\"6\" class=\"joint elbow\" />\n <circle cx={eex} cy={eey} r=\"7\" class=\"joint effector\" />\n\n {/* Readout */}\n <g class=\"readout\">\n <text x=\"10\" y=\"198\">J1 <tspan>{fmt(j1)}°</tspan></text>\n <text x=\"74\" y=\"198\">J2 <tspan>{fmt(j2)}°</tspan></text>\n <text x=\"138\" y=\"198\">J3 <tspan>{fmt(j3)}°</tspan></text>\n <text x=\"202\" y=\"198\">X <tspan>{fmt0(eex - cx)}</tspan></text>\n <text x=\"254\" y=\"198\">Y <tspan>{fmt0(eey - cy)}</tspan></text>\n </g>\n </svg>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAiB,IAAM,86D,MCqBhBC,EAAc,M,yBACjBC,OAA4B,CAAC,EAAG,EAAG,GACnCC,YAAiC,CAAC,IAAK,IACtBC,MAAoB,OAErC,QAAAC,CAASC,GACf,GAAIC,MAAMC,QAAQF,GAAI,OAAOA,EAC7B,UAAWA,IAAM,UAAYA,EAAEG,OAAQ,CACrC,IACE,MAAMC,EAAIC,KAAKC,MAAMN,GACrB,OAAOC,MAAMC,QAAQE,GAAKA,EAAI,E,CAC9B,MACA,MAAO,E,EAGX,MAAO,E,CAGT,MAAAG,GACE,MAAMC,EAAIC,KAAKV,SAASU,KAAKb,QAC7B,MAAMc,EAAID,KAAKV,SAASU,KAAKZ,aAC7B,MAAOc,EAAK,EAAGC,EAAK,EAAGC,EAAK,GAAKL,EACjC,MAAOM,EAAK,IAAKC,EAAK,IAAML,EAE5B,MAAMM,EAAK,IACX,MAAMC,EAAK,IAEX,MAAMC,EAAOP,EAAKQ,KAAKC,GAAM,IAC7B,MAAMC,EAAOT,EAAKO,KAAKC,GAAM,IAC7B,MAAME,EAAOT,EAAKM,KAAKC,GAAM,IAG7B,MAAMG,EAAKP,EAAKF,EAAKK,KAAKK,IAAIN,GAC9B,MAAMO,EAAKR,EAAKH,EAAKK,KAAKO,IAAIR,GAC9B,MAAMS,EAAMJ,EAAKR,EAAKI,KAAKK,IAAIN,EAAMG,GACrC,MAAMO,EAAMH,EAAKV,EAAKI,KAAKO,IAAIR,EAAMG,GAGrC,MAAMQ,EAAO,GACb,MAAMC,EAAKH,EAAME,EAAOV,KAAKK,IAAIN,EAAMG,EAAMC,GAC7C,MAAMS,EAAKH,EAAMC,EAAOV,KAAKO,IAAIR,EAAMG,EAAMC,GAE7C,MAAMU,EAAOC,GAAcA,EAAEC,QAAQ,GACrC,MAAMC,EAAQF,GAAcA,EAAEC,QAAQ,GAEtC,OACEE,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,MAAK,aACE,iBAAiBP,EAAIrB,WAAYqB,EAAIpB,WAAYoB,EAAInB,OAEjEuB,EAAA,OAAAE,IAAA,2CAAKE,QAAQ,cAAcC,KAAK,OAE9BL,EAAA,UAAAE,IAAA,2CAAQtB,GAAIA,EAAIC,GAAIA,EAAIyB,EAAG5B,EAAKC,EAAI4B,MAAM,4BAC1CP,EAAA,UAAAE,IAAA,2CAAQtB,GAAIA,EAAIC,GAAIA,EAAIyB,EAAGvB,KAAKyB,IAAI,EAAG9B,EAAKC,GAAK4B,MAAM,4BAGvDP,EAAA,QAAAE,IAAA,2CAAMO,GAAG,KAAKC,GAAI7B,EAAI8B,GAAG,KAAKC,GAAI/B,EAAI0B,MAAM,SAC5CP,EAAA,QAAAE,IAAA,2CAAMO,GAAI7B,EAAI8B,GAAG,IAAIC,GAAI/B,EAAIgC,GAAG,KAAKL,MAAM,SAC3CP,EAAA,QAAAE,IAAA,2CAAMW,EAAE,KAAKC,EAAGjC,EAAK,EAAG0B,MAAM,cAAY,KAC1CP,EAAA,QAAAE,IAAA,2CAAMW,EAAGjC,EAAK,EAAGkC,EAAE,KAAKP,MAAM,cAAY,KAG1CP,EAAA,QAAAE,IAAA,2CAAMO,GAAI7B,EAAI8B,GAAI7B,EAAI8B,GAAIxB,EAAIyB,GAAIvB,EAAIkB,MAAM,gBAC5CP,EAAA,QAAAE,IAAA,2CAAMO,GAAItB,EAAIuB,GAAIrB,EAAIsB,GAAIpB,EAAKqB,GAAIpB,EAAKe,MAAM,gBAC9CP,EAAA,QAAAE,IAAA,2CAAMO,GAAIlB,EAAKmB,GAAIlB,EAAKmB,GAAIjB,EAAIkB,GAAIjB,EAAIY,MAAM,UAG9CP,EAAA,UAAAE,IAAA,2CAAQtB,GAAIA,EAAIC,GAAIA,EAAIyB,EAAE,IAAIC,MAAM,eACpCP,EAAA,UAAAE,IAAA,2CAAQtB,GAAIO,EAAIN,GAAIQ,EAAIiB,EAAE,IAAIC,MAAM,gBACpCP,EAAA,UAAAE,IAAA,2CAAQtB,GAAIW,EAAKV,GAAIW,EAAKc,EAAE,IAAIC,MAAM,mBAGtCP,EAAA,KAAAE,IAAA,2CAAGK,MAAM,WACPP,EAAA,QAAAE,IAAA,2CAAMW,EAAE,KAAKC,EAAE,OAAK,MAAId,EAAA,SAAAE,IAAA,4CAAQN,EAAIrB,GAAG,MACvCyB,EAAA,QAAAE,IAAA,2CAAMW,EAAE,KAAKC,EAAE,OAAK,MAAId,EAAA,SAAAE,IAAA,4CAAQN,EAAIpB,GAAG,MACvCwB,EAAA,QAAAE,IAAA,2CAAMW,EAAE,MAAMC,EAAE,OAAK,MAAId,EAAA,SAAAE,IAAA,4CAAQN,EAAInB,GAAG,MACxCuB,EAAA,QAAAE,IAAA,2CAAMW,EAAE,MAAMC,EAAE,OAAK,KAAGd,EAAA,SAAAE,IAAA,4CAAQH,EAAKR,EAAMX,KAC3CoB,EAAA,QAAAE,IAAA,2CAAMW,EAAE,MAAMC,EAAE,OAAK,KAAGd,EAAA,SAAAE,IAAA,4CAAQH,EAAKP,EAAMX,O","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as i,H as o}from"./p-D2yNiL0d.js";const r=()=>`:host{display:inline-flex;align-items:center;gap:var(--ind-spacing-4, 8px);padding:var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);border-radius:var(--ind-radius-md, 3px);font-family:var(--ind-font-family-sans);font-size:var(--ind-font-size-base, 12px);border:1px solid;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);max-width:100%}.badge{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-bold, 700);font-size:var(--ind-font-size-sm, 11px);letter-spacing:0.04em;padding:1px var(--ind-spacing-2, 4px);border-radius:var(--ind-radius-sm, 2px);background:rgba(0, 0, 0, 0.25);white-space:nowrap}.label{flex:1;font-weight:var(--ind-font-weight-medium, 500);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timestamp{font-family:var(--ind-font-family-mono);font-size:var(--ind-font-size-sm, 11px);opacity:0.85;white-space:nowrap}:host([priority="high-high"]){background:var(--ind-alarm-high-high-bg, #dc2626);color:var(--ind-alarm-high-high-fg, #ffffff);border-color:var(--ind-alarm-high-high-border, #f87171)}:host([priority="high"]){background:var(--ind-alarm-high-bg, #f59e0b);color:var(--ind-alarm-high-fg, #000000);border-color:var(--ind-alarm-high-border, #fcd34d)}:host([priority="low"]){background:var(--ind-alarm-low-bg, #0891b2);color:var(--ind-alarm-low-fg, #ffffff);border-color:var(--ind-alarm-low-border, #22d3ee)}:host([priority="low-low"]){background:var(--ind-alarm-low-low-bg, #7c3aed);color:var(--ind-alarm-low-low-fg, #ffffff);border-color:var(--ind-alarm-low-low-border, #a78bfa)}:host(:not([acknowledged])){animation:ind-alarm-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite}:host([priority="high-high"]:not([acknowledged])){animation-duration:var(--ind-motion-blink-urgent, 200ms)}:host([priority="low"]:not([acknowledged])),:host([priority="low-low"]:not([acknowledged])){animation-duration:var(--ind-motion-blink-slow, 1000ms)}:host([acknowledged]) .label{opacity:0.75}:host([acknowledged]) .badge{opacity:0.85}@keyframes ind-alarm-blink{50%{filter:brightness(0.6)}}@media (prefers-reduced-motion: reduce){:host(:not([acknowledged])){animation:none;outline:3px solid currentColor;outline-offset:2px}}`;const e={"high-high":"HH",high:"H",low:"L","low-low":"LL"};const n=class{constructor(i){a(this,i)}priority="high";acknowledged=false;label;timestamp;render(){const a=e[this.priority];return i(o,{key:"4aa256413a1b908acbe8dda509a7524fbd3c50df",role:"alert","aria-live":this.priority==="high-high"&&!this.acknowledged?"assertive":"polite","aria-atomic":"true"},i("span",{key:"19ee856cc6f4ee90f0db296fae69547c8bfa9c0f",class:"badge",part:"badge","aria-label":`priority ${a}`},a),i("span",{key:"54e66ef997a6ed665e4f0d59f87532368103d686",class:"label",part:"label"},this.label),this.timestamp&&i("time",{key:"954956c17cce6c16df50710c6eb12fad827e8c45",class:"timestamp",part:"timestamp",dateTime:this.timestamp},this.timestamp))}};n.style=r();export{n as ind_alarm};
2
+ //# sourceMappingURL=p-781e21df.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["alarmCss","PRIORITY_LABEL","high","low","IndAlarm","priority","acknowledged","label","timestamp","render","prio","this","h","Host","key","role","class","part","dateTime"],"sources":["src/components/atoms/alarm/alarm.css?tag=ind-alarm&encapsulation=shadow","src/components/atoms/alarm/alarm.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n padding: var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);\n border-radius: var(--ind-radius-md, 3px);\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-base, 12px);\n border: 1px solid;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n max-width: 100%;\n}\n\n.badge {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-bold, 700);\n font-size: var(--ind-font-size-sm, 11px);\n letter-spacing: 0.04em;\n padding: 1px var(--ind-spacing-2, 4px);\n border-radius: var(--ind-radius-sm, 2px);\n background: rgba(0, 0, 0, 0.25);\n white-space: nowrap;\n}\n\n.label {\n flex: 1;\n font-weight: var(--ind-font-weight-medium, 500);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.timestamp {\n font-family: var(--ind-font-family-mono);\n font-size: var(--ind-font-size-sm, 11px);\n opacity: 0.85;\n white-space: nowrap;\n}\n\n:host([priority=\"high-high\"]) {\n background: var(--ind-alarm-high-high-bg, #dc2626);\n color: var(--ind-alarm-high-high-fg, #ffffff);\n border-color: var(--ind-alarm-high-high-border, #f87171);\n}\n:host([priority=\"high\"]) {\n background: var(--ind-alarm-high-bg, #f59e0b);\n color: var(--ind-alarm-high-fg, #000000);\n border-color: var(--ind-alarm-high-border, #fcd34d);\n}\n:host([priority=\"low\"]) {\n background: var(--ind-alarm-low-bg, #0891b2);\n color: var(--ind-alarm-low-fg, #ffffff);\n border-color: var(--ind-alarm-low-border, #22d3ee);\n}\n:host([priority=\"low-low\"]) {\n background: var(--ind-alarm-low-low-bg, #7c3aed);\n color: var(--ind-alarm-low-low-fg, #ffffff);\n border-color: var(--ind-alarm-low-low-border, #a78bfa);\n}\n\n/* Unacknowledged → blink at the priority-appropriate rate. */\n:host(:not([acknowledged])) {\n animation: ind-alarm-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite;\n}\n:host([priority=\"high-high\"]:not([acknowledged])) {\n animation-duration: var(--ind-motion-blink-urgent, 200ms);\n}\n:host([priority=\"low\"]:not([acknowledged])),\n:host([priority=\"low-low\"]:not([acknowledged])) {\n animation-duration: var(--ind-motion-blink-slow, 1000ms);\n}\n\n/* Acknowledged → muted, no animation (ISA-18.2 convention). */\n:host([acknowledged]) .label { opacity: 0.75; }\n:host([acknowledged]) .badge { opacity: 0.85; }\n\n@keyframes ind-alarm-blink {\n 50% { filter: brightness(0.6); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host(:not([acknowledged])) {\n animation: none;\n outline: 3px solid currentColor;\n outline-offset: 2px;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type AlarmPriority = 'high-high' | 'high' | 'low' | 'low-low';\n\nconst PRIORITY_LABEL: Record<AlarmPriority, string> = {\n 'high-high': 'HH',\n 'high': 'H',\n 'low': 'L',\n 'low-low': 'LL',\n};\n\n@Component({\n tag: 'ind-alarm',\n styleUrl: 'alarm.css',\n shadow: true,\n})\nexport class IndAlarm {\n /** ISA-18.2 alarm priority. */\n @Prop({ reflect: true }) priority: AlarmPriority = 'high';\n\n /** When false, the chip blinks (per ISA-18.2 unack convention). */\n @Prop({ reflect: true }) acknowledged: boolean = false;\n\n /** Required human description of the alarm. */\n @Prop() label!: string;\n\n /** Optional ISO-8601 timestamp. Rendered with `<time>`. */\n @Prop() timestamp?: string;\n\n render() {\n const prio = PRIORITY_LABEL[this.priority];\n return (\n <Host\n role=\"alert\"\n aria-live={\n this.priority === 'high-high' && !this.acknowledged ? 'assertive' : 'polite'\n }\n aria-atomic=\"true\"\n >\n <span class=\"badge\" part=\"badge\" aria-label={`priority ${prio}`}>{prio}</span>\n <span class=\"label\" part=\"label\">{this.label}</span>\n {this.timestamp && (\n <time class=\"timestamp\" part=\"timestamp\" dateTime={this.timestamp}>\n {this.timestamp}\n </time>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAW,IAAM,kpECIvB,MAAMC,EAAgD,CACpD,YAAa,KACbC,KAAQ,IACRC,IAAO,IACP,UAAW,M,MAQAC,EAAQ,M,yBAEMC,SAA0B,OAG1BC,aAAwB,MAGzCC,MAGAC,UAER,MAAAC,GACE,MAAMC,EAAOT,EAAeU,KAAKN,UACjC,OACEO,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,QAAO,YAEVJ,KAAKN,WAAa,cAAgBM,KAAKL,aAAe,YAAc,SAAQ,cAElE,QAEZM,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,QAAO,aAAa,YAAYP,KAASA,GAClEE,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,SAASN,KAAKJ,OACtCI,KAAKH,WACJI,EAAA,QAAAE,IAAA,2CAAME,MAAM,YAAYC,KAAK,YAAYC,SAAUP,KAAKH,WACrDG,KAAKH,W","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,h as a,H as e}from"./p-D2yNiL0d.js";const s=()=>`:host{display:inline-block;--_size:8px;--_bg:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));--_glow:transparent;width:var(--_size);height:var(--_size);border-radius:50%;background:var(--_bg);box-shadow:0 0 6px var(--_glow);flex-shrink:0;vertical-align:middle}:host([size="sm"]){--_size:6px}:host([size="md"]){--_size:8px}:host([size="lg"]){--_size:12px}:host([state="running"]){--_bg:var(--ind-state-running-bg, #16a34a);--_glow:var(--ind-state-running-glow, rgba(34, 197, 94, 0.6))}:host([state="stopped"]){--_bg:var(--ind-state-stopped-bg, #5a6776)}:host([state="fault"]){--_bg:var(--ind-state-fault-bg, #dc2626);--_glow:var(--ind-state-fault-glow, rgba(220, 38, 38, 0.7))}:host([state="warning"]){--_bg:var(--ind-state-warning-bg, #f59e0b);--_glow:var(--ind-state-warning-glow, rgba(245, 158, 11, 0.6))}:host([state="maintenance"]){--_bg:var(--ind-state-maintenance-bg, #2563eb);--_glow:var(--ind-state-maintenance-glow, rgba(37, 99, 235, 0.6))}:host([state="success"]){--_bg:var(--ind-feedback-success-bg, #16a34a);--_glow:rgba(34, 197, 94, 0.5)}:host([state="info"]){--_bg:var(--ind-feedback-info-bg, #0891b2);--_glow:rgba(8, 145, 178, 0.5)}:host([state="error"]){--_bg:var(--ind-feedback-error-bg, #dc2626);--_glow:rgba(220, 38, 38, 0.6)}:host([state="neutral"]){--_bg:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}:host([blinking]){animation:ind-status-dot-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite}@keyframes ind-status-dot-blink{50%{opacity:0.3;box-shadow:none}}@media (prefers-reduced-motion: reduce){:host([blinking]){animation:none;outline:2px solid currentColor;outline-offset:2px}}`;const n=class{constructor(a){t(this,a)}state="neutral";size="md";blinking=false;label;render(){if(this.label){return a(e,{role:"status","aria-label":this.label})}return a(e,{"aria-hidden":"true"})}};n.style=s();export{n as ind_status_dot};
2
+ //# sourceMappingURL=p-8817625a.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["statusDotCss","IndStatusDot","state","size","blinking","label","render","this","h","Host","role"],"sources":["src/components/atoms/status-dot/status-dot.css?tag=ind-status-dot&encapsulation=shadow","src/components/atoms/status-dot/status-dot.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --_size: 8px;\n --_bg: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n --_glow: transparent;\n\n width: var(--_size);\n height: var(--_size);\n border-radius: 50%;\n background: var(--_bg);\n box-shadow: 0 0 6px var(--_glow);\n flex-shrink: 0;\n vertical-align: middle;\n}\n\n:host([size=\"sm\"]) { --_size: 6px; }\n:host([size=\"md\"]) { --_size: 8px; }\n:host([size=\"lg\"]) { --_size: 12px; }\n\n:host([state=\"running\"]) {\n --_bg: var(--ind-state-running-bg, #16a34a);\n --_glow: var(--ind-state-running-glow, rgba(34, 197, 94, 0.6));\n}\n:host([state=\"stopped\"]) {\n --_bg: var(--ind-state-stopped-bg, #5a6776);\n}\n:host([state=\"fault\"]) {\n --_bg: var(--ind-state-fault-bg, #dc2626);\n --_glow: var(--ind-state-fault-glow, rgba(220, 38, 38, 0.7));\n}\n:host([state=\"warning\"]) {\n --_bg: var(--ind-state-warning-bg, #f59e0b);\n --_glow: var(--ind-state-warning-glow, rgba(245, 158, 11, 0.6));\n}\n:host([state=\"maintenance\"]) {\n --_bg: var(--ind-state-maintenance-bg, #2563eb);\n --_glow: var(--ind-state-maintenance-glow, rgba(37, 99, 235, 0.6));\n}\n:host([state=\"success\"]) {\n --_bg: var(--ind-feedback-success-bg, #16a34a);\n --_glow: rgba(34, 197, 94, 0.5);\n}\n:host([state=\"info\"]) {\n --_bg: var(--ind-feedback-info-bg, #0891b2);\n --_glow: rgba(8, 145, 178, 0.5);\n}\n:host([state=\"error\"]) {\n --_bg: var(--ind-feedback-error-bg, #dc2626);\n --_glow: rgba(220, 38, 38, 0.6);\n}\n:host([state=\"neutral\"]) {\n --_bg: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n:host([blinking]) {\n animation: ind-status-dot-blink var(--ind-motion-blink-fast, 400ms) steps(2, end) infinite;\n}\n\n@keyframes ind-status-dot-blink {\n 50% { opacity: 0.3; box-shadow: none; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([blinking]) {\n animation: none;\n outline: 2px solid currentColor;\n outline-offset: 2px;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type StatusDotState =\n | 'neutral'\n | 'running'\n | 'stopped'\n | 'fault'\n | 'warning'\n | 'maintenance'\n | 'success'\n | 'info'\n | 'error';\n\nexport type StatusDotSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-status-dot',\n styleUrl: 'status-dot.css',\n shadow: true,\n})\nexport class IndStatusDot {\n @Prop({ reflect: true }) state: StatusDotState = 'neutral';\n @Prop({ reflect: true }) size: StatusDotSize = 'md';\n @Prop({ reflect: true }) blinking: boolean = false;\n\n /**\n * Optional accessible name. Set when the dot stands alone; leave undefined\n * when it's paired with adjacent text that already names the status.\n */\n @Prop() label?: string;\n\n render() {\n if (this.label) {\n return <Host role=\"status\" aria-label={this.label} />;\n }\n return <Host aria-hidden=\"true\" />;\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAe,IAAM,gnD,MCoBdC,EAAY,M,yBACEC,MAAwB,UACxBC,KAAsB,KACtBC,SAAoB,MAMrCC,MAER,MAAAC,GACE,GAAIC,KAAKF,MAAO,CACd,OAAOG,EAACC,EAAI,CAACC,KAAK,SAAQ,aAAaH,KAAKF,O,CAE9C,OAAOG,EAACC,EAAI,eAAa,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as e,H as s}from"./p-D2yNiL0d.js";const n=()=>`:host{display:flex;align-items:center;gap:var(--ind-spacing-4, 8px);padding:var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);background:var(--ind-surface-panel);border-bottom:1px solid var(--ind-surface-border-default);font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));flex-wrap:wrap}.filter ::slotted(*){min-width:200px}.flags{display:flex;align-items:center;gap:var(--ind-spacing-4, 8px)}.spacer{flex:1}.counter{font-family:var(--ind-font-family-mono);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));font-size:var(--ind-font-size-sm, 11px);white-space:nowrap}.actions{display:flex;gap:var(--ind-spacing-3, 6px)}`;const t=class{constructor(e){a(this,e)}counter;render(){const a=this.counter!==undefined&&this.counter!==""&&this.counter!==null;return e(s,{key:"335b711876377ee50cfeaac4635c2794d5c038eb"},e("span",{key:"69cf5e6ca388c2bef9004cddd515db9c1d34f2f9",class:"filter",part:"filter"},e("slot",{key:"6a5d72136095b2531214ea2e28a39a795e8b7e2d",name:"filter"})),e("span",{key:"614f12f7432752c3deef9cca8174a503d7048878",class:"flags",part:"flags"},e("slot",{key:"db14ea5398c70574cb0b690db2e0578aafa6a545",name:"flags"})),e("span",{key:"07ff837c88d3228666b7bcd36ae52f9efa5b081d",class:"spacer"}),a&&e("span",{key:"ee9220383a9a4c9c471f4945da3c28f67dada3ee",class:"counter",part:"counter"},this.counter),e("span",{key:"53bc247add97382c56d4447b30c9b73e663fbe96",class:"actions",part:"actions"},e("slot",{key:"da6c78e96a87a412f44d620356268ef1a746fc99",name:"actions"})))}};t.style=n();export{t as ind_toolbar_action};
2
+ //# sourceMappingURL=p-99f55d2a.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["toolbarActionCss","IndToolbarAction","counter","render","hasCounter","this","undefined","h","Host","key","class","part","name"],"sources":["src/components/molecules/toolbar-action/toolbar-action.css?tag=ind-toolbar-action&encapsulation=shadow","src/components/molecules/toolbar-action/toolbar-action.tsx"],"sourcesContent":[":host {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);\n background: var(--ind-surface-panel);\n border-bottom: 1px solid var(--ind-surface-border-default);\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n flex-wrap: wrap;\n}\n\n.filter ::slotted(*) {\n min-width: 200px;\n}\n\n.flags {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-4, 8px);\n}\n\n.spacer { flex: 1; }\n\n.counter {\n font-family: var(--ind-font-family-mono);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n font-size: var(--ind-font-size-sm, 11px);\n white-space: nowrap;\n}\n\n.actions {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n@Component({\n tag: 'ind-toolbar-action',\n styleUrl: 'toolbar-action.css',\n shadow: true,\n})\nexport class IndToolbarAction {\n /** Counter rendered before the actions (e.g. \"1 248 messages\"). */\n @Prop() counter?: string | number;\n\n render() {\n const hasCounter = this.counter !== undefined && this.counter !== '' && this.counter !== null;\n return (\n <Host>\n <span class=\"filter\" part=\"filter\"><slot name=\"filter\" /></span>\n <span class=\"flags\" part=\"flags\"><slot name=\"flags\" /></span>\n <span class=\"spacer\" />\n {hasCounter && <span class=\"counter\" part=\"counter\">{this.counter}</span>}\n <span class=\"actions\" part=\"actions\"><slot name=\"actions\" /></span>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAmB,IAAM,4vB,MCOlBC,EAAgB,M,yBAEnBC,QAER,MAAAC,GACE,MAAMC,EAAaC,KAAKH,UAAYI,WAAaD,KAAKH,UAAY,IAAMG,KAAKH,UAAY,KACzF,OACEK,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,QAAAE,IAAA,2CAAMC,MAAM,SAASC,KAAK,UAASJ,EAAA,QAAAE,IAAA,2CAAMG,KAAK,YAC9CL,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,SAAQJ,EAAA,QAAAE,IAAA,2CAAMG,KAAK,WAC5CL,EAAA,QAAAE,IAAA,2CAAMC,MAAM,WACXN,GAAcG,EAAA,QAAAE,IAAA,2CAAMC,MAAM,UAAUC,KAAK,WAAWN,KAAKH,SAC1DK,EAAA,QAAAE,IAAA,2CAAMC,MAAM,UAAUC,KAAK,WAAUJ,EAAA,QAAAE,IAAA,2CAAMG,KAAK,a","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as t,H as e}from"./p-D2yNiL0d.js";const n=()=>`:host{display:flex;flex-direction:column;gap:var(--ind-spacing-3, 6px);padding:var(--ind-spacing-5, 12px);background:var(--ind-surface-panel);border:1px solid var(--ind-surface-border-default);border-radius:var(--ind-radius-md, 3px);font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));min-width:160px;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.title{font-size:var(--ind-font-size-xs, 10px);font-weight:var(--ind-font-weight-bold, 700);text-transform:uppercase;letter-spacing:0.08em;color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2))}.status{display:flex;align-items:center;gap:var(--ind-spacing-3, 6px)}.state-label{font-size:var(--ind-font-size-xl, 16px);font-weight:var(--ind-font-weight-semibold, 600);line-height:1}.detail{font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}:host([state="running"]) .state-label{color:var(--ind-state-running-bg, #16a34a)}:host([state="fault"]) .state-label{color:var(--ind-state-fault-bg, #dc2626)}:host([state="warning"]) .state-label{color:var(--ind-state-warning-bg, #f59e0b)}:host([state="maintenance"]) .state-label{color:var(--ind-state-maintenance-bg, #2563eb)}:host([state="stopped"]) .state-label{color:var(--ind-surface-text-secondary)}:host([state="unknown"]) .state-label{color:var(--ind-surface-text-muted)}:host([state="fault"]){border-color:var(--ind-state-fault-bg, #dc2626);box-shadow:0 0 0 1px color-mix(in srgb, var(--ind-state-fault-bg, #dc2626) 30%, transparent)}`;const s={running:"OK",stopped:"Stopped",fault:"Fault",warning:"Warning",maintenance:"Maintenance",unknown:"—"};const i=class{constructor(t){a(this,t)}heading;state="unknown";stateLabel;detail;render(){const a=this.stateLabel??s[this.state];const n=this.state==="unknown"?"neutral":this.state;return t(e,{key:"2bc1d2152325d8a40fb9399ec6c24b0134bde34a",role:"group","aria-label":`${this.heading}: ${a}`,"aria-live":this.state==="fault"?"assertive":"polite"},t("div",{key:"7268095055dc03a742e97786a22dd4179f6e8ac3",class:"title",part:"title"},this.heading),t("div",{key:"4069f5782516eb2b28bfafb4b0a59c3fe6133321",class:"status",part:"status"},t("ind-status-dot",{key:"651976ae059c6b8faafd4bb4de7c1fa08fd6b86b",state:n,size:"md"}),t("span",{key:"18925ef8bb2c51789f315a2adf8cacc5a7ad4712",class:"state-label",part:"state-label"},a)),this.detail&&t("div",{key:"7f3c37bca74f5f5fb92633f9c7d85681c78bd677",class:"detail",part:"detail"},this.detail))}};i.style=n();export{i as ind_health_card};
2
+ //# sourceMappingURL=p-9b93fb09.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["healthCardCss","DEFAULT_LABEL","running","stopped","fault","warning","maintenance","unknown","IndHealthCard","heading","state","stateLabel","detail","render","label","this","dotState","h","Host","key","role","class","part","size"],"sources":["src/components/molecules/health-card/health-card.css?tag=ind-health-card&encapsulation=shadow","src/components/molecules/health-card/health-card.tsx"],"sourcesContent":[":host {\n display: flex;\n flex-direction: column;\n gap: var(--ind-spacing-3, 6px);\n padding: var(--ind-spacing-5, 12px);\n background: var(--ind-surface-panel);\n border: 1px solid var(--ind-surface-border-default);\n border-radius: var(--ind-radius-md, 3px);\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n min-width: 160px;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.title {\n font-size: var(--ind-font-size-xs, 10px);\n font-weight: var(--ind-font-weight-bold, 700);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n}\n\n.status {\n display: flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n}\n\n.state-label {\n font-size: var(--ind-font-size-xl, 16px);\n font-weight: var(--ind-font-weight-semibold, 600);\n line-height: 1;\n}\n\n.detail {\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n/* Bold colored label per state — matches the dot color so the card\n * reads at a glance across a 4-up grid. */\n:host([state=\"running\"]) .state-label { color: var(--ind-state-running-bg, #16a34a); }\n:host([state=\"fault\"]) .state-label { color: var(--ind-state-fault-bg, #dc2626); }\n:host([state=\"warning\"]) .state-label { color: var(--ind-state-warning-bg, #f59e0b); }\n:host([state=\"maintenance\"]) .state-label { color: var(--ind-state-maintenance-bg, #2563eb); }\n:host([state=\"stopped\"]) .state-label { color: var(--ind-surface-text-secondary); }\n:host([state=\"unknown\"]) .state-label { color: var(--ind-surface-text-muted); }\n\n/* Fault card glows subtly as a visual cue, even without blinking. */\n:host([state=\"fault\"]) {\n border-color: var(--ind-state-fault-bg, #dc2626);\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--ind-state-fault-bg, #dc2626) 30%, transparent);\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type HealthState =\n | 'running'\n | 'stopped'\n | 'fault'\n | 'warning'\n | 'maintenance'\n | 'unknown';\n\nconst DEFAULT_LABEL: Record<HealthState, string> = {\n running: 'OK',\n stopped: 'Stopped',\n fault: 'Fault',\n warning: 'Warning',\n maintenance: 'Maintenance',\n unknown: '—',\n};\n\n@Component({\n tag: 'ind-health-card',\n styleUrl: 'health-card.css',\n shadow: true,\n})\nexport class IndHealthCard {\n /** Subsystem name (e.g. \"PLC\", \"Dispense robot\", \"Washer\"). */\n @Prop() heading!: string;\n /** Process state — drives the dot color and the prominent text color. */\n @Prop({ reflect: true }) state: HealthState = 'unknown';\n /** Override the default label (e.g. show \"RUN 24 h\" instead of \"OK\"). */\n @Prop() stateLabel?: string;\n /** Optional sub-line for context (timestamp, last error, etc.). */\n @Prop() detail?: string;\n\n render() {\n const label = this.stateLabel ?? DEFAULT_LABEL[this.state];\n const dotState = this.state === 'unknown' ? 'neutral' : this.state;\n return (\n <Host\n role=\"group\"\n aria-label={`${this.heading}: ${label}`}\n aria-live={this.state === 'fault' ? 'assertive' : 'polite'}\n >\n <div class=\"title\" part=\"title\">{this.heading}</div>\n <div class=\"status\" part=\"status\">\n <ind-status-dot state={dotState as 'running' | 'stopped' | 'fault' | 'warning' | 'maintenance' | 'neutral'} size=\"md\" />\n <span class=\"state-label\" part=\"state-label\">{label}</span>\n </div>\n {this.detail && <div class=\"detail\" part=\"detail\">{this.detail}</div>}\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAgB,IAAM,ujDCU5B,MAAMC,EAA6C,CACjDC,QAAS,KACTC,QAAS,UACTC,MAAO,QACPC,QAAS,UACTC,YAAa,cACbC,QAAS,K,MAQEC,EAAa,M,yBAEhBC,QAEiBC,MAAqB,UAEtCC,WAEAC,OAER,MAAAC,GACE,MAAMC,EAAQC,KAAKJ,YAAcV,EAAcc,KAAKL,OACpD,MAAMM,EAAWD,KAAKL,QAAU,UAAY,UAAYK,KAAKL,MAC7D,OACEO,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,QAAO,aACA,GAAGL,KAAKN,YAAYK,IAAO,YAC5BC,KAAKL,QAAU,QAAU,YAAc,UAElDO,EAAA,OAAAE,IAAA,2CAAKE,MAAM,QAAQC,KAAK,SAASP,KAAKN,SACtCQ,EAAA,OAAAE,IAAA,2CAAKE,MAAM,SAASC,KAAK,UACvBL,EAAA,kBAAAE,IAAA,2CAAgBT,MAAOM,EAAqFO,KAAK,OACjHN,EAAA,QAAAE,IAAA,2CAAME,MAAM,cAAcC,KAAK,eAAeR,IAE/CC,KAAKH,QAAUK,EAAA,OAAAE,IAAA,2CAAKE,MAAM,SAASC,KAAK,UAAUP,KAAKH,Q","ignoreList":[]}