@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,2 @@
1
+ import{r as t,h as s,H as n}from"./p-D2yNiL0d.js";const e=()=>`:host{display:block;width:var(--ind-size-canvas-shelves-width, 480px);height:var(--ind-size-canvas-shelves-height, 340px);font-family:var(--ind-font-family-sans);font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}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)}.heading{font-family:var(--ind-font-family-sans);font-size:13px;font-weight:700;fill:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));text-transform:uppercase;letter-spacing:0.05em}.outline{fill:color-mix(in srgb, var(--ind-surface-raised) 40%, transparent);stroke:var(--ind-surface-border-strong);stroke-width:1.5;stroke-linejoin:round}.fill{fill:var(--ind-state-running-bg, #16a34a);transition:y 240ms, height 240ms}.slot--partial .fill{fill:var(--ind-feedback-warning-bg, #f59e0b)}.slot--empty .fill{fill:var(--ind-feedback-error-bg, #dc2626)}.slot--missing .outline{fill:transparent;stroke-dasharray:4 2;stroke:var(--ind-surface-border-subtle)}.label{font-family:var(--ind-font-family-mono);font-size:11px;font-weight:600;fill:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));letter-spacing:0.02em}.level{font-family:var(--ind-font-family-mono);font-size:12px;font-weight:700;fill:#ffffff;paint-order:stroke;stroke:rgba(0, 0, 0, 0.55);stroke-width:3;letter-spacing:0.02em}.slot--missing .level{display:none}`;const i=class{constructor(s){t(this,s)}slots=[];rows=1;cols=4;heading;parseSlots(){if(Array.isArray(this.slots))return this.slots;if(typeof this.slots==="string"&&this.slots.trim()){try{const t=JSON.parse(this.slots);return Array.isArray(t)?t:[]}catch{return[]}}return[]}resolveState(t){if(t.state)return t.state;if(t.level===undefined)return"missing";if(t.level>=60)return"full";if(t.level>=20)return"partial";return"empty"}render(){const t=this.parseSlots();const e=480;const i=340;const r=24;const a=this.heading?40:24;const o=28;const l=e-r*2;const f=i-a-o;const c=l/this.cols;const d=f/this.rows;return s(n,{key:"e368cf70181cf224e4076b937a1e12a53e95e58f",role:"img","aria-label":this.heading??"Shelf inventory"},s("svg",{key:"e5fa8c4d7bed40cddbd4c6a691aa49a9c29007a5",viewBox:`0 0 ${e} ${i}`,part:"svg"},this.heading&&s("text",{key:"ec0c820367a330cc570b2c44c6d63c11fbed7f3b",x:e/2,y:"22",class:"heading","text-anchor":"middle"},this.heading),t.slice(0,this.rows*this.cols).map((n=>{const e=t.indexOf(n);const i=e%this.cols;const o=Math.floor(e/this.cols);const l=r+i*c+c/2;const f=a+o*d+d/2;const h=Math.min(c-30,80);const g=Math.max(40,d-60);const u=l-h/2;const m=f-g/2;const v=u+h*.32;const p=u+h*.68;const y=m+14;const b=this.resolveState(n);const x=n.level??0;const k=5;const $=g-20-k*2;const w=Math.max(0,$*(x/100));return s("g",{class:`slot slot--${b}`},s("path",{class:"outline",d:`\n M ${v} ${m}\n L ${p} ${m}\n L ${p} ${m+8}\n L ${u+h} ${y}\n L ${u+h} ${m+g}\n L ${u} ${m+g}\n L ${u} ${y}\n L ${v} ${m+8}\n Z\n `}),b!=="missing"&&x>0&&s("rect",{class:"fill",x:u+k,y:m+g-k-w,width:h-k*2,height:w,rx:"2"}),b!=="missing"&&s("text",{x:l,y:f+4,class:"level","text-anchor":"middle"},Math.round(x),"%"),s("text",{x:l,y:m+g+16,class:"label","text-anchor":"middle"},n.label))}))))}};i.style=e();export{i as ind_shelf_canvas};
2
+ //# sourceMappingURL=p-c8de42e9.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["shelfCanvasCss","IndShelfCanvas","slots","rows","cols","heading","parseSlots","Array","isArray","this","trim","p","JSON","parse","resolveState","s","state","level","undefined","render","W","H","padX","padTop","padBottom","gridW","gridH","cellW","cellH","h","Host","key","role","viewBox","part","x","y","class","slice","map","i","indexOf","col","row","Math","floor","cx","cy","w","min","bodyH","max","neckTopX1","neckTopX2","shoulderY","innerPad","innerH","fillH","d","width","height","rx","round","label"],"sources":["src/components/atoms/shelf-canvas/shelf-canvas.css?tag=ind-shelf-canvas&encapsulation=shadow","src/components/atoms/shelf-canvas/shelf-canvas.tsx"],"sourcesContent":[":host {\n display: block;\n width: var(--ind-size-canvas-shelves-width, 480px);\n height: var(--ind-size-canvas-shelves-height, 340px);\n font-family: var(--ind-font-family-sans);\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\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.heading {\n font-family: var(--ind-font-family-sans);\n font-size: 13px;\n font-weight: 700;\n fill: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.outline {\n fill: color-mix(in srgb, var(--ind-surface-raised) 40%, transparent);\n stroke: var(--ind-surface-border-strong);\n stroke-width: 1.5;\n stroke-linejoin: round;\n}\n\n.fill {\n fill: var(--ind-state-running-bg, #16a34a);\n transition: y 240ms, height 240ms;\n}\n\n.slot--partial .fill { fill: var(--ind-feedback-warning-bg, #f59e0b); }\n.slot--empty .fill { fill: var(--ind-feedback-error-bg, #dc2626); }\n\n.slot--missing .outline {\n fill: transparent;\n stroke-dasharray: 4 2;\n stroke: var(--ind-surface-border-subtle);\n}\n\n.label {\n font-family: var(--ind-font-family-mono);\n font-size: 11px;\n font-weight: 600;\n fill: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n letter-spacing: 0.02em;\n}\n\n.level {\n font-family: var(--ind-font-family-mono);\n font-size: 12px;\n font-weight: 700;\n fill: #ffffff;\n paint-order: stroke;\n stroke: rgba(0, 0, 0, 0.55);\n stroke-width: 3;\n letter-spacing: 0.02em;\n}\n\n.slot--missing .level { display: none; }\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ShelfSlotState = 'full' | 'partial' | 'empty' | 'missing';\n\nexport interface ShelfSlot {\n /** Stable identifier for keying / cell click events. */\n id: string;\n /** Short label shown under the container. */\n label: string;\n /** 0–100 fill level. `undefined` ⇒ container considered missing. */\n level?: number;\n /** Explicit state — overrides the level-based default. */\n state?: ShelfSlotState;\n}\n\n/**\n * Grid of bottle/container slots showing their fill level. Generic — represents\n * any rack of resupplyable containers (bottles, cartridges, kegs, etc.).\n *\n * <ind-shelf-canvas\n * .slots=${[{id:'a', label:'A', level:78}, {id:'b', label:'B', level:12}]}\n * cols=\"2\"></ind-shelf-canvas>\n */\n@Component({\n tag: 'ind-shelf-canvas',\n styleUrl: 'shelf-canvas.css',\n shadow: true,\n})\nexport class IndShelfCanvas {\n @Prop() slots: ShelfSlot[] | string = [];\n @Prop() rows: number = 1;\n @Prop() cols: number = 4;\n @Prop() heading?: string;\n\n private parseSlots(): ShelfSlot[] {\n if (Array.isArray(this.slots)) return this.slots;\n if (typeof this.slots === 'string' && this.slots.trim()) {\n try {\n const p = JSON.parse(this.slots);\n return Array.isArray(p) ? p : [];\n } catch {\n return [];\n }\n }\n return [];\n }\n\n private resolveState(s: ShelfSlot): ShelfSlotState {\n if (s.state) return s.state;\n if (s.level === undefined) return 'missing';\n if (s.level >= 60) return 'full';\n if (s.level >= 20) return 'partial';\n return 'empty';\n }\n\n render() {\n const slots = this.parseSlots();\n const W = 480;\n const H = 340;\n const padX = 24;\n const padTop = this.heading ? 40 : 24;\n const padBottom = 28;\n const gridW = W - padX * 2;\n const gridH = H - padTop - padBottom;\n const cellW = gridW / this.cols;\n const cellH = gridH / this.rows;\n\n return (\n <Host role=\"img\" aria-label={this.heading ?? 'Shelf inventory'}>\n <svg viewBox={`0 0 ${W} ${H}`} part=\"svg\">\n {this.heading && (\n <text x={W / 2} y=\"22\" class=\"heading\" text-anchor=\"middle\">\n {this.heading}\n </text>\n )}\n\n {slots.slice(0, this.rows * this.cols).map((s) => {\n const i = slots.indexOf(s);\n const col = i % this.cols;\n const row = Math.floor(i / this.cols);\n const cx = padX + col * cellW + cellW / 2;\n const cy = padTop + row * cellH + cellH / 2;\n\n const w = Math.min(cellW - 30, 80);\n const bodyH = Math.max(40, cellH - 60);\n const x = cx - w / 2;\n const y = cy - bodyH / 2;\n const neckTopX1 = x + w * 0.32;\n const neckTopX2 = x + w * 0.68;\n const shoulderY = y + 14;\n\n const state = this.resolveState(s);\n const level = s.level ?? 0;\n const innerPad = 5;\n const innerH = bodyH - 20 - innerPad * 2;\n const fillH = Math.max(0, innerH * (level / 100));\n\n return (\n <g class={`slot slot--${state}`}>\n {/* container outline — bottle silhouette */}\n <path\n class=\"outline\"\n d={`\n M ${neckTopX1} ${y}\n L ${neckTopX2} ${y}\n L ${neckTopX2} ${y + 8}\n L ${x + w} ${shoulderY}\n L ${x + w} ${y + bodyH}\n L ${x} ${y + bodyH}\n L ${x} ${shoulderY}\n L ${neckTopX1} ${y + 8}\n Z\n `}\n />\n\n {/* fill */}\n {state !== 'missing' && level > 0 && (\n <rect\n class=\"fill\"\n x={x + innerPad}\n y={y + bodyH - innerPad - fillH}\n width={w - innerPad * 2}\n height={fillH}\n rx=\"2\"\n />\n )}\n\n {/* level text inside the body */}\n {state !== 'missing' && (\n <text x={cx} y={cy + 4} class=\"level\" text-anchor=\"middle\">\n {Math.round(level)}%\n </text>\n )}\n\n {/* label under the container */}\n <text x={cx} y={y + bodyH + 16} class=\"label\" text-anchor=\"middle\">\n {s.label}\n </text>\n </g>\n );\n })}\n </svg>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAiB,IAAM,y7C,MC4BhBC,EAAc,M,yBACjBC,MAA8B,GAC9BC,KAAe,EACfC,KAAe,EACfC,QAEA,UAAAC,GACN,GAAIC,MAAMC,QAAQC,KAAKP,OAAQ,OAAOO,KAAKP,MAC3C,UAAWO,KAAKP,QAAU,UAAYO,KAAKP,MAAMQ,OAAQ,CACvD,IACE,MAAMC,EAAIC,KAAKC,MAAMJ,KAAKP,OAC1B,OAAOK,MAAMC,QAAQG,GAAKA,EAAI,E,CAC9B,MACA,MAAO,E,EAGX,MAAO,E,CAGD,YAAAG,CAAaC,GACnB,GAAIA,EAAEC,MAAO,OAAOD,EAAEC,MACtB,GAAID,EAAEE,QAAUC,UAAW,MAAO,UAClC,GAAIH,EAAEE,OAAS,GAAI,MAAO,OAC1B,GAAIF,EAAEE,OAAS,GAAI,MAAO,UAC1B,MAAO,O,CAGT,MAAAE,GACE,MAAMjB,EAAQO,KAAKH,aACnB,MAAMc,EAAI,IACV,MAAMC,EAAI,IACV,MAAMC,EAAO,GACb,MAAMC,EAASd,KAAKJ,QAAU,GAAK,GACnC,MAAMmB,EAAY,GAClB,MAAMC,EAAQL,EAAIE,EAAO,EACzB,MAAMI,EAAQL,EAAIE,EAASC,EAC3B,MAAMG,EAAQF,EAAQhB,KAAKL,KAC3B,MAAMwB,EAAQF,EAAQjB,KAAKN,KAE3B,OACE0B,EAACC,EAAI,CAAAC,IAAA,2CAACC,KAAK,MAAK,aAAavB,KAAKJ,SAAW,mBAC3CwB,EAAA,OAAAE,IAAA,2CAAKE,QAAS,OAAOb,KAAKC,IAAKa,KAAK,OACjCzB,KAAKJ,SACJwB,EAAA,QAAAE,IAAA,2CAAMI,EAAGf,EAAI,EAAGgB,EAAE,KAAKC,MAAM,UAAS,cAAa,UAChD5B,KAAKJ,SAITH,EAAMoC,MAAM,EAAG7B,KAAKN,KAAOM,KAAKL,MAAMmC,KAAKxB,IAC1C,MAAMyB,EAAItC,EAAMuC,QAAQ1B,GACxB,MAAM2B,EAAMF,EAAI/B,KAAKL,KACrB,MAAMuC,EAAMC,KAAKC,MAAML,EAAI/B,KAAKL,MAChC,MAAM0C,EAAKxB,EAAOoB,EAAMf,EAAQA,EAAQ,EACxC,MAAMoB,EAAKxB,EAASoB,EAAMf,EAAQA,EAAQ,EAE1C,MAAMoB,EAAIJ,KAAKK,IAAItB,EAAQ,GAAI,IAC/B,MAAMuB,EAAQN,KAAKO,IAAI,GAAIvB,EAAQ,IACnC,MAAMO,EAAIW,EAAKE,EAAI,EACnB,MAAMZ,EAAIW,EAAKG,EAAQ,EACvB,MAAME,EAAYjB,EAAIa,EAAI,IAC1B,MAAMK,EAAYlB,EAAIa,EAAI,IAC1B,MAAMM,EAAYlB,EAAI,GAEtB,MAAMpB,EAAQP,KAAKK,aAAaC,GAChC,MAAME,EAAQF,EAAEE,OAAS,EACzB,MAAMsC,EAAW,EACjB,MAAMC,EAASN,EAAQ,GAAKK,EAAW,EACvC,MAAME,EAAQb,KAAKO,IAAI,EAAGK,GAAUvC,EAAQ,MAE5C,OACEY,EAAA,KAAGQ,MAAO,cAAcrB,KAEtBa,EAAA,QACEQ,MAAM,UACNqB,EAAG,2BACGN,KAAahB,4BACbiB,KAAajB,4BACbiB,KAAajB,EAAI,4BACjBD,EAAIa,KAAKM,4BACTnB,EAAIa,KAAKZ,EAAIc,4BACbf,KAAKC,EAAIc,4BACTf,KAAKmB,4BACLF,KAAahB,EAAI,iDAMxBpB,IAAU,WAAaC,EAAQ,GAC9BY,EAAA,QACEQ,MAAM,OACNF,EAAGA,EAAIoB,EACPnB,EAAGA,EAAIc,EAAQK,EAAWE,EAC1BE,MAAOX,EAAIO,EAAW,EACtBK,OAAQH,EACRI,GAAG,MAKN7C,IAAU,WACTa,EAAA,QAAMM,EAAGW,EAAIV,EAAGW,EAAK,EAAGV,MAAM,QAAO,cAAa,UAC/CO,KAAKkB,MAAM7C,GAAM,KAKtBY,EAAA,QAAMM,EAAGW,EAAIV,EAAGA,EAAIc,EAAQ,GAAIb,MAAM,QAAO,cAAa,UACvDtB,EAAEgD,OAEH,K","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as a,h as i,H as n}from"./p-D2yNiL0d.js";const r=()=>`:host{display:inline-block;font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));--_h:var(--ind-size-input-md, 32px)}:host([size="sm"]){--_h:var(--ind-size-input-sm, 24px)}:host([size="md"]){--_h:var(--ind-size-input-md, 32px)}:host([size="lg"]){--_h:var(--ind-size-input-lg, 40px)}.wrap{display:inline-flex;flex-direction:column;gap:var(--ind-spacing-2, 4px);min-width:160px}.label{font-size:var(--ind-font-size-sm, 11px);font-weight:var(--ind-font-weight-medium, 500);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));letter-spacing:0.04em;text-transform:uppercase}.field{position:relative;display:inline-flex;align-items:center;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-md, 3px);transition:border-color var(--ind-motion-duration-fast, 120ms), box-shadow var(--ind-motion-duration-fast, 120ms)}.field:focus-within{border-color:var(--ind-surface-focus-ring, #22d3ee);box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent)}.native{appearance:none;-webkit-appearance:none;flex:1;height:100%;background:transparent;border:none;outline:none;padding:0 calc(var(--ind-spacing-7, 20px) + 8px) 0 var(--ind-spacing-4, 8px);font:inherit;color:inherit;cursor:pointer;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.native::-ms-expand{display:none}.native option{background:var(--ind-surface-panel);color:var(--ind-surface-text-primary)}.caret{position:absolute;right:var(--ind-spacing-4, 8px);font-size:var(--ind-font-size-base, 12px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));pointer-events:none;line-height:1}:host([invalid]) .field{border-color:var(--ind-feedback-error-bg, #dc2626)}:host([invalid]) .field:focus-within{box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent)}:host([disabled]){opacity:0.55;pointer-events:none}`;const t=class{constructor(i){e(this,i);this.indChange=a(this,"indChange")}options=[];value="";placeholder;label;name;size="md";disabled=false;invalid=false;indChange;parseOptions(){if(Array.isArray(this.options))return this.options;if(typeof this.options==="string"&&this.options.trim()){try{const e=JSON.parse(this.options);return Array.isArray(e)?e:[]}catch{return[]}}return[]}onChange=e=>{const a=e.target.value;this.value=a;this.indChange.emit(a)};render(){const e=this.parseOptions();return i(n,{key:"283d3e72b726d0b04958b452629df4e579907f05"},i("label",{key:"dcbfc48d00c096cd6b709e4eb16b687cd07dd350",class:"wrap",part:"wrap"},this.label&&i("span",{key:"011fa524c21bfc749cedc70f6ec810ca90a73be2",class:"label",part:"label"},this.label),i("span",{key:"8fc35e3db2cbf2bd9cb780d8e1e1ee395c022d1a",class:"field",part:"field"},i("select",{key:"a8944a8a82162e4f1b36e9384145dd4e0399afaf",class:"native",part:"native",disabled:this.disabled,name:this.name,"aria-invalid":this.invalid?"true":"false",onChange:this.onChange},this.placeholder&&i("option",{key:"8da45f0c3d932005210e61a216f7f9dfa9581767",value:"",disabled:true,selected:this.value===""},this.placeholder),e.map((e=>i("option",{value:e.value,disabled:e.disabled,selected:e.value===this.value},e.label)))),i("span",{key:"ca2db8e41ee4fe3a8ef1a51458189face0450541",class:"caret",part:"caret","aria-hidden":"true"},"▾"))))}};t.style=r();export{t as ind_select};
2
+ //# sourceMappingURL=p-c9f752e6.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["selectCss","IndSelect","options","value","placeholder","label","name","size","disabled","invalid","indChange","parseOptions","Array","isArray","this","trim","parsed","JSON","parse","onChange","e","v","target","emit","render","opts","h","Host","key","class","part","selected","map","o"],"sources":["src/components/atoms/select/select.css?tag=ind-select&encapsulation=shadow","src/components/atoms/select/select.tsx"],"sourcesContent":[":host {\n display: inline-block;\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n --_h: var(--ind-size-input-md, 32px);\n}\n\n:host([size=\"sm\"]) { --_h: var(--ind-size-input-sm, 24px); }\n:host([size=\"md\"]) { --_h: var(--ind-size-input-md, 32px); }\n:host([size=\"lg\"]) { --_h: var(--ind-size-input-lg, 40px); }\n\n.wrap {\n display: inline-flex;\n flex-direction: column;\n gap: var(--ind-spacing-2, 4px);\n min-width: 160px;\n}\n\n.label {\n font-size: var(--ind-font-size-sm, 11px);\n font-weight: var(--ind-font-weight-medium, 500);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.field {\n position: relative;\n display: inline-flex;\n align-items: center;\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-md, 3px);\n transition:\n border-color var(--ind-motion-duration-fast, 120ms),\n box-shadow var(--ind-motion-duration-fast, 120ms);\n}\n\n.field:focus-within {\n border-color: var(--ind-surface-focus-ring, #22d3ee);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent);\n}\n\n.native {\n appearance: none;\n -webkit-appearance: none;\n flex: 1;\n height: 100%;\n background: transparent;\n border: none;\n outline: none;\n padding: 0 calc(var(--ind-spacing-7, 20px) + 8px) 0 var(--ind-spacing-4, 8px);\n font: inherit;\n color: inherit;\n cursor: pointer;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.native::-ms-expand { display: none; }\n\n/* Native option styling: at least give them a dark theme bg when\n * the OS picker honors it (Chrome/Edge mostly do). */\n.native option {\n background: var(--ind-surface-panel);\n color: var(--ind-surface-text-primary);\n}\n\n.caret {\n position: absolute;\n right: var(--ind-spacing-4, 8px);\n font-size: var(--ind-font-size-base, 12px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n pointer-events: none;\n line-height: 1;\n}\n\n:host([invalid]) .field {\n border-color: var(--ind-feedback-error-bg, #dc2626);\n}\n:host([invalid]) .field:focus-within {\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent);\n}\n\n:host([disabled]) {\n opacity: 0.55;\n pointer-events: none;\n}\n","import { Component, Prop, h, Host, Event, EventEmitter } from '@stencil/core';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport type SelectSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-select',\n styleUrl: 'select.css',\n shadow: true,\n})\nexport class IndSelect {\n /**\n * Options. Pass an array via JS property (`.options = [...]`) OR a JSON-stringified\n * array via the HTML `options` attribute. The native picker handles keyboard nav and\n * mobile UI without us building a popover.\n */\n @Prop() options: SelectOption[] | string = [];\n @Prop({ mutable: true }) value: string = '';\n @Prop() placeholder?: string;\n @Prop() label?: string;\n @Prop() name?: string;\n @Prop({ reflect: true }) size: SelectSize = 'md';\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) invalid: boolean = false;\n\n @Event() indChange!: EventEmitter<string>;\n\n private parseOptions(): SelectOption[] {\n if (Array.isArray(this.options)) return this.options;\n if (typeof this.options === 'string' && this.options.trim()) {\n try {\n const parsed = JSON.parse(this.options);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return [];\n }\n\n private onChange = (e: Event) => {\n const v = (e.target as HTMLSelectElement).value;\n this.value = v;\n this.indChange.emit(v);\n };\n\n render() {\n const opts = this.parseOptions();\n return (\n <Host>\n <label class=\"wrap\" part=\"wrap\">\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n <span class=\"field\" part=\"field\">\n <select\n class=\"native\"\n part=\"native\"\n disabled={this.disabled}\n name={this.name}\n aria-invalid={this.invalid ? 'true' : 'false'}\n onChange={this.onChange}\n >\n {this.placeholder && (\n <option value=\"\" disabled selected={this.value === ''}>\n {this.placeholder}\n </option>\n )}\n {opts.map((o) => (\n <option value={o.value} disabled={o.disabled} selected={o.value === this.value}>\n {o.label}\n </option>\n ))}\n </select>\n <span class=\"caret\" part=\"caret\" aria-hidden=\"true\">▾</span>\n </span>\n </label>\n </Host>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAY,IAAM,2gE,MCeXC,EAAS,M,4DAMZC,QAAmC,GAClBC,MAAgB,GACjCC,YACAC,MACAC,KACiBC,KAAmB,KACnBC,SAAoB,MACpBC,QAAmB,MAEnCC,UAED,YAAAC,GACN,GAAIC,MAAMC,QAAQC,KAAKZ,SAAU,OAAOY,KAAKZ,QAC7C,UAAWY,KAAKZ,UAAY,UAAYY,KAAKZ,QAAQa,OAAQ,CAC3D,IACE,MAAMC,EAASC,KAAKC,MAAMJ,KAAKZ,SAC/B,OAAOU,MAAMC,QAAQG,GAAUA,EAAS,E,CACxC,MACA,MAAO,E,EAGX,MAAO,E,CAGDG,SAAYC,IAClB,MAAMC,EAAKD,EAAEE,OAA6BnB,MAC1CW,KAAKX,MAAQkB,EACbP,KAAKJ,UAAUa,KAAKF,EAAE,EAGxB,MAAAG,GACE,MAAMC,EAAOX,KAAKH,eAClB,OACEe,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,SAAAE,IAAA,2CAAOC,MAAM,OAAOC,KAAK,QACtBhB,KAAKT,OAASqB,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,SAAShB,KAAKT,OACtDqB,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,SACvBJ,EAAA,UAAAE,IAAA,2CACEC,MAAM,SACNC,KAAK,SACLtB,SAAUM,KAAKN,SACfF,KAAMQ,KAAKR,KAAI,eACDQ,KAAKL,QAAU,OAAS,QACtCU,SAAUL,KAAKK,UAEdL,KAAKV,aACJsB,EAAA,UAAAE,IAAA,2CAAQzB,MAAM,GAAGK,SAAQ,KAACuB,SAAUjB,KAAKX,QAAU,IAChDW,KAAKV,aAGTqB,EAAKO,KAAKC,GACTP,EAAA,UAAQvB,MAAO8B,EAAE9B,MAAOK,SAAUyB,EAAEzB,SAAUuB,SAAUE,EAAE9B,QAAUW,KAAKX,OACtE8B,EAAE5B,UAITqB,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,QAAO,cAAa,QAAM,O","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as n,h as i,H as a}from"./p-D2yNiL0d.js";const e=()=>`:host{display:inline-block;font-family:var(--ind-font-family-sans)}.btn{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:var(--ind-spacing-3, 6px);padding:var(--ind-spacing-3, 6px) var(--ind-spacing-6, 16px);font-family:inherit;font-size:var(--ind-font-size-md, 13px);font-weight:var(--ind-font-weight-semibold, 600);line-height:1;letter-spacing:0.01em;background:var(--_bg, var(--ind-button-default-bg, #1a2129));color:var(--_fg, var(--ind-button-default-fg, #eef1f5));border:1px solid var(--_border, var(--ind-button-default-border, #3d4856));border-radius:var(--ind-radius-md, 3px);cursor:pointer;user-select:none;touch-action:manipulation;transition:background-color var(--ind-motion-duration-fast, 120ms), border-color var(--ind-motion-duration-fast, 120ms)}.btn:hover:not(:disabled){background:var(--_bg-hover, var(--ind-button-default-bg-hover, #2a3340))}.btn:active:not(:disabled),.btn.is-holding:not(:disabled){background:var(--_bg-active, var(--ind-button-default-bg-active, #3d4856))}.btn:focus-visible{outline:2px solid var(--ind-surface-focus-ring, #22d3ee);outline-offset:2px}.btn:disabled{opacity:0.5;cursor:not-allowed}:host([variant="primary"]) .btn{--_bg:var(--ind-button-primary-bg, #2563eb);--_bg-hover:var(--ind-button-primary-bg-hover, #60a5fa);--_bg-active:var(--ind-button-primary-bg-active, #60a5fa);--_fg:var(--ind-button-primary-fg, #ffffff);--_border:var(--ind-button-primary-border, #60a5fa)}:host([variant="danger"]) .btn{--_bg:var(--ind-button-danger-bg, #dc2626);--_bg-hover:var(--ind-button-danger-bg-hover, #f87171);--_bg-active:var(--ind-button-danger-bg-active, #f87171);--_fg:var(--ind-button-danger-fg, #ffffff);--_border:var(--ind-button-danger-border, #f87171)}:host([variant="ghost"]) .btn{--_bg:transparent;--_bg-hover:var(--ind-button-ghost-bg-hover, #1a2129);--_bg-active:var(--ind-button-ghost-bg-active, #2a3340)}:host([size="sm"]) .btn{font-size:var(--ind-font-size-sm, 11px);padding:var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px)}:host([size="lg"]) .btn{font-size:var(--ind-font-size-lg, 14px);padding:var(--ind-spacing-5, 12px) var(--ind-spacing-7, 20px)}.content{position:relative;z-index:1}.hold-progress{position:absolute;inset:0;background:currentColor;opacity:0.18;transform-origin:left center;transform:scaleX(0);transition:transform 60ms linear;pointer-events:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}`;const r=class{constructor(i){t(this,i);this.indActivate=n(this,"indActivate")}variant="default";size="md";disabled=false;label;holdToConfirmMs=0;indActivate;progress=0;holdStart=0;rafHandle=null;startHold=t=>{if(this.disabled)return;t.preventDefault();if(this.holdToConfirmMs<=0){this.indActivate.emit();return}this.holdStart=performance.now();this.progress=0;this.tick()};tick=()=>{const t=performance.now()-this.holdStart;this.progress=Math.min(1,t/this.holdToConfirmMs);if(this.progress>=1){this.cancelHold();this.indActivate.emit();return}this.rafHandle=requestAnimationFrame(this.tick)};cancelHold=()=>{if(this.rafHandle!==null){cancelAnimationFrame(this.rafHandle);this.rafHandle=null}this.progress=0};onKeyDown=t=>{if(t.key===" "||t.key==="Enter"){t.preventDefault();this.startHold(t)}};disconnectedCallback(){this.cancelHold()}render(){const t=this.progress>0&&this.progress<1;return i(a,{key:"bbafede18f13eac5486d9cae0c2bd727375e7762"},i("button",{key:"82bf34d3c9943e33edd5c8863be6457d3c201ece",type:"button",class:{btn:true,"is-holding":t},part:"btn",disabled:this.disabled,"aria-label":this.label,"aria-describedby":this.holdToConfirmMs>0?"hold-hint":undefined,onPointerDown:this.startHold,onPointerUp:this.cancelHold,onPointerLeave:this.cancelHold,onPointerCancel:this.cancelHold,onKeyDown:this.onKeyDown,onKeyUp:this.cancelHold},i("span",{key:"75252fda5e1229f6c335df277b0c09a18d0b621d",class:"content",part:"content"},i("slot",{key:"f9a158deadf76da0cf1e13680c1b1dd444273387"},this.label)),this.holdToConfirmMs>0&&i("span",{key:"7ba778902c08b3d8fe6b1c6a963c4ab645369110",class:"hold-progress",part:"hold-progress",style:{transform:`scaleX(${this.progress})`},"aria-hidden":"true"})),this.holdToConfirmMs>0&&i("span",{key:"9c2f72de9486bfed4855c5dc81dbf54161c97842",id:"hold-hint",class:"sr-only"},"Hold to confirm (",this.holdToConfirmMs," ms)"))}};r.style=e();export{r as ind_button};
2
+ //# sourceMappingURL=p-cee8bf2b.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buttonCss","IndButton","variant","size","disabled","label","holdToConfirmMs","indActivate","progress","holdStart","rafHandle","startHold","e","this","preventDefault","emit","performance","now","tick","elapsed","Math","min","cancelHold","requestAnimationFrame","cancelAnimationFrame","onKeyDown","key","disconnectedCallback","render","isHolding","h","Host","type","class","btn","part","undefined","onPointerDown","onPointerUp","onPointerLeave","onPointerCancel","onKeyUp","style","transform","id"],"sources":["src/components/atoms/button/button.css?tag=ind-button&encapsulation=shadow","src/components/atoms/button/button.tsx"],"sourcesContent":[":host {\n display: inline-block;\n font-family: var(--ind-font-family-sans);\n}\n\n.btn {\n position: relative;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ind-spacing-3, 6px);\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-6, 16px);\n\n font-family: inherit;\n font-size: var(--ind-font-size-md, 13px);\n font-weight: var(--ind-font-weight-semibold, 600);\n line-height: 1;\n letter-spacing: 0.01em;\n\n background: var(--_bg, var(--ind-button-default-bg, #1a2129));\n color: var(--_fg, var(--ind-button-default-fg, #eef1f5));\n border: 1px solid var(--_border, var(--ind-button-default-border, #3d4856));\n border-radius: var(--ind-radius-md, 3px);\n\n cursor: pointer;\n user-select: none;\n touch-action: manipulation;\n transition:\n background-color var(--ind-motion-duration-fast, 120ms),\n border-color var(--ind-motion-duration-fast, 120ms);\n}\n\n.btn:hover:not(:disabled) {\n background: var(--_bg-hover, var(--ind-button-default-bg-hover, #2a3340));\n}\n\n.btn:active:not(:disabled),\n.btn.is-holding:not(:disabled) {\n background: var(--_bg-active, var(--ind-button-default-bg-active, #3d4856));\n}\n\n.btn:focus-visible {\n outline: 2px solid var(--ind-surface-focus-ring, #22d3ee);\n outline-offset: 2px;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n:host([variant=\"primary\"]) .btn {\n --_bg: var(--ind-button-primary-bg, #2563eb);\n --_bg-hover: var(--ind-button-primary-bg-hover, #60a5fa);\n --_bg-active: var(--ind-button-primary-bg-active, #60a5fa);\n --_fg: var(--ind-button-primary-fg, #ffffff);\n --_border: var(--ind-button-primary-border, #60a5fa);\n}\n\n:host([variant=\"danger\"]) .btn {\n --_bg: var(--ind-button-danger-bg, #dc2626);\n --_bg-hover: var(--ind-button-danger-bg-hover, #f87171);\n --_bg-active: var(--ind-button-danger-bg-active, #f87171);\n --_fg: var(--ind-button-danger-fg, #ffffff);\n --_border: var(--ind-button-danger-border, #f87171);\n}\n\n:host([variant=\"ghost\"]) .btn {\n --_bg: transparent;\n --_bg-hover: var(--ind-button-ghost-bg-hover, #1a2129);\n --_bg-active: var(--ind-button-ghost-bg-active, #2a3340);\n}\n\n:host([size=\"sm\"]) .btn {\n font-size: var(--ind-font-size-sm, 11px);\n padding: var(--ind-spacing-2, 4px) var(--ind-spacing-5, 12px);\n}\n:host([size=\"lg\"]) .btn {\n font-size: var(--ind-font-size-lg, 14px);\n padding: var(--ind-spacing-5, 12px) var(--ind-spacing-7, 20px);\n}\n\n.content {\n position: relative;\n z-index: 1;\n}\n\n.hold-progress {\n position: absolute;\n inset: 0;\n background: currentColor;\n opacity: 0.18;\n transform-origin: left center;\n transform: scaleX(0);\n transition: transform 60ms linear;\n pointer-events: none;\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n h,\n Host,\n} from '@stencil/core';\n\nexport type ButtonVariant = 'default' | 'primary' | 'danger' | 'ghost';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-button',\n styleUrl: 'button.css',\n shadow: true,\n})\nexport class IndButton {\n /** Visual variant. `danger` should be paired with `holdToConfirmMs` for critical actions. */\n @Prop({ reflect: true }) variant: ButtonVariant = 'default';\n\n /** Size. */\n @Prop({ reflect: true }) size: ButtonSize = 'md';\n\n /** Disabled state. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Optional accessible label (falls back to slotted text). */\n @Prop() label?: string;\n\n /**\n * If > 0, the button must be held this many milliseconds before activating.\n * Use for critical actions (Stop, Trip, Reset) to prevent accidental clicks —\n * standard NAMUR / safety-instrumented operating practice.\n */\n @Prop() holdToConfirmMs: number = 0;\n\n /** Fired on click (or after hold completes if `holdToConfirmMs > 0`). */\n @Event() indActivate!: EventEmitter<void>;\n\n @State() private progress: number = 0;\n\n private holdStart = 0;\n private rafHandle: number | null = null;\n\n private startHold = (e: Event) => {\n if (this.disabled) return;\n e.preventDefault();\n if (this.holdToConfirmMs <= 0) {\n this.indActivate.emit();\n return;\n }\n this.holdStart = performance.now();\n this.progress = 0;\n this.tick();\n };\n\n private tick = () => {\n const elapsed = performance.now() - this.holdStart;\n this.progress = Math.min(1, elapsed / this.holdToConfirmMs);\n if (this.progress >= 1) {\n this.cancelHold();\n this.indActivate.emit();\n return;\n }\n this.rafHandle = requestAnimationFrame(this.tick);\n };\n\n private cancelHold = () => {\n if (this.rafHandle !== null) {\n cancelAnimationFrame(this.rafHandle);\n this.rafHandle = null;\n }\n this.progress = 0;\n };\n\n private onKeyDown = (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this.startHold(e);\n }\n };\n\n disconnectedCallback() {\n this.cancelHold();\n }\n\n render() {\n const isHolding = this.progress > 0 && this.progress < 1;\n return (\n <Host>\n <button\n type=\"button\"\n class={{ btn: true, 'is-holding': isHolding }}\n part=\"btn\"\n disabled={this.disabled}\n aria-label={this.label}\n aria-describedby={this.holdToConfirmMs > 0 ? 'hold-hint' : undefined}\n onPointerDown={this.startHold}\n onPointerUp={this.cancelHold}\n onPointerLeave={this.cancelHold}\n onPointerCancel={this.cancelHold}\n onKeyDown={this.onKeyDown}\n onKeyUp={this.cancelHold}\n >\n <span class=\"content\" part=\"content\">\n <slot>{this.label}</slot>\n </span>\n {this.holdToConfirmMs > 0 && (\n <span\n class=\"hold-progress\"\n part=\"hold-progress\"\n style={{ transform: `scaleX(${this.progress})` }}\n aria-hidden=\"true\"\n />\n )}\n </button>\n {this.holdToConfirmMs > 0 && (\n <span id=\"hold-hint\" class=\"sr-only\">\n Hold to confirm ({this.holdToConfirmMs} ms)\n </span>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAY,IAAM,y9E,MCkBXC,EAAS,M,gEAEKC,QAAyB,UAGzBC,KAAmB,KAGnBC,SAAoB,MAGrCC,MAOAC,gBAA0B,EAGzBC,YAEQC,SAAmB,EAE5BC,UAAY,EACZC,UAA2B,KAE3BC,UAAaC,IACnB,GAAIC,KAAKT,SAAU,OACnBQ,EAAEE,iBACF,GAAID,KAAKP,iBAAmB,EAAG,CAC7BO,KAAKN,YAAYQ,OACjB,M,CAEFF,KAAKJ,UAAYO,YAAYC,MAC7BJ,KAAKL,SAAW,EAChBK,KAAKK,MAAM,EAGLA,KAAO,KACb,MAAMC,EAAUH,YAAYC,MAAQJ,KAAKJ,UACzCI,KAAKL,SAAWY,KAAKC,IAAI,EAAGF,EAAUN,KAAKP,iBAC3C,GAAIO,KAAKL,UAAY,EAAG,CACtBK,KAAKS,aACLT,KAAKN,YAAYQ,OACjB,M,CAEFF,KAAKH,UAAYa,sBAAsBV,KAAKK,KAAK,EAG3CI,WAAa,KACnB,GAAIT,KAAKH,YAAc,KAAM,CAC3Bc,qBAAqBX,KAAKH,WAC1BG,KAAKH,UAAY,I,CAEnBG,KAAKL,SAAW,CAAC,EAGXiB,UAAab,IACnB,GAAIA,EAAEc,MAAQ,KAAOd,EAAEc,MAAQ,QAAS,CACtCd,EAAEE,iBACFD,KAAKF,UAAUC,E,GAInB,oBAAAe,GACEd,KAAKS,Y,CAGP,MAAAM,GACE,MAAMC,EAAYhB,KAAKL,SAAW,GAAKK,KAAKL,SAAW,EACvD,OACEsB,EAACC,EAAI,CAAAL,IAAA,4CACHI,EAAA,UAAAJ,IAAA,2CACEM,KAAK,SACLC,MAAO,CAAEC,IAAK,KAAM,aAAcL,GAClCM,KAAK,MACL/B,SAAUS,KAAKT,SAAQ,aACXS,KAAKR,MAAK,mBACJQ,KAAKP,gBAAkB,EAAI,YAAc8B,UAC3DC,cAAexB,KAAKF,UACpB2B,YAAazB,KAAKS,WAClBiB,eAAgB1B,KAAKS,WACrBkB,gBAAiB3B,KAAKS,WACtBG,UAAWZ,KAAKY,UAChBgB,QAAS5B,KAAKS,YAEdQ,EAAA,QAAAJ,IAAA,2CAAMO,MAAM,UAAUE,KAAK,WACzBL,EAAA,QAAAJ,IAAA,4CAAOb,KAAKR,QAEbQ,KAAKP,gBAAkB,GACtBwB,EAAA,QAAAJ,IAAA,2CACEO,MAAM,gBACNE,KAAK,gBACLO,MAAO,CAAEC,UAAW,UAAU9B,KAAKL,aAAa,cACpC,UAIjBK,KAAKP,gBAAkB,GACtBwB,EAAA,QAAAJ,IAAA,2CAAMkB,GAAG,YAAYX,MAAM,WAAS,oBAChBpB,KAAKP,gBAAe,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as r,H as e}from"./p-D2yNiL0d.js";const d=()=>`:host{display:flex;flex-direction:column;width:var(--ind-size-sidebar-width, 178px);height:100%;background:var(--ind-surface-panel);border-right: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-shrink:0;box-sizing:border-box}.brand{padding:var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px)}.brand:has(>:nth-child(1):empty),.brand:not(:has(*)){display:none}.items{flex:1;overflow-y:auto;padding:var(--ind-spacing-2, 4px) 0;scrollbar-width:thin;scrollbar-color:var(--ind-surface-border-strong) transparent}.items::-webkit-scrollbar{width:8px}.items::-webkit-scrollbar-thumb{background:var(--ind-surface-border-strong);border-radius:4px}.items::-webkit-scrollbar-track{background:transparent}.footer{padding:var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);border-top:1px solid var(--ind-surface-border-subtle);font-size:var(--ind-font-size-sm, 11px);color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}.footer:not(:has(*)){display:none}`;const i=class{constructor(r){a(this,r)}render(){return r(e,{key:"3ffd6c6d8afe2ed104b24ad1435d7a1d163c5071",role:"navigation"},r("div",{key:"2a56d85274fca7043d8e5624a93cb99c8767fc74",class:"brand",part:"brand"},r("slot",{key:"d185e1c6570b33648700dd922e671f023b3d34fc",name:"brand"})),r("div",{key:"31aaa48b8e08549a3a4990cbe4ae74507b0a8ccb",class:"items",part:"items"},r("slot",{key:"4ddb250ed915874ea6114588ab336e662526383f"})),r("div",{key:"d666ea3f666be22246d6f2e2464a85b741b4bfed",class:"footer",part:"footer"},r("slot",{key:"fff6600b601ec97d47f2a79b983d0a7ef261db33",name:"footer"})))}};i.style=d();export{i as ind_sidebar_nav};
2
+ //# sourceMappingURL=p-cf07b580.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sidebarNavCss","IndSidebarNav","render","h","Host","key","role","class","part","name"],"sources":["src/components/organisms/sidebar-nav/sidebar-nav.css?tag=ind-sidebar-nav&encapsulation=shadow","src/components/organisms/sidebar-nav/sidebar-nav.tsx"],"sourcesContent":[":host {\n display: flex;\n flex-direction: column;\n width: var(--ind-size-sidebar-width, 178px);\n height: 100%;\n background: var(--ind-surface-panel);\n border-right: 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-shrink: 0;\n box-sizing: border-box;\n}\n\n.brand {\n padding: var(--ind-spacing-4, 8px) var(--ind-spacing-5, 12px);\n}\n\n.brand:has(> :nth-child(1):empty),\n.brand:not(:has(*)) { display: none; }\n\n.items {\n flex: 1;\n overflow-y: auto;\n padding: var(--ind-spacing-2, 4px) 0;\n scrollbar-width: thin;\n scrollbar-color: var(--ind-surface-border-strong) transparent;\n}\n.items::-webkit-scrollbar { width: 8px; }\n.items::-webkit-scrollbar-thumb { background: var(--ind-surface-border-strong); border-radius: 4px; }\n.items::-webkit-scrollbar-track { background: transparent; }\n\n.footer {\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-5, 12px);\n border-top: 1px solid var(--ind-surface-border-subtle);\n font-size: var(--ind-font-size-sm, 11px);\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n.footer:not(:has(*)) { display: none; }\n","import { Component, h, Host } from '@stencil/core';\n\n/**\n * Sidebar shell: a brand area on top, a scrollable nav list, and a footer area.\n *\n * State management is left to the consumer — drive `active` on each <ind-nav-item>\n * from your router. The component is intentionally thin so it works with any\n * routing approach (React Router, Vue Router, hash-based, none).\n */\n@Component({\n tag: 'ind-sidebar-nav',\n styleUrl: 'sidebar-nav.css',\n shadow: true,\n})\nexport class IndSidebarNav {\n render() {\n return (\n <Host role=\"navigation\">\n <div class=\"brand\" part=\"brand\">\n <slot name=\"brand\" />\n </div>\n <div class=\"items\" part=\"items\">\n <slot />\n </div>\n <div class=\"footer\" part=\"footer\">\n <slot name=\"footer\" />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAgB,IAAM,0iC,MCcfC,EAAa,M,yBACxB,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,KAAK,cACTH,EAAA,OAAAE,IAAA,2CAAKE,MAAM,QAAQC,KAAK,SACtBL,EAAA,QAAAE,IAAA,2CAAMI,KAAK,WAEbN,EAAA,OAAAE,IAAA,2CAAKE,MAAM,QAAQC,KAAK,SACtBL,EAAA,QAAAE,IAAA,8CAEFF,EAAA,OAAAE,IAAA,2CAAKE,MAAM,SAASC,KAAK,UACvBL,EAAA,QAAAE,IAAA,2CAAMI,KAAK,Y","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,c as e,a as i,h as t,H as n}from"./p-D2yNiL0d.js";const s=()=>`:host{display:inline-block;font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));--_h:var(--ind-size-input-md, 32px)}:host([size="sm"]){--_h:var(--ind-size-input-sm, 24px)}:host([size="md"]){--_h:var(--ind-size-input-md, 32px)}:host([size="lg"]){--_h:var(--ind-size-input-lg, 40px)}.wrap{display:inline-flex;flex-direction:column;gap:var(--ind-spacing-2, 4px);min-width:160px;max-width:100%}.label{font-size:var(--ind-font-size-sm, 11px);font-weight:var(--ind-font-weight-medium, 500);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));letter-spacing:0.04em;text-transform:uppercase}.field{display:inline-flex;align-items:center;gap:var(--ind-spacing-3, 6px);height:var(--_h);padding:0 var(--ind-spacing-4, 8px);background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-md, 3px);transition:border-color var(--ind-motion-duration-fast, 120ms), box-shadow var(--ind-motion-duration-fast, 120ms)}.field.is-focus{border-color:var(--ind-surface-focus-ring, #22d3ee);box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent)}.input{flex:1;min-width:0;height:100%;background:transparent;border:none;outline:none;padding:0;font:inherit;color:inherit;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.input::placeholder{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));opacity:1}:host([type="number"]) .input{font-family:var(--ind-font-family-mono);font-variant-numeric:tabular-nums}:host([invalid]) .field{border-color:var(--ind-feedback-error-bg, #dc2626)}:host([invalid]) .field.is-focus{box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent)}:host([disabled]){opacity:0.55;pointer-events:none}:host([readonly]) .field{background:var(--ind-surface-panel, light-dark(#f4f6f9, #11161c))}::slotted([slot="prefix"]),::slotted([slot="suffix"]){color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));font-size:var(--ind-font-size-sm, 11px);font-family:var(--ind-font-family-mono);white-space:nowrap}`;const r=class{constructor(i){a(this,i);this.indInput=e(this,"indInput");this.indChange=e(this,"indChange")}get host(){return i(this)}type="text";size="md";value="";placeholder;disabled=false;readonly=false;invalid=false;label;name;min;max;step;pattern;autocomplete;mode;hasFocus=false;indInput;indChange;async setFocus(){this.host.shadowRoot?.querySelector("input")?.focus()}onInput=a=>{const e=a.target.value;this.value=e;this.indInput.emit(e)};onChange=a=>{const e=a.target.value;this.indChange.emit(e)};render(){return t(n,{key:"bb19139e219e04af88a8d60ef7189b1fe75cb9fa"},t("label",{key:"95047b762b29dddf02e1236c4febb7bd175a5375",class:"wrap",part:"wrap"},this.label&&t("span",{key:"3dfe06b89e8022fc4dc74e29d73edd4684ca7305",class:"label",part:"label"},this.label),t("span",{key:"4714f42749f9018c7a472c85d4ce59537ac60b1f",class:{field:true,"is-focus":this.hasFocus},part:"field"},t("slot",{key:"97e0af1ba3eec75684483fa1fb76d08eec886075",name:"prefix"}),t("input",{key:"3764cd35fb827430a05af94b3fd2164d1f812cfa",part:"input",class:"input",type:this.type,value:this.value,placeholder:this.placeholder,disabled:this.disabled,readonly:this.readonly,name:this.name,min:this.min,max:this.max,step:this.step,pattern:this.pattern,autocomplete:this.autocomplete,inputMode:this.mode,"aria-invalid":this.invalid?"true":"false",onFocus:()=>this.hasFocus=true,onBlur:()=>this.hasFocus=false,onInput:this.onInput,onChange:this.onChange}),t("slot",{key:"1fefcb0e2fa6efd3385aef0bbf8b228578915c3a",name:"suffix"}))))}};r.style=s();export{r as ind_input};
2
+ //# sourceMappingURL=p-d1edc052.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["inputCss","IndInput","type","size","value","placeholder","disabled","readonly","invalid","label","name","min","max","step","pattern","autocomplete","mode","hasFocus","indInput","indChange","setFocus","this","host","shadowRoot","querySelector","focus","onInput","e","v","target","emit","onChange","render","h","Host","key","class","part","field","inputMode","onFocus","onBlur"],"sources":["src/components/atoms/input/input.css?tag=ind-input&encapsulation=shadow","src/components/atoms/input/input.tsx"],"sourcesContent":[":host {\n display: inline-block;\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n --_h: var(--ind-size-input-md, 32px);\n}\n\n:host([size=\"sm\"]) { --_h: var(--ind-size-input-sm, 24px); }\n:host([size=\"md\"]) { --_h: var(--ind-size-input-md, 32px); }\n:host([size=\"lg\"]) { --_h: var(--ind-size-input-lg, 40px); }\n\n.wrap {\n display: inline-flex;\n flex-direction: column;\n gap: var(--ind-spacing-2, 4px);\n min-width: 160px;\n max-width: 100%;\n}\n\n.label {\n font-size: var(--ind-font-size-sm, 11px);\n font-weight: var(--ind-font-weight-medium, 500);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.field {\n display: inline-flex;\n align-items: center;\n gap: var(--ind-spacing-3, 6px);\n height: var(--_h);\n padding: 0 var(--ind-spacing-4, 8px);\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-md, 3px);\n transition:\n border-color var(--ind-motion-duration-fast, 120ms),\n box-shadow var(--ind-motion-duration-fast, 120ms);\n}\n\n.field.is-focus {\n border-color: var(--ind-surface-focus-ring, #22d3ee);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent);\n}\n\n.input {\n flex: 1;\n min-width: 0;\n height: 100%;\n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n font: inherit;\n color: inherit;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n}\n\n.input::placeholder {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n opacity: 1;\n}\n\n:host([type=\"number\"]) .input {\n font-family: var(--ind-font-family-mono);\n font-variant-numeric: tabular-nums;\n}\n\n:host([invalid]) .field {\n border-color: var(--ind-feedback-error-bg, #dc2626);\n}\n:host([invalid]) .field.is-focus {\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent);\n}\n\n:host([disabled]) {\n opacity: 0.55;\n pointer-events: none;\n}\n\n:host([readonly]) .field {\n background: var(--ind-surface-panel, light-dark(#f4f6f9, #11161c));\n}\n\n::slotted([slot=\"prefix\"]),\n::slotted([slot=\"suffix\"]) {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n font-size: var(--ind-font-size-sm, 11px);\n font-family: var(--ind-font-family-mono);\n white-space: nowrap;\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\n h,\n Host,\n} from '@stencil/core';\n\nexport type InputType = 'text' | 'number' | 'email' | 'password' | 'search' | 'tel' | 'url';\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type InputMode = 'text' | 'numeric' | 'decimal' | 'tel' | 'url' | 'email' | 'search' | 'none';\n\n@Component({\n tag: 'ind-input',\n styleUrl: 'input.css',\n shadow: true,\n})\nexport class IndInput {\n @Element() host!: HTMLElement;\n\n @Prop({ reflect: true }) type: InputType = 'text';\n @Prop({ reflect: true }) size: InputSize = 'md';\n @Prop({ mutable: true }) value: string = '';\n @Prop() placeholder?: string;\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) readonly: boolean = false;\n @Prop({ reflect: true }) invalid: boolean = false;\n @Prop() label?: string;\n @Prop() name?: string;\n @Prop() min?: number | string;\n @Prop() max?: number | string;\n @Prop() step?: number | string;\n @Prop() pattern?: string;\n @Prop() autocomplete?: string;\n /** Maps to the native `inputmode` attribute — named `mode` to avoid clashing with `HTMLElement.inputMode`. */\n @Prop({ attribute: 'inputmode' }) mode?: InputMode;\n\n @State() private hasFocus = false;\n\n /** Fires on every keystroke. */\n @Event() indInput!: EventEmitter<string>;\n /** Fires on change (blur or Enter). */\n @Event() indChange!: EventEmitter<string>;\n\n /** Programmatically focus the underlying input. */\n @Method()\n async setFocus(): Promise<void> {\n this.host.shadowRoot?.querySelector('input')?.focus();\n }\n\n private onInput = (e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n this.value = v;\n this.indInput.emit(v);\n };\n\n private onChange = (e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n this.indChange.emit(v);\n };\n\n render() {\n return (\n <Host>\n <label class=\"wrap\" part=\"wrap\">\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n <span class={{ field: true, 'is-focus': this.hasFocus }} part=\"field\">\n <slot name=\"prefix\" />\n <input\n part=\"input\"\n class=\"input\"\n type={this.type}\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readonly={this.readonly}\n name={this.name}\n min={this.min as unknown as string}\n max={this.max as unknown as string}\n step={this.step as unknown as string}\n pattern={this.pattern}\n autocomplete={this.autocomplete as unknown as 'on' | 'off'}\n inputMode={this.mode as unknown as undefined}\n aria-invalid={this.invalid ? 'true' : 'false'}\n onFocus={() => (this.hasFocus = true)}\n onBlur={() => (this.hasFocus = false)}\n onInput={this.onInput}\n onChange={this.onChange}\n />\n <slot name=\"suffix\" />\n </span>\n </label>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAW,IAAM,gpE,MCqBVC,EAAQ,M,uHAGMC,KAAkB,OAClBC,KAAkB,KAClBC,MAAgB,GACjCC,YACiBC,SAAoB,MACpBC,SAAoB,MACpBC,QAAmB,MACpCC,MACAC,KACAC,IACAC,IACAC,KACAC,QACAC,aAE0BC,KAEjBC,SAAW,MAGnBC,SAEAC,UAIT,cAAMC,GACJC,KAAKC,KAAKC,YAAYC,cAAc,UAAUC,O,CAGxCC,QAAWC,IACjB,MAAMC,EAAKD,EAAEE,OAA4BzB,MACzCiB,KAAKjB,MAAQwB,EACbP,KAAKH,SAASY,KAAKF,EAAE,EAGfG,SAAYJ,IAClB,MAAMC,EAAKD,EAAEE,OAA4BzB,MACzCiB,KAAKF,UAAUW,KAAKF,EAAE,EAGxB,MAAAI,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,SAAAE,IAAA,2CAAOC,MAAM,OAAOC,KAAK,QACtBhB,KAAKZ,OAASwB,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,SAAShB,KAAKZ,OACtDwB,EAAA,QAAAE,IAAA,2CAAMC,MAAO,CAAEE,MAAO,KAAM,WAAYjB,KAAKJ,UAAYoB,KAAK,SAC5DJ,EAAA,QAAAE,IAAA,2CAAMzB,KAAK,WACXuB,EAAA,SAAAE,IAAA,2CACEE,KAAK,QACLD,MAAM,QACNlC,KAAMmB,KAAKnB,KACXE,MAAOiB,KAAKjB,MACZC,YAAagB,KAAKhB,YAClBC,SAAUe,KAAKf,SACfC,SAAUc,KAAKd,SACfG,KAAMW,KAAKX,KACXC,IAAKU,KAAKV,IACVC,IAAKS,KAAKT,IACVC,KAAMQ,KAAKR,KACXC,QAASO,KAAKP,QACdC,aAAcM,KAAKN,aACnBwB,UAAWlB,KAAKL,KAA4B,eAC9BK,KAAKb,QAAU,OAAS,QACtCgC,QAAS,IAAOnB,KAAKJ,SAAW,KAChCwB,OAAQ,IAAOpB,KAAKJ,SAAW,MAC/BS,QAASL,KAAKK,QACdK,SAAUV,KAAKU,WAEjBE,EAAA,QAAAE,IAAA,2CAAMzB,KAAK,a","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-flex;flex-direction:column;align-items:center;gap:var(--ind-spacing-2, 4px);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));font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1)}.symbol{--_w:var(--ind-valve-width, 48px);--_fill:var(--ind-state-stopped-bg, #5a6776);--_stroke:var(--ind-state-stopped-border, #8390a0);width:var(--_w);height:calc(var(--_w) / 2);display:block}:host([orientation="vertical"]) .symbol{transform:rotate(90deg)}:host([size="sm"]) .symbol{--_w:32px}:host([size="md"]) .symbol{--_w:48px}:host([size="lg"]) .symbol{--_w:72px}.left,.right{fill:var(--_fill);stroke:var(--_stroke);stroke-width:1.25;stroke-linejoin:round;transition:fill var(--ind-motion-duration-base, 200ms), stroke var(--ind-motion-duration-base, 200ms)}.stem{stroke:var(--_stroke);stroke-width:2;stroke-linecap:round}:host([state="open"]) .symbol{--_fill:var(--ind-state-running-bg, #16a34a);--_stroke:var(--ind-state-running-border, #4ade80)}:host([state="closed"]) .symbol{--_fill:var(--ind-state-stopped-bg, #5a6776);--_stroke:var(--ind-state-stopped-border, #8390a0)}:host([state="fault"]) .symbol{--_fill:var(--ind-state-fault-bg, #dc2626);--_stroke:var(--ind-state-fault-border, #f87171)}:host([state="transit"]) .symbol{--_fill:var(--ind-state-warning-bg, #f59e0b);--_stroke:var(--ind-state-warning-border, #fcd34d)}:host([state="transit"]) .left,:host([state="transit"]) .right{stroke-dasharray:4 2;animation:ind-valve-march var(--ind-motion-blink-slow, 1000ms) linear infinite}@keyframes ind-valve-march{to{stroke-dashoffset:-6}}.caption{display:flex;gap:var(--ind-spacing-3, 6px);align-items:baseline;font-size:var(--ind-font-size-sm, 11px)}.tag{font-family:var(--ind-font-family-mono);font-weight:var(--ind-font-weight-semibold, 600)}.label{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0))}@media (prefers-reduced-motion: reduce){:host([state="transit"]) .left,:host([state="transit"]) .right{animation:none;stroke-dasharray:4 2}}`;const i=class{constructor(a){t(this,a)}state="closed";orientation="horizontal";size="md";label;tag;render(){const t=this.label??this.tag??"valve";return a(e,{key:"f0a9a4f7a1401c7ffc091bb10e52d13854e0fd42",role:"img","aria-label":`${t} — ${this.state}`},a("svg",{key:"1ba7a6466df31802d8ca141016670c6c301bc066",class:"symbol",part:"symbol",viewBox:"0 0 32 16","aria-hidden":"true"},a("polygon",{key:"89f77217a84e53606ce38e126c8ce87358fafb8b",class:"left",part:"left",points:"2,2 2,14 16,8"}),a("polygon",{key:"12ca5cd5ad1c117c48cc54275fe98509daba3267",class:"right",part:"right",points:"30,2 30,14 16,8"}),a("line",{key:"24510448beca41c7ab421b61c06de63840bddf99",class:"stem",part:"stem",x1:"16",y1:"2",x2:"16",y2:"14"})),(this.tag||this.label)&&a("div",{key:"18b6f7a60c0fdb8b5b7a688d5f6151811a9d587b",class:"caption",part:"caption"},this.tag&&a("span",{key:"7a8eb4c486380e3cb1a92e1ab3bdcbd2689cbd50",class:"tag",part:"tag"},this.tag),this.label&&a("span",{key:"6281ca7b4ae18e455a28b18890d28c58f38c14c1",class:"label",part:"label"},this.label)))}};i.style=s();export{i as ind_valve};
2
+ //# sourceMappingURL=p-ea24a59d.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["valveCss","IndValve","state","orientation","size","label","tag","render","name","this","h","Host","key","role","class","part","viewBox","points","x1","y1","x2","y2"],"sources":["src/components/atoms/valve/valve.css?tag=ind-valve&encapsulation=shadow","src/components/atoms/valve/valve.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ind-spacing-2, 4px);\n font-family: var(--ind-font-family-sans);\n font-size: var(--ind-font-size-base, 12px);\n /* `light-dark()` makes the fallback adapt to the page's color-scheme so the\n * caption stays readable even if the atom lands on a surface whose theme\n * doesn't match the loaded tokens (e.g. Storybook autodocs on white). */\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.symbol {\n --_w: var(--ind-valve-width, 48px);\n --_fill: var(--ind-state-stopped-bg, #5a6776);\n --_stroke: var(--ind-state-stopped-border, #8390a0);\n\n width: var(--_w);\n height: calc(var(--_w) / 2);\n display: block;\n}\n\n:host([orientation=\"vertical\"]) .symbol {\n transform: rotate(90deg);\n}\n\n:host([size=\"sm\"]) .symbol { --_w: 32px; }\n:host([size=\"md\"]) .symbol { --_w: 48px; }\n:host([size=\"lg\"]) .symbol { --_w: 72px; }\n\n.left,\n.right {\n fill: var(--_fill);\n stroke: var(--_stroke);\n stroke-width: 1.25;\n stroke-linejoin: round;\n transition:\n fill var(--ind-motion-duration-base, 200ms),\n stroke var(--ind-motion-duration-base, 200ms);\n}\n\n.stem {\n stroke: var(--_stroke);\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n:host([state=\"open\"]) .symbol {\n --_fill: var(--ind-state-running-bg, #16a34a);\n --_stroke: var(--ind-state-running-border, #4ade80);\n}\n:host([state=\"closed\"]) .symbol {\n --_fill: var(--ind-state-stopped-bg, #5a6776);\n --_stroke: var(--ind-state-stopped-border, #8390a0);\n}\n:host([state=\"fault\"]) .symbol {\n --_fill: var(--ind-state-fault-bg, #dc2626);\n --_stroke: var(--ind-state-fault-border, #f87171);\n}\n:host([state=\"transit\"]) .symbol {\n --_fill: var(--ind-state-warning-bg, #f59e0b);\n --_stroke: var(--ind-state-warning-border, #fcd34d);\n}\n\n/* Transit: marching ants on the perimeter — universally read as\n * \"in motion / transitioning\" by control room operators. */\n:host([state=\"transit\"]) .left,\n:host([state=\"transit\"]) .right {\n stroke-dasharray: 4 2;\n animation: ind-valve-march var(--ind-motion-blink-slow, 1000ms) linear infinite;\n}\n\n@keyframes ind-valve-march {\n to { stroke-dashoffset: -6; }\n}\n\n.caption {\n display: flex;\n gap: var(--ind-spacing-3, 6px);\n align-items: baseline;\n font-size: var(--ind-font-size-sm, 11px);\n}\n\n.tag {\n font-family: var(--ind-font-family-mono);\n font-weight: var(--ind-font-weight-semibold, 600);\n}\n\n.label {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host([state=\"transit\"]) .left,\n :host([state=\"transit\"]) .right {\n animation: none;\n stroke-dasharray: 4 2;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type ValveState = 'open' | 'closed' | 'transit' | 'fault';\nexport type ValveOrientation = 'horizontal' | 'vertical';\nexport type ValveSize = 'sm' | 'md' | 'lg';\n\n@Component({\n tag: 'ind-valve',\n styleUrl: 'valve.css',\n shadow: true,\n})\nexport class IndValve {\n /** Valve state. `transit` is mid-stroke (transitioning between open and closed). */\n @Prop({ reflect: true }) state: ValveState = 'closed';\n\n /** Render the symbol along the flow direction. */\n @Prop({ reflect: true }) orientation: ValveOrientation = 'horizontal';\n\n /** Visual size. */\n @Prop({ reflect: true }) size: ValveSize = 'md';\n\n /** Human label rendered as caption (e.g. \"Discharge valve\"). */\n @Prop() label?: string;\n\n /** Equipment tag rendered as caption (e.g. \"V-12\"). */\n @Prop() tag?: string;\n\n render() {\n const name = this.label ?? this.tag ?? 'valve';\n return (\n <Host\n role=\"img\"\n aria-label={`${name} — ${this.state}`}\n >\n {/* ISA-5.1 bowtie symbol. ViewBox is 32×16 so the natural ratio is 2:1. */}\n <svg class=\"symbol\" part=\"symbol\" viewBox=\"0 0 32 16\" aria-hidden=\"true\">\n <polygon class=\"left\" part=\"left\" points=\"2,2 2,14 16,8\" />\n <polygon class=\"right\" part=\"right\" points=\"30,2 30,14 16,8\" />\n <line class=\"stem\" part=\"stem\" x1=\"16\" y1=\"2\" x2=\"16\" y2=\"14\" />\n </svg>\n {(this.tag || this.label) && (\n <div class=\"caption\" part=\"caption\">\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 </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAW,IAAM,wiE,MCWVC,EAAQ,M,yBAEMC,MAAoB,SAGpBC,YAAgC,aAGhCC,KAAkB,KAGnCC,MAGAC,IAER,MAAAC,GACE,MAAMC,EAAOC,KAAKJ,OAASI,KAAKH,KAAO,QACvC,OACEI,EAACC,EAAI,CAAAC,IAAA,2CACHC,KAAK,MAAK,aACE,GAAGL,OAAUC,KAAKP,SAG9BQ,EAAA,OAAAE,IAAA,2CAAKE,MAAM,SAASC,KAAK,SAASC,QAAQ,YAAW,cAAa,QAChEN,EAAA,WAAAE,IAAA,2CAASE,MAAM,OAAQC,KAAK,OAAQE,OAAO,kBAC3CP,EAAA,WAAAE,IAAA,2CAASE,MAAM,QAAQC,KAAK,QAAQE,OAAO,oBAC3CP,EAAA,QAAAE,IAAA,2CAASE,MAAM,OAAQC,KAAK,OAAQG,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,SAE9DZ,KAAKH,KAAOG,KAAKJ,QACjBK,EAAA,OAAAE,IAAA,2CAAKE,MAAM,UAAUC,KAAK,WACvBN,KAAKH,KAAOI,EAAA,QAAAE,IAAA,2CAAME,MAAM,MAAMC,KAAK,OAAON,KAAKH,KAC/CG,KAAKJ,OAASK,EAAA,QAAAE,IAAA,2CAAME,MAAM,QAAQC,KAAK,SAASN,KAAKJ,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,h as i,H as r}from"./p-D2yNiL0d.js";const o=()=>`:host{display:block;background:var(--ind-surface-border-default, #2a3340);flex-shrink:0}:host([orientation="horizontal"]){width:100%;height:1px}:host([orientation="vertical"]){height:100%;min-height:1em;width:1px}`;const e=class{constructor(i){t(this,i)}orientation="horizontal";render(){return i(r,{key:"eae104b602756afe326c0002f84d926134075e44",role:"separator","aria-orientation":this.orientation})}};e.style=o();export{e as ind_divider};
2
+ //# sourceMappingURL=p-ec0b3785.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["dividerCss","IndDivider","orientation","render","h","Host","key","role","this"],"sources":["src/components/atoms/divider/divider.css?tag=ind-divider&encapsulation=shadow","src/components/atoms/divider/divider.tsx"],"sourcesContent":[":host {\n display: block;\n background: var(--ind-surface-border-default, #2a3340);\n flex-shrink: 0;\n}\n\n:host([orientation=\"horizontal\"]) {\n width: 100%;\n height: 1px;\n}\n\n:host([orientation=\"vertical\"]) {\n height: 100%;\n min-height: 1em;\n width: 1px;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\n@Component({\n tag: 'ind-divider',\n styleUrl: 'divider.css',\n shadow: true,\n})\nexport class IndDivider {\n @Prop({ reflect: true }) orientation: DividerOrientation = 'horizontal';\n\n render() {\n return <Host role=\"separator\" aria-orientation={this.orientation} />;\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAa,IAAM,wN,MCSZC,EAAU,M,yBACIC,YAAkC,aAE3D,MAAAC,GACE,OAAOC,EAACC,EAAI,CAAAC,IAAA,2CAACC,KAAK,YAAW,mBAAmBC,KAAKN,a","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,c as e,a as t,h as r,H as i}from"./p-D2yNiL0d.js";const n=()=>`:host{display:inline-block;width:100%;font-family:var(--ind-font-family-sans);color:var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5))}.wrap{display:flex;flex-direction:column;gap:var(--ind-spacing-2, 4px)}.label{font-size:var(--ind-font-size-sm, 11px);font-weight:var(--ind-font-weight-medium, 500);color:var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));letter-spacing:0.04em;text-transform:uppercase}.textarea{width:100%;box-sizing:border-box;padding:var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);background:var(--ind-surface-sunken, light-dark(#ffffff, #000000));border:1px solid var(--ind-surface-border-default, #2a3340);border-radius:var(--ind-radius-md, 3px);font-family:inherit;font-size:var(--ind-font-size-base, 12px);line-height:var(--ind-font-line-height-normal, 1.4);color:inherit;resize:vertical;outline:none;font-feature-settings:var(--ind-font-feature-tabular, "tnum" 1);transition:border-color var(--ind-motion-duration-fast, 120ms), box-shadow var(--ind-motion-duration-fast, 120ms)}.textarea:focus{border-color:var(--ind-surface-focus-ring, #22d3ee);box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent)}.textarea::placeholder{color:var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));opacity:1}:host([variant="mono"]) .textarea{font-family:var(--ind-font-family-mono);font-size:var(--ind-font-size-sm, 11px);line-height:var(--ind-font-line-height-tight, 1.4);background:var(--ind-color-palette-neutral-0, #000000);color:var(--ind-color-palette-neutral-800, #d0d7e0);border-color:var(--ind-surface-border-strong, #5a6776)}:host([invalid]) .textarea{border-color:var(--ind-feedback-error-bg, #dc2626)}:host([invalid]) .textarea:focus{box-shadow:0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent)}:host([readonly]) .textarea{cursor:default}:host([disabled]){opacity:0.55;pointer-events:none}`;const o=class{constructor(t){a(this,t);this.indInput=e(this,"indInput");this.indChange=e(this,"indChange")}get host(){return t(this)}value="";placeholder;label;name;rows=4;size="md";variant="default";disabled=false;readonly=false;invalid=false;autoScroll=false;indInput;indChange;componentDidLoad(){if(this.autoScroll)this.scrollToBottom()}onValueChange(){if(this.autoScroll)this.scrollToBottom()}scrollToBottom(){requestAnimationFrame((()=>{const a=this.host.shadowRoot?.querySelector("textarea");if(a)a.scrollTop=a.scrollHeight}))}onInput=a=>{const e=a.target.value;this.value=e;this.indInput.emit(e)};onChange=a=>{this.indChange.emit(a.target.value)};render(){return r(i,{key:"a4ca904c7a9ca65900e0ccc696aab66429bdde71"},r("label",{key:"57f1880efe8a30a2bd5e1253c81f058360519c9f",class:"wrap",part:"wrap"},this.label&&r("span",{key:"aa0367d91235eca6d69fd520617ea831b1ac71fc",class:"label",part:"label"},this.label),r("textarea",{key:"2248ea771f4ac6f8ae9fb0cc12ea4ed038e7ab24",part:"textarea",class:"textarea",placeholder:this.placeholder,rows:this.rows,disabled:this.disabled,readonly:this.readonly,name:this.name,"aria-invalid":this.invalid?"true":"false",onInput:this.onInput,onChange:this.onChange},this.value)))}static get watchers(){return{value:[{onValueChange:0}]}}};o.style=n();export{o as ind_textarea};
2
+ //# sourceMappingURL=p-ee453874.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["textareaCss","IndTextarea","value","placeholder","label","name","rows","size","variant","disabled","readonly","invalid","autoScroll","indInput","indChange","componentDidLoad","this","scrollToBottom","onValueChange","requestAnimationFrame","ta","host","shadowRoot","querySelector","scrollTop","scrollHeight","onInput","e","v","target","emit","onChange","render","h","Host","key","class","part"],"sources":["src/components/atoms/textarea/textarea.css?tag=ind-textarea&encapsulation=shadow","src/components/atoms/textarea/textarea.tsx"],"sourcesContent":[":host {\n display: inline-block;\n width: 100%;\n font-family: var(--ind-font-family-sans);\n color: var(--ind-surface-text-primary, light-dark(#11161c, #eef1f5));\n}\n\n.wrap {\n display: flex;\n flex-direction: column;\n gap: var(--ind-spacing-2, 4px);\n}\n\n.label {\n font-size: var(--ind-font-size-sm, 11px);\n font-weight: var(--ind-font-weight-medium, 500);\n color: var(--ind-surface-text-secondary, light-dark(#2a3340, #aab5c2));\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.textarea {\n width: 100%;\n box-sizing: border-box;\n padding: var(--ind-spacing-3, 6px) var(--ind-spacing-4, 8px);\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-md, 3px);\n font-family: inherit;\n font-size: var(--ind-font-size-base, 12px);\n line-height: var(--ind-font-line-height-normal, 1.4);\n color: inherit;\n resize: vertical;\n outline: none;\n font-feature-settings: var(--ind-font-feature-tabular, \"tnum\" 1);\n transition:\n border-color var(--ind-motion-duration-fast, 120ms),\n box-shadow var(--ind-motion-duration-fast, 120ms);\n}\n\n.textarea:focus {\n border-color: var(--ind-surface-focus-ring, #22d3ee);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-surface-focus-ring, #22d3ee) 35%, transparent);\n}\n\n.textarea::placeholder {\n color: var(--ind-surface-text-muted, light-dark(#5a6776, #8390a0));\n opacity: 1;\n}\n\n:host([variant=\"mono\"]) .textarea {\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-tight, 1.4);\n background: var(--ind-color-palette-neutral-0, #000000);\n color: var(--ind-color-palette-neutral-800, #d0d7e0);\n border-color: var(--ind-surface-border-strong, #5a6776);\n}\n\n:host([invalid]) .textarea {\n border-color: var(--ind-feedback-error-bg, #dc2626);\n}\n:host([invalid]) .textarea:focus {\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--ind-feedback-error-bg, #dc2626) 40%, transparent);\n}\n\n:host([readonly]) .textarea {\n cursor: default;\n}\n\n:host([disabled]) {\n opacity: 0.55;\n pointer-events: none;\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 TextareaSize = 'sm' | 'md' | 'lg';\nexport type TextareaVariant = 'default' | 'mono';\n\n@Component({\n tag: 'ind-textarea',\n styleUrl: 'textarea.css',\n shadow: true,\n})\nexport class IndTextarea {\n @Element() host!: HTMLElement;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop() placeholder?: string;\n @Prop() label?: string;\n @Prop() name?: string;\n @Prop() rows: number = 4;\n @Prop({ reflect: true }) size: TextareaSize = 'md';\n /** `mono` swaps to JetBrains Mono and small font — for logs and MQTT streams. */\n @Prop({ reflect: true }) variant: TextareaVariant = 'default';\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) readonly: boolean = false;\n @Prop({ reflect: true }) invalid: boolean = false;\n /** When true, auto-scrolls to bottom whenever `value` changes. Pair with `readonly` for log streams. */\n @Prop() autoScroll: boolean = false;\n\n @Event() indInput!: EventEmitter<string>;\n @Event() indChange!: EventEmitter<string>;\n\n componentDidLoad() {\n if (this.autoScroll) this.scrollToBottom();\n }\n\n @Watch('value')\n onValueChange() {\n if (this.autoScroll) this.scrollToBottom();\n }\n\n private scrollToBottom() {\n requestAnimationFrame(() => {\n const ta = this.host.shadowRoot?.querySelector('textarea');\n if (ta) ta.scrollTop = ta.scrollHeight;\n });\n }\n\n private onInput = (e: Event) => {\n const v = (e.target as HTMLTextAreaElement).value;\n this.value = v;\n this.indInput.emit(v);\n };\n\n private onChange = (e: Event) => {\n this.indChange.emit((e.target as HTMLTextAreaElement).value);\n };\n\n render() {\n return (\n <Host>\n <label class=\"wrap\" part=\"wrap\">\n {this.label && <span class=\"label\" part=\"label\">{this.label}</span>}\n <textarea\n part=\"textarea\"\n class=\"textarea\"\n placeholder={this.placeholder}\n rows={this.rows}\n disabled={this.disabled}\n readonly={this.readonly}\n name={this.name}\n aria-invalid={this.invalid ? 'true' : 'false'}\n onInput={this.onInput}\n onChange={this.onChange}\n >{this.value}</textarea>\n </label>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAc,IAAM,84D,MCmBbC,EAAW,M,uHAGGC,MAAgB,GACjCC,YACAC,MACAC,KACAC,KAAe,EACEC,KAAqB,KAErBC,QAA2B,UAC3BC,SAAoB,MACpBC,SAAoB,MACpBC,QAAmB,MAEpCC,WAAsB,MAErBC,SACAC,UAET,gBAAAC,GACE,GAAIC,KAAKJ,WAAYI,KAAKC,gB,CAI5B,aAAAC,GACE,GAAIF,KAAKJ,WAAYI,KAAKC,gB,CAGpB,cAAAA,GACNE,uBAAsB,KACpB,MAAMC,EAAKJ,KAAKK,KAAKC,YAAYC,cAAc,YAC/C,GAAIH,EAAIA,EAAGI,UAAYJ,EAAGK,YAAY,G,CAIlCC,QAAWC,IACjB,MAAMC,EAAKD,EAAEE,OAA+B3B,MAC5Cc,KAAKd,MAAQ0B,EACbZ,KAAKH,SAASiB,KAAKF,EAAE,EAGfG,SAAYJ,IAClBX,KAAKF,UAAUgB,KAAMH,EAAEE,OAA+B3B,MAAM,EAG9D,MAAA8B,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,SAAAE,IAAA,2CAAOC,MAAM,OAAOC,KAAK,QACtBrB,KAAKZ,OAAS6B,EAAA,QAAAE,IAAA,2CAAMC,MAAM,QAAQC,KAAK,SAASrB,KAAKZ,OACtD6B,EAAA,YAAAE,IAAA,2CACEE,KAAK,WACLD,MAAM,WACNjC,YAAaa,KAAKb,YAClBG,KAAMU,KAAKV,KACXG,SAAUO,KAAKP,SACfC,SAAUM,KAAKN,SACfL,KAAMW,KAAKX,KAAI,eACDW,KAAKL,QAAU,OAAS,QACtCe,QAASV,KAAKU,QACdK,SAAUf,KAAKe,UACff,KAAKd,Q","ignoreList":[]}
@@ -0,0 +1 @@
1
+ module.exports = require('./cjs/index.cjs.js');
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from './esm/index.js';
@@ -0,0 +1,13 @@
1
+ export type AlarmPriority = 'high-high' | 'high' | 'low' | 'low-low';
2
+ export declare class IndAlarm {
3
+ /** ISA-18.2 alarm priority. */
4
+ priority: AlarmPriority;
5
+ /** When false, the chip blinks (per ISA-18.2 unack convention). */
6
+ acknowledged: boolean;
7
+ /** Required human description of the alarm. */
8
+ label: string;
9
+ /** Optional ISO-8601 timestamp. Rendered with `<time>`. */
10
+ timestamp?: string;
11
+ render(): any;
12
+ }
13
+ //# sourceMappingURL=alarm.d.ts.map
@@ -0,0 +1,31 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ export type ButtonVariant = 'default' | 'primary' | 'danger' | 'ghost';
3
+ export type ButtonSize = 'sm' | 'md' | 'lg';
4
+ export declare class IndButton {
5
+ /** Visual variant. `danger` should be paired with `holdToConfirmMs` for critical actions. */
6
+ variant: ButtonVariant;
7
+ /** Size. */
8
+ size: ButtonSize;
9
+ /** Disabled state. */
10
+ disabled: boolean;
11
+ /** Optional accessible label (falls back to slotted text). */
12
+ label?: string;
13
+ /**
14
+ * If > 0, the button must be held this many milliseconds before activating.
15
+ * Use for critical actions (Stop, Trip, Reset) to prevent accidental clicks —
16
+ * standard NAMUR / safety-instrumented operating practice.
17
+ */
18
+ holdToConfirmMs: number;
19
+ /** Fired on click (or after hold completes if `holdToConfirmMs > 0`). */
20
+ indActivate: EventEmitter<void>;
21
+ private progress;
22
+ private holdStart;
23
+ private rafHandle;
24
+ private startHold;
25
+ private tick;
26
+ private cancelHold;
27
+ private onKeyDown;
28
+ disconnectedCallback(): void;
29
+ render(): any;
30
+ }
31
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ export type CheckboxSize = 'sm' | 'md' | 'lg';
3
+ export declare class IndCheckbox {
4
+ host: HTMLElement;
5
+ checked: boolean;
6
+ indeterminate: boolean;
7
+ disabled: boolean;
8
+ size: CheckboxSize;
9
+ label?: string;
10
+ name?: string;
11
+ value?: string;
12
+ indChange: EventEmitter<boolean>;
13
+ componentDidLoad(): void;
14
+ syncIndeterminate(): void;
15
+ private onChange;
16
+ render(): any;
17
+ }
18
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1,29 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ export type DialogSize = 'sm' | 'md' | 'lg';
3
+ export declare class IndDialog {
4
+ host: HTMLElement;
5
+ /** Open state. Two-way reflectable. */
6
+ open: boolean;
7
+ /** Heading rendered in the header bar. Becomes the accessible name. */
8
+ heading?: string;
9
+ /** Size of the dialog content. */
10
+ size: DialogSize;
11
+ /** Close when the operator clicks outside the dialog content. */
12
+ closeOnBackdrop: boolean;
13
+ private hasFooter;
14
+ indOpen: EventEmitter<void>;
15
+ /** Fires when the dialog closes — for any reason (ESC, backdrop, close button, .close()). */
16
+ indClose: EventEmitter<void>;
17
+ componentDidLoad(): void;
18
+ onOpenChange(): void;
19
+ private syncOpen;
20
+ private watchFooter;
21
+ /** Programmatically open. */
22
+ show(): Promise<void>;
23
+ /** Programmatically close. */
24
+ close(): Promise<void>;
25
+ private onNativeClose;
26
+ private onClick;
27
+ render(): any;
28
+ }
29
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1,6 @@
1
+ export type DividerOrientation = 'horizontal' | 'vertical';
2
+ export declare class IndDivider {
3
+ orientation: DividerOrientation;
4
+ render(): any;
5
+ }
6
+ //# sourceMappingURL=divider.d.ts.map
@@ -0,0 +1,34 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ export type InputType = 'text' | 'number' | 'email' | 'password' | 'search' | 'tel' | 'url';
3
+ export type InputSize = 'sm' | 'md' | 'lg';
4
+ export type InputMode = 'text' | 'numeric' | 'decimal' | 'tel' | 'url' | 'email' | 'search' | 'none';
5
+ export declare class IndInput {
6
+ host: HTMLElement;
7
+ type: InputType;
8
+ size: InputSize;
9
+ value: string;
10
+ placeholder?: string;
11
+ disabled: boolean;
12
+ readonly: boolean;
13
+ invalid: boolean;
14
+ label?: string;
15
+ name?: string;
16
+ min?: number | string;
17
+ max?: number | string;
18
+ step?: number | string;
19
+ pattern?: string;
20
+ autocomplete?: string;
21
+ /** Maps to the native `inputmode` attribute — named `mode` to avoid clashing with `HTMLElement.inputMode`. */
22
+ mode?: InputMode;
23
+ private hasFocus;
24
+ /** Fires on every keystroke. */
25
+ indInput: EventEmitter<string>;
26
+ /** Fires on change (blur or Enter). */
27
+ indChange: EventEmitter<string>;
28
+ /** Programmatically focus the underlying input. */
29
+ setFocus(): Promise<void>;
30
+ private onInput;
31
+ private onChange;
32
+ render(): any;
33
+ }
34
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1,14 @@
1
+ export type LedState = 'running' | 'stopped' | 'fault' | 'warning' | 'maintenance';
2
+ export type LedSize = 'sm' | 'md' | 'lg';
3
+ export declare class IndLed {
4
+ /** Process state driving the LED color and ARIA live politeness. */
5
+ state: LedState;
6
+ /** Visual size. */
7
+ size: LedSize;
8
+ /** Blink. For SCADA, fast blink = unacknowledged condition. Stops respecting prefers-reduced-motion. */
9
+ blinking: boolean;
10
+ /** Optional visible label rendered next to the LED. Always becomes the accessible name. */
11
+ label?: string;
12
+ render(): any;
13
+ }
14
+ //# sourceMappingURL=led.d.ts.map
@@ -0,0 +1,24 @@
1
+ export type ProgressVariant = 'default' | 'success' | 'warning' | 'error';
2
+ export type ProgressSize = 'sm' | 'md' | 'lg';
3
+ export declare class IndProgress {
4
+ /** Current value (0–`max`). */
5
+ value: number;
6
+ /** Max value. */
7
+ max: number;
8
+ /** Visual variant. Use `warning` / `error` for low / critical fill levels. */
9
+ variant: ProgressVariant;
10
+ /** Size. */
11
+ size: ProgressSize;
12
+ /** Optional label rendered above the bar. */
13
+ label?: string;
14
+ /** Show numeric value next to the label. */
15
+ showValue: boolean;
16
+ /** Unit suffix for the displayed value. */
17
+ unit?: string;
18
+ /** Indeterminate (animated bar, no value). */
19
+ indeterminate: boolean;
20
+ private percent;
21
+ private valueLabel;
22
+ render(): any;
23
+ }
24
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1,21 @@
1
+ export type ScaraState = 'idle' | 'moving' | 'fault';
2
+ /**
3
+ * 2D top-down SCARA arm view. Pure presentational — pass joint angles and
4
+ * link lengths, the component computes forward kinematics in SVG space.
5
+ *
6
+ * <ind-scara-canvas .joints=${[30, 45, 0]} state="moving"></ind-scara-canvas>
7
+ *
8
+ * - `joints[0]` (J1) — shoulder rotation in degrees, 0 = +X axis
9
+ * - `joints[1]` (J2) — elbow rotation in degrees, relative to link 1
10
+ * - `joints[2]` (J3) — wrist (end effector) rotation, drives the small indicator
11
+ *
12
+ * Z translation isn't represented — it would require a separate side view.
13
+ */
14
+ export declare class IndScaraCanvas {
15
+ joints: number[] | string;
16
+ linkLengths: number[] | string;
17
+ state: ScaraState;
18
+ private parseArr;
19
+ render(): any;
20
+ }
21
+ //# sourceMappingURL=scara-canvas.d.ts.map
@@ -0,0 +1,27 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ export interface SelectOption {
3
+ value: string;
4
+ label: string;
5
+ disabled?: boolean;
6
+ }
7
+ export type SelectSize = 'sm' | 'md' | 'lg';
8
+ export declare class IndSelect {
9
+ /**
10
+ * Options. Pass an array via JS property (`.options = [...]`) OR a JSON-stringified
11
+ * array via the HTML `options` attribute. The native picker handles keyboard nav and
12
+ * mobile UI without us building a popover.
13
+ */
14
+ options: SelectOption[] | string;
15
+ value: string;
16
+ placeholder?: string;
17
+ label?: string;
18
+ name?: string;
19
+ size: SelectSize;
20
+ disabled: boolean;
21
+ invalid: boolean;
22
+ indChange: EventEmitter<string>;
23
+ private parseOptions;
24
+ private onChange;
25
+ render(): any;
26
+ }
27
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1,29 @@
1
+ export type ShelfSlotState = 'full' | 'partial' | 'empty' | 'missing';
2
+ export interface ShelfSlot {
3
+ /** Stable identifier for keying / cell click events. */
4
+ id: string;
5
+ /** Short label shown under the container. */
6
+ label: string;
7
+ /** 0–100 fill level. `undefined` ⇒ container considered missing. */
8
+ level?: number;
9
+ /** Explicit state — overrides the level-based default. */
10
+ state?: ShelfSlotState;
11
+ }
12
+ /**
13
+ * Grid of bottle/container slots showing their fill level. Generic — represents
14
+ * any rack of resupplyable containers (bottles, cartridges, kegs, etc.).
15
+ *
16
+ * <ind-shelf-canvas
17
+ * .slots=${[{id:'a', label:'A', level:78}, {id:'b', label:'B', level:12}]}
18
+ * cols="2"></ind-shelf-canvas>
19
+ */
20
+ export declare class IndShelfCanvas {
21
+ slots: ShelfSlot[] | string;
22
+ rows: number;
23
+ cols: number;
24
+ heading?: string;
25
+ private parseSlots;
26
+ private resolveState;
27
+ render(): any;
28
+ }
29
+ //# sourceMappingURL=shelf-canvas.d.ts.map
@@ -0,0 +1,14 @@
1
+ export type StatusDotState = 'neutral' | 'running' | 'stopped' | 'fault' | 'warning' | 'maintenance' | 'success' | 'info' | 'error';
2
+ export type StatusDotSize = 'sm' | 'md' | 'lg';
3
+ export declare class IndStatusDot {
4
+ state: StatusDotState;
5
+ size: StatusDotSize;
6
+ blinking: boolean;
7
+ /**
8
+ * Optional accessible name. Set when the dot stands alone; leave undefined
9
+ * when it's paired with adjacent text that already names the status.
10
+ */
11
+ label?: string;
12
+ render(): any;
13
+ }
14
+ //# sourceMappingURL=status-dot.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ export type TextareaSize = 'sm' | 'md' | 'lg';
3
+ export type TextareaVariant = 'default' | 'mono';
4
+ export declare class IndTextarea {
5
+ host: HTMLElement;
6
+ value: string;
7
+ placeholder?: string;
8
+ label?: string;
9
+ name?: string;
10
+ rows: number;
11
+ size: TextareaSize;
12
+ /** `mono` swaps to JetBrains Mono and small font — for logs and MQTT streams. */
13
+ variant: TextareaVariant;
14
+ disabled: boolean;
15
+ readonly: boolean;
16
+ invalid: boolean;
17
+ /** When true, auto-scrolls to bottom whenever `value` changes. Pair with `readonly` for log streams. */
18
+ autoScroll: boolean;
19
+ indInput: EventEmitter<string>;
20
+ indChange: EventEmitter<string>;
21
+ componentDidLoad(): void;
22
+ onValueChange(): void;
23
+ private scrollToBottom;
24
+ private onInput;
25
+ private onChange;
26
+ render(): any;
27
+ }
28
+ //# sourceMappingURL=textarea.d.ts.map
@@ -0,0 +1,24 @@
1
+ export type ValueAlarm = 'none' | 'low-low' | 'low' | 'high' | 'high-high';
2
+ export type ValueTrend = 'none' | 'up' | 'down' | 'stable';
3
+ export type ValueSize = 'sm' | 'md' | 'lg';
4
+ export declare class IndValue {
5
+ /** Raw value to display. Numeric values are formatted with `precision`. */
6
+ value: number | string;
7
+ /** Engineering unit shown after the number (e.g. "bar", "°C", "m³/h"). */
8
+ unit?: string;
9
+ /** Decimal places when `value` is numeric. Default: as-is. */
10
+ precision?: number;
11
+ /** Active alarm priority. Highlights the readout with the ISA-18.2 color. */
12
+ alarm: ValueAlarm;
13
+ /** Process trend direction. Renders a small arrow next to the unit. */
14
+ trend: ValueTrend;
15
+ /** Readout size — `lg` is appropriate for primary KPIs (uses the 3xl font). */
16
+ size: ValueSize;
17
+ /** Human label shown above the number (e.g. "Discharge pressure"). */
18
+ label?: string;
19
+ /** Equipment tag shown above the number (e.g. "PT-101"). */
20
+ tag?: string;
21
+ private formatted;
22
+ render(): any;
23
+ }
24
+ //# sourceMappingURL=value.d.ts.map
@@ -0,0 +1,17 @@
1
+ export type ValveState = 'open' | 'closed' | 'transit' | 'fault';
2
+ export type ValveOrientation = 'horizontal' | 'vertical';
3
+ export type ValveSize = 'sm' | 'md' | 'lg';
4
+ export declare class IndValve {
5
+ /** Valve state. `transit` is mid-stroke (transitioning between open and closed). */
6
+ state: ValveState;
7
+ /** Render the symbol along the flow direction. */
8
+ orientation: ValveOrientation;
9
+ /** Visual size. */
10
+ size: ValveSize;
11
+ /** Human label rendered as caption (e.g. "Discharge valve"). */
12
+ label?: string;
13
+ /** Equipment tag rendered as caption (e.g. "V-12"). */
14
+ tag?: string;
15
+ render(): any;
16
+ }
17
+ //# sourceMappingURL=valve.d.ts.map
@@ -0,0 +1,19 @@
1
+ export type FillRowVariant = 'default' | 'success' | 'warning' | 'error';
2
+ export declare class IndFillRow {
3
+ /** Short ID rendered in mono (e.g. "F1", "TK-101"). */
4
+ tag?: string;
5
+ /** Human description. */
6
+ label: string;
7
+ /** Current level. */
8
+ value: number;
9
+ /** Max value. Default 100. */
10
+ max: number;
11
+ /** Unit suffix on the numeric value (default `%`). */
12
+ unit: string;
13
+ /** Drives the progress color and the severity glyph. */
14
+ variant: FillRowVariant;
15
+ /** Render the severity glyph between the value and the actions. */
16
+ severity: boolean;
17
+ render(): any;
18
+ }
19
+ //# sourceMappingURL=fill-row.d.ts.map