@adminiumjs/adminium 0.1.0-rc.1

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 (875) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +94 -0
  3. package/dashboard/assets/DeltaPill-dxlsGh-1.js +2 -0
  4. package/dashboard/assets/DeltaPill-dxlsGh-1.js.map +1 -0
  5. package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js +2 -0
  6. package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js.map +1 -0
  7. package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js +2 -0
  8. package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js.map +1 -0
  9. package/dashboard/assets/RemapEditor-z3vRY12e.js +2 -0
  10. package/dashboard/assets/RemapEditor-z3vRY12e.js.map +1 -0
  11. package/dashboard/assets/ReviewScreen-COkLQ3T7.js +2 -0
  12. package/dashboard/assets/ReviewScreen-COkLQ3T7.js.map +1 -0
  13. package/dashboard/assets/Sparkline-Cvwo368J.js +2 -0
  14. package/dashboard/assets/Sparkline-Cvwo368J.js.map +1 -0
  15. package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js +2 -0
  16. package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js.map +1 -0
  17. package/dashboard/assets/arc-CPxb74pf.js +2 -0
  18. package/dashboard/assets/arc-CPxb74pf.js.map +1 -0
  19. package/dashboard/assets/bars-ranking-components-9Asn_0gR.js +2 -0
  20. package/dashboard/assets/bars-ranking-components-9Asn_0gR.js.map +1 -0
  21. package/dashboard/assets/blocks-track-components-BST-NjK2.js +2 -0
  22. package/dashboard/assets/blocks-track-components-BST-NjK2.js.map +1 -0
  23. package/dashboard/assets/calendar-track-components-RgNtGtZR.js +2 -0
  24. package/dashboard/assets/calendar-track-components-RgNtGtZR.js.map +1 -0
  25. package/dashboard/assets/chrome-track-components-ClNsentC.js +2 -0
  26. package/dashboard/assets/chrome-track-components-ClNsentC.js.map +1 -0
  27. package/dashboard/assets/common-BY1j__bD.js +2 -0
  28. package/dashboard/assets/common-BY1j__bD.js.map +1 -0
  29. package/dashboard/assets/common-BdlXKpcB.js +2 -0
  30. package/dashboard/assets/common-BdlXKpcB.js.map +1 -0
  31. package/dashboard/assets/common-BqqhgMgB.js +2 -0
  32. package/dashboard/assets/common-BqqhgMgB.js.map +1 -0
  33. package/dashboard/assets/common-BribWmIo.js +2 -0
  34. package/dashboard/assets/common-BribWmIo.js.map +1 -0
  35. package/dashboard/assets/common-Cmf0_lKV.js +2 -0
  36. package/dashboard/assets/common-Cmf0_lKV.js.map +1 -0
  37. package/dashboard/assets/common-i0r48qY9.js +2 -0
  38. package/dashboard/assets/common-i0r48qY9.js.map +1 -0
  39. package/dashboard/assets/common-x8cfkwpc.js +2 -0
  40. package/dashboard/assets/common-x8cfkwpc.js.map +1 -0
  41. package/dashboard/assets/communication-track-components-CNLZXOH_.js +2 -0
  42. package/dashboard/assets/communication-track-components-CNLZXOH_.js.map +1 -0
  43. package/dashboard/assets/components-Bp5cFm2d.js +2 -0
  44. package/dashboard/assets/components-Bp5cFm2d.js.map +1 -0
  45. package/dashboard/assets/components-C4-O3_gD.js +2 -0
  46. package/dashboard/assets/components-C4-O3_gD.js.map +1 -0
  47. package/dashboard/assets/domain-ops-track-components-BPa41AU7.js +2 -0
  48. package/dashboard/assets/domain-ops-track-components-BPa41AU7.js.map +1 -0
  49. package/dashboard/assets/domain-track-components-CQ1i1X1t.js +2 -0
  50. package/dashboard/assets/domain-track-components-CQ1i1X1t.js.map +1 -0
  51. package/dashboard/assets/errors-BHUWiAQ3.js +2 -0
  52. package/dashboard/assets/errors-BHUWiAQ3.js.map +1 -0
  53. package/dashboard/assets/errors-BbyKweDG.js +2 -0
  54. package/dashboard/assets/errors-BbyKweDG.js.map +1 -0
  55. package/dashboard/assets/errors-CMQ6JC31.js +2 -0
  56. package/dashboard/assets/errors-CMQ6JC31.js.map +1 -0
  57. package/dashboard/assets/errors-D3nVgTmf.js +2 -0
  58. package/dashboard/assets/errors-D3nVgTmf.js.map +1 -0
  59. package/dashboard/assets/errors-IqJSoANC.js +2 -0
  60. package/dashboard/assets/errors-IqJSoANC.js.map +1 -0
  61. package/dashboard/assets/errors-gmIkO9F6.js +2 -0
  62. package/dashboard/assets/errors-gmIkO9F6.js.map +1 -0
  63. package/dashboard/assets/errors-vFk058Vh.js +2 -0
  64. package/dashboard/assets/errors-vFk058Vh.js.map +1 -0
  65. package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js +2 -0
  66. package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js.map +1 -0
  67. package/dashboard/assets/format-Lx4cQ8k-.js +2 -0
  68. package/dashboard/assets/format-Lx4cQ8k-.js.map +1 -0
  69. package/dashboard/assets/forms-track-components-Bc2Hoxdh.js +2 -0
  70. package/dashboard/assets/forms-track-components-Bc2Hoxdh.js.map +1 -0
  71. package/dashboard/assets/generated-1EfWhCMA.js +2 -0
  72. package/dashboard/assets/generated-1EfWhCMA.js.map +1 -0
  73. package/dashboard/assets/generated-BB3ZMxvx.js +2 -0
  74. package/dashboard/assets/generated-BB3ZMxvx.js.map +1 -0
  75. package/dashboard/assets/generated-C0JVNBRX.js +2 -0
  76. package/dashboard/assets/generated-C0JVNBRX.js.map +1 -0
  77. package/dashboard/assets/generated-C1W48_-3.js +2 -0
  78. package/dashboard/assets/generated-C1W48_-3.js.map +1 -0
  79. package/dashboard/assets/generated-CluiB_xY.js +2 -0
  80. package/dashboard/assets/generated-CluiB_xY.js.map +1 -0
  81. package/dashboard/assets/generated-DDGtlf-4.js +2 -0
  82. package/dashboard/assets/generated-DDGtlf-4.js.map +1 -0
  83. package/dashboard/assets/generated-DPCHvNto.js +2 -0
  84. package/dashboard/assets/generated-DPCHvNto.js.map +1 -0
  85. package/dashboard/assets/geo-track-components-Ct4-MSRw.js +3 -0
  86. package/dashboard/assets/geo-track-components-Ct4-MSRw.js.map +1 -0
  87. package/dashboard/assets/ibm-plex-sans-arabic-arabic-400-normal-CyU-ddYS.woff2 +0 -0
  88. package/dashboard/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2 +0 -0
  89. package/dashboard/assets/ibm-plex-sans-arabic-arabic-600-normal-0pRdybE_.woff2 +0 -0
  90. package/dashboard/assets/ibm-plex-sans-arabic-arabic-700-normal-DrtBj6UE.woff2 +0 -0
  91. package/dashboard/assets/index-DPi4cduu.css +1 -0
  92. package/dashboard/assets/index-PB1II0WV.js +137 -0
  93. package/dashboard/assets/index-PB1II0WV.js.map +1 -0
  94. package/dashboard/assets/jetbrains-mono-latin-ext-wght-italic-BrDczivE.woff2 +0 -0
  95. package/dashboard/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  96. package/dashboard/assets/jetbrains-mono-latin-wght-italic-B2M6KQje.woff2 +0 -0
  97. package/dashboard/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  98. package/dashboard/assets/leaflet-CIGW-MKW.css +1 -0
  99. package/dashboard/assets/leaflet-src-D12shr04.js +2 -0
  100. package/dashboard/assets/leaflet-src-D12shr04.js.map +1 -0
  101. package/dashboard/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 +0 -0
  102. package/dashboard/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 +0 -0
  103. package/dashboard/assets/media-track-components-CpeII-tT.js +2 -0
  104. package/dashboard/assets/media-track-components-CpeII-tT.js.map +1 -0
  105. package/dashboard/assets/scales-e0tkfEy1.js +2 -0
  106. package/dashboard/assets/scales-e0tkfEy1.js.map +1 -0
  107. package/dashboard/assets/sparkline-2JUGDrMW.js +2 -0
  108. package/dashboard/assets/sparkline-2JUGDrMW.js.map +1 -0
  109. package/dashboard/assets/stats-BNgXz5BD.js +2 -0
  110. package/dashboard/assets/stats-BNgXz5BD.js.map +1 -0
  111. package/dashboard/assets/studio-B7hMOwAF.js +2 -0
  112. package/dashboard/assets/studio-B7hMOwAF.js.map +1 -0
  113. package/dashboard/assets/studio-BN_9xHY3.js +2 -0
  114. package/dashboard/assets/studio-BN_9xHY3.js.map +1 -0
  115. package/dashboard/assets/studio-Cn2MObe8.js +2 -0
  116. package/dashboard/assets/studio-Cn2MObe8.js.map +1 -0
  117. package/dashboard/assets/studio-DZEZCCkw.js +2 -0
  118. package/dashboard/assets/studio-DZEZCCkw.js.map +1 -0
  119. package/dashboard/assets/studio-DzatTvLl.js +2 -0
  120. package/dashboard/assets/studio-DzatTvLl.js.map +1 -0
  121. package/dashboard/assets/studio-cBlD8x90.js +2 -0
  122. package/dashboard/assets/studio-cBlD8x90.js.map +1 -0
  123. package/dashboard/assets/studio-cglZPbJK.js +2 -0
  124. package/dashboard/assets/studio-cglZPbJK.js.map +1 -0
  125. package/dashboard/assets/system-track-components-GTYYpnfB.js +2 -0
  126. package/dashboard/assets/system-track-components-GTYYpnfB.js.map +1 -0
  127. package/dashboard/assets/tables-tail-components-DiA5GeHB.js +2 -0
  128. package/dashboard/assets/tables-tail-components-DiA5GeHB.js.map +1 -0
  129. package/dashboard/assets/tables-track-f-components-CVNPd7rq.js +2 -0
  130. package/dashboard/assets/tables-track-f-components-CVNPd7rq.js.map +1 -0
  131. package/dashboard/assets/time-flow-components-nKsaryry.js +2 -0
  132. package/dashboard/assets/time-flow-components-nKsaryry.js.map +1 -0
  133. package/dashboard/assets/ui-B-kZetor.js +2 -0
  134. package/dashboard/assets/ui-B-kZetor.js.map +1 -0
  135. package/dashboard/assets/ui-BEStJ5Pw.js +2 -0
  136. package/dashboard/assets/ui-BEStJ5Pw.js.map +1 -0
  137. package/dashboard/assets/ui-BS5_eDN4.js +2 -0
  138. package/dashboard/assets/ui-BS5_eDN4.js.map +1 -0
  139. package/dashboard/assets/ui-BZ0EyxRH.js +2 -0
  140. package/dashboard/assets/ui-BZ0EyxRH.js.map +1 -0
  141. package/dashboard/assets/ui-BloJDdt6.js +2 -0
  142. package/dashboard/assets/ui-BloJDdt6.js.map +1 -0
  143. package/dashboard/assets/ui-CpdrplJH.js +2 -0
  144. package/dashboard/assets/ui-CpdrplJH.js.map +1 -0
  145. package/dashboard/assets/ui-YJfT644k.js +2 -0
  146. package/dashboard/assets/ui-YJfT644k.js.map +1 -0
  147. package/dashboard/assets/widgets-uDqZWw4A.js +2 -0
  148. package/dashboard/assets/widgets-uDqZWw4A.js.map +1 -0
  149. package/dashboard/index.html +41 -0
  150. package/dist/app.d.ts +48 -0
  151. package/dist/app.d.ts.map +1 -0
  152. package/dist/app.js +250 -0
  153. package/dist/app.js.map +1 -0
  154. package/dist/auth/audit.d.ts +22 -0
  155. package/dist/auth/audit.d.ts.map +1 -0
  156. package/dist/auth/audit.js +17 -0
  157. package/dist/auth/audit.js.map +1 -0
  158. package/dist/auth/desktop-session.d.ts +53 -0
  159. package/dist/auth/desktop-session.d.ts.map +1 -0
  160. package/dist/auth/desktop-session.js +111 -0
  161. package/dist/auth/desktop-session.js.map +1 -0
  162. package/dist/auth/passwords.d.ts +17 -0
  163. package/dist/auth/passwords.d.ts.map +1 -0
  164. package/dist/auth/passwords.js +40 -0
  165. package/dist/auth/passwords.js.map +1 -0
  166. package/dist/auth/sessions.d.ts +77 -0
  167. package/dist/auth/sessions.d.ts.map +1 -0
  168. package/dist/auth/sessions.js +137 -0
  169. package/dist/auth/sessions.js.map +1 -0
  170. package/dist/auth/totp.d.ts +30 -0
  171. package/dist/auth/totp.d.ts.map +1 -0
  172. package/dist/auth/totp.js +97 -0
  173. package/dist/auth/totp.js.map +1 -0
  174. package/dist/backup/backup-service.d.ts +157 -0
  175. package/dist/backup/backup-service.d.ts.map +1 -0
  176. package/dist/backup/backup-service.js +354 -0
  177. package/dist/backup/backup-service.js.map +1 -0
  178. package/dist/backup/format.d.ts +300 -0
  179. package/dist/backup/format.d.ts.map +1 -0
  180. package/dist/backup/format.js +304 -0
  181. package/dist/backup/format.js.map +1 -0
  182. package/dist/backup/notify.d.ts +55 -0
  183. package/dist/backup/notify.d.ts.map +1 -0
  184. package/dist/backup/notify.js +60 -0
  185. package/dist/backup/notify.js.map +1 -0
  186. package/dist/backup/snapshot.d.ts +78 -0
  187. package/dist/backup/snapshot.d.ts.map +1 -0
  188. package/dist/backup/snapshot.js +142 -0
  189. package/dist/backup/snapshot.js.map +1 -0
  190. package/dist/capabilities/catalog.d.ts +33 -0
  191. package/dist/capabilities/catalog.d.ts.map +1 -0
  192. package/dist/capabilities/catalog.js +32 -0
  193. package/dist/capabilities/catalog.js.map +1 -0
  194. package/dist/capabilities/grants.d.ts +44 -0
  195. package/dist/capabilities/grants.d.ts.map +1 -0
  196. package/dist/capabilities/grants.js +65 -0
  197. package/dist/capabilities/grants.js.map +1 -0
  198. package/dist/cli/allowlist.d.ts +46 -0
  199. package/dist/cli/allowlist.d.ts.map +1 -0
  200. package/dist/cli/allowlist.js +99 -0
  201. package/dist/cli/allowlist.js.map +1 -0
  202. package/dist/cli/args.d.ts +63 -0
  203. package/dist/cli/args.d.ts.map +1 -0
  204. package/dist/cli/args.js +92 -0
  205. package/dist/cli/args.js.map +1 -0
  206. package/dist/cli/command.d.ts +32 -0
  207. package/dist/cli/command.d.ts.map +1 -0
  208. package/dist/cli/command.js +64 -0
  209. package/dist/cli/command.js.map +1 -0
  210. package/dist/cli/commands/apply-llm-response.d.ts +32 -0
  211. package/dist/cli/commands/apply-llm-response.d.ts.map +1 -0
  212. package/dist/cli/commands/apply-llm-response.js +209 -0
  213. package/dist/cli/commands/apply-llm-response.js.map +1 -0
  214. package/dist/cli/commands/export-zip.d.ts +17 -0
  215. package/dist/cli/commands/export-zip.d.ts.map +1 -0
  216. package/dist/cli/commands/export-zip.js +111 -0
  217. package/dist/cli/commands/export-zip.js.map +1 -0
  218. package/dist/cli/commands/generate-prompt.d.ts +29 -0
  219. package/dist/cli/commands/generate-prompt.d.ts.map +1 -0
  220. package/dist/cli/commands/generate-prompt.js +154 -0
  221. package/dist/cli/commands/generate-prompt.js.map +1 -0
  222. package/dist/cli/commands/import-zip.d.ts +13 -0
  223. package/dist/cli/commands/import-zip.d.ts.map +1 -0
  224. package/dist/cli/commands/import-zip.js +95 -0
  225. package/dist/cli/commands/import-zip.js.map +1 -0
  226. package/dist/cli/commands/init.d.ts +47 -0
  227. package/dist/cli/commands/init.d.ts.map +1 -0
  228. package/dist/cli/commands/init.js +372 -0
  229. package/dist/cli/commands/init.js.map +1 -0
  230. package/dist/cli/commands/introspect.d.ts +11 -0
  231. package/dist/cli/commands/introspect.d.ts.map +1 -0
  232. package/dist/cli/commands/introspect.js +100 -0
  233. package/dist/cli/commands/introspect.js.map +1 -0
  234. package/dist/cli/commands/migrate.d.ts +11 -0
  235. package/dist/cli/commands/migrate.d.ts.map +1 -0
  236. package/dist/cli/commands/migrate.js +80 -0
  237. package/dist/cli/commands/migrate.js.map +1 -0
  238. package/dist/cli/commands/start.d.ts +22 -0
  239. package/dist/cli/commands/start.d.ts.map +1 -0
  240. package/dist/cli/commands/start.js +101 -0
  241. package/dist/cli/commands/start.js.map +1 -0
  242. package/dist/cli/exit.d.ts +37 -0
  243. package/dist/cli/exit.d.ts.map +1 -0
  244. package/dist/cli/exit.js +39 -0
  245. package/dist/cli/exit.js.map +1 -0
  246. package/dist/cli/index.d.ts +10 -0
  247. package/dist/cli/index.d.ts.map +1 -0
  248. package/dist/cli/index.js +17 -0
  249. package/dist/cli/index.js.map +1 -0
  250. package/dist/cli/io.d.ts +49 -0
  251. package/dist/cli/io.d.ts.map +1 -0
  252. package/dist/cli/io.js +77 -0
  253. package/dist/cli/io.js.map +1 -0
  254. package/dist/cli/run.d.ts +35 -0
  255. package/dist/cli/run.d.ts.map +1 -0
  256. package/dist/cli/run.js +139 -0
  257. package/dist/cli/run.js.map +1 -0
  258. package/dist/cli/runtime.d.ts +116 -0
  259. package/dist/cli/runtime.d.ts.map +1 -0
  260. package/dist/cli/runtime.js +181 -0
  261. package/dist/cli/runtime.js.map +1 -0
  262. package/dist/cli/static-root.d.ts +42 -0
  263. package/dist/cli/static-root.d.ts.map +1 -0
  264. package/dist/cli/static-root.js +58 -0
  265. package/dist/cli/static-root.js.map +1 -0
  266. package/dist/compose.d.ts +135 -0
  267. package/dist/compose.d.ts.map +1 -0
  268. package/dist/compose.js +383 -0
  269. package/dist/compose.js.map +1 -0
  270. package/dist/config/bootstrap.d.ts +33 -0
  271. package/dist/config/bootstrap.d.ts.map +1 -0
  272. package/dist/config/bootstrap.js +81 -0
  273. package/dist/config/bootstrap.js.map +1 -0
  274. package/dist/config/env.d.ts +95 -0
  275. package/dist/config/env.d.ts.map +1 -0
  276. package/dist/config/env.js +236 -0
  277. package/dist/config/env.js.map +1 -0
  278. package/dist/config/secrets.d.ts +24 -0
  279. package/dist/config/secrets.d.ts.map +1 -0
  280. package/dist/config/secrets.js +74 -0
  281. package/dist/config/secrets.js.map +1 -0
  282. package/dist/connections/crypto.d.ts +9 -0
  283. package/dist/connections/crypto.d.ts.map +1 -0
  284. package/dist/connections/crypto.js +16 -0
  285. package/dist/connections/crypto.js.map +1 -0
  286. package/dist/connections/dsn.d.ts +42 -0
  287. package/dist/connections/dsn.d.ts.map +1 -0
  288. package/dist/connections/dsn.js +131 -0
  289. package/dist/connections/dsn.js.map +1 -0
  290. package/dist/connections/effective-schema.d.ts +65 -0
  291. package/dist/connections/effective-schema.d.ts.map +1 -0
  292. package/dist/connections/effective-schema.js +249 -0
  293. package/dist/connections/effective-schema.js.map +1 -0
  294. package/dist/connections/introspect.d.ts +52 -0
  295. package/dist/connections/introspect.d.ts.map +1 -0
  296. package/dist/connections/introspect.js +111 -0
  297. package/dist/connections/introspect.js.map +1 -0
  298. package/dist/connections/manager.d.ts +97 -0
  299. package/dist/connections/manager.d.ts.map +1 -0
  300. package/dist/connections/manager.js +224 -0
  301. package/dist/connections/manager.js.map +1 -0
  302. package/dist/connections/register-adapters.d.ts +42 -0
  303. package/dist/connections/register-adapters.d.ts.map +1 -0
  304. package/dist/connections/register-adapters.js +92 -0
  305. package/dist/connections/register-adapters.js.map +1 -0
  306. package/dist/crud/filters.d.ts +57 -0
  307. package/dist/crud/filters.d.ts.map +1 -0
  308. package/dist/crud/filters.js +177 -0
  309. package/dist/crud/filters.js.map +1 -0
  310. package/dist/crud/identifiers.d.ts +58 -0
  311. package/dist/crud/identifiers.d.ts.map +1 -0
  312. package/dist/crud/identifiers.js +99 -0
  313. package/dist/crud/identifiers.js.map +1 -0
  314. package/dist/crud/list.d.ts +51 -0
  315. package/dist/crud/list.d.ts.map +1 -0
  316. package/dist/crud/list.js +126 -0
  317. package/dist/crud/list.js.map +1 -0
  318. package/dist/crud/mask.d.ts +23 -0
  319. package/dist/crud/mask.d.ts.map +1 -0
  320. package/dist/crud/mask.js +41 -0
  321. package/dist/crud/mask.js.map +1 -0
  322. package/dist/crud/records.d.ts +33 -0
  323. package/dist/crud/records.d.ts.map +1 -0
  324. package/dist/crud/records.js +126 -0
  325. package/dist/crud/records.js.map +1 -0
  326. package/dist/crud/undo.d.ts +55 -0
  327. package/dist/crud/undo.d.ts.map +1 -0
  328. package/dist/crud/undo.js +74 -0
  329. package/dist/crud/undo.js.map +1 -0
  330. package/dist/data-io/coerce.d.ts +28 -0
  331. package/dist/data-io/coerce.d.ts.map +1 -0
  332. package/dist/data-io/coerce.js +123 -0
  333. package/dist/data-io/coerce.js.map +1 -0
  334. package/dist/data-io/csv.d.ts +38 -0
  335. package/dist/data-io/csv.d.ts.map +1 -0
  336. package/dist/data-io/csv.js +138 -0
  337. package/dist/data-io/csv.js.map +1 -0
  338. package/dist/data-io/snapshot-view.d.ts +10 -0
  339. package/dist/data-io/snapshot-view.d.ts.map +1 -0
  340. package/dist/data-io/snapshot-view.js +19 -0
  341. package/dist/data-io/snapshot-view.js.map +1 -0
  342. package/dist/desktop/demo-seed.d.ts +23 -0
  343. package/dist/desktop/demo-seed.d.ts.map +1 -0
  344. package/dist/desktop/demo-seed.js +28 -0
  345. package/dist/desktop/demo-seed.js.map +1 -0
  346. package/dist/desktop/lan-share.d.ts +94 -0
  347. package/dist/desktop/lan-share.d.ts.map +1 -0
  348. package/dist/desktop/lan-share.js +150 -0
  349. package/dist/desktop/lan-share.js.map +1 -0
  350. package/dist/errors.d.ts +72 -0
  351. package/dist/errors.d.ts.map +1 -0
  352. package/dist/errors.js +82 -0
  353. package/dist/errors.js.map +1 -0
  354. package/dist/export/bundle.d.ts +235 -0
  355. package/dist/export/bundle.d.ts.map +1 -0
  356. package/dist/export/bundle.js +172 -0
  357. package/dist/export/bundle.js.map +1 -0
  358. package/dist/export/import-service.d.ts +99 -0
  359. package/dist/export/import-service.d.ts.map +1 -0
  360. package/dist/export/import-service.js +515 -0
  361. package/dist/export/import-service.js.map +1 -0
  362. package/dist/export/readme.d.ts +25 -0
  363. package/dist/export/readme.d.ts.map +1 -0
  364. package/dist/export/readme.js +154 -0
  365. package/dist/export/readme.js.map +1 -0
  366. package/dist/export/redaction.d.ts +118 -0
  367. package/dist/export/redaction.d.ts.map +1 -0
  368. package/dist/export/redaction.js +233 -0
  369. package/dist/export/redaction.js.map +1 -0
  370. package/dist/export/zip-service.d.ts +66 -0
  371. package/dist/export/zip-service.d.ts.map +1 -0
  372. package/dist/export/zip-service.js +306 -0
  373. package/dist/export/zip-service.js.map +1 -0
  374. package/dist/files/storage.d.ts +50 -0
  375. package/dist/files/storage.d.ts.map +1 -0
  376. package/dist/files/storage.js +100 -0
  377. package/dist/files/storage.js.map +1 -0
  378. package/dist/generate/materialize-llm.d.ts +45 -0
  379. package/dist/generate/materialize-llm.d.ts.map +1 -0
  380. package/dist/generate/materialize-llm.js +167 -0
  381. package/dist/generate/materialize-llm.js.map +1 -0
  382. package/dist/generate/run.d.ts +48 -0
  383. package/dist/generate/run.d.ts.map +1 -0
  384. package/dist/generate/run.js +123 -0
  385. package/dist/generate/run.js.map +1 -0
  386. package/dist/index.d.ts +89 -0
  387. package/dist/index.d.ts.map +1 -0
  388. package/dist/index.js +116 -0
  389. package/dist/index.js.map +1 -0
  390. package/dist/jobs/export-run.d.ts +38 -0
  391. package/dist/jobs/export-run.d.ts.map +1 -0
  392. package/dist/jobs/export-run.js +172 -0
  393. package/dist/jobs/export-run.js.map +1 -0
  394. package/dist/jobs/import-run.d.ts +43 -0
  395. package/dist/jobs/import-run.d.ts.map +1 -0
  396. package/dist/jobs/import-run.js +290 -0
  397. package/dist/jobs/import-run.js.map +1 -0
  398. package/dist/jobs/llm-run.d.ts +73 -0
  399. package/dist/jobs/llm-run.d.ts.map +1 -0
  400. package/dist/jobs/llm-run.js +225 -0
  401. package/dist/jobs/llm-run.js.map +1 -0
  402. package/dist/jobs/register.d.ts +90 -0
  403. package/dist/jobs/register.d.ts.map +1 -0
  404. package/dist/jobs/register.js +121 -0
  405. package/dist/jobs/register.js.map +1 -0
  406. package/dist/jobs/registry.d.ts +74 -0
  407. package/dist/jobs/registry.d.ts.map +1 -0
  408. package/dist/jobs/registry.js +78 -0
  409. package/dist/jobs/registry.js.map +1 -0
  410. package/dist/jobs/report-run.d.ts +64 -0
  411. package/dist/jobs/report-run.d.ts.map +1 -0
  412. package/dist/jobs/report-run.js +221 -0
  413. package/dist/jobs/report-run.js.map +1 -0
  414. package/dist/jobs/scheduler.d.ts +72 -0
  415. package/dist/jobs/scheduler.d.ts.map +1 -0
  416. package/dist/jobs/scheduler.js +121 -0
  417. package/dist/jobs/scheduler.js.map +1 -0
  418. package/dist/jobs/worker.d.ts +110 -0
  419. package/dist/jobs/worker.d.ts.map +1 -0
  420. package/dist/jobs/worker.js +282 -0
  421. package/dist/jobs/worker.js.map +1 -0
  422. package/dist/llm/apply-service.d.ts +150 -0
  423. package/dist/llm/apply-service.d.ts.map +1 -0
  424. package/dist/llm/apply-service.js +463 -0
  425. package/dist/llm/apply-service.js.map +1 -0
  426. package/dist/llm/apply-undo-store.d.ts +50 -0
  427. package/dist/llm/apply-undo-store.d.ts.map +1 -0
  428. package/dist/llm/apply-undo-store.js +60 -0
  429. package/dist/llm/apply-undo-store.js.map +1 -0
  430. package/dist/llm/direct-runner.d.ts +146 -0
  431. package/dist/llm/direct-runner.d.ts.map +1 -0
  432. package/dist/llm/direct-runner.js +204 -0
  433. package/dist/llm/direct-runner.js.map +1 -0
  434. package/dist/llm/prompt-service.d.ts +90 -0
  435. package/dist/llm/prompt-service.d.ts.map +1 -0
  436. package/dist/llm/prompt-service.js +93 -0
  437. package/dist/llm/prompt-service.js.map +1 -0
  438. package/dist/llm/provider-resolver.d.ts +25 -0
  439. package/dist/llm/provider-resolver.d.ts.map +1 -0
  440. package/dist/llm/provider-resolver.js +81 -0
  441. package/dist/llm/provider-resolver.js.map +1 -0
  442. package/dist/llm/run-service.d.ts +215 -0
  443. package/dist/llm/run-service.d.ts.map +1 -0
  444. package/dist/llm/run-service.js +343 -0
  445. package/dist/llm/run-service.js.map +1 -0
  446. package/dist/llm/stats-collector.d.ts +40 -0
  447. package/dist/llm/stats-collector.d.ts.map +1 -0
  448. package/dist/llm/stats-collector.js +74 -0
  449. package/dist/llm/stats-collector.js.map +1 -0
  450. package/dist/log-scrub.d.ts +58 -0
  451. package/dist/log-scrub.d.ts.map +1 -0
  452. package/dist/log-scrub.js +103 -0
  453. package/dist/log-scrub.js.map +1 -0
  454. package/dist/meta/store.d.ts +96 -0
  455. package/dist/meta/store.d.ts.map +1 -0
  456. package/dist/meta/store.js +192 -0
  457. package/dist/meta/store.js.map +1 -0
  458. package/dist/notifications/notify.d.ts +43 -0
  459. package/dist/notifications/notify.d.ts.map +1 -0
  460. package/dist/notifications/notify.js +42 -0
  461. package/dist/notifications/notify.js.map +1 -0
  462. package/dist/plugins/auth.d.ts +42 -0
  463. package/dist/plugins/auth.d.ts.map +1 -0
  464. package/dist/plugins/auth.js +84 -0
  465. package/dist/plugins/auth.js.map +1 -0
  466. package/dist/plugins/core.d.ts +48 -0
  467. package/dist/plugins/core.d.ts.map +1 -0
  468. package/dist/plugins/core.js +248 -0
  469. package/dist/plugins/core.js.map +1 -0
  470. package/dist/plugins/rbac.d.ts +54 -0
  471. package/dist/plugins/rbac.d.ts.map +1 -0
  472. package/dist/plugins/rbac.js +103 -0
  473. package/dist/plugins/rbac.js.map +1 -0
  474. package/dist/plugins/static.d.ts +12 -0
  475. package/dist/plugins/static.d.ts.map +1 -0
  476. package/dist/plugins/static.js +36 -0
  477. package/dist/plugins/static.js.map +1 -0
  478. package/dist/rbac/api-keys.d.ts +30 -0
  479. package/dist/rbac/api-keys.d.ts.map +1 -0
  480. package/dist/rbac/api-keys.js +41 -0
  481. package/dist/rbac/api-keys.js.map +1 -0
  482. package/dist/rbac/index.d.ts +6 -0
  483. package/dist/rbac/index.d.ts.map +1 -0
  484. package/dist/rbac/index.js +6 -0
  485. package/dist/rbac/index.js.map +1 -0
  486. package/dist/rbac/permissions.d.ts +107 -0
  487. package/dist/rbac/permissions.d.ts.map +1 -0
  488. package/dist/rbac/permissions.js +250 -0
  489. package/dist/rbac/permissions.js.map +1 -0
  490. package/dist/rbac/principal.d.ts +33 -0
  491. package/dist/rbac/principal.d.ts.map +1 -0
  492. package/dist/rbac/principal.js +31 -0
  493. package/dist/rbac/principal.js.map +1 -0
  494. package/dist/rbac/resolver.d.ts +26 -0
  495. package/dist/rbac/resolver.d.ts.map +1 -0
  496. package/dist/rbac/resolver.js +46 -0
  497. package/dist/rbac/resolver.js.map +1 -0
  498. package/dist/realtime/hub.d.ts +90 -0
  499. package/dist/realtime/hub.d.ts.map +1 -0
  500. package/dist/realtime/hub.js +146 -0
  501. package/dist/realtime/hub.js.map +1 -0
  502. package/dist/realtime/sse.d.ts +35 -0
  503. package/dist/realtime/sse.d.ts.map +1 -0
  504. package/dist/realtime/sse.js +88 -0
  505. package/dist/realtime/sse.js.map +1 -0
  506. package/dist/realtime/ws.d.ts +38 -0
  507. package/dist/realtime/ws.d.ts.map +1 -0
  508. package/dist/realtime/ws.js +124 -0
  509. package/dist/realtime/ws.js.map +1 -0
  510. package/dist/reports/schedule.d.ts +14 -0
  511. package/dist/reports/schedule.d.ts.map +1 -0
  512. package/dist/reports/schedule.js +63 -0
  513. package/dist/reports/schedule.js.map +1 -0
  514. package/dist/routes/about/index.d.ts +39 -0
  515. package/dist/routes/about/index.d.ts.map +1 -0
  516. package/dist/routes/about/index.js +73 -0
  517. package/dist/routes/about/index.js.map +1 -0
  518. package/dist/routes/about/schema.d.ts +50 -0
  519. package/dist/routes/about/schema.d.ts.map +1 -0
  520. package/dist/routes/about/schema.js +53 -0
  521. package/dist/routes/about/schema.js.map +1 -0
  522. package/dist/routes/api-keys/index.d.ts +11 -0
  523. package/dist/routes/api-keys/index.d.ts.map +1 -0
  524. package/dist/routes/api-keys/index.js +79 -0
  525. package/dist/routes/api-keys/index.js.map +1 -0
  526. package/dist/routes/api-keys/schema.d.ts +62 -0
  527. package/dist/routes/api-keys/schema.d.ts.map +1 -0
  528. package/dist/routes/api-keys/schema.js +37 -0
  529. package/dist/routes/api-keys/schema.js.map +1 -0
  530. package/dist/routes/audit/index.d.ts +11 -0
  531. package/dist/routes/audit/index.d.ts.map +1 -0
  532. package/dist/routes/audit/index.js +107 -0
  533. package/dist/routes/audit/index.js.map +1 -0
  534. package/dist/routes/audit/schema.d.ts +129 -0
  535. package/dist/routes/audit/schema.d.ts.map +1 -0
  536. package/dist/routes/audit/schema.js +43 -0
  537. package/dist/routes/audit/schema.js.map +1 -0
  538. package/dist/routes/auth/desktop-session.d.ts +48 -0
  539. package/dist/routes/auth/desktop-session.d.ts.map +1 -0
  540. package/dist/routes/auth/desktop-session.js +132 -0
  541. package/dist/routes/auth/desktop-session.js.map +1 -0
  542. package/dist/routes/auth/handlers.d.ts +21 -0
  543. package/dist/routes/auth/handlers.d.ts.map +1 -0
  544. package/dist/routes/auth/handlers.js +256 -0
  545. package/dist/routes/auth/handlers.js.map +1 -0
  546. package/dist/routes/auth/index.d.ts +27 -0
  547. package/dist/routes/auth/index.d.ts.map +1 -0
  548. package/dist/routes/auth/index.js +67 -0
  549. package/dist/routes/auth/index.js.map +1 -0
  550. package/dist/routes/auth/schema.d.ts +129 -0
  551. package/dist/routes/auth/schema.d.ts.map +1 -0
  552. package/dist/routes/auth/schema.js +84 -0
  553. package/dist/routes/auth/schema.js.map +1 -0
  554. package/dist/routes/bootstrap/handlers.d.ts +34 -0
  555. package/dist/routes/bootstrap/handlers.d.ts.map +1 -0
  556. package/dist/routes/bootstrap/handlers.js +96 -0
  557. package/dist/routes/bootstrap/handlers.js.map +1 -0
  558. package/dist/routes/bootstrap/index.d.ts +9 -0
  559. package/dist/routes/bootstrap/index.d.ts.map +1 -0
  560. package/dist/routes/bootstrap/index.js +16 -0
  561. package/dist/routes/bootstrap/index.js.map +1 -0
  562. package/dist/routes/bootstrap/schema.d.ts +177 -0
  563. package/dist/routes/bootstrap/schema.d.ts.map +1 -0
  564. package/dist/routes/bootstrap/schema.js +55 -0
  565. package/dist/routes/bootstrap/schema.js.map +1 -0
  566. package/dist/routes/connections/index.d.ts +21 -0
  567. package/dist/routes/connections/index.d.ts.map +1 -0
  568. package/dist/routes/connections/index.js +260 -0
  569. package/dist/routes/connections/index.js.map +1 -0
  570. package/dist/routes/connections/schema.d.ts +161 -0
  571. package/dist/routes/connections/schema.d.ts.map +1 -0
  572. package/dist/routes/connections/schema.js +91 -0
  573. package/dist/routes/connections/schema.js.map +1 -0
  574. package/dist/routes/data/index.d.ts +46 -0
  575. package/dist/routes/data/index.d.ts.map +1 -0
  576. package/dist/routes/data/index.js +508 -0
  577. package/dist/routes/data/index.js.map +1 -0
  578. package/dist/routes/data/schema.d.ts +128 -0
  579. package/dist/routes/data/schema.d.ts.map +1 -0
  580. package/dist/routes/data/schema.js +83 -0
  581. package/dist/routes/data/schema.js.map +1 -0
  582. package/dist/routes/desktop/index.d.ts +61 -0
  583. package/dist/routes/desktop/index.d.ts.map +1 -0
  584. package/dist/routes/desktop/index.js +91 -0
  585. package/dist/routes/desktop/index.js.map +1 -0
  586. package/dist/routes/desktop/schema.d.ts +71 -0
  587. package/dist/routes/desktop/schema.d.ts.map +1 -0
  588. package/dist/routes/desktop/schema.js +58 -0
  589. package/dist/routes/desktop/schema.js.map +1 -0
  590. package/dist/routes/desktop-capabilities/index.d.ts +9 -0
  591. package/dist/routes/desktop-capabilities/index.d.ts.map +1 -0
  592. package/dist/routes/desktop-capabilities/index.js +62 -0
  593. package/dist/routes/desktop-capabilities/index.js.map +1 -0
  594. package/dist/routes/desktop-capabilities/schema.d.ts +46 -0
  595. package/dist/routes/desktop-capabilities/schema.d.ts.map +1 -0
  596. package/dist/routes/desktop-capabilities/schema.js +30 -0
  597. package/dist/routes/desktop-capabilities/schema.js.map +1 -0
  598. package/dist/routes/desktop-demo/handlers.d.ts +94 -0
  599. package/dist/routes/desktop-demo/handlers.d.ts.map +1 -0
  600. package/dist/routes/desktop-demo/handlers.js +182 -0
  601. package/dist/routes/desktop-demo/handlers.js.map +1 -0
  602. package/dist/routes/desktop-demo/index.d.ts +39 -0
  603. package/dist/routes/desktop-demo/index.d.ts.map +1 -0
  604. package/dist/routes/desktop-demo/index.js +73 -0
  605. package/dist/routes/desktop-demo/index.js.map +1 -0
  606. package/dist/routes/desktop-demo/schema.d.ts +17 -0
  607. package/dist/routes/desktop-demo/schema.d.ts.map +1 -0
  608. package/dist/routes/desktop-demo/schema.js +30 -0
  609. package/dist/routes/desktop-demo/schema.js.map +1 -0
  610. package/dist/routes/desktop-lan/index.d.ts +54 -0
  611. package/dist/routes/desktop-lan/index.d.ts.map +1 -0
  612. package/dist/routes/desktop-lan/index.js +33 -0
  613. package/dist/routes/desktop-lan/index.js.map +1 -0
  614. package/dist/routes/desktop-lan/schema.d.ts +24 -0
  615. package/dist/routes/desktop-lan/schema.d.ts.map +1 -0
  616. package/dist/routes/desktop-lan/schema.js +40 -0
  617. package/dist/routes/desktop-lan/schema.js.map +1 -0
  618. package/dist/routes/desktop-local-db/handlers.d.ts +92 -0
  619. package/dist/routes/desktop-local-db/handlers.d.ts.map +1 -0
  620. package/dist/routes/desktop-local-db/handlers.js +300 -0
  621. package/dist/routes/desktop-local-db/handlers.js.map +1 -0
  622. package/dist/routes/desktop-local-db/index.d.ts +39 -0
  623. package/dist/routes/desktop-local-db/index.d.ts.map +1 -0
  624. package/dist/routes/desktop-local-db/index.js +83 -0
  625. package/dist/routes/desktop-local-db/index.js.map +1 -0
  626. package/dist/routes/desktop-local-db/placeholder.d.ts +75 -0
  627. package/dist/routes/desktop-local-db/placeholder.d.ts.map +1 -0
  628. package/dist/routes/desktop-local-db/placeholder.js +420 -0
  629. package/dist/routes/desktop-local-db/placeholder.js.map +1 -0
  630. package/dist/routes/desktop-local-db/schema.d.ts +50 -0
  631. package/dist/routes/desktop-local-db/schema.d.ts.map +1 -0
  632. package/dist/routes/desktop-local-db/schema.js +71 -0
  633. package/dist/routes/desktop-local-db/schema.js.map +1 -0
  634. package/dist/routes/desktop-local-db/sqlite-ddl.d.ts +104 -0
  635. package/dist/routes/desktop-local-db/sqlite-ddl.d.ts.map +1 -0
  636. package/dist/routes/desktop-local-db/sqlite-ddl.js +419 -0
  637. package/dist/routes/desktop-local-db/sqlite-ddl.js.map +1 -0
  638. package/dist/routes/email-templates/index.d.ts +7 -0
  639. package/dist/routes/email-templates/index.d.ts.map +1 -0
  640. package/dist/routes/email-templates/index.js +70 -0
  641. package/dist/routes/email-templates/index.js.map +1 -0
  642. package/dist/routes/email-templates/schema.d.ts +54 -0
  643. package/dist/routes/email-templates/schema.d.ts.map +1 -0
  644. package/dist/routes/email-templates/schema.js +35 -0
  645. package/dist/routes/email-templates/schema.js.map +1 -0
  646. package/dist/routes/exports/index.d.ts +19 -0
  647. package/dist/routes/exports/index.d.ts.map +1 -0
  648. package/dist/routes/exports/index.js +145 -0
  649. package/dist/routes/exports/index.js.map +1 -0
  650. package/dist/routes/exports/schema.d.ts +183 -0
  651. package/dist/routes/exports/schema.d.ts.map +1 -0
  652. package/dist/routes/exports/schema.js +37 -0
  653. package/dist/routes/exports/schema.js.map +1 -0
  654. package/dist/routes/generate/index.d.ts +23 -0
  655. package/dist/routes/generate/index.d.ts.map +1 -0
  656. package/dist/routes/generate/index.js +80 -0
  657. package/dist/routes/generate/index.js.map +1 -0
  658. package/dist/routes/generate/schema.d.ts +43 -0
  659. package/dist/routes/generate/schema.d.ts.map +1 -0
  660. package/dist/routes/generate/schema.js +37 -0
  661. package/dist/routes/generate/schema.js.map +1 -0
  662. package/dist/routes/imports/index.d.ts +21 -0
  663. package/dist/routes/imports/index.d.ts.map +1 -0
  664. package/dist/routes/imports/index.js +288 -0
  665. package/dist/routes/imports/index.js.map +1 -0
  666. package/dist/routes/imports/schema.d.ts +292 -0
  667. package/dist/routes/imports/schema.d.ts.map +1 -0
  668. package/dist/routes/imports/schema.js +78 -0
  669. package/dist/routes/imports/schema.js.map +1 -0
  670. package/dist/routes/index.d.ts +11 -0
  671. package/dist/routes/index.d.ts.map +1 -0
  672. package/dist/routes/index.js +8 -0
  673. package/dist/routes/index.js.map +1 -0
  674. package/dist/routes/jobs/index.d.ts +29 -0
  675. package/dist/routes/jobs/index.d.ts.map +1 -0
  676. package/dist/routes/jobs/index.js +175 -0
  677. package/dist/routes/jobs/index.js.map +1 -0
  678. package/dist/routes/jobs/schema.d.ts +170 -0
  679. package/dist/routes/jobs/schema.d.ts.map +1 -0
  680. package/dist/routes/jobs/schema.js +57 -0
  681. package/dist/routes/jobs/schema.js.map +1 -0
  682. package/dist/routes/llm/config-service.d.ts +48 -0
  683. package/dist/routes/llm/config-service.d.ts.map +1 -0
  684. package/dist/routes/llm/config-service.js +102 -0
  685. package/dist/routes/llm/config-service.js.map +1 -0
  686. package/dist/routes/llm/index.d.ts +69 -0
  687. package/dist/routes/llm/index.d.ts.map +1 -0
  688. package/dist/routes/llm/index.js +412 -0
  689. package/dist/routes/llm/index.js.map +1 -0
  690. package/dist/routes/llm/schema.d.ts +605 -0
  691. package/dist/routes/llm/schema.d.ts.map +1 -0
  692. package/dist/routes/llm/schema.js +238 -0
  693. package/dist/routes/llm/schema.js.map +1 -0
  694. package/dist/routes/me/handlers.d.ts +14 -0
  695. package/dist/routes/me/handlers.d.ts.map +1 -0
  696. package/dist/routes/me/handlers.js +88 -0
  697. package/dist/routes/me/handlers.js.map +1 -0
  698. package/dist/routes/me/index.d.ts +8 -0
  699. package/dist/routes/me/index.d.ts.map +1 -0
  700. package/dist/routes/me/index.js +17 -0
  701. package/dist/routes/me/index.js.map +1 -0
  702. package/dist/routes/me/schema.d.ts +270 -0
  703. package/dist/routes/me/schema.d.ts.map +1 -0
  704. package/dist/routes/me/schema.js +59 -0
  705. package/dist/routes/me/schema.js.map +1 -0
  706. package/dist/routes/me-views/index.d.ts +23 -0
  707. package/dist/routes/me-views/index.d.ts.map +1 -0
  708. package/dist/routes/me-views/index.js +76 -0
  709. package/dist/routes/me-views/index.js.map +1 -0
  710. package/dist/routes/me-views/schema.d.ts +44 -0
  711. package/dist/routes/me-views/schema.d.ts.map +1 -0
  712. package/dist/routes/me-views/schema.js +13 -0
  713. package/dist/routes/me-views/schema.js.map +1 -0
  714. package/dist/routes/notifications/index.d.ts +19 -0
  715. package/dist/routes/notifications/index.d.ts.map +1 -0
  716. package/dist/routes/notifications/index.js +123 -0
  717. package/dist/routes/notifications/index.js.map +1 -0
  718. package/dist/routes/notifications/schema.d.ts +122 -0
  719. package/dist/routes/notifications/schema.d.ts.map +1 -0
  720. package/dist/routes/notifications/schema.js +83 -0
  721. package/dist/routes/notifications/schema.js.map +1 -0
  722. package/dist/routes/onboarding/derive.d.ts +41 -0
  723. package/dist/routes/onboarding/derive.d.ts.map +1 -0
  724. package/dist/routes/onboarding/derive.js +30 -0
  725. package/dist/routes/onboarding/derive.js.map +1 -0
  726. package/dist/routes/onboarding/index.d.ts +26 -0
  727. package/dist/routes/onboarding/index.d.ts.map +1 -0
  728. package/dist/routes/onboarding/index.js +95 -0
  729. package/dist/routes/onboarding/index.js.map +1 -0
  730. package/dist/routes/onboarding/schema.d.ts +22 -0
  731. package/dist/routes/onboarding/schema.d.ts.map +1 -0
  732. package/dist/routes/onboarding/schema.js +22 -0
  733. package/dist/routes/onboarding/schema.js.map +1 -0
  734. package/dist/routes/pages/index.d.ts +26 -0
  735. package/dist/routes/pages/index.d.ts.map +1 -0
  736. package/dist/routes/pages/index.js +119 -0
  737. package/dist/routes/pages/index.js.map +1 -0
  738. package/dist/routes/pages/layout-schema.d.ts +19 -0
  739. package/dist/routes/pages/layout-schema.d.ts.map +1 -0
  740. package/dist/routes/pages/layout-schema.js +19 -0
  741. package/dist/routes/pages/layout-schema.js.map +1 -0
  742. package/dist/routes/pages/schema.d.ts +52 -0
  743. package/dist/routes/pages/schema.d.ts.map +1 -0
  744. package/dist/routes/pages/schema.js +35 -0
  745. package/dist/routes/pages/schema.js.map +1 -0
  746. package/dist/routes/roles/index.d.ts +17 -0
  747. package/dist/routes/roles/index.d.ts.map +1 -0
  748. package/dist/routes/roles/index.js +255 -0
  749. package/dist/routes/roles/index.js.map +1 -0
  750. package/dist/routes/roles/schema.d.ts +94 -0
  751. package/dist/routes/roles/schema.d.ts.map +1 -0
  752. package/dist/routes/roles/schema.js +57 -0
  753. package/dist/routes/roles/schema.js.map +1 -0
  754. package/dist/routes/scheduled-reports/index.d.ts +15 -0
  755. package/dist/routes/scheduled-reports/index.d.ts.map +1 -0
  756. package/dist/routes/scheduled-reports/index.js +195 -0
  757. package/dist/routes/scheduled-reports/index.js.map +1 -0
  758. package/dist/routes/scheduled-reports/schema.d.ts +154 -0
  759. package/dist/routes/scheduled-reports/schema.d.ts.map +1 -0
  760. package/dist/routes/scheduled-reports/schema.js +49 -0
  761. package/dist/routes/scheduled-reports/schema.js.map +1 -0
  762. package/dist/routes/schema/index.d.ts +24 -0
  763. package/dist/routes/schema/index.d.ts.map +1 -0
  764. package/dist/routes/schema/index.js +224 -0
  765. package/dist/routes/schema/index.js.map +1 -0
  766. package/dist/routes/schema/schema.d.ts +92 -0
  767. package/dist/routes/schema/schema.d.ts.map +1 -0
  768. package/dist/routes/schema/schema.js +64 -0
  769. package/dist/routes/schema/schema.js.map +1 -0
  770. package/dist/routes/schema-import/fallback-parser.d.ts +35 -0
  771. package/dist/routes/schema-import/fallback-parser.d.ts.map +1 -0
  772. package/dist/routes/schema-import/fallback-parser.js +349 -0
  773. package/dist/routes/schema-import/fallback-parser.js.map +1 -0
  774. package/dist/routes/schema-import/index.d.ts +43 -0
  775. package/dist/routes/schema-import/index.d.ts.map +1 -0
  776. package/dist/routes/schema-import/index.js +167 -0
  777. package/dist/routes/schema-import/index.js.map +1 -0
  778. package/dist/routes/schema-import/schema.d.ts +65 -0
  779. package/dist/routes/schema-import/schema.d.ts.map +1 -0
  780. package/dist/routes/schema-import/schema.js +40 -0
  781. package/dist/routes/schema-import/schema.js.map +1 -0
  782. package/dist/routes/search/index.d.ts +71 -0
  783. package/dist/routes/search/index.d.ts.map +1 -0
  784. package/dist/routes/search/index.js +361 -0
  785. package/dist/routes/search/index.js.map +1 -0
  786. package/dist/routes/search/schema.d.ts +125 -0
  787. package/dist/routes/search/schema.d.ts.map +1 -0
  788. package/dist/routes/search/schema.js +70 -0
  789. package/dist/routes/search/schema.js.map +1 -0
  790. package/dist/routes/settings/index.d.ts +24 -0
  791. package/dist/routes/settings/index.d.ts.map +1 -0
  792. package/dist/routes/settings/index.js +164 -0
  793. package/dist/routes/settings/index.js.map +1 -0
  794. package/dist/routes/settings/schema.d.ts +110 -0
  795. package/dist/routes/settings/schema.d.ts.map +1 -0
  796. package/dist/routes/settings/schema.js +71 -0
  797. package/dist/routes/settings/schema.js.map +1 -0
  798. package/dist/routes/setup/index.d.ts +29 -0
  799. package/dist/routes/setup/index.d.ts.map +1 -0
  800. package/dist/routes/setup/index.js +68 -0
  801. package/dist/routes/setup/index.js.map +1 -0
  802. package/dist/routes/setup/schema.d.ts +61 -0
  803. package/dist/routes/setup/schema.d.ts.map +1 -0
  804. package/dist/routes/setup/schema.js +47 -0
  805. package/dist/routes/setup/schema.js.map +1 -0
  806. package/dist/routes/system/handlers.d.ts +63 -0
  807. package/dist/routes/system/handlers.d.ts.map +1 -0
  808. package/dist/routes/system/handlers.js +121 -0
  809. package/dist/routes/system/handlers.js.map +1 -0
  810. package/dist/routes/system/index.d.ts +34 -0
  811. package/dist/routes/system/index.d.ts.map +1 -0
  812. package/dist/routes/system/index.js +18 -0
  813. package/dist/routes/system/index.js.map +1 -0
  814. package/dist/routes/system/schema.d.ts +93 -0
  815. package/dist/routes/system/schema.d.ts.map +1 -0
  816. package/dist/routes/system/schema.js +109 -0
  817. package/dist/routes/system/schema.js.map +1 -0
  818. package/dist/routes/views/index.d.ts +21 -0
  819. package/dist/routes/views/index.d.ts.map +1 -0
  820. package/dist/routes/views/index.js +155 -0
  821. package/dist/routes/views/index.js.map +1 -0
  822. package/dist/routes/views/schema.d.ts +127 -0
  823. package/dist/routes/views/schema.d.ts.map +1 -0
  824. package/dist/routes/views/schema.js +56 -0
  825. package/dist/routes/views/schema.js.map +1 -0
  826. package/dist/routes/widget-data/index.d.ts +29 -0
  827. package/dist/routes/widget-data/index.d.ts.map +1 -0
  828. package/dist/routes/widget-data/index.js +152 -0
  829. package/dist/routes/widget-data/index.js.map +1 -0
  830. package/dist/routes/widget-data/schema.d.ts +252 -0
  831. package/dist/routes/widget-data/schema.d.ts.map +1 -0
  832. package/dist/routes/widget-data/schema.js +44 -0
  833. package/dist/routes/widget-data/schema.js.map +1 -0
  834. package/dist/setup/service.d.ts +63 -0
  835. package/dist/setup/service.d.ts.map +1 -0
  836. package/dist/setup/service.js +103 -0
  837. package/dist/setup/service.js.map +1 -0
  838. package/dist/start.d.ts +12 -0
  839. package/dist/start.d.ts.map +1 -0
  840. package/dist/start.js +28 -0
  841. package/dist/start.js.map +1 -0
  842. package/dist/telemetry/payload.d.ts +66 -0
  843. package/dist/telemetry/payload.d.ts.map +1 -0
  844. package/dist/telemetry/payload.js +69 -0
  845. package/dist/telemetry/payload.js.map +1 -0
  846. package/dist/telemetry/service.d.ts +67 -0
  847. package/dist/telemetry/service.d.ts.map +1 -0
  848. package/dist/telemetry/service.js +103 -0
  849. package/dist/telemetry/service.js.map +1 -0
  850. package/dist/telemetry/update-check.d.ts +79 -0
  851. package/dist/telemetry/update-check.d.ts.map +1 -0
  852. package/dist/telemetry/update-check.js +103 -0
  853. package/dist/telemetry/update-check.js.map +1 -0
  854. package/dist/version.d.ts +14 -0
  855. package/dist/version.d.ts.map +1 -0
  856. package/dist/version.js +21 -0
  857. package/dist/version.js.map +1 -0
  858. package/dist/widget-data/cache.d.ts +35 -0
  859. package/dist/widget-data/cache.d.ts.map +1 -0
  860. package/dist/widget-data/cache.js +67 -0
  861. package/dist/widget-data/cache.js.map +1 -0
  862. package/dist/widget-data/compiler.d.ts +107 -0
  863. package/dist/widget-data/compiler.d.ts.map +1 -0
  864. package/dist/widget-data/compiler.js +362 -0
  865. package/dist/widget-data/compiler.js.map +1 -0
  866. package/dist/widget-data/shapers.d.ts +75 -0
  867. package/dist/widget-data/shapers.d.ts.map +1 -0
  868. package/dist/widget-data/shapers.js +128 -0
  869. package/dist/widget-data/shapers.js.map +1 -0
  870. package/dist/widget-data/stream-publisher.d.ts +42 -0
  871. package/dist/widget-data/stream-publisher.d.ts.map +1 -0
  872. package/dist/widget-data/stream-publisher.js +34 -0
  873. package/dist/widget-data/stream-publisher.js.map +1 -0
  874. package/package.json +79 -0
  875. package/vocabulary/llm-allowlist.json +76 -0
@@ -0,0 +1,2 @@
1
+ import{d$ as j,e0 as u,j as t,r as N,e1 as M,at as h,aP as U,aZ as G,e2 as y,e3 as w,e4 as I,e5 as Y,M as p,e6 as v,e7 as $,av as C,e8 as S,e9 as A,ea as z,c as f,eb as q,ec as K,ed as X,ee as Q,ef as F,eg as O,eh as Z,bD as T,ei as _,ej as J,ek as ee,dz as te,dy as se,el as H,dx as ne,bd as D,em as W,dw as ae,en as re,eo as P,ep as de,E as B,eq as ie,er as R,es as L,et as oe,b4 as le,cl as ce,eu as ue,ev as fe,ew as xe,ex as me,S as pe}from"./index-PB1II0WV.js";const be=["info","pos","warn","danger"],he={info:"info",notice:"info",success:"pos",ok:"pos",pos:"pos",warn:"warn",warning:"warn",danger:"danger",error:"danger",critical:"danger",fatal:"danger"};function je(e,s){if(e===void 0)return"info";const n=s?.[e]??he[e.toLowerCase()];return n!==void 0&&be.includes(n)?n:"info"}function ge({severity:e,lead:s,message:n,ctaLabel:a,severityMap:d,dismissible:r=!1,dismissLabel:i,onCta:l,testId:o}){const[c,x]=N.useState(!1);if(c)return null;const b=je(e,d),g=s??n??"",m=s===void 0?void 0:n;return t.jsxs("div",{className:"relative px-4 pb-4",children:[t.jsx(M,{"data-widget":"alert-banner","data-severity":e??"info","data-testid":o,tone:b,role:b==="danger"||b==="warn"?"alert":"status",title:g,...m===void 0?{}:{body:m},...a===void 0?{}:{action:t.jsx(h,{size:"sm",variant:"ghost",onClick:()=>l?.(),children:a})},className:r?"pe-11":void 0}),r&&t.jsx(U,{size:"sm",label:i??"Dismiss","data-part":"alert-dismiss",onClick:()=>x(!0),className:"absolute end-6 top-2",children:t.jsx(G,{className:"size-3.5"})})]})}function qe({config:e,data:s,onEvent:n}){const a=j(s);if(a===null)return null;const d=u(a,e.ctaHrefField)??e.href,r=u(a,e.ctaLabelField);return t.jsx(ge,{severity:u(a,e.severityField),lead:u(a,e.leadField),message:u(a,e.messageField),...r===void 0||d===void 0?{}:{ctaLabel:r},severityMap:e.severityMap,dismissible:e.dismissible,dismissLabel:e.dismissLabel,onCta:d===void 0?void 0:()=>n({type:"drill-through",href:d}),testId:e.testId})}function ye(e){return e.error===!0?"error":e.saving===!0?"saving":e.dirty===!0?"dirty":e.savedAt!==void 0?"saved":"idle"}function ve({status:e,savedAt:s,showStamp:n=!0,locale:a,dirtyLabel:d,savingLabel:r,savedLabel:i,errorLabel:l,testId:o}){const c=n&&e==="saved"?I(s,a):void 0;return t.jsxs("div",{className:"flex h-full items-center gap-2 px-4 pb-4","data-widget":"autosave-indicator","data-testid":o,children:[t.jsx(Y,{status:e,dirtyLabel:d??"Unsaved changes",savingLabel:r??"Saving…",savedLabel:i??"All changes saved",errorLabel:l??"Couldn't save"}),c!==void 0&&t.jsx(p,{className:"text-caption text-fg-subtle",children:c})]})}function Ke({config:e,data:s}){const n=j(s),a=n===null?void 0:y(n,e.savedAtField),d=n===null?"idle":ye({dirty:w(n,e.dirtyField),saving:w(n,e.savingField),error:w(n,e.errorField),savedAt:a});return t.jsx(ve,{status:d,savedAt:a,showStamp:e.showStamp,locale:e.format?.locale,dirtyLabel:e.dirtyLabel,savingLabel:e.savingLabel,savedLabel:e.savedLabel,errorLabel:e.errorLabel,testId:e.testId})}const we={idle:"bg-surface-2 text-fg-muted",connecting:"bg-info-soft text-info",connected:"bg-pos-soft text-pos",failed:"bg-danger-soft text-danger"},Ne={idle:"Not connected",connecting:"Connecting…",connected:"Connected",failed:"Couldn't connect"};function Le({state:e,host:s,detail:n,messages:a,testable:d=!1,testLabel:r,onTest:i,testId:l}){const o=a?.[e]??Ne[e];return t.jsx("div",{className:"px-4 pb-4",children:t.jsxs("div",{"data-widget":"connection-status","data-state":e,"data-testid":l,role:"status","aria-live":"polite",className:f("flex items-center gap-3 rounded-lg px-3.5 py-3",we[e]),children:[t.jsx("span",{"aria-hidden":"true",className:"flex size-5 shrink-0 items-center justify-center",children:e==="connecting"?t.jsx(C,{size:"sm",className:"size-4"}):e==="connected"?t.jsx(S,{className:"size-4"}):e==="failed"?t.jsx(A,{className:"size-4"}):t.jsx(z,{className:"size-4"})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body-sm font-bold",children:o}),s!==void 0&&t.jsx(p,{"data-part":"connection-host",className:"block truncate text-caption opacity-80",children:s}),n!==void 0&&t.jsx("p",{className:"truncate text-caption opacity-80",children:n})]}),d&&i!==void 0&&t.jsx(h,{size:"sm",variant:"ghost","data-part":"connection-test",disabled:e==="connecting",onClick:i,children:r??"Test"})]})})}function Xe({config:e,data:s,onEvent:n}){const a=j(s),d=v(a===null?void 0:u(a,e.stateField),q,"idle"),r=$(e.binding);return t.jsx(Le,{state:d,host:a===null?void 0:u(a,e.hostField),detail:a===null?void 0:u(a,e.detailField),messages:e.messages,testable:e.testable,testLabel:e.testLabel,onTest:r===null?void 0:()=>n({type:"mutate",intent:"update",connectionId:r.connectionId,table:r.table,values:{action:"test-connection"}}),testId:e.testId})}const k={neutral:"text-fg-muted",accent:"text-accent",pos:"text-pos",warn:"text-warn",danger:"text-danger",info:"text-info"};function ke(e,s){const n=e===void 0?void 0:s?.[e];return n!==void 0&&n in k?n:"neutral"}function Se({checks:e,values:s,checkedAt:n,checkedAtLabel:a,locale:d,testId:r}){const i=I(n,d),l=e.filter(o=>s[o.key]!==void 0);return t.jsxs("div",{"data-widget":"diagnostics-readout","data-testid":r,className:"flex h-full flex-col gap-2 overflow-auto px-4 pb-4",children:[t.jsx("div",{className:"rounded-lg border border-border bg-surface-2 px-3 py-1.5",children:l.map(o=>{const c=s[o.key],x=ke(c,o.tones);return t.jsx(X,{"data-part":"diagnostic-row","data-check":o.key,"data-tone":x,label:o.label??o.key,children:o.mono===!1?t.jsx("span",{className:f("text-body-sm font-semibold",k[x]),children:c}):t.jsx(p,{className:f("text-body-sm font-semibold",k[x]),children:c})},o.key)})}),i!==void 0&&t.jsxs("p",{className:"text-caption text-fg-subtle",children:[a??"Last checked"," ",t.jsx(p,{children:i})]})]})}function Qe({config:e,data:s}){const n=j(s),a=e.checks??K,d={};if(n!==null)for(const r of a)d[r.key]=u(n,r.key);return t.jsx(Se,{checks:a,values:d,checkedAt:n===null?void 0:y(n,e.checkedAtField),checkedAtLabel:e.checkedAtLabel,locale:e.format?.locale,testId:e.testId})}const Te={alert:t.jsx(P,{}),ban:t.jsx(re,{}),check:t.jsx(S,{}),clock:t.jsx(ae,{}),compass:t.jsx(W,{}),database:t.jsx(D,{}),inbox:t.jsx(ne,{}),lock:t.jsx(H,{}),plug:t.jsx(z,{}),search:t.jsx(se,{}),settings:t.jsx(te,{}),shield:t.jsx(ee,{}),spinner:t.jsx(J,{}),"server-crash":t.jsx(_,{}),warning:t.jsx(T,{}),wifi:t.jsx(Z,{}),"wifi-off":t.jsx(O,{}),wrench:t.jsx(F,{}),question:t.jsx(Q,{})};function V(e){if(e!==void 0)return Te[e]}const Ee={404:t.jsx(W,{}),500:t.jsx(_,{}),offline:t.jsx(O,{}),forbidden:t.jsx(H,{}),maintenance:t.jsx(F,{}),"conn-error":t.jsx(D,{})};function Ie(e){return Ee[e]}function Ze({config:e,onEvent:s}){const n=e.variant==="dropzone",a=e.variant!=="plain",d=o=>{o!==void 0&&o!==""&&s({type:"drill-through",href:o})},r=n?t.jsx(de,{}):V(e.glyph),i=a&&(e.primaryLabel!==void 0||e.secondaryLabel!==void 0)?t.jsxs(t.Fragment,{children:[e.primaryLabel!==void 0&&t.jsx(h,{size:"sm",onClick:()=>d(e.primaryHref),children:e.primaryLabel}),e.secondaryLabel!==void 0&&t.jsx(h,{size:"sm",variant:"ghost",onClick:()=>d(e.secondaryHref),children:e.secondaryLabel})]}):void 0,l=t.jsx(B,{"data-widget":"empty-state","data-variant":e.variant,"data-testid":e.testId,compact:e.compact,preset:e.preset,tone:ie(e.tone),...r===void 0?{}:{icon:r},title:e.heading??"",...e.body===void 0?{}:{body:e.body},...i===void 0?{}:{actions:i}});return n?t.jsx("div",{className:"flex h-full items-center justify-center px-4 pb-4",children:t.jsx("div",{className:"flex h-full w-full items-center justify-center rounded-xl border-2 border-dashed border-border-strong",children:l})}):t.jsx("div",{className:"flex h-full items-center justify-center px-4 pb-4",children:l})}const Ce={info:"text-fg-muted",ok:"text-fg-muted",warn:"text-warn",error:"text-danger",running:"text-fg"};function Ae({kind:e}){return e==="ok"?t.jsx(ce,{className:"size-3.5 text-pos"}):e==="error"?t.jsx(P,{className:"size-3.5 text-danger"}):e==="warn"?t.jsx(T,{className:"size-3.5 text-warn"}):e==="running"?t.jsx(C,{size:"sm",className:"size-3.5"}):t.jsx("span",{className:"size-1 rounded-full bg-fg-subtle"})}function ze(e,s){const n=R(e),a=n.slice(Math.max(0,n.length-s.maxLines)),d=[];for(const[r,i]of a.entries()){const l=u(i,s.textField);if(l===void 0)continue;const o=y(i,s.pctField);d.push({id:u(i,"id")??`line-${r}`,kind:v(i[s.kindField],oe,"info"),text:l,...o===void 0?{}:{pct:L(o)}})}return d}function Fe(e){for(let n=e.length-1;n>=0;n-=1){const a=e[n]?.pct;if(a!==void 0)return L(a)}if(e.length===0)return 0;const s=e.filter(n=>n.kind!=="running").length;return L(s/e.length*100)}function Oe({lines:e,variant:s="live",showProgress:n=!0,follow:a=!0,pct:d,a11yLabel:r,progressLabel:i,emptyTitle:l,emptyBody:o,testId:c}){const x=N.useRef(null),b=e.length;if(N.useEffect(()=>{a&&x.current?.scrollIntoView?.({block:"nearest"})},[b,a]),b===0)return t.jsx(B,{compact:!0,preset:"nothing-scheduled",title:l??"Nothing to report yet",body:o??"Log lines appear here once the task starts."});const g=d??Fe(e);return t.jsxs("div",{"data-widget":"progress-log-console","data-variant":s,"data-testid":c,className:"flex h-full flex-col gap-2 px-4 pb-4",children:[t.jsxs("div",{role:"log","aria-label":r??"Progress log","aria-live":"polite",className:f("min-h-0 flex-1 overflow-y-auto rounded-lg border border-border p-3.5 font-mono text-caption leading-6",s==="static-terminal"?"bg-surface-3":"bg-surface-2"),children:[e.map(m=>t.jsxs("div",{"data-part":"log-line","data-kind":m.kind,className:"flex items-start gap-2",children:[t.jsx("span",{"aria-hidden":"true",className:"mt-1 flex size-4 shrink-0 items-center justify-center",children:t.jsx(Ae,{kind:m.kind})}),t.jsx("span",{className:f("min-w-0 break-all",Ce[m.kind]),children:m.text})]},m.id)),t.jsx("div",{ref:x})]}),n&&t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(le,{value:g,max:100,tone:g>=100?"pos":"accent",size:"sm",label:i??"Progress",className:"flex-1"}),t.jsxs(p,{"data-part":"log-pct",className:"shrink-0 text-caption font-semibold text-fg-muted",children:[Math.round(g),"%"]})]})]})}function Je({config:e,data:s}){const n=ze(s,e);return t.jsx(Oe,{lines:n,variant:e.variant,showProgress:e.showProgress,follow:e.follow,a11yLabel:e.a11yLabel,progressLabel:e.progressLabel,emptyTitle:e.emptyTitle,emptyBody:e.emptyBody,testId:e.testId})}const E={neutral:"bg-surface-3 text-fg-muted",accent:"bg-accent-soft text-accent",pos:"bg-pos-soft text-pos",warn:"bg-warn-soft text-warn",danger:"bg-danger-soft text-danger",info:"bg-info-soft text-info"},_e={404:{tone:"accent",code:"404",title:"This page took a wrong turn",body:"The page you are looking for was moved, renamed, or never existed.",primaryLabel:"Back to dashboard",primaryHref:"/"},500:{tone:"danger",code:"500",title:"Something broke on our side",body:"The error was logged and the team notified. Trying again often works.",primaryLabel:"Try again"},offline:{tone:"warn",title:"You are offline",body:"Check your connection — the dashboard reconnects automatically.",primaryLabel:"Retry"},forbidden:{tone:"warn",code:"403",title:"You do not have access",body:"Ask a workspace admin to grant you permission for this page.",primaryLabel:"Back to dashboard",primaryHref:"/"},maintenance:{tone:"info",title:"Down for maintenance",body:"We are making things better. This usually takes a few minutes."},"conn-error":{tone:"danger",title:"Cannot reach the database",body:"The connection was refused or timed out. Check the connection settings.",primaryLabel:"Test connection",primaryHref:"/studio"}};function He(e,s){const n=_e[e],a=s?.[e];if(a===void 0)return n;const d={...n};for(const[r,i]of Object.entries(a))i!==void 0&&(d[r]=i);return d}function De({view:e,entry:s,ornament:n=!1,quickLinks:a,requestId:d,onNavigate:r,testId:i}){const l=s.tone,o=V(s.icon)??Ie(e);return t.jsxs("div",{"data-widget":"state-hero","data-state":e,"data-tone":l,"data-testid":i,className:"relative flex min-h-full w-full flex-col items-center justify-center overflow-hidden px-6 py-10 text-center",children:[n&&t.jsx("div",{"aria-hidden":"true",className:"pointer-events-none absolute inset-0 flex items-center justify-center",children:t.jsx("div",{className:f("size-64 rounded-full opacity-[0.07] blur-3xl",E[l])})}),t.jsxs("div",{className:"relative flex flex-col items-center gap-4",children:[t.jsxs("div",{className:"relative flex items-center justify-center",children:[s.code!==void 0&&t.jsx(p,{"aria-hidden":"true",className:"absolute select-none text-[80px] font-bold leading-none text-fg opacity-[0.06]",children:s.code}),t.jsx("span",{"data-part":"state-glyph",className:f("relative flex size-16 items-center justify-center rounded-2xl [&_svg]:size-7",E[l]),children:o})]}),s.title!==void 0&&t.jsx("h2",{className:"text-title-md font-bold text-fg",children:s.title}),s.body!==void 0&&t.jsx("p",{className:"max-w-[36ch] text-body-sm text-fg-muted",children:s.body}),(s.primaryLabel!==void 0||s.secondaryLabel!==void 0)&&t.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2",children:[s.primaryLabel!==void 0&&t.jsx(h,{size:"sm",onClick:()=>s.primaryHref!==void 0&&r?.(s.primaryHref),children:s.primaryLabel}),s.secondaryLabel!==void 0&&t.jsx(h,{size:"sm",variant:"ghost",onClick:()=>s.secondaryHref!==void 0&&r?.(s.secondaryHref),children:s.secondaryLabel})]}),a!==void 0&&a.length>0&&t.jsx("ul",{className:"m-0 flex list-none flex-wrap items-center justify-center gap-1.5 p-0",children:a.map(c=>t.jsx("li",{children:t.jsx("button",{type:"button","data-part":"quick-link",onClick:()=>r?.(c.href),className:"rounded-full bg-surface-2 px-3 py-1 text-caption font-semibold text-fg-muted hover:bg-surface-3 hover:text-fg",children:c.label})},c.href))}),d!==void 0&&t.jsx(p,{className:"text-caption text-fg-subtle",children:d})]})]})}function et({config:e,data:s,onEvent:n}){const a=j(s),d=a===null?void 0:u(a,e.viewField),r=v(d,ue,e.view);return t.jsx(De,{view:r,entry:He(r,e.stateMap),ornament:e.ornament,quickLinks:e.quickLinks,requestId:e.requestId,onNavigate:i=>n({type:"drill-through",href:i}),testId:e.testId})}const We={up:"border-pos/30 bg-pos-soft",degraded:"border-warn/30 bg-warn-soft",down:"border-danger/30 bg-danger-soft"},Pe={up:"text-pos",degraded:"text-warn",down:"text-danger"},Be={up:"All systems operational",degraded:"Degraded performance",down:"Major outage"},Re={up:"Every monitored service is responding normally.",degraded:"Some services are slower than usual. We are investigating.",down:"One or more services are unavailable. We are on it."};function Ve({state:e}){return e==="up"?t.jsx(S,{className:"size-5"}):e==="degraded"?t.jsx(T,{className:"size-5"}):t.jsx(A,{className:"size-5"})}function Me({state:e,stats:s,title:n,body:a,testId:d}){const r=(s??[]).filter(i=>i.value!==void 0);return t.jsx("div",{className:"px-4 pb-4",children:t.jsxs("div",{"data-widget":"status-banner-hero","data-state":e,"data-testid":d,role:"status","aria-live":"polite",className:f("flex flex-wrap items-center gap-4 rounded-xl border px-4 py-3.5",We[e]),children:[t.jsx("span",{"aria-hidden":"true",className:f("flex shrink-0 items-center justify-center",Pe[e]),children:t.jsx(Ve,{state:e})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body font-bold text-fg",children:n??Be[e]}),t.jsx("p",{className:"truncate text-caption text-fg-muted",children:a??Re[e]})]}),r.length>0&&t.jsx("dl",{"data-part":"hero-stats",className:"m-0 flex shrink-0 items-center gap-5",children:r.map(i=>t.jsxs("div",{className:"text-end",children:[t.jsx("dd",{className:"m-0",children:t.jsxs(p,{className:"text-body font-bold text-fg",children:[i.value,i.unit??""]})}),t.jsx("dt",{className:"text-caption text-fg-subtle",children:i.label??i.key})]},i.key))})]})})}function tt({config:e,data:s}){const n=R(s),a=n.map(l=>v(l[e.stateField],xe,"up")),d=fe(a),r=n[0],i=(e.stats??[]).map(l=>({...l,value:r===void 0?void 0:y(r,l.key)}));return t.jsx(Me,{state:d,stats:i,title:e.titles?.[d],body:e.bodies?.[d],testId:e.testId})}const Ue=["neutral","accent","pos","warn","danger","info"];function Ge(e){return e!==void 0&&Ue.includes(e)?e:void 0}function Ye({status:e,map:s,fallbackTone:n="neutral",dot:a=!0,testId:d}){if(e===void 0||e==="")return null;const r=s?.[e],i=Ge(r?.tone)??me(e,n);return t.jsx(pe,{tone:i,dot:a,"data-widget":"status-pill","data-status":e,"data-testid":d,className:"align-middle",children:r?.label??e})}function st({config:e,data:s}){const n=j(s),a=n===null?void 0:u(n,e.statusField);return t.jsx("div",{className:"flex h-full items-center px-4 pb-4",children:t.jsx(Ye,{status:a,map:e.map,fallbackTone:e.fallbackTone,dot:e.dot,testId:e.testId})})}export{qe as AlertBannerWidget,Ke as AutosaveIndicatorWidget,Xe as ConnectionStatusWidget,Qe as DiagnosticsReadoutWidget,Ze as EmptyStateWidget,Je as ProgressLogConsoleWidget,et as StateHeroWidget,tt as StatusBannerHeroWidget,st as StatusPillWidget};
2
+ //# sourceMappingURL=system-track-components-GTYYpnfB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-track-components-GTYYpnfB.js","sources":["../../../../packages/widgets/dist/families/system/AlertBanner.js","../../../../packages/widgets/dist/families/system/AutosaveIndicatorWidget.js","../../../../packages/widgets/dist/families/system/ConnectionStatus.js","../../../../packages/widgets/dist/families/system/DiagnosticsReadout.js","../../../../packages/widgets/dist/families/system/system-icons.js","../../../../packages/widgets/dist/families/system/EmptyStateWidget.js","../../../../packages/widgets/dist/families/system/ProgressLogConsole.js","../../../../packages/widgets/dist/families/system/StateHero.js","../../../../packages/widgets/dist/families/system/StatusBannerHero.js","../../../../packages/widgets/dist/families/system/StatusPill.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `alert-banner` (annex §12) — inline callout: severity tint, bold stat lead or\n * icon, explanatory copy, optional CTA. Variants observed in the comps:\n * over-limit warning, deploy-freeze note, recurring-schedule info, rebalance\n * suggestion. The annex's auto-instantiation hook emits one of these per quota\n * check.\n *\n * Wraps @adminium/ui's `Alert` (which owns the tone-soft bg + `color-mix` tone\n * border + default per-tone glyph); this file adds the record binding, the\n * severity→tone map, the bold stat lead, and dismissal.\n */\nimport { Button, IconButton, Alert } from '@adminium/ui';\nimport { X } from 'lucide-react';\nimport { useState } from 'react';\nimport { recordRowOf, stringField } from './system-lib.js';\nimport { alertBannerConfigSchema, alertBannerDemoData } from './system-config.js';\nexport { alertBannerConfigSchema, alertBannerDemoData };\nconst ALERT_TONES = ['info', 'pos', 'warn', 'danger'];\n/**\n * Default severity vocabulary — the common spellings a real `severity`/`level`\n * column uses. Config `severityMap` overrides it per instance.\n */\nconst DEFAULT_SEVERITY_TONE = {\n info: 'info',\n notice: 'info',\n success: 'pos',\n ok: 'pos',\n pos: 'pos',\n warn: 'warn',\n warning: 'warn',\n danger: 'danger',\n error: 'danger',\n critical: 'danger',\n fatal: 'danger',\n};\nfunction toneOf(severity, map) {\n if (severity === undefined)\n return 'info';\n const mapped = map?.[severity] ?? DEFAULT_SEVERITY_TONE[severity.toLowerCase()];\n return mapped !== undefined && ALERT_TONES.includes(mapped) ? mapped : 'info';\n}\nexport function AlertBannerView({ severity, lead, message, ctaLabel, severityMap, dismissible = false, dismissLabel, onCta, testId, }) {\n const [dismissed, setDismissed] = useState(false);\n if (dismissed)\n return null;\n const tone = toneOf(severity, severityMap);\n // The annex leads with the stat when there is one, else the message carries\n // the title line — an Alert always needs a title.\n const title = lead ?? message ?? '';\n const body = lead === undefined ? undefined : message;\n return (_jsxs(\"div\", { className: \"relative px-4 pb-4\", children: [_jsx(Alert, { \"data-widget\": \"alert-banner\", \"data-severity\": severity ?? 'info', \"data-testid\": testId, tone: tone, \n // `warn`/`danger` callouts appear in response to a state change, so they\n // announce assertively; informational ones stay polite.\n role: tone === 'danger' || tone === 'warn' ? 'alert' : 'status', title: title, ...(body === undefined ? {} : { body }), ...(ctaLabel === undefined\n ? {}\n : {\n action: (_jsx(Button, { size: \"sm\", variant: \"ghost\", onClick: () => onCta?.(), children: ctaLabel })),\n }), className: dismissible ? 'pe-11' : undefined }), dismissible && (_jsx(IconButton, { size: \"sm\", label: dismissLabel ?? 'Dismiss', \"data-part\": \"alert-dismiss\", onClick: () => setDismissed(true), className: \"absolute end-6 top-2\", children: _jsx(X, { className: \"size-3.5\" }) }))] }));\n}\nexport function AlertBannerWidget({ config, data, onEvent }) {\n const row = recordRowOf(data);\n if (row === null)\n return null;\n const href = stringField(row, config.ctaHrefField) ?? config.href;\n const ctaLabel = stringField(row, config.ctaLabelField);\n return (_jsx(AlertBannerView, { severity: stringField(row, config.severityField), lead: stringField(row, config.leadField), message: stringField(row, config.messageField), ...(ctaLabel === undefined || href === undefined ? {} : { ctaLabel }), severityMap: config.severityMap, dismissible: config.dismissible, dismissLabel: config.dismissLabel, onCta: href === undefined ? undefined : () => onEvent({ type: 'drill-through', href }), testId: config.testId }));\n}\n//# sourceMappingURL=AlertBanner.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `autosave-indicator` (annex §12) — header pill cycling warn-dot \"Unsaved\n * changes\" → spinner \"Saving…\" → green check \"All changes saved\", stamping the\n * updated time. Bound to the host document's `{dirty, saving, savedAt}` state\n * (Invoice Builder, Report Builder, Notification Settings).\n *\n * Wraps @adminium/ui's `AutosaveIndicator` (which owns the pill, the fade\n * transition, and the polite live region). The widget is PURELY a projection of\n * bound state — it never debounces or saves; `config.debounceMs` only documents\n * the host's window for the info popover (04 §4).\n */\nimport { AutosaveIndicator, MonoText } from '@adminium/ui';\nimport { booleanField, formatStamp, numberField, recordRowOf } from './system-lib.js';\nimport { autosaveIndicatorConfigSchema, autosaveIndicatorDemoData } from './system-config.js';\nexport { autosaveIndicatorConfigSchema, autosaveIndicatorDemoData };\n/**\n * Collapse the bound `{dirty, saving, error, savedAt}` flags into one phase.\n * Precedence is deliberate and matches the annex's cycle: an in-flight save wins\n * over dirtiness (the host sets `dirty` false only on commit), and a failure\n * wins over everything so a silent data-loss state is impossible.\n */\nexport function autosaveStatusOf(input) {\n if (input.error === true)\n return 'error';\n if (input.saving === true)\n return 'saving';\n if (input.dirty === true)\n return 'dirty';\n if (input.savedAt !== undefined)\n return 'saved';\n return 'idle';\n}\nexport function AutosaveIndicatorView({ status, savedAt, showStamp = true, locale, dirtyLabel, savingLabel, savedLabel, errorLabel, testId, }) {\n const stamp = showStamp && status === 'saved' ? formatStamp(savedAt, locale) : undefined;\n return (_jsxs(\"div\", { className: \"flex h-full items-center gap-2 px-4 pb-4\", \"data-widget\": \"autosave-indicator\", \"data-testid\": testId, children: [_jsx(AutosaveIndicator, { status: status, dirtyLabel: dirtyLabel ?? 'Unsaved changes', savingLabel: savingLabel ?? 'Saving…', savedLabel: savedLabel ?? 'All changes saved', errorLabel: errorLabel ?? \"Couldn't save\" }), stamp !== undefined && _jsx(MonoText, { className: \"text-caption text-fg-subtle\", children: stamp })] }));\n}\nexport function AutosaveIndicatorWidget({ config, data }) {\n const row = recordRowOf(data);\n const savedAt = row === null ? undefined : numberField(row, config.savedAtField);\n const status = row === null\n ? 'idle'\n : autosaveStatusOf({\n dirty: booleanField(row, config.dirtyField),\n saving: booleanField(row, config.savingField),\n error: booleanField(row, config.errorField),\n savedAt,\n });\n return (_jsx(AutosaveIndicatorView, { status: status, savedAt: savedAt, showStamp: config.showStamp, locale: config.format?.locale, dirtyLabel: config.dirtyLabel, savingLabel: config.savingLabel, savedLabel: config.savedLabel, errorLabel: config.errorLabel, testId: config.testId }));\n}\n//# sourceMappingURL=AutosaveIndicatorWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `connection-status` (annex §12) — spinner→success banner (pos-soft, check\n * circle) for connect/test flows, with an optional per-row Test action that\n * re-issues the check. Evidence: Adminium Console, Data Connections.\n *\n * The widget is a projection of bound `{state, host, detail}` — it never runs the\n * check itself. Test emits a `mutate` intent the host executes (04 §2.1), which\n * is what re-issues the probe and pushes a new payload back down.\n */\nimport { Button, MonoText, Spinner, cn } from '@adminium/ui';\nimport { CheckCircle2, Plug, XCircle } from 'lucide-react';\nimport { bindingSourceOf, oneOf, recordRowOf, stringField } from './system-lib.js';\nimport { CONNECTION_STATES, connectionStatusConfigSchema, connectionStatusDemoData } from './system-config.js';\nexport { connectionStatusConfigSchema, connectionStatusDemoData };\nconst STATE_SHELL = {\n idle: 'bg-surface-2 text-fg-muted',\n connecting: 'bg-info-soft text-info',\n connected: 'bg-pos-soft text-pos',\n failed: 'bg-danger-soft text-danger',\n};\n/** Developer fallbacks (English) — the dashboard passes translated copy via `messages`. */\nconst DEFAULT_MESSAGES = {\n idle: 'Not connected',\n connecting: 'Connecting…',\n connected: 'Connected',\n failed: \"Couldn't connect\",\n};\nexport function ConnectionStatusView({ state, host, detail, messages, testable = false, testLabel, onTest, testId, }) {\n const headline = messages?.[state] ?? DEFAULT_MESSAGES[state];\n return (_jsx(\"div\", { className: \"px-4 pb-4\", children: _jsxs(\"div\", { \"data-widget\": \"connection-status\", \"data-state\": state, \"data-testid\": testId, \n // A connect probe resolving is a status change worth announcing, but not\n // an interruption — polite, and only once it settles.\n role: \"status\", \"aria-live\": \"polite\", className: cn('flex items-center gap-3 rounded-lg px-3.5 py-3', STATE_SHELL[state]), children: [_jsx(\"span\", { \"aria-hidden\": \"true\", className: \"flex size-5 shrink-0 items-center justify-center\", children: state === 'connecting' ? (_jsx(Spinner, { size: \"sm\", className: \"size-4\" })) : state === 'connected' ? (_jsx(CheckCircle2, { className: \"size-4\" })) : state === 'failed' ? (_jsx(XCircle, { className: \"size-4\" })) : (_jsx(Plug, { className: \"size-4\" })) }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"p\", { className: \"truncate text-body-sm font-bold\", children: headline }), host !== undefined && (_jsx(MonoText, { \"data-part\": \"connection-host\", className: \"block truncate text-caption opacity-80\", children: host })), detail !== undefined && _jsx(\"p\", { className: \"truncate text-caption opacity-80\", children: detail })] }), testable && onTest !== undefined && (_jsx(Button, { size: \"sm\", variant: \"ghost\", \"data-part\": \"connection-test\", disabled: state === 'connecting', onClick: onTest, children: testLabel ?? 'Test' }))] }) }));\n}\nexport function ConnectionStatusWidget({ config, data, onEvent }) {\n const row = recordRowOf(data);\n const state = oneOf(row === null ? undefined : stringField(row, config.stateField), CONNECTION_STATES, 'idle');\n const target = bindingSourceOf(config.binding);\n return (_jsx(ConnectionStatusView, { state: state, host: row === null ? undefined : stringField(row, config.hostField), detail: row === null ? undefined : stringField(row, config.detailField), messages: config.messages, testable: config.testable, testLabel: config.testLabel, \n // Unbound (demo) instances have nowhere to send the intent — the host\n // owns the probe, so without a binding the action would be a no-op.\n onTest: target === null\n ? undefined\n : () => onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: { action: 'test-connection' },\n }), testId: config.testId }));\n}\n//# sourceMappingURL=ConnectionStatus.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `diagnostics-readout` (annex §12) — compact terminal card of key/value\n * connection-check results with semantic-toned status values + a last-checked\n * timestamp. Evidence: System States.\n *\n * Wraps @adminium/ui's `KeyValueList`/`KeyValueRow` (which own the row rhythm and\n * the mono value treatment); this file adds the record binding, the per-check\n * value→tone map, and the freshness stamp.\n */\nimport { KeyValueRow, MonoText, cn } from '@adminium/ui';\nimport { formatStamp, numberField, recordRowOf, stringField } from './system-lib.js';\nimport { DEFAULT_DIAGNOSTIC_CHECKS, diagnosticsReadoutConfigSchema, diagnosticsReadoutDemoData, } from './system-config.js';\nexport { diagnosticsReadoutConfigSchema, diagnosticsReadoutDemoData, DEFAULT_DIAGNOSTIC_CHECKS };\n/** Value tone classes — CSS variables only (04 hard rule: no raw hex). */\nconst TONE_TEXT = {\n neutral: 'text-fg-muted',\n accent: 'text-accent',\n pos: 'text-pos',\n warn: 'text-warn',\n danger: 'text-danger',\n info: 'text-info',\n};\nfunction toneOf(value, tones) {\n const mapped = value === undefined ? undefined : tones?.[value];\n return mapped !== undefined && mapped in TONE_TEXT ? mapped : 'neutral';\n}\nexport function DiagnosticsReadoutView({ checks, values, checkedAt, checkedAtLabel, locale, testId, }) {\n const stamp = formatStamp(checkedAt, locale);\n // Only render checks the payload actually answered — a readout that lists\n // every configured probe as blank reads as \"broken\", not \"not run\".\n const present = checks.filter((check) => values[check.key] !== undefined);\n return (_jsxs(\"div\", { \"data-widget\": \"diagnostics-readout\", \"data-testid\": testId, className: \"flex h-full flex-col gap-2 overflow-auto px-4 pb-4\", children: [_jsx(\"div\", { className: \"rounded-lg border border-border bg-surface-2 px-3 py-1.5\", children: present.map((check) => {\n const value = values[check.key];\n const tone = toneOf(value, check.tones);\n return (_jsx(KeyValueRow, { \"data-part\": \"diagnostic-row\", \"data-check\": check.key, \"data-tone\": tone, label: check.label ?? check.key, children: check.mono === false ? (_jsx(\"span\", { className: cn('text-body-sm font-semibold', TONE_TEXT[tone]), children: value })) : (_jsx(MonoText, { className: cn('text-body-sm font-semibold', TONE_TEXT[tone]), children: value })) }, check.key));\n }) }), stamp !== undefined && (_jsxs(\"p\", { className: \"text-caption text-fg-subtle\", children: [checkedAtLabel ?? 'Last checked', \" \", _jsx(MonoText, { children: stamp })] }))] }));\n}\nexport function DiagnosticsReadoutWidget({ config, data }) {\n const row = recordRowOf(data);\n const checks = config.checks ?? DEFAULT_DIAGNOSTIC_CHECKS;\n const values = {};\n if (row !== null) {\n for (const check of checks)\n values[check.key] = stringField(row, check.key);\n }\n return (_jsx(DiagnosticsReadoutView, { checks: checks, values: values, checkedAt: row === null ? undefined : numberField(row, config.checkedAtField), checkedAtLabel: config.checkedAtLabel, locale: config.format?.locale, testId: config.testId }));\n}\n//# sourceMappingURL=DiagnosticsReadout.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AlertTriangle, Ban, CheckCircle2, CircleAlert, Clock, Compass, Database, FileQuestion, Inbox, Loader2, Lock, Plug, Search, ServerCrash, Settings, ShieldAlert, Wifi, WifiOff, Wrench, } from 'lucide-react';\nimport { STATE_HERO_VIEWS } from './system-lib.js';\n/**\n * The `system` family's CLOSED glyph vocabulary (annex §12). Separated from\n * `system-lib.ts` so that module stays JSX-free and the registry-metadata graph\n * (`system-config.ts`) never pulls `lucide-react` into the eager chunk\n * (04 §2.3; the `media/media-icons` + `feeds/feed-icons` convention).\n *\n * WHY A CLOSED MAP: config carries an icon NAME (a string that survives JSON\n * round-trips into the page manifest), never a component. Resolving it through a\n * fixed map means a stored config — or a payload — can never make a widget\n * render an arbitrary icon, and the family's lucide imports stay statically\n * analysable for tree-shaking.\n */\nconst SYSTEM_ICONS = {\n alert: _jsx(CircleAlert, {}),\n ban: _jsx(Ban, {}),\n check: _jsx(CheckCircle2, {}),\n clock: _jsx(Clock, {}),\n compass: _jsx(Compass, {}),\n database: _jsx(Database, {}),\n inbox: _jsx(Inbox, {}),\n lock: _jsx(Lock, {}),\n plug: _jsx(Plug, {}),\n search: _jsx(Search, {}),\n settings: _jsx(Settings, {}),\n shield: _jsx(ShieldAlert, {}),\n spinner: _jsx(Loader2, {}),\n 'server-crash': _jsx(ServerCrash, {}),\n warning: _jsx(AlertTriangle, {}),\n wifi: _jsx(Wifi, {}),\n 'wifi-off': _jsx(WifiOff, {}),\n wrench: _jsx(Wrench, {}),\n question: _jsx(FileQuestion, {}),\n};\n/** Resolve a config icon name to a glyph; unknown/absent names render nothing. */\nexport function systemIcon(name) {\n if (name === undefined)\n return undefined;\n return SYSTEM_ICONS[name];\n}\n/** The built-in `state-hero` glyph per view id (annex §12 `stateMap` defaults). */\nconst STATE_HERO_ICON = {\n '404': _jsx(Compass, {}),\n '500': _jsx(ServerCrash, {}),\n offline: _jsx(WifiOff, {}),\n forbidden: _jsx(Lock, {}),\n maintenance: _jsx(Wrench, {}),\n 'conn-error': _jsx(Database, {}),\n};\nexport function stateHeroIcon(view) {\n return STATE_HERO_ICON[view];\n}\n/** Every id the closed vocabulary accepts — used by the family's tests. */\nexport const SYSTEM_ICON_NAMES = Object.keys(SYSTEM_ICONS);\nexport { STATE_HERO_VIEWS };\n//# sourceMappingURL=system-icons.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `empty-state` (annex §12) — centred card content: 56px tone-soft icon tile,\n * bold title, muted body ≤36ch, primary/secondary actions. Variants: plain, CTA,\n * upload drop-zone.\n *\n * Registered as a widget in its own right because the annex lists it once and\n * page templates place it directly (a hub page's \"nothing here yet\" body). Note\n * this is DISTINCT from `WidgetFrame`'s built-in empty state, which every other\n * widget gets automatically from its `isEmpty` predicate (04 §4) — that one is\n * frame chrome, this one is placeable content.\n *\n * Wraps @adminium/ui's `EmptyState`; this file adds the registry config surface\n * (variant, glyph name, action hrefs) and routes the CTAs through `onEvent` so\n * the widget never navigates itself (04 §2.1).\n */\nimport { Button, EmptyState, IconTile } from '@adminium/ui';\nimport { UploadCloud } from 'lucide-react';\nimport { systemIcon } from './system-icons.js';\nimport { uiToneOf } from './system-lib.js';\nimport { emptyStateConfigSchema, emptyStateDemoData } from './system-config.js';\nexport { emptyStateConfigSchema, emptyStateDemoData };\nexport function EmptyStateWidget({ config, onEvent }) {\n const isDropzone = config.variant === 'dropzone';\n const showActions = config.variant !== 'plain';\n const go = (href) => {\n if (href !== undefined && href !== '')\n onEvent({ type: 'drill-through', href });\n };\n const icon = isDropzone ? _jsx(UploadCloud, {}) : systemIcon(config.glyph);\n const actions = showActions && (config.primaryLabel !== undefined || config.secondaryLabel !== undefined) ? (_jsxs(_Fragment, { children: [config.primaryLabel !== undefined && (_jsx(Button, { size: \"sm\", onClick: () => go(config.primaryHref), children: config.primaryLabel })), config.secondaryLabel !== undefined && (_jsx(Button, { size: \"sm\", variant: \"ghost\", onClick: () => go(config.secondaryHref), children: config.secondaryLabel }))] })) : undefined;\n const body = (_jsx(EmptyState, { \"data-widget\": \"empty-state\", \"data-variant\": config.variant, \"data-testid\": config.testId, compact: config.compact, preset: config.preset, tone: uiToneOf(config.tone), ...(icon === undefined ? {} : { icon }), \n // `heading`, not `title`: `title` is the WidgetFrame header on every widget.\n title: config.heading ?? '', ...(config.body === undefined ? {} : { body: config.body }), ...(actions === undefined ? {} : { actions }) }));\n if (!isDropzone)\n return _jsx(\"div\", { className: \"flex h-full items-center justify-center px-4 pb-4\", children: body });\n // Drop-zone variant: the annex's dashed-border target framing around the same\n // centred content. The zone is presentational here — `upload-dropzone` (annex\n // §8, media family) owns real file intake.\n return (_jsx(\"div\", { className: \"flex h-full items-center justify-center px-4 pb-4\", children: _jsx(\"div\", { className: \"flex h-full w-full items-center justify-center rounded-xl border-2 border-dashed border-border-strong\", children: body }) }));\n}\n/** Re-exported for template composition + stories. */\nexport { EmptyState, IconTile };\n//# sourceMappingURL=EmptyStateWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `progress-log-console` (annex §12) — terminal-style streaming checklist: mono\n * log lines, done lines get a green check, the active line gets a spinner, with\n * a paired determinate progress bar + mono %. Variants: `live` (streamed server\n * events) and `static-terminal` (the CLI-simulation card). Evidence: Connect\n * Database, See It In Action, API & Backend, Adminium Landing.\n *\n * This is where long-running server tasks (introspection, import, export,\n * deploy) surface in the generated app (annex §12 auto-instantiation), so it\n * accepts BOTH `record-list` (a finished run's rows) and `stream` (a live WS\n * channel's append-only snapshot) — `capabilities.realtime` marks it bindable\n * over WS (04 §5.3).\n *\n * Built fresh rather than lifted from `apps/dashboard/src/studio/connect/\n * LogConsole.tsx`: a widget may never import an app (04 §2.1), and the annex's\n * contract adds the progress bar + variants the Studio console does not have.\n * The Studio wizard keeps its own console.\n */\nimport { EmptyState, MonoText, ProgressBar, Spinner, cn } from '@adminium/ui';\nimport { Check, CircleAlert, TriangleAlert } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { clampPct, numberField, oneOf, recordRowsOf, stringField } from './system-lib.js';\nimport { LOG_LINE_KINDS, progressLogConsoleConfigSchema, progressLogConsoleDemoData } from './system-config.js';\nexport { progressLogConsoleConfigSchema, progressLogConsoleDemoData };\nconst KIND_TEXT = {\n info: 'text-fg-muted',\n ok: 'text-fg-muted',\n warn: 'text-warn',\n error: 'text-danger',\n running: 'text-fg',\n};\nfunction LineGlyph({ kind }) {\n if (kind === 'ok')\n return _jsx(Check, { className: \"size-3.5 text-pos\" });\n if (kind === 'error')\n return _jsx(CircleAlert, { className: \"size-3.5 text-danger\" });\n if (kind === 'warn')\n return _jsx(TriangleAlert, { className: \"size-3.5 text-warn\" });\n if (kind === 'running')\n return _jsx(Spinner, { size: \"sm\", className: \"size-3.5\" });\n return _jsx(\"span\", { className: \"size-1 rounded-full bg-fg-subtle\" });\n}\n/**\n * Project an untrusted payload onto the console's line model. Keeps the LAST\n * `maxLines` (a long run's tail is the interesting part) and defaults an\n * unrecognised `kind` to `info` rather than dropping the line — losing a log\n * line to a vocabulary mismatch would be worse than rendering it plainly.\n */\nexport function logLinesOf(data, config) {\n const rows = recordRowsOf(data);\n const tail = rows.slice(Math.max(0, rows.length - config.maxLines));\n const lines = [];\n for (const [index, row] of tail.entries()) {\n const text = stringField(row, config.textField);\n if (text === undefined)\n continue;\n const pct = numberField(row, config.pctField);\n lines.push({\n id: stringField(row, 'id') ?? `line-${index}`,\n kind: oneOf(row[config.kindField], LOG_LINE_KINDS, 'info'),\n text,\n ...(pct === undefined ? {} : { pct: clampPct(pct) }),\n });\n }\n return lines;\n}\n/**\n * The bar value: the newest line carrying a `pct` wins; with none, progress is\n * derived from how many lines have completed (annex §12: \"may be derived from\n * step index\").\n */\nexport function progressPctOf(lines) {\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const pct = lines[index]?.pct;\n // Clamp here too, not only in `logLinesOf`: this is exported and callers\n // (templates, tests, a host computing its own lines) can hand in raw values,\n // and an unclamped pct would overflow the bar's track.\n if (pct !== undefined)\n return clampPct(pct);\n }\n if (lines.length === 0)\n return 0;\n const done = lines.filter((line) => line.kind !== 'running').length;\n return clampPct((done / lines.length) * 100);\n}\nexport function ProgressLogConsoleView({ lines, variant = 'live', showProgress = true, follow = true, pct, a11yLabel, progressLabel, emptyTitle, emptyBody, testId, }) {\n const endRef = useRef(null);\n const lineCount = lines.length;\n useEffect(() => {\n if (!follow)\n return;\n // `scrollIntoView` is absent in happy-dom and older engines — optional-call\n // it so the console degrades to \"no auto-scroll\" instead of throwing into\n // the WidgetErrorBoundary.\n endRef.current?.scrollIntoView?.({ block: 'nearest' });\n }, [lineCount, follow]);\n if (lineCount === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"nothing-scheduled\", title: emptyTitle ?? 'Nothing to report yet', body: emptyBody ?? 'Log lines appear here once the task starts.' }));\n }\n const value = pct ?? progressPctOf(lines);\n return (_jsxs(\"div\", { \"data-widget\": \"progress-log-console\", \"data-variant\": variant, \"data-testid\": testId, className: \"flex h-full flex-col gap-2 px-4 pb-4\", children: [_jsxs(\"div\", { \n // A streaming log is a log landmark, announced politely: assertive would\n // interrupt a screen-reader user on every appended line.\n role: \"log\", \"aria-label\": a11yLabel ?? 'Progress log', \"aria-live\": \"polite\", className: cn('min-h-0 flex-1 overflow-y-auto rounded-lg border border-border p-3.5 font-mono text-caption leading-6', variant === 'static-terminal' ? 'bg-surface-3' : 'bg-surface-2'), children: [lines.map((line) => (_jsxs(\"div\", { \"data-part\": \"log-line\", \"data-kind\": line.kind, className: \"flex items-start gap-2\", children: [_jsx(\"span\", { \"aria-hidden\": \"true\", className: \"mt-1 flex size-4 shrink-0 items-center justify-center\", children: _jsx(LineGlyph, { kind: line.kind }) }), _jsx(\"span\", { className: cn('min-w-0 break-all', KIND_TEXT[line.kind]), children: line.text })] }, line.id))), _jsx(\"div\", { ref: endRef })] }), showProgress && (_jsxs(\"div\", { className: \"flex items-center gap-2\", children: [_jsx(ProgressBar, { value: value, max: 100, tone: value >= 100 ? 'pos' : 'accent', size: \"sm\", label: progressLabel ?? 'Progress', className: \"flex-1\" }), _jsxs(MonoText, { \"data-part\": \"log-pct\", className: \"shrink-0 text-caption font-semibold text-fg-muted\", children: [Math.round(value), \"%\"] })] }))] }));\n}\nexport function ProgressLogConsoleWidget({ config, data }) {\n const lines = logLinesOf(data, config);\n return (_jsx(ProgressLogConsoleView, { lines: lines, variant: config.variant, showProgress: config.showProgress, follow: config.follow, a11yLabel: config.a11yLabel, progressLabel: config.progressLabel, emptyTitle: config.emptyTitle, emptyBody: config.emptyBody, testId: config.testId }));\n}\n//# sourceMappingURL=ProgressLogConsole.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `state-hero` (annex §12) — parameterized full-page status: optional giant mono\n * HTTP code, tone-tinted icon chip, title, body, primary/secondary CTAs. The 404\n * variant adds a floating decorative ornament + quick-link chips.\n *\n * Built fresh in the widgets package rather than lifted from\n * `apps/dashboard/src/states/StateHero.tsx`: the app's hero is bound to that\n * app's `SystemStateSpec`/`stateMap` module, its router, and its `t()` — a widget\n * may never import an app (04 §2.1), and the annex's contract here is the\n * generic `stateMap` keyed by view id. The app keeps its own shell hero.\n */\nimport { Button, MonoText, cn } from '@adminium/ui';\nimport { stateHeroIcon, systemIcon } from './system-icons.js';\nimport { oneOf, recordRowOf, stringField } from './system-lib.js';\nimport { STATE_HERO_VIEWS, stateHeroConfigSchema, stateHeroDemoData } from './system-config.js';\nexport { stateHeroConfigSchema, stateHeroDemoData };\n/** Tone-soft glyph chip classes — CSS variables only, no raw hex (04 hard rule). */\nconst TONE_TILE = {\n neutral: 'bg-surface-3 text-fg-muted',\n accent: 'bg-accent-soft text-accent',\n pos: 'bg-pos-soft text-pos',\n warn: 'bg-warn-soft text-warn',\n danger: 'bg-danger-soft text-danger',\n info: 'bg-info-soft text-info',\n};\n/**\n * Built-in copy per view id. Config `stateMap` overrides any field; these are\n * developer fallbacks in English (widgets are locale-agnostic — 04 §2), and the\n * dashboard passes translated copy through `stateMap`.\n */\nconst DEFAULT_STATE_MAP = {\n '404': {\n tone: 'accent',\n code: '404',\n title: 'This page took a wrong turn',\n body: 'The page you are looking for was moved, renamed, or never existed.',\n primaryLabel: 'Back to dashboard',\n primaryHref: '/',\n },\n '500': {\n tone: 'danger',\n code: '500',\n title: 'Something broke on our side',\n body: 'The error was logged and the team notified. Trying again often works.',\n primaryLabel: 'Try again',\n },\n offline: {\n tone: 'warn',\n title: 'You are offline',\n body: 'Check your connection — the dashboard reconnects automatically.',\n primaryLabel: 'Retry',\n },\n forbidden: {\n tone: 'warn',\n code: '403',\n title: 'You do not have access',\n body: 'Ask a workspace admin to grant you permission for this page.',\n primaryLabel: 'Back to dashboard',\n primaryHref: '/',\n },\n maintenance: {\n tone: 'info',\n title: 'Down for maintenance',\n body: 'We are making things better. This usually takes a few minutes.',\n },\n 'conn-error': {\n tone: 'danger',\n title: 'Cannot reach the database',\n body: 'The connection was refused or timed out. Check the connection settings.',\n primaryLabel: 'Test connection',\n primaryHref: '/studio',\n },\n};\n/** Merge the built-in entry for `view` with any config override. */\nexport function resolveStateHeroEntry(view, stateMap) {\n const base = DEFAULT_STATE_MAP[view];\n const override = stateMap?.[view];\n if (override === undefined)\n return base;\n // Only defined override fields win — a partial entry keeps the built-in rest.\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n if (value !== undefined)\n merged[key] = value;\n }\n return merged;\n}\nexport function StateHeroView({ view, entry, ornament = false, quickLinks, requestId, onNavigate, testId, }) {\n const tone = entry.tone;\n const icon = systemIcon(entry.icon) ?? stateHeroIcon(view);\n return (_jsxs(\"div\", { \"data-widget\": \"state-hero\", \"data-state\": view, \"data-tone\": tone, \"data-testid\": testId, className: \"relative flex min-h-full w-full flex-col items-center justify-center overflow-hidden px-6 py-10 text-center\", children: [ornament && (_jsx(\"div\", { \"aria-hidden\": \"true\", className: \"pointer-events-none absolute inset-0 flex items-center justify-center\", children: _jsx(\"div\", { className: cn('size-64 rounded-full opacity-[0.07] blur-3xl', TONE_TILE[tone]) }) })), _jsxs(\"div\", { className: \"relative flex flex-col items-center gap-4\", children: [_jsxs(\"div\", { className: \"relative flex items-center justify-center\", children: [entry.code !== undefined && (_jsx(MonoText, { \"aria-hidden\": \"true\", className: \"absolute select-none text-[80px] font-bold leading-none text-fg opacity-[0.06]\", children: entry.code })), _jsx(\"span\", { \"data-part\": \"state-glyph\", className: cn('relative flex size-16 items-center justify-center rounded-2xl [&_svg]:size-7', TONE_TILE[tone]), children: icon })] }), entry.title !== undefined && _jsx(\"h2\", { className: \"text-title-md font-bold text-fg\", children: entry.title }), entry.body !== undefined && _jsx(\"p\", { className: \"max-w-[36ch] text-body-sm text-fg-muted\", children: entry.body }), (entry.primaryLabel !== undefined || entry.secondaryLabel !== undefined) && (_jsxs(\"div\", { className: \"flex flex-wrap items-center justify-center gap-2\", children: [entry.primaryLabel !== undefined && (_jsx(Button, { size: \"sm\", onClick: () => entry.primaryHref !== undefined && onNavigate?.(entry.primaryHref), children: entry.primaryLabel })), entry.secondaryLabel !== undefined && (_jsx(Button, { size: \"sm\", variant: \"ghost\", onClick: () => entry.secondaryHref !== undefined && onNavigate?.(entry.secondaryHref), children: entry.secondaryLabel }))] })), quickLinks !== undefined && quickLinks.length > 0 && (_jsx(\"ul\", { className: \"m-0 flex list-none flex-wrap items-center justify-center gap-1.5 p-0\", children: quickLinks.map((link) => (_jsx(\"li\", { children: _jsx(\"button\", { type: \"button\", \"data-part\": \"quick-link\", onClick: () => onNavigate?.(link.href), className: \"rounded-full bg-surface-2 px-3 py-1 text-caption font-semibold text-fg-muted hover:bg-surface-3 hover:text-fg\", children: link.label }) }, link.href))) })), requestId !== undefined && (_jsx(MonoText, { className: \"text-caption text-fg-subtle\", children: requestId }))] })] }));\n}\nexport function StateHeroWidget({ config, data, onEvent }) {\n const row = recordRowOf(data);\n // The payload may steer which view renders (a health check returning\n // `conn-error`); config.view is the default and the story/demo path.\n const bound = row === null ? undefined : stringField(row, config.viewField);\n const view = oneOf(bound, STATE_HERO_VIEWS, config.view);\n return (_jsx(StateHeroView, { view: view, entry: resolveStateHeroEntry(view, config.stateMap), ornament: config.ornament, quickLinks: config.quickLinks, requestId: config.requestId, onNavigate: (href) => onEvent({ type: 'drill-through', href }), testId: config.testId }));\n}\n//# sourceMappingURL=StateHero.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `status-banner-hero` (annex §12) — state-driven hero whose bg/border/icon/\n * title derive from the WORST child state (up/degraded/down), with an inline\n * end-aligned mono KPI trio. Evidence: Status Page.\n *\n * The derivation is the whole point of the widget: it binds to the SERVICE LIST\n * (`record-list`), not to a pre-computed status, so one degraded service is\n * enough to flip the hero — the page can never claim \"All systems operational\"\n * while a row says otherwise.\n */\nimport { MonoText, cn } from '@adminium/ui';\nimport { AlertTriangle, CheckCircle2, XCircle } from 'lucide-react';\nimport { numberField, oneOf, recordRowsOf, stringField, worstServiceState } from './system-lib.js';\nimport { SERVICE_STATES, statusBannerHeroConfigSchema, statusBannerHeroDemoData } from './system-config.js';\nexport { statusBannerHeroConfigSchema, statusBannerHeroDemoData };\n/** Per-state hero shell — tone-soft bg + `color-mix`-free tone border, CSS vars only. */\nconst STATE_SHELL = {\n up: 'border-pos/30 bg-pos-soft',\n degraded: 'border-warn/30 bg-warn-soft',\n down: 'border-danger/30 bg-danger-soft',\n};\nconst STATE_GLYPH = {\n up: 'text-pos',\n degraded: 'text-warn',\n down: 'text-danger',\n};\n/** Developer fallbacks (English); the dashboard passes translated copy via config. */\nconst DEFAULT_TITLES = {\n up: 'All systems operational',\n degraded: 'Degraded performance',\n down: 'Major outage',\n};\nconst DEFAULT_BODIES = {\n up: 'Every monitored service is responding normally.',\n degraded: 'Some services are slower than usual. We are investigating.',\n down: 'One or more services are unavailable. We are on it.',\n};\nfunction StateGlyph({ state }) {\n if (state === 'up')\n return _jsx(CheckCircle2, { className: \"size-5\" });\n if (state === 'degraded')\n return _jsx(AlertTriangle, { className: \"size-5\" });\n return _jsx(XCircle, { className: \"size-5\" });\n}\nexport function StatusBannerHeroView({ state, stats, title, body, testId }) {\n const shown = (stats ?? []).filter((stat) => stat.value !== undefined);\n return (_jsx(\"div\", { className: \"px-4 pb-4\", children: _jsxs(\"div\", { \"data-widget\": \"status-banner-hero\", \"data-state\": state, \"data-testid\": testId, role: \"status\", \"aria-live\": \"polite\", className: cn('flex flex-wrap items-center gap-4 rounded-xl border px-4 py-3.5', STATE_SHELL[state]), children: [_jsx(\"span\", { \"aria-hidden\": \"true\", className: cn('flex shrink-0 items-center justify-center', STATE_GLYPH[state]), children: _jsx(StateGlyph, { state: state }) }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"p\", { className: \"truncate text-body font-bold text-fg\", children: title ?? DEFAULT_TITLES[state] }), _jsx(\"p\", { className: \"truncate text-caption text-fg-muted\", children: body ?? DEFAULT_BODIES[state] })] }), shown.length > 0 && (_jsx(\"dl\", { \"data-part\": \"hero-stats\", className: \"m-0 flex shrink-0 items-center gap-5\", children: shown.map((stat) => (_jsxs(\"div\", { className: \"text-end\", children: [_jsx(\"dd\", { className: \"m-0\", children: _jsxs(MonoText, { className: \"text-body font-bold text-fg\", children: [stat.value, stat.unit ?? ''] }) }), _jsx(\"dt\", { className: \"text-caption text-fg-subtle\", children: stat.label ?? stat.key })] }, stat.key))) }))] }) }));\n}\nexport function StatusBannerHeroWidget({ config, data }) {\n const rows = recordRowsOf(data);\n const states = rows.map((row) => oneOf(row[config.stateField], SERVICE_STATES, 'up'));\n const state = worstServiceState(states);\n // The KPI trio reads off the FIRST row (annex §12: the hero's stats are the\n // roll-up the payload carries alongside the service list).\n const first = rows[0];\n const stats = (config.stats ?? []).map((stat) => ({\n ...stat,\n value: first === undefined ? undefined : numberField(first, stat.key),\n }));\n return (_jsx(StatusBannerHeroView, { state: state, stats: stats, title: config.titles?.[state], body: config.bodies?.[state], testId: config.testId }));\n}\n/** Re-exported for template composition + tests. */\nexport { worstServiceState, stringField };\n//# sourceMappingURL=StatusBannerHero.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * `status-pill` (annex §12) — the UNIVERSAL enum renderer: soft tone bg,\n * colored dot, label. Every enum column in the generated app registers one of\n * these with an LLM/heuristic-assigned tone map (annex §12 auto-instantiation:\n * `active|paid|success|healthy`→pos, `pending|trial|warn`→warn,\n * `failed|error|churned|breached`→danger).\n *\n * Renders @adminium/ui's `Badge` — the primitive behind `<StatusPill>` — and\n * reuses the shared `statusTone` registry for the tone vocabulary and the\n * `DEFAULT_STATUS_TONES` fallback map. It binds `Badge` rather than `StatusPill`\n * for one reason: `StatusPillProps` is `Omit<BadgeProps, 'tone' | 'dot' | …>`\n * and hard-codes `dot`, but the annex exposes `dot` as widget config, so the\n * dot-less variant is only reachable through the primitive.\n */\nimport { Badge, statusTone } from '@adminium/ui';\nimport { recordRowOf, stringField } from './system-lib.js';\nimport { statusPillConfigSchema, statusPillDemoData } from './system-config.js';\nexport { statusPillConfigSchema, statusPillDemoData };\nconst TONES = ['neutral', 'accent', 'pos', 'warn', 'danger', 'info'];\nfunction toneOf(value) {\n return value !== undefined && TONES.includes(value) ? value : undefined;\n}\n/**\n * Presentational status pill. `map` overrides the label and/or tone per enum\n * value; anything unmapped falls back to @adminium/ui's shared `statusTone`\n * vocabulary and then to `fallbackTone`, so an unrecognised enum still renders\n * a readable pill rather than nothing.\n */\nexport function StatusPillWidgetView({ status, map, fallbackTone = 'neutral', dot = true, testId }) {\n if (status === undefined || status === '')\n return null;\n const entry = map?.[status];\n const tone = toneOf(entry?.tone) ?? statusTone(status, fallbackTone);\n return (_jsx(Badge, { tone: tone, dot: dot, \"data-widget\": \"status-pill\", \"data-status\": status, \"data-testid\": testId, className: \"align-middle\", children: entry?.label ?? status }));\n}\nexport function StatusPillWidget({ config, data }) {\n const row = recordRowOf(data);\n const status = row === null ? undefined : stringField(row, config.statusField);\n return (_jsx(\"div\", { className: \"flex h-full items-center px-4 pb-4\", children: _jsx(StatusPillWidgetView, { status: status, map: config.map, fallbackTone: config.fallbackTone, dot: config.dot, testId: config.testId }) }));\n}\n//# sourceMappingURL=StatusPill.js.map"],"names":["ALERT_TONES","DEFAULT_SEVERITY_TONE","toneOf","severity","map","mapped","AlertBannerView","lead","message","ctaLabel","severityMap","dismissible","dismissLabel","onCta","testId","dismissed","setDismissed","useState","tone","title","body","_jsxs","_jsx","Alert","Button","IconButton","X","AlertBannerWidget","config","data","onEvent","row","recordRowOf","href","stringField","autosaveStatusOf","input","AutosaveIndicatorView","status","savedAt","showStamp","locale","dirtyLabel","savingLabel","savedLabel","errorLabel","stamp","formatStamp","AutosaveIndicator","MonoText","AutosaveIndicatorWidget","numberField","booleanField","STATE_SHELL","DEFAULT_MESSAGES","ConnectionStatusView","state","host","detail","messages","testable","testLabel","onTest","headline","cn","Spinner","CheckCircle2","XCircle","Plug","ConnectionStatusWidget","oneOf","CONNECTION_STATES","target","bindingSourceOf","TONE_TEXT","value","tones","DiagnosticsReadoutView","checks","values","checkedAt","checkedAtLabel","present","check","KeyValueRow","DiagnosticsReadoutWidget","DEFAULT_DIAGNOSTIC_CHECKS","SYSTEM_ICONS","CircleAlert","Ban","Clock","Compass","Database","Inbox","Lock","Search","Settings","ShieldAlert","Loader2","ServerCrash","AlertTriangle","Wifi","WifiOff","Wrench","FileQuestion","systemIcon","name","STATE_HERO_ICON","stateHeroIcon","view","EmptyStateWidget","isDropzone","showActions","go","icon","UploadCloud","actions","_Fragment","EmptyState","uiToneOf","KIND_TEXT","LineGlyph","kind","Check","TriangleAlert","logLinesOf","rows","recordRowsOf","tail","lines","index","text","pct","LOG_LINE_KINDS","clampPct","progressPctOf","done","line","ProgressLogConsoleView","variant","showProgress","follow","a11yLabel","progressLabel","emptyTitle","emptyBody","endRef","useRef","lineCount","useEffect","ProgressBar","ProgressLogConsoleWidget","TONE_TILE","DEFAULT_STATE_MAP","resolveStateHeroEntry","stateMap","base","override","merged","key","StateHeroView","entry","ornament","quickLinks","requestId","onNavigate","link","StateHeroWidget","bound","STATE_HERO_VIEWS","STATE_GLYPH","DEFAULT_TITLES","DEFAULT_BODIES","StateGlyph","StatusBannerHeroView","stats","shown","stat","StatusBannerHeroWidget","states","SERVICE_STATES","worstServiceState","first","TONES","StatusPillWidgetView","fallbackTone","dot","statusTone","Badge","StatusPillWidget"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{n as B,j as n,E as N,M as b,ar as w,a as D,b as G,T as _,r as V,b9 as M,bZ as U,aW as P,cl as H,cm as K,cn as Z,co as q,cp as J,bd as Q,bc as X}from"./index-PB1II0WV.js";import{S as F}from"./Sparkline-Cvwo368J.js";import{D as O}from"./DeltaPill-dxlsGh-1.js";import"./sparkline-2JUGDrMW.js";import"./stats-BNgXz5BD.js";const R=new Set(["neutral","accent","pos","warn","danger","info"]);function k(e,t="neutral"){return typeof e=="string"&&R.has(e)?e:t}function v(e){return e!==void 0&&e.trim()!==""?e:"en-US"}function A(e){if(Array.isArray(e))return e;if(typeof e=="object"&&e!==null){const t=e;if(Array.isArray(t.data))return t.data;if(Array.isArray(t.rows))return t.rows;if(Array.isArray(t.items))return t.items}return[]}function u(e,t){if(t===void 0)return;const a=e[t];return typeof a=="string"&&a!==""?a:void 0}function j(e,t){if(t===void 0)return;const a=e[t];if(typeof a=="number"&&Number.isFinite(a))return a;if(typeof a=="string"&&a.trim()!==""){const r=Number(a);return Number.isFinite(r)?r:void 0}}function L(e,t){const a=e[t];if(!Array.isArray(a))return;const r=a.filter(i=>typeof i=="number"&&Number.isFinite(i));return r.length>0?r:void 0}function W(e,t,a){return(a?.[e]??t)==="down"?"down":"up"}function E(e){return e===void 0||!Number.isFinite(e)||e===0?"flat":e>0?"up":"down"}function C(e,t){return e===0?!1:t==="up"?e<0:e>0}function Y(e,t,a){return typeof e=="string"&&R.has(e)?e:t===0?"neutral":C(t,a)?"danger":"pos"}function $(e,t,a={}){if(typeof e=="string")return e;if(e===void 0||!Number.isFinite(e))return"—";const r=B(t);if(a.currency!==void 0)return r.currency(e,a.currency);if(a.unit==="%")return r.percent(e/100,{fractionDigits:1});const i=a.compact===!0?r.compact(e):r.number(e);return a.unit===void 0?i:`${i} ${a.unit}`}function z(e,t){if(e===void 0||!Number.isFinite(e))return"—";const r=B(t).percent(Math.abs(e)/100,{fractionDigits:1});return e===0?r:`${e>0?"+":"−"}${r}`}function ee(e,t){return B(t).number(e)}function te(e,t){const a=[...e].sort((l,o)=>o.value-l.value).slice(0,Math.max(1,t)),r=a.reduce((l,o)=>Math.max(l,o.value),0),i=e.reduce((l,o)=>l+(Number.isFinite(o.value)?o.value:0),0);return a.map((l,o)=>({...l,rank:o+1,pct:r>0?Math.round(l.value/r*1e3)/10:0,share:i>0?l.value/i:0}))}function ne(e,t,a){if(a)return e.has(t)?new Set:new Set([t]);const r=new Set(e);return r.has(t)?r.delete(t):r.add(t),r}function ae(e,t){return e===void 0||e===0?"muted":C(e,t)?"danger":"positive"}function re({rows:e,limit:t=6,sparkWidth:a=72,sparkVariant:r="bar",goodDirectionByMetric:i,locale:l,emptyTitle:o,emptyBody:f,testId:x}){const h=v(l),y=e.slice(0,t);return y.length===0?n.jsx(N,{compact:!0,preset:"no-data",title:o??"No metrics to show",body:f??"Metrics will appear here once there is data to summarize."}):n.jsx("ul",{"data-widget":"sparkline-table","data-testid":x,className:"h-full overflow-auto px-2 py-1",children:y.map(s=>{const d=W(s.name,s.goodDirection,i),c=E(s.delta),p=$(s.value,h,{...s.currency===void 0?{}:{currency:s.currency},...s.unit===void 0?{}:{unit:s.unit},compact:!0});return n.jsxs("li",{"data-part":"spark-row","data-metric":s.name,className:"flex items-center gap-3 border-b border-border/60 px-1.5 py-2.5 last:border-b-0",children:[n.jsx("span",{className:"min-w-0 flex-1 truncate text-body-sm text-fg",children:s.name}),s.spark!==void 0&&s.spark.length>0&&n.jsx(F,{data:s.spark,variant:r,width:a,height:24,tone:ae(s.delta,d),className:"shrink-0"}),n.jsx(b,{className:"shrink-0 text-body-sm font-bold text-fg",children:p}),n.jsx("span",{className:"flex w-16 shrink-0 justify-end",children:s.delta!==void 0&&n.jsx(O,{"data-part":"spark-delta",trend:c,invertGood:d==="down",children:z(s.delta,h)})})]},s.id)})})}function se(e){return A(e).map((t,a)=>{const r=t.id,i=t.value;return{id:typeof r=="string"||typeof r=="number"?r:a,name:u(t,"name")??u(t,"metric")??`#${a+1}`,value:typeof i=="string"?i:j(t,"value")??0,delta:j(t,"delta"),goodDirection:u(t,"goodDirection")==="down"?"down":"up",spark:L(t,"spark"),currency:u(t,"currency"),unit:u(t,"unit")}})}function Ae({config:e,data:t}){return n.jsx(re,{rows:se(t),limit:e.rows,sparkWidth:e.sparkWidth,sparkVariant:e.sparkVariant,...e.goodDirectionByMetric===void 0?{}:{goodDirectionByMetric:e.goodDirectionByMetric},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.testId===void 0?{}:{testId:e.testId}})}function ie({rows:e,n:t=5,showSparkline:a=!0,sparkWidth:r=48,goodDirectionByMetric:i,locale:l,emptyTitle:o,emptyBody:f,onSelect:x,testId:h}){const y=v(l),s=[...e].sort((d,c)=>Math.abs(c.delta)-Math.abs(d.delta)).slice(0,Math.max(1,t));return s.length===0?n.jsx(N,{compact:!0,preset:"no-data",title:o??"No movers",body:f??"Metrics that changed the most will appear here."}):n.jsx("ul",{"data-widget":"top-movers-list","data-testid":h,className:"h-full overflow-auto px-2 py-1",children:s.map(d=>{const c=W(d.name,d.goodDirection,i),p=C(d.delta,c),m=E(d.delta),g=m==="flat"?D:m==="up"?G:_,T=$(d.value,y,{...d.currency===void 0?{}:{currency:d.currency},...d.unit===void 0?{}:{unit:d.unit},compact:!0}),S=n.jsxs(n.Fragment,{children:[n.jsx(w,{size:"sm",tone:Y(d.tone,d.delta,c),icon:n.jsx(g,{className:"rtl:-scale-x-100"})}),n.jsx("span",{className:"min-w-0 flex-1 truncate text-body-sm text-fg",children:d.name}),a&&d.spark!==void 0&&d.spark.length>0&&n.jsx(F,{data:d.spark,variant:"line",width:r,height:20,tone:p?"danger":"positive",className:"shrink-0"}),n.jsx(b,{className:"shrink-0 text-body-sm font-bold text-fg",children:T}),n.jsx("span",{className:"flex w-[68px] shrink-0 justify-end",children:n.jsx(O,{"data-part":"mover-delta",trend:m,invertGood:c==="down",children:z(d.delta,y)})})]});return n.jsx("li",{"data-part":"mover-row","data-bad":p?"":void 0,"data-metric":d.name,children:x===void 0?n.jsx("div",{className:"flex items-center gap-3 rounded-lg px-1.5 py-2",children:S}):n.jsx("button",{type:"button",onClick:()=>x(d),className:"flex w-full items-center gap-3 rounded-lg px-1.5 py-2 text-start hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",children:S})},d.id)})})}function de(e){return A(e).map((t,a)=>{const r=t.id,i=t.value;return{id:typeof r=="string"||typeof r=="number"?r:a,name:u(t,"name")??u(t,"metric")??`#${a+1}`,value:typeof i=="string"?i:j(t,"value")??0,delta:j(t,"delta")??0,goodDirection:u(t,"goodDirection")==="down"?"down":"up",spark:L(t,"spark"),tone:u(t,"tone"),currency:u(t,"currency"),unit:u(t,"unit")}})}function Ie({config:e,data:t,onEvent:a}){return n.jsx(ie,{rows:de(t),n:e.n,showSparkline:e.showSparkline,sparkWidth:e.sparkWidth,...e.goodDirectionByMetric===void 0?{}:{goodDirectionByMetric:e.goodDirectionByMetric},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.testId===void 0?{}:{testId:e.testId},...e.href===void 0?{}:{onSelect:()=>a({type:"drill-through",href:e.href})}})}const le={neutral:"bg-fg-subtle/25",accent:"bg-accent/25",pos:"bg-pos/25",warn:"bg-warn/25",danger:"bg-danger/25",info:"bg-info/25"};function oe({rows:e,n:t=6,showBar:a=!0,tone:r="accent",valueFormat:i="compact",currency:l,locale:o,emptyTitle:f,emptyBody:x,onSelect:h,testId:y}){const s=v(o),d=te(e,t);return d.length===0?n.jsx(N,{compact:!0,preset:"no-data",title:f??"Nothing ranked yet",body:x??"Top entities will appear here once there is data to rank."}):n.jsx("ol",{"data-widget":"ranked-entity-list","data-testid":y,className:"h-full overflow-auto px-2 py-1",children:d.map(c=>{const p=k(c.tone,r),m=i==="percent"?$(c.share*100,s,{unit:"%"}):$(c.value,s,{compact:i==="compact",...i==="currency"&&l!==void 0?{currency:l}:{}}),g=n.jsxs(n.Fragment,{children:[a&&n.jsx("span",{"aria-hidden":"true","data-part":"rank-bar",className:`pointer-events-none absolute inset-y-0 start-0 -z-10 rounded-md ${le[p]} w-[var(--rank-bar)]`,style:{"--rank-bar":`${c.pct}%`}}),n.jsx(b,{className:"w-6 shrink-0 text-caption font-bold text-fg-subtle",children:ee(c.rank,s)}),n.jsx("span",{className:"min-w-0 flex-1 truncate text-body-sm text-fg",children:c.name}),n.jsx(b,{className:"shrink-0 text-body-sm font-bold text-fg",children:m})]});return n.jsx("li",{"data-part":"rank-row","data-rank":c.rank,className:"relative isolate",children:h===void 0?n.jsx("div",{className:"flex items-center gap-3 rounded-md px-2 py-2.5",children:g}):n.jsx("button",{type:"button",onClick:()=>h(c),className:"flex w-full items-center gap-3 rounded-md px-2 py-2.5 text-start hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",children:g})},c.id)})})}function ce(e){return A(e).map((t,a)=>{const r=t.id;return{id:typeof r=="string"||typeof r=="number"?r:a,name:u(t,"name")??u(t,"label")??`#${a+1}`,value:j(t,"value")??j(t,"count")??0,key:u(t,"key"),tone:u(t,"tone")}})}function Be({config:e,data:t,onEvent:a}){const r=e.linkTarget,i=e.href,l=r===void 0&&i===void 0?void 0:o=>{const f=o.key??String(o.id);a({type:"drill-through",href:r===void 0?i:`${i??""}#${r}=${encodeURIComponent(f)}`})};return n.jsx(oe,{rows:ce(t),n:e.n,showBar:e.showBar,valueFormat:e.valueFormat,...e.tone===void 0?{}:{tone:k(e.tone,"accent")},...e.format?.currency===void 0?{}:{currency:e.format.currency},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.testId===void 0?{}:{testId:e.testId},...l===void 0?{}:{onSelect:l}})}function ue({rows:e,exclusive:t=!1,defaultOpen:a,glyph:r="chevron",locale:i,emptyTitle:l,emptyBody:o,testId:f}){const x=new Set(e.map(s=>s.id)),[h,y]=V.useState(()=>{const s=(a??[]).filter(d=>x.has(d));return new Set(t?s.slice(0,1):s)});return v(i),e.length===0?n.jsx(N,{compact:!0,preset:"no-data",title:l??"Nothing to expand",body:o??"Entries will appear here once there are any."}):n.jsx("div",{"data-widget":"accordion-list","data-testid":f,className:"h-full overflow-auto p-2",children:e.map(s=>{const d=h.has(s.id),c=`accordion-panel-${s.id}`,p=r==="chevron"?U:d?D:P;return n.jsxs("div",{"data-part":"accordion-row","data-expanded":d?"":void 0,className:"border-b border-border last:border-b-0",children:[n.jsx("h3",{children:n.jsxs("button",{type:"button","data-part":"accordion-header","aria-expanded":d,"aria-controls":c,onClick:()=>y(m=>ne(m,s.id,t)),className:"flex w-full items-center gap-3 rounded-md px-2 py-3 text-start hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",children:[s.badge!==void 0&&n.jsx(M,{mono:!0,tone:k(s.badgeTone,"info"),className:"shrink-0 uppercase",children:s.badge}),n.jsx(b,{className:"min-w-0 flex-1 truncate text-body-sm font-semibold text-fg",children:s.header}),n.jsx(p,{"aria-hidden":"true",className:`size-4 shrink-0 text-fg-subtle transition-transform duration-150 ${r==="chevron"&&d?"-rotate-180":""}`})]})}),d&&n.jsxs("div",{id:c,"data-part":"accordion-panel",className:"space-y-2 px-2 pb-3 pt-0.5",children:[s.body!==void 0&&n.jsx("p",{className:"text-body-sm leading-relaxed text-fg-muted",children:s.body}),s.fields!==void 0&&s.fields.length>0&&n.jsx("dl",{className:"divide-y divide-border rounded-md border border-border bg-surface-2",children:s.fields.map(m=>n.jsxs("div",{className:"flex items-baseline gap-3 px-2.5 py-1.5",children:[n.jsx(b,{asChild:!0,className:"w-28 shrink-0 text-caption font-semibold text-fg",children:n.jsx("dt",{children:m.label})}),m.mono===!0?n.jsx(b,{asChild:!0,className:"min-w-0 flex-1 text-caption text-fg-muted",children:n.jsx("dd",{children:m.value})}):n.jsx("dd",{className:"min-w-0 flex-1 text-caption text-fg-muted",children:m.value})]},m.label))})]})]},s.id)})})}function pe(e){return A(e).map((t,a)=>{const r=t.fields,i=Array.isArray(r)?r.filter(l=>typeof l=="object"&&l!==null).map(l=>({label:u(l,"label")??"",value:u(l,"value")??"",mono:l.mono===!0})).filter(l=>l.label!==""):void 0;return{id:String(t.id??`row-${a}`),header:u(t,"header")??u(t,"title")??`#${a+1}`,badge:u(t,"badge")??u(t,"method"),badgeTone:u(t,"badgeTone"),body:u(t,"body")??u(t,"description"),...i===void 0||i.length===0?{}:{fields:i}}})}function Me({config:e,data:t}){return n.jsx(ue,{rows:pe(t),exclusive:e.exclusive,defaultOpen:e.defaultOpen,glyph:e.glyph,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.testId===void 0?{}:{testId:e.testId}})}function me(e,t){const a=[];for(const l of e){const o=l.group??"";a.includes(o)||a.push(o)}if(t===void 0)return a;const r=a.includes("")?[""]:[],i=t.filter(l=>a.includes(l));return[...r,...i,...a.filter(l=>l!==""&&!i.includes(l))]}function fe({value:e,includedLabel:t,notIncludedLabel:a}){return e===!0?n.jsxs(n.Fragment,{children:[n.jsx(H,{"aria-hidden":"true",className:"mx-auto size-4 text-pos"}),n.jsx("span",{className:"sr-only",children:t})]}):e===!1||e===void 0?n.jsxs(n.Fragment,{children:[n.jsx("span",{"aria-hidden":"true",className:"text-fg-subtle",children:"—"}),n.jsx("span",{className:"sr-only",children:a})]}):n.jsx(b,{className:"text-caption font-semibold text-fg",children:e})}function xe({columns:e,rows:t,groups:a,promotedColumn:r,promotedLabel:i,includedLabel:l="Included",notIncludedLabel:o="Not included",locale:f,testId:x}){v(f);const h=me(t,a),y=`minmax(10rem, 1.6fr) repeat(${e.length}, minmax(5rem, 1fr))`;return n.jsxs("div",{"data-widget":"comparison-matrix","data-testid":x,role:"table",className:"h-full overflow-auto",children:[n.jsxs("div",{role:"row",className:"sticky top-0 z-10 grid items-end gap-x-2 border-b border-border bg-surface-1 px-3 py-2.5 grid-cols-[var(--cmp-cols)]",style:{"--cmp-cols":y},children:[n.jsx("span",{role:"columnheader",className:"text-caption font-bold uppercase tracking-wide text-fg-subtle"}),e.map(s=>{const d=s.id===r;return n.jsxs("span",{role:"columnheader","data-part":"cmp-col","data-promoted":d?"":void 0,className:`flex flex-col items-center gap-0.5 rounded-t-md px-2 py-1 text-center ${d?"bg-accent-soft":""}`,children:[d&&i!==void 0&&n.jsx(M,{tone:"accent",className:"mb-0.5 uppercase",children:i}),n.jsx("span",{className:`text-body-sm font-bold ${d?"text-accent":"text-fg"}`,children:s.label}),s.meta!==void 0&&n.jsx(b,{className:"text-caption text-fg-muted",children:s.meta})]},s.id)})]}),h.map(s=>n.jsxs("div",{"data-part":"cmp-band","data-band":s===""?void 0:s,children:[s!==""&&n.jsx("div",{role:"row",className:"bg-surface-2 px-3 py-1.5",children:n.jsx("span",{role:"rowheader",className:"text-caption font-bold uppercase tracking-wide text-fg-muted",children:s})}),t.filter(d=>(d.group??"")===s).map(d=>n.jsxs("div",{role:"row","data-part":"cmp-row",className:"grid items-center gap-x-2 border-b border-border/60 px-3 py-2 last:border-b-0 grid-cols-[var(--cmp-cols)]",style:{"--cmp-cols":y},children:[n.jsx("span",{role:"rowheader",className:"truncate text-start text-body-sm text-fg",children:d.label}),e.map(c=>{const p=c.id===r;return n.jsx("span",{role:"cell","data-part":"cmp-cell","data-promoted":p?"":void 0,className:`flex items-center justify-center px-2 py-1 text-center ${p?"bg-accent-soft/40":""}`,children:n.jsx(fe,{value:d.cells[c.id],includedLabel:l,notIncludedLabel:o})},c.id)})]},d.id))]},s===""?"__ungrouped":s))]})}function he(e,t){const a=typeof e=="object"&&e!==null?e:{},r=Array.isArray(a.columns)?a.columns:[],i=Array.isArray(a.rows)?a.rows:[],l=t.columns;return{columns:l===void 0||l.length===0?r:l.flatMap(f=>r.filter(x=>x.id===f)),rows:i,...t.groups===void 0?a.groups===void 0?{}:{groups:a.groups}:{groups:t.groups}}}function Ce({config:e,data:t}){const a=he(t,e);return n.jsx(xe,{columns:a.columns,rows:a.rows,...a.groups===void 0?{}:{groups:a.groups},...e.promotedColumn===void 0?{}:{promotedColumn:e.promotedColumn},...e.promotedLabel===void 0?{}:{promotedLabel:e.promotedLabel},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.testId===void 0?{}:{testId:e.testId}})}const I={table:n.jsx(X,{}),database:n.jsx(Q,{}),entity:n.jsx(J,{}),variable:n.jsx(q,{}),dashboard:n.jsx(Z,{}),default:n.jsx(K,{})};function ye(e){return e===void 0?I.default:I[e]??I.default}const be="motion-safe:animate-in motion-safe:fade-in motion-safe:zoom-in-95 motion-safe:[animation-delay:calc(var(--chip-i)*40ms)] motion-safe:[animation-fill-mode:backwards]";function ge({chips:e,clickAction:t="none",stagger:a=!1,limit:r=40,tone:i="neutral",locale:l,moreLabel:o,emptyTitle:f,emptyBody:x,onSelect:h,testId:y}){v(l);const s=e.slice(0,r),d=e.length-s.length,c=t!=="none"&&h!==void 0;return s.length===0?n.jsx(N,{compact:!0,preset:"no-data",title:f??"Nothing discovered yet",body:x??"Tables and variables will appear here as chips once they are found."}):n.jsxs("div",{"data-widget":"chip-cloud","data-testid":y,"data-action":t,className:"flex h-full flex-wrap content-start items-start gap-1.5 overflow-auto p-3",children:[s.map((p,m)=>{const g=n.jsxs(M,{mono:!0,tone:k(p.tone,i),"data-part":"cloud-chip",children:[n.jsx("span",{"aria-hidden":"true",className:"me-1 inline-flex size-3 items-center [&>svg]:size-3",children:ye(p.icon)}),p.label]}),T=a?be:"";return c?n.jsx("button",{type:"button",onClick:()=>h(p),style:{"--chip-i":String(m)},className:`rounded-full focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent ${T}`,children:g},`${p.label}-${m}`):n.jsx("span",{style:{"--chip-i":String(m)},className:T,children:g},`${p.label}-${m}`)}),d>0&&n.jsx(b,{"data-part":"cloud-overflow",className:"self-center px-1.5 text-caption text-fg-subtle",children:(o??"+{n} more").replace("{n}",String(d))})]})}function je(e){return(Array.isArray(e)?e:typeof e=="object"&&e!==null&&Array.isArray(e.items)?e.items:[]).flatMap(a=>{if(typeof a=="string")return a===""?[]:[{label:a,value:a}];if(typeof a!="object"||a===null)return[];const r=a,i=r.label??r.name??r.value;return typeof i!="string"||i===""?[]:[{label:i,...typeof r.icon=="string"?{icon:r.icon}:{},...typeof r.tone=="string"?{tone:r.tone}:{},value:typeof r.value=="string"?r.value:i}]})}function Se({config:e,data:t,onEvent:a}){const r=e.clickAction==="navigate"&&e.href!==void 0?i=>a({type:"drill-through",href:`${e.href}${encodeURIComponent(i.value??i.label)}`}):void 0;return n.jsx(ge,{chips:je(t),clickAction:e.clickAction,stagger:e.stagger,limit:e.limit,tone:k(e.chipTone,"neutral"),...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.testId===void 0?{}:{testId:e.testId},...r===void 0?{}:{onSelect:r}})}export{Me as AccordionListWidget,Se as ChipCloudWidget,Ce as ComparisonMatrixWidget,Be as RankedEntityListWidget,Ae as SparklineTableWidget,Ie as TopMoversListWidget};
2
+ //# sourceMappingURL=tables-tail-components-DiA5GeHB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables-tail-components-DiA5GeHB.js","sources":["../../../../packages/widgets/dist/families/tables/tables-tail-lib.js","../../../../packages/widgets/dist/families/tables/SparklineTable.js","../../../../packages/widgets/dist/families/tables/TopMoversList.js","../../../../packages/widgets/dist/families/tables/RankedEntityList.js","../../../../packages/widgets/dist/families/tables/AccordionList.js","../../../../packages/widgets/dist/families/tables/ComparisonMatrix.js","../../../../packages/widgets/dist/families/tables/tables-tail-icons.js","../../../../packages/widgets/dist/families/tables/ChipCloud.js"],"sourcesContent":["/**\n * Shared, framework-light helpers for the `tables` family M7 Wave-4 TAIL slice\n * (annex §3) — envelope extraction, tone coercion, the good/bad delta polarity\n * the metric widgets share, Intl-routed value formatting, and the proportional\n * bar maths for `ranked-entity-list`.\n *\n * JSX-free and provider-free (the feeds/calendar convention): widgets render in\n * stories and tests without a wrapper, and the dashboard resolves label\n * overrides through @adminium/i18n at the host boundary (04 §2).\n *\n * Numeral policy (10-i18n-theming.md §4.2): every value here is *data context*,\n * so it goes through `getFormatters(tag)` — which already applies the\n * latn-digit/gregorian data policy internally. Callers must NOT also wrap the\n * tag in `latnDataTag`, which would double-apply the `-u-` extension.\n */\nimport { getFormatters } from '@adminium/i18n';\nconst KNOWN_TONES = new Set(['neutral', 'accent', 'pos', 'warn', 'danger', 'info']);\n/** Coerce an untrusted tone string to a valid `Tone`, defaulting as given. */\nexport function tailToneOf(value, fallback = 'neutral') {\n return typeof value === 'string' && KNOWN_TONES.has(value) ? value : fallback;\n}\n/**\n * Coalesce an empty/whitespace locale to `en-US`. `getFormatters` normalizes an\n * empty tag itself, but a schema-valid `format.locale: ''` also reaches\n * `Avatar`'s `String#toLocaleUpperCase('')`, which throws — so widgets normalize\n * once at the boundary, before any locale-sensitive call (the calendar/media\n * `resolveLocale` convention).\n */\nexport function resolveLocale(locale) {\n return locale !== undefined && locale.trim() !== '' ? locale : 'en-US';\n}\n/** Extract `record-list` rows from a data envelope (mirrors feeds/boards). */\nexport function tailRowsOf(data) {\n if (Array.isArray(data))\n return data;\n if (typeof data === 'object' && data !== null) {\n const envelope = data;\n if (Array.isArray(envelope.data))\n return envelope.data;\n if (Array.isArray(envelope.rows))\n return envelope.rows;\n if (Array.isArray(envelope.items))\n return envelope.items;\n }\n return [];\n}\n/** A defined, non-empty string field, else undefined. */\nexport function stringField(row, key) {\n if (key === undefined)\n return undefined;\n const value = row[key];\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n/** A finite number field, else undefined. Tolerates pg-style numeric strings. */\nexport function numberField(row, key) {\n if (key === undefined)\n return undefined;\n const value = row[key];\n if (typeof value === 'number' && Number.isFinite(value))\n return value;\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n/** A finite numeric array field (the row sparkline), else undefined. */\nexport function seriesField(row, key) {\n const value = row[key];\n if (!Array.isArray(value))\n return undefined;\n const points = value.filter((point) => typeof point === 'number' && Number.isFinite(point));\n return points.length > 0 ? points : undefined;\n}\n/**\n * The good direction for a metric: an explicit per-metric config override wins,\n * then the row's own `goodDirection`, else `up` (annex §3: the delta pills are\n * \"good/bad aware\", and `top-movers-list` takes a `goodDirectionByMetric` map).\n */\nexport function goodDirectionFor(name, rowDirection, overrides) {\n const explicit = overrides?.[name] ?? rowDirection;\n return explicit === 'down' ? 'down' : 'up';\n}\n/** Delta sign → the DeltaPill trend (a 0 delta is flat, never up). */\nexport function trendOf(delta) {\n if (delta === undefined || !Number.isFinite(delta) || delta === 0)\n return 'flat';\n return delta > 0 ? 'up' : 'down';\n}\n/**\n * True when a move is BAD for its metric — the annex's \"danger for bad movers\".\n * `DeltaPill` derives its own tone from `trend` + `invertGood`, so this is only\n * for the surrounding chrome (the mover's icon tile tone).\n */\nexport function isBadMove(delta, good) {\n if (delta === 0)\n return false;\n return good === 'up' ? delta < 0 : delta > 0;\n}\n/** Icon-tile tone for a mover row: explicit tone wins, else good/bad polarity. */\nexport function moverTone(tone, delta, good) {\n if (typeof tone === 'string' && KNOWN_TONES.has(tone))\n return tone;\n if (delta === 0)\n return 'neutral';\n return isBadMove(delta, good) ? 'danger' : 'pos';\n}\n/**\n * Format a metric row's value. An already-formatted string passes through (the\n * binding may project a display string); a number routes through the Intl layer\n * per its currency/unit metadata.\n */\nexport function formatMetricValue(value, tag, options = {}) {\n if (typeof value === 'string')\n return value;\n if (value === undefined || !Number.isFinite(value))\n return '—';\n const fmt = getFormatters(tag);\n if (options.currency !== undefined)\n return fmt.currency(value, options.currency);\n if (options.unit === '%')\n return fmt.percent(value / 100, { fractionDigits: 1 });\n const base = options.compact === true ? fmt.compact(value) : fmt.number(value);\n return options.unit === undefined ? base : `${base} ${options.unit}`;\n}\n/** Signed percent delta for a delta pill (\"+12.4%\" / \"-3.1%\"). */\nexport function formatDelta(delta, tag) {\n if (delta === undefined || !Number.isFinite(delta))\n return '—';\n const fmt = getFormatters(tag);\n const magnitude = fmt.percent(Math.abs(delta) / 100, { fractionDigits: 1 });\n if (delta === 0)\n return magnitude;\n // The sign is composed rather than formatted with `signDisplay` so the glyph\n // stays beside the number under RTL bidi reordering (the pill is `dir`-neutral\n // mono text, and Intl's minus sign would otherwise detach from its digits).\n return `${delta > 0 ? '+' : '−'}${magnitude}`;\n}\n/** Localized rank number (\"1\", \"١\") — data context via the Intl layer. */\nexport function formatRank(rank, tag) {\n return getFormatters(tag).number(rank);\n}\n/**\n * Sort desc by value, slice to top-N, and derive each row's proportional bar.\n * The bar is scaled against the slice's own max (not the grand total), which is\n * what makes the annex's \"proportional accent bar\" readable after the top-N cut:\n * the leader always fills the track. `share` keeps the true total-relative\n * percentage available for the `percent` value format.\n */\nexport function rankRows(rows, n) {\n const sorted = [...rows].sort((a, b) => b.value - a.value).slice(0, Math.max(1, n));\n const max = sorted.reduce((best, row) => Math.max(best, row.value), 0);\n const total = rows.reduce((sum, row) => sum + (Number.isFinite(row.value) ? row.value : 0), 0);\n return sorted.map((row, index) => ({\n ...row,\n rank: index + 1,\n pct: max > 0 ? Math.round((row.value / max) * 1000) / 10 : 0,\n share: total > 0 ? row.value / total : 0,\n }));\n}\n// --- accordion-list open-state ------------------------------------------------\n/**\n * Next open set after toggling `id`. `exclusive` collapses every sibling (annex:\n * \"single- or multi-open\"), and re-clicking the open row closes it in both modes.\n */\nexport function toggleOpen(open, id, exclusive) {\n if (exclusive)\n return open.has(id) ? new Set() : new Set([id]);\n const next = new Set(open);\n if (next.has(id))\n next.delete(id);\n else\n next.add(id);\n return next;\n}\n//# sourceMappingURL=tables-tail-lib.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Sparkline } from '@adminium/charts';\nimport { DeltaPill, EmptyState, MonoText } from '@adminium/ui';\nimport { sparklineTableConfigSchema, sparklineTableDemoData } from './tables-tail-config.js';\nimport { formatDelta, formatMetricValue, goodDirectionFor, isBadMove, numberField, resolveLocale, seriesField, stringField, tailRowsOf, trendOf, } from './tables-tail-lib.js';\nexport { sparklineTableConfigSchema, sparklineTableDemoData };\n/** Bad moves draw a danger spark, good moves a positive one (annex \"good/bad aware\"). */\nfunction sparkToneFor(delta, good) {\n if (delta === undefined || delta === 0)\n return 'muted';\n return isBadMove(delta, good) ? 'danger' : 'positive';\n}\nexport function SparklineTable({ rows, limit = 6, sparkWidth = 72, sparkVariant = 'bar', goodDirectionByMetric, locale, emptyTitle, emptyBody, testId, }) {\n const tag = resolveLocale(locale);\n const slice = rows.slice(0, limit);\n if (slice.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No metrics to show', body: emptyBody ?? 'Metrics will appear here once there is data to summarize.' }));\n }\n return (_jsx(\"ul\", { \"data-widget\": \"sparkline-table\", \"data-testid\": testId, className: \"h-full overflow-auto px-2 py-1\", children: slice.map((row) => {\n const good = goodDirectionFor(row.name, row.goodDirection, goodDirectionByMetric);\n const trend = trendOf(row.delta);\n const value = formatMetricValue(row.value, tag, {\n ...(row.currency === undefined ? {} : { currency: row.currency }),\n ...(row.unit === undefined ? {} : { unit: row.unit }),\n compact: true,\n });\n return (_jsxs(\"li\", { \"data-part\": \"spark-row\", \"data-metric\": row.name, className: \"flex items-center gap-3 border-b border-border/60 px-1.5 py-2.5 last:border-b-0\", children: [_jsx(\"span\", { className: \"min-w-0 flex-1 truncate text-body-sm text-fg\", children: row.name }), row.spark !== undefined && row.spark.length > 0 && (\n // Decorative: the row's value + delta already carry the meaning in\n // text, so an aria-label here would just double every row for a\n // screen reader (Sparkline is aria-hidden without `label`).\n _jsx(Sparkline, { data: row.spark, variant: sparkVariant, width: sparkWidth, height: 24, tone: sparkToneFor(row.delta, good), className: \"shrink-0\" })), _jsx(MonoText, { className: \"shrink-0 text-body-sm font-bold text-fg\", children: value }), _jsx(\"span\", { className: \"flex w-16 shrink-0 justify-end\", children: row.delta !== undefined && (_jsx(DeltaPill, { \"data-part\": \"spark-delta\", trend: trend, invertGood: good === 'down', children: formatDelta(row.delta, tag) })) })] }, row.id));\n }) }));\n}\n/** Project an untrusted `record-list` onto `SparkMetricRow`s (04 §3). */\nexport function sparkRowsOf(data) {\n return tailRowsOf(data).map((row, index) => {\n const id = row.id;\n const rawValue = row.value;\n return {\n id: typeof id === 'string' || typeof id === 'number' ? id : index,\n name: stringField(row, 'name') ?? stringField(row, 'metric') ?? `#${index + 1}`,\n value: typeof rawValue === 'string' ? rawValue : (numberField(row, 'value') ?? 0),\n delta: numberField(row, 'delta'),\n goodDirection: stringField(row, 'goodDirection') === 'down' ? 'down' : 'up',\n spark: seriesField(row, 'spark'),\n currency: stringField(row, 'currency'),\n unit: stringField(row, 'unit'),\n };\n });\n}\nexport function SparklineTableWidget({ config, data }) {\n return (_jsx(SparklineTable, { rows: sparkRowsOf(data), limit: config.rows, sparkWidth: config.sparkWidth, sparkVariant: config.sparkVariant, ...(config.goodDirectionByMetric === undefined ? {} : { goodDirectionByMetric: config.goodDirectionByMetric }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.testId === undefined ? {} : { testId: config.testId }) }));\n}\n//# sourceMappingURL=SparklineTable.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Sparkline } from '@adminium/charts';\nimport { DeltaPill, EmptyState, IconTile, MonoText } from '@adminium/ui';\nimport { Minus, TrendingDown, TrendingUp } from 'lucide-react';\nimport { topMoversListConfigSchema, topMoversListDemoData } from './tables-tail-config.js';\nimport { formatDelta, formatMetricValue, goodDirectionFor, isBadMove, moverTone, numberField, resolveLocale, seriesField, stringField, tailRowsOf, trendOf, } from './tables-tail-lib.js';\nexport { topMoversListConfigSchema, topMoversListDemoData };\nexport function TopMoversList({ rows, n = 5, showSparkline = true, sparkWidth = 48, goodDirectionByMetric, locale, emptyTitle, emptyBody, onSelect, testId, }) {\n const tag = resolveLocale(locale);\n const ranked = [...rows].sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta)).slice(0, Math.max(1, n));\n if (ranked.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No movers', body: emptyBody ?? 'Metrics that changed the most will appear here.' }));\n }\n return (_jsx(\"ul\", { \"data-widget\": \"top-movers-list\", \"data-testid\": testId, className: \"h-full overflow-auto px-2 py-1\", children: ranked.map((row) => {\n const good = goodDirectionFor(row.name, row.goodDirection, goodDirectionByMetric);\n const bad = isBadMove(row.delta, good);\n const trend = trendOf(row.delta);\n const Glyph = trend === 'flat' ? Minus : trend === 'up' ? TrendingUp : TrendingDown;\n const value = formatMetricValue(row.value, tag, {\n ...(row.currency === undefined ? {} : { currency: row.currency }),\n ...(row.unit === undefined ? {} : { unit: row.unit }),\n compact: true,\n });\n const content = (_jsxs(_Fragment, { children: [_jsx(IconTile, { size: \"sm\", tone: moverTone(row.tone, row.delta, good), icon: _jsx(Glyph, { className: \"rtl:-scale-x-100\" }) }), _jsx(\"span\", { className: \"min-w-0 flex-1 truncate text-body-sm text-fg\", children: row.name }), showSparkline && row.spark !== undefined && row.spark.length > 0 && (_jsx(Sparkline, { data: row.spark, variant: \"line\", width: sparkWidth, height: 20, tone: bad ? 'danger' : 'positive', className: \"shrink-0\" })), _jsx(MonoText, { className: \"shrink-0 text-body-sm font-bold text-fg\", children: value }), _jsx(\"span\", { className: \"flex w-[68px] shrink-0 justify-end\", children: _jsx(DeltaPill, { \"data-part\": \"mover-delta\", trend: trend, invertGood: good === 'down', children: formatDelta(row.delta, tag) }) })] }));\n return (_jsx(\"li\", { \"data-part\": \"mover-row\", \"data-bad\": bad ? '' : undefined, \"data-metric\": row.name, children: onSelect === undefined ? (_jsx(\"div\", { className: \"flex items-center gap-3 rounded-lg px-1.5 py-2\", children: content })) : (_jsx(\"button\", { type: \"button\", onClick: () => onSelect(row), className: \"flex w-full items-center gap-3 rounded-lg px-1.5 py-2 text-start hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\", children: content })) }, row.id));\n }) }));\n}\n/** Project an untrusted `record-list` onto `MoverRow`s (04 §3). */\nexport function moverRowsOf(data) {\n return tailRowsOf(data).map((row, index) => {\n const id = row.id;\n const rawValue = row.value;\n return {\n id: typeof id === 'string' || typeof id === 'number' ? id : index,\n name: stringField(row, 'name') ?? stringField(row, 'metric') ?? `#${index + 1}`,\n value: typeof rawValue === 'string' ? rawValue : (numberField(row, 'value') ?? 0),\n delta: numberField(row, 'delta') ?? 0,\n goodDirection: stringField(row, 'goodDirection') === 'down' ? 'down' : 'up',\n spark: seriesField(row, 'spark'),\n tone: stringField(row, 'tone'),\n currency: stringField(row, 'currency'),\n unit: stringField(row, 'unit'),\n };\n });\n}\nexport function TopMoversListWidget({ config, data, onEvent }) {\n return (_jsx(TopMoversList, { rows: moverRowsOf(data), n: config.n, showSparkline: config.showSparkline, sparkWidth: config.sparkWidth, ...(config.goodDirectionByMetric === undefined ? {} : { goodDirectionByMetric: config.goodDirectionByMetric }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.testId === undefined ? {} : { testId: config.testId }), ...(config.href === undefined\n ? {}\n : { onSelect: () => onEvent({ type: 'drill-through', href: config.href }) }) }));\n}\n//# sourceMappingURL=TopMoversList.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { EmptyState, MonoText } from '@adminium/ui';\nimport { rankedEntityListConfigSchema, rankedEntityListDemoData } from './tables-tail-config.js';\nimport { formatMetricValue, formatRank, numberField, rankRows, resolveLocale, stringField, tailRowsOf, tailToneOf, } from './tables-tail-lib.js';\nexport { rankedEntityListConfigSchema, rankedEntityListDemoData };\n/** Tone → the proportional bar's soft fill (the row track stays surface-2). */\nconst BAR_TONE = {\n neutral: 'bg-fg-subtle/25',\n accent: 'bg-accent/25',\n pos: 'bg-pos/25',\n warn: 'bg-warn/25',\n danger: 'bg-danger/25',\n info: 'bg-info/25',\n};\nexport function RankedEntityList({ rows, n = 6, showBar = true, tone = 'accent', valueFormat = 'compact', currency, locale, emptyTitle, emptyBody, onSelect, testId, }) {\n const tag = resolveLocale(locale);\n const ranked = rankRows(rows, n);\n if (ranked.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'Nothing ranked yet', body: emptyBody ?? 'Top entities will appear here once there is data to rank.' }));\n }\n return (_jsx(\"ol\", { \"data-widget\": \"ranked-entity-list\", \"data-testid\": testId, className: \"h-full overflow-auto px-2 py-1\", children: ranked.map((row) => {\n const rowTone = tailToneOf(row.tone, tone);\n const value = valueFormat === 'percent'\n ? formatMetricValue(row.share * 100, tag, { unit: '%' })\n : formatMetricValue(row.value, tag, {\n compact: valueFormat === 'compact',\n ...(valueFormat === 'currency' && currency !== undefined ? { currency } : {}),\n });\n const content = (_jsxs(_Fragment, { children: [showBar && (\n /*\n The proportional bar. `inset-y-0` is the BLOCK-axis utility (NOT\n `inset-block-0`, which is not a Tailwind utility and silently\n emits no CSS); `start-0` is the logical inline start, so the bar\n grows from the row's leading edge and mirrors under RTL.\n */\n _jsx(\"span\", { \"aria-hidden\": \"true\", \"data-part\": \"rank-bar\", className: `pointer-events-none absolute inset-y-0 start-0 -z-10 rounded-md ${BAR_TONE[rowTone]} w-[var(--rank-bar)]`, style: { '--rank-bar': `${row.pct}%` } })), _jsx(MonoText, { className: \"w-6 shrink-0 text-caption font-bold text-fg-subtle\", children: formatRank(row.rank, tag) }), _jsx(\"span\", { className: \"min-w-0 flex-1 truncate text-body-sm text-fg\", children: row.name }), _jsx(MonoText, { className: \"shrink-0 text-body-sm font-bold text-fg\", children: value })] }));\n return (_jsx(\"li\", { \"data-part\": \"rank-row\", \"data-rank\": row.rank, className: \"relative isolate\", children: onSelect === undefined ? (_jsx(\"div\", { className: \"flex items-center gap-3 rounded-md px-2 py-2.5\", children: content })) : (_jsx(\"button\", { type: \"button\", onClick: () => onSelect(row), className: \"flex w-full items-center gap-3 rounded-md px-2 py-2.5 text-start hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\", children: content })) }, row.id));\n }) }));\n}\n/** Project an untrusted `record-list` onto `RankedEntity`s (04 §3). */\nexport function rankedEntitiesOf(data) {\n return tailRowsOf(data).map((row, index) => {\n const id = row.id;\n return {\n id: typeof id === 'string' || typeof id === 'number' ? id : index,\n name: stringField(row, 'name') ?? stringField(row, 'label') ?? `#${index + 1}`,\n value: numberField(row, 'value') ?? numberField(row, 'count') ?? 0,\n key: stringField(row, 'key'),\n tone: stringField(row, 'tone'),\n };\n });\n}\nexport function RankedEntityListWidget({ config, data, onEvent }) {\n /*\n * Row click → a `drill-through` carrying the row key. `linkTarget` names the\n * SIBLING widget instance the host should drive (annex: \"row click can drive\n * sibling widget (map flyTo)\"), so it rides the href as a fragment the host\n * resolves; with neither `linkTarget` nor `href` the rows stay inert (and\n * render as plain divs, not dead buttons).\n */\n const target = config.linkTarget;\n const href = config.href;\n const onSelect = target === undefined && href === undefined\n ? undefined\n : (row) => {\n const key = row.key ?? String(row.id);\n onEvent({\n type: 'drill-through',\n href: target === undefined ? href : `${href ?? ''}#${target}=${encodeURIComponent(key)}`,\n });\n };\n return (_jsx(RankedEntityList, { rows: rankedEntitiesOf(data), n: config.n, showBar: config.showBar, valueFormat: config.valueFormat, ...(config.tone === undefined ? {} : { tone: tailToneOf(config.tone, 'accent') }), ...(config.format?.currency === undefined ? {} : { currency: config.format.currency }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.testId === undefined ? {} : { testId: config.testId }), ...(onSelect === undefined ? {} : { onSelect }) }));\n}\n//# sourceMappingURL=RankedEntityList.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { EmptyState, MonoText, Tag } from '@adminium/ui';\nimport { ChevronDown, Minus, Plus } from 'lucide-react';\nimport { useState } from 'react';\nimport { accordionListConfigSchema, accordionListDemoData } from './tables-tail-config.js';\nimport { resolveLocale, stringField, tailRowsOf, tailToneOf, toggleOpen } from './tables-tail-lib.js';\nexport { accordionListConfigSchema, accordionListDemoData };\nexport function AccordionList({ rows, exclusive = false, defaultOpen, glyph = 'chevron', locale, emptyTitle, emptyBody, testId, }) {\n const known = new Set(rows.map((row) => row.id));\n const [open, setOpen] = useState(() => {\n const initial = (defaultOpen ?? []).filter((id) => known.has(id));\n // `exclusive` mode can only ever have one row open — honour the first\n // configured id rather than silently rendering an impossible state.\n return new Set(exclusive ? initial.slice(0, 1) : initial);\n });\n // Locale normalization at the boundary: the row copy is host-supplied, but a\n // schema-valid `format.locale: ''` must not reach a locale-sensitive call.\n void resolveLocale(locale);\n if (rows.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'Nothing to expand', body: emptyBody ?? 'Entries will appear here once there are any.' }));\n }\n return (_jsx(\"div\", { \"data-widget\": \"accordion-list\", \"data-testid\": testId, className: \"h-full overflow-auto p-2\", children: rows.map((row) => {\n const expanded = open.has(row.id);\n const panelId = `accordion-panel-${row.id}`;\n const Glyph = glyph === 'chevron' ? ChevronDown : expanded ? Minus : Plus;\n return (_jsxs(\"div\", { \"data-part\": \"accordion-row\", \"data-expanded\": expanded ? '' : undefined, className: \"border-b border-border last:border-b-0\", children: [_jsx(\"h3\", { children: _jsxs(\"button\", { type: \"button\", \"data-part\": \"accordion-header\", \"aria-expanded\": expanded, \"aria-controls\": panelId, onClick: () => setOpen((current) => toggleOpen(current, row.id, exclusive)), className: \"flex w-full items-center gap-3 rounded-md px-2 py-3 text-start hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\", children: [row.badge !== undefined && (_jsx(Tag, { mono: true, tone: tailToneOf(row.badgeTone, 'info'), className: \"shrink-0 uppercase\", children: row.badge })), _jsx(MonoText, { className: \"min-w-0 flex-1 truncate text-body-sm font-semibold text-fg\", children: row.header }), _jsx(Glyph, { \"aria-hidden\": \"true\", className: `size-4 shrink-0 text-fg-subtle transition-transform duration-150 ${glyph === 'chevron' && expanded ? '-rotate-180' : ''}` })] }) }), expanded && (_jsxs(\"div\", { id: panelId, \"data-part\": \"accordion-panel\", className: \"space-y-2 px-2 pb-3 pt-0.5\", children: [row.body !== undefined && _jsx(\"p\", { className: \"text-body-sm leading-relaxed text-fg-muted\", children: row.body }), row.fields !== undefined && row.fields.length > 0 && (_jsx(\"dl\", { className: \"divide-y divide-border rounded-md border border-border bg-surface-2\", children: row.fields.map((field) => (_jsxs(\"div\", { className: \"flex items-baseline gap-3 px-2.5 py-1.5\", children: [_jsx(MonoText, { asChild: true, className: \"w-28 shrink-0 text-caption font-semibold text-fg\", children: _jsx(\"dt\", { children: field.label }) }), field.mono === true ? (_jsx(MonoText, { asChild: true, className: \"min-w-0 flex-1 text-caption text-fg-muted\", children: _jsx(\"dd\", { children: field.value }) })) : (_jsx(\"dd\", { className: \"min-w-0 flex-1 text-caption text-fg-muted\", children: field.value }))] }, field.label))) }))] }))] }, row.id));\n }) }));\n}\n/** Project an untrusted `record-list` onto `AccordionRow`s (04 §3). */\nexport function accordionRowsOf(data) {\n return tailRowsOf(data).map((row, index) => {\n const rawFields = row.fields;\n const fields = Array.isArray(rawFields)\n ? rawFields\n .filter((field) => typeof field === 'object' && field !== null)\n .map((field) => ({\n label: stringField(field, 'label') ?? '',\n value: stringField(field, 'value') ?? '',\n mono: field.mono === true,\n }))\n .filter((field) => field.label !== '')\n : undefined;\n return {\n id: String(row.id ?? `row-${index}`),\n header: stringField(row, 'header') ?? stringField(row, 'title') ?? `#${index + 1}`,\n badge: stringField(row, 'badge') ?? stringField(row, 'method'),\n badgeTone: stringField(row, 'badgeTone'),\n body: stringField(row, 'body') ?? stringField(row, 'description'),\n ...(fields === undefined || fields.length === 0 ? {} : { fields }),\n };\n });\n}\nexport function AccordionListWidget({ config, data }) {\n return (_jsx(AccordionList, { rows: accordionRowsOf(data), exclusive: config.exclusive, defaultOpen: config.defaultOpen, glyph: config.glyph, ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.testId === undefined ? {} : { testId: config.testId }) }));\n}\n//# sourceMappingURL=AccordionList.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { MonoText, Tag } from '@adminium/ui';\nimport { Check } from 'lucide-react';\nimport { comparisonMatrixConfigSchema, comparisonMatrixDemoData } from './tables-tail-config.js';\nimport { resolveLocale } from './tables-tail-lib.js';\nexport { comparisonMatrixConfigSchema, comparisonMatrixDemoData };\n/**\n * Band order: the ungrouped bucket first, then the configured `groups` in their\n * configured order, then any band the rows add that the config never listed.\n *\n * The ungrouped bucket is hoisted deliberately. It is not a band — it is the\n * un-banded preamble (a plan grid's headline rows), and it carries no group\n * name, so it can never appear in `groups`. Ordering it by first-seen instead\n * would strand those rows AFTER the configured bands the moment an author lists\n * any group at all.\n */\nfunction bandsOf(rows, groups) {\n const seen = [];\n for (const row of rows) {\n const band = row.group ?? '';\n if (!seen.includes(band))\n seen.push(band);\n }\n if (groups === undefined)\n return seen;\n const lead = seen.includes('') ? [''] : [];\n const ordered = groups.filter((group) => seen.includes(group));\n return [...lead, ...ordered, ...seen.filter((band) => band !== '' && !ordered.includes(band))];\n}\nfunction Cell({ value, includedLabel, notIncludedLabel, }) {\n if (value === true) {\n return (_jsxs(_Fragment, { children: [_jsx(Check, { \"aria-hidden\": \"true\", className: \"mx-auto size-4 text-pos\" }), _jsx(\"span\", { className: \"sr-only\", children: includedLabel })] }));\n }\n if (value === false || value === undefined) {\n return (_jsxs(_Fragment, { children: [_jsx(\"span\", { \"aria-hidden\": \"true\", className: \"text-fg-subtle\", children: \"\\u2014\" }), _jsx(\"span\", { className: \"sr-only\", children: notIncludedLabel })] }));\n }\n return _jsx(MonoText, { className: \"text-caption font-semibold text-fg\", children: value });\n}\nexport function ComparisonMatrix({ columns, rows, groups, promotedColumn, promotedLabel, includedLabel = 'Included', notIncludedLabel = 'Not included', locale, testId, }) {\n void resolveLocale(locale); // normalize at the boundary (see tables-tail-lib)\n const bands = bandsOf(rows, groups);\n // A feature label column + one column per compared plan.\n const template = `minmax(10rem, 1.6fr) repeat(${columns.length}, minmax(5rem, 1fr))`;\n return (_jsxs(\"div\", { \"data-widget\": \"comparison-matrix\", \"data-testid\": testId, role: \"table\", className: \"h-full overflow-auto\", children: [_jsxs(\"div\", { role: \"row\", className: \"sticky top-0 z-10 grid items-end gap-x-2 border-b border-border bg-surface-1 px-3 py-2.5 grid-cols-[var(--cmp-cols)]\", style: { '--cmp-cols': template }, children: [_jsx(\"span\", { role: \"columnheader\", className: \"text-caption font-bold uppercase tracking-wide text-fg-subtle\" }), columns.map((column) => {\n const promoted = column.id === promotedColumn;\n return (_jsxs(\"span\", { role: \"columnheader\", \"data-part\": \"cmp-col\", \"data-promoted\": promoted ? '' : undefined, className: `flex flex-col items-center gap-0.5 rounded-t-md px-2 py-1 text-center ${promoted ? 'bg-accent-soft' : ''}`, children: [promoted && promotedLabel !== undefined && (_jsx(Tag, { tone: \"accent\", className: \"mb-0.5 uppercase\", children: promotedLabel })), _jsx(\"span\", { className: `text-body-sm font-bold ${promoted ? 'text-accent' : 'text-fg'}`, children: column.label }), column.meta !== undefined && (_jsx(MonoText, { className: \"text-caption text-fg-muted\", children: column.meta }))] }, column.id));\n })] }), bands.map((band) => (_jsxs(\"div\", { \"data-part\": \"cmp-band\", \"data-band\": band === '' ? undefined : band, children: [band !== '' && (_jsx(\"div\", { role: \"row\", className: \"bg-surface-2 px-3 py-1.5\", children: _jsx(\"span\", { role: \"rowheader\", className: \"text-caption font-bold uppercase tracking-wide text-fg-muted\", children: band }) })), rows\n .filter((row) => (row.group ?? '') === band)\n .map((row) => (_jsxs(\"div\", { role: \"row\", \"data-part\": \"cmp-row\", className: \"grid items-center gap-x-2 border-b border-border/60 px-3 py-2 last:border-b-0 grid-cols-[var(--cmp-cols)]\", style: { '--cmp-cols': template }, children: [_jsx(\"span\", { role: \"rowheader\", className: \"truncate text-start text-body-sm text-fg\", children: row.label }), columns.map((column) => {\n const promoted = column.id === promotedColumn;\n return (_jsx(\"span\", { role: \"cell\", \"data-part\": \"cmp-cell\", \"data-promoted\": promoted ? '' : undefined, className: `flex items-center justify-center px-2 py-1 text-center ${promoted ? 'bg-accent-soft/40' : ''}`, children: _jsx(Cell, { value: row.cells[column.id], includedLabel: includedLabel, notIncludedLabel: notIncludedLabel }) }, column.id));\n })] }, row.id)))] }, band === '' ? '__ungrouped' : band)))] }));\n}\n/**\n * Project an untrusted payload onto the matrix shape (annex: \"static or\n * config-driven\"), honouring the config's column allow-list/order.\n */\nexport function comparisonDataOf(data, config) {\n const envelope = (typeof data === 'object' && data !== null ? data : {});\n const rawColumns = Array.isArray(envelope.columns) ? envelope.columns : [];\n const rawRows = Array.isArray(envelope.rows) ? envelope.rows : [];\n const allow = config.columns;\n const columns = allow === undefined || allow.length === 0\n ? rawColumns\n : allow.flatMap((id) => rawColumns.filter((column) => column.id === id));\n return {\n columns,\n rows: rawRows,\n ...(config.groups === undefined ? (envelope.groups === undefined ? {} : { groups: envelope.groups }) : { groups: config.groups }),\n };\n}\nexport function ComparisonMatrixWidget({ config, data }) {\n const matrix = comparisonDataOf(data, config);\n return (_jsx(ComparisonMatrix, { columns: matrix.columns, rows: matrix.rows, ...(matrix.groups === undefined ? {} : { groups: matrix.groups }), ...(config.promotedColumn === undefined ? {} : { promotedColumn: config.promotedColumn }), ...(config.promotedLabel === undefined ? {} : { promotedLabel: config.promotedLabel }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.testId === undefined ? {} : { testId: config.testId }) }));\n}\n//# sourceMappingURL=ComparisonMatrix.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Braces, Database, Hash, LayoutDashboard, Table2, Tag as TagIcon } from 'lucide-react';\n/**\n * The `chip-cloud` icon vocabulary (annex §3: \"string array (+ optional icon per\n * chip)\"). Separated from `tables-tail-lib.ts` so that module stays JSX-free and\n * the registry-metadata graph (`tables-tail-config.ts`) never pulls\n * `lucide-react` into the eager chunk (04 §2.3; the `media/media-icons`\n * convention).\n *\n * The map is CLOSED on purpose: a chip's `icon` is data (a discovered table\n * name's kind, a merge variable's type), and data must never be able to name an\n * arbitrary icon — an unknown key falls back to the hash glyph rather than\n * reaching into the icon package.\n */\nconst CHIP_ICONS = {\n table: _jsx(Table2, {}),\n database: _jsx(Database, {}),\n entity: _jsx(TagIcon, {}),\n variable: _jsx(Braces, {}),\n dashboard: _jsx(LayoutDashboard, {}),\n default: _jsx(Hash, {}),\n};\n/** Glyph for an untrusted chip icon key; unknown keys get the default glyph. */\nexport function chipIcon(key) {\n if (key === undefined)\n return CHIP_ICONS.default;\n return CHIP_ICONS[key] ?? CHIP_ICONS.default;\n}\n/** Whether a chip icon key is in the closed vocabulary (used by the tests). */\nexport function isKnownChipIcon(key) {\n return key !== 'default' && Object.hasOwn(CHIP_ICONS, key);\n}\n//# sourceMappingURL=tables-tail-icons.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { EmptyState, MonoText, Tag } from '@adminium/ui';\nimport { chipIcon } from './tables-tail-icons.js';\nimport { chipCloudConfigSchema, chipCloudDemoData } from './tables-tail-config.js';\nimport { resolveLocale, tailToneOf } from './tables-tail-lib.js';\nexport { chipCloudConfigSchema, chipCloudDemoData };\n/** The staggered pop-in, opt-in and `motion-safe`-gated (02 §8, 10 §6). */\nconst STAGGER_CLASS = 'motion-safe:animate-in motion-safe:fade-in motion-safe:zoom-in-95 motion-safe:[animation-delay:calc(var(--chip-i)*40ms)] motion-safe:[animation-fill-mode:backwards]';\nexport function ChipCloud({ chips, clickAction = 'none', stagger = false, limit = 40, tone = 'neutral', locale, moreLabel, emptyTitle, emptyBody, onSelect, testId, }) {\n void resolveLocale(locale); // normalize at the boundary (see tables-tail-lib)\n const slice = chips.slice(0, limit);\n const overflow = chips.length - slice.length;\n const interactive = clickAction !== 'none' && onSelect !== undefined;\n if (slice.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'Nothing discovered yet', body: emptyBody ?? 'Tables and variables will appear here as chips once they are found.' }));\n }\n return (_jsxs(\"div\", { \"data-widget\": \"chip-cloud\", \"data-testid\": testId, \"data-action\": clickAction, className: \"flex h-full flex-wrap content-start items-start gap-1.5 overflow-auto p-3\", children: [slice.map((chip, index) => {\n const body = (_jsxs(Tag, { mono: true, tone: tailToneOf(chip.tone, tone), \"data-part\": \"cloud-chip\", children: [_jsx(\"span\", { \"aria-hidden\": \"true\", className: \"me-1 inline-flex size-3 items-center [&>svg]:size-3\", children: chipIcon(chip.icon) }), chip.label] }));\n /*\n * The stagger index rides the WRAPPER, not the Tag: `Tag` omits `style`\n * from its props by design, and the rule that permits a `style` object\n * requires a literal object expression — so `--chip-i` is always set and\n * only the class that consumes it is conditional.\n */\n const staggerClass = stagger ? STAGGER_CLASS : '';\n return interactive ? (_jsx(\"button\", { type: \"button\", onClick: () => onSelect(chip), style: { '--chip-i': String(index) }, className: `rounded-full focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent ${staggerClass}`, children: body }, `${chip.label}-${index}`)) : (_jsx(\"span\", { style: { '--chip-i': String(index) }, className: staggerClass, children: body }, `${chip.label}-${index}`));\n }), overflow > 0 && (_jsx(MonoText, { \"data-part\": \"cloud-overflow\", className: \"self-center px-1.5 text-caption text-fg-subtle\", children: (moreLabel ?? '+{n} more').replace('{n}', String(overflow)) }))] }));\n}\n/**\n * Project an untrusted `categorical` payload onto `CloudChip`s. The annex's\n * contract is \"string array (+ optional icon per chip)\", so a bare\n * `['a','b']` array — the shape a hand-written binding most often produces —\n * projects just as well as the canonical `{ items: [{ label }] }` envelope.\n */\nexport function cloudChipsOf(data) {\n const raw = Array.isArray(data)\n ? data\n : typeof data === 'object' && data !== null && Array.isArray(data.items)\n ? (data.items)\n : [];\n return raw.flatMap((entry) => {\n if (typeof entry === 'string')\n return entry === '' ? [] : [{ label: entry, value: entry }];\n if (typeof entry !== 'object' || entry === null)\n return [];\n const record = entry;\n const label = record.label ?? record.name ?? record.value;\n if (typeof label !== 'string' || label === '')\n return [];\n return [\n {\n label,\n ...(typeof record.icon === 'string' ? { icon: record.icon } : {}),\n ...(typeof record.tone === 'string' ? { tone: record.tone } : {}),\n value: typeof record.value === 'string' ? record.value : label,\n },\n ];\n });\n}\nexport function ChipCloudWidget({ config, data, onEvent }) {\n /*\n * `insert` is a HOST concern (paste the chip into the focused editor/composer),\n * so the widget emits nothing for it — the host owns the composer and passes\n * its own `onSelect` when it mounts the component directly. `navigate` is a\n * plain drill-through on the configured href + the chip's value.\n */\n const onSelect = config.clickAction === 'navigate' && config.href !== undefined\n ? (chip) => onEvent({ type: 'drill-through', href: `${config.href}${encodeURIComponent(chip.value ?? chip.label)}` })\n : undefined;\n return (_jsx(ChipCloud, { chips: cloudChipsOf(data), clickAction: config.clickAction, stagger: config.stagger, limit: config.limit, tone: tailToneOf(config.chipTone, 'neutral'), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.testId === undefined ? {} : { testId: config.testId }), ...(onSelect === undefined ? {} : { onSelect }) }));\n}\n//# sourceMappingURL=ChipCloud.js.map"],"names":["KNOWN_TONES","tailToneOf","value","fallback","resolveLocale","locale","tailRowsOf","data","envelope","stringField","row","key","numberField","parsed","seriesField","points","point","goodDirectionFor","name","rowDirection","overrides","trendOf","delta","isBadMove","good","moverTone","tone","formatMetricValue","tag","options","fmt","getFormatters","base","formatDelta","magnitude","formatRank","rank","rankRows","rows","n","sorted","a","b","max","best","total","sum","index","toggleOpen","open","id","exclusive","next","sparkToneFor","SparklineTable","limit","sparkWidth","sparkVariant","goodDirectionByMetric","emptyTitle","emptyBody","testId","slice","_jsx","EmptyState","trend","_jsxs","Sparkline","MonoText","DeltaPill","sparkRowsOf","rawValue","SparklineTableWidget","config","TopMoversList","showSparkline","onSelect","ranked","bad","Glyph","Minus","TrendingUp","TrendingDown","content","_Fragment","IconTile","moverRowsOf","TopMoversListWidget","onEvent","BAR_TONE","RankedEntityList","showBar","valueFormat","currency","rowTone","rankedEntitiesOf","RankedEntityListWidget","target","href","AccordionList","defaultOpen","glyph","known","setOpen","useState","initial","expanded","panelId","ChevronDown","Plus","current","Tag","field","accordionRowsOf","rawFields","fields","AccordionListWidget","bandsOf","groups","seen","band","lead","ordered","group","Cell","includedLabel","notIncludedLabel","Check","ComparisonMatrix","columns","promotedColumn","promotedLabel","bands","template","column","promoted","comparisonDataOf","rawColumns","rawRows","allow","ComparisonMatrixWidget","matrix","CHIP_ICONS","Table2","Database","TagIcon","Braces","LayoutDashboard","Hash","chipIcon","STAGGER_CLASS","ChipCloud","chips","clickAction","stagger","moreLabel","overflow","interactive","chip","body","staggerClass","cloudChipsOf","entry","record","label","ChipCloudWidget"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as s,r as h,V as W,b3 as I,b4 as z,b5 as R,b6 as H,E as C,b7 as E,M as _,n as G,b8 as U,b9 as T,ba as V,bb as q,bc as B,bd as J,be as Q}from"./index-PB1II0WV.js";import{bf as fe,bg as pe}from"./index-PB1II0WV.js";function k(e){return e==null?void 0:String(e)}function X({rows:e,config:r,selectedId:i,allLabel:d,emptyTitle:c,locale:p,now:u,rowIdField:b="id",onSelect:g,onToggle:w,testId:j}){const[m,N]=h.useState("__all__"),[x,y]=h.useState(i),t=i??x,l=r.filterField===void 0?[]:[...new Set(e.map(n=>k(n[r.filterField])).filter(n=>n!==void 0))],a=r.filterField===void 0||m==="__all__"?e:e.filter(n=>k(n[r.filterField])===m);return s.jsxs("div",{"data-widget":"master-list","data-testid":j,className:"flex h-full flex-col",children:[l.length>0&&s.jsx("div",{className:"flex flex-wrap items-center gap-1.5 border-b border-border px-3 py-2",children:["__all__",...l].map(n=>s.jsx("button",{type:"button","data-active":m===n,onClick:()=>N(n),className:"rounded-full border border-border px-2.5 py-0.5 text-caption font-semibold text-fg-muted data-[active=true]:border-accent data-[active=true]:bg-accent-soft data-[active=true]:text-accent hover:text-fg focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent",children:n==="__all__"?d??"All":n},n))}),a.length===0?s.jsx("div",{className:"flex flex-1 items-center justify-center px-4 py-8 text-center text-body-sm text-fg-muted",children:c??"No items match this filter"}):s.jsx("ul",{className:"min-h-0 flex-1 divide-y divide-border/60 overflow-y-auto",children:a.map(n=>{const o=String(n[b]??JSON.stringify(n)),f=k(n[r.titleField])??o,S=r.subtitleField===void 0?void 0:k(n[r.subtitleField]),$=r.statusField===void 0?void 0:k(n[r.statusField]),L=r.ownerField===void 0?void 0:k(n[r.ownerField]),K=r.updatedField===void 0?void 0:k(n[r.updatedField]),F=r.progressField===void 0?void 0:Number(n[r.progressField]),O=r.toggleField===void 0?void 0:n[r.toggleField]===!0,D=t===o;return s.jsx("li",{children:s.jsxs("div",{role:r.selectable?"button":void 0,tabIndex:r.selectable?0:void 0,"aria-current":D?!0:void 0,"data-selected":D,onClick:r.selectable?()=>{y(o),g?.(o,n)}:void 0,onKeyDown:r.selectable?v=>{(v.key==="Enter"||v.key===" ")&&(v.preventDefault(),y(o),g?.(o,n))}:void 0,className:"flex items-center gap-3 border-s-2 border-transparent px-3 py-2.5 data-[selected=true]:border-accent data-[selected=true]:bg-accent-soft/60 hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent",children:[L!==void 0&&s.jsx(W,{name:L,size:"sm"}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"truncate text-body-sm font-semibold text-fg",children:f}),$!==void 0&&s.jsx(I,{status:$})]}),S!==void 0&&s.jsx("p",{className:"truncate text-caption text-fg-muted",children:S}),F!==void 0&&Number.isFinite(F)&&s.jsxs("div",{className:"mt-1.5 flex items-center gap-2",children:[s.jsx(z,{value:F,size:"sm",className:"max-w-40",label:`${f} progress`}),s.jsxs("span",{className:"font-mono text-caption tabular-nums text-fg-subtle",children:[Math.round(F),"%"]})]}),K!==void 0&&s.jsx("p",{className:"mt-0.5 font-mono text-caption tabular-nums text-fg-subtle",children:R(K,{locale:p,...u===void 0?{}:{now:u}})})]}),O!==void 0&&s.jsx(H,{checked:O,"aria-label":`Toggle ${f}`,onClick:v=>v.stopPropagation(),onCheckedChange:v=>w?.(o,v,n)})]})},o)})})]})}function Y(e){return Array.isArray(e)?e:typeof e=="object"&&e!==null&&Array.isArray(e.data)?e.data:[]}function ie({config:e,data:r,onEvent:i}){const d=e.binding,c=d===void 0?void 0:d.source.schema===void 0?d.source.name:`${d.source.schema}.${d.source.name}`;return s.jsx(X,{rows:Y(r),config:e,...e.allLabel===void 0?{}:{allLabel:e.allLabel},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.format?.locale===void 0?{}:{locale:e.format.locale},onSelect:(p,u)=>{c!==void 0&&d!==void 0&&i({type:"record-open",connectionId:d.connectionId,table:c,recordId:u.id??p})},onToggle:(p,u)=>{c!==void 0&&d!==void 0&&e.toggleField!==void 0&&i({type:"mutate",intent:"update",connectionId:d.connectionId,table:c,recordId:p,values:{[e.toggleField]:u}})}})}function A(e,r,i){if(e===void 0)return"—";if(typeof e=="string")return e;const d=G(i??"en-US");switch(r.format){case"currency":return U(e,{locale:i});case"percent":return`${d.number(e,{maximumFractionDigits:1})}%`;case"number":case"progress":return d.number(e);default:return String(e)}}function Z({data:e,expandable:r=!0,totalsRow:i=!0,groupLabel:d,totalsLabel:c,emptyTitle:p,locale:u,testId:b}){const[g,w]=h.useState(new Set),{data:j,columns:m,totals:N}=e;if(j.length===0||m.length===0)return s.jsx(C,{compact:!0,preset:"no-data",title:p??"No summary data"});const x=`minmax(8rem,1.4fr) repeat(${m.length}, minmax(5rem,1fr))`,y=(t,l)=>{if(l.format==="progress"&&typeof t=="number"){const a=l.max??100;return s.jsxs("div",{className:"flex items-center justify-end gap-2",children:[s.jsx(z,{value:t,max:a,size:"sm",tone:l.tone??"accent",className:"max-w-24",label:l.label}),s.jsxs(_,{className:"text-caption tabular-nums text-fg-muted",children:[Math.round(t/a*100),"%"]})]})}return s.jsx(_,{className:"justify-self-end text-body-sm tabular-nums text-fg",children:A(t,l,u)})};return s.jsx("div",{"data-widget":"grouped-summary-table","data-testid":b,className:"flex h-full flex-col overflow-auto",children:s.jsxs("div",{role:"table",className:"min-w-full text-body-sm",children:[s.jsxs("div",{role:"row",className:"sticky top-0 z-[1] grid items-center gap-x-4 border-b border-border bg-surface-2 px-3 py-2 text-caption font-bold uppercase tracking-wide text-fg-subtle grid-cols-[var(--adm-cols)]",style:{"--adm-cols":x},children:[s.jsx("span",{children:d??"Group"}),m.map(t=>s.jsx("span",{className:"justify-self-end text-end",children:t.label},t.key))]}),j.map(t=>{const l=g.has(t.key),a=r&&t.rows!==void 0&&t.rows.length>0,n=()=>w(o=>{const f=new Set(o);return f.has(t.key)?f.delete(t.key):f.add(t.key),f});return s.jsxs("div",{role:"rowgroup",children:[s.jsxs("div",{role:"row","data-part":"group-row",tabIndex:a?0:void 0,"aria-expanded":a?l:void 0,onClick:a?n:void 0,onKeyDown:a?o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),n())}:void 0,className:`grid items-center gap-x-4 border-b border-border/60 px-3 py-2.5 grid-cols-[var(--adm-cols)] ${a?"cursor-pointer hover:bg-surface-2/50 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent":""}`,style:{"--adm-cols":x},children:[s.jsxs("span",{className:"flex items-center gap-1.5 font-semibold text-fg",children:[a&&s.jsx(E,{"aria-hidden":"true",className:`size-3.5 text-fg-subtle transition-transform rtl:-scale-x-100 ${l?"rotate-90 rtl:-rotate-90":""}`}),s.jsx("span",{className:"truncate",children:t.label}),t.count!==void 0&&s.jsxs("span",{className:"font-mono text-caption font-normal tabular-nums text-fg-subtle",children:["(",t.count,")"]})]}),m.map(o=>s.jsx("span",{className:"justify-self-end",children:y(t.aggregates[o.key],o)},o.key))]}),l&&t.rows?.map((o,f)=>s.jsxs("div",{role:"row","data-part":"detail-row",className:"grid items-center gap-x-4 border-b border-border/40 bg-surface-2/30 px-3 py-1.5 grid-cols-[var(--adm-cols)]",style:{"--adm-cols":x},children:[s.jsx("span",{className:"truncate ps-5 text-caption text-fg-muted",children:o.label}),m.map(S=>s.jsx("span",{className:"justify-self-end",children:s.jsx(_,{className:"text-caption tabular-nums text-fg-muted",children:A(o.aggregates[S.key],S,u)})},S.key))]},`${t.key}-${String(f)}`))]},t.key)}),i&&N!==void 0&&s.jsxs("div",{role:"row","data-part":"totals-row",className:"grid items-center gap-x-4 border-t-2 border-border px-3 py-2.5 font-semibold grid-cols-[var(--adm-cols)]",style:{"--adm-cols":x},children:[s.jsx("span",{className:"text-fg",children:c??"Total"}),m.map(t=>s.jsx(_,{className:"justify-self-end text-body-sm tabular-nums text-fg",children:A(N[t.key],{...t,format:t.format==="progress"?"percent":t.format},u)},t.key))]})]})})}function ee(e){if(typeof e=="object"&&e!==null){const r=e;return{data:Array.isArray(r.data)?r.data:[],columns:Array.isArray(r.columns)?r.columns:[],...r.totals===void 0?{}:{totals:r.totals}}}return{data:[],columns:[]}}function de({config:e,data:r}){return s.jsx(Z,{data:ee(r),expandable:e.expandable,totalsRow:e.totalsRow,...e.groupLabel===void 0?{}:{groupLabel:e.groupLabel},...e.totalsLabel===void 0?{}:{totalsLabel:e.totalsLabel},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.format?.locale===void 0?{}:{locale:e.format.locale}})}const te={schema:s.jsx(J,{className:"size-3.5 text-fg-subtle"}),table:s.jsx(B,{className:"size-3.5 text-accent"}),view:s.jsx(q,{className:"size-3.5 text-info"}),column:s.jsx(V,{className:"size-3.5 text-fg-subtle"})};function P(e,r,i,d){if(!(r>i))for(const c of e)c.children!==void 0&&c.children.length>0&&(d.add(c.id),P(c.children,r+1,i,d))}function se({roots:e,expandDepth:r=1,showTypes:i=!0,emptyTitle:d,locale:c,onSelect:p,testId:u}){const b=h.useMemo(()=>{const t=new Set;return P(e,0,r,t),t},[e,r]),[g,w]=h.useState(b),[j,m]=h.useState(void 0),N=G(c??"en-US");if(e.length===0)return s.jsx(C,{compact:!0,preset:"no-data",title:d??"No schema introspected"});const x=t=>w(l=>{const a=new Set(l);return a.has(t)?a.delete(t):a.add(t),a}),y=(t,l)=>{const a=t.children!==void 0&&t.children.length>0,n=g.has(t.id),o=j===t.id;return s.jsxs("li",{role:"treeitem","aria-expanded":a?n:void 0,"aria-selected":o,children:[s.jsxs("div",{tabIndex:0,"data-selected":o,onClick:()=>{m(t.id),p?.(t),a&&x(t.id)},onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),m(t.id),p?.(t),a&&x(t.id))},className:"flex cursor-pointer items-center gap-1.5 rounded-md py-1 pe-2 text-body-sm data-[selected=true]:bg-accent-soft/60 hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent ps-[calc(var(--adm-depth)*0.75rem+0.25rem)]",style:{"--adm-depth":String(l)},children:[s.jsx(E,{"aria-hidden":"true",className:`size-3 shrink-0 rtl:-scale-x-100 ${a?"text-fg-subtle":"invisible"} ${n?"rotate-90 rtl:-rotate-90":""}`}),te[t.kind],s.jsx("span",{className:`truncate ${t.kind==="column"?"text-fg-muted":"font-medium text-fg"}`,children:t.label}),t.pk===!0&&s.jsx(T,{tone:"accent",mono:!0,children:"PK"}),t.fk===!0&&s.jsx(T,{tone:"info",mono:!0,children:"FK"}),t.unique===!0&&s.jsx(T,{tone:"neutral",mono:!0,children:"UQ"}),t.kind==="view"&&s.jsx(T,{tone:"info",children:"view"}),i&&t.pgType!==void 0&&s.jsx(T,{tone:"neutral",mono:!0,className:"ms-auto",children:t.pgType}),t.rowCount!==void 0&&s.jsx("span",{className:"ms-auto font-mono text-caption tabular-nums text-fg-subtle",children:N.number(t.rowCount)})]}),a&&n&&s.jsx("ul",{role:"group",children:t.children?.map(f=>y(f,l+1))})]},t.id)};return s.jsx("ul",{role:"tree","aria-label":"Schema","data-widget":"schema-tree","data-testid":u,className:"h-full overflow-auto px-1.5 py-1.5",children:e.map(t=>y(t,0))})}function re(e){return typeof e=="object"&&e!==null&&Array.isArray(e.roots)?e.roots:Array.isArray(e)?e:[]}function oe({config:e,data:r,onEvent:i}){return s.jsx(se,{roots:re(r),expandDepth:e.expandDepth,showTypes:e.showTypes,...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.format?.locale===void 0?{}:{locale:e.format.locale},onSelect:d=>{(d.kind==="table"||d.kind==="view")&&i({type:"drill-through",href:`#/schema/${d.id}`})}})}const M=(e,r)=>`${e}\0${r}`;function ne({data:e,cellMode:r="toggle",rowHeader:i,matrixLabel:d,emptyTitle:c,onToggle:p,testId:u}){const[b,g]=h.useState(new Map),w=h.useMemo(()=>{const t=[],l=new Map;for(const a of e.rows){const n=a.group??"__ungrouped__";l.has(n)||(l.set(n,[]),t.push(n)),l.get(n)?.push(a)}return t.map(a=>({id:a,...a==="__ungrouped__"?{}:{label:a},rows:(l.get(a)??[]).map(n=>({id:n.id,label:n.label}))}))},[e.rows]),j=h.useMemo(()=>e.columns.map(t=>({id:t.id,label:t.label,...t.locked===!0?{locked:!0}:{}})),[e.columns]);if(e.rows.length===0||e.columns.length===0)return s.jsx(C,{compact:!0,preset:"no-data",title:c??"No matrix configured"});const m=(t,l)=>e.cells[t]?.[l]===!0,N=(t,l)=>e.locked?.[t]?.[l]===!0,x=(t,l)=>N(t,l)?"locked":b.get(M(t,l))??m(t,l)?"on":"off",y=(t,l)=>{const a=b.get(M(t,l));return a!==void 0&&a!==m(t,l)};return s.jsx("div",{"data-widget":"toggle-matrix","data-testid":u,className:"h-full overflow-auto p-2",children:s.jsx(Q,{label:d??"Permissions matrix",rowHeader:i??"Permission",columns:j,groups:w,getCellState:x,isDirty:y,disabled:r==="readonly",...r==="readonly"?{}:{onToggle:(t,l,a)=>{g(n=>new Map(n).set(M(t,l),a)),p?.(t,l,a)}}})})}function ae(e){const r={rowKeys:[],colKeys:[],columns:[],rows:[],cells:{}};if(typeof e!="object"||e===null)return r;const i=e;return{rowKeys:Array.isArray(i.rowKeys)?i.rowKeys:[],colKeys:Array.isArray(i.colKeys)?i.colKeys:[],columns:Array.isArray(i.columns)?i.columns:[],rows:Array.isArray(i.rows)?i.rows:[],cells:typeof i.cells=="object"&&i.cells!==null?i.cells:{},...i.locked===void 0?{}:{locked:i.locked}}}function ce({config:e,data:r,onEvent:i}){const d=e.binding,c=e.persistTarget??(d===void 0?void 0:d.source.schema===void 0?d.source.name:`${d.source.schema}.${d.source.name}`);return s.jsx(ne,{data:ae(r),cellMode:e.cellMode,...e.rowHeader===void 0?{}:{rowHeader:e.rowHeader},...e.matrixLabel===void 0?{}:{matrixLabel:e.matrixLabel},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},onToggle:(p,u,b)=>{c!==void 0&&i({type:"mutate",intent:"update",...d===void 0?{}:{connectionId:d.connectionId},table:c,recordId:p,values:{[u]:b}})}})}export{fe as CardGalleryWidget,de as GroupedSummaryTableWidget,pe as LogTableWidget,ie as MasterListWidget,oe as SchemaTreeWidget,ce as ToggleMatrixWidget};
2
+ //# sourceMappingURL=tables-track-f-components-CVNPd7rq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables-track-f-components-CVNPd7rq.js","sources":["../../../../packages/widgets/dist/families/tables/MasterList.js","../../../../packages/widgets/dist/families/tables/GroupedSummaryTable.js","../../../../packages/widgets/dist/families/tables/SchemaTree.js","../../../../packages/widgets/dist/families/tables/ToggleMatrixWidget.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Avatar, ProgressBar, StatusPill, Switch } from '@adminium/ui';\nimport { useState } from 'react';\nimport { formatRelativeTime } from './column-spec.js';\n/**\n * `master-list` (annex §3) — selectable rich list rows driving a detail pane:\n * owner avatar, title/subtitle, status pill, optional inline toggle, progress\n * %, and per-row stats, filtered by a chip bar. Row selection is the primary\n * interaction (feeds a sibling detail widget); the inline toggle emits a\n * mutation intent. Binds to a `record-list` + selection state.\n */\n// Config schema + deterministic demo payload live in the pure\n// `tables-track-f-config` module so the registry metadata graph never reaches\n// this component file (04 §2.3). Re-exported here to keep existing import\n// points stable.\nexport { masterListConfigSchema, masterListDemoData } from './tables-track-f-config.js';\nfunction str(value) {\n return value === null || value === undefined ? undefined : String(value);\n}\nexport function MasterList({ rows, config, selectedId, allLabel, emptyTitle, locale, now, rowIdField = 'id', onSelect, onToggle, testId, }) {\n const [activeFilter, setActiveFilter] = useState('__all__');\n const [localSelected, setLocalSelected] = useState(selectedId);\n const selected = selectedId ?? localSelected;\n const filterValues = config.filterField === undefined\n ? []\n : [...new Set(rows.map((row) => str(row[config.filterField])).filter((v) => v !== undefined))];\n const filtered = config.filterField === undefined || activeFilter === '__all__'\n ? rows\n : rows.filter((row) => str(row[config.filterField]) === activeFilter);\n return (_jsxs(\"div\", { \"data-widget\": \"master-list\", \"data-testid\": testId, className: \"flex h-full flex-col\", children: [filterValues.length > 0 && (_jsx(\"div\", { className: \"flex flex-wrap items-center gap-1.5 border-b border-border px-3 py-2\", children: ['__all__', ...filterValues].map((value) => (_jsx(\"button\", { type: \"button\", \"data-active\": activeFilter === value, onClick: () => setActiveFilter(value), className: \"rounded-full border border-border px-2.5 py-0.5 text-caption font-semibold text-fg-muted data-[active=true]:border-accent data-[active=true]:bg-accent-soft data-[active=true]:text-accent hover:text-fg focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent\", children: value === '__all__' ? (allLabel ?? 'All') : value }, value))) })), filtered.length === 0 ? (_jsx(\"div\", { className: \"flex flex-1 items-center justify-center px-4 py-8 text-center text-body-sm text-fg-muted\", children: emptyTitle ?? 'No items match this filter' })) : (_jsx(\"ul\", { className: \"min-h-0 flex-1 divide-y divide-border/60 overflow-y-auto\", children: filtered.map((row) => {\n const id = String(row[rowIdField] ?? JSON.stringify(row));\n const title = str(row[config.titleField]) ?? id;\n const subtitle = config.subtitleField === undefined ? undefined : str(row[config.subtitleField]);\n const status = config.statusField === undefined ? undefined : str(row[config.statusField]);\n const owner = config.ownerField === undefined ? undefined : str(row[config.ownerField]);\n const updated = config.updatedField === undefined ? undefined : str(row[config.updatedField]);\n const progress = config.progressField === undefined ? undefined : Number(row[config.progressField]);\n const toggleOn = config.toggleField === undefined ? undefined : row[config.toggleField] === true;\n const isSelected = selected === id;\n return (_jsx(\"li\", { children: _jsxs(\"div\", { role: config.selectable ? 'button' : undefined, tabIndex: config.selectable ? 0 : undefined, \"aria-current\": isSelected ? true : undefined, \"data-selected\": isSelected, onClick: config.selectable\n ? () => {\n setLocalSelected(id);\n onSelect?.(id, row);\n }\n : undefined, onKeyDown: config.selectable\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setLocalSelected(id);\n onSelect?.(id, row);\n }\n }\n : undefined, className: \"flex items-center gap-3 border-s-2 border-transparent px-3 py-2.5 data-[selected=true]:border-accent data-[selected=true]:bg-accent-soft/60 hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent\", children: [owner !== undefined && _jsx(Avatar, { name: owner, size: \"sm\" }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsxs(\"div\", { className: \"flex items-center gap-2\", children: [_jsx(\"span\", { className: \"truncate text-body-sm font-semibold text-fg\", children: title }), status !== undefined && _jsx(StatusPill, { status: status })] }), subtitle !== undefined && _jsx(\"p\", { className: \"truncate text-caption text-fg-muted\", children: subtitle }), progress !== undefined && Number.isFinite(progress) && (_jsxs(\"div\", { className: \"mt-1.5 flex items-center gap-2\", children: [_jsx(ProgressBar, { value: progress, size: \"sm\", className: \"max-w-40\", label: `${title} progress` }), _jsxs(\"span\", { className: \"font-mono text-caption tabular-nums text-fg-subtle\", children: [Math.round(progress), \"%\"] })] })), updated !== undefined && (_jsx(\"p\", { className: \"mt-0.5 font-mono text-caption tabular-nums text-fg-subtle\", children: formatRelativeTime(updated, { locale, ...(now === undefined ? {} : { now }) }) }))] }), toggleOn !== undefined && (_jsx(Switch, { checked: toggleOn, \"aria-label\": `Toggle ${title}`, onClick: (event) => event.stopPropagation(), onCheckedChange: (next) => onToggle?.(id, next, row) }))] }) }, id));\n }) }))] }));\n}\nfunction rowsOf(data) {\n if (Array.isArray(data))\n return data;\n if (typeof data === 'object' && data !== null && Array.isArray(data.data)) {\n return data.data;\n }\n return [];\n}\nexport function MasterListWidget({ config, data, onEvent }) {\n const source = config.binding;\n const table = source === undefined ? undefined : source.source.schema === undefined ? source.source.name : `${source.source.schema}.${source.source.name}`;\n return (_jsx(MasterList, { rows: rowsOf(data), config: config, ...(config.allLabel === undefined ? {} : { allLabel: config.allLabel }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), onSelect: (id, row) => {\n if (table !== undefined && source !== undefined) {\n onEvent({ type: 'record-open', connectionId: source.connectionId, table, recordId: row['id'] ?? id });\n }\n }, onToggle: (id, next) => {\n if (table !== undefined && source !== undefined && config.toggleField !== undefined) {\n onEvent({ type: 'mutate', intent: 'update', connectionId: source.connectionId, table, recordId: id, values: { [config.toggleField]: next } });\n }\n } }));\n}\n//# sourceMappingURL=MasterList.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getFormatters } from '@adminium/i18n';\nimport { EmptyState, MonoText, ProgressBar } from '@adminium/ui';\nimport { ChevronRight } from 'lucide-react';\nimport { useState } from 'react';\nimport { formatMoney } from './column-spec.js';\n/**\n * `grouped-summary-table` (annex §3) — group-header rows with aggregate\n * columns (a usage progress bar, mono figures), expandable detail rows, and a\n * Σ totals footer. Binds to a `record-list` of GROUP rows plus per-group\n * aggregates and grand totals.\n */\n// Config schema + deterministic demo payload live in the pure\n// `tables-track-f-config` module, and the aggregate shapes in\n// `tables-track-f-types`, so the registry metadata graph never reaches this\n// component file (04 §2.3). Re-exported here to keep existing import points\n// stable.\nexport { groupedSummaryTableConfigSchema, groupedSummaryTableDemoData } from './tables-track-f-config.js';\nfunction formatCell(value, column, locale) {\n if (value === undefined)\n return '—';\n if (typeof value === 'string')\n return value;\n const fmt = getFormatters(locale ?? 'en-US');\n switch (column.format) {\n case 'currency':\n return formatMoney(value, { locale });\n case 'percent':\n return `${fmt.number(value, { maximumFractionDigits: 1 })}%`;\n case 'number':\n case 'progress':\n return fmt.number(value);\n default:\n return String(value);\n }\n}\nexport function GroupedSummaryTable({ data, expandable = true, totalsRow = true, groupLabel, totalsLabel, emptyTitle, locale, testId, }) {\n const [open, setOpen] = useState(new Set());\n const { data: groups, columns, totals } = data;\n if (groups.length === 0 || columns.length === 0) {\n return _jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No summary data' });\n }\n const gridCols = `minmax(8rem,1.4fr) repeat(${columns.length}, minmax(5rem,1fr))`;\n const cell = (value, column) => {\n if (column.format === 'progress' && typeof value === 'number') {\n const max = column.max ?? 100;\n return (_jsxs(\"div\", { className: \"flex items-center justify-end gap-2\", children: [_jsx(ProgressBar, { value: value, max: max, size: \"sm\", tone: column.tone ?? 'accent', className: \"max-w-24\", label: column.label }), _jsxs(MonoText, { className: \"text-caption tabular-nums text-fg-muted\", children: [Math.round((value / max) * 100), \"%\"] })] }));\n }\n return _jsx(MonoText, { className: \"justify-self-end text-body-sm tabular-nums text-fg\", children: formatCell(value, column, locale) });\n };\n return (_jsx(\"div\", { \"data-widget\": \"grouped-summary-table\", \"data-testid\": testId, className: \"flex h-full flex-col overflow-auto\", children: _jsxs(\"div\", { role: \"table\", className: \"min-w-full text-body-sm\", children: [_jsxs(\"div\", { role: \"row\", className: \"sticky top-0 z-[1] grid items-center gap-x-4 border-b border-border bg-surface-2 px-3 py-2 text-caption font-bold uppercase tracking-wide text-fg-subtle grid-cols-[var(--adm-cols)]\", style: { '--adm-cols': gridCols }, children: [_jsx(\"span\", { children: groupLabel ?? 'Group' }), columns.map((column) => (_jsx(\"span\", { className: \"justify-self-end text-end\", children: column.label }, column.key)))] }), groups.map((group) => {\n const isOpen = open.has(group.key);\n const canExpand = expandable && group.rows !== undefined && group.rows.length > 0;\n const toggle = () => setOpen((prev) => {\n const next = new Set(prev);\n if (next.has(group.key))\n next.delete(group.key);\n else\n next.add(group.key);\n return next;\n });\n return (_jsxs(\"div\", { role: \"rowgroup\", children: [_jsxs(\"div\", { role: \"row\", \"data-part\": \"group-row\", tabIndex: canExpand ? 0 : undefined, \"aria-expanded\": canExpand ? isOpen : undefined, onClick: canExpand ? toggle : undefined, onKeyDown: canExpand\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n }\n : undefined, className: `grid items-center gap-x-4 border-b border-border/60 px-3 py-2.5 grid-cols-[var(--adm-cols)] ${canExpand ? 'cursor-pointer hover:bg-surface-2/50 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent' : ''}`, style: { '--adm-cols': gridCols }, children: [_jsxs(\"span\", { className: \"flex items-center gap-1.5 font-semibold text-fg\", children: [canExpand && (_jsx(ChevronRight, { \"aria-hidden\": \"true\", className: `size-3.5 text-fg-subtle transition-transform rtl:-scale-x-100 ${isOpen ? 'rotate-90 rtl:-rotate-90' : ''}` })), _jsx(\"span\", { className: \"truncate\", children: group.label }), group.count !== undefined && (_jsxs(\"span\", { className: \"font-mono text-caption font-normal tabular-nums text-fg-subtle\", children: [\"(\", group.count, \")\"] }))] }), columns.map((column) => (_jsx(\"span\", { className: \"justify-self-end\", children: cell(group.aggregates[column.key], column) }, column.key)))] }), isOpen &&\n group.rows?.map((detail, index) => (_jsxs(\"div\", { role: \"row\", \"data-part\": \"detail-row\", className: \"grid items-center gap-x-4 border-b border-border/40 bg-surface-2/30 px-3 py-1.5 grid-cols-[var(--adm-cols)]\", style: { '--adm-cols': gridCols }, children: [_jsx(\"span\", { className: \"truncate ps-5 text-caption text-fg-muted\", children: detail.label }), columns.map((column) => (_jsx(\"span\", { className: \"justify-self-end\", children: _jsx(MonoText, { className: \"text-caption tabular-nums text-fg-muted\", children: formatCell(detail.aggregates[column.key], column, locale) }) }, column.key)))] }, `${group.key}-${String(index)}`)))] }, group.key));\n }), totalsRow && totals !== undefined && (_jsxs(\"div\", { role: \"row\", \"data-part\": \"totals-row\", className: \"grid items-center gap-x-4 border-t-2 border-border px-3 py-2.5 font-semibold grid-cols-[var(--adm-cols)]\", style: { '--adm-cols': gridCols }, children: [_jsx(\"span\", { className: \"text-fg\", children: totalsLabel ?? 'Total' }), columns.map((column) => (_jsx(MonoText, { className: \"justify-self-end text-body-sm tabular-nums text-fg\", children: formatCell(totals[column.key], { ...column, format: column.format === 'progress' ? 'percent' : column.format }, locale) }, column.key)))] }))] }) }));\n}\nfunction summaryDataOf(data) {\n if (typeof data === 'object' && data !== null) {\n const envelope = data;\n return {\n data: Array.isArray(envelope.data) ? envelope.data : [],\n columns: Array.isArray(envelope.columns) ? envelope.columns : [],\n ...(envelope.totals === undefined ? {} : { totals: envelope.totals }),\n };\n }\n return { data: [], columns: [] };\n}\nexport function GroupedSummaryTableWidget({ config, data }) {\n return (_jsx(GroupedSummaryTable, { data: summaryDataOf(data), expandable: config.expandable, totalsRow: config.totalsRow, ...(config.groupLabel === undefined ? {} : { groupLabel: config.groupLabel }), ...(config.totalsLabel === undefined ? {} : { totalsLabel: config.totalsLabel }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }) }));\n}\n//# sourceMappingURL=GroupedSummaryTable.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getFormatters } from '@adminium/i18n';\nimport { EmptyState, Tag } from '@adminium/ui';\nimport { ChevronRight, Columns3, Database, Eye, Table2 } from 'lucide-react';\nimport { useMemo, useState } from 'react';\n/**\n * `schema-tree` (annex §3) — an introspected hierarchy explorer:\n * schema → tables (row counts, view badge) → columns with PK/FK/UQ badges and\n * pg types. Binds to the `hierarchy/tree` shape from introspection metadata.\n */\n// Config schema + deterministic demo payload live in the pure\n// `tables-track-f-config` module, and the node shape in\n// `tables-track-f-types`, so the registry metadata graph never reaches this\n// component file (04 §2.3). Re-exported here to keep existing import points\n// stable.\nexport { schemaTreeConfigSchema, schemaTreeDemoData } from './tables-track-f-config.js';\nconst KIND_ICON = {\n schema: _jsx(Database, { className: \"size-3.5 text-fg-subtle\" }),\n table: _jsx(Table2, { className: \"size-3.5 text-accent\" }),\n view: _jsx(Eye, { className: \"size-3.5 text-info\" }),\n column: _jsx(Columns3, { className: \"size-3.5 text-fg-subtle\" }),\n};\nfunction collectOpen(nodes, depth, maxDepth, acc) {\n if (depth > maxDepth)\n return;\n for (const node of nodes) {\n if (node.children !== undefined && node.children.length > 0) {\n acc.add(node.id);\n collectOpen(node.children, depth + 1, maxDepth, acc);\n }\n }\n}\nexport function SchemaTree({ roots, expandDepth = 1, showTypes = true, emptyTitle, locale, onSelect, testId, }) {\n const initialOpen = useMemo(() => {\n const set = new Set();\n collectOpen(roots, 0, expandDepth, set);\n return set;\n }, [roots, expandDepth]);\n const [open, setOpen] = useState(initialOpen);\n const [selected, setSelected] = useState(undefined);\n const numbers = getFormatters(locale ?? 'en-US');\n if (roots.length === 0) {\n return _jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No schema introspected' });\n }\n const toggle = (id) => setOpen((prev) => {\n const next = new Set(prev);\n if (next.has(id))\n next.delete(id);\n else\n next.add(id);\n return next;\n });\n const renderNode = (node, depth) => {\n const hasChildren = node.children !== undefined && node.children.length > 0;\n const isOpen = open.has(node.id);\n const isSelected = selected === node.id;\n return (_jsxs(\"li\", { role: \"treeitem\", \"aria-expanded\": hasChildren ? isOpen : undefined, \"aria-selected\": isSelected, children: [_jsxs(\"div\", { tabIndex: 0, \"data-selected\": isSelected, onClick: () => {\n setSelected(node.id);\n onSelect?.(node);\n if (hasChildren)\n toggle(node.id);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setSelected(node.id);\n onSelect?.(node);\n if (hasChildren)\n toggle(node.id);\n }\n }, className: \"flex cursor-pointer items-center gap-1.5 rounded-md py-1 pe-2 text-body-sm data-[selected=true]:bg-accent-soft/60 hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent ps-[calc(var(--adm-depth)*0.75rem+0.25rem)]\", style: { '--adm-depth': String(depth) }, children: [_jsx(ChevronRight, { \"aria-hidden\": \"true\", className: `size-3 shrink-0 rtl:-scale-x-100 ${hasChildren ? 'text-fg-subtle' : 'invisible'} ${isOpen ? 'rotate-90 rtl:-rotate-90' : ''}` }), KIND_ICON[node.kind], _jsx(\"span\", { className: `truncate ${node.kind === 'column' ? 'text-fg-muted' : 'font-medium text-fg'}`, children: node.label }), node.pk === true && _jsx(Tag, { tone: \"accent\", mono: true, children: \"PK\" }), node.fk === true && _jsx(Tag, { tone: \"info\", mono: true, children: \"FK\" }), node.unique === true && _jsx(Tag, { tone: \"neutral\", mono: true, children: \"UQ\" }), node.kind === 'view' && _jsx(Tag, { tone: \"info\", children: \"view\" }), showTypes && node.pgType !== undefined && _jsx(Tag, { tone: \"neutral\", mono: true, className: \"ms-auto\", children: node.pgType }), node.rowCount !== undefined && (_jsx(\"span\", { className: \"ms-auto font-mono text-caption tabular-nums text-fg-subtle\", children: numbers.number(node.rowCount) }))] }), hasChildren && isOpen && (_jsx(\"ul\", { role: \"group\", children: node.children?.map((child) => renderNode(child, depth + 1)) }))] }, node.id));\n };\n return (_jsx(\"ul\", { role: \"tree\", \"aria-label\": \"Schema\", \"data-widget\": \"schema-tree\", \"data-testid\": testId, className: \"h-full overflow-auto px-1.5 py-1.5\", children: roots.map((node) => renderNode(node, 0)) }));\n}\nfunction rootsOf(data) {\n if (typeof data === 'object' && data !== null && Array.isArray(data.roots)) {\n return data.roots;\n }\n if (Array.isArray(data))\n return data;\n return [];\n}\nexport function SchemaTreeWidget({ config, data, onEvent }) {\n return (_jsx(SchemaTree, { roots: rootsOf(data), expandDepth: config.expandDepth, showTypes: config.showTypes, ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), onSelect: (node) => {\n if (node.kind === 'table' || node.kind === 'view') {\n onEvent({ type: 'drill-through', href: `#/schema/${node.id}` });\n }\n } }));\n}\n//# sourceMappingURL=SchemaTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { EmptyState, ToggleMatrix } from '@adminium/ui';\nimport { useMemo, useState } from 'react';\n/**\n * `toggle-matrix` (annex §3) — an interactive boolean grid (rows =\n * permissions/events, columns = roles/channels/tables) built on the ui\n * `ToggleMatrix` primitive: tri-state cells, locked columns, grouped iconized\n * sections, and dirty diff dots. Powers RBAC, RLS, and notification matrices.\n * Binds to the `matrix` shape; edits emit a mutation intent against\n * `persistTarget`.\n */\n// Config schema + deterministic demo payload live in the pure\n// `tables-track-f-config` module, and the matrix shapes in\n// `tables-track-f-types`, so the registry metadata graph never reaches this\n// component file (04 §2.3). Re-exported here to keep existing import points\n// stable.\nexport { toggleMatrixConfigSchema, toggleMatrixDemoData } from './tables-track-f-config.js';\nconst cellKey = (rowId, colId) => `${rowId}\\u0000${colId}`;\nexport function ToggleMatrixGrid({ data, cellMode: mode = 'toggle', rowHeader, matrixLabel, emptyTitle, onToggle, testId, }) {\n const [overrides, setOverrides] = useState(new Map());\n const groups = useMemo(() => {\n const order = [];\n const byGroup = new Map();\n for (const row of data.rows) {\n const key = row.group ?? '__ungrouped__';\n if (!byGroup.has(key)) {\n byGroup.set(key, []);\n order.push(key);\n }\n byGroup.get(key)?.push(row);\n }\n return order.map((key) => ({\n id: key,\n ...(key === '__ungrouped__' ? {} : { label: key }),\n rows: (byGroup.get(key) ?? []).map((row) => ({ id: row.id, label: row.label })),\n }));\n }, [data.rows]);\n const columns = useMemo(() => data.columns.map((column) => ({ id: column.id, label: column.label, ...(column.locked === true ? { locked: true } : {}) })), [data.columns]);\n if (data.rows.length === 0 || data.columns.length === 0) {\n return _jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No matrix configured' });\n }\n const baseState = (rowId, colId) => data.cells[rowId]?.[colId] === true;\n const isLocked = (rowId, colId) => data.locked?.[rowId]?.[colId] === true;\n const getCellState = (rowId, colId) => {\n if (isLocked(rowId, colId))\n return 'locked';\n const override = overrides.get(cellKey(rowId, colId));\n const on = override ?? baseState(rowId, colId);\n return on ? 'on' : 'off';\n };\n const isDirty = (rowId, colId) => {\n const override = overrides.get(cellKey(rowId, colId));\n return override !== undefined && override !== baseState(rowId, colId);\n };\n return (_jsx(\"div\", { \"data-widget\": \"toggle-matrix\", \"data-testid\": testId, className: \"h-full overflow-auto p-2\", children: _jsx(ToggleMatrix, { label: matrixLabel ?? 'Permissions matrix', rowHeader: rowHeader ?? 'Permission', columns: columns, groups: groups, getCellState: getCellState, isDirty: isDirty, disabled: mode === 'readonly', ...(mode === 'readonly'\n ? {}\n : {\n onToggle: (rowId, colId, next) => {\n setOverrides((prev) => new Map(prev).set(cellKey(rowId, colId), next));\n onToggle?.(rowId, colId, next);\n },\n }) }) }));\n}\nfunction matrixDataOf(data) {\n const empty = { rowKeys: [], colKeys: [], columns: [], rows: [], cells: {} };\n if (typeof data !== 'object' || data === null)\n return empty;\n const envelope = data;\n return {\n rowKeys: Array.isArray(envelope.rowKeys) ? envelope.rowKeys : [],\n colKeys: Array.isArray(envelope.colKeys) ? envelope.colKeys : [],\n columns: Array.isArray(envelope.columns) ? envelope.columns : [],\n rows: Array.isArray(envelope.rows) ? envelope.rows : [],\n cells: typeof envelope.cells === 'object' && envelope.cells !== null ? envelope.cells : {},\n ...(envelope.locked === undefined ? {} : { locked: envelope.locked }),\n };\n}\nexport function ToggleMatrixWidget({ config, data, onEvent }) {\n const source = config.binding;\n const table = config.persistTarget ??\n (source === undefined ? undefined : source.source.schema === undefined ? source.source.name : `${source.source.schema}.${source.source.name}`);\n return (_jsx(ToggleMatrixGrid, { data: matrixDataOf(data), cellMode: config.cellMode, ...(config.rowHeader === undefined ? {} : { rowHeader: config.rowHeader }), ...(config.matrixLabel === undefined ? {} : { matrixLabel: config.matrixLabel }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), onToggle: (rowId, colId, next) => {\n if (table !== undefined) {\n onEvent({\n type: 'mutate',\n intent: 'update',\n ...(source === undefined ? {} : { connectionId: source.connectionId }),\n table,\n recordId: rowId,\n values: { [colId]: next },\n });\n }\n } }));\n}\n//# sourceMappingURL=ToggleMatrixWidget.js.map"],"names":["str","value","MasterList","rows","config","selectedId","allLabel","emptyTitle","locale","now","rowIdField","onSelect","onToggle","testId","activeFilter","setActiveFilter","useState","localSelected","setLocalSelected","selected","filterValues","row","v","filtered","_jsxs","_jsx","id","title","subtitle","status","owner","updated","progress","toggleOn","isSelected","event","Avatar","StatusPill","ProgressBar","formatRelativeTime","Switch","next","rowsOf","data","MasterListWidget","onEvent","source","table","formatCell","column","fmt","getFormatters","formatMoney","GroupedSummaryTable","expandable","totalsRow","groupLabel","totalsLabel","open","setOpen","groups","columns","totals","EmptyState","gridCols","cell","max","MonoText","group","isOpen","canExpand","toggle","prev","ChevronRight","detail","index","summaryDataOf","envelope","GroupedSummaryTableWidget","KIND_ICON","Database","Table2","Eye","Columns3","collectOpen","nodes","depth","maxDepth","acc","node","SchemaTree","roots","expandDepth","showTypes","initialOpen","useMemo","set","setSelected","numbers","renderNode","hasChildren","Tag","child","rootsOf","SchemaTreeWidget","cellKey","rowId","colId","ToggleMatrixGrid","mode","rowHeader","matrixLabel","overrides","setOverrides","order","byGroup","key","baseState","isLocked","getCellState","isDirty","override","ToggleMatrix","matrixDataOf","empty","ToggleMatrixWidget"],"mappings":"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"}