@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 @@
1
+ {"version":3,"file":"forms-track-components-Bc2Hoxdh.js","sources":["../../../../packages/ui/dist/components/chip-input/ChipInput.js","../../../../packages/widgets/dist/families/forms/FormFields.js","../../../../packages/widgets/dist/families/forms/DrawerForm.js","../../../../packages/widgets/dist/families/forms/ExportBuilder.js","../../../../packages/widgets/dist/families/forms/FlowBuilder.js","../../../../packages/widgets/dist/families/forms/InlineEditableField.js","../../../../packages/widgets/dist/families/forms/QuestionBuilder.js","../../../../packages/widgets/dist/families/forms/RuleBuilder.js","../../../../packages/widgets/dist/families/forms/FilterChipBar.js","../../../../packages/widgets/dist/families/forms/InputWidgets.js","../../../../packages/widgets/dist/families/forms/ModalWizard.js","../../../../packages/widgets/dist/families/forms/OptionCards.js","../../../../packages/widgets/dist/families/forms/ProgressBarWidget.js","../../../../packages/widgets/dist/families/forms/StepperWidget.js","../../../../packages/widgets/dist/families/forms/ToggleSwitchList.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef, useState } from 'react';\nimport { cn } from '../../lib/cn.js';\nimport { Tag } from '../tag/index.js';\n/** Paste/typing separators: commas and any whitespace. */\nconst SPLIT_RE = /[,\\s]+/;\n/**\n * ChipInput (MultiSelect/TagInput) — removable chips + inline text input\n * (research/design-system.md §3 Tier 2). Enter or `,` commits the pending\n * text, paste splits on commas/whitespace, Backspace on an empty input\n * removes the last chip, duplicates are ignored.\n */\nexport function ChipInput({ className, inputClassName, value, defaultValue, onValueChange, validate, removeLabel, error = false, disabled, ref, onKeyDown, onPaste, onBlur, ...inputProps }) {\n const innerRef = useRef(null);\n const [internal, setInternal] = useState(defaultValue ?? []);\n const [text, setText] = useState('');\n const [rejected, setRejected] = useState(false);\n const chips = value !== undefined ? value : internal;\n const invalid = error || rejected;\n const setRef = (node) => {\n innerRef.current = node;\n if (typeof ref === 'function')\n ref(node);\n else if (ref)\n ref.current = node;\n };\n const commitChips = (next) => {\n if (value === undefined)\n setInternal(next);\n onValueChange?.(next);\n };\n /** Add tokens; returns the ones that failed validation. */\n const addTokens = (raw) => {\n const tokens = raw.split(SPLIT_RE).map((token) => token.trim()).filter((token) => token.length > 0);\n if (tokens.length === 0)\n return [];\n const next = [...chips];\n const failed = [];\n for (const token of tokens) {\n if (validate && !validate(token)) {\n failed.push(token);\n }\n else if (!next.includes(token)) {\n next.push(token);\n }\n }\n if (next.length !== chips.length)\n commitChips(next);\n return failed;\n };\n const commitPending = () => {\n const failed = addTokens(text);\n setText(failed.join(', '));\n setRejected(failed.length > 0);\n };\n const handleKeyDown = (event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented)\n return;\n if (event.key === 'Enter' || event.key === ',') {\n if (text.trim().length > 0) {\n event.preventDefault();\n commitPending();\n }\n else if (event.key === ',') {\n event.preventDefault();\n }\n }\n else if (event.key === 'Backspace' && text.length === 0 && chips.length > 0) {\n commitChips(chips.slice(0, -1));\n }\n };\n const handlePaste = (event) => {\n onPaste?.(event);\n if (event.defaultPrevented)\n return;\n const pasted = event.clipboardData.getData('text');\n if (!SPLIT_RE.test(pasted))\n return; // single token: let it type normally\n event.preventDefault();\n const failed = addTokens(`${text} ${pasted}`);\n setText(failed.join(', '));\n setRejected(failed.length > 0);\n };\n return (\n // The wrapper focuses the inline input on click; it is not itself interactive.\n _jsxs(\"div\", { \"data-invalid\": invalid ? '' : undefined, onClick: () => innerRef.current?.focus(), className: cn('flex min-h-[34px] w-full min-w-0 cursor-text flex-wrap items-center gap-1.5 rounded-md border border-border-strong bg-surface-2 px-2 py-1.5', 'transition-[border-color,box-shadow] duration-150', 'focus-within:border-accent focus-within:ring-[3px] focus-within:ring-accent-soft', 'has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-40', 'data-[invalid]:border-danger data-[invalid]:focus-within:ring-danger-soft', className), children: [chips.map((chip) => (_jsx(Tag, { mono: true, onRemove: () => commitChips(chips.filter((existing) => existing !== chip)), removeLabel: removeLabel(chip), children: chip }, chip))), _jsx(\"input\", { ref: setRef, type: \"text\", value: text, disabled: disabled, ...(invalid ? { 'aria-invalid': true } : {}), onChange: (event) => {\n setText(event.target.value);\n setRejected(false);\n }, onKeyDown: handleKeyDown, onPaste: handlePaste, onBlur: (event) => {\n if (text.trim().length > 0)\n commitPending();\n onBlur?.(event);\n }, className: cn('h-[21px] min-w-[80px] flex-1 bg-transparent text-[13px] text-fg placeholder:text-fg-subtle focus:outline-none', inputClassName), ...inputProps })] }));\n}\n//# sourceMappingURL=ChipInput.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * The generated-field renderer shared by `modal-wizard` and `drawer-form`\n * (annex §10 auto-instantiation: \"column type → control (text/varchar→input,\n * text long→textarea, enum→segmented-control or select, bool→switch,\n * timestamp→date picker, numeric→number input with unit, email/url/phone via\n * name+check heuristics)\").\n *\n * Both form widgets render the SAME field set — only their chrome differs (a\n * modal vs a drawer) — so the control mapping lives here once. A second copy\n * would be a second place for the kind→control mapping to drift.\n *\n * ACCESSIBILITY: `FormField` injects `id` / `aria-describedby` / `aria-invalid` /\n * `aria-required` into its SINGLE child through a Radix `Slot`, so each control\n * is passed bare — wrapping one in a `<div>` would hand the div the id and\n * silently unlink the label from the input.\n */\nimport { DateInput, FormField, Input, Select, Switch, Tag, Textarea } from '@adminium/ui';\nfunction stringValue(value) {\n if (typeof value === 'string')\n return value;\n if (typeof value === 'number' && Number.isFinite(value))\n return String(value);\n return '';\n}\n/** The control for one generated field (annex §10's column-type → control map). */\nfunction control(field, value, onChange) {\n switch (field.kind) {\n case 'textarea':\n return (_jsx(Textarea, { rows: 3, value: stringValue(value), placeholder: field.placeholder ?? '', onChange: (event) => onChange(event.target.value) }));\n case 'switch':\n return _jsx(Switch, { checked: value === true, onCheckedChange: (checked) => onChange(checked) });\n case 'select':\n return (_jsx(Select, { value: stringValue(value), onChange: (event) => onChange(event.target.value), children: (field.options ?? []).map((option) => (_jsx(\"option\", { value: option.value, children: option.label ?? option.value }, option.value))) }));\n case 'date':\n return _jsx(DateInput, { value: stringValue(value), onChange: (event) => onChange(event.target.value) });\n case 'number':\n return (_jsx(Input, { type: \"number\", mono: true, value: stringValue(value), placeholder: field.placeholder ?? '', \n // The RAW string stays in state: coercing per keystroke makes \"1.\" and\n // a lone \"-\" impossible to type. The host coerces on commit.\n onChange: (event) => onChange(event.target.value) }));\n default:\n return (_jsx(Input\n // email/url get the real input types: mobile keyboards and the\n // browser's own validation both key off them.\n , { \n // email/url get the real input types: mobile keyboards and the\n // browser's own validation both key off them.\n type: field.kind === 'email' ? 'email' : field.kind === 'url' ? 'url' : 'text', value: stringValue(value), placeholder: field.placeholder ?? '', onChange: (event) => onChange(event.target.value) }));\n }\n}\nexport function FormFields({ fields, values, onChange, invalid, requiredHint, idPrefix }) {\n const invalidSet = new Set(invalid ?? []);\n return (_jsx(\"div\", { \"data-part\": \"form-fields\", className: \"flex flex-col gap-3.5\", children: fields.map((field) => {\n const id = `${idPrefix}-${field.name}`;\n const isInvalid = invalidSet.has(field.name);\n return (_jsx(FormField, { controlId: id, \"data-part\": \"form-field\", \"data-field\": field.name, label: field.label ?? field.name, required: field.required, ...(isInvalid ? { error: requiredHint ?? 'This field is required.' } : {}), ...(!isInvalid && field.helpText !== undefined ? { helper: field.helpText } : {}), ...(field.unit === undefined ? {} : { tag: _jsx(Tag, { mono: true, children: field.unit }) }), children: control(field, values[field.name], (next) => onChange(field.name, next)) }, field.name));\n }) }));\n}\n//# sourceMappingURL=FormFields.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `drawer-form` (annex §10) — side-drawer create/edit flow with the full field\n * set; appends the record on submit. The >5-field counterpart of `modal-wizard`\n * (annex §10 auto-instantiation: \"≤5 fields → modal-wizard, more → drawer-form\n * or full page\"). Evidence: Scheduled Reports.\n *\n * Wraps @adminium/ui's `Drawer` (Radix — focus trap, Esc/overlay close, the\n * inline-end slide) and shares `FormFields` with `modal-wizard`.\n *\n * WRITE MODEL (04 §2.1): submit emits an `insert` INTENT and awaits the host's\n * commit before closing, so a rejected write leaves the drawer open with the\n * user's input intact rather than silently discarding it.\n */\nimport { Button, Drawer, DrawerBody, DrawerFooter, DrawerHeader } from '@adminium/ui';\nimport { useState } from 'react';\nimport { FormFields } from './FormFields.js';\nimport { bindingTargetOf, initialValues, missingRequired, resolveFields } from './forms-state.js';\nimport { drawerFormConfigSchema, drawerFormDemoData } from './forms-config.js';\nexport { drawerFormConfigSchema, drawerFormDemoData };\nexport function DrawerFormWidget({ config, data, instanceId, onEvent }) {\n const fields = resolveFields(config.fields, data);\n const [open, setOpen] = useState(false);\n const [values, setValues] = useState(() => initialValues(fields, data));\n const [invalid, setInvalid] = useState([]);\n const [submitting, setSubmitting] = useState(false);\n const target = bindingTargetOf(config.binding);\n const submit = async () => {\n const missing = missingRequired(fields, values);\n setInvalid(missing);\n if (missing.length > 0)\n return;\n if (target === null) {\n setOpen(false);\n return;\n }\n setSubmitting(true);\n try {\n await onEvent({\n type: 'mutate',\n intent: 'insert',\n connectionId: target.connectionId,\n table: target.table,\n values,\n });\n setOpen(false);\n }\n catch {\n // Host owns error surfacing; the drawer stays open with the input intact.\n }\n finally {\n setSubmitting(false);\n }\n };\n return (_jsxs(\"div\", { className: \"flex h-full items-center px-4 pb-4\", \"data-widget\": \"drawer-form\", \"data-testid\": config.testId, children: [_jsx(Button, { size: \"sm\", \"data-part\": \"drawer-trigger\", onClick: () => setOpen(true), children: config.triggerLabel ?? config.title ?? 'New' }), _jsxs(Drawer, { open: open, onOpenChange: setOpen, size: config.width, children: [_jsx(DrawerHeader, { title: config.title ?? 'New record', ...(config.subtitleText === undefined ? {} : { subtitle: config.subtitleText }), closeLabel: config.cancelLabel ?? 'Close' }), _jsx(DrawerBody, { children: _jsx(FormFields, { fields: fields, values: values, invalid: invalid, idPrefix: instanceId, onChange: (name, value) => {\n setValues((previous) => ({ ...previous, [name]: value }));\n setInvalid((previous) => previous.filter((entry) => entry !== name));\n } }) }), _jsxs(DrawerFooter, { children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: () => setOpen(false), children: config.cancelLabel ?? 'Cancel' }), _jsx(Button, { size: \"sm\", \"data-part\": \"drawer-submit\", disabled: submitting, onClick: () => void submit(), children: config.submitLabel ?? 'Save' })] })] })] }));\n}\n//# sourceMappingURL=DrawerForm.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `export-builder` (annex §10) — a config form (format segmented PDF/CSV/XLSX,\n * date range, include-charts switch) driving an idle → running(%) → done\n * (Download) state machine. Evidence: Adminium UI Kit, Metrics Dashboard,\n * Payments, Time Tracking.\n *\n * PRESENTATIONAL: clicking Export emits an `insert` intent describing the JOB —\n * the host queues it and reports progress back through the payload. The widget\n * runs no export and owns no timer, which is also why the phase is derived\n * (see `exportPhaseOf`) rather than animated locally.\n *\n * Binds §3 `form-state`: the payload is the export's config plus its progress.\n */\nimport { Button, DateInput, FormField, MonoText, ProgressBar, SegmentedControl, Select, Switch } from '@adminium/ui';\nimport { Download } from 'lucide-react';\nimport { useState } from 'react';\nimport { exportBuilderConfigSchema, exportBuilderDemoData } from './forms-config.js';\nimport { EXPORT_FORMATS, EXPORT_PHASES, exportPhaseOf } from './forms-builders.js';\nimport { clampPct, numberField, oneOf, stringField } from './forms-lib.js';\nimport { bindingTargetOf, formValuesOf } from './forms-state.js';\nexport { exportBuilderConfigSchema, exportBuilderDemoData };\n/** Project the §3 `form-state` payload onto the form's initial values. */\nexport function exportStateOf(data, config) {\n const values = formValuesOf(data);\n const formats = config.formats ?? EXPORT_FORMATS;\n const fallback = formats[0] ?? 'csv';\n const format = oneOf(values['format'], EXPORT_FORMATS, fallback);\n return {\n // A payload naming a format this instance disabled falls back rather than\n // rendering a segmented control with no segment selected.\n format: formats.includes(format) ? format : fallback,\n from: stringField(values, 'from') ?? '',\n to: stringField(values, 'to') ?? '',\n includeCharts: values['includeCharts'] === true,\n groupBy: stringField(values, 'groupBy') ?? '',\n email: values['email'] === true,\n };\n}\nexport function ExportBuilderWidget({ config, data, onEvent }) {\n const values = formValuesOf(data);\n const formats = config.formats ?? EXPORT_FORMATS;\n const [state, setState] = useState(() => exportStateOf(data, config));\n const [submitted, setSubmitted] = useState(false);\n const target = bindingTargetOf(config.binding);\n const payloadPhase = oneOf(values['status'], EXPORT_PHASES, 'idle');\n const phase = exportPhaseOf(payloadPhase, submitted);\n const progress = clampPct(numberField(values, 'progress'));\n const href = stringField(values, 'downloadHref') ?? config.href;\n const patch = (partial) => setState((current) => ({ ...current, ...partial }));\n const submit = () => {\n setSubmitted(true);\n if (target === null)\n return; // unbound (demo/story/palette)\n onEvent({\n type: 'mutate',\n intent: 'insert',\n connectionId: target.connectionId,\n table: target.table,\n values: {\n format: state.format,\n from: state.from,\n to: state.to,\n ...(config.includeChartsOption ? { includeCharts: state.includeCharts } : {}),\n ...(config.groupBy === undefined ? {} : { groupBy: state.groupBy }),\n ...(config.emailOption ? { email: state.email } : {}),\n },\n });\n };\n return (_jsxs(\"div\", { \"data-widget\": \"export-builder\", \"data-phase\": phase, \"data-testid\": config.testId, className: \"flex h-full flex-col gap-3 overflow-auto px-4 pb-4\", children: [_jsx(FormField, { label: config.formatLabel ?? 'Format', children: _jsx(SegmentedControl, { \"aria-label\": config.formatLabel ?? 'Format', \"data-part\": \"export-format\", value: state.format, onValueChange: (next) => patch({ format: oneOf(next, EXPORT_FORMATS, state.format) }), options: formats.map((format) => ({ value: format, label: format.toUpperCase() })) }) }), _jsxs(\"div\", { className: \"grid gap-3 sm:grid-cols-2\", children: [_jsx(FormField, { label: config.fromLabel ?? 'From', children: _jsx(DateInput, { \"data-part\": \"export-from\", value: state.from, onChange: (event) => patch({ from: event.currentTarget.value }) }) }), _jsx(FormField, { label: config.toLabel ?? 'To', children: _jsx(DateInput, { \"data-part\": \"export-to\", value: state.to, onChange: (event) => patch({ to: event.currentTarget.value }) }) })] }), config.groupBy !== undefined && config.groupBy.length > 0 && (_jsx(FormField, { label: config.groupByLabel ?? 'Group by', children: _jsxs(Select, { \"data-part\": \"export-group-by\", value: state.groupBy, onChange: (event) => patch({ groupBy: event.currentTarget.value }), children: [_jsx(\"option\", { value: \"\" }), config.groupBy.map((option) => (_jsx(\"option\", { value: option.key, children: option.label ?? option.key }, option.key)))] }) })), config.includeChartsOption && (_jsxs(\"label\", { className: \"flex cursor-pointer items-center justify-between gap-3\", children: [_jsx(\"span\", { className: \"text-body-sm text-fg\", children: config.includeChartsLabel ?? 'Include charts' }), _jsx(Switch, { \"data-part\": \"export-include-charts\", checked: state.includeCharts, onCheckedChange: (next) => patch({ includeCharts: next }) })] })), config.emailOption && (_jsxs(\"label\", { className: \"flex cursor-pointer items-center justify-between gap-3\", children: [_jsx(\"span\", { className: \"text-body-sm text-fg\", children: config.emailLabel ?? 'Email me the export' }), _jsx(Switch, { \"data-part\": \"export-email\", checked: state.email, onCheckedChange: (next) => patch({ email: next }) })] })), phase === 'running' && (_jsxs(\"div\", { \"data-part\": \"export-progress\", className: \"flex flex-col gap-1.5\", children: [_jsxs(\"div\", { className: \"flex items-center justify-between gap-2\", children: [_jsx(\"span\", { className: \"text-caption text-fg-muted\", children: config.runningLabel ?? 'Preparing your export…' }), _jsx(MonoText, { className: \"text-caption tabular-nums text-fg-muted\", children: `${progress}%` })] }), _jsx(ProgressBar, { value: progress, label: config.runningLabel ?? 'Preparing your export…' })] })), phase === 'failed' && (_jsx(\"p\", { \"data-part\": \"export-failed\", className: \"text-caption font-semibold text-danger\", children: config.failedLabel ?? 'The export failed. Try again.' })), _jsxs(\"div\", { className: \"mt-auto flex items-center justify-end gap-2\", children: [phase === 'done' && (_jsx(\"span\", { \"data-part\": \"export-done\", className: \"me-auto text-caption font-semibold text-pos\", children: config.doneLabel ?? 'Export ready' })), phase === 'done' && href !== undefined ? (\n // Drill-through, not an <a download>: the host owns navigation and the\n // signed URL (04 §2.1). A Download button with no href would be a\n // control that does nothing, so it only renders once there IS one.\n _jsx(Button, { \"data-part\": \"export-download\", iconLeft: _jsx(Download, {}), onClick: () => onEvent({ type: 'drill-through', href }), children: config.downloadLabel ?? 'Download' })) : (_jsx(Button, { \"data-part\": \"export-submit\", loading: phase === 'running', disabled: phase === 'running', onClick: submit, children: config.submitLabel ?? 'Export' }))] })] }));\n}\n//# sourceMappingURL=ExportBuilder.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `flow-builder` (annex §10) — a vertical workflow canvas of typed nodes\n * (trigger=accent, condition=warn, action=pos) joined by connectors, with live\n * insert/remove, an action-palette popover (2-col grid of addable node types)\n * and header run stats. Evidence: Automation Rules.\n *\n * PRESENTATIONAL: nodes live in local state; every change is a `mutate` intent.\n * The widget never runs a flow and never persists one.\n *\n * Binds §3 `form-state` for the same reason as `rule-builder`: an empty canvas\n * is a builder awaiting its trigger, not an empty widget, and must show the\n * palette rather than the frame's \"no data\" state.\n *\n * REORDER/INSERT: nodes are added at the END and removed individually — there is\n * no drag layer here. `@dnd-kit` is CONFINED to the `boards` family by the\n * chunk-budget gate (04 §2.3), and pulling a drag engine into `forms` would put\n * it in the chunk of every page that renders a settings toggle.\n */\nimport { IconTile, Popover, PopoverClose, PopoverContent, PopoverTrigger, cn } from '@adminium/ui';\nimport { Plus, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { DEFAULT_FLOW_PALETTE, flowBuilderConfigSchema, flowBuilderDemoData } from './forms-config.js';\nimport { FLOW_NODE_KINDS, FLOW_NODE_TONE, canAppendNode } from './forms-builders.js';\nimport { formIcon } from './forms-icons.js';\nimport { numberField, oneOf, stringField } from './forms-lib.js';\nimport { bindingTargetOf, formValuesOf } from './forms-state.js';\nexport { flowBuilderConfigSchema, flowBuilderDemoData };\n/** Project the §3 `form-state` payload onto ordered flow nodes. */\nexport function flowNodesOf(data, config) {\n const values = formValuesOf(data);\n const raw = values['nodes'];\n if (!Array.isArray(raw))\n return [];\n const kinds = config.nodeKinds ?? FLOW_NODE_KINDS;\n const out = [];\n for (const [index, entry] of raw.entries()) {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry))\n continue;\n const row = entry;\n const title = stringField(row, 'title');\n if (title === undefined)\n continue;\n const kind = oneOf(row['kind'], FLOW_NODE_KINDS, 'action');\n // A node whose kind this flow disables is dropped: it names a step the host\n // was configured not to run, so rendering it would show a workflow that\n // does something the flow cannot actually do.\n if (!kinds.includes(kind))\n continue;\n out.push({\n id: stringField(row, 'id') ?? `node-${index}`,\n kind,\n icon: stringField(row, 'icon'),\n title,\n sub: stringField(row, 'sub'),\n });\n }\n return out;\n}\n/** Header run stats (annex §10), or `null` when the payload carries none. */\nexport function flowStatsOf(data) {\n const values = formValuesOf(data);\n const runs = numberField(values, 'runs');\n const successRate = numberField(values, 'successRate');\n if (runs === undefined || successRate === undefined)\n return null;\n return { runs, successRate };\n}\nexport function FlowBuilderWidget({ config, data, onEvent }) {\n const [nodes, setNodes] = useState(() => flowNodesOf(data, config));\n const [paletteOpen, setPaletteOpen] = useState(false);\n const stats = flowStatsOf(data);\n const target = bindingTargetOf(config.binding);\n const enabledKinds = config.nodeKinds ?? FLOW_NODE_KINDS;\n const palette = (config.palette ?? DEFAULT_FLOW_PALETTE).filter((node) => enabledKinds.includes(node.kind));\n const commit = (next) => {\n setNodes(next);\n if (target === null)\n return; // unbound (demo/story/palette)\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: {\n nodes: next.map((node) => ({\n id: node.id,\n kind: node.kind,\n ...(node.icon === undefined ? {} : { icon: node.icon }),\n title: node.title,\n ...(node.sub === undefined ? {} : { sub: node.sub }),\n })),\n },\n });\n };\n const addNode = (entry) => {\n if (nodes.length >= config.maxNodes || !canAppendNode(entry.kind, nodes))\n return;\n setPaletteOpen(false);\n commit([\n ...nodes,\n {\n // The palette id is the TYPE, not the instance — two \"Send email\" steps\n // in one flow must not collide on a React key or on the stored node id.\n id: `${entry.id}-${nodes.length}`,\n kind: entry.kind,\n icon: entry.icon,\n title: entry.title ?? entry.id,\n sub: entry.sub,\n },\n ]);\n };\n const atCapacity = nodes.length >= config.maxNodes;\n return (_jsxs(\"div\", { \"data-widget\": \"flow-builder\", \"data-testid\": config.testId, className: \"flex h-full flex-col gap-2 overflow-auto px-4 pb-4\", children: [stats !== null && (_jsx(\"p\", { \"data-part\": \"flow-stats\", className: \"text-caption text-fg-muted\", children: (config.statsTemplate ?? '{runs} runs · {rate}% success')\n .replace('{runs}', String(stats.runs))\n .replace('{rate}', String(stats.successRate)) })), nodes.length === 0 && (_jsx(\"p\", { \"data-part\": \"flow-empty\", className: \"text-body-sm text-fg-muted\", children: config.emptyBody ?? 'No steps yet — add a trigger to start this workflow.' })), _jsx(\"ol\", { className: \"m-0 flex list-none flex-col p-0\", children: nodes.map((node, index) => {\n const tone = FLOW_NODE_TONE[node.kind];\n return (_jsxs(\"li\", { \"data-part\": \"flow-node\", \"data-kind\": node.kind, \"data-node\": node.id, children: [index > 0 && (\n // The connector is a block-axis rule: `ms-5` keeps it under the\n // icon tile in BOTH directions (it mirrors with the row).\n _jsx(\"div\", { \"aria-hidden\": \"true\", \"data-part\": \"flow-connector\", className: \"ms-5 h-3 w-px bg-border-strong\" })), _jsxs(\"div\", { className: \"flex items-start gap-3 rounded-lg border border-border bg-surface-2 px-2.5 py-2.5\", children: [_jsx(IconTile, { size: \"md\", tone: tone, icon: formIcon(node.icon) }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"p\", { className: \"truncate text-body-sm font-bold text-fg\", children: node.title }), node.sub !== undefined && _jsx(\"p\", { className: \"truncate text-caption text-fg-muted\", children: node.sub })] }), _jsx(\"button\", { type: \"button\", \"data-part\": \"flow-remove\", \"aria-label\": `${config.removeLabel ?? 'Remove step'} — ${node.title}`, onClick: () => commit(nodes.filter((_, i) => i !== index)), className: 'rounded-md p-1 text-fg-subtle transition-colors duration-150 hover:bg-surface-3 hover:text-fg ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent', children: _jsx(X, { \"aria-hidden\": \"true\", className: \"size-4\" }) })] })] }, node.id));\n }) }), nodes.length > 0 && _jsx(\"div\", { \"aria-hidden\": \"true\", className: \"ms-5 h-3 w-px bg-border-strong\" }), _jsxs(Popover, { open: paletteOpen, onOpenChange: setPaletteOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(\"button\", { type: \"button\", \"data-part\": \"add-node\", disabled: atCapacity || palette.length === 0, className: cn('flex w-fit items-center gap-1.5 rounded-lg border border-dashed border-border-strong px-2.5 py-1.5', 'text-caption font-semibold text-fg-muted transition-colors duration-150', 'hover:border-accent hover:text-accent disabled:pointer-events-none disabled:opacity-40', 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent'), children: [_jsx(Plus, { \"aria-hidden\": \"true\", className: \"size-3.5\" }), config.addLabel ?? 'Add step'] }) }), _jsxs(PopoverContent, { align: \"start\", \"data-part\": \"palette\", className: \"w-[min(24rem,90vw)]\", children: [_jsx(\"p\", { className: \"mb-2 text-caption font-bold uppercase tracking-wide text-fg-subtle\", children: config.paletteTitle ?? 'Add a step' }), _jsx(\"div\", { className: \"grid grid-cols-2 gap-1.5\", children: palette.map((entry) => {\n const blocked = !canAppendNode(entry.kind, nodes);\n return (_jsx(PopoverClose, { asChild: true, children: _jsxs(\"button\", { type: \"button\", \"data-part\": \"palette-node\", \"data-kind\": entry.kind, \"data-node\": entry.id, disabled: blocked, onClick: () => addNode(entry), className: cn('flex items-start gap-2 rounded-md border border-border p-2 text-start transition-colors duration-150', 'hover:border-accent hover:bg-accent-soft disabled:pointer-events-none disabled:opacity-40', 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent'), children: [_jsx(IconTile, { size: \"sm\", tone: FLOW_NODE_TONE[entry.kind], icon: formIcon(entry.icon) }), _jsxs(\"span\", { className: \"min-w-0 flex-1\", children: [_jsx(\"span\", { className: \"block truncate text-caption font-bold text-fg\", children: entry.title ?? entry.id }), entry.sub !== undefined && (_jsx(\"span\", { className: \"block truncate text-caption text-fg-muted\", children: entry.sub }))] })] }) }, entry.id));\n }) })] })] })] }));\n}\n//# sourceMappingURL=FlowBuilder.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `inline-editable-field` (annex §10) — a text/number/select span rendered as a\n * transparent input inside documents and canvases: click (or Enter/Space) to\n * edit, Enter/blur to commit, Escape to cancel.\n * Evidence: Invoice Builder, Email Templates, Report Builder, See It In Action.\n *\n * Binds §3 `record` — \"a bound field path on a doc object\" is one row plus a\n * column name, which is exactly that shape.\n *\n * COMMIT, NOT DEBOUNCE. The annex describes \"debounced dirty tracking\", and this\n * widget deliberately commits on an explicit action instead. A debounce timer\n * would emit `mutate` intents the user never confirmed — each one an audited,\n * undoable write — for text they were still in the middle of typing, and would\n * make the widget's own tests depend on wall-clock time (04 §7.7 wants neither).\n * Escape restoring the original value is only meaningful if nothing was written\n * on the way there.\n */\nimport { Input, Select, Textarea, cn } from '@adminium/ui';\nimport { useState } from 'react';\nimport { inlineEditableFieldConfigSchema, inlineEditableFieldDemoData } from './forms-config.js';\nimport { recordRowOf, stringField } from './forms-lib.js';\nimport { bindingTargetOf } from './forms-state.js';\nexport { inlineEditableFieldConfigSchema, inlineEditableFieldDemoData };\n/** The bound field's current value as display text (`''` when absent). */\nexport function boundValueOf(data, config) {\n const row = recordRowOf(data);\n if (row === null)\n return '';\n return stringField(row, config.field) ?? '';\n}\n/** The record id a `mutate` intent targets, or `null` when the row has none. */\nexport function boundRecordIdOf(data, config) {\n const row = recordRowOf(data);\n if (row === null)\n return null;\n return stringField(row, config.idField) ?? null;\n}\n/** The display label for a `select` value — its option label, else the raw value. */\nfunction displayValue(value, config) {\n if (config.format !== 'select')\n return value;\n return config.options?.find((option) => option.value === value)?.label ?? value;\n}\nexport function InlineEditableFieldWidget({ config, data, instanceId, onEvent }) {\n const bound = boundValueOf(data, config);\n /** The last COMMITTED value — what Escape restores and what dirty compares to. */\n const [committed, setCommitted] = useState(bound);\n const [draft, setDraft] = useState(bound);\n const [editing, setEditing] = useState(false);\n /*\n RESYNC ON A NEW BOUND VALUE. `useState(bound)` seeds the initial render and\n is ignored by React on every render after it, so without this the field\n displays whatever the row said when it first mounted — forever. Two real\n breaks: a master-detail page reuses ONE instance across row selections, so\n the display would show the previous record's text while `boundRecordIdOf`\n already resolves the new id (an edit then writes the new record with the old\n record's value); and a refetch (`refreshInterval`, or another user's edit)\n would never surface.\n \n A render-phase reset rather than an effect: React's own \"adjusting state when\n props change\" pattern — it re-renders before committing to the DOM, so the\n stale value is never painted (an effect would flash it first).\n */\n const [lastBound, setLastBound] = useState(bound);\n if (bound !== lastBound) {\n setLastBound(bound);\n setCommitted(bound);\n setDraft(bound);\n // The incoming value is authoritative; keeping an open editor over a record\n // that just changed underneath would commit the draft to the WRONG row.\n setEditing(false);\n }\n const target = bindingTargetOf(config.binding);\n const recordId = boundRecordIdOf(data, config);\n const controlId = `${instanceId}-inline-field`;\n const commit = () => {\n setEditing(false);\n // Nothing changed — no intent. An unchanged commit would still cost the host\n // an audit entry and an undo slot for a write that changes nothing.\n if (draft === committed)\n return;\n setCommitted(draft);\n if (target === null)\n return; // unbound (demo/story/palette)\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n ...(recordId === null ? {} : { recordId }),\n values: { [config.field]: draft },\n });\n };\n const cancel = () => {\n setDraft(committed);\n setEditing(false);\n };\n const onKeyDown = (event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n cancel();\n return;\n }\n // Enter commits — except in a textarea, where it is a newline the user meant.\n if (event.key === 'Enter' && !(config.format === 'text' && config.multiline)) {\n event.preventDefault();\n commit();\n }\n };\n if (!editing) {\n const text = displayValue(committed, config);\n const empty = text.trim() === '';\n return (_jsx(\"div\", { className: \"flex h-full items-center px-4 pb-4\", \"data-widget\": \"inline-editable-field\", \"data-testid\": config.testId, children: _jsx(\"button\", { type: \"button\", \"data-part\": \"inline-display\", \"data-empty\": empty, \"aria-label\": config.editLabel ?? config.label ?? config.title ?? 'Edit', onClick: () => setEditing(true), className: cn('w-full truncate rounded-md px-1.5 py-0.5 text-start text-body-sm transition-colors duration-150', 'hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent', empty ? 'text-fg-subtle italic' : 'text-fg'), children: empty ? (config.emptyValueLabel ?? 'Empty') : text }) }));\n }\n const shared = {\n id: controlId,\n autoFocus: true,\n 'aria-label': config.label ?? config.title ?? 'Value',\n 'data-part': 'inline-input',\n onBlur: commit,\n onKeyDown,\n };\n return (_jsx(\"div\", { className: \"flex h-full items-center px-4 pb-4\", \"data-widget\": \"inline-editable-field\", \"data-editing\": true, \"data-testid\": config.testId, children: config.format === 'select' ? (_jsxs(Select, { ...shared, value: draft, onChange: (event) => setDraft(event.currentTarget.value), children: [_jsx(\"option\", { value: \"\" }), (config.options ?? []).map((option) => (_jsx(\"option\", { value: option.value, children: option.label ?? option.value }, option.value)))] })) : config.format === 'text' && config.multiline ? (_jsx(Textarea, { ...shared, autoResize: true, value: draft, placeholder: config.placeholder ?? '', onChange: (event) => setDraft(event.currentTarget.value) })) : (_jsx(Input, { ...shared, ...(config.format === 'number' ? { mono: true, inputMode: 'decimal' } : {}), value: draft, placeholder: config.placeholder ?? '', \n // The RAW string stays in state even for `number` — coercing per\n // keystroke makes \"1.\" and a lone \"-\" impossible to type. The host\n // coerces on commit (same note as `FormFields`).\n onChange: (event) => setDraft(event.currentTarget.value) })) }));\n}\n//# sourceMappingURL=InlineEditableField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `question-builder` (annex §10) — the survey editor pair: a palette rail of the\n * 8 addable question types beside reorderable question cards with type-specific\n * answer previews (radio/checkbox rows, dropdown stub, short/long text, star\n * rating, NPS 0–10 chips, date stub) and a required toggle.\n * Evidence: Survey Builder.\n *\n * PRESENTATIONAL: the question list lives in local state; every change is a\n * `mutate` intent (04 §2.1). The widget never persists a survey.\n *\n * Binds §3 `form-state` — like the other builders, an empty canvas is a builder\n * awaiting its first question, not an empty widget.\n *\n * REORDERING IS BUTTONS, NOT DRAG. `@dnd-kit` is confined to the `boards` family\n * by the chunk-budget gate (04 §2.3), so a drag layer here would ship a drag\n * engine to every page with a settings toggle. Move-up/move-down is also the\n * affordance a pointer-only drag never has: it works from the keyboard.\n */\nimport { EmptyState, IconTile, Input, MonoText, Switch, cn } from '@adminium/ui';\nimport { ChevronDown, ChevronUp, Plus, Star, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { DEFAULT_QUESTION_KIND_LABELS, questionBuilderConfigSchema, questionBuilderDemoData, } from './forms-config.js';\nimport { NPS_SCORES, QUESTION_KINDS, RATING_STARS, moveItem, questionTakesOptions } from './forms-builders.js';\nimport { questionKindIcon } from './forms-icons.js';\nimport { booleanField, oneOf, stringField } from './forms-lib.js';\nimport { bindingTargetOf, formValuesOf } from './forms-state.js';\nexport { questionBuilderConfigSchema, questionBuilderDemoData };\n/** Project the §3 `form-state` payload onto survey questions. */\nexport function questionsOf(data, config) {\n const values = formValuesOf(data);\n const raw = values['questions'];\n if (!Array.isArray(raw))\n return [];\n const kinds = config.kinds ?? QUESTION_KINDS;\n const out = [];\n for (const [index, entry] of raw.entries()) {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry))\n continue;\n const row = entry;\n const kind = oneOf(row['kind'], QUESTION_KINDS, 'short-text');\n // A question of a kind this survey disabled is dropped rather than coerced:\n // silently turning a disabled NPS question into a short-text box would\n // change what the survey asks respondents.\n if (!kinds.includes(kind))\n continue;\n const opts = Array.isArray(row['opts']) ? row['opts'].filter((o) => typeof o === 'string') : [];\n out.push({\n id: stringField(row, 'id') ?? `q-${index}`,\n kind,\n q: stringField(row, 'q') ?? '',\n required: booleanField(row, 'required') === true,\n opts,\n });\n }\n return out;\n}\nexport function QuestionBuilderWidget({ config, data, onEvent }) {\n const [questions, setQuestions] = useState(() => questionsOf(data, config));\n const target = bindingTargetOf(config.binding);\n const kinds = config.kinds ?? QUESTION_KINDS;\n const commit = (next) => {\n setQuestions(next);\n if (target === null)\n return; // unbound (demo/story/palette)\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: {\n questions: next.map((question) => ({\n id: question.id,\n kind: question.kind,\n q: question.q,\n required: question.required,\n // Only the kinds that HAVE options carry them: an NPS question with a\n // leftover `opts` array from before a kind switch would describe a\n // scale with choices, which is not a thing.\n ...(questionTakesOptions(question.kind) ? { opts: question.opts } : {}),\n })),\n },\n });\n };\n const addQuestion = (kind) => {\n if (questions.length >= config.maxQuestions)\n return;\n commit([\n ...questions,\n {\n id: `${kind}-${questions.length}`,\n kind,\n q: '',\n required: false,\n opts: questionTakesOptions(kind) ? ['Option 1', 'Option 2'] : [],\n },\n ]);\n };\n const patch = (index, partial) => commit(questions.map((question, i) => (i === index ? { ...question, ...partial } : question)));\n const atCapacity = questions.length >= config.maxQuestions;\n const kindLabel = (kind) => config.kindLabels?.[kind] ?? DEFAULT_QUESTION_KIND_LABELS[kind] ?? kind;\n return (_jsxs(\"div\", { \"data-widget\": \"question-builder\", \"data-testid\": config.testId, className: \"flex h-full gap-3 overflow-hidden px-4 pb-4\", children: [_jsxs(\"div\", { \"data-part\": \"question-palette\", className: \"hidden w-40 shrink-0 flex-col gap-1 overflow-auto sm:flex\", children: [_jsx(\"p\", { className: \"text-caption font-bold uppercase tracking-wide text-fg-subtle\", children: config.paletteTitle ?? 'Add a question' }), kinds.map((kind) => (_jsxs(\"button\", { type: \"button\", \"data-part\": \"palette-kind\", \"data-kind\": kind, disabled: atCapacity, onClick: () => addQuestion(kind), className: cn('flex items-center gap-2 rounded-md border border-border px-2 py-1.5 text-start transition-colors duration-150', 'hover:border-accent hover:bg-accent-soft disabled:pointer-events-none disabled:opacity-40', 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent'), children: [_jsx(\"span\", { className: \"text-fg-muted [&_svg]:size-3.5\", children: questionKindIcon(kind) }), _jsx(\"span\", { className: \"min-w-0 truncate text-caption font-semibold text-fg\", children: kindLabel(kind) })] }, kind)))] }), _jsxs(\"div\", { \"data-part\": \"question-canvas\", className: \"flex min-w-0 flex-1 flex-col gap-2 overflow-auto\", children: [questions.length === 0 ? (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: config.emptyTitle ?? 'No questions yet', body: config.emptyBody ?? 'Pick a question type to start building your survey.' })) : (questions.map((question, index) => (_jsxs(\"div\", { \"data-part\": \"question-card\", \"data-kind\": question.kind, \"data-question\": question.id, \"data-required\": question.required, className: \"flex flex-col gap-2 rounded-lg border border-border bg-surface-2 px-2.5 py-2.5\", children: [_jsxs(\"div\", { className: \"flex items-center gap-2\", children: [_jsx(IconTile, { size: \"sm\", tone: \"accent\", icon: questionKindIcon(question.kind) }), _jsx(MonoText, { className: \"shrink-0 text-caption text-fg-subtle\", children: kindLabel(question.kind) }), _jsxs(\"div\", { className: \"ms-auto flex items-center gap-0.5\", children: [_jsx(RailButton, { label: `${config.moveUpLabel ?? 'Move up'} — ${index + 1}`, part: \"question-up\", disabled: index === 0, onClick: () => commit(moveItem(questions, index, index - 1)), children: _jsx(ChevronUp, { \"aria-hidden\": \"true\", className: \"size-4\" }) }), _jsx(RailButton, { label: `${config.moveDownLabel ?? 'Move down'} — ${index + 1}`, part: \"question-down\", disabled: index === questions.length - 1, onClick: () => commit(moveItem(questions, index, index + 1)), children: _jsx(ChevronDown, { \"aria-hidden\": \"true\", className: \"size-4\" }) }), _jsx(RailButton, { label: `${config.removeLabel ?? 'Remove question'} — ${index + 1}`, part: \"question-remove\", onClick: () => commit(questions.filter((_, i) => i !== index)), children: _jsx(X, { \"aria-hidden\": \"true\", className: \"size-4\" }) })] })] }), _jsx(Input, { \"aria-label\": `${config.questionPlaceholder ?? 'Question'} ${index + 1}`, \"data-part\": \"question-text\", value: question.q, placeholder: config.questionPlaceholder ?? 'Ask a question…', onChange: (event) => patch(index, { q: event.currentTarget.value }) }), _jsx(AnswerPreview, { kind: question.kind, opts: question.opts }), _jsxs(\"label\", { className: \"flex cursor-pointer items-center gap-2 self-end\", children: [_jsx(\"span\", { className: \"text-caption text-fg-muted\", children: config.requiredLabel ?? 'Required' }), _jsx(Switch, { \"data-part\": \"question-required\", checked: question.required, onCheckedChange: (next) => patch(index, { required: next }) })] })] }, question.id)))), _jsxs(\"button\", { type: \"button\", \"data-part\": \"add-question\", disabled: atCapacity || kinds.length === 0, onClick: () => {\n const first = kinds[0];\n if (first !== undefined)\n addQuestion(first);\n }, className: cn('flex w-fit items-center gap-1.5 rounded-lg border border-dashed border-border-strong px-2.5 py-1.5 sm:hidden', 'text-caption font-semibold text-fg-muted transition-colors duration-150', 'hover:border-accent hover:text-accent disabled:pointer-events-none disabled:opacity-40', 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent'), children: [_jsx(Plus, { \"aria-hidden\": \"true\", className: \"size-3.5\" }), config.addLabel ?? 'Add question'] })] })] }));\n}\nfunction RailButton({ label, part, disabled = false, onClick, children, }) {\n return (_jsx(\"button\", { type: \"button\", \"aria-label\": label, \"data-part\": part, disabled: disabled, onClick: onClick, className: 'rounded-md p-1 text-fg-subtle transition-colors duration-150 hover:bg-surface-3 hover:text-fg ' +\n 'disabled:pointer-events-none disabled:opacity-30 ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent', children: children }));\n}\n/**\n * The type-specific answer preview (annex §10). Inert by design: these are the\n * SHAPES the respondent will see, rendered for the author to recognise — a\n * working radio group here would invite the author to \"answer\" their own draft.\n */\nfunction AnswerPreview({ kind, opts }) {\n if (kind === 'single-choice' || kind === 'multi-choice') {\n return (_jsx(\"ul\", { \"aria-hidden\": \"true\", \"data-part\": \"answer-preview\", \"data-kind\": kind, className: \"m-0 flex list-none flex-col gap-1 p-0\", children: opts.map((option, index) => (_jsxs(\"li\", { className: \"flex items-center gap-2 text-caption text-fg-muted\", children: [_jsx(\"span\", { className: cn('size-3.5 shrink-0 border border-border-strong', kind === 'single-choice' ? 'rounded-full' : 'rounded-xs') }), option] }, `${option}-${index}`))) }));\n }\n if (kind === 'dropdown') {\n return (_jsxs(\"div\", { \"aria-hidden\": \"true\", \"data-part\": \"answer-preview\", \"data-kind\": kind, className: \"flex h-8 items-center justify-between rounded-md border border-border-strong bg-surface px-2 text-caption text-fg-subtle\", children: [opts[0] ?? 'Choose…', _jsx(ChevronDown, { className: \"size-3.5\" })] }));\n }\n if (kind === 'rating') {\n return (_jsx(\"div\", { \"aria-hidden\": \"true\", \"data-part\": \"answer-preview\", \"data-kind\": kind, className: \"flex gap-1\", children: Array.from({ length: RATING_STARS }, (_, index) => (_jsx(Star, { className: \"size-4 text-fg-subtle\" }, index))) }));\n }\n if (kind === 'nps') {\n return (_jsx(\"div\", { \"aria-hidden\": \"true\", \"data-part\": \"answer-preview\", \"data-kind\": kind, className: \"flex flex-wrap gap-1\", children: NPS_SCORES.map((score) => (_jsx(MonoText, { className: \"rounded-sm border border-border-strong px-1.5 py-0.5 text-caption text-fg-subtle\", children: score }, score))) }));\n }\n return (_jsx(\"div\", { \"aria-hidden\": \"true\", \"data-part\": \"answer-preview\", \"data-kind\": kind, className: cn('rounded-md border border-border-strong bg-surface', kind === 'long-text' ? 'h-12' : 'h-8') }));\n}\n//# sourceMappingURL=QuestionBuilder.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `rule-builder` (annex §10) — condition rows (field, operator, accent value)\n * joined by ALL/ANY pill dividers, removable, with a dashed add button; feeds\n * segment/filter definitions. Evidence: Audience Segments.\n *\n * PRESENTATIONAL: the condition list lives in local state and every change is\n * reported as a `mutate` intent (04 §2.1). The widget never compiles the rule to\n * SQL and never persists it — the host owns both, because a WHERE clause built\n * in the browser is a WHERE clause the server must re-derive anyway.\n *\n * Binds the §3 `form-state` shape. Not `record-list`, even though the payload\n * carries a list: an EMPTY rule-builder is not an empty widget — it is a builder\n * waiting for its first condition, and it must show the dashed add button rather\n * than the frame's \"no data\" state (`form-state` is never empty by §3).\n */\nimport { DateInput, IconButton, Input, Select, cn } from '@adminium/ui';\nimport { Plus, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { DEFAULT_RULE_FIELDS, DEFAULT_OPERATOR_LABELS, ruleBuilderConfigSchema, ruleBuilderDemoData } from './forms-config.js';\nimport { RULE_MATCH_MODES, RULE_OPERATORS, operatorTakesValue, operatorsForType, repairOperator, } from './forms-builders.js';\nimport { oneOf, stringField } from './forms-lib.js';\nimport { bindingTargetOf, formValuesOf } from './forms-state.js';\nexport { ruleBuilderConfigSchema, ruleBuilderDemoData };\n/** The field def for a condition, or `null` when the catalog has no such column. */\nfunction fieldDefOf(catalog, name) {\n return catalog.find((field) => field.name === name) ?? null;\n}\n/**\n * Project the §3 `form-state` payload onto conditions.\n *\n * A condition naming a column the catalog no longer has is KEPT (typed as\n * `string`, the most permissive operator set), not dropped. Dropping it would\n * silently widen the rule: a saved segment that read \"plan is pro AND region is\n * EU\" would quietly become \"plan is pro\" the first time someone renamed the\n * region column, and the next save would persist the wider rule as if the user\n * had asked for it.\n */\nexport function conditionsOf(data, config) {\n const values = formValuesOf(data);\n const raw = values['conditions'];\n if (!Array.isArray(raw))\n return [];\n const catalog = config.fieldCatalog ?? DEFAULT_RULE_FIELDS;\n const out = [];\n for (const [index, entry] of raw.entries()) {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry))\n continue;\n const row = entry;\n const field = stringField(row, 'field');\n if (field === undefined)\n continue;\n const type = fieldDefOf(catalog, field)?.type ?? 'string';\n out.push({\n key: `${field}-${index}`,\n field,\n op: repairOperator(oneOf(row['op'], RULE_OPERATORS, 'eq'), type, config.operatorsByType),\n value: stringField(row, 'value') ?? '',\n });\n }\n return out;\n}\n/** Config's `matchMode` is the generated default; the payload's `match` overrides it. */\nexport function matchModeOf(data, config) {\n const values = formValuesOf(data);\n return oneOf(values['match'], RULE_MATCH_MODES, config.matchMode);\n}\nexport function RuleBuilderWidget({ config, data, onEvent }) {\n const catalog = config.fieldCatalog ?? DEFAULT_RULE_FIELDS;\n const [conditions, setConditions] = useState(() => conditionsOf(data, config));\n const [match, setMatch] = useState(() => matchModeOf(data, config));\n const target = bindingTargetOf(config.binding);\n const emit = (nextConditions, nextMatch) => {\n if (target === null)\n return; // unbound (demo/story/palette) — nowhere to send it\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: {\n conditions: nextConditions.map((condition) => ({\n field: condition.field,\n op: condition.op,\n // A value-less operator carries no value: sending the stale text the\n // user typed before switching to \"is empty\" would compile into the\n // WHERE clause as a condition they cannot see.\n ...(operatorTakesValue(condition.op) ? { value: condition.value } : {}),\n })),\n match: nextMatch,\n },\n });\n };\n const commit = (next) => {\n setConditions(next);\n emit(next, match);\n };\n const patch = (index, partial) => {\n commit(conditions.map((condition, i) => (i === index ? { ...condition, ...partial } : condition)));\n };\n const onFieldChange = (index, name) => {\n const current = conditions[index];\n if (current === undefined)\n return;\n const type = fieldDefOf(catalog, name)?.type ?? 'string';\n // Re-point the operator at one the NEW column's type supports, and drop a\n // value that belonged to the old column — `mrr >= 500` must not survive a\n // switch to `country` as `country >= 500`.\n patch(index, { field: name, op: repairOperator(current.op, type, config.operatorsByType), value: '' });\n };\n const addCondition = () => {\n const first = catalog[0];\n if (first === undefined || conditions.length >= config.maxConditions)\n return;\n const allowed = operatorsForType(first.type, config.operatorsByType);\n commit([\n ...conditions,\n { key: `new-${conditions.length}-${first.name}`, field: first.name, op: allowed[0] ?? 'eq', value: '' },\n ]);\n };\n const toggleMatch = () => {\n const next = match === 'all' ? 'any' : 'all';\n setMatch(next);\n emit(conditions, next);\n };\n const matchLabel = match === 'all' ? (config.allLabel ?? 'ALL') : (config.anyLabel ?? 'ANY');\n return (_jsxs(\"div\", { \"data-widget\": \"rule-builder\", \"data-match\": match, \"data-testid\": config.testId, className: \"flex h-full flex-col gap-2 overflow-auto px-4 pb-4\", children: [conditions.length === 0 && (_jsx(\"p\", { className: \"text-body-sm text-fg-muted\", \"data-part\": \"rule-empty\", children: config.emptyBody ?? 'No conditions yet — add one to define this segment.' })), conditions.map((condition, index) => {\n const def = fieldDefOf(catalog, condition.field);\n const type = def?.type ?? 'string';\n const operators = operatorsForType(type, config.operatorsByType);\n const unknownField = def === null;\n return (_jsxs(\"div\", { className: \"flex flex-col gap-2\", children: [index > 0 && (_jsx(\"button\", { type: \"button\", \"data-part\": \"match-divider\", onClick: toggleMatch, \"aria-label\": matchLabel, className: 'w-fit rounded-full border border-accent bg-accent-soft px-2.5 py-0.5 text-caption font-bold text-accent ' +\n 'transition-colors duration-150 hover:bg-accent hover:text-accent-fg ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent', children: matchLabel })), _jsxs(\"div\", { \"data-part\": \"condition-row\", \"data-field\": condition.field, \"data-op\": condition.op, className: \"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-surface-2 px-2.5 py-2\", children: [_jsxs(Select, { \"aria-label\": config.fieldLabel ?? 'Field', \"data-part\": \"condition-field\", mono: true, value: condition.field, onChange: (event) => onFieldChange(index, event.currentTarget.value), wrapperClassName: \"w-auto min-w-[8rem]\", children: [catalog.map((field) => (_jsx(\"option\", { value: field.name, children: field.label ?? field.name }, field.name))), unknownField && _jsx(\"option\", { value: condition.field, children: condition.field })] }), _jsx(Select, { \"aria-label\": config.operatorLabel ?? 'Operator', \"data-part\": \"condition-operator\", value: condition.op, onChange: (event) => patch(index, { op: oneOf(event.currentTarget.value, RULE_OPERATORS, 'eq') }), wrapperClassName: \"w-auto min-w-[8rem]\", children: operators.map((operator) => (_jsx(\"option\", { value: operator, children: config.operatorLabels?.[operator] ?? DEFAULT_OPERATOR_LABELS[operator] ?? operator }, operator))) }), operatorTakesValue(condition.op) && (_jsx(ValueControl, { type: type, def: def, value: condition.value, label: config.valueLabel ?? 'Value', placeholder: config.valuePlaceholder ?? '', onChange: (next) => patch(index, { value: next }) })), _jsx(IconButton, { label: `${config.removeLabel ?? 'Remove condition'} — ${condition.field}`, \"data-part\": \"condition-remove\", variant: \"ghost\", size: \"sm\", className: \"ms-auto\", onClick: () => commit(conditions.filter((_, i) => i !== index)), children: _jsx(X, { className: \"size-4\" }) })] })] }, condition.key));\n }), _jsxs(\"button\", { type: \"button\", \"data-part\": \"add-condition\", onClick: addCondition, disabled: conditions.length >= config.maxConditions || catalog.length === 0, className: cn('flex w-fit items-center gap-1.5 rounded-lg border border-dashed border-border-strong px-2.5 py-1.5', 'text-caption font-semibold text-fg-muted transition-colors duration-150', 'hover:border-accent hover:text-accent disabled:pointer-events-none disabled:opacity-40', 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent'), children: [_jsx(Plus, { \"aria-hidden\": \"true\", className: \"size-3.5\" }), config.addLabel ?? 'Add condition'] })] }));\n}\n/** The value control for a condition, chosen by the field's column type. */\nfunction ValueControl({ type, def, value, label, placeholder, onChange, }) {\n if (type === 'enum' && def?.options !== undefined && def.options.length > 0) {\n return (_jsxs(Select, { \"aria-label\": label, \"data-part\": \"condition-value\", value: value, onChange: (event) => onChange(event.currentTarget.value), wrapperClassName: \"w-auto min-w-[8rem]\", children: [_jsx(\"option\", { value: \"\" }), def.options.map((option) => (_jsx(\"option\", { value: option.value, children: option.label ?? option.value }, option.value)))] }));\n }\n if (type === 'boolean') {\n return (_jsxs(Select, { \"aria-label\": label, \"data-part\": \"condition-value\", value: value, onChange: (event) => onChange(event.currentTarget.value), wrapperClassName: \"w-auto min-w-[6rem]\", children: [_jsx(\"option\", { value: \"true\", children: \"true\" }), _jsx(\"option\", { value: \"false\", children: \"false\" })] }));\n }\n if (type === 'date') {\n return (_jsx(DateInput, { \"aria-label\": label, \"data-part\": \"condition-value\", value: value, onChange: (event) => onChange(event.currentTarget.value), className: \"w-auto\" }));\n }\n return (_jsx(Input, { \"aria-label\": label, \"data-part\": \"condition-value\", mono: true, ...(type === 'number' ? { inputMode: 'decimal' } : {}), value: value, placeholder: placeholder, onChange: (event) => onChange(event.currentTarget.value), className: \"w-auto min-w-[8rem] flex-1 text-accent\" }));\n}\n//# sourceMappingURL=RuleBuilder.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `filter-chip-bar` (annex §10) — toggle chips with live mono count pills\n * computed from the SIBLING list (\"All 24 · Running 3 · Completed 21\"); a\n * single-select drives client/server filtering, with optional end-aligned\n * \"N of M\" meta. Evidence: ~17 comps (AB Experiments, Payments, Audit Log,\n * Ticket Queue, Notifications Center, Search Results, …).\n *\n * Built on @adminium/ui's `ChoiceChips` in SINGLE mode — not on `FilterChip`,\n * despite the name: `FilterChip` is the removable `field · op · value` condition\n * pill from the query builder, whereas this bar is a single-select facet picker,\n * which is exactly `ChoiceChips`'s radiogroup (roving tabindex, ←→ moves and\n * selects, RTL-mirrored).\n *\n * The counts are DERIVED from the bound `record-list` rather than configured —\n * that is the whole point of the widget (annex §10: \"live mono count pills\n * computed from the sibling list\"): a hard-coded count goes stale the moment a\n * row changes.\n */\nimport { ChoiceChips, MonoText } from '@adminium/ui';\nimport { useState } from 'react';\nimport { facetCountsOf, formatCount, recordRowsOf } from './forms-lib.js';\nimport { filterChipBarConfigSchema, filterChipBarDemoData } from './forms-config.js';\nexport { filterChipBarConfigSchema, filterChipBarDemoData };\n/**\n * The sentinel value of the leading \"All\" chip. Prefixed so it can never\n * collide with a real enum value read out of the data.\n */\nexport const ALL_KEY = '__all__';\n/**\n * Build the ordered facet list from the bound rows.\n *\n * Config `order` fixes the leading chips and their labels; facets the payload\n * has but the order omits render AFTER, in first-seen order — a new enum value\n * appearing in the data must never become invisible (and therefore\n * unfilterable) just because the config predates it.\n */\nexport function facetsOf(data, config) {\n const rows = recordRowsOf(data);\n const counts = facetCountsOf(rows, config.facetField);\n const ordered = config.order ?? [];\n const orderedKeys = new Set(ordered.map((entry) => entry.key));\n const facets = [];\n for (const entry of ordered) {\n // A configured facet with zero rows still renders — its \"0\" is meaningful\n // (\"Failed 0\" is good news), unlike an undiscovered one.\n facets.push({ key: entry.key, label: entry.label ?? entry.key, count: counts.get(entry.key) ?? 0, tone: entry.tone });\n }\n for (const [key, count] of counts) {\n if (!orderedKeys.has(key))\n facets.push({ key, label: key, count });\n }\n return { facets, total: rows.length };\n}\nexport function FilterChipBarWidget({ config, data, onEvent }) {\n const { facets, total } = facetsOf(data, config);\n const [selected, setSelected] = useState(config.value ?? null);\n const locale = config.format?.locale;\n const shown = selected === null ? total : (facets.find((facet) => facet.key === selected)?.count ?? 0);\n const meta = (config.metaTemplate ?? '{shown} of {total}')\n .replace('{shown}', String(shown))\n .replace('{total}', String(total));\n const select = (key) => {\n // `ALL_KEY` is the sentinel for \"no facet\" — ChoiceChips' single mode can\n // return null on deselect, which means the same thing.\n const next = key === ALL_KEY ? null : key;\n setSelected(next);\n // Filtering is a HOST concern: the sibling list re-queries. The widget\n // reports the choice through a drill-through on its own href, which is the\n // only event channel a read-only control has (04 §2.1).\n if (config.href === undefined)\n return;\n const href = next === null ? config.href : `${config.href}?${config.facetField}=${encodeURIComponent(next)}`;\n onEvent({ type: 'drill-through', href });\n };\n const label = (text, count) => config.showCounts ? (_jsxs(_Fragment, { children: [text, \" \", _jsx(MonoText, { className: \"text-[10.5px] opacity-70\", children: formatCount(count, locale) })] })) : (text);\n return (_jsxs(\"div\", { \"data-widget\": \"filter-chip-bar\", \"data-testid\": config.testId, className: \"flex h-full flex-wrap items-center gap-1.5 px-4 pb-4\", children: [_jsx(ChoiceChips, { \"data-part\": \"facet-chips\", \"aria-label\": config.a11yLabel ?? config.title ?? 'Filter', value: selected ?? ALL_KEY, onValueChange: select, options: [\n { value: ALL_KEY, label: label(config.allLabel ?? 'All', total) },\n ...facets.map((facet) => ({ value: facet.key, label: label(facet.label, facet.count) })),\n ] }), config.showMeta && (_jsx(MonoText, { \"data-part\": \"facet-meta\", className: \"ms-auto text-caption text-fg-subtle\", children: meta }))] }));\n}\n//# sourceMappingURL=FilterChipBar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * The `forms` family's INPUT widgets (annex §10) — `otp-input`, `chip-input`,\n * `segmented-control`, `password-strength-meter`. Each is a thin registry\n * binding over an @adminium/ui primitive that already owns the interaction\n * model; this file adds the `form-state` binding, the config surface, and the\n * `mutate` intent on change.\n *\n * They live in ONE file because each is ~30 lines of binding over a component\n * that is already built and tested in @adminium/ui — a file apiece would be four\n * headers restating the same three sentences.\n *\n * WRITE MODEL: these widgets are CONTROLLED by local state and report changes as\n * `mutate` intents (04 §2.1) — they never persist. An unbound (demo) instance\n * has nowhere to send the intent, so it simply keeps local state.\n */\nimport { ChipInput, FormField, OtpInput, PasswordStrength, SegmentedControl, defaultPasswordScore } from '@adminium/ui';\nimport { useState } from 'react';\nimport { DEFAULT_SEGMENTS } from './forms-config.js';\nimport { chipInputConfigSchema, chipInputDemoData, otpInputConfigSchema, otpInputDemoData, passwordStrengthMeterConfigSchema, passwordStrengthMeterDemoData, segmentedControlConfigSchema, segmentedControlDemoData, } from './forms-config.js';\nimport { bindingTargetOf, formValuesOf } from './forms-state.js';\nexport { chipInputConfigSchema, chipInputDemoData, otpInputConfigSchema, otpInputDemoData, passwordStrengthMeterConfigSchema, passwordStrengthMeterDemoData, segmentedControlConfigSchema, segmentedControlDemoData, };\n// ── otp-input ───────────────────────────────────────────────────────────────\nexport function OtpInputWidget({ config, data, onEvent }) {\n const values = formValuesOf(data);\n const initial = typeof values['code'] === 'string' ? values['code'] : '';\n const [code, setCode] = useState(initial);\n const target = bindingTargetOf(config.binding);\n return (_jsxs(\"div\", { className: \"flex h-full flex-col justify-center gap-1.5 px-4 pb-4\", \"data-widget\": \"otp-input\", \"data-testid\": config.testId, children: [_jsx(OtpInput, { length: config.length, value: code, onChange: setCode, label: config.label ?? config.title ?? 'One-time code', onComplete: (complete) => {\n // Only a COMPLETE code is worth reporting — an intent per keystroke\n // would have the host verifying partial codes.\n if (target === null)\n return;\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: { code: complete },\n });\n } }), config.helpText !== undefined && _jsx(\"p\", { className: \"text-caption text-fg-subtle\", children: config.helpText })] }));\n}\n// ── chip-input ──────────────────────────────────────────────────────────────\n/**\n * The closed validator vocabulary (annex §10 `validator`). Config names a RULE,\n * never a predicate — see `chipInputConfigSchema`. `email` is the annex's\n * example (\"commits on Enter with validation, e.g. contains @\").\n */\nconst CHIP_VALIDATORS = {\n none: () => true,\n email: (chip) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(chip),\n domain: (chip) => /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i.test(chip),\n};\nexport function ChipInputWidget({ config, data, onEvent }) {\n const values = formValuesOf(data);\n const initial = Array.isArray(values['chips']) ? values['chips'].filter((c) => typeof c === 'string') : [];\n const [chips, setChips] = useState(initial);\n const target = bindingTargetOf(config.binding);\n const field = (_jsx(ChipInput, { value: chips, onValueChange: (next) => {\n setChips(next);\n if (target === null)\n return;\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: { chips: next },\n });\n }, validate: CHIP_VALIDATORS[config.validator] ?? CHIP_VALIDATORS['none'], removeLabel: (chip) => `${config.removeLabel ?? 'Remove'} ${chip}`, placeholder: config.placeholder ?? '', inputClassName: config.mono ? 'font-mono' : undefined }));\n return (_jsx(\"div\", { className: \"flex h-full flex-col justify-center px-4 pb-4\", \"data-widget\": \"chip-input\", \"data-testid\": config.testId, children: config.label === undefined ? (field) : (_jsx(FormField, { label: config.label, ...(config.helpText === undefined ? {} : { hint: config.helpText }), children: field })) }));\n}\n// ── segmented-control ───────────────────────────────────────────────────────\nexport function SegmentedControlWidget({ config, data, onEvent }) {\n const values = formValuesOf(data);\n const options = config.options ?? DEFAULT_SEGMENTS;\n const fallback = config.value ?? (typeof values['value'] === 'string' ? values['value'] : options[0]?.key);\n const [value, setValue] = useState(fallback ?? '');\n const target = bindingTargetOf(config.binding);\n if (options.length === 0)\n return null;\n return (_jsx(\"div\", { className: \"flex h-full items-center px-4 pb-4\", \"data-widget\": \"segmented-control\", \"data-style\": config.style, \"data-testid\": config.testId, children: _jsx(SegmentedControl, { \"aria-label\": config.a11yLabel ?? config.title ?? 'Select an option', value: value, onValueChange: (next) => {\n setValue(next);\n if (target === null)\n return;\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: { value: next },\n });\n }, options: options.map((option) => ({\n value: option.key,\n label: option.label ?? option.key,\n ...('dot' in option && option.dot !== undefined ? { dot: option.dot } : {}),\n })) }) }));\n}\n// ── password-strength-meter ─────────────────────────────────────────────────\n/**\n * `password-strength-meter` (annex §10) — 4-segment bar filled by score.\n *\n * Scoring is @adminium/ui's `defaultPasswordScore`, NOT a second rule of our\n * own: the auth screens already meter passwords with it, and two scorers would\n * eventually disagree about the same password.\n *\n * The password never leaves the widget — no binding, no `mutate` intent. It is a\n * pure projection of a value the host's form owns.\n */\nexport function PasswordStrengthMeterWidget({ config, data }) {\n const values = formValuesOf(data);\n const password = typeof values['password'] === 'string' ? values['password'] : '';\n const labels = config.labels ?? ['Weak', 'Fair', 'Good', 'Strong'];\n return (_jsx(\"div\", { className: \"flex h-full flex-col justify-center px-4 pb-4\", \"data-widget\": \"password-strength-meter\", \"data-score\": defaultPasswordScore(password), \"data-testid\": config.testId, children: _jsx(PasswordStrength, { value: password, label: config.label ?? config.title ?? 'Password strength', labels: labels }) }));\n}\n//# sourceMappingURL=InputWidgets.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `modal-wizard` (annex §10) — the two-state modal (form → success\n * confirmation): backdrop/Escape close, submit harvests values and persists, the\n * success step confirms with a summary. THE standard \"create record\" affordance\n * across the product (annex §10 lists ~20 evidence comps), and the\n * auto-instantiation target for any table with ≤5 generated fields.\n *\n * Wraps @adminium/ui's `TwoPhaseModal` + `useModalFlow`, which own the phase\n * machine, the focus-preserving body swap, and the deferred reset that stops the\n * success step flashing back to the form while closing. This file adds the\n * `form-state` binding, the generated field set, required-field validation, and\n * the `insert` intent.\n *\n * WRITE MODEL (04 §2.1): submit emits a `mutate` INTENT — the widget never\n * writes. The host runs it through the CRUD API (with undo + audit) and only\n * then does the modal advance to its success phase, so a rejected insert cannot\n * show a \"Created!\" confirmation.\n */\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader, TwoPhaseModal, useModalFlow, } from '@adminium/ui';\nimport { useState } from 'react';\nimport { FormFields } from './FormFields.js';\nimport { bindingTargetOf, initialValues, missingRequired, resolveFields } from './forms-state.js';\nimport { modalWizardConfigSchema, modalWizardDemoData } from './forms-config.js';\nexport { modalWizardConfigSchema, modalWizardDemoData };\nexport function ModalWizardWidget({ config, data, instanceId, onEvent }) {\n const fields = resolveFields(config.fields, data);\n const flow = useModalFlow();\n const [open, setOpen] = useState(false);\n const [values, setValues] = useState(() => initialValues(fields, data));\n const [invalid, setInvalid] = useState([]);\n const [submitting, setSubmitting] = useState(false);\n const target = bindingTargetOf(config.binding);\n const submit = async () => {\n const missing = missingRequired(fields, values);\n setInvalid(missing);\n if (missing.length > 0)\n return;\n // Unbound (demo/story/palette) instance: no host to persist through, so go\n // straight to the success phase rather than emitting an intent into the void.\n if (target === null) {\n flow.toSuccess(values);\n return;\n }\n setSubmitting(true);\n try {\n // The host MAY return a promise that rejects on a failed commit\n // (WidgetProps.onEvent) — awaiting it is what keeps a rejected insert from\n // rendering a \"Created!\" confirmation. A host that returns void resolves\n // immediately, which is the same behaviour as before.\n await onEvent({\n type: 'mutate',\n intent: 'insert',\n connectionId: target.connectionId,\n table: target.table,\n values,\n });\n flow.toSuccess(values);\n }\n catch {\n // The host owns error surfacing (a toast, an inline banner); the modal\n // simply stays on its form so the user's input is not lost.\n }\n finally {\n setSubmitting(false);\n }\n };\n return (_jsxs(\"div\", { className: \"flex h-full items-center px-4 pb-4\", \"data-widget\": \"modal-wizard\", \"data-testid\": config.testId, children: [_jsx(Button, { size: \"sm\", \"data-part\": \"wizard-trigger\", onClick: () => setOpen(true), children: config.triggerLabel ?? config.title ?? 'Create' }), _jsxs(TwoPhaseModal, { flow: flow, open: open, onOpenChange: setOpen, size: config.size, successTitle: config.successTitle ?? 'Created', successBody: config.successBody ?? 'The record was saved.', doneLabel: config.doneLabel ?? 'Done', children: [_jsx(ModalHeader, { title: config.title ?? 'Create record', ...(config.subtitleText === undefined ? {} : { subtitle: config.subtitleText }), closeLabel: config.cancelLabel ?? 'Close' }), _jsx(ModalBody, { children: _jsx(FormFields, { fields: fields, values: values, invalid: invalid, idPrefix: instanceId, onChange: (name, value) => {\n setValues((previous) => ({ ...previous, [name]: value }));\n // Clear the field's error as soon as it is touched — leaving it\n // red while the user fixes it reads as \"still wrong\".\n setInvalid((previous) => previous.filter((entry) => entry !== name));\n } }) }), _jsxs(ModalFooter, { children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: () => setOpen(false), children: config.cancelLabel ?? 'Cancel' }), _jsx(Button, { size: \"sm\", \"data-part\": \"wizard-submit\", disabled: submitting, onClick: () => void submit(), children: config.submitLabel ?? 'Create' })] })] })] }));\n}\n/** Re-exported for template composition + stories. */\nexport { Modal };\n//# sourceMappingURL=ModalWizard.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * `option-cards` (annex §10) — single-select card grid: icon tile, title,\n * description; the selected card gets a 2px accent border + accent-soft bg.\n * Powers deploy targets, data sources, templates, import sources and plan\n * selection. Evidence: Adminium Console, Onboarding, Import Wizard, Billing.\n *\n * Wraps @adminium/ui's `RadioGroup` + `RadioCard`, which own the selected\n * styling, the full-card click target and the arrow-key roving selection. The\n * cards MUST live inside a `RadioGroup` — that is what makes ←→ move between\n * them instead of Tab, which is the whole point of a radio card set.\n */\nimport { IconTile, RadioCard, RadioGroup } from '@adminium/ui';\nimport { formIcon } from './forms-icons.js';\nimport { bindingTargetOf } from './forms-state.js';\nimport { recordRowsOf, stringField } from './forms-lib.js';\nimport { optionCardsConfigSchema, optionCardsDemoData } from './forms-config.js';\nimport { useState } from 'react';\nexport { optionCardsConfigSchema, optionCardsDemoData };\n/** Project the §3 `record-list` payload onto option cards. */\nexport function optionsOf(data, config) {\n const rows = recordRowsOf(data);\n const out = [];\n for (const [index, row] of rows.entries()) {\n const label = stringField(row, config.labelField);\n if (label === undefined)\n continue;\n out.push({\n key: stringField(row, config.keyField) ?? `option-${index}`,\n label,\n description: stringField(row, config.descField),\n icon: stringField(row, config.iconField),\n });\n }\n return out;\n}\n/**\n * Explicit column classes — Tailwind scans source statically, so a computed\n * `grid-cols-${n}` would emit no CSS. Keyed by the schema's 1–4 range.\n */\nconst COLUMN_CLASSES = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n};\nexport function OptionCardsWidget({ config, data, onEvent }) {\n const options = optionsOf(data, config);\n const [value, setValue] = useState(config.value ?? '');\n const target = bindingTargetOf(config.binding);\n if (options.length === 0)\n return null;\n return (_jsx(\"div\", { className: \"h-full overflow-auto px-4 pb-4\", \"data-widget\": \"option-cards\", \"data-testid\": config.testId, children: _jsx(RadioGroup, { \"aria-label\": config.a11yLabel ?? config.title ?? 'Choose an option', value: value, onValueChange: (next) => {\n setValue(next);\n if (target === null)\n return;\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: { [config.keyField]: next },\n });\n }, className: `grid gap-3 ${COLUMN_CLASSES[config.columns] ?? COLUMN_CLASSES[2]}`, children: options.map((option) => {\n const glyph = formIcon(option.icon);\n return (_jsx(RadioCard, { value: option.key, \"data-part\": \"option-card\", \"data-key\": option.key, title: option.label, ...(option.description === undefined ? {} : { description: option.description }), ...(glyph === undefined\n ? {}\n : {\n icon: config.iconStyle === 'tile' ? (_jsx(IconTile, { size: \"md\", tone: \"accent\", icon: glyph })) : (_jsx(\"span\", { className: \"text-fg-muted [&_svg]:size-5\", children: glyph })),\n }) }, option.key));\n }) }) }));\n}\n//# sourceMappingURL=OptionCards.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `progress-bar` (annex §10) — determinate pill track with an animated accent\n * fill + optional mono % caption. Powers wizard %, import progress (the fill\n * flips `pos` at 100%) and generation progress. Evidence: Adminium Console,\n * Import Wizard, Workspace Onboarding, Connect Database, See It In Action.\n *\n * Wraps @adminium/ui's `ProgressBar` (which owns the track, the fill animation\n * and the `role=\"progressbar\"` semantics); this file adds the `single-metric`\n * binding, the 0–100 clamp and the completion tone flip.\n */\nimport { MonoText, ProgressBar } from '@adminium/ui';\nimport { clampPct, uiToneOf } from './forms-lib.js';\nimport { progressBarConfigSchema, progressBarDemoData } from './forms-config.js';\nimport { asSingleMetric } from '../../lib/shapes.js';\nexport { progressBarConfigSchema, progressBarDemoData };\nexport function ProgressBarWidget({ config, data }) {\n const metric = asSingleMetric(data);\n // A malformed payload renders 0%, never a NaN-width bar (04 §3 leniency).\n const value = clampPct(metric?.value);\n const complete = value >= 100;\n const label = config.label ?? config.title ?? 'Progress';\n return (_jsxs(\"div\", { \"data-widget\": \"progress-bar\", \"data-complete\": complete ? 'true' : undefined, \"data-testid\": config.testId, className: \"flex h-full items-center gap-2 px-4 pb-4\", children: [_jsx(ProgressBar, { value: value, max: 100, \n // The completion flip is the annex's \"color flips pos at 100%\"; with it\n // off, an explicit config tone wins, else accent.\n tone: complete && config.completeColor ? 'pos' : uiToneOf(config.tone, 'accent'), size: config.height, animated: true, label: label, className: \"flex-1\" }), config.showPercent && (_jsxs(MonoText, { \"data-part\": \"progress-pct\", className: \"shrink-0 text-caption font-semibold text-fg-muted\", children: [Math.round(value), \"%\"] }))] }));\n}\n//# sourceMappingURL=ProgressBarWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * `stepper` (annex §10) — progress stepper, horizontal or vertical: numbered /\n * spinner / check circles, connector lines filling accent on completion,\n * clickable navigation, label + sub per step. Evidence: Auth & Onboarding,\n * Connect Database, Import Wizard, Onboarding (vertical), Project Overview.\n *\n * Wraps @adminium/ui's `Stepper`, which owns the circles, connectors and the\n * `ol` semantics; this file adds the `record-list` binding, the per-step state\n * derivation, and routes step clicks through `onEvent`.\n */\nimport { Stepper } from '@adminium/ui';\nimport { oneOf, recordRowsOf, stringField } from './forms-lib.js';\nimport { STEP_STATES, stepperConfigSchema, stepperDemoData } from './forms-config.js';\nexport { stepperConfigSchema, stepperDemoData };\n/**\n * Project the §3 `record-list` payload onto step defs.\n *\n * A row's explicit `state` wins; where the payload carries none, the state is\n * DERIVED from the row's position relative to `activeIndex` — so a plain\n * `{label}` list still renders a correct done/active/pending run rather than an\n * all-pending one.\n */\nexport function stepsOf(data, config) {\n const rows = recordRowsOf(data);\n const out = [];\n for (const [index, row] of rows.entries()) {\n const label = stringField(row, config.labelField);\n if (label === undefined)\n continue;\n const raw = row[config.stateField];\n const state = raw === undefined\n ? index < config.activeIndex\n ? 'done'\n : index === config.activeIndex\n ? 'active'\n : 'pending'\n : oneOf(raw, STEP_STATES, 'pending');\n out.push({\n key: stringField(row, config.keyField) ?? `step-${index}`,\n label,\n description: config.showDescriptions ? stringField(row, config.descField) : undefined,\n state,\n });\n }\n return out;\n}\nexport function StepperWidget({ config, data, onEvent }) {\n const steps = stepsOf(data, config);\n if (steps.length === 0)\n return null;\n // The active index the UI component highlights: an explicitly-`active` row\n // wins over the config index, so a payload-driven run stays authoritative.\n const activeFromRows = steps.findIndex((step) => step.state === 'active');\n const activeIndex = activeFromRows === -1 ? config.activeIndex : activeFromRows;\n return (_jsx(\"div\", { className: \"flex h-full items-center px-4 pb-4\", \"data-widget\": \"stepper\", \"data-testid\": config.testId, children: _jsx(Stepper, { className: \"w-full\", label: config.a11yLabel ?? config.title ?? 'Progress', orientation: config.orientation, activeIndex: activeIndex, steps: steps.map((step) => ({\n id: step.key,\n label: step.label,\n ...(step.description === undefined ? {} : { description: step.description }),\n ...(step.state === undefined ? {} : { state: step.state }),\n })), ...(config.clickable && config.href !== undefined\n ? {\n // Step navigation is a host concern: the widget reports the intent\n // and the host routes it (04 §2.1). Without an href there is\n // nowhere to go, so the stepper stays read-only.\n onStepClick: (index) => onEvent({ type: 'drill-through', href: `${config.href}?step=${steps[index]?.key ?? index}` }),\n }\n : {}) }) }));\n}\n//# sourceMappingURL=StepperWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `toggle-switch-list` (annex §10) — a card of rows: label + description\n * (+ optional tone-tinted icon tile) + a switch bound to a `boolean-map`;\n * instant-persist or dirty-tracking. Evidence: Settings, Profile Settings,\n * Workspace Settings, Notification Settings, Survey Builder, Integrations.\n *\n * Binds the §3 `boolean-map` shape (annex §10: \"boolean-map keyed by setting id\n * + row metadata\") — the VALUES come from the payload, the row LABELS from\n * config, joined on the setting id.\n *\n * WRITE MODEL (04 §2.1): `optimistic` emits an `update` intent per toggle and\n * rolls the switch back if the host rejects it; `save-bar` batches into one\n * intent behind an explicit Save. Either way the widget never persists.\n */\nimport { Button, EmptyState, IconTile, Switch, cn } from '@adminium/ui';\nimport { useState } from 'react';\nimport { formIcon } from './forms-icons.js';\nimport { booleanEntriesOf, uiToneOf } from './forms-lib.js';\nimport { bindingTargetOf } from './forms-state.js';\nimport { DEFAULT_TOGGLE_ROWS, toggleSwitchListConfigSchema, toggleSwitchListDemoData } from './forms-config.js';\nexport { toggleSwitchListConfigSchema, toggleSwitchListDemoData, DEFAULT_TOGGLE_ROWS };\nexport function ToggleSwitchListWidget({ config, data, instanceId, onEvent }) {\n const bound = booleanEntriesOf(data);\n const rows = config.rows ?? DEFAULT_TOGGLE_ROWS;\n const [entries, setEntries] = useState(bound);\n /**\n * The last state the SERVER acknowledged. Rollback targets this rather than\n * \"the value before this toggle\": in `save-bar` mode a rejected save must undo\n * the whole batch, and using the pre-toggle value would only undo the last one.\n */\n const [saved, setSaved] = useState(bound);\n const [dirty, setDirty] = useState(false);\n const target = bindingTargetOf(config.binding);\n if (rows.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: config.emptyTitle ?? 'No settings', body: config.emptyBody ?? 'Settings appear here once they are configured.' }));\n }\n const commit = async (next) => {\n // Unbound (demo/story/palette): keep the local state, emit nothing.\n if (target === null) {\n setSaved(next);\n setDirty(false);\n return;\n }\n try {\n await onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: target.connectionId,\n table: target.table,\n values: next,\n });\n setSaved(next);\n setDirty(false);\n }\n catch {\n // The host rejected the write — roll back to the last acknowledged state\n // so the UI never claims a setting is on when the server says otherwise.\n setEntries(saved);\n setDirty(false);\n }\n };\n const toggle = (key, checked) => {\n const next = { ...entries, [key]: checked };\n setEntries(next);\n if (config.persistMode === 'optimistic')\n void commit(next);\n else\n setDirty(true);\n };\n return (_jsxs(\"div\", { \"data-widget\": \"toggle-switch-list\", \"data-persist-mode\": config.persistMode, \"data-testid\": config.testId, className: \"flex h-full flex-col gap-2 overflow-auto px-4 pb-4\", children: [_jsx(\"ul\", { className: \"m-0 flex list-none flex-col gap-0.5 p-0\", children: rows.map((row) => {\n const id = `${instanceId}-${row.key}`;\n const checked = entries[row.key] === true;\n const icon = config.iconTiles ? formIcon(row.icon) : undefined;\n return (_jsxs(\"li\", { \"data-part\": \"toggle-row\", \"data-key\": row.key, className: \"flex items-start gap-3 rounded-lg px-2.5 py-3 hover:bg-surface-2\", children: [icon !== undefined && _jsx(IconTile, { size: \"md\", tone: uiToneOf(row.tone, 'accent'), icon: icon }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"label\", { htmlFor: id, className: \"block cursor-pointer text-body-sm font-bold text-fg\", children: row.label ?? row.key }), row.description !== undefined && (_jsx(\"p\", { className: cn('text-caption text-fg-muted'), children: row.description }))] }), _jsx(Switch, { id: id, checked: checked, onCheckedChange: (next) => toggle(row.key, next), className: \"mt-0.5 shrink-0\" })] }, row.key));\n }) }), config.persistMode === 'save-bar' && dirty && (_jsxs(\"div\", { \"data-part\": \"save-bar\", className: \"flex items-center justify-between gap-3 rounded-lg bg-surface-2 px-3 py-2\", children: [_jsx(\"span\", { className: \"text-caption text-fg-muted\", children: config.dirtyLabel ?? 'You have unsaved changes' }), _jsx(Button, { size: \"sm\", \"data-part\": \"save-button\", onClick: () => void commit(entries), children: config.saveLabel ?? 'Save' })] }))] }));\n}\n//# sourceMappingURL=ToggleSwitchList.js.map"],"names":["SPLIT_RE","ChipInput","className","inputClassName","value","defaultValue","onValueChange","validate","removeLabel","error","disabled","ref","onKeyDown","onPaste","onBlur","inputProps","innerRef","useRef","internal","setInternal","useState","text","setText","rejected","setRejected","chips","invalid","setRef","node","commitChips","next","addTokens","raw","tokens","token","failed","commitPending","handleKeyDown","event","handlePaste","pasted","_jsxs","cn","chip","_jsx","Tag","existing","stringValue","control","field","onChange","Textarea","Switch","checked","Select","option","DateInput","Input","FormFields","fields","values","requiredHint","idPrefix","invalidSet","id","isInvalid","FormField","DrawerFormWidget","config","data","instanceId","onEvent","resolveFields","open","setOpen","setValues","initialValues","setInvalid","submitting","setSubmitting","target","bindingTargetOf","submit","missing","missingRequired","Button","Drawer","DrawerHeader","DrawerBody","name","previous","entry","DrawerFooter","exportStateOf","formValuesOf","formats","EXPORT_FORMATS","fallback","format","oneOf","stringField","ExportBuilderWidget","state","setState","submitted","setSubmitted","payloadPhase","EXPORT_PHASES","phase","exportPhaseOf","progress","clampPct","numberField","href","patch","partial","current","SegmentedControl","MonoText","ProgressBar","Download","flowNodesOf","kinds","FLOW_NODE_KINDS","out","index","row","title","kind","flowStatsOf","runs","successRate","FlowBuilderWidget","nodes","setNodes","paletteOpen","setPaletteOpen","stats","enabledKinds","palette","DEFAULT_FLOW_PALETTE","commit","addNode","canAppendNode","atCapacity","tone","FLOW_NODE_TONE","IconTile","formIcon","_","i","X","Popover","PopoverTrigger","Plus","PopoverContent","blocked","PopoverClose","boundValueOf","recordRowOf","boundRecordIdOf","displayValue","InlineEditableFieldWidget","bound","committed","setCommitted","draft","setDraft","editing","setEditing","lastBound","setLastBound","recordId","controlId","cancel","empty","shared","questionsOf","QUESTION_KINDS","opts","o","booleanField","QuestionBuilderWidget","questions","setQuestions","question","questionTakesOptions","addQuestion","kindLabel","DEFAULT_QUESTION_KIND_LABELS","questionKindIcon","EmptyState","RailButton","moveItem","ChevronUp","ChevronDown","AnswerPreview","first","label","part","onClick","children","RATING_STARS","Star","NPS_SCORES","score","fieldDefOf","catalog","conditionsOf","DEFAULT_RULE_FIELDS","type","repairOperator","RULE_OPERATORS","matchModeOf","RULE_MATCH_MODES","RuleBuilderWidget","conditions","setConditions","match","setMatch","emit","nextConditions","nextMatch","condition","operatorTakesValue","onFieldChange","addCondition","allowed","operatorsForType","toggleMatch","matchLabel","def","operators","unknownField","operator","DEFAULT_OPERATOR_LABELS","ValueControl","IconButton","placeholder","ALL_KEY","facetsOf","rows","recordRowsOf","counts","facetCountsOf","ordered","orderedKeys","facets","key","count","FilterChipBarWidget","total","selected","setSelected","locale","shown","facet","meta","select","_Fragment","formatCount","ChoiceChips","OtpInputWidget","initial","code","setCode","OtpInput","complete","CHIP_VALIDATORS","ChipInputWidget","c","setChips","SegmentedControlWidget","options","DEFAULT_SEGMENTS","setValue","PasswordStrengthMeterWidget","password","labels","defaultPasswordScore","PasswordStrength","ModalWizardWidget","flow","useModalFlow","TwoPhaseModal","ModalHeader","ModalBody","ModalFooter","optionsOf","COLUMN_CLASSES","OptionCardsWidget","RadioGroup","glyph","RadioCard","ProgressBarWidget","metric","asSingleMetric","uiToneOf","stepsOf","STEP_STATES","StepperWidget","steps","activeFromRows","step","activeIndex","Stepper","ToggleSwitchListWidget","booleanEntriesOf","DEFAULT_TOGGLE_ROWS","entries","setEntries","saved","setSaved","dirty","setDirty","toggle","icon"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"Přehled"},widget:{loading:"Načítání widgetu…",error:"Tento widget se nepodařilo načíst",empty:"Pro toto období nejsou žádná data"}};export{e as default};
2
+ //# sourceMappingURL=generated-1EfWhCMA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-1EfWhCMA.js","sources":["../../../../packages/i18n/dist/resources/cs-cz/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/cs-CZ/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"Přehled\"\n },\n \"widget\": {\n \"loading\": \"Načítání widgetu…\",\n \"error\": \"Tento widget se nepodařilo načíst\",\n \"empty\": \"Pro toto období nejsou žádná data\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,SACjB,EACI,OAAU,CACN,QAAW,oBACX,MAAS,oCACT,MAAS,mCACjB,CACA"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"Dashboard"},widget:{loading:"Indlæser widget…",error:"Denne widget kunne ikke indlæses",empty:"Ingen data for denne periode"}};export{e as default};
2
+ //# sourceMappingURL=generated-BB3ZMxvx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-BB3ZMxvx.js","sources":["../../../../packages/i18n/dist/resources/da-dk/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/da-DK/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"Dashboard\"\n },\n \"widget\": {\n \"loading\": \"Indlæser widget…\",\n \"error\": \"Denne widget kunne ikke indlæses\",\n \"empty\": \"Ingen data for denne periode\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,WACjB,EACI,OAAU,CACN,QAAW,mBACX,MAAS,mCACT,MAAS,8BACjB,CACA"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"Tableau de bord"},widget:{loading:"Chargement du widget…",error:"Ce widget n’a pas pu se charger",empty:"Aucune donnée pour cette période"}};export{e as default};
2
+ //# sourceMappingURL=generated-C0JVNBRX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-C0JVNBRX.js","sources":["../../../../packages/i18n/dist/resources/fr-fr/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/fr-FR/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"Tableau de bord\"\n },\n \"widget\": {\n \"loading\": \"Chargement du widget…\",\n \"error\": \"Ce widget n’a pas pu se charger\",\n \"empty\": \"Aucune donnée pour cette période\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,iBACjB,EACI,OAAU,CACN,QAAW,wBACX,MAAS,kCACT,MAAS,kCACjB,CACA"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"Dashboard"},widget:{loading:"Widget wird geladen…",error:"Dieses Widget konnte nicht geladen werden",empty:"Keine Daten für diesen Zeitraum"}};export{e as default};
2
+ //# sourceMappingURL=generated-C1W48_-3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-C1W48_-3.js","sources":["../../../../packages/i18n/dist/resources/de-de/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/de-DE/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"Dashboard\"\n },\n \"widget\": {\n \"loading\": \"Widget wird geladen…\",\n \"error\": \"Dieses Widget konnte nicht geladen werden\",\n \"empty\": \"Keine Daten für diesen Zeitraum\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,WACjB,EACI,OAAU,CACN,QAAW,uBACX,MAAS,4CACT,MAAS,iCACjB,CACA"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"لوحة المعلومات"},widget:{loading:"جارٍ تحميل الودجة…",error:"تعذَّر تحميل هذه الودجة",empty:"لا توجد بيانات لهذه الفترة"}};export{e as default};
2
+ //# sourceMappingURL=generated-CluiB_xY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-CluiB_xY.js","sources":["../../../../packages/i18n/dist/resources/ar-eg/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/ar-EG/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"لوحة المعلومات\"\n },\n \"widget\": {\n \"loading\": \"جارٍ تحميل الودجة…\",\n \"error\": \"تعذَّر تحميل هذه الودجة\",\n \"empty\": \"لا توجد بيانات لهذه الفترة\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,gBACjB,EACI,OAAU,CACN,QAAW,qBACX,MAAS,0BACT,MAAS,4BACjB,CACA"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"儀表板"},widget:{loading:"小工具載入中…",error:"此小工具載入失敗",empty:"這段期間沒有資料"}};export{e as default};
2
+ //# sourceMappingURL=generated-DDGtlf-4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-DDGtlf-4.js","sources":["../../../../packages/i18n/dist/resources/zh-tw/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/zh-TW/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"儀表板\"\n },\n \"widget\": {\n \"loading\": \"小工具載入中…\",\n \"error\": \"此小工具載入失敗\",\n \"empty\": \"這段期間沒有資料\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,KACjB,EACI,OAAU,CACN,QAAW,UACX,MAAS,WACT,MAAS,UACjB,CACA"}
@@ -0,0 +1,2 @@
1
+ const e={app:{title:"仪表盘"},widget:{loading:"小组件加载中…",error:"此小组件加载失败",empty:"该时段暂无数据"}};export{e as default};
2
+ //# sourceMappingURL=generated-DPCHvNto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-DPCHvNto.js","sources":["../../../../packages/i18n/dist/resources/zh-cn/generated.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/zh-CN/generated.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"app\": {\n \"title\": \"仪表盘\"\n },\n \"widget\": {\n \"loading\": \"小组件加载中…\",\n \"error\": \"此小组件加载失败\",\n \"empty\": \"该时段暂无数据\"\n }\n};\n//# sourceMappingURL=generated.js.map"],"names":["generated"],"mappings":"AAQA,MAAAA,EAAe,CACX,IAAO,CACH,MAAS,KACjB,EACI,OAAU,CACN,QAAW,UACX,MAAS,WACT,MAAS,SACjB,CACA"}
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/leaflet-src-D12shr04.js","assets/index-PB1II0WV.js","assets/index-DPi4cduu.css","assets/leaflet-CIGW-MKW.css"])))=>i.map(i=>d[i]);
2
+ import{a2 as H,a3 as W,a4 as te,j as t,a5 as K,a6 as q,r as d,a7 as J,a8 as ae,a9 as le,aa as G,ab as ne,ac as $,ad as re,ae as se,af as z,ag as de,ah as ie,E as Q,ai as ue,aj as oe,ak as ce}from"./index-PB1II0WV.js";function me(){return typeof document>"u"?"light":document.documentElement.getAttribute("data-theme")==="dark"?"dark":"light"}function pe({points:e,metrics:i,metricLabels:u,center:c=se,zoom:b=re,flyToOnClick:n=!0,topN:r=5,format:x=String,onSelect:y,emptyTitle:R,emptyBody:C,mapUnavailableLabel:F,regionsLabel:j,locale:g,testId:w}){const l=q(g),m=d.useRef(null),I=d.useRef(null),T=d.useRef(null),M=d.useRef(null),O=d.useRef(null),[k,_]=d.useState("idle"),L=i!==void 0&&i.length>0?i:J(e),[E,X]=d.useState(void 0),v=E!==void 0&&L.includes(E)?E:L[0],U=d.useRef({points:e,activeMetric:v,flyToOnClick:n,format:x,onSelect:y});U.current={points:e,activeMetric:v,flyToOnClick:n,format:x,onSelect:y};const B=d.useCallback(()=>{const a=I.current,s=M.current,p=T.current;if(a===null||s===null||p===null)return;const{points:h,activeMetric:o,flyToOnClick:N,format:S,onSelect:A}=U.current;if(s.clearLayers(),o===void 0)return;const Z=ae(h),ee=le(Z,o);for(const f of Z){const D=G(f,o),P=a.circleMarker([f.lat,f.lng],{radius:ne(D,ee),color:"var(--accent)",fillColor:"var(--accent)",fillOpacity:.35,weight:1.5});P.bindTooltip(`${f.name}: ${S(D)}`,{direction:"top"}),P.on("click",()=>{N&&p.flyTo([f.lat,f.lng],Math.max(p.getZoom(),5)),A?.(f)}),P.addTo(s)}},[]),Y=e.length>0;if(d.useEffect(()=>{let a=!1;const s=m.current;if(s===null||typeof window>"u")return;let p;return(async()=>{let h;try{h=await $(()=>import("./leaflet-src-D12shr04.js").then(o=>o.l),__vite__mapDeps([0,1,2]));try{await $(()=>Promise.resolve({}),__vite__mapDeps([3]))}catch{}}catch{a||_("unavailable");return}if(!a)try{const o=h.map(s,{center:[c[0],c[1]],zoom:b,scrollWheelZoom:!1,attributionControl:!0}),N=h.tileLayer(z[me()],{attribution:de,maxZoom:18});N.addTo(o);const S=h.layerGroup().addTo(o);I.current=h,T.current=o,O.current=N,M.current=S,p=ie(A=>{O.current?.setUrl(z[A.theme==="dark"?"dark":"light"])}),_("ready"),B()}catch{a||_("unavailable")}})(),()=>{a=!0,p?.();try{T.current?.remove()}catch{}T.current=null,M.current=null,O.current=null,I.current=null}},[Y]),d.useEffect(()=>{k==="ready"&&B()},[e,v,k,B]),e.length===0)return t.jsx(Q,{compact:!0,preset:"no-data",title:R??"No locations",body:C??"Rows with latitude and longitude values appear here as map markers."});const V=r>0&&v!==void 0?[...e].map(a=>({point:a,value:G(a,v)})).sort((a,s)=>s.value-a.value||a.point.name.localeCompare(s.point.name,l)).slice(0,r):[];return t.jsxs("div",{"data-widget":"map-bubble","data-testid":w,"data-map-status":k,className:"flex h-full flex-col gap-3 px-4 pb-4 compact:px-3 compact:pb-3",children:[L.length>1&&t.jsx(ue,{"data-part":"metric-tabs","aria-label":j??"Metric",options:L.map(a=>({value:a,label:u?.[a]??a})),value:v,onValueChange:X}),t.jsxs("div",{className:"flex min-h-0 flex-1 flex-wrap items-stretch gap-3",children:[t.jsxs("div",{dir:"ltr",className:"relative min-h-[12rem] min-w-[16rem] flex-[2] overflow-hidden rounded-lg border border-border",children:[t.jsx("div",{ref:m,"data-part":"map-canvas",className:"size-full"}),k==="unavailable"&&t.jsx("p",{"data-part":"map-unavailable",className:"absolute inset-0 flex items-center justify-center bg-surface-2 p-4 text-center text-caption text-fg-muted",children:F??"The map could not be loaded. The ranked list below shows the same data."})]}),V.length>0&&t.jsx("ol",{"data-part":"geo-ranking","aria-label":j??"Top regions",className:"min-w-40 flex-1 space-y-1.5",children:V.map(({point:a,value:s},p)=>t.jsx("li",{children:t.jsxs("button",{type:"button","data-part":"geo-ranking-row",onClick:()=>y?.(a),className:"flex w-full items-center justify-between gap-3 rounded-md px-2 py-1 text-start text-body-sm hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent",children:[t.jsxs("span",{className:"flex min-w-0 items-center gap-1.5",children:[t.jsx(oe,{"aria-hidden":"true",className:"size-3 shrink-0 text-fg-subtle"}),t.jsxs("span",{className:"text-fg-subtle tabular-nums",children:[p+1,"."]}),t.jsx("span",{className:"truncate text-fg-muted",children:a.name})]}),t.jsx("span",{className:"shrink-0 font-medium tabular-nums text-fg",children:x(s)})]})},a.name))})]})]})}function fe({config:e,data:i,onEvent:u}){const c=H(i,{nameField:e.nameField,codeField:e.codeField,latField:e.latColumn,lngField:e.lngColumn,metricFields:e.metrics}),b=W(e),n=te(e.binding);return t.jsx(pe,{points:c,metrics:e.metrics,metricLabels:e.metricLabels,flyToOnClick:e.flyToOnClick,topN:e.topN,zoom:e.initialZoom,format:r=>K(r,e.valueFormat,b),...e.initialCenter===void 0?{}:{center:e.initialCenter},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.mapUnavailableLabel===void 0?{}:{mapUnavailableLabel:e.mapUnavailableLabel},...e.regionsLabel===void 0?{}:{regionsLabel:e.regionsLabel},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.testId===void 0?{}:{testId:e.testId},onSelect:r=>{if(e.href!==void 0){u({type:"drill-through",href:e.href});return}u({type:"record-open",...n.connectionId===void 0?{}:{connectionId:n.connectionId},table:n.table,recordId:r.code??r.name,...e.linkedList===void 0?{}:{linkedInstanceId:e.linkedList}})}})}function be({points:e,metric:i,layout:u="us-tilegram",columns:c=6,levels:b=5,topN:n=5,label:r,legendLabels:x,format:y=String,emptyTitle:R,emptyBody:C,locale:F,testId:j}){const g=q(F);if(e.length===0)return t.jsx(Q,{compact:!0,preset:"no-data",title:R??"No regions",body:C??"Rows with a region code and a numeric value appear here as tinted tiles."});const w=n>0?[...e].map(l=>({name:l.name??l.code??"",value:l.values[i]??0})).sort((l,m)=>m.value-l.value||l.name.localeCompare(m.name,g)).slice(0,n):[];return t.jsxs("div",{"data-widget":"map-choropleth-grid","data-testid":j,className:"flex flex-wrap items-start gap-4 px-4 pb-4 compact:px-3 compact:pb-3",children:[t.jsx("div",{className:"overflow-x-auto",children:t.jsx(ce,{points:e,metric:i,labels:{label:r??"Regional breakdown"},layout:u,columns:c,levels:b,format:y,...x===void 0?{}:{legendLabels:x}})}),w.length>0&&t.jsx("ol",{"data-part":"region-ranking",className:"min-w-40 flex-1 space-y-1.5",children:w.map((l,m)=>t.jsxs("li",{className:"flex items-center justify-between gap-3 text-body-sm",children:[t.jsxs("span",{className:"truncate text-fg-muted",children:[t.jsxs("span",{className:"text-fg-subtle tabular-nums",children:[m+1,"."]})," ",l.name]}),t.jsx("span",{className:"font-medium tabular-nums text-fg",children:y(l.value)})]},`${l.name}-${m}`))})]})}function xe({config:e,data:i}){const u=H(i,{nameField:e.nameField,codeField:e.codeField,latField:"lat",lngField:"lng",metricFields:e.metric===void 0?[]:[e.metric]}),c=W(e),b=e.metric??J(u)[0]??"value",n=r=>K(r,e.valueFormat,c);return t.jsx(be,{points:u,metric:b,layout:e.layout,columns:e.columns,levels:e.levels,topN:e.topN,format:n,...e.title===void 0?{}:{label:e.title},...e.legendLowLabel===void 0&&e.legendHighLabel===void 0?{}:{legendLabels:{low:e.legendLowLabel??"Low",high:e.legendHighLabel??"High"}},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.testId===void 0?{}:{testId:e.testId}})}export{fe as MapBubbleWidget,xe as MapChoroplethGridWidget};
3
+ //# sourceMappingURL=geo-track-components-Ct4-MSRw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":["currentTheme","MapBubble","points","metrics","metricLabels","center","DEFAULT_CENTER","zoom","DEFAULT_ZOOM","flyToOnClick","topN","format","onSelect","emptyTitle","emptyBody","mapUnavailableLabel","regionsLabel","localeProp","testId","locale","localeOf","containerRef","useRef","leafletRef","mapRef","markersRef","tilesRef","mapStatus","setMapStatus","useState","keys","metricKeysOf","metric","setMetric","activeMetric","drawRef","drawMarkers","useCallback","L","layer","map","current","active","fly","fmt","select","plottable","plottablePoints","max","maxMetric","point","value","metricValue","marker","bubbleRadius","hasPoints","useEffect","cancelled","container","unsubscribe","__vitePreload","n","tiles","CARTO_TILES","CARTO_ATTRIBUTION","markers","subscribeTheme","resolved","_jsx","EmptyState","ranked","b","_jsxs","SegmentedControl","key","index","MapPin","MapBubbleWidget","config","data","onEvent","geoPointsOf","opts","formatOptionsOf","source","sourceOf","formatMetricValue","MapChoroplethGrid","layout","columns","levels","label","legendLabels","a","ChoroplethGridChart","row","MapChoroplethGridWidget"],"ignoreList":[],"sources":["../../../../packages/widgets/dist/families/geo/MapBubble.js","../../../../packages/widgets/dist/families/geo/MapChoroplethGrid.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { EmptyState, SegmentedControl, subscribeTheme } from '@adminium/ui';\nimport { MapPin } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { CARTO_ATTRIBUTION, CARTO_TILES, DEFAULT_CENTER, DEFAULT_ZOOM, bubbleRadius, localeOf, maxMetric, metricKeysOf, metricValue, plottablePoints, sourceOf, } from './geo-lib.js';\nimport { geoPointsOf } from './geo-lib.js';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\n// Config schema + deterministic demo payload live in the pure `geo-config`\n// module so the registry metadata graph never eagerly pulls this component (or\n// Leaflet) into the eager chunk (acceptance #3); re-exported here so the family\n// barrel, stories, and tests keep one import point per widget.\nexport { mapBubbleConfigSchema, mapBubbleDemoData } from './geo-config.js';\n/** The resolved theme right now, read off the attribute ThemeProvider stamps. */\nfunction currentTheme() {\n if (typeof document === 'undefined')\n return 'light';\n return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';\n}\nexport function MapBubble({ points, metrics, metricLabels, center = DEFAULT_CENTER, zoom = DEFAULT_ZOOM, flyToOnClick = true, topN = 5, format = String, onSelect, emptyTitle, emptyBody, mapUnavailableLabel, regionsLabel, locale: localeProp, testId, }) {\n const locale = localeOf(localeProp);\n const containerRef = useRef(null);\n const leafletRef = useRef(null);\n const mapRef = useRef(null);\n const markersRef = useRef(null);\n const tilesRef = useRef(null);\n const [mapStatus, setMapStatus] = useState('idle');\n const keys = metrics !== undefined && metrics.length > 0 ? metrics : metricKeysOf(points);\n const [metric, setMetric] = useState(undefined);\n const activeMetric = metric !== undefined && keys.includes(metric) ? metric : keys[0];\n // Latest render inputs, readable from the Leaflet callbacks without making\n // them a dependency of the mount effect (which must run exactly once — a\n // re-created map loses pan/zoom and refetches every tile).\n const drawRef = useRef({ points, activeMetric, flyToOnClick, format, onSelect });\n drawRef.current = { points, activeMetric, flyToOnClick, format, onSelect };\n /** (Re)draw the circle markers for the current points + metric. */\n const drawMarkers = useCallback(() => {\n const L = leafletRef.current;\n const layer = markersRef.current;\n const map = mapRef.current;\n if (L === null || layer === null || map === null)\n return;\n const { points: current, activeMetric: active, flyToOnClick: fly, format: fmt, onSelect: select } = drawRef.current;\n layer.clearLayers();\n if (active === undefined)\n return;\n const plottable = plottablePoints(current);\n const max = maxMetric(plottable, active);\n for (const point of plottable) {\n const value = metricValue(point, active);\n const marker = L.circleMarker([point.lat, point.lng], {\n radius: bubbleRadius(value, max),\n // Token-driven, not raw hex: the SVG marker inherits `--accent` through\n // the CSS custom property, so it re-tints with the theme/accent axes\n // exactly like every other surface (02 §7).\n color: 'var(--accent)',\n fillColor: 'var(--accent)',\n fillOpacity: 0.35,\n weight: 1.5,\n });\n marker.bindTooltip(`${point.name}: ${fmt(value)}`, { direction: 'top' });\n marker.on('click', () => {\n if (fly)\n map.flyTo([point.lat, point.lng], Math.max(map.getZoom(), 5));\n select?.(point);\n });\n marker.addTo(layer);\n }\n }, []);\n // Build the map once the canvas exists. `hasPoints` is in the deps because the\n // empty branch below returns an `EmptyState` INSTEAD of the container div, so\n // on a first render with no points `containerRef.current` is null and this\n // bails; without the dep it would never re-run when the data arrived, and the\n // widget would sit at `idle` — a silent blank box, not even the `unavailable`\n // notice — beside a populated ranked list.\n const hasPoints = points.length > 0;\n useEffect(() => {\n let cancelled = false;\n const container = containerRef.current;\n if (container === null || typeof window === 'undefined')\n return undefined;\n let unsubscribe;\n void (async () => {\n let L;\n try {\n // THE Leaflet boundary — see the file header. Nothing else in this\n // package may name 'leaflet'.\n L = await import('leaflet');\n // Leaflet's stylesheet positions the tile panes; without it the map is a\n // pile of stacked images. Separately guarded: a bundler/test runner that\n // stubs CSS must not take the map down with it.\n try {\n await import('leaflet/dist/leaflet.css');\n }\n catch {\n /* CSS stubbed (vitest) or inlined by the host — the map still works. */\n }\n }\n catch {\n if (!cancelled)\n setMapStatus('unavailable');\n return;\n }\n if (cancelled)\n return;\n try {\n const map = L.map(container, {\n center: [center[0], center[1]],\n zoom,\n // The widget lives in a scrolling dashboard grid: grabbing the page\n // scroll to zoom a map the user only scrolled PAST is hostile, so\n // zoom is on the +/- control and ⌘/ctrl+wheel, not the raw wheel.\n scrollWheelZoom: false,\n attributionControl: true,\n });\n const tiles = L.tileLayer(CARTO_TILES[currentTheme()], { attribution: CARTO_ATTRIBUTION, maxZoom: 18 });\n tiles.addTo(map);\n const markers = L.layerGroup().addTo(map);\n leafletRef.current = L;\n mapRef.current = map;\n tilesRef.current = tiles;\n markersRef.current = markers;\n // The annex's \"theme-following Carto light/dark tiles\". `subscribeTheme`\n // fires AFTER ThemeProvider stamps <html> (so `currentTheme()` above and\n // this agree), and its own docblock names this exact case (\"for Leaflet\n // tile swaps\"). It hands over the whole resolved axis set; only the\n // light/dark mode changes the basemap.\n unsubscribe = subscribeTheme((resolved) => {\n tilesRef.current?.setUrl(CARTO_TILES[resolved.theme === 'dark' ? 'dark' : 'light']);\n });\n setMapStatus('ready');\n drawMarkers();\n }\n catch {\n if (!cancelled)\n setMapStatus('unavailable');\n }\n })();\n return () => {\n cancelled = true;\n unsubscribe?.();\n try {\n mapRef.current?.remove();\n }\n catch {\n /* Already torn down. */\n }\n mapRef.current = null;\n markersRef.current = null;\n tilesRef.current = null;\n leafletRef.current = null;\n };\n // MOUNT-ONLY EXCEPT FOR `hasPoints`, ON PURPOSE. `center`/`zoom` are the\n // INITIAL view (annex config `initialZoom/center`): re-running this on a\n // config change would tear the map down and rebuild it, yanking the view out\n // from under a user who has panned and refetching every tile. Live inputs\n // reach Leaflet through `drawRef` + the redraw effect below instead, which\n // is why they are deliberately absent here. `hasPoints` is the one exception\n // — it gates whether the container is in the tree at all (see above), and it\n // flips at most once from false, so it can never re-create a live map.\n }, [hasPoints]);\n // Redraw when the data or the active metric changes (annex: \"metric tabs\" —\n // switching re-sizes every bubble). No-ops until the map is ready.\n useEffect(() => {\n if (mapStatus === 'ready')\n drawMarkers();\n }, [points, activeMetric, mapStatus, drawMarkers]);\n if (points.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No locations', body: emptyBody ?? 'Rows with latitude and longitude values appear here as map markers.' }));\n }\n const ranked = topN > 0 && activeMetric !== undefined\n ? [...points]\n .map((point) => ({ point, value: metricValue(point, activeMetric) }))\n .sort((a, b) => b.value - a.value || a.point.name.localeCompare(b.point.name, locale))\n .slice(0, topN)\n : [];\n return (_jsxs(\"div\", { \"data-widget\": \"map-bubble\", \"data-testid\": testId, \"data-map-status\": mapStatus, className: \"flex h-full flex-col gap-3 px-4 pb-4 compact:px-3 compact:pb-3\", children: [keys.length > 1 && (_jsx(SegmentedControl, { \"data-part\": \"metric-tabs\", \"aria-label\": regionsLabel ?? 'Metric', options: keys.map((key) => ({ value: key, label: metricLabels?.[key] ?? key })), value: activeMetric, onValueChange: setMetric })), _jsxs(\"div\", { className: \"flex min-h-0 flex-1 flex-wrap items-stretch gap-3\", children: [_jsxs(\"div\", { dir: \"ltr\", className: \"relative min-h-[12rem] min-w-[16rem] flex-[2] overflow-hidden rounded-lg border border-border\", children: [_jsx(\"div\", { ref: containerRef, \"data-part\": \"map-canvas\", className: \"size-full\" }), mapStatus === 'unavailable' && (_jsx(\"p\", { \"data-part\": \"map-unavailable\", className: \"absolute inset-0 flex items-center justify-center bg-surface-2 p-4 text-center text-caption text-fg-muted\", children: mapUnavailableLabel ?? 'The map could not be loaded. The ranked list below shows the same data.' }))] }), ranked.length > 0 && (_jsx(\"ol\", { \"data-part\": \"geo-ranking\", \"aria-label\": regionsLabel ?? 'Top regions', className: \"min-w-40 flex-1 space-y-1.5\", children: ranked.map(({ point, value }, index) => (_jsx(\"li\", { children: _jsxs(\"button\", { type: \"button\", \"data-part\": \"geo-ranking-row\", onClick: () => onSelect?.(point), className: \"flex w-full items-center justify-between gap-3 rounded-md px-2 py-1 text-start text-body-sm hover:bg-surface-2/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent\", children: [_jsxs(\"span\", { className: \"flex min-w-0 items-center gap-1.5\", children: [_jsx(MapPin, { \"aria-hidden\": \"true\", className: \"size-3 shrink-0 text-fg-subtle\" }), _jsxs(\"span\", { className: \"text-fg-subtle tabular-nums\", children: [index + 1, \".\"] }), _jsx(\"span\", { className: \"truncate text-fg-muted\", children: point.name })] }), _jsx(\"span\", { className: \"shrink-0 font-medium tabular-nums text-fg\", children: format(value) })] }) }, point.name))) }))] })] }));\n}\nexport function MapBubbleWidget({ config, data, onEvent }) {\n const points = geoPointsOf(data, {\n nameField: config.nameField,\n codeField: config.codeField,\n latField: config.latColumn,\n lngField: config.lngColumn,\n metricFields: config.metrics,\n });\n const opts = formatOptionsOf(config);\n const source = sourceOf(config.binding);\n return (_jsx(MapBubble, { points: points, metrics: config.metrics, metricLabels: config.metricLabels, flyToOnClick: config.flyToOnClick, topN: config.topN, zoom: config.initialZoom, format: (value) => formatMetricValue(value, config.valueFormat, opts), ...(config.initialCenter === undefined ? {} : { center: config.initialCenter }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.mapUnavailableLabel === undefined ? {} : { mapUnavailableLabel: config.mapUnavailableLabel }), ...(config.regionsLabel === undefined ? {} : { regionsLabel: config.regionsLabel }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.testId === undefined ? {} : { testId: config.testId }), onSelect: (point) => {\n // Selecting a place is a drill-through when config names a route, else a\n // record-open the page host routes (annex §7 `linkedList`: the host\n // focuses the paired ranked-entity-list — widgets never talk to each\n // other directly).\n if (config.href !== undefined) {\n onEvent({ type: 'drill-through', href: config.href });\n return;\n }\n onEvent({\n type: 'record-open',\n ...(source.connectionId === undefined ? {} : { connectionId: source.connectionId }),\n table: source.table,\n recordId: point.code ?? point.name,\n // annex §7 `linkedList` — carried on the event so the host can focus\n // the paired list. Omitted when unset, so the event stays exactly what\n // it was for an unpaired map.\n ...(config.linkedList === undefined ? {} : { linkedInstanceId: config.linkedList }),\n });\n } }));\n}\n//# sourceMappingURL=MapBubble.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ChoroplethGridChart } from '@adminium/charts';\nimport { EmptyState } from '@adminium/ui';\nimport { geoPointsOf, localeOf, metricKeysOf } from './geo-lib.js';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\n// Config schema + deterministic demo payload live in the pure `geo-config`\n// module so the registry metadata graph never eagerly pulls this component's\n// @adminium/ui + @adminium/charts deps (acceptance #3); re-exported here so the\n// family barrel, stories, and tests keep one import point per widget.\nexport { mapChoroplethGridConfigSchema, mapChoroplethGridDemoData } from './geo-config.js';\nexport function MapChoroplethGrid({ points, metric, layout = 'us-tilegram', columns = 6, levels = 5, topN = 5, label, legendLabels, format = String, emptyTitle, emptyBody, locale: localeProp, testId, }) {\n const locale = localeOf(localeProp);\n if (points.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: emptyTitle ?? 'No regions', body: emptyBody ?? 'Rows with a region code and a numeric value appear here as tinted tiles.' }));\n }\n const ranked = topN > 0\n ? [...points]\n .map((point) => ({ name: point.name ?? point.code ?? '', value: point.values[metric] ?? 0 }))\n .sort((a, b) => b.value - a.value || a.name.localeCompare(b.name, locale))\n .slice(0, topN)\n : [];\n return (_jsxs(\"div\", { \"data-widget\": \"map-choropleth-grid\", \"data-testid\": testId, className: \"flex flex-wrap items-start gap-4 px-4 pb-4 compact:px-3 compact:pb-3\", children: [_jsx(\"div\", { className: \"overflow-x-auto\", children: _jsx(ChoroplethGridChart, { points: points, metric: metric, labels: { label: label ?? 'Regional breakdown' }, layout: layout, columns: columns, levels: levels, format: format, ...(legendLabels === undefined ? {} : { legendLabels }) }) }), ranked.length > 0 && (_jsx(\"ol\", { \"data-part\": \"region-ranking\", className: \"min-w-40 flex-1 space-y-1.5\", children: ranked.map((row, index) => (_jsxs(\"li\", { className: \"flex items-center justify-between gap-3 text-body-sm\", children: [_jsxs(\"span\", { className: \"truncate text-fg-muted\", children: [_jsxs(\"span\", { className: \"text-fg-subtle tabular-nums\", children: [index + 1, \".\"] }), \" \", row.name] }), _jsx(\"span\", { className: \"font-medium tabular-nums text-fg\", children: format(row.value) })] }, `${row.name}-${index}`))) }))] }));\n}\nexport function MapChoroplethGridWidget({ config, data }) {\n const points = geoPointsOf(data, {\n nameField: config.nameField,\n codeField: config.codeField,\n // A region-coded payload has no coordinates by definition (annex §7), but\n // naming the canonical columns keeps a lat/lng-carrying table from having\n // them silently inferred as metrics and tinting tiles by latitude.\n latField: 'lat',\n lngField: 'lng',\n metricFields: config.metric === undefined ? [] : [config.metric],\n });\n const opts = formatOptionsOf(config);\n const metric = config.metric ?? metricKeysOf(points)[0] ?? 'value';\n const format = (value) => formatMetricValue(value, config.valueFormat, opts);\n return (_jsx(MapChoroplethGrid, { points: points, metric: metric, layout: config.layout, columns: config.columns, levels: config.levels, topN: config.topN, format: format, ...(config.title === undefined ? {} : { label: config.title }), ...(config.legendLowLabel === undefined && config.legendHighLabel === undefined\n ? {}\n : { legendLabels: { low: config.legendLowLabel ?? 'Low', high: config.legendHighLabel ?? 'High' } }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.testId === undefined ? {} : { testId: config.testId }) }));\n}\n//# sourceMappingURL=MapChoroplethGrid.js.map"],"file":"geo-track-components-Ct4-MSRw.js"}