@objectstack/console 5.0.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/LICENSE.apache +202 -0
  2. package/README.md +33 -50
  3. package/dist/assets/AiPendingActionsPage-DLWrcsds.js +1 -0
  4. package/dist/assets/ApiConsolePage-BIBykAYj.js +1 -0
  5. package/dist/assets/AppManagementPage-BKE0rv8B.js +1 -0
  6. package/dist/assets/ApprovalsInboxPage-D7gF2CM8.js +1 -0
  7. package/dist/assets/AuditLogPage-Bqlhi2ko.js +1 -0
  8. package/dist/assets/ComponentNavView-DBMxrUvH.js +1 -0
  9. package/dist/assets/ConsoleFloatingChatbot-CBIXkoNS.js +1 -0
  10. package/dist/assets/DeveloperHubPage-C3Ooh2Gg.js +1 -0
  11. package/dist/assets/FlowRunsPage-NjEPPv_e.js +1 -0
  12. package/dist/assets/MonacoImpl-CKoKq1tG.js +11 -0
  13. package/dist/assets/ObjectManagerListPage-DEPokJwV.js +1 -0
  14. package/dist/assets/ProfilePage-zYSeu2-d.js +1 -0
  15. package/dist/assets/PublicFormsPage-BrLPiHf1.js +1 -0
  16. package/dist/assets/SettingsHub-BTNCNbjZ.js +1 -0
  17. package/dist/assets/SettingsView-BLXf7B7b.js +1 -0
  18. package/dist/assets/SystemHubPage-CgN-8VKO.js +1 -0
  19. package/dist/assets/abap-CLvhMVsD.js +1 -0
  20. package/dist/assets/actionscript-3--17pq3dv.js +1 -0
  21. package/dist/assets/ada-C5qYipkI.js +1 -0
  22. package/dist/assets/andromeeda-vGVdxbeo.js +1 -0
  23. package/dist/assets/angular-html-B9s24XBK.js +1 -0
  24. package/dist/assets/angular-ts-C7DCn4N7.js +1 -0
  25. package/dist/assets/apache-U0d_L8uA.js +1 -0
  26. package/dist/assets/apex-VAyPSnFM.js +1 -0
  27. package/dist/assets/apl-BFSpAsVe.js +1 -0
  28. package/dist/assets/applescript-CCn79oCD.js +1 -0
  29. package/dist/assets/ara-4CJ0cIlV.js +1 -0
  30. package/dist/assets/asciidoc-DE70LPWp.js +1 -0
  31. package/dist/assets/asm-Cmm7eHzH.js +1 -0
  32. package/dist/assets/astro-By5nmri_.js +1 -0
  33. package/dist/assets/aurora-x-CDeNXAV0.js +1 -0
  34. package/dist/assets/awk-BWXHIvNe.js +1 -0
  35. package/dist/assets/ayu-dark-DluEY0Gj.js +1 -0
  36. package/dist/assets/ayu-light-C3h-C4tm.js +1 -0
  37. package/dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  38. package/dist/assets/ballerina-B7ZEbQpA.js +1 -0
  39. package/dist/assets/bat-Bo4NYOV-.js +1 -0
  40. package/dist/assets/beancount-D-usSTwE.js +1 -0
  41. package/dist/assets/berry-DKpUyyne.js +1 -0
  42. package/dist/assets/bibtex-Ci_nEsc7.js +1 -0
  43. package/dist/assets/bicep-CUHmPFLl.js +1 -0
  44. package/dist/assets/bird2-C6vDhewU.js +1 -0
  45. package/dist/assets/blade-BEsyb4Es.js +1 -0
  46. package/dist/assets/bsl-BkkzgIyY.js +1 -0
  47. package/dist/assets/c-CwKsiqWD.js +1 -0
  48. package/dist/assets/c3-BFHwR3_K.js +1 -0
  49. package/dist/assets/cadence-CQ2zXKGN.js +1 -0
  50. package/dist/assets/cairo-DLTphjLi.js +1 -0
  51. package/dist/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
  52. package/dist/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
  53. package/dist/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
  54. package/dist/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
  55. package/dist/assets/clarity-SemFz856.js +1 -0
  56. package/dist/assets/clojure-DqKBuwfJ.js +1 -0
  57. package/dist/assets/cmake-Bj61d0ZC.js +1 -0
  58. package/dist/assets/cobol-AtgRrYrD.js +1 -0
  59. package/dist/assets/codeowners-C8r90Shi.js +1 -0
  60. package/dist/assets/codeql-oeQT6MSM.js +1 -0
  61. package/dist/assets/coffee-Dx9BrBX9.js +1 -0
  62. package/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
  63. package/dist/assets/coq-BrsZFFmf.js +1 -0
  64. package/dist/assets/cpp-DNQ-Fj9i.js +1 -0
  65. package/dist/assets/crystal-BFAqiLnY.js +1 -0
  66. package/dist/assets/csharp-oqKa8noW.js +1 -0
  67. package/dist/assets/css-76WQuunA.js +1 -0
  68. package/dist/assets/csv-Dx-8-gkx.js +1 -0
  69. package/dist/assets/cue-CE9AQfxI.js +1 -0
  70. package/dist/assets/cypher-ClKdZ_lG.js +1 -0
  71. package/dist/assets/d-qD-0Kul2.js +1 -0
  72. package/dist/assets/dark-plus-Cs2F2srj.js +1 -0
  73. package/dist/assets/dart-CnvKMtbv.js +1 -0
  74. package/dist/assets/data-adapter-Dn6-L_yI.js +1 -0
  75. package/dist/assets/dax-BkyTk9wS.js +1 -0
  76. package/dist/assets/desktop-Dlh5hvp9.js +1 -0
  77. package/dist/assets/diff-woXpYk--.js +1 -0
  78. package/dist/assets/docker-IyjqRm3v.js +1 -0
  79. package/dist/assets/dotenv-_5a1GRtc.js +1 -0
  80. package/dist/assets/dracula-BHWKrbxM.js +1 -0
  81. package/dist/assets/dracula-soft-5eyTD99u.js +1 -0
  82. package/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
  83. package/dist/assets/edge-BEfBxc5h.js +1 -0
  84. package/dist/assets/elixir-Bi1LyDCo.js +1 -0
  85. package/dist/assets/elm-BMPZeG5i.js +1 -0
  86. package/dist/assets/emacs-lisp-B4R74twV.js +1 -0
  87. package/dist/assets/erb-Pmcx6TTx.js +1 -0
  88. package/dist/assets/erlang-Cphh6RMH.js +1 -0
  89. package/dist/assets/everforest-dark-sB-x3p7T.js +1 -0
  90. package/dist/assets/everforest-light-Df2xbC6M.js +1 -0
  91. package/dist/assets/fennel-DQxkIbk2.js +1 -0
  92. package/dist/assets/fish-BJitypiv.js +1 -0
  93. package/dist/assets/fluent-C03EYrpw.js +1 -0
  94. package/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  95. package/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
  96. package/dist/assets/framework-ClI3DbWX.js +34 -0
  97. package/dist/assets/fsharp-D13ZGOAj.js +1 -0
  98. package/dist/assets/gdresource-C0sCabJj.js +1 -0
  99. package/dist/assets/gdscript-Cp2uCuqX.js +1 -0
  100. package/dist/assets/gdshader-CBce3t8t.js +1 -0
  101. package/dist/assets/genie-CV2tkWYe.js +1 -0
  102. package/dist/assets/gherkin-DExj1W_8.js +1 -0
  103. package/dist/assets/git-commit-BSykSTBG.js +1 -0
  104. package/dist/assets/git-rebase-Dj7t0bix.js +1 -0
  105. package/dist/assets/github-dark-C-LZuMrd.js +1 -0
  106. package/dist/assets/github-dark-default-DXG-b-1a.js +1 -0
  107. package/dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  108. package/dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  109. package/dist/assets/github-light-EUqPIrTm.js +1 -0
  110. package/dist/assets/github-light-default-BXViO-2h.js +1 -0
  111. package/dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  112. package/dist/assets/gleam-CSRkHgEL.js +1 -0
  113. package/dist/assets/glimmer-js-DTpMHWUo.js +1 -0
  114. package/dist/assets/glimmer-ts-BKOVQU61.js +1 -0
  115. package/dist/assets/glsl-DDNdYp2B.js +1 -0
  116. package/dist/assets/gn-ilITqXS6.js +1 -0
  117. package/dist/assets/gnuplot-7GGW24-e.js +1 -0
  118. package/dist/assets/go-rLFTqkRN.js +1 -0
  119. package/dist/assets/graphql-C-akFyqE.js +1 -0
  120. package/dist/assets/groovy-CacY0gHj.js +1 -0
  121. package/dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  122. package/dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  123. package/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  124. package/dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  125. package/dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  126. package/dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  127. package/dist/assets/hack-Z382E4IB.js +1 -0
  128. package/dist/assets/haml-DCWQJgln.js +1 -0
  129. package/dist/assets/handlebars-D_RRtkV5.js +1 -0
  130. package/dist/assets/haskell-D8IpX4py.js +1 -0
  131. package/dist/assets/haxe-OTjmBuCE.js +1 -0
  132. package/dist/assets/hcl-Dh228itO.js +1 -0
  133. package/dist/assets/highlighted-body-OFNGDK62-Dua_6VJ2.js +1 -0
  134. package/dist/assets/hjson-CxZEssPk.js +1 -0
  135. package/dist/assets/hlsl-Cvrh5tZx.js +1 -0
  136. package/dist/assets/horizon-CE9ld1lL.js +1 -0
  137. package/dist/assets/horizon-bright-DSNQnXHK.js +1 -0
  138. package/dist/assets/houston-CsvMBhTu.js +1 -0
  139. package/dist/assets/html-BqDo3pKb.js +1 -0
  140. package/dist/assets/html-derivative-DncxUXSH.js +1 -0
  141. package/dist/assets/http-CrTHj6_t.js +1 -0
  142. package/dist/assets/hurl-BdeVL_ga.js +1 -0
  143. package/dist/assets/hxml-B0Qn7Nwc.js +1 -0
  144. package/dist/assets/hy-CZbG8q4J.js +1 -0
  145. package/dist/assets/imba-DsUTQ-LC.js +1 -0
  146. package/dist/assets/index-Ca4KaljM.js +23 -0
  147. package/dist/assets/index-DsQwZDFr.css +2 -0
  148. package/dist/assets/infrastructure-ezj3FgNE.js +3 -0
  149. package/dist/assets/ini-B5eOa1yu.js +1 -0
  150. package/dist/assets/java-DKFHmTAg.js +1 -0
  151. package/dist/assets/javascript-Jx16aUBb.js +1 -0
  152. package/dist/assets/jinja-CQEVrK23.js +1 -0
  153. package/dist/assets/jison-BJRgvE0A.js +1 -0
  154. package/dist/assets/json-DlFP2GYa.js +1 -0
  155. package/dist/assets/json5-BR5RXkoi.js +1 -0
  156. package/dist/assets/jsonc-CYpm1nAK.js +1 -0
  157. package/dist/assets/jsonl-CmCQp5Yx.js +1 -0
  158. package/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
  159. package/dist/assets/jssm-DXw9l8Rf.js +1 -0
  160. package/dist/assets/jsx-CIwpwN-u.js +1 -0
  161. package/dist/assets/julia-D4zLZb0D.js +1 -0
  162. package/dist/assets/just-BbmgE3ZP.js +1 -0
  163. package/dist/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
  164. package/dist/assets/kanagawa-lotus-BN08jTvb.js +1 -0
  165. package/dist/assets/kanagawa-wave-CTweb8Dz.js +1 -0
  166. package/dist/assets/kdl-CsD5j6eV.js +1 -0
  167. package/dist/assets/kotlin-DhhofPvG.js +1 -0
  168. package/dist/assets/kusto-C7mF5XQf.js +1 -0
  169. package/dist/assets/laserwave-C_8bwKvT.js +1 -0
  170. package/dist/assets/latex-BUDs7Dcl.js +1 -0
  171. package/dist/assets/lean-CewbzKMR.js +1 -0
  172. package/dist/assets/less-DVTAwKKz.js +1 -0
  173. package/dist/assets/light-plus-DVQuIRkW.js +1 -0
  174. package/dist/assets/liquid-Bc0s0G9S.js +1 -0
  175. package/dist/assets/llvm-Cm23YOpf.js +1 -0
  176. package/dist/assets/log-BNLmms1o.js +1 -0
  177. package/dist/assets/logo-Cluzi2Zq.js +1 -0
  178. package/dist/assets/lua-dQaszIi_.js +1 -0
  179. package/dist/assets/luau-FMPmPwt6.js +1 -0
  180. package/dist/assets/make-Dixweg8N.js +1 -0
  181. package/dist/assets/{maplibre-gl-fFz1l9Ly.js → maplibre-gl-CoREonuK.js} +1 -1
  182. package/dist/assets/markdown-BYOwaDjH.js +1 -0
  183. package/dist/assets/marko-B5Uea28G.js +1 -0
  184. package/dist/assets/material-theme-Bm3Qr25_.js +1 -0
  185. package/dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
  186. package/dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
  187. package/dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  188. package/dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  189. package/dist/assets/matlab-D7qyCx1q.js +1 -0
  190. package/dist/assets/mdc-CwQcy7BI.js +1 -0
  191. package/dist/assets/mdx-DQZ5AkYe.js +1 -0
  192. package/dist/assets/mermaid-Bk4SNUv9.js +1 -0
  193. package/dist/assets/mermaid-GHXKKRXX-BvEKnLTo.js +1 -0
  194. package/dist/assets/min-dark-BSWPekZh.js +1 -0
  195. package/dist/assets/min-light-DDpmG2fV.js +1 -0
  196. package/dist/assets/mipsasm-BMqwQI7S.js +1 -0
  197. package/dist/assets/mojo-BgCJLMeH.js +1 -0
  198. package/dist/assets/monokai-CdkpiU2Y.js +1 -0
  199. package/dist/assets/moonbit-CaWjb8XO.js +1 -0
  200. package/dist/assets/move-B1IS1UjX.js +1 -0
  201. package/dist/assets/narrat-_X_XdTYD.js +1 -0
  202. package/dist/assets/nextflow-BJtWHP5T.js +1 -0
  203. package/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
  204. package/dist/assets/nginx-SzmDaWuK.js +1 -0
  205. package/dist/assets/night-owl-DhmEMT88.js +1 -0
  206. package/dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
  207. package/dist/assets/nim-CO_A6I25.js +1 -0
  208. package/dist/assets/nix-IvuFDN5E.js +1 -0
  209. package/dist/assets/nord-Cb4Vim4T.js +1 -0
  210. package/dist/assets/nushell-DcLAeLz5.js +1 -0
  211. package/dist/assets/objective-c-D1A_Heim.js +1 -0
  212. package/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
  213. package/dist/assets/ocaml-O90oeIOV.js +1 -0
  214. package/dist/assets/odin-B1RWQWA5.js +1 -0
  215. package/dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
  216. package/dist/assets/one-light-D7Lr4KcI.js +1 -0
  217. package/dist/assets/openscad-BUDT5pXO.js +1 -0
  218. package/dist/assets/pascal-4ZHwLPI5.js +1 -0
  219. package/dist/assets/perl-DXgLsVg8.js +1 -0
  220. package/dist/assets/php-C4KCWpl8.js +1 -0
  221. package/dist/assets/pkl-ot-7Btpt.js +1 -0
  222. package/dist/assets/plastic-DQwYfKfQ.js +1 -0
  223. package/dist/assets/plsql-DGHpHOYJ.js +1 -0
  224. package/dist/assets/plugin-calendar-Dnr7itgk.js +1 -0
  225. package/dist/assets/plugin-charts-C11LxM1X.js +7 -0
  226. package/dist/assets/plugin-chatbot-COnH_NZC.js +120 -0
  227. package/dist/assets/plugin-dashboard-DvBectcr.js +3 -0
  228. package/dist/assets/plugin-form-f39dp3V2.js +1 -0
  229. package/dist/assets/plugin-gantt-7ui7uiVc.js +1 -0
  230. package/dist/assets/plugin-grid-DtceFt_J.js +6 -0
  231. package/dist/assets/plugin-kanban-q2UT5MlD.js +1 -0
  232. package/dist/assets/plugin-map-C6vgk2bJ.js +1 -0
  233. package/dist/assets/plugin-map-CsMXqW6n.css +1 -0
  234. package/dist/assets/plugin-markdown-DPzm2nVd.js +7 -0
  235. package/dist/assets/plugin-report-BJM4LH87.js +59 -0
  236. package/dist/assets/plugin-timeline-lCaTr_4i.js +1 -0
  237. package/dist/assets/plugin-view-b7gS6gIn.js +1 -0
  238. package/dist/assets/plugins-views-Dvl7pQvR.js +4 -0
  239. package/dist/assets/po-BiJDBrnU.js +1 -0
  240. package/dist/assets/poimandres-DRFjx7u4.js +1 -0
  241. package/dist/assets/polar-C7UOKdEL.js +1 -0
  242. package/dist/assets/postcss-BXeXVLqQ.js +1 -0
  243. package/dist/assets/powerquery-DNMTfnFr.js +1 -0
  244. package/dist/assets/powershell-DshXNtvi.js +1 -0
  245. package/dist/assets/prisma-BsRQq5mF.js +1 -0
  246. package/dist/assets/prolog-iXnhIJG7.js +1 -0
  247. package/dist/assets/proto-DB4EqR-F.js +1 -0
  248. package/dist/assets/pug-bpEG1CVZ.js +1 -0
  249. package/dist/assets/puppet-CDv2pdJW.js +1 -0
  250. package/dist/assets/purescript-9MfHhQsQ.js +1 -0
  251. package/dist/assets/python-gzcpVVnB.js +1 -0
  252. package/dist/assets/qml-DGJzHzg9.js +1 -0
  253. package/dist/assets/qmldir-DCQb3MpD.js +1 -0
  254. package/dist/assets/qss-Fe1Jh2GI.js +1 -0
  255. package/dist/assets/r-CZt9UGEb.js +1 -0
  256. package/dist/assets/racket-DcIDlBhZ.js +1 -0
  257. package/dist/assets/raku-B3gFvitq.js +1 -0
  258. package/dist/assets/razor-mTLK-dma.js +1 -0
  259. package/dist/assets/red-CJ3rzSJv.js +1 -0
  260. package/dist/assets/reg-CRGYupPL.js +1 -0
  261. package/dist/assets/regexp-DX5QhPdx.js +1 -0
  262. package/dist/assets/rel-BtDbiS_P.js +1 -0
  263. package/dist/assets/riscv-Ckw8ddFX.js +1 -0
  264. package/dist/assets/rolldown-runtime-CMxvf4Kt.js +1 -0
  265. package/dist/assets/ron-VUp2lXgN.js +1 -0
  266. package/dist/assets/rose-pine-BthvhNj6.js +1 -0
  267. package/dist/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
  268. package/dist/assets/rose-pine-moon-hon4tzzS.js +1 -0
  269. package/dist/assets/rosmsg-CAekHB0j.js +1 -0
  270. package/dist/assets/rst-t-F-oATV.js +1 -0
  271. package/dist/assets/ruby-D9DDGNv3.js +1 -0
  272. package/dist/assets/rust-Cfkwpbl8.js +1 -0
  273. package/dist/assets/sas-BAEs8TsV.js +1 -0
  274. package/dist/assets/sass-DXrisJhu.js +1 -0
  275. package/dist/assets/scala-DKOlJaKm.js +1 -0
  276. package/dist/assets/scheme-DQCgrYNe.js +1 -0
  277. package/dist/assets/scss-B6B5DSWC.js +1 -0
  278. package/dist/assets/sdbl-bTVj8UrX.js +1 -0
  279. package/dist/assets/shaderlab-TOUzSsQk.js +1 -0
  280. package/dist/assets/shellscript-DXt7nqYk.js +1 -0
  281. package/dist/assets/shellsession-DQ4guRhR.js +1 -0
  282. package/dist/assets/slack-dark-DnToyrRv.js +1 -0
  283. package/dist/assets/slack-ochin-B2OO5cIa.js +1 -0
  284. package/dist/assets/smalltalk-B16xEiuN.js +1 -0
  285. package/dist/assets/snazzy-light-4G7pJPwS.js +1 -0
  286. package/dist/assets/solarized-dark-DV17i1UV.js +1 -0
  287. package/dist/assets/solarized-light-DSh2HLQt.js +1 -0
  288. package/dist/assets/solidity-CKzVLygQ.js +1 -0
  289. package/dist/assets/soy-DtwGS8Y2.js +1 -0
  290. package/dist/assets/sparql-D_iOobhT.js +1 -0
  291. package/dist/assets/splunk-BC2Px7Mm.js +1 -0
  292. package/dist/assets/sql-ArzG0FT1.js +1 -0
  293. package/dist/assets/src-Con14F4e.js +2 -0
  294. package/dist/assets/ssh-config-BgfXC-Er.js +1 -0
  295. package/dist/assets/stata-CdQ318yb.js +1 -0
  296. package/dist/assets/stylus-B6D30XZt.js +1 -0
  297. package/dist/assets/surrealql-RyXJ8VfM.js +1 -0
  298. package/dist/assets/svelte-CXkGIk7i.js +1 -0
  299. package/dist/assets/swift-DonLKvLd.js +1 -0
  300. package/dist/assets/synthwave-84-nFMaYfgc.js +1 -0
  301. package/dist/assets/system-verilog-DJ5XKQeo.js +1 -0
  302. package/dist/assets/systemd-BxMlprV5.js +1 -0
  303. package/dist/assets/talonscript-CohzipZa.js +1 -0
  304. package/dist/assets/tasl-DMoTqEGO.js +1 -0
  305. package/dist/assets/tcl-CZd0xW_V.js +1 -0
  306. package/dist/assets/templ-CJz86NIj.js +1 -0
  307. package/dist/assets/terraform-DswuEJGm.js +1 -0
  308. package/dist/assets/tex-C71esTKh.js +1 -0
  309. package/dist/assets/tokyo-night-oM2G3aXe.js +1 -0
  310. package/dist/assets/toml-CcmNWLt0.js +1 -0
  311. package/dist/assets/ts-tags-Qszjvpax.js +1 -0
  312. package/dist/assets/tsv-sltzmVWM.js +1 -0
  313. package/dist/assets/tsx-BEhriTf8.js +1 -0
  314. package/dist/assets/turtle-ByJddavk.js +1 -0
  315. package/dist/assets/twig-CbaWuFm3.js +1 -0
  316. package/dist/assets/types-CuyLcCWX.js +1 -0
  317. package/dist/assets/typescript-CBu4i5lG.js +1 -0
  318. package/dist/assets/typespec-BRdr0IET.js +1 -0
  319. package/dist/assets/typst-DI99ib-x.js +1 -0
  320. package/dist/assets/ui-components-BL3SEdAz.css +1 -0
  321. package/dist/assets/ui-components-ZN8XdmwJ.js +41 -0
  322. package/dist/assets/ui-layout-HiDSueut.js +1 -0
  323. package/dist/assets/v-DETTlOr0.js +1 -0
  324. package/dist/assets/vala-zf12oZj6.js +1 -0
  325. package/dist/assets/vb-Djn5o6TS.js +1 -0
  326. package/dist/assets/vendor-charts-vh1WJI0j.js +36 -0
  327. package/dist/assets/vendor-dndkit-0jp7h5ty.js +5 -0
  328. package/dist/assets/vendor-i18n-CnFu8bdi.js +1 -0
  329. package/dist/assets/vendor-icons-core-D5MicM14.js +1 -0
  330. package/dist/assets/vendor-markdown-CvMSBmgq.js +38 -0
  331. package/dist/assets/vendor-objectstack-CwZ3saTl.js +65 -0
  332. package/dist/assets/vendor-radix-BNWIlSsV.js +56 -0
  333. package/dist/assets/vendor-react-CIpZOxG3.js +13 -0
  334. package/dist/assets/vendor-sentry-D5yZpZ5X.js +484 -0
  335. package/dist/assets/vendor-ui-utils-D3GsyZyi.js +1 -0
  336. package/dist/assets/vendor-zod-BzP-Jkm3.js +1 -0
  337. package/dist/assets/verilog-CiiDBU1e.js +1 -0
  338. package/dist/assets/vesper-DdrHHSXu.js +1 -0
  339. package/dist/assets/vhdl-BroJfC0k.js +1 -0
  340. package/dist/assets/viml-DvXPmvsu.js +1 -0
  341. package/dist/assets/vitesse-black-fwtXNY1n.js +1 -0
  342. package/dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
  343. package/dist/assets/vitesse-light-VbXTXTou.js +1 -0
  344. package/dist/assets/vue-Bruwzb-A.js +1 -0
  345. package/dist/assets/vue-html-C-3Ma2tD.js +1 -0
  346. package/dist/assets/vue-vine-DQAt9DTg.js +1 -0
  347. package/dist/assets/vyper-CgoNMtux.js +1 -0
  348. package/dist/assets/wasm-BnjxR4X6.js +1 -0
  349. package/dist/assets/wasm-ByWQv1Qj.js +1 -0
  350. package/dist/assets/wenyan-C8pVoKbM.js +1 -0
  351. package/dist/assets/wgsl-BsKzXJz4.js +1 -0
  352. package/dist/assets/wikitext-ClFFjSW2.js +1 -0
  353. package/dist/assets/wit-DdvCle-K.js +1 -0
  354. package/dist/assets/wolfram-DLL8P-h_.js +1 -0
  355. package/dist/assets/xml-BS2GSQw_.js +1 -0
  356. package/dist/assets/xsl-CCmfIdf4.js +1 -0
  357. package/dist/assets/yaml-C1LY7x4K.js +1 -0
  358. package/dist/assets/zenscript-BnlCZFoB.js +1 -0
  359. package/dist/assets/zig-CMLA9XwU.js +1 -0
  360. package/dist/index.html +24 -5
  361. package/dist/manifest.json +19 -0
  362. package/dist/vite.svg +25 -0
  363. package/package.json +18 -59
  364. package/dist/assets/app-shell-CaJU0zqc.js +0 -263
  365. package/dist/assets/dist-DxiImE7o.js +0 -1
  366. package/dist/assets/framework-CT7trS8g.js +0 -1
  367. package/dist/assets/index-DRq36Jb9.js +0 -1
  368. package/dist/assets/index-sNORrJSP.css +0 -1
  369. package/dist/assets/plugin-calendar-N01daPoe.js +0 -1
  370. package/dist/assets/plugin-charts-BxPL3e--.js +0 -9
  371. package/dist/assets/plugin-kanban-Cy0iBS_w.js +0 -0
  372. package/dist/assets/plugins-views-CIpa21Ck.js +0 -58
  373. package/dist/assets/rolldown-runtime-aKtaBQYM.js +0 -1
  374. package/dist/assets/vendor-react-BnXfQgq5.js +0 -9
  375. /package/dist/assets/{app-shell-DnNKJB60.css → plugin-dashboard-DnNKJB60.css} +0 -0
@@ -1 +0,0 @@
1
- import{$s as e,Js as t,Ks as n,Qs as r,Xs as i,Ys as a,Zs as o,ac as s,cc as c,ec as l,ic as u,lc as d,nc as f,oc as p,qs as ee,rc as m,sc as h,tc as g}from"./app-shell-CaJU0zqc.js";function _(e,t){return t?e[t]:e.id??e._id}function v(e,t){if(!t||t.length===0)return!0;let n=t[0];if(n===`and`)return t.slice(1).every(t=>v(e,t));if(n===`or`)return t.slice(1).some(t=>v(e,t));if(t.length===3&&typeof n==`string`){let[n,r,i]=t,a=e[n];switch(r){case`=`:return a===i;case`!=`:return a!==i;case`>`:return a>i;case`>=`:return a>=i;case`<`:return a<i;case`<=`:return a<=i;case`in`:return Array.isArray(i)&&i.includes(a);case`not in`:case`not_in`:case`nin`:case`notin`:return Array.isArray(i)&&!i.includes(a);case`contains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.includes(String(i).toLowerCase())}case`notcontains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&!e.includes(String(i).toLowerCase())}case`startswith`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.startsWith(String(i).toLowerCase())}case`between`:return Array.isArray(i)&&i.length===2&&a>=i[0]&&a<=i[1];default:return!0}}return!0}function te(e,t){for(let[n,r]of Object.entries(t)){let t=e[n];if(r&&typeof r==`object`&&!Array.isArray(r))for(let[e,n]of Object.entries(r))switch(e){case`$gt`:if(!(t>n))return!1;break;case`$gte`:if(!(t>=n))return!1;break;case`$lt`:if(!(t<n))return!1;break;case`$lte`:if(!(t<=n))return!1;break;case`$ne`:if(t===n)return!1;break;case`$in`:if(!Array.isArray(n)||!n.includes(t))return!1;break;case`$contains`:if(typeof t!=`string`||!t.toLowerCase().includes(String(n).toLowerCase()))return!1;break;default:break}else if(t!==r)return!1}return!0}function ne(e,t){if(!t)return e;let n=[];return Array.isArray(t)?n=t.map(e=>typeof e==`string`?e.startsWith(`-`)?{field:e.slice(1),order:`desc`}:{field:e,order:`asc`}:{field:e.field,order:e.order??`asc`}):typeof t==`object`&&(n=Object.entries(t).map(([e,t])=>({field:e,order:t}))),n.length===0?e:[...e].sort((e,t)=>{for(let{field:r,order:i}of n){let n=e[r],a=t[r];if(n===a)continue;if(n==null)return i===`asc`?-1:1;if(a==null)return i===`asc`?1:-1;let o=n<a?-1:1;return i===`asc`?o:-o}return 0})}function y(e,t){if(!t||t.length===0)return e;let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}var re=class{constructor(e){Object.defineProperty(this,"items",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"idField",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"mutationListeners",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),this.items=JSON.parse(JSON.stringify(e.items)),this.idField=e.idField}emitMutation(e){for(let t of this.mutationListeners)try{t(e)}catch(e){console.warn(`ValueDataSource: mutation listener error`,e)}}async find(e,t){let n=[...this.items];if(t?.$filter&&(Array.isArray(t.$filter)&&t.$filter.length>0?n=n.filter(e=>v(e,t.$filter)):!Array.isArray(t.$filter)&&Object.keys(t.$filter).length>0&&(n=n.filter(e=>te(e,t.$filter)))),t?.$search){let e=t.$search.toLowerCase();n=n.filter(t=>Object.values(t).some(t=>typeof t==`string`&&t.toLowerCase().includes(e)))}let r=n.length;n=ne(n,t?.$orderby);let i=t?.$skip??0,a=t?.$top;return i>0&&(n=n.slice(i)),a!==void 0&&(n=n.slice(0,a)),t?.$select?.length&&(n=n.map(e=>y(e,t.$select))),{data:n,total:r,hasMore:i+(a??n.length)<r}}async findOne(e,t,n){let r=this.items.find(e=>String(_(e,this.idField))===String(t));return r?n?.$select?.length?y(r,n.$select):{...r}:null}async create(e,t){let n={...t};if(!_(n,this.idField)){let e=this.idField??`id`;n[e]=`auto_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}return this.items.push(n),this.emitMutation({type:`create`,resource:e,record:{...n}}),{...n}}async update(e,t,n){let r=this.items.findIndex(e=>String(_(e,this.idField))===String(t));if(r===-1)throw Error(`ValueDataSource: Record with id "${t}" not found`);return this.items[r]={...this.items[r],...n},this.emitMutation({type:`update`,resource:e,id:t,record:{...this.items[r]}}),{...this.items[r]}}async delete(e,t){let n=this.items.findIndex(e=>String(_(e,this.idField))===String(t));return n===-1?!1:(this.items.splice(n,1),this.emitMutation({type:`delete`,resource:e,id:t}),!0)}async bulk(e,t,n){let r=[];for(let i of n)switch(t){case`create`:r.push(await this.create(e,i));break;case`update`:{let t=_(i,this.idField);t!==void 0&&r.push(await this.update(e,t,i));break}case`delete`:{let t=_(i,this.idField);t!==void 0&&await this.delete(e,t);break}}return r}async getObjectSchema(e){if(this.items.length===0)return{name:e,fields:{}};let t=this.items[0],n={};for(let[e,r]of Object.entries(t))n[e]={type:typeof r};return{name:e,fields:n}}async getView(e,t){return null}async getApp(e){return null}async aggregate(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let e of this.items){let t=String(e[i]??`Unknown`);a[t]||(a[t]=[]),a[t].push(e)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0);break}return{[i]:e,[n]:o}})}onMutation(e){return this.mutationListeners.add(e),()=>{this.mutationListeners.delete(e)}}get count(){return this.items.length}getAll(){return JSON.parse(JSON.stringify(this.items))}},b={invalid_type:`invalid_type`,too_big:`too_big`,too_small:`too_small`,invalid_format:`invalid_format`,not_multiple_of:`not_multiple_of`,unrecognized_keys:`unrecognized_keys`,invalid_union:`invalid_union`,invalid_key:`invalid_key`,invalid_element:`invalid_element`,invalid_value:`invalid_value`,custom:`custom`},ie;(function(e){})(ie||={});function x(e){if(typeof process<`u`&&{}.OS_EAGER_SCHEMAS===`1`)return e();let t,n=()=>(t===void 0&&(t=e()),t);return new Proxy(function(){},{get(e,t){let r=n(),i=r[t];return typeof i==`function`?i.bind(r):i},set(e,t,r){let i=n();return i[t]=r,!0},has(e,t){return t in n()},ownKeys(){return Reflect.ownKeys(n())},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(n(),t)},getPrototypeOf(){return Reflect.getPrototypeOf(n())}})}x(()=>u({key:p().describe(`Translation key (e.g., "views.task_list.label")`),defaultValue:p().optional().describe(`Fallback value when translation key is not found`),params:s(p(),c([p(),m(),r()])).optional().describe(`Interpolation parameters (e.g., { count: 5 })`)}));var S=x(()=>p().describe(`Display label (plain string; i18n keys are auto-generated by the framework)`)),C=x(()=>u({ariaLabel:S.optional().describe(`Accessible label for screen readers (WAI-ARIA aria-label)`),ariaDescribedBy:p().optional().describe(`ID of element providing additional description (WAI-ARIA aria-describedby)`),role:p().optional().describe(`WAI-ARIA role attribute (e.g., "dialog", "navigation", "alert")`)}).describe(`ARIA accessibility attributes`));x(()=>u({key:p().describe(`Translation key`),zero:p().optional().describe(`Zero form (e.g., "No items")`),one:p().optional().describe(`Singular form (e.g., "{count} item")`),two:p().optional().describe(`Dual form (e.g., "{count} items" for exactly 2)`),few:p().optional().describe(`Few form (e.g., for 2-4 in some languages)`),many:p().optional().describe(`Many form (e.g., for 5+ in some languages)`),other:p().describe(`Default plural form (e.g., "{count} items")`)}).describe(`ICU plural rules for a translation key`));var ae=x(()=>u({style:n([`decimal`,`currency`,`percent`,`unit`]).default(`decimal`).describe(`Number formatting style`),currency:p().optional().describe(`ISO 4217 currency code (e.g., "USD", "EUR")`),unit:p().optional().describe(`Unit for unit formatting (e.g., "kilometer", "liter")`),minimumFractionDigits:m().optional().describe(`Minimum number of fraction digits`),maximumFractionDigits:m().optional().describe(`Maximum number of fraction digits`),useGrouping:r().optional().describe(`Whether to use grouping separators (e.g., 1,000)`)}).describe(`Number formatting rules`)),oe=x(()=>u({dateStyle:n([`full`,`long`,`medium`,`short`]).optional().describe(`Date display style`),timeStyle:n([`full`,`long`,`medium`,`short`]).optional().describe(`Time display style`),timeZone:p().optional().describe(`IANA time zone (e.g., "America/New_York")`),hour12:r().optional().describe(`Use 12-hour format`)}).describe(`Date/time formatting rules`));x(()=>u({code:p().describe(`BCP 47 language code (e.g., "en-US", "zh-CN")`),fallbackChain:o(p()).optional().describe(`Fallback language codes in priority order (e.g., ["zh-TW", "en"])`),direction:n([`ltr`,`rtl`]).default(`ltr`).describe(`Text direction: left-to-right or right-to-left`),numberFormat:ae.optional().describe(`Default number formatting rules`),dateFormat:oe.optional().describe(`Default date/time formatting rules`)}).describe(`Locale configuration`));var w=x(()=>n(`bar.horizontal-bar.column.grouped-bar.stacked-bar.bi-polar-bar.line.area.stacked-area.step-line.spline.pie.donut.funnel.pyramid.scatter.bubble.treemap.sunburst.sankey.word-cloud.gauge.solid-gauge.metric.kpi.bullet.choropleth.bubble-map.gl-map.heatmap.radar.waterfall.box-plot.violin.candlestick.stock.table.pivot`.split(`.`))),T=x(()=>u({field:p().describe(`Data field key`),title:S.optional().describe(`Axis display title`),format:p().optional().describe(`Value format string (e.g., "$0,0.00")`),min:m().optional().describe(`Minimum value`),max:m().optional().describe(`Maximum value`),stepSize:m().optional().describe(`Step size for ticks`),showGridLines:r().default(!0),position:n([`left`,`right`,`top`,`bottom`]).optional().describe(`Axis position`),logarithmic:r().default(!1)})),se=x(()=>u({name:p().describe(`Field name or series identifier`),label:S.optional().describe(`Series display label`),type:w.optional().describe(`Override chart type for this series`),color:p().optional().describe(`Series color (hex/rgb/token)`),stack:p().optional().describe(`Stack identifier to group series`),yAxis:n([`left`,`right`]).default(`left`).describe(`Bind to specific Y-Axis`)})),ce=x(()=>u({type:n([`line`,`region`]).default(`line`),axis:n([`x`,`y`]).default(`y`),value:c([m(),p()]).describe(`Start value`),endValue:c([m(),p()]).optional().describe(`End value for regions`),color:p().optional(),label:S.optional(),style:n([`solid`,`dashed`,`dotted`]).default(`dashed`)})),le=x(()=>u({tooltips:r().default(!0),zoom:r().default(!1),brush:r().default(!1),clickAction:p().optional().describe(`Action ID to trigger on click`)})),E=x(()=>u({type:w,title:S.optional().describe(`Chart title`),subtitle:S.optional().describe(`Chart subtitle`),description:S.optional().describe(`Accessibility description`),xAxis:T.optional().describe(`X-Axis configuration`),yAxis:o(T).optional().describe(`Y-Axis configuration (support dual axis)`),series:o(se).optional().describe(`Defined series configuration`),colors:o(p()).optional().describe(`Color palette`),height:m().optional().describe(`Fixed height in pixels`),showLegend:r().default(!0).describe(`Display legend`),showDataLabels:r().default(!1).describe(`Display data labels`),annotations:o(ce).optional(),interaction:le.optional(),aria:C.optional().describe(`ARIA accessibility attributes`)})),ue=n([`xs`,`sm`,`md`,`lg`,`xl`,`2xl`]),de=x(()=>u({xs:m().min(1).max(12).optional(),sm:m().min(1).max(12).optional(),md:m().min(1).max(12).optional(),lg:m().min(1).max(12).optional(),xl:m().min(1).max(12).optional(),"2xl":m().min(1).max(12).optional()}).describe(`Grid columns per breakpoint (1-12)`)),fe=x(()=>u({xs:m().optional(),sm:m().optional(),md:m().optional(),lg:m().optional(),xl:m().optional(),"2xl":m().optional()}).describe(`Display order per breakpoint`)),D=x(()=>u({breakpoint:ue.optional().describe(`Minimum breakpoint for visibility`),hiddenOn:o(ue).optional().describe(`Hide on these breakpoints`),columns:de.optional().describe(`Grid columns per breakpoint`),order:fe.optional().describe(`Display order per breakpoint`)}).describe(`Responsive layout configuration`)),O=x(()=>u({lazyLoad:r().optional().describe(`Enable lazy loading (defer rendering until visible)`),virtualScroll:u({enabled:r().default(!1).describe(`Enable virtual scrolling`),itemHeight:m().optional().describe(`Fixed item height in pixels (for estimation)`),overscan:m().optional().describe(`Number of extra items to render outside viewport`)}).optional().describe(`Virtual scrolling configuration`),cacheStrategy:n([`none`,`cache-first`,`network-first`,`stale-while-revalidate`]).optional().describe(`Client-side data caching strategy`),prefetch:r().optional().describe(`Prefetch data before component is visible`),pageSize:m().optional().describe(`Number of items per page for pagination`),debounceMs:m().optional().describe(`Debounce interval for user interactions in milliseconds`)}).describe(`Performance optimization configuration`)),pe=x(()=>p().min(2,{message:`System identifier must be at least 2 characters`}).regex(/^[a-z][a-z0-9_.]*$/,{message:`System identifier must be lowercase, starting with a letter, and may contain letters, numbers, underscores, or dots (e.g., "user_profile" or "order.created")`}).describe(`System identifier (lowercase with underscores or dots)`)),k=x(()=>p().min(2,{message:`Identifier must be at least 2 characters`}).regex(/^[a-z][a-z0-9_]*$/,{message:`Identifier must be lowercase snake_case, starting with a letter, and may contain only letters, numbers, and underscores (e.g., "user_profile")`}).describe(`Snake case identifier (lowercase with underscores only)`));x(()=>p().min(3,{message:`Event name must be at least 3 characters`}).regex(/^[a-z][a-z0-9_.]*$/,{message:`Event name must be lowercase with dots for namespacing (e.g., "user.created", "order.paid")`}).describe(`Event name (lowercase with dot notation for namespacing)`));var me=n([`cel`,`js`,`cron`,`template`]),he=u({rationale:p().optional(),generatedBy:p().optional()}),A=u({dialect:me,source:p().min(1).optional(),ast:d().optional(),meta:he.optional()}).refine(e=>e.source!==void 0||e.ast!==void 0,{message:"Expression requires at least one of `source` or `ast`"}),j=c([p().min(1).transform(e=>({dialect:`cel`,source:e})),A]);c([p().min(1).transform(e=>({dialect:`cron`,source:e})),A]),c([p().min(1).transform(e=>({dialect:`template`,source:e})),A]);var M=x(()=>u({enabled:r().default(!1).describe(`Enable public sharing`),publicLink:p().optional().describe(`Generated public share URL`),password:p().optional().describe(`Password required to access shared link`),allowedDomains:o(p()).optional().describe(`Restrict access to specific email domains (e.g. ["example.com"])`),expiresAt:p().optional().describe(`Expiration date/time in ISO 8601 format`),allowAnonymous:r().optional().default(!1).describe(`Allow access without authentication`)})),ge=x(()=>u({enabled:r().default(!1).describe(`Enable iframe embedding`),allowedOrigins:o(p()).optional().describe(`Allowed iframe parent origins (e.g. ["https://example.com"])`),width:p().optional().default(`100%`).describe(`Embed width (CSS value)`),height:p().optional().default(`600px`).describe(`Embed height (CSS value)`),showHeader:r().optional().default(!0).describe(`Show interface header in embed`),showNavigation:r().optional().default(!1).describe(`Show navigation in embed`),responsive:r().optional().default(!0).describe(`Enable responsive resizing`)})),N=u({id:k.describe(`Unique identifier for this navigation item (lowercase snake_case)`),label:S.describe(`Display proper label`),icon:p().optional().describe(`Icon name`),order:m().optional().describe(`Sort order within the same level (lower = first)`),badge:c([p(),m()]).optional().describe(`Badge text or count displayed on the item`),visible:j.optional().describe('Visibility predicate (CEL). e.g. P`os.user.role == "admin"`'),requiredPermissions:o(p()).optional().describe(`Permissions required to access this item`),requiresObject:p().optional().describe(`Hide/disable this entry unless the named object is registered in the runtime`),requiresService:p().optional().describe(`Hide/disable this entry unless the named kernel service is registered`)}),_e=x(()=>N.extend({type:f(`object`),objectName:p().describe(`Target object name`),viewName:p().optional().describe(`Default list view to open. Defaults to "all"`)})),ve=x(()=>N.extend({type:f(`dashboard`),dashboardName:p().describe(`Target dashboard name`)})),ye=x(()=>N.extend({type:f(`page`),pageName:p().describe(`Target custom page component name`),params:s(p(),d()).optional().describe(`Parameters passed to the page context`)})),be=x(()=>N.extend({type:f(`url`),url:p().describe(`Target external URL`),target:n([`_self`,`_blank`]).default(`_self`).describe(`Link target window`)})),xe=x(()=>N.extend({type:f(`report`),reportName:p().describe(`Target report name`)})),Se=x(()=>N.extend({type:f(`action`),actionDef:u({actionName:p().describe(`Action machine name to execute`),params:s(p(),d()).optional().describe(`Parameters passed to the action`)}).describe(`Action definition to execute when clicked`)})),Ce=x(()=>N.extend({type:f(`group`),expanded:r().default(!1).describe(`Default expansion state in sidebar`)})),P=g(()=>c([_e.extend({children:o(P).optional().describe(`Child navigation items (e.g. specific views)`)}),ve,ye,be,xe,Se,Ce.extend({children:o(P).describe(`Child navigation items`)})])),we=x(()=>u({primaryColor:p().optional().describe(`Primary theme color hex code`),logo:p().optional().describe(`Custom logo URL for this app`),favicon:p().optional().describe(`Custom favicon URL for this app`)})),Te=x(()=>u({id:k.describe(`Unique area identifier (lowercase snake_case)`),label:S.describe(`Area display label`),icon:p().optional().describe(`Area icon name`),order:m().optional().describe(`Sort order among areas (lower = first)`),description:S.optional().describe(`Area description`),visible:j.optional().describe(`Visibility predicate (CEL) for this area.`),requiredPermissions:o(p()).optional().describe(`Permissions required to access this area`),navigation:o(P).describe(`Navigation items within this area`)}));x(()=>u({name:k.describe(`App unique machine name (lowercase snake_case)`),label:S.describe(`App display label`),version:p().optional().describe(`App version`),description:S.optional().describe(`App description`),icon:p().optional().describe(`App icon used in the App Launcher`),branding:we.optional().describe(`App-specific branding`),active:r().optional().default(!0).describe(`Whether the app is enabled`),isDefault:r().optional().default(!1).describe(`Is default app`),navigation:o(P).optional().describe(`Full navigation tree for the app sidebar`),areas:o(Te).optional().describe(`Navigation areas for partitioning navigation by business domain`),homePageId:p().optional().describe(`ID of the navigation item to serve as landing page`),requiredPermissions:o(p()).optional().describe(`Permissions required to access this app`),objects:o(d()).optional().describe(`Objects belonging to this app`),apis:o(d()).optional().describe(`Custom APIs belonging to this app`),sharing:M.optional().describe(`Public sharing configuration`),embed:ge.optional().describe(`Iframe embedding configuration`),mobileNavigation:u({mode:n([`drawer`,`bottom_nav`,`hamburger`]).default(`drawer`).describe(`Mobile navigation mode: drawer sidebar, bottom navigation bar, or hamburger menu`),bottomNavItems:o(p()).optional().describe(`Navigation item IDs to show in bottom nav (max 5)`)}).optional().describe(`Mobile-specific navigation configuration`),defaultAgent:k.optional().describe(`Name of the default AI agent for this app (used by the ambient chat endpoint)`),aria:C.optional().describe(`ARIA accessibility attributes for the application`)}));var Ee=n([`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]),De=x(()=>n([`GET`,`POST`,`PUT`,`PATCH`,`DELETE`])),F=x(()=>u({url:p().describe(`API endpoint URL`),method:De.optional().default(`GET`).describe(`HTTP method`),headers:s(p(),p()).optional().describe(`Custom HTTP headers`),params:s(p(),d()).optional().describe(`Query parameters`),body:d().optional().describe(`Request body for POST/PUT/PATCH`)}));x(()=>u({enabled:r().default(!0).describe(`Enable CORS`),origins:c([p(),o(p())]).default(`*`).describe(`Allowed origins (* for all)`),methods:o(Ee).optional().describe(`Allowed HTTP methods`),credentials:r().default(!1).describe(`Allow credentials (cookies, authorization headers)`),maxAge:m().int().optional().describe(`Preflight cache duration in seconds`)})),x(()=>u({enabled:r().default(!1).describe(`Enable rate limiting`),windowMs:m().int().default(6e4).describe(`Time window in milliseconds`),maxRequests:m().int().default(100).describe(`Max requests per window`)})),x(()=>u({path:p().describe(`URL path to serve from`),directory:p().describe(`Physical directory to serve`),cacheControl:p().optional().describe(`Cache-Control header value`)}));var Oe=x(()=>l(`provider`,[u({provider:f(`object`),object:p().describe(`Target object name`)}),u({provider:f(`api`),read:F.optional().describe(`Configuration for fetching data`),write:F.optional().describe(`Configuration for submitting data (for forms/editable tables)`)}),u({provider:f(`value`),items:o(d()).describe(`Static data array`)})])),I=x(()=>u({field:p().describe(`Field name to filter on`),operator:p().describe(`Filter operator (e.g. equals, not_equals, contains, this_quarter)`),value:c([p(),m(),r(),t(),o(c([p(),m()]))]).optional().describe(`Filter value`)}).describe(`View filter rule`)),ke=x(()=>n([`none`,`count`,`count_empty`,`count_filled`,`count_unique`,`percent_empty`,`percent_filled`,`sum`,`avg`,`min`,`max`]).describe(`Aggregation function for column footer summary`)),Ae=x(()=>u({field:p().describe(`Field name (snake_case)`),label:S.optional().describe(`Display label override`),width:m().positive().optional().describe(`Column width in pixels`),align:n([`left`,`center`,`right`]).optional().describe(`Text alignment`),hidden:r().optional().describe(`Hide column by default`),sortable:r().optional().describe(`Allow sorting by this column`),resizable:r().optional().describe(`Allow resizing this column`),wrap:r().optional().describe(`Allow text wrapping`),type:p().optional().describe(`Renderer type override (e.g., "currency", "date")`),pinned:n([`left`,`right`]).optional().describe(`Pin/freeze column to left or right side`),summary:ke.optional().describe(`Footer aggregation function for this column`),link:r().optional().describe(`Functions as the primary navigation link (triggers View navigation)`),action:p().optional().describe(`Registered Action ID to execute when clicked`)})),je=x(()=>u({type:n([`none`,`single`,`multiple`]).default(`none`).describe(`Selection mode`)})),Me=x(()=>u({pageSize:m().int().positive().default(25).describe(`Number of records per page`),pageSizeOptions:o(m().int().positive()).optional().describe(`Available page size options`)})),Ne=x(()=>n([`compact`,`short`,`medium`,`tall`,`extra_tall`]).describe(`Row height / density setting for list view`)),Pe=x(()=>u({field:p().describe(`Field name to group by`),order:n([`asc`,`desc`]).default(`asc`).describe(`Group sort order`),collapsed:r().default(!1).describe(`Collapse groups by default`)})),Fe=x(()=>u({fields:o(Pe).min(1).describe(`Fields to group by (supports up to 3 levels)`)}).describe(`Record grouping configuration`)),Ie=x(()=>u({coverField:p().optional().describe(`Attachment/image field to display as card cover`),coverFit:n([`cover`,`contain`]).default(`cover`).describe(`Image fit mode for card cover`),cardSize:n([`small`,`medium`,`large`]).default(`medium`).describe(`Card size in gallery view`),titleField:p().optional().describe(`Field to display as card title`),visibleFields:o(p()).optional().describe(`Fields to display on card body`)}).describe(`Gallery/card view configuration`)),Le=x(()=>u({startDateField:p().describe(`Field for timeline item start date`),endDateField:p().optional().describe(`Field for timeline item end date`),titleField:p().describe(`Field to display as timeline item title`),groupByField:p().optional().describe(`Field to group timeline rows`),colorField:p().optional().describe(`Field to determine item color`),scale:n([`hour`,`day`,`week`,`month`,`quarter`,`year`]).default(`week`).describe(`Default timeline scale`)}).describe(`Timeline view configuration`)),Re=x(()=>u({type:n([`personal`,`collaborative`]).default(`collaborative`).describe(`View ownership type`),lockedBy:p().optional().describe(`User who locked the view configuration`)}).describe(`View sharing and access configuration`)),ze=x(()=>u({field:p().describe(`Field to derive color from (typically a select/status field)`),colors:s(p(),p()).optional().describe(`Map of field value to color (hex/token)`)}).describe(`Row color configuration based on field values`)),Be=x(()=>n([`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`map`]).describe(`Visualization type that users can switch to`)),Ve=x(()=>u({sort:r().default(!0).describe(`Allow users to sort records`),search:r().default(!0).describe(`Allow users to search records`),filter:r().default(!0).describe(`Allow users to filter records`),rowHeight:r().default(!0).describe(`Allow users to toggle row height/density`),addRecordForm:r().default(!1).describe(`Add records through a form instead of inline`),buttons:o(p()).optional().describe(`Custom action button IDs to show in the toolbar`)}).describe(`User action toggles for the view toolbar`)),He=x(()=>u({showDescription:r().default(!0).describe(`Show the view description text`),allowedVisualizations:o(Be).optional().describe(`Whitelist of visualization types users can switch between (e.g. ["grid", "gallery", "kanban"])`)}).describe(`Appearance and visualization configuration`)),L=x(()=>u({name:k.describe(`Tab identifier (snake_case)`),label:S.optional().describe(`Display label`),icon:p().optional().describe(`Tab icon name`),view:p().optional().describe(`Referenced list view name from listViews`),filter:o(I).optional().describe(`Tab-specific filter criteria`),order:m().int().min(0).optional().describe(`Tab display order`),pinned:r().default(!1).describe(`Pin tab (cannot be removed by users)`),isDefault:r().default(!1).describe(`Set as the default active tab`),visible:r().default(!0).describe(`Tab visibility`)}).describe(`Tab configuration for multi-tab view interface`)),R=x(()=>u({enabled:r().default(!0).describe(`Show the add record entry point`),position:n([`top`,`bottom`,`both`]).default(`bottom`).describe(`Position of the add record button`),mode:n([`inline`,`form`,`modal`]).default(`inline`).describe(`How to add a new record`),formView:p().optional().describe(`Named form view to use when mode is "form" or "modal"`)}).describe(`Add record entry point configuration`)),Ue=x(()=>u({groupByField:p().describe(`Field to group columns by (usually status/select)`),summarizeField:p().optional().describe(`Field to sum at top of column (e.g. amount)`),columns:o(p()).describe(`Fields to show on cards`)})),We=x(()=>u({chartType:n([`bar`,`line`,`pie`,`area`,`scatter`]).default(`bar`).describe(`Chart visualisation type`),xAxisField:p().describe(`Field used as the X axis / category dimension`),yAxisFields:o(p()).min(1).describe(`Field(s) used as the Y axis / measures`),aggregation:n([`sum`,`avg`,`count`,`min`,`max`]).optional().describe(`Aggregation function applied to Y axis fields`),groupByField:p().optional().describe(`Optional field used to split / stack the chart`)}).describe(`List chart view configuration`)),Ge=x(()=>u({startDateField:p(),endDateField:p().optional(),titleField:p(),colorField:p().optional()})),z=x(()=>u({startDateField:p(),endDateField:p(),titleField:p(),progressField:p().optional(),dependenciesField:p().optional()})),Ke=x(()=>n([`page`,`drawer`,`modal`,`split`,`popover`,`new_window`,`none`])),qe=x(()=>u({mode:Ke.default(`page`),view:p().optional().describe(`Name of the form view to use for details (e.g. "summary_view", "edit_form")`),preventNavigation:r().default(!1).describe(`Disable standard navigation entirely`),openNewTab:r().default(!1).describe(`Force open in new tab (applies to page mode)`),width:c([p(),m()]).optional().describe(`Width of the drawer/modal (e.g. "600px", "50%")`)})),B=x(()=>u({name:k.optional().describe(`Internal view name (lowercase snake_case)`),label:S.optional(),type:n([`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`map`,`chart`]).default(`grid`),data:Oe.optional().describe(`Data source configuration (defaults to "object" provider)`),columns:c([o(p()),o(Ae)]).describe(`Fields to display as columns`),filter:o(I).optional().describe(`Filter criteria (JSON Rules)`),sort:c([p(),o(u({field:p(),order:n([`asc`,`desc`])}))]).optional(),searchableFields:o(p()).optional().describe(`Fields enabled for search`),filterableFields:o(p()).optional().describe(`Fields enabled for end-user filtering in the top bar`),resizable:r().optional().describe(`Enable column resizing`),striped:r().optional().describe(`Striped row styling`),bordered:r().optional().describe(`Show borders`),compactToolbar:r().optional().describe(`Collapse Group/Color/Density/Hide-fields into a single View settings popover`),selection:je.optional().describe(`Row selection configuration`),navigation:qe.optional().describe(`Configuration for item click navigation (page, drawer, modal, etc.)`),pagination:Me.optional().describe(`Pagination configuration`),kanban:Ue.optional(),calendar:Ge.optional(),gantt:z.optional(),gallery:Ie.optional(),timeline:Le.optional(),chart:We.optional(),description:S.optional().describe(`View description for documentation/tooltips`),sharing:Re.optional().describe(`View sharing and access configuration`),rowHeight:Ne.optional().describe(`Row height / density setting`),grouping:Fe.optional().describe(`Group records by one or more fields`),rowColor:ze.optional().describe(`Color rows based on field value`),hiddenFields:o(p()).optional().describe(`Fields to hide in this specific view`),fieldOrder:o(p()).optional().describe(`Explicit field display order for this view`),rowActions:o(p()).optional().describe(`Actions available for individual row items`),bulkActions:o(p()).optional().describe(`Actions available when multiple rows are selected`),bulkActionDefs:o(s(p(),i())).optional().describe(`Rich bulk action definitions (schema-driven, executed via BulkActionDialog)`),virtualScroll:r().optional().describe(`Enable virtual scrolling for large datasets`),conditionalFormatting:o(u({condition:j.describe(`Predicate (CEL) to evaluate.`),style:s(p(),p()).describe(`CSS styles to apply when condition is true`)})).optional().describe(`Conditional formatting rules for list rows`),inlineEdit:r().optional().describe(`Allow inline editing of records directly in the list view`),exportOptions:o(n([`csv`,`xlsx`,`pdf`,`json`])).optional().describe(`Available export format options`),userActions:Ve.optional().describe(`User action toggles for the view toolbar`),appearance:He.optional().describe(`Appearance and visualization configuration`),tabs:o(L).optional().describe(`Tab definitions for multi-tab view interface`),addRecord:R.optional().describe(`Add record entry point configuration`),showRecordCount:r().optional().describe(`Show record count at the bottom of the list`),allowPrinting:r().optional().describe(`Allow users to print the view`),emptyState:u({title:S.optional(),message:S.optional(),icon:p().optional()}).optional().describe(`Empty state configuration when no records found`),aria:C.optional().describe(`ARIA accessibility attributes for the list view`),responsive:D.optional().describe(`Responsive layout configuration`),performance:O.optional().describe(`Performance optimization settings`)})),Je=x(()=>u({field:p().describe(`Field name (snake_case)`),label:S.optional().describe(`Display label override`),placeholder:S.optional().describe(`Placeholder text`),helpText:S.optional().describe(`Help/hint text`),readonly:r().optional().describe(`Read-only override`),required:r().optional().describe(`Required override`),hidden:r().optional().describe(`Hidden override`),colSpan:m().int().min(1).max(4).optional().describe(`Column span in grid layout (1-4)`),widget:p().optional().describe(`Custom widget/component name`),dependsOn:p().optional().describe(`Parent field name for cascading`),visibleOn:j.optional().describe(`Visibility predicate (CEL).`)})),V=x(()=>u({label:S.optional(),collapsible:r().default(!1),collapsed:r().default(!1),columns:c([n([`1`,`2`,`3`,`4`]),f(1),f(2),f(3),f(4)]).default(2).transform(e=>typeof e==`string`?parseInt(e):e),fields:o(c([p(),Je]))})),H=x(()=>u({type:n([`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]).default(`simple`),data:Oe.optional().describe(`Data source configuration (defaults to "object" provider)`),sections:o(V).optional(),groups:o(V).optional(),defaultSort:o(u({field:p().describe(`Field name to sort by`),order:n([`asc`,`desc`]).default(`desc`).describe(`Sort direction`)})).optional().describe(`Default sort order for related list views within this form`),sharing:M.optional().describe(`Public sharing configuration for this form`),submitBehavior:c([u({kind:f(`thank-you`),title:p().optional(),message:p().optional()}),u({kind:f(`redirect`),url:p(),delayMs:m().int().min(0).optional()}),u({kind:f(`continue`)}),u({kind:f(`next-record`)})]).optional().describe(`Post-submit behavior`),aria:C.optional().describe(`ARIA accessibility attributes for the form view`)}));x(()=>u({list:B.optional(),form:H.optional(),listViews:s(p(),B).optional().describe(`Additional named list views`),formViews:s(p(),H).optional().describe(`Additional named form views`)}));var U=x(()=>u({$field:p().describe(`Field Reference/Column Name`)}));x(()=>u({$eq:i().optional(),$ne:i().optional()})),x(()=>u({$gt:c([m(),e(),U]).optional(),$gte:c([m(),e(),U]).optional(),$lt:c([m(),e(),U]).optional(),$lte:c([m(),e(),U]).optional()})),x(()=>u({$in:o(i()).optional(),$nin:o(i()).optional()})),x(()=>u({$between:h([c([m(),e(),U]),c([m(),e(),U])]).optional()})),x(()=>u({$contains:p().optional(),$notContains:p().optional(),$startsWith:p().optional(),$endsWith:p().optional()})),x(()=>u({$null:r().optional(),$exists:r().optional()}));var W=x(()=>u({$eq:i().optional(),$ne:i().optional(),$gt:c([m(),e(),U]).optional(),$gte:c([m(),e(),U]).optional(),$lt:c([m(),e(),U]).optional(),$lte:c([m(),e(),U]).optional(),$in:o(i()).optional(),$nin:o(i()).optional(),$between:h([c([m(),e(),U]),c([m(),e(),U])]).optional(),$contains:p().optional(),$notContains:p().optional(),$startsWith:p().optional(),$endsWith:p().optional(),$null:r().optional(),$exists:r().optional()})),G=g(()=>s(p(),d()).and(u({$and:o(G).optional(),$or:o(G).optional(),$not:G.optional()})));x(()=>u({where:G.optional()}));var K=g(()=>u({$and:o(c([s(p(),W),K])).optional(),$or:o(c([s(p(),W),K])).optional(),$not:c([s(p(),W),K]).optional()})),Ye=x(()=>n([`default`,`blue`,`teal`,`orange`,`purple`,`success`,`warning`,`danger`]).describe(`Widget color variant`)),q=x(()=>n([`script`,`url`,`modal`,`flow`,`api`]).describe(`Widget action type`)),Xe=x(()=>u({label:S.describe(`Action button label`),actionUrl:p().describe(`URL or target for the action`),actionType:q.optional().describe(`Type of action`),icon:p().optional().describe(`Icon identifier for the action button`)}).describe(`Dashboard header action`)),Ze=x(()=>u({showTitle:r().default(!0).describe(`Show dashboard title in header`),showDescription:r().default(!0).describe(`Show dashboard description in header`),actions:o(Xe).optional().describe(`Header action buttons`)}).describe(`Dashboard header configuration`)),Qe=x(()=>u({valueField:p().describe(`Field to aggregate`),aggregate:n([`count`,`sum`,`avg`,`min`,`max`]).default(`count`).describe(`Aggregate function`),label:S.optional().describe(`Measure display label`),format:p().optional().describe(`Number format string`)}).describe(`Widget measure definition`)),$e=x(()=>u({id:k.describe(`Unique widget identifier (snake_case)`),title:S.optional().describe(`Widget title`),description:S.optional().describe(`Widget description text below the header`),type:w.default(`metric`).describe(`Visualization type`),chartConfig:E.optional().describe(`Chart visualization configuration`),colorVariant:Ye.optional().describe(`Widget color variant for theming`),requiresObject:p().optional().describe(`Hide the widget unless the named object is registered`),requiresService:p().optional().describe(`Hide the widget unless the named kernel service is registered`),actionUrl:p().optional().describe(`URL or target for the widget action button`),actionType:q.optional().describe(`Type of action for the widget action button`),actionIcon:p().optional().describe(`Icon identifier for the widget action button`),object:p().optional().describe(`Data source object name`),filter:G.optional().describe(`Data filter criteria`),categoryField:p().optional().describe(`Field for grouping (X-Axis)`),valueField:p().optional().describe(`Field for values (Y-Axis)`),aggregate:n([`count`,`sum`,`avg`,`min`,`max`]).optional().default(`count`).describe(`Aggregate function`),measures:o(Qe).optional().describe(`Multiple measures for pivot/matrix analysis`),layout:u({x:m(),y:m(),w:m(),h:m()}).describe(`Grid layout position`),options:d().optional().describe(`Widget specific configuration`),responsive:D.optional().describe(`Responsive layout configuration`),aria:C.optional().describe(`ARIA accessibility attributes`)})),et=x(()=>u({object:p().describe(`Source object name`),valueField:p().describe(`Field to use as option value`),labelField:p().describe(`Field to use as option label`),filter:G.optional().describe(`Filter to apply to source object`)}).describe(`Dynamic filter options from object`)),tt=x(()=>u({field:p().describe(`Field name to filter on`),label:S.optional().describe(`Display label for the filter`),type:n([`text`,`select`,`date`,`number`,`lookup`]).optional().describe(`Filter input type`),options:o(u({value:c([p(),m(),r()]).describe(`Option value`),label:S})).optional().describe(`Static filter options`),optionsFrom:et.optional().describe(`Dynamic filter options from object`),defaultValue:c([p(),m(),r()]).optional().describe(`Default filter value`),scope:n([`dashboard`,`widget`]).default(`dashboard`).describe(`Filter application scope`),targetWidgets:o(p()).optional().describe(`Widget IDs to apply this filter to`)}));x(()=>u({name:k.describe(`Dashboard unique name`),label:S.describe(`Dashboard label`),description:S.optional().describe(`Dashboard description`),header:Ze.optional().describe(`Dashboard header configuration`),widgets:o($e).describe(`Widgets to display`),columns:m().int().min(1).max(24).optional().describe(`Number of grid columns (default 12)`),gap:m().int().min(0).optional().describe(`Grid gap in Tailwind spacing units`),refreshInterval:m().optional().describe(`Auto-refresh interval in seconds`),dateRange:u({field:p().optional().describe(`Default date field name for time-based filtering`),defaultRange:n([`today`,`yesterday`,`this_week`,`last_week`,`this_month`,`last_month`,`this_quarter`,`last_quarter`,`this_year`,`last_year`,`last_7_days`,`last_30_days`,`last_90_days`,`custom`]).default(`this_month`).describe(`Default date range preset`),allowCustomRange:r().default(!0).describe(`Allow users to pick a custom date range`)}).optional().describe(`Global dashboard date range filter configuration`),globalFilters:o(tt).optional().describe(`Global filters that apply to all widgets in the dashboard`),aria:C.optional().describe(`ARIA accessibility attributes`),performance:O.optional().describe(`Performance optimization settings`)}));var nt=n([`tabular`,`summary`,`matrix`,`joined`]),J=x(()=>u({field:p().describe(`Field name`),label:S.optional().describe(`Override label`),aggregate:n([`sum`,`avg`,`max`,`min`,`count`,`unique`]).optional().describe(`Aggregation function`),responsive:D.optional().describe(`Responsive visibility for this column`)})),Y=x(()=>u({field:p().describe(`Field to group by`),sortOrder:n([`asc`,`desc`]).default(`asc`),dateGranularity:n([`day`,`week`,`month`,`quarter`,`year`]).optional().describe(`For date fields`)})),X=x(()=>E.extend({xAxis:p().describe(`Grouping field for X-Axis`),yAxis:p().describe(`Summary field for Y-Axis`),groupBy:p().optional().describe(`Additional grouping field`)})),rt=x(()=>u({name:k,label:S.optional(),description:S.optional(),type:n([`tabular`,`summary`,`matrix`]).default(`tabular`),objectName:p().optional(),columns:o(J),groupingsDown:o(Y).optional(),groupingsAcross:o(Y).optional(),filter:G.optional(),chart:X.optional()}));x(()=>u({name:k.describe(`Report unique name`),label:S.describe(`Report label`),description:S.optional(),objectName:p().describe(`Primary object`),type:nt.default(`tabular`).describe(`Report format type`),columns:o(J).describe(`Columns to display`),groupingsDown:o(Y).optional().describe(`Row groupings`),groupingsAcross:o(Y).optional().describe(`Column groupings (Matrix only)`),filter:G.optional().describe(`Filter criteria`),chart:X.optional().describe(`Embedded chart configuration`),aria:C.optional().describe(`ARIA accessibility attributes`),performance:O.optional().describe(`Performance optimization settings`),blocks:o(rt).optional().describe(`Sub-reports for type=joined`)}));var it=x(()=>n([`aes-256-gcm`,`aes-256-cbc`,`chacha20-poly1305`]).describe(`Supported encryption algorithm`)),at=x(()=>n([`local`,`aws-kms`,`azure-key-vault`,`gcp-kms`,`hashicorp-vault`]).describe(`Key management service provider`)),ot=x(()=>u({enabled:r().default(!1).describe(`Enable automatic key rotation`),frequencyDays:m().min(1).default(90).describe(`Rotation frequency in days`),retainOldVersions:m().default(3).describe(`Number of old key versions to retain`),autoRotate:r().default(!0).describe(`Automatically rotate without manual approval`)}).describe(`Policy for automatic encryption key rotation`)),st=x(()=>u({enabled:r().default(!1).describe(`Enable field-level encryption`),algorithm:it.default(`aes-256-gcm`).describe(`Encryption algorithm`),keyManagement:u({provider:at.describe(`Key management service provider`),keyId:p().optional().describe(`Key identifier in the provider`),rotationPolicy:ot.optional().describe(`Key rotation policy`)}).describe(`Key management configuration`),scope:n([`field`,`record`,`table`,`database`]).describe(`Encryption scope level`),deterministicEncryption:r().default(!1).describe(`Allows equality queries on encrypted data`),searchableEncryption:r().default(!1).describe(`Allows search on encrypted data`)}).describe(`Field-level encryption configuration`));x(()=>u({fieldName:p().describe(`Name of the field to encrypt`),encryptionConfig:st.describe(`Encryption settings for this field`),indexable:r().default(!1).describe(`Allow indexing on encrypted field`)}).describe(`Per-field encryption assignment`));var ct=x(()=>n([`redact`,`partial`,`hash`,`tokenize`,`randomize`,`nullify`,`substitute`]).describe(`Data masking strategy for PII protection`)),lt=x(()=>u({field:p().describe(`Field name to apply masking to`),strategy:ct.describe(`Masking strategy to use`),pattern:p().optional().describe(`Regex pattern for partial masking`),preserveFormat:r().default(!0).describe(`Keep the original data format after masking`),preserveLength:r().default(!0).describe(`Keep the original data length after masking`),roles:o(p()).optional().describe(`Roles that see masked data`),exemptRoles:o(p()).optional().describe(`Roles that see unmasked data`)}).describe(`Masking rule for a single field`));x(()=>u({enabled:r().default(!1).describe(`Enable data masking`),rules:o(lt).describe(`List of field-level masking rules`),auditUnmasking:r().default(!0).describe(`Log when masked data is accessed unmasked`)}).describe(`Top-level data masking configuration for PII protection`));var ut=n(`text.textarea.email.url.phone.password.markdown.html.richtext.number.currency.percent.date.datetime.time.boolean.toggle.select.multiselect.radio.checkboxes.lookup.master_detail.tree.image.file.avatar.video.audio.formula.summary.autonumber.location.address.code.json.color.rating.slider.signature.qrcode.progress.tags.vector`.split(`.`)),dt=x(()=>u({label:p().describe(`Display label (human-readable, any case allowed)`),value:pe.describe(`Stored value (lowercase machine identifier)`),color:p().optional().describe(`Color code for badges/charts`),default:r().optional().describe(`Is default option`)}));x(()=>u({latitude:m().min(-90).max(90).describe(`Latitude coordinate`),longitude:m().min(-180).max(180).describe(`Longitude coordinate`),altitude:m().optional().describe(`Altitude in meters`),accuracy:m().optional().describe(`Accuracy in meters`)}));var ft=x(()=>u({precision:m().int().min(0).max(10).default(2).describe(`Decimal precision (default: 2)`),currencyMode:n([`dynamic`,`fixed`]).default(`dynamic`).describe(`Currency mode: dynamic (user selectable) or fixed (single currency)`),defaultCurrency:p().length(3).default(`CNY`).describe(`Default or fixed currency code (ISO 4217, e.g., USD, CNY, EUR)`)}));x(()=>u({value:m().describe(`Monetary amount`),currency:p().length(3).describe(`Currency code (ISO 4217)`)})),x(()=>u({street:p().optional().describe(`Street address`),city:p().optional().describe(`City name`),state:p().optional().describe(`State/Province`),postalCode:p().optional().describe(`Postal/ZIP code`),country:p().optional().describe(`Country name or code`),countryCode:p().optional().describe(`ISO country code (e.g., US, GB)`),formatted:p().optional().describe(`Formatted address string`)}));var pt=x(()=>u({dimensions:m().int().min(1).max(1e4).describe(`Vector dimensionality (e.g., 1536 for OpenAI embeddings)`),distanceMetric:n([`cosine`,`euclidean`,`dotProduct`,`manhattan`]).default(`cosine`).describe(`Distance/similarity metric for vector search`),normalized:r().default(!1).describe(`Whether vectors are normalized (unit length)`),indexed:r().default(!0).describe(`Whether to create a vector index for fast similarity search`),indexType:n([`hnsw`,`ivfflat`,`flat`]).optional().describe(`Vector index algorithm (HNSW for high accuracy, IVFFlat for large datasets)`)})),mt=x(()=>u({minSize:m().min(0).optional().describe(`Minimum file size in bytes`),maxSize:m().min(1).optional().describe(`Maximum file size in bytes (e.g., 10485760 = 10MB)`),allowedTypes:o(p()).optional().describe(`Allowed file extensions (e.g., [".pdf", ".docx", ".jpg"])`),blockedTypes:o(p()).optional().describe(`Blocked file extensions (e.g., [".exe", ".bat", ".sh"])`),allowedMimeTypes:o(p()).optional().describe(`Allowed MIME types (e.g., ["image/jpeg", "application/pdf"])`),blockedMimeTypes:o(p()).optional().describe(`Blocked MIME types`),virusScan:r().default(!1).describe(`Enable virus scanning for uploaded files`),virusScanProvider:n([`clamav`,`virustotal`,`metadefender`,`custom`]).optional().describe(`Virus scanning service provider`),virusScanOnUpload:r().default(!0).describe(`Scan files immediately on upload`),quarantineOnThreat:r().default(!0).describe(`Quarantine files if threat detected`),storageProvider:p().optional().describe(`Object storage provider name (references ObjectStorageConfig)`),storageBucket:p().optional().describe(`Target bucket name`),storagePrefix:p().optional().describe(`Storage path prefix (e.g., "uploads/documents/")`),imageValidation:u({minWidth:m().min(1).optional().describe(`Minimum image width in pixels`),maxWidth:m().min(1).optional().describe(`Maximum image width in pixels`),minHeight:m().min(1).optional().describe(`Minimum image height in pixels`),maxHeight:m().min(1).optional().describe(`Maximum image height in pixels`),aspectRatio:p().optional().describe(`Required aspect ratio (e.g., "16:9", "1:1")`),generateThumbnails:r().default(!1).describe(`Auto-generate thumbnails`),thumbnailSizes:o(u({name:p().describe(`Thumbnail variant name (e.g., "small", "medium", "large")`),width:m().min(1).describe(`Thumbnail width in pixels`),height:m().min(1).describe(`Thumbnail height in pixels`),crop:r().default(!1).describe(`Crop to exact dimensions`)})).optional().describe(`Thumbnail size configurations`),preserveMetadata:r().default(!1).describe(`Preserve EXIF metadata`),autoRotate:r().default(!0).describe(`Auto-rotate based on EXIF orientation`)}).optional().describe(`Image-specific validation rules`),allowMultiple:r().default(!1).describe(`Allow multiple file uploads (overrides field.multiple)`),allowReplace:r().default(!0).describe(`Allow replacing existing files`),allowDelete:r().default(!0).describe(`Allow deleting uploaded files`),requireUpload:r().default(!1).describe(`Require at least one file when field is required`),extractMetadata:r().default(!0).describe(`Extract file metadata (name, size, type, etc.)`),extractText:r().default(!1).describe(`Extract text content from documents (OCR/parsing)`),versioningEnabled:r().default(!1).describe(`Keep previous versions of replaced files`),maxVersions:m().min(1).optional().describe(`Maximum number of versions to retain`),publicRead:r().default(!1).describe(`Allow public read access to uploaded files`),presignedUrlExpiry:m().min(60).max(604800).default(3600).describe(`Presigned URL expiration in seconds (default: 1 hour)`)}).refine(e=>!(e.minSize!==void 0&&e.maxSize!==void 0&&e.minSize>e.maxSize),{message:`minSize must be less than or equal to maxSize`}).refine(e=>!(e.virusScanProvider!==void 0&&e.virusScan!==!0),{message:`virusScanProvider requires virusScan to be enabled`})),ht=x(()=>u({uniqueness:r().default(!1).describe(`Enforce unique values across all records`),completeness:m().min(0).max(1).default(0).describe(`Minimum ratio of non-null values (0-1, default: 0 = no requirement)`),accuracy:u({source:p().describe(`Reference data source for validation (e.g., "api.verify.com", "master_data")`),threshold:m().min(0).max(1).describe(`Minimum accuracy threshold (0-1, e.g., 0.95 = 95% match required)`)}).optional().describe(`Accuracy validation configuration`)})),gt=x(()=>u({enabled:r().describe(`Enable caching for computed field results`),ttl:m().min(0).describe(`Cache TTL in seconds (0 = no expiration)`),invalidateOn:o(p()).describe(`Field paths that invalidate cache (e.g., ["inventory.quantity", "pricing.base_price"])`)})),_t=x(()=>u({name:p().regex(/^[a-z_][a-z0-9_]*$/).describe(`Machine name (snake_case)`).optional(),label:p().optional().describe(`Human readable label`),type:ut.describe(`Field Data Type`),description:p().optional().describe(`Tooltip/Help text`),format:p().optional().describe(`Format string (e.g. email, phone)`),columnName:p().optional().describe(`Physical column name in the target datasource. Defaults to the field key when not set.`),required:r().default(!1).describe(`Is required`),searchable:r().default(!1).describe(`Is searchable`),multiple:r().default(!1).describe(`Allow multiple values (Stores as Array/JSON). Applicable for select, lookup, file, image.`),unique:r().default(!1).describe(`Is unique constraint`),defaultValue:d().optional().describe(`Default value`),maxLength:m().optional().describe(`Max character length`),minLength:m().optional().describe(`Min character length`),precision:m().optional().describe(`Total digits`),scale:m().optional().describe(`Decimal places`),min:m().optional().describe(`Minimum value`),max:m().optional().describe(`Maximum value`),options:o(dt).optional().describe(`Static options for select/multiselect`),reference:p().optional().describe(`Target object name (snake_case) for lookup/master_detail fields. Required for relationship types. Used by $expand to resolve foreign key IDs into full objects.`),referenceFilters:o(p()).optional().describe(`Filters applied to lookup dialogs (e.g. "active = true")`),writeRequiresMasterRead:r().optional().describe(`If true, user needs read access to master record to edit this field`),deleteBehavior:n([`set_null`,`cascade`,`restrict`]).optional().default(`set_null`).describe(`What happens if referenced record is deleted`),expression:j.optional().describe("Formula expression (CEL). e.g. F`record.amount * 0.1`"),summaryOperations:u({object:p().describe(`Source child object name for roll-up`),field:p().describe(`Field on child object to aggregate`),function:n([`count`,`sum`,`min`,`max`,`avg`]).describe(`Aggregation function to apply`)}).optional().describe(`Roll-up summary definition`),language:p().optional().describe(`Programming language for syntax highlighting (e.g., javascript, python, sql)`),theme:p().optional().describe(`Code editor theme (e.g., dark, light, monokai)`),lineNumbers:r().optional().describe(`Show line numbers in code editor`),maxRating:m().optional().describe(`Maximum rating value (default: 5)`),allowHalf:r().optional().describe(`Allow half-star ratings`),displayMap:r().optional().describe(`Display map widget for location field`),allowGeocoding:r().optional().describe(`Allow address-to-coordinate conversion`),addressFormat:n([`us`,`uk`,`international`]).optional().describe(`Address format template`),colorFormat:n([`hex`,`rgb`,`rgba`,`hsl`]).optional().describe(`Color value format`),allowAlpha:r().optional().describe(`Allow transparency/alpha channel`),presetColors:o(p()).optional().describe(`Preset color options`),step:m().optional().describe(`Step increment for slider (default: 1)`),showValue:r().optional().describe(`Display current value on slider`),marks:s(p(),p()).optional().describe(`Custom marks/labels at specific values (e.g., {0: "Low", 50: "Medium", 100: "High"})`),barcodeFormat:n([`qr`,`ean13`,`ean8`,`code128`,`code39`,`upca`,`upce`]).optional().describe(`Barcode format type`),qrErrorCorrection:n([`L`,`M`,`Q`,`H`]).optional().describe(`QR code error correction level (L=7%, M=15%, Q=25%, H=30%). Only applicable when barcodeFormat is "qr"`),displayValue:r().optional().describe(`Display human-readable value below barcode/QR code`),allowScanning:r().optional().describe(`Enable camera scanning for barcode/QR code input`),currencyConfig:ft.optional().describe(`Configuration for currency field type`),vectorConfig:pt.optional().describe(`Configuration for vector field type (AI/ML embeddings)`),fileAttachmentConfig:mt.optional().describe(`Configuration for file and attachment field types`),encryptionConfig:st.optional().describe(`Field-level encryption configuration for sensitive data (GDPR/HIPAA/PCI-DSS)`),maskingRule:lt.optional().describe(`Data masking rules for PII protection`),auditTrail:r().default(!1).describe(`Enable detailed audit trail for this field (tracks all changes with user and timestamp)`),dependencies:o(p()).optional().describe(`Array of field names that this field depends on (for formulas, visibility rules, etc.)`),cached:gt.optional().describe(`Caching configuration for computed/formula fields`),dataQuality:ht.optional().describe(`Data quality validation and monitoring rules`),group:p().optional().describe(`Field group name for organizing fields in forms and layouts (e.g., "contact_info", "billing", "system")`),conditionalRequired:j.optional().describe("Predicate (CEL) — field is required when TRUE. e.g. P`record.status == 'closed_won'`"),hidden:r().default(!1).describe(`Hidden from default UI`),readonly:r().default(!1).describe(`Read-only in UI`),system:r().optional().describe(`Auto-injected system/audit field (e.g. created_at, updated_by, organization_id). Tools that surface system fields separately from author-declared business fields should branch on this flag.`),sortable:r().optional().default(!0).describe(`Whether field is sortable in list views`),inlineHelpText:p().optional().describe(`Help text displayed below the field in forms`),trackFeedHistory:r().optional().describe(`Track field changes in Chatter/activity feed (Salesforce pattern)`),caseSensitive:r().optional().describe(`Whether text comparisons are case-sensitive`),autonumberFormat:p().optional().describe(`Auto-number display format pattern (e.g., "CASE-{0000}")`),index:r().default(!1).describe(`Create standard database index`),externalId:r().default(!1).describe(`Is external ID for upsert operations`)})),vt=n([`api.read`,`api.write`,`crypto.uuid`,`crypto.hash`,`log`]),yt=l(`language`,[u({language:f(`expression`),source:p().min(1).describe(`Formula expression source`)}).describe(`L1 expression body — pure formula, no IO`),u({language:f(`js`),source:p().min(1).describe(`Function body source`),capabilities:o(vt).default([]).describe(`Granted capability tokens`),timeoutMs:m().int().positive().max(3e4).optional().describe(`Per-invocation timeout (ms)`),memoryMb:m().int().positive().max(256).optional().describe(`Per-invocation memory cap (MB)`)}).describe(`L2 sandboxed JS body — runs inside an isolated VM with declared capabilities`)]).describe(`Hook/Action body — expression (L1) or sandboxed JS (L2)`),bt=x(()=>u({name:p().optional(),field:k.optional(),objectOverride:k.optional(),label:S.optional(),type:ut.optional(),required:r().optional().default(!1),options:o(u({label:S,value:p()})).optional(),placeholder:p().optional(),helpText:p().optional(),defaultValue:d().optional(),defaultFromRow:r().optional()}).refine(e=>!!e.name||!!e.field,{message:`ActionParam requires either "name" or "field"`})),xt=n([`script`,`url`,`modal`,`flow`,`api`,`form`]),St=new Set(xt.options.filter(e=>e!==`script`));x(()=>u({name:k.describe(`Machine name (lowercase snake_case)`),label:S.describe(`Display label`),objectName:p().regex(/^[a-z_][a-z0-9_]*$/).optional().describe(`Target object this action belongs to. When set, the action is auto-merged into the object's actions array by defineStack().`),icon:p().optional().describe(`Icon name`),locations:o(n([`list_toolbar`,`list_item`,`record_header`,`record_more`,`record_related`,`global_nav`])).optional().describe(`Locations where this action is visible`),component:n([`action:button`,`action:icon`,`action:menu`,`action:group`]).optional().describe(`Visual component override`),type:xt.default(`script`).describe(`Action functionality type`),target:p().optional().describe(`URL, Script Name, Flow ID, or API Endpoint`),body:yt.optional().describe("Action body — expression (L1) or sandboxed JS (L2). Only used when type is `script`."),execute:p().optional().describe(`@deprecated — Use target instead. Auto-migrated to target during parsing.`),params:o(bt).optional().describe(`Input parameters required from user`),variant:n([`primary`,`secondary`,`danger`,`ghost`,`link`]).optional().describe(`Button visual variant for styling (primary = highlighted, danger = destructive, ghost = transparent)`),confirmText:S.optional().describe(`Confirmation message before execution`),successMessage:S.optional().describe(`Success message to show after execution`),refreshAfter:r().default(!1).describe(`Refresh view after execution`),visible:j.optional().describe(`Visibility predicate (CEL).`),disabled:c([r(),j]).optional().describe(`Boolean or predicate (CEL) — action is disabled when TRUE.`),shortcut:p().optional().describe(`Keyboard shortcut to trigger this action (e.g., "Ctrl+S")`),bulkEnabled:r().optional().describe(`Whether this action can be applied to multiple selected records`),recordIdParam:p().optional().describe(`Body key to inject the row id into when running from a list_item context.`),recordIdField:p().optional().describe(`Row field whose value seeds recordIdParam. Defaults to "id".`),bodyShape:c([f(`flat`),u({wrap:p()})]).optional().describe(`Body wrapping: flat (default) or { wrap: key } to nest user-collected params under a key.`),method:n([`POST`,`PATCH`,`PUT`,`DELETE`]).optional().describe(`HTTP method for type:"api" actions. Defaults to POST.`),bodyExtra:s(p(),d()).optional().describe(`Constant body fields merged into the API request (applied last; overrides user params).`),mode:n([`create`,`edit`,`delete`,`custom`]).optional().describe(`Semantic mode of the action.`),timeout:m().optional().describe(`Maximum execution time in milliseconds for the action`),aria:C.optional().describe(`ARIA accessibility attributes`)}).transform(e=>e.execute&&!e.target?{...e,target:e.execute}:e).refine(e=>!(St.has(e.type)&&!e.target),{message:`Action 'target' is required when type is 'url', 'flow', 'modal', 'api', or 'form'.`,path:[`target`]})),n([`count`,`sum`,`avg`,`min`,`max`,`count_distinct`,`percentile`,`median`,`stddev`,`variance`]).describe(`Standard aggregation functions`);var Ct=n([`asc`,`desc`]).describe(`Sort order direction`),wt=x(()=>u({field:p().describe(`Field name to sort by`),order:Ct.describe(`Sort direction`)}).describe(`Sort field and direction pair`));n([`insert`,`update`,`delete`,`upsert`]).describe(`Data mutation event types`),n([`read_uncommitted`,`read_committed`,`repeatable_read`,`serializable`,`snapshot`]).describe(`Transaction isolation levels (snake_case standard)`),n([`lru`,`lfu`,`ttl`,`fifo`]).describe(`Cache eviction strategy`);var Tt=x(()=>u({name:p().describe(`Region name (e.g. "sidebar", "main", "header")`),width:n([`small`,`medium`,`large`,`full`]).optional(),components:o(g(()=>Z)).describe(`Components in this region`)})),Et=n(`page:header.page:footer.page:sidebar.page:tabs.page:accordion.page:card.page:section.record:details.record:highlights.record:related_list.record:activity.record:chatter.record:path.app:launcher.nav:menu.nav:breadcrumb.global:search.global:notifications.user:profile.ai:chat_window.ai:suggestion.element:text.element:number.element:image.element:divider.element:button.element:filter.element:form.element:record_picker`.split(`.`)),Dt=x(()=>u({object:p().describe(`Object to query`),view:p().optional().describe(`Named view to apply`),filter:G.optional().describe(`Additional filter criteria`),sort:o(wt).optional().describe(`Sort order`),limit:m().int().positive().optional().describe(`Max records to display`)})),Z=x(()=>u({type:c([Et,p()]).describe(`Component Type (Standard enum or custom string)`),id:p().optional().describe(`Unique instance ID`),label:S.optional(),properties:s(p(),d()).describe(`Component props passed to the widget. See component.zod.ts for schemas.`),events:s(p(),p()).optional().describe(`Event handlers map`),style:s(p(),p()).optional().describe(`Inline styles or utility classes`),className:p().optional().describe(`CSS class names`),visibility:j.optional().describe(`Visibility predicate (CEL).`),dataSource:Dt.optional().describe(`Per-element data binding for multi-object pages`),responsive:D.optional().describe(`Responsive layout configuration`),aria:C.optional().describe(`ARIA accessibility attributes`)})),Ot=x(()=>u({name:p().describe(`Variable name`),type:n([`string`,`number`,`boolean`,`object`,`array`,`record_id`]).default(`string`),defaultValue:d().optional(),source:p().optional().describe(`Component ID that writes to this variable`)})),kt=x(()=>u({componentId:p().describe(`Reference to a PageComponent.id in the page`),x:m().int().min(0).describe(`Grid column position (0-based)`),y:m().int().min(0).describe(`Grid row position (0-based)`),width:m().int().min(1).describe(`Width in grid columns`),height:m().int().min(1).describe(`Height in grid rows`)})),At=x(()=>u({columns:m().int().min(1).default(12).describe(`Number of grid columns`),rowHeight:m().int().min(1).default(40).describe(`Height of each grid row in pixels`),gap:m().int().min(0).default(8).describe(`Gap between grid items in pixels`),items:o(kt).describe(`Positioned components on the canvas`)})),jt=x(()=>n([`record`,`home`,`app`,`utility`,`dashboard`,`grid`,`list`,`gallery`,`kanban`,`calendar`,`timeline`,`form`,`record_detail`,`record_review`,`overview`,`blank`]).describe(`Page type — platform or interface page types`)),Mt=x(()=>u({object:p().describe(`Target object for review`),filter:G.optional().describe(`Filter criteria for review queue`),sort:o(wt).optional().describe(`Sort order for review queue`),displayFields:o(p()).optional().describe(`Fields to display on the review page`),actions:o(u({label:p().describe(`Action button label`),type:n([`approve`,`reject`,`skip`,`custom`]).describe(`Action type`),field:p().optional().describe(`Field to update on action`),value:c([p(),m(),r()]).optional().describe(`Value to set on action`),nextRecord:r().optional().default(!0).describe(`Auto-advance to next record after action`)})).describe(`Review actions`),navigation:n([`sequential`,`random`,`filtered`]).optional().default(`sequential`).describe(`Record navigation mode`),showProgress:r().optional().default(!0).describe(`Show review progress indicator`)})),Nt=x(()=>u({source:p().optional().describe(`Source object name for the page`),levels:m().int().min(1).optional().describe(`Number of hierarchy levels to display`),filterBy:o(I).optional().describe(`Page-level filter criteria`),appearance:He.optional().describe(`Appearance and visualization configuration`),userFilters:u({elements:o(n([`grid`,`gallery`,`kanban`])).optional().describe(`Visualization element types available in user filter bar`),tabs:o(L).optional().describe(`User-configurable tabs`)}).optional().describe(`User filter configuration`),userActions:Ve.optional().describe(`User action toggles`),addRecord:R.optional().describe(`Add record entry point configuration`),showRecordCount:r().optional().describe(`Show record count at page bottom`),allowPrinting:r().optional().describe(`Allow users to print the page`)}).describe(`Interface-level page configuration (Airtable parity)`));x(()=>u({name:k.describe(`Page unique name (lowercase snake_case)`),label:S,description:S.optional(),icon:p().optional().describe(`Page icon name`),type:jt.default(`record`).describe(`Page type`),variables:o(Ot).optional().describe(`Local page state variables`),object:p().optional().describe(`Bound object (for Record pages)`),recordReview:Mt.optional().describe(`Record review configuration (required when type is "record_review")`),blankLayout:At.optional().describe(`Free-form grid layout for blank pages (used when type is "blank")`),template:p().default(`default`).describe(`Layout template name (e.g. "header-sidebar-main")`),regions:o(Tt).describe(`Defined regions with components`),isDefault:r().default(!1),assignedProfiles:o(p()).optional(),interfaceConfig:Nt.optional().describe(`Interface-level page configuration (for Airtable-style interface pages)`),aria:C.optional().describe(`ARIA accessibility attributes`),kind:n([`full`,`slotted`]).default(`full`).describe(`Page override mode: full (default) or slotted (partial overrides)`),slots:u({header:c([Z,o(Z)]).optional(),actions:c([Z,o(Z)]).optional(),highlights:c([Z,o(Z)]).optional(),details:c([Z,o(Z)]).optional(),tabs:c([Z,o(Z)]).optional(),discussion:c([Z,o(Z)]).optional()}).optional().describe(`Slot override map for slotted pages`)}).superRefine((e,t)=>{e.type===`record_review`&&!e.recordReview&&t.addIssue({code:b.custom,path:[`recordReview`],message:`recordReview is required when type is "record_review"`}),e.type===`blank`&&!e.blankLayout&&t.addIssue({code:b.custom,path:[`blankLayout`],message:`blankLayout is required when type is "blank"`}),e.kind===`slotted`&&!e.slots&&t.addIssue({code:b.custom,path:[`slots`],message:`slots is required when kind is "slotted"`})}));var Pt=x(()=>u({onMount:p().optional().describe(`Initialization code when widget mounts`),onUpdate:p().optional().describe(`Code to run when props change`),onUnmount:p().optional().describe(`Cleanup code when widget unmounts`),onValidate:p().optional().describe(`Custom validation logic`),onFocus:p().optional().describe(`Code to run on focus`),onBlur:p().optional().describe(`Code to run on blur`),onError:p().optional().describe(`Error handling code`)})),Ft=x(()=>u({name:p().describe(`Event name`),label:S.optional().describe(`Human-readable event label`),description:S.optional().describe(`Event description and usage`),bubbles:r().default(!1).describe(`Whether event bubbles`),cancelable:r().default(!1).describe(`Whether event is cancelable`),payload:s(p(),d()).optional().describe(`Event payload schema`)})),It=x(()=>u({name:p().describe(`Property name (camelCase)`),label:S.optional().describe(`Human-readable label`),type:n([`string`,`number`,`boolean`,`array`,`object`,`function`,`any`]).describe(`TypeScript type`),required:r().default(!1).describe(`Whether property is required`),default:d().optional().describe(`Default value`),description:S.optional().describe(`Property description`),validation:s(p(),d()).optional().describe(`Validation rules`),category:p().optional().describe(`Property category`)})),Lt=x(()=>l(`type`,[u({type:f(`npm`),packageName:p().describe(`NPM package name`),version:p().default(`latest`),exportName:p().optional().describe(`Named export (default: default)`)}),u({type:f(`remote`),url:p().url().describe(`Remote entry URL (.js)`),moduleName:p().describe(`Exposed module name`),scope:p().describe(`Remote scope name`)}),u({type:f(`inline`),code:p().describe(`JavaScript code body`)})]));x(()=>u({name:k.describe(`Widget identifier (snake_case)`),label:S.describe(`Widget display name`),description:S.optional().describe(`Widget description`),version:p().optional().describe(`Widget version (semver)`),author:p().optional().describe(`Widget author`),icon:p().optional().describe(`Widget icon`),fieldTypes:o(p()).optional().describe(`Supported field types`),category:n([`input`,`display`,`picker`,`editor`,`custom`]).default(`custom`).describe(`Widget category`),lifecycle:Pt.optional().describe(`Lifecycle hooks`),events:o(Ft).optional().describe(`Custom events`),properties:o(It).optional().describe(`Configuration properties`),implementation:Lt.optional().describe(`Widget implementation source`),dependencies:o(u({name:p(),version:p().optional(),url:p().url().optional()})).optional().describe(`Widget dependencies`),screenshots:o(p().url()).optional().describe(`Screenshot URLs`),documentation:p().url().optional().describe(`Documentation URL`),license:p().optional().describe(`License (SPDX identifier)`),tags:o(p()).optional().describe(`Tags for categorization`),aria:C.optional().describe(`ARIA accessibility attributes`),performance:O.optional().describe(`Performance optimization settings`)})),x(()=>u({value:d().describe(`Current field value`),onChange:ee().input(h([d()])).output(a()).describe(`Callback to update field value`),readonly:r().default(!1).describe(`Read-only mode flag`),required:r().default(!1).describe(`Required field flag`),error:p().optional().describe(`Validation error message`),field:_t.describe(`Field schema definition`),record:s(p(),d()).optional().describe(`Complete record data`),options:s(p(),d()).optional().describe(`Custom widget options`)}));var Q=n([`comment`,`field_change`,`task`,`event`,`email`,`call`,`note`,`file`,`record_create`,`record_delete`,`approval`,`sharing`,`system`]),Rt=x(()=>u({type:n([`user`,`team`,`record`]).describe(`Mention target type`),id:p().describe(`Target ID`),name:p().describe(`Display name for rendering`),offset:m().int().min(0).describe(`Character offset in body text`),length:m().int().min(1).describe(`Length of mention token in body text`)})),zt=x(()=>u({field:p().describe(`Field machine name`),fieldLabel:p().optional().describe(`Field display label`),oldValue:d().optional().describe(`Previous value`),newValue:d().optional().describe(`New value`),oldDisplayValue:p().optional().describe(`Human-readable old value`),newDisplayValue:p().optional().describe(`Human-readable new value`)})),Bt=x(()=>u({emoji:p().describe(`Emoji character or shortcode (e.g., "👍", ":thumbsup:")`),userIds:o(p()).describe(`Users who reacted`),count:m().int().min(1).describe(`Total reaction count`)})),Vt=x(()=>u({type:n([`user`,`system`,`service`,`automation`]).describe(`Actor type`),id:p().describe(`Actor ID`),name:p().optional().describe(`Actor display name`),avatarUrl:p().url().optional().describe(`Actor avatar URL`),source:p().optional().describe(`Source application (e.g., "Omni", "API", "Studio")`)})),Ht=n([`public`,`internal`,`private`]);x(()=>u({id:p().describe(`Feed item ID`),type:Q.describe(`Activity type`),object:p().describe(`Object name (e.g., "account")`),recordId:p().describe(`Record ID this feed item belongs to`),actor:Vt.describe(`Who performed this action`),body:p().optional().describe(`Rich text body (Markdown supported)`),mentions:o(Rt).optional().describe(`Mentioned users/teams/records`),changes:o(zt).optional().describe(`Field-level changes`),reactions:o(Bt).optional().describe(`Emoji reactions on this item`),parentId:p().optional().describe(`Parent feed item ID for threaded replies`),replyCount:m().int().min(0).default(0).describe(`Number of replies`),pinned:r().default(!1).describe(`Whether the feed item is pinned to the top of the timeline`),pinnedAt:p().datetime().optional().describe(`Timestamp when the item was pinned`),pinnedBy:p().optional().describe(`User ID who pinned the item`),starred:r().default(!1).describe(`Whether the feed item is starred/bookmarked by the current user`),starredAt:p().datetime().optional().describe(`Timestamp when the item was starred`),visibility:Ht.default(`public`).describe(`Visibility: public (all users), internal (team only), private (author + mentioned)`),createdAt:p().datetime().describe(`Creation timestamp`),updatedAt:p().datetime().optional().describe(`Last update timestamp`),editedAt:p().datetime().optional().describe(`When comment was last edited`),isEdited:r().default(!1).describe(`Whether comment has been edited`)}));var Ut=n([`all`,`comments_only`,`changes_only`,`tasks_only`]);u({}),u({title:S.describe(`Page title`),subtitle:S.optional().describe(`Page subtitle`),icon:p().optional().describe(`Icon name`),breadcrumb:r().default(!0).describe(`Show breadcrumb`),actions:o(p()).optional().describe(`Action IDs to show in header`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({type:n([`line`,`card`,`pill`]).default(`line`),position:n([`top`,`left`]).default(`top`),items:o(u({label:S,icon:p().optional(),children:o(d()).describe(`Child components`)})),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({title:S.optional(),bordered:r().default(!0),actions:o(p()).optional(),body:o(d()).optional().describe(`Card content components (slot)`),footer:o(d()).optional().describe(`Card footer components (slot)`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({columns:n([`1`,`2`,`3`,`4`]).default(`2`).describe(`Number of columns for field layout (1-4)`),layout:n([`auto`,`custom`]).default(`auto`).describe(`Layout mode: auto uses object compactLayout, custom uses explicit sections`),sections:o(p()).optional().describe(`Section IDs to show (required when layout is "custom")`),fields:o(p()).optional().describe(`Explicit field list to display (optional, overrides compactLayout)`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({objectName:p().describe(`Related object name (e.g., "task", "opportunity")`),relationshipField:p().describe(`Field on related object that points to this record (e.g., "account_id")`),columns:o(p()).describe(`Fields to display in the related list`),sort:c([p(),o(u({field:p(),order:n([`asc`,`desc`])}))]).optional().describe(`Sort order for related records`),limit:m().int().positive().default(5).describe(`Number of records to display initially`),filter:o(I).optional().describe(`Additional filter criteria for related records`),title:S.optional().describe(`Custom title for the related list`),showViewAll:r().default(!0).describe(`Show "View All" link to see all related records`),actions:o(p()).optional().describe(`Action IDs available for related records`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({fields:o(c([p(),u({name:p().describe(`Field name on the record`),label:p().optional().describe(`Display label (overrides schema label)`),icon:p().optional().describe(`Icon name (lucide icon key)`),type:p().optional().describe(`Override cell renderer type (rare)`)})]).describe(`Highlight field: bare name, or {name,label?,icon?,type?}`)).min(1).max(7).describe(`Key fields to highlight (1-7 fields max, typically displayed as prominent cards). Each item may be a bare field name or {name, label?, icon?, type?} for inline overrides.`),layout:n([`horizontal`,`vertical`]).default(`horizontal`).describe(`Layout orientation for highlight fields`),aria:C.optional().describe(`ARIA accessibility attributes`)});var Wt=u({types:o(Q).optional().describe(`Feed item types to show (default: all)`),filterMode:Ut.default(`all`).describe(`Default activity filter`),showFilterToggle:r().default(!0).describe(`Show filter dropdown in panel header`),limit:m().int().positive().default(20).describe(`Number of items to load per page`),showCompleted:r().default(!1).describe(`Include completed activities`),unifiedTimeline:r().default(!0).describe(`Mix field changes and comments in one timeline (Airtable style)`),showCommentInput:r().default(!0).describe(`Show "Leave a comment" input at the bottom`),enableMentions:r().default(!0).describe(`Enable @mentions in comments`),enableReactions:r().default(!1).describe(`Enable emoji reactions on feed items`),enableThreading:r().default(!1).describe(`Enable threaded replies on comments`),showSubscriptionToggle:r().default(!0).describe(`Show bell icon for record-level notification subscription`),aria:C.optional().describe(`ARIA accessibility attributes`)});u({position:n([`sidebar`,`inline`,`drawer`]).default(`sidebar`).describe(`Where to render the chatter panel`),width:c([p(),m()]).optional().describe(`Panel width (e.g., "350px", "30%")`),collapsible:r().default(!0).describe(`Whether the panel can be collapsed`),defaultCollapsed:r().default(!1).describe(`Whether the panel starts collapsed`),feed:Wt.optional().describe(`Embedded activity feed configuration`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({statusField:p().describe(`Field name representing the current status/stage`),stages:o(u({value:p(),label:S})).optional().describe(`Explicit stage definitions (if not using field metadata)`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({items:o(u({label:S,icon:p().optional(),collapsed:r().default(!1),children:o(d()).describe(`Child components`)})),allowMultiple:r().default(!1).describe(`Allow multiple panels to be expanded simultaneously`),aria:C.optional().describe(`ARIA accessibility attributes`)}),u({mode:n([`float`,`sidebar`,`inline`]).default(`float`).describe(`Display mode for the chat window`),agentId:p().optional().describe(`Specific AI agent to use`),context:s(p(),d()).optional().describe(`Contextual data to pass to the AI`),aria:C.optional().describe(`ARIA accessibility attributes`)}),x(()=>u({content:p().describe(`Text or Markdown content`),variant:n([`heading`,`subheading`,`body`,`caption`]).optional().default(`body`).describe(`Text style variant`),align:n([`left`,`center`,`right`]).optional().default(`left`).describe(`Text alignment`),aria:C.optional().describe(`ARIA accessibility attributes`)})),x(()=>u({object:p().describe(`Source object`),field:p().optional().describe(`Field to aggregate`),aggregate:n([`count`,`sum`,`avg`,`min`,`max`]).describe(`Aggregation function`),filter:G.optional().describe(`Filter criteria`),format:n([`number`,`currency`,`percent`]).optional().describe(`Number display format`),prefix:p().optional().describe(`Prefix text (e.g. "$")`),suffix:p().optional().describe(`Suffix text (e.g. "%")`),aria:C.optional().describe(`ARIA accessibility attributes`)})),x(()=>u({src:p().describe(`Image URL or attachment field`),alt:p().optional().describe(`Alt text for accessibility`),fit:n([`cover`,`contain`,`fill`]).optional().default(`cover`).describe(`Image object-fit mode`),height:m().optional().describe(`Fixed height in pixels`),aria:C.optional().describe(`ARIA accessibility attributes`)})),x(()=>u({label:S.describe(`Button display label`),variant:n([`primary`,`secondary`,`danger`,`ghost`,`link`]).optional().default(`primary`).describe(`Button visual variant`),size:n([`small`,`medium`,`large`]).optional().default(`medium`).describe(`Button size`),icon:p().optional().describe(`Icon name (Lucide icon)`),iconPosition:n([`left`,`right`]).optional().default(`left`).describe(`Icon position relative to label`),disabled:r().optional().default(!1).describe(`Disable the button`),aria:C.optional().describe(`ARIA accessibility attributes`)})),x(()=>u({object:p().describe(`Object to filter`),fields:o(p()).describe(`Filterable field names`),targetVariable:p().optional().describe(`Page variable to store filter state`),layout:n([`inline`,`dropdown`,`sidebar`]).optional().default(`inline`).describe(`Filter display layout`),showSearch:r().optional().default(!0).describe(`Show search input`),aria:C.optional().describe(`ARIA accessibility attributes`)})),x(()=>u({object:p().describe(`Object for the form`),fields:o(p()).optional().describe(`Fields to display (defaults to all editable fields)`),mode:n([`create`,`edit`]).optional().default(`create`).describe(`Form mode`),submitLabel:S.optional().describe(`Submit button label`),onSubmit:j.optional().describe(`Action expression on form submit (CEL)`),aria:C.optional().describe(`ARIA accessibility attributes`)})),x(()=>u({object:p().describe(`Object to pick records from`),displayField:p().describe(`Field to display as the record label`),searchFields:o(p()).optional().describe(`Fields to search against`),filter:G.optional().describe(`Filter criteria for available records`),multiple:r().optional().default(!1).describe(`Allow multiple record selection`),targetVariable:p().optional().describe(`Page variable to bind selected record ID(s)`),placeholder:S.optional().describe(`Placeholder text`),aria:C.optional().describe(`ARIA accessibility attributes`)})),u({context:p().optional()});var Gt=x(()=>u({minWidth:m().default(44).describe(`Minimum touch target width in pixels (WCAG 2.5.5: 44px)`),minHeight:m().default(44).describe(`Minimum touch target height in pixels (WCAG 2.5.5: 44px)`),padding:m().optional().describe(`Additional padding around touch target in pixels`),hitSlop:u({top:m().optional().describe(`Extra hit area above the element`),right:m().optional().describe(`Extra hit area to the right of the element`),bottom:m().optional().describe(`Extra hit area below the element`),left:m().optional().describe(`Extra hit area to the left of the element`)}).optional().describe(`Invisible hit area extension beyond the visible bounds`)}).describe(`Touch target sizing configuration (WCAG accessible)`)),Kt=x(()=>n([`swipe`,`pinch`,`long_press`,`double_tap`,`drag`,`rotate`,`pan`]).describe(`Touch gesture type`)),qt=x(()=>n([`up`,`down`,`left`,`right`])),Jt=x(()=>u({direction:o(qt).describe(`Allowed swipe directions`),threshold:m().optional().describe(`Minimum distance in pixels to recognize swipe`),velocity:m().optional().describe(`Minimum velocity (px/ms) to trigger swipe`)}).describe(`Swipe gesture recognition settings`)),Yt=x(()=>u({minScale:m().optional().describe(`Minimum scale factor (e.g., 0.5 for 50%)`),maxScale:m().optional().describe(`Maximum scale factor (e.g., 3.0 for 300%)`)}).describe(`Pinch/zoom gesture recognition settings`)),Xt=x(()=>u({duration:m().default(500).describe(`Hold duration in milliseconds to trigger long press`),moveTolerance:m().optional().describe(`Max movement in pixels allowed during press`)}).describe(`Long press gesture recognition settings`)),Zt=x(()=>u({type:Kt.describe(`Gesture type to configure`),label:S.optional().describe(`Descriptive label for the gesture action`),enabled:r().default(!0).describe(`Whether this gesture is active`),swipe:Jt.optional().describe(`Swipe gesture settings (when type is swipe)`),pinch:Yt.optional().describe(`Pinch gesture settings (when type is pinch)`),longPress:Xt.optional().describe(`Long press settings (when type is long_press)`)}).describe(`Per-gesture configuration`));x(()=>u({gestures:o(Zt).optional().describe(`Configured gesture recognizers`),touchTarget:Gt.optional().describe(`Touch target sizing and hit area`),hapticFeedback:r().optional().describe(`Enable haptic feedback on touch interactions`)}).merge(C.partial()).describe(`Touch and gesture interaction configuration`));var Qt=x(()=>u({enabled:r().default(!1).describe(`Enable focus trapping within this container`),initialFocus:p().optional().describe(`CSS selector for the element to focus on activation`),returnFocus:r().default(!0).describe(`Return focus to trigger element on deactivation`),escapeDeactivates:r().default(!0).describe(`Allow Escape key to deactivate the focus trap`)}).describe(`Focus trap configuration for modal-like containers`)),$t=x(()=>u({key:p().describe(`Key combination (e.g., "Ctrl+S", "Alt+N", "Escape")`),action:p().describe(`Action identifier to invoke when shortcut is triggered`),description:S.optional().describe(`Human-readable description of what the shortcut does`),scope:n([`global`,`view`,`form`,`modal`,`list`]).default(`global`).describe(`Scope in which this shortcut is active`)}).describe(`Keyboard shortcut binding`)),en=x(()=>u({tabOrder:n([`auto`,`manual`]).default(`auto`).describe(`Tab order strategy: auto (DOM order) or manual (explicit tabIndex)`),skipLinks:r().default(!1).describe(`Provide skip-to-content navigation links`),focusVisible:r().default(!0).describe(`Show visible focus indicators for keyboard users`),focusTrap:Qt.optional().describe(`Focus trap settings`),arrowNavigation:r().default(!1).describe(`Enable arrow key navigation between focusable items`)}).describe(`Focus and tab navigation management`));x(()=>u({shortcuts:o($t).optional().describe(`Registered keyboard shortcuts`),focusManagement:en.optional().describe(`Focus and tab order management`),rovingTabindex:r().default(!1).describe(`Enable roving tabindex pattern for composite widgets`)}).merge(C.partial()).describe(`Keyboard navigation and shortcut configuration`));var tn=x(()=>u({primary:p().describe(`Primary brand color (hex, rgb, or hsl)`),secondary:p().optional().describe(`Secondary brand color`),accent:p().optional().describe(`Accent color for highlights`),success:p().optional().describe(`Success state color (default: green)`),warning:p().optional().describe(`Warning state color (default: yellow)`),error:p().optional().describe(`Error state color (default: red)`),info:p().optional().describe(`Info state color (default: blue)`),background:p().optional().describe(`Background color`),surface:p().optional().describe(`Surface/card background color`),text:p().optional().describe(`Primary text color`),textSecondary:p().optional().describe(`Secondary text color`),border:p().optional().describe(`Border color`),disabled:p().optional().describe(`Disabled state color`),primaryLight:p().optional().describe(`Lighter shade of primary`),primaryDark:p().optional().describe(`Darker shade of primary`),secondaryLight:p().optional().describe(`Lighter shade of secondary`),secondaryDark:p().optional().describe(`Darker shade of secondary`)})),nn=x(()=>u({fontFamily:u({base:p().optional().describe(`Base font family (default: system fonts)`),heading:p().optional().describe(`Heading font family`),mono:p().optional().describe(`Monospace font family for code`)}).optional(),fontSize:u({xs:p().optional().describe(`Extra small font size (e.g., 0.75rem)`),sm:p().optional().describe(`Small font size (e.g., 0.875rem)`),base:p().optional().describe(`Base font size (e.g., 1rem)`),lg:p().optional().describe(`Large font size (e.g., 1.125rem)`),xl:p().optional().describe(`Extra large font size (e.g., 1.25rem)`),"2xl":p().optional().describe(`2X large font size (e.g., 1.5rem)`),"3xl":p().optional().describe(`3X large font size (e.g., 1.875rem)`),"4xl":p().optional().describe(`4X large font size (e.g., 2.25rem)`)}).optional(),fontWeight:u({light:m().optional().describe(`Light weight (default: 300)`),normal:m().optional().describe(`Normal weight (default: 400)`),medium:m().optional().describe(`Medium weight (default: 500)`),semibold:m().optional().describe(`Semibold weight (default: 600)`),bold:m().optional().describe(`Bold weight (default: 700)`)}).optional(),lineHeight:u({tight:p().optional().describe(`Tight line height (e.g., 1.25)`),normal:p().optional().describe(`Normal line height (e.g., 1.5)`),relaxed:p().optional().describe(`Relaxed line height (e.g., 1.75)`),loose:p().optional().describe(`Loose line height (e.g., 2)`)}).optional(),letterSpacing:u({tighter:p().optional().describe(`Tighter letter spacing (e.g., -0.05em)`),tight:p().optional().describe(`Tight letter spacing (e.g., -0.025em)`),normal:p().optional().describe(`Normal letter spacing (e.g., 0)`),wide:p().optional().describe(`Wide letter spacing (e.g., 0.025em)`),wider:p().optional().describe(`Wider letter spacing (e.g., 0.05em)`)}).optional()})),rn=x(()=>u({0:p().optional().describe(`0 spacing (0)`),1:p().optional().describe(`Spacing unit 1 (e.g., 0.25rem)`),2:p().optional().describe(`Spacing unit 2 (e.g., 0.5rem)`),3:p().optional().describe(`Spacing unit 3 (e.g., 0.75rem)`),4:p().optional().describe(`Spacing unit 4 (e.g., 1rem)`),5:p().optional().describe(`Spacing unit 5 (e.g., 1.25rem)`),6:p().optional().describe(`Spacing unit 6 (e.g., 1.5rem)`),8:p().optional().describe(`Spacing unit 8 (e.g., 2rem)`),10:p().optional().describe(`Spacing unit 10 (e.g., 2.5rem)`),12:p().optional().describe(`Spacing unit 12 (e.g., 3rem)`),16:p().optional().describe(`Spacing unit 16 (e.g., 4rem)`),20:p().optional().describe(`Spacing unit 20 (e.g., 5rem)`),24:p().optional().describe(`Spacing unit 24 (e.g., 6rem)`)})),an=x(()=>u({none:p().optional().describe(`No border radius (0)`),sm:p().optional().describe(`Small border radius (e.g., 0.125rem)`),base:p().optional().describe(`Base border radius (e.g., 0.25rem)`),md:p().optional().describe(`Medium border radius (e.g., 0.375rem)`),lg:p().optional().describe(`Large border radius (e.g., 0.5rem)`),xl:p().optional().describe(`Extra large border radius (e.g., 0.75rem)`),"2xl":p().optional().describe(`2X large border radius (e.g., 1rem)`),full:p().optional().describe(`Full border radius (50%)`)})),on=x(()=>u({none:p().optional().describe(`No shadow`),sm:p().optional().describe(`Small shadow`),base:p().optional().describe(`Base shadow`),md:p().optional().describe(`Medium shadow`),lg:p().optional().describe(`Large shadow`),xl:p().optional().describe(`Extra large shadow`),"2xl":p().optional().describe(`2X large shadow`),inner:p().optional().describe(`Inner shadow (inset)`)})),sn=x(()=>u({xs:p().optional().describe(`Extra small breakpoint (e.g., 480px)`),sm:p().optional().describe(`Small breakpoint (e.g., 640px)`),md:p().optional().describe(`Medium breakpoint (e.g., 768px)`),lg:p().optional().describe(`Large breakpoint (e.g., 1024px)`),xl:p().optional().describe(`Extra large breakpoint (e.g., 1280px)`),"2xl":p().optional().describe(`2X large breakpoint (e.g., 1536px)`)})),cn=x(()=>u({duration:u({fast:p().optional().describe(`Fast animation (e.g., 150ms)`),base:p().optional().describe(`Base animation (e.g., 300ms)`),slow:p().optional().describe(`Slow animation (e.g., 500ms)`)}).optional(),timing:u({linear:p().optional().describe(`Linear timing function`),ease:p().optional().describe(`Ease timing function`),ease_in:p().optional().describe(`Ease-in timing function`),ease_out:p().optional().describe(`Ease-out timing function`),ease_in_out:p().optional().describe(`Ease-in-out timing function`)}).optional()})),ln=x(()=>u({base:m().optional().describe(`Base z-index (e.g., 0)`),dropdown:m().optional().describe(`Dropdown z-index (e.g., 1000)`),sticky:m().optional().describe(`Sticky z-index (e.g., 1020)`),fixed:m().optional().describe(`Fixed z-index (e.g., 1030)`),modalBackdrop:m().optional().describe(`Modal backdrop z-index (e.g., 1040)`),modal:m().optional().describe(`Modal z-index (e.g., 1050)`),popover:m().optional().describe(`Popover z-index (e.g., 1060)`),tooltip:m().optional().describe(`Tooltip z-index (e.g., 1070)`)})),un=x(()=>n([`light`,`dark`,`auto`])),dn=x(()=>n([`compact`,`regular`,`spacious`])),fn=x(()=>n([`AA`,`AAA`]));x(()=>u({name:k.describe(`Unique theme identifier (snake_case)`),label:p().describe(`Human-readable theme name`),description:p().optional().describe(`Theme description`),mode:un.default(`light`).describe(`Theme mode (light, dark, or auto)`),colors:tn.describe(`Color palette configuration`),typography:nn.optional().describe(`Typography settings`),spacing:rn.optional().describe(`Spacing scale`),borderRadius:an.optional().describe(`Border radius scale`),shadows:on.optional().describe(`Box shadow effects`),breakpoints:sn.optional().describe(`Responsive breakpoints`),animation:cn.optional().describe(`Animation settings`),zIndex:ln.optional().describe(`Z-index scale for layering`),customVars:s(p(),p()).optional().describe(`Custom CSS variables (key-value pairs)`),logo:u({light:p().optional().describe(`Logo URL for light mode`),dark:p().optional().describe(`Logo URL for dark mode`),favicon:p().optional().describe(`Favicon URL`)}).optional().describe(`Logo assets`),extends:p().optional().describe(`Base theme to extend from`),density:dn.optional().describe(`Display density: compact, regular, or spacious`),wcagContrast:fn.optional().describe(`WCAG color contrast level (AA or AAA)`),rtl:r().optional().describe(`Enable right-to-left layout direction`),touchTarget:Gt.optional().describe(`Touch target sizing defaults`),keyboardNavigation:en.optional().describe(`Keyboard focus management settings`)}));var pn=x(()=>n([`cache_first`,`network_first`,`stale_while_revalidate`,`network_only`,`cache_only`]).describe(`Data fetching strategy for offline/online transitions`)),mn=x(()=>n([`client_wins`,`server_wins`,`manual`,`last_write_wins`]).describe(`How to resolve conflicts when syncing offline changes`)),hn=x(()=>u({strategy:pn.default(`network_first`).describe(`Sync fetch strategy`),conflictResolution:mn.default(`last_write_wins`).describe(`Conflict resolution policy`),retryInterval:m().optional().describe(`Retry interval in milliseconds between sync attempts`),maxRetries:m().optional().describe(`Maximum number of sync retry attempts`),batchSize:m().optional().describe(`Number of mutations to sync per batch`)}).describe(`Offline-to-online synchronization configuration`)),gn=x(()=>n([`indexeddb`,`localstorage`,`sqlite`]).describe(`Client-side storage backend for offline cache`)),_n=x(()=>n([`lru`,`lfu`,`fifo`]).describe(`Cache eviction policy`)),vn=x(()=>u({maxSize:m().optional().describe(`Maximum cache size in bytes`),ttl:m().optional().describe(`Time-to-live for cached entries in milliseconds`),persistStorage:gn.default(`indexeddb`).describe(`Storage backend`),evictionPolicy:_n.default(`lru`).describe(`Cache eviction policy when full`)}).describe(`Client-side offline cache configuration`));x(()=>u({enabled:r().default(!1).describe(`Enable offline support`),strategy:pn.default(`network_first`).describe(`Default offline fetch strategy`),cache:vn.optional().describe(`Cache settings for offline data`),sync:hn.optional().describe(`Sync settings for offline mutations`),offlineIndicator:r().default(!0).describe(`Show a visual indicator when offline`),offlineMessage:S.optional().describe(`Customizable offline status message shown to users`),queueMaxSize:m().optional().describe(`Maximum number of queued offline mutations`)}).describe(`Offline support configuration`));var yn=x(()=>n([`fade`,`slide_up`,`slide_down`,`slide_left`,`slide_right`,`scale`,`rotate`,`flip`,`none`]).describe(`Transition preset type`)),bn=x(()=>n([`linear`,`ease`,`ease_in`,`ease_out`,`ease_in_out`,`spring`]).describe(`Animation easing function`)),$=x(()=>u({preset:yn.optional().describe(`Transition preset to apply`),duration:m().optional().describe(`Transition duration in milliseconds`),easing:bn.optional().describe(`Easing function for the transition`),delay:m().optional().describe(`Delay before transition starts in milliseconds`),customKeyframes:p().optional().describe(`CSS @keyframes name for custom animations`),themeToken:p().optional().describe(`Reference to a theme animation token (e.g. "animation.duration.fast")`)}).describe(`Animation transition configuration`)),xn=x(()=>n([`on_mount`,`on_unmount`,`on_hover`,`on_focus`,`on_click`,`on_scroll`,`on_visible`]).describe(`Event that triggers the animation`)),Sn=x(()=>u({label:S.optional().describe(`Descriptive label for this animation configuration`),enter:$.optional().describe(`Enter/mount animation`),exit:$.optional().describe(`Exit/unmount animation`),hover:$.optional().describe(`Hover state animation`),trigger:xn.optional().describe(`When to trigger the animation`),reducedMotion:n([`respect`,`disable`,`alternative`]).default(`respect`).describe(`Accessibility: how to handle prefers-reduced-motion`)}).merge(C.partial()).describe(`Component-level animation configuration`)),Cn=x(()=>u({type:yn.default(`fade`).describe(`Page transition type`),duration:m().default(300).describe(`Transition duration in milliseconds`),easing:bn.default(`ease_in_out`).describe(`Easing function for the transition`),crossFade:r().default(!1).describe(`Whether to cross-fade between pages`)}).describe(`Page-level transition configuration`));x(()=>u({label:S.optional().describe(`Descriptive label for the motion configuration`),defaultTransition:$.optional().describe(`Default transition applied to all animations`),pageTransitions:Cn.optional().describe(`Page navigation transition settings`),componentAnimations:s(p(),Sn).optional().describe(`Component name to animation configuration mapping`),reducedMotion:r().default(!1).describe(`When true, respect prefers-reduced-motion and suppress animations globally`),enabled:r().default(!0).describe(`Enable or disable all animations globally`)}).describe(`Top-level motion and animation design configuration`));var wn=x(()=>n([`toast`,`snackbar`,`banner`,`alert`,`inline`]).describe(`Notification presentation style`)),Tn=x(()=>n([`info`,`success`,`warning`,`error`]).describe(`Notification severity level`)),En=x(()=>n([`top_left`,`top_center`,`top_right`,`bottom_left`,`bottom_center`,`bottom_right`]).describe(`Screen position for notification placement`)),Dn=x(()=>u({label:S.describe(`Action button label`),action:p().describe(`Action identifier to execute`),variant:n([`primary`,`secondary`,`link`]).default(`primary`).describe(`Button variant style`)}).describe(`Notification action button`));x(()=>u({type:wn.default(`toast`).describe(`Notification presentation style`),severity:Tn.default(`info`).describe(`Notification severity level`),title:S.optional().describe(`Notification title`),message:S.describe(`Notification message body`),icon:p().optional().describe(`Icon name override`),duration:m().optional().describe(`Auto-dismiss duration in ms, omit for persistent`),dismissible:r().default(!0).describe(`Allow user to dismiss the notification`),actions:o(Dn).optional().describe(`Action buttons`),position:En.optional().describe(`Override default position`)}).merge(C.partial()).describe(`Notification instance definition`)),x(()=>u({defaultPosition:En.default(`top_right`).describe(`Default screen position for notifications`),defaultDuration:m().default(5e3).describe(`Default auto-dismiss duration in ms`),maxVisible:m().default(5).describe(`Maximum number of notifications visible at once`),stackDirection:n([`up`,`down`]).default(`down`).describe(`Stack direction for multiple notifications`),pauseOnHover:r().default(!0).describe(`Pause auto-dismiss timer on hover`)}).describe(`Global notification system configuration`));var On=x(()=>n([`element`,`handle`,`grip_icon`]).describe(`Drag initiation method`)),kn=x(()=>n([`move`,`copy`,`link`,`none`]).describe(`Drop operation effect`)),An=x(()=>u({axis:n([`x`,`y`,`both`]).default(`both`).describe(`Constrain drag axis`),bounds:n([`parent`,`viewport`,`none`]).default(`none`).describe(`Constrain within bounds`),grid:h([m(),m()]).optional().describe(`Snap to grid [x, y] in pixels`)}).describe(`Drag movement constraints`)),jn=x(()=>u({label:S.optional().describe(`Accessible label for the drop zone`),accept:o(p()).describe(`Accepted drag item types`),maxItems:m().optional().describe(`Maximum items allowed in drop zone`),highlightOnDragOver:r().default(!0).describe(`Highlight drop zone when dragging over`),dropEffect:kn.default(`move`).describe(`Visual effect on drop`)}).merge(C.partial()).describe(`Drop zone configuration`)),Mn=x(()=>u({type:p().describe(`Drag item type identifier for matching with drop zones`),label:S.optional().describe(`Accessible label describing the draggable item`),handle:On.default(`element`).describe(`How to initiate drag`),constraint:An.optional().describe(`Drag movement constraints`),preview:n([`element`,`custom`,`none`]).default(`element`).describe(`Drag preview type`),disabled:r().default(!1).describe(`Disable dragging`)}).merge(C.partial()).describe(`Draggable item configuration`));x(()=>u({enabled:r().default(!1).describe(`Enable drag and drop`),dragItem:Mn.optional().describe(`Configuration for draggable item`),dropZone:jn.optional().describe(`Configuration for drop target`),sortable:r().default(!1).describe(`Enable sortable list behavior`),autoScroll:r().default(!0).describe(`Auto-scroll during drag near edges`),touchDelay:m().default(200).describe(`Delay in ms before drag starts on touch devices`)}).describe(`Drag and drop interaction configuration`));function Nn(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.name==`string`&&typeof t.objectName==`string`&&Array.isArray(t.columns)}function Pn(e){if(!Nn(e))return!1;let t=e;return t.type===`joined`&&Array.isArray(t.blocks)}export{re as i,Nn as n,z as r,Pn as t};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{$ as t,A as n,At as r,B as i,Bs as a,Fs as o,Ft as s,Gt as c,I as l,J as u,K as d,Ks as f,Kt as p,L as m,M as h,Mt as g,N as _,Oo as v,P as y,Ps as b,Qa as x,St as S,U as C,V as ee,Vs as w,Xa as T,Z as E,Za as D,_c as O,a as k,at as A,bc as j,c as M,d as N,dc as P,f as F,fc as I,gc as L,gs as te,gt as R,hs as ne,i as z,ic as B,it as V,j as H,k as U,ko as re,l as W,n as G,o as ie,oc as K,pc as ae,pt as q,qt as oe,r as se,rc as ce,rt as le,s as ue,sc as de,st as fe,t as pe,u as me,uc as he,ws as ge,yc as _e,yt as ve,zs as ye}from"./app-shell-CaJU0zqc.js";import{t as be}from"./vendor-react-BnXfQgq5.js";import{r as xe}from"./framework-CT7trS8g.js";import"./plugin-charts-BxPL3e--.js";import"./plugin-kanban-Cy0iBS_w.js";import"./plugin-calendar-N01daPoe.js";import"./plugins-views-CIpa21Ck.js";var Se=e(be(),1),J=e(j(),1),Y=w(),Ce=10080*60*1e3;function we(e){let t=e.flatMap(e=>(e.items||[]).flatMap(e=>[e.startDate,e.endDate])),n=Math.min(...t.map(e=>new Date(e).getTime())),r=Math.max(...t.map(e=>new Date(e).getTime()));return{minDate:new Date(n).toISOString().split(`T`)[0],maxDate:new Date(r).toISOString().split(`T`)[0]}}function Te(e,t,n,r){let i=new Date(e).getTime(),a=new Date(t).getTime(),o=new Date(n).getTime(),s=new Date(r).getTime()-o,c=i-o,l=a-i;return{start:c/s*100,width:l/s*100}}function X(e,t){let n=new Date(e);return t===`short`?n.toLocaleDateString():t===`long`?n.toLocaleDateString(`en-US`,{year:`numeric`,month:`long`,day:`numeric`}):n.toISOString().split(`T`)[0]}function Ee({label:e,color:n}){let r=n?{backgroundColor:`${n}22`,color:n,borderColor:`${n}55`}:void 0;return(0,Y.jsx)(`span`,{className:t(`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium`,!n&&`bg-muted text-muted-foreground border-transparent`),style:r,children:e})}function De(e){let t=[];for(let n of e){let e=n.group==null?``:String(n.group),r=t[t.length-1];r&&r.key===e?r.items.push(n):t.push({key:e,items:[n]})}return t}var Oe=({schema:e,className:n,...r})=>{let{variant:i=`vertical`,items:a=[],dateFormat:o=`short`,onItemClick:s}=e;if(i===`vertical`){let e=De(a),i=e.some(e=>e.key!==``),c=(e,n)=>{let r=e.color?{backgroundColor:`${e.color}33`,borderColor:e.color}:void 0,i=e.time?X(e.time,o):e.startDate?X(e.startDate,o):``,a=e.endDate&&e.endDate!==e.startDate?X(e.endDate,o):``,c=Array.isArray(e.meta)?e.meta:[];return(0,Y.jsxs)(Re,{density:`compact`,className:t(e.className,s&&`cursor-pointer`),onClick:()=>s?.(e),children:[(0,Y.jsx)(Be,{variant:e.color?`default`:e.variant||`default`,style:r,children:e.icon&&(0,Y.jsx)(`span`,{className:`text-xs`,children:e.icon})}),(0,Y.jsxs)(Ve,{children:[(i||a)&&(0,Y.jsxs)(Ue,{dateTime:e.time||e.startDate,className:`!mb-1 text-xs`,children:[i,a&&(0,Y.jsxs)(`span`,{className:`text-muted-foreground/70`,children:[` → `,a]})]}),e.title&&(0,Y.jsx)(He,{className:`text-sm sm:text-base mb-1`,children:e.title}),c.length>0&&(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1.5 mt-1 mb-1`,children:c.map(e=>(0,Y.jsx)(Ee,{label:e.label,color:e.color},e.key))}),e.description&&(0,Y.jsx)(We,{className:`text-sm text-muted-foreground line-clamp-2 sm:line-clamp-none`,children:e.description}),e.content&&V(e.content)]})]},n)};return i?(0,Y.jsx)(`div`,{className:t(`px-4 sm:px-6 py-2`,n),...r,children:e.map((e,t)=>(0,Y.jsxs)(`section`,{className:`mb-4`,children:[(0,Y.jsxs)(`header`,{className:`sticky top-0 z-10 -mx-4 sm:-mx-6 px-4 sm:px-6 py-1.5 backdrop-blur bg-background/90 text-xs font-semibold uppercase tracking-wide text-muted-foreground border-b`,children:[(0,Y.jsx)(`span`,{children:e.key}),(0,Y.jsx)(`span`,{className:`ml-2 text-muted-foreground/60 font-normal normal-case`,children:e.items.length})]}),(0,Y.jsx)(Ie,{className:`mt-3`,children:e.items.map((e,n)=>c(e,`${t}-${n}`))})]},`${e.key}-${t}`))}):(0,Y.jsx)(Ie,{className:n,...r,children:a.map((e,t)=>c(e,t))})}if(i===`horizontal`)return(0,Y.jsx)(Ge,{className:t(`overflow-x-auto [-webkit-overflow-scrolling:touch]`,n),...r,children:a.map((e,n)=>(0,Y.jsxs)(Ke,{className:t(e.className,s&&`cursor-pointer`),onClick:()=>s?.(e),children:[(0,Y.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,Y.jsx)(Be,{variant:e.variant||`default`,children:e.icon&&(0,Y.jsx)(`span`,{className:`text-xs`,children:e.icon})}),(0,Y.jsxs)(`div`,{className:`mt-4 text-center`,children:[e.time&&(0,Y.jsx)(Ue,{dateTime:e.time,children:X(e.time,o)}),e.title&&(0,Y.jsx)(He,{children:e.title}),e.description&&(0,Y.jsx)(We,{className:`text-center line-clamp-2 sm:line-clamp-none`,children:e.description}),e.content&&V(e.content)]})]}),n<a.length-1&&(0,Y.jsx)(`div`,{className:`absolute left-full w-16 border-t-2 border-gray-200 top-3`})]},n))});if(i===`gantt`){let i=we(a),c=e.minDate||i.minDate,l=e.maxDate||i.maxDate,u=e.timeScale||`month`,d=(()=>{let e=[],t=new Date(c),n=new Date(l);if(u===`month`){let r=new Date(t);for(;r<=n;)e.push(r.toLocaleDateString(`en-US`,{month:`short`,year:`numeric`})),r.setMonth(r.getMonth()+1)}else if(u===`week`){let r=new Date(t);for(;r<=n;)e.push(`Week ${Math.ceil((r.getTime()-t.getTime())/Ce)+1}`),r.setDate(r.getDate()+7)}else if(u===`day`){let r=new Date(t);for(;r<=n;)e.push(r.toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})),r.setDate(r.getDate()+1)}return e})();return(0,Y.jsxs)(qe,{className:t(`overflow-x-auto [-webkit-overflow-scrolling:touch]`,n),...r,children:[(0,Y.jsxs)(Je,{children:[(0,Y.jsx)(Ye,{className:`flex items-center px-2 sm:px-4 py-2 sm:py-3`,children:(0,Y.jsx)(`span`,{className:`font-semibold text-xs sm:text-sm`,children:e.rowLabel||`Items`})}),(0,Y.jsx)(Xe,{children:(0,Y.jsx)(`div`,{className:`flex h-full`,children:d.map((e,t)=>(0,Y.jsx)(`div`,{className:`flex-1 px-1 sm:px-2 py-2 sm:py-3 border-r text-xs font-medium text-center`,children:e},t))})})]}),(0,Y.jsx)(`div`,{children:(0,Y.jsxs)(`div`,{className:`flex`,children:[(0,Y.jsx)(Ye,{children:a.map((e,t)=>(0,Y.jsx)(Ze,{children:(0,Y.jsx)(Qe,{title:e.label,className:`truncate`,children:e.label})},t))}),(0,Y.jsx)(Xe,{className:`relative`,children:a.map((e,t)=>(0,Y.jsx)(Ze,{className:`relative`,children:(e.items||[]).map((n,r)=>{let i=Te(n.startDate,n.endDate,c,l);return(0,Y.jsx)($e,{start:i.start,width:i.width,variant:n.variant||`default`,onClick:()=>s?.(n,e,t,r),title:`${n.title||``}\n${X(n.startDate,o)} - ${X(n.endDate,o)}`,children:(0,Y.jsx)(et,{children:n.title})},r)})},t))})]})})]})}return null};I.register(`timeline`,Oe,{namespace:`plugin-timeline`,label:`Timeline`,category:`data-display`,inputs:[{name:`variant`,type:`enum`,enum:[`vertical`,`horizontal`,`gantt`],label:`Timeline Variant`,defaultValue:`vertical`},{name:`items`,type:`array`,label:`Timeline Items`,description:`For vertical/horizontal: Array of { time, title, description, variant, icon, content }. For gantt: Array of { label, items: [{ title, startDate, endDate, variant }] }`},{name:`dateFormat`,type:`enum`,enum:[`short`,`long`,`iso`],label:`Date Format`,defaultValue:`short`},{name:`timeScale`,type:`enum`,enum:[`day`,`week`,`month`],label:`Time Scale (Gantt only)`,defaultValue:`month`},{name:`rowLabel`,type:`string`,label:`Row Label (Gantt only)`,defaultValue:`Items`},{name:`minDate`,type:`string`,label:`Min Date (Gantt only)`,description:`Override auto-calculated min date (YYYY-MM-DD)`},{name:`maxDate`,type:`string`,label:`Max Date (Gantt only)`,description:`Override auto-calculated max date (YYYY-MM-DD)`},{name:`className`,type:`string`,label:`CSS Class`}],defaultProps:{variant:`vertical`,dateFormat:`short`,items:[{time:`2024-01-15`,title:`Project Started`,description:`Kickoff meeting and initial planning`,variant:`success`,icon:`🚀`},{time:`2024-02-01`,title:`First Milestone`,description:`Completed initial design phase`,variant:`info`,icon:`🎨`},{time:`2024-03-15`,title:`Beta Release`,description:`Released beta version to testers`,variant:`warning`,icon:`⚡`},{time:`2024-04-01`,title:`Launch`,description:`Official product launch`,variant:`success`,icon:`🎉`}]},examples:{vertical:{variant:`vertical`,dateFormat:`long`,items:[{time:`2024-01-15`,title:`Project Started`,description:`Kickoff meeting and initial planning`,variant:`success`},{time:`2024-02-01`,title:`First Milestone`,description:`Completed initial design phase`,variant:`info`}]},horizontal:{variant:`horizontal`,dateFormat:`short`,items:[{time:`2024-01-01`,title:`Q1`,description:`First quarter`,variant:`default`},{time:`2024-04-01`,title:`Q2`,description:`Second quarter`,variant:`info`},{time:`2024-07-01`,title:`Q3`,description:`Third quarter`,variant:`warning`},{time:`2024-10-01`,title:`Q4`,description:`Fourth quarter`,variant:`success`}]},gantt:{variant:`gantt`,dateFormat:`short`,timeScale:`month`,rowLabel:`Projects`,items:[{label:`Backend Development`,items:[{title:`API Design`,startDate:`2024-01-01`,endDate:`2024-01-31`,variant:`success`},{title:`Implementation`,startDate:`2024-02-01`,endDate:`2024-03-31`,variant:`info`}]},{label:`Frontend Development`,items:[{title:`UI Design`,startDate:`2024-01-15`,endDate:`2024-02-15`,variant:`warning`},{title:`Component Dev`,startDate:`2024-02-15`,endDate:`2024-04-15`,variant:`default`}]},{label:`Testing`,items:[{title:`QA Phase`,startDate:`2024-03-01`,endDate:`2024-04-30`,variant:`danger`}]}]}}});var ke={"timeline.bucket.overdue":`Overdue`,"timeline.bucket.today":`Today`,"timeline.bucket.tomorrow":`Tomorrow`,"timeline.bucket.thisWeek":`This week`,"timeline.bucket.nextWeek":`Next week`,"timeline.bucket.later":`Later`,"timeline.bucket.noDate":`No date`,"timeline.bucket.unassigned":`Unassigned`,"timeline.relative.today":`Today`,"timeline.relative.tomorrow":`Tomorrow`,"timeline.relative.yesterday":`Yesterday`,"timeline.relative.inDays":`In {{n}} days`,"timeline.relative.daysAgo":`{{n}} days ago`},Ae=`timeline.bucket.today`;function je(e,t){let n=ke[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n}function Me(){try{let e=O();return e.t(Ae)===Ae?{t:je}:{t:e.t}}catch{return{t:je}}}function Ne(){try{return ae()}catch{return{fieldOptionLabel:(e,t,n,r)=>r,translateOptions:(e,t,n)=>n,fieldLabel:(e,t,n)=>n}}}var Pe=B({mapping:B({title:K().optional(),date:K().optional(),description:K().optional(),variant:K().optional()}).optional(),objectName:K().optional(),titleField:K().optional(),dateField:K().optional(),startDateField:K().optional(),endDateField:K().optional(),descriptionField:K().optional(),groupByField:K().optional(),colorField:K().optional(),scale:f([`hour`,`day`,`week`,`month`,`quarter`,`year`]).optional()}),Fe=({schema:e,dataSource:t,className:n,onRowClick:r,onItemClick:a,...c})=>{let[l,u]=(0,J.useState)([]),[d,f]=(0,J.useState)(()=>{let t=Array.isArray(e.items)&&e.items.length>0,n=Array.isArray(c.data)&&c.data.length>0;return!t&&!n&&!!e.objectName}),[p,m]=(0,J.useState)(null),[h,g]=(0,J.useState)(0),[_,v]=(0,J.useState)(null),y=e.timeline;(0,J.useEffect)(()=>{let t=Pe.safeParse(e);t.success||console.warn(`[ObjectTimeline] Invalid timeline configuration:`,t.error.format())},[e]);let b=ye(e.bind);(0,J.useEffect)(()=>{let n=!0;return(async()=>{if(!(!t||typeof t.getObjectSchema!=`function`||!e.objectName))try{let r=await t.getObjectSchema(e.objectName);n&&v(r)}catch(e){console.warn(`Failed to fetch object def for ObjectTimeline`,e)}})(),()=>{n=!1}},[e.objectName,t]),(0,J.useEffect)(()=>{e.objectName&&!b&&!e.items&&!c.data?(async()=>{if(!t||typeof t.find!=`function`||!e.objectName){f(!1);return}f(!0);try{let n=he(_?.fields);u(P(await t.find(e.objectName,{options:{$top:100},...n.length>0?{$expand:n}:{}})))}catch(e){console.error(e),m(e)}finally{f(!1)}})():f(!1)},[e.objectName,t,b,e.items,c.data,h,_]);let x=c.data||b||l,{t:S}=Me(),{fieldOptionLabel:C}=Ne(),ee=y?.titleField??e.mapping?.title??e.titleField??`name`,w=y?.startDateField??e.mapping?.date??e.startDateField??e.dateField??`date`,T=y?.endDateField??e.endDateField??w,E=e.mapping?.description??e.descriptionField??`description`,D=e.mapping?.variant??`variant`,O=y?.groupByField??e.groupByField,k=y?.colorField??e.colorField,A=(0,J.useMemo)(()=>{if(e.items)return e.items;if(!x||!Array.isArray(x))return[];let t=_?.fields??{},n=e.objectName||``,r=e=>{if(!e||!t[e]?.options)return{};let n={};for(let r of t[e].options)r&&r.value!=null&&(n[String(r.value)]=r);return n},i=r(k),a=Array.isArray(y?.metaFields)?y.metaFields.filter(e=>typeof e==`string`&&e):[`status`,`priority`].filter(e=>t[e]),o={};for(let e of a)o[e]=r(e);let s=e=>{if(e==null||e===``)return;let t=i[String(e)];if(t?.color)return String(t.color);let n=String(e);if(/^#([0-9a-f]{3}){1,2}$/i.test(n)||n.startsWith(`rgb`)||n.startsWith(`hsl`))return n},c=(e,t,r)=>{if(t==null||t===``)return null;let i=r[String(t)];return{label:i?.label?C(n,e,String(t),i.label):String(t),color:i?.color}},l=x.map(e=>{let t=e[w],r=e[T],i=k?e[k]:void 0,l=O?e[O]:void 0,u=[];if(n)for(let t of a){let n=c(t,e[t],o[t]||{});n&&u.push({key:t,label:n.label,color:n.color})}return{title:e[ee],time:t,startDate:t,endDate:r,description:e[E],variant:e[D]||`default`,color:s(i),group:l,meta:u,_data:e}});l.sort((e,t)=>(e.startDate?new Date(e.startDate).getTime():1/0)-(t.startDate?new Date(t.startDate).getTime():1/0));let u=new Date,d=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime(),f=d(u),p=864e5,m=f-(u.getDay()+6)%7*p+7*p,h=m+7*p,g=e=>{if(!e)return S(`timeline.bucket.noDate`);let t=d(new Date(e));return Number.isNaN(t)?S(`timeline.bucket.noDate`):t<f?S(`timeline.bucket.overdue`):t===f?S(`timeline.bucket.today`):t===f+p?S(`timeline.bucket.tomorrow`):S(t<m?`timeline.bucket.thisWeek`:t<h?`timeline.bucket.nextWeek`:`timeline.bucket.later`)};if(O&&!l.every(e=>e.group==null||e.group===``)){let e=r(O);return l.map(t=>{let n=c(O,t.group,e);return{...t,group:n?n.label:t.group!=null&&t.group!==``?String(t.group):S(`timeline.bucket.unassigned`)}})}return l.map(e=>({...e,group:g(e.startDate)}))},[e.items,x,_,e.objectName,ee,w,T,E,D,k,O,S,C]),{ref:j,isRefreshing:M,pullDistance:N}=i({onRefresh:(0,J.useCallback)(async()=>{g(e=>e+1)},[]),enabled:!!e.objectName&&!!t}),F=o({navigation:e.navigation,objectName:e.objectName,onRowClick:r??a}),I=y?.scale??e.scale,L={...e,items:A||[],className:n||e.className,...I?{timeScale:I}:{},onItemClick:e=>{let t=e._data||e;F.handleClick(t),a?.(t)}};return p?(0,Y.jsxs)(`div`,{className:`p-4 text-destructive`,"data-testid":`timeline-error`,role:`alert`,children:[`Error loading timeline: `,p.message]}):d&&(!A||A.length===0)?(0,Y.jsxs)(`div`,{className:`flex flex-col h-full min-h-[200px] p-4 gap-3`,"data-testid":`timeline-loading`,role:`status`,"aria-live":`polite`,"aria-busy":`true`,children:[(0,Y.jsx)(`span`,{className:`sr-only`,children:`Loading timeline…`}),[0,1,2,3].map(e=>(0,Y.jsxs)(`div`,{className:`flex items-start gap-3`,style:{opacity:Math.max(.3,1-e*.18)},children:[(0,Y.jsx)(`div`,{className:`h-3 w-3 rounded-full bg-muted/70 animate-pulse mt-1.5 shrink-0`}),(0,Y.jsxs)(`div`,{className:`flex-1 space-y-2`,children:[(0,Y.jsx)(`div`,{className:`h-4 w-1/3 rounded bg-muted/70 animate-pulse`}),(0,Y.jsx)(`div`,{className:`h-3 w-2/3 rounded bg-muted/50 animate-pulse`})]})]},e))]}):(0,Y.jsxs)(`div`,{ref:j,className:`relative overflow-auto h-full min-w-0`,children:[N>0&&(0,Y.jsx)(`div`,{className:`flex items-center justify-center text-xs text-muted-foreground`,style:{height:N},children:M?`Refreshing…`:`Pull to refresh`}),(0,Y.jsx)(Oe,{schema:L}),F.isOverlay&&(0,Y.jsx)(s,{...F,title:`Timeline Item`,children:e=>(0,Y.jsx)(`div`,{className:`space-y-3`,children:Object.entries(e).map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:e.replace(/_/g,` `)}),(0,Y.jsx)(`span`,{className:`text-sm`,children:String(t??`—`)})]},e))})})]})},Ie=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`ol`,{ref:r,className:t(`relative ml-3 border-l border-gray-200`,e),...n}));Ie.displayName=`Timeline`;var Le=T(`ml-6`,{variants:{density:{default:`mb-10`,compact:`mb-3`,comfortable:`mb-6`}},defaultVariants:{density:`default`}}),Re=J.forwardRef(({className:e,density:n,...r},i)=>(0,Y.jsx)(`li`,{ref:i,className:t(Le({density:n}),e),...r}));Re.displayName=`TimelineItem`;var ze=T(`absolute -left-3 w-6 h-6 rounded-full border-2 flex items-center justify-center`,{variants:{variant:{default:`bg-blue-200 border-blue-400`,success:`bg-emerald-200 border-emerald-500`,warning:`bg-amber-200 border-amber-500`,danger:`bg-red-200 border-red-500`,info:`bg-purple-200 border-purple-500`,todo:`bg-slate-200 border-slate-400`,"in-progress":`bg-blue-200 border-blue-500`,done:`bg-emerald-200 border-emerald-500`}},defaultVariants:{variant:`default`}}),Be=J.forwardRef(({className:e,variant:n=`default`,...r},i)=>(0,Y.jsx)(`div`,{ref:i,className:t(ze({variant:n}),e),...r}));Be.displayName=`TimelineMarker`;var Ve=J.forwardRef(({className:e,...t},n)=>(0,Y.jsx)(`div`,{ref:n,className:e,...t}));Ve.displayName=`TimelineContent`;var He=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`h3`,{ref:r,className:t(`font-semibold text-lg mb-1`,e),...n}));He.displayName=`TimelineTitle`;var Ue=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`time`,{ref:r,className:t(`text-sm font-normal text-gray-500 mb-2 block`,e),...n}));Ue.displayName=`TimelineTime`;var We=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`p`,{ref:r,className:t(`text-base text-gray-700`,e),...n}));We.displayName=`TimelineDescription`;var Ge=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`relative flex overflow-x-auto py-8`,e),...n}));Ge.displayName=`TimelineHorizontal`;var Ke=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`shrink-0 w-64 relative`,e),...n}));Ke.displayName=`TimelineHorizontalItem`;var qe=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`relative w-full border rounded-lg overflow-hidden`,e),...n}));qe.displayName=`TimelineGantt`;var Je=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`flex border-b bg-gray-50`,e),...n}));Je.displayName=`TimelineGanttHeader`;var Ye=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`w-48 border-r bg-white`,e),...n}));Ye.displayName=`TimelineGanttRowLabels`;var Xe=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`flex-1 overflow-x-auto`,e),...n}));Xe.displayName=`TimelineGanttGrid`;var Ze=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`flex items-center border-b min-h-12`,e),...n}));Ze.displayName=`TimelineGanttRow`;var Qe=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`px-4 py-2 font-medium text-sm truncate`,e),...n}));Qe.displayName=`TimelineGanttLabel`;var $e=J.forwardRef(({className:e,start:n=0,width:r=100,variant:i=`default`,...a},o)=>(0,Y.jsx)(`div`,{ref:o,className:t(`absolute h-8 rounded-md transition-colors cursor-pointer`,{default:`bg-blue-500 hover:bg-blue-600`,success:`bg-green-500 hover:bg-green-600`,warning:`bg-yellow-500 hover:bg-yellow-600`,danger:`bg-red-500 hover:bg-red-600`,info:`bg-purple-500 hover:bg-purple-600`}[i],e),style:{left:`${n}%`,width:`${r}%`},...a}));$e.displayName=`TimelineGanttBar`;var et=J.forwardRef(({className:e,...n},r)=>(0,Y.jsx)(`div`,{ref:r,className:t(`px-2 py-1 text-white text-xs font-medium truncate`,e),...n}));et.displayName=`TimelineGanttBarContent`;var tt=({schema:e,...t})=>{let{dataSource:n}=a()||{};return(0,Y.jsx)(Fe,{schema:e,dataSource:n,...t})};I.register(`object-timeline`,tt,{namespace:`plugin-timeline`,label:`Object Timeline`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`variant`,type:`enum`,enum:[`vertical`,`horizontal`,`gantt`],defaultValue:`vertical`}]}),I.register(`timeline`,tt,{namespace:`view`,label:`Timeline View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`variant`,type:`enum`,enum:[`vertical`,`horizontal`,`gantt`],defaultValue:`vertical`}]});var nt={"gantt.column.taskName":`Task Name`,"gantt.column.start":`Start`,"gantt.column.end":`End`,"gantt.toolbar.prevPeriod":`Previous period`,"gantt.toolbar.nextPeriod":`Next period`,"gantt.toolbar.zoomIn":`Zoom in`,"gantt.toolbar.zoomOut":`Zoom out`,"gantt.toolbar.jumpToToday":`Jump to today`,"gantt.toolbar.today":`Today`,"gantt.toolbar.showTaskList":`Show task list`,"gantt.toolbar.hideTaskList":`Hide task list`},rt=`gantt.column.taskName`;function it(e,t){let n=nt[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n}function at(){try{let e=O();return e.t(rt)===rt?{t:it}:{t:e.t}}catch{return{t:it}}}function ot(e){return e<640?35:e<1024?50:60}function st(e){return e<640?140:e<1024?220:320}function ct(e){return e>=280}function lt(e){return e<640?32:40}function ut({tasks:e,startDate:n,endDate:i,onTaskClick:a,onTaskUpdate:o,className:s,inlineEdit:c=!1}){let{t:l}=at(),[u,d]=J.useState(new Date),f=J.useRef(null),{width:p}=A(f),m=p||(typeof window<`u`?window.innerWidth:1024),h=m<640,g=lt(m),_=ot(m),[y,b]=J.useState(null),S=y??_,[C,ee]=J.useState(!1),w=J.useRef(!1);J.useEffect(()=>{!w.current&&h&&(ee(!0),w.current=!0)},[h]);let T=C?0:st(m),E=ct(T),[O,k]=J.useState(null),[j,M]=J.useState({}),[N,P]=J.useState(null),F=J.useRef(null);J.useEffect(()=>{F.current=N},[N]);let I=J.useRef(!1),L=J.useCallback(e=>{let t=1e3*60*60*24,n=t,r=e.dayDelta*t,i=new Date(e.originStart),a=new Date(e.originEnd);return e.mode===`move`?(i=new Date(e.originStart.getTime()+r),a=new Date(e.originEnd.getTime()+r)):e.mode===`resize-left`?(i=new Date(e.originStart.getTime()+r),a.getTime()-i.getTime()<n&&(i=new Date(a.getTime()-n))):e.mode===`resize-right`&&(a=new Date(e.originEnd.getTime()+r),a.getTime()-i.getTime()<n&&(a=new Date(i.getTime()+n))),{start:i,end:a}},[]);J.useEffect(()=>{if(!N)return;let t=e=>{let t=F.current;if(!t)return;let n=Math.round((e.clientX-t.originClientX)/Math.max(S,1));n!==t.dayDelta&&P({...t,dayDelta:n})},n=()=>{let t=F.current;if(t){if(t.dayDelta!==0){let n=e.find(e=>e.id===t.taskId);if(n&&o){let{start:e,end:r}=L(t);o(n,{start:e,end:r})}I.current=!0,window.setTimeout(()=>{I.current=!1},0)}P(null)}};return window.addEventListener(`pointermove`,t),window.addEventListener(`pointerup`,n),window.addEventListener(`pointercancel`,n),()=>{window.removeEventListener(`pointermove`,t),window.removeEventListener(`pointerup`,n),window.removeEventListener(`pointercancel`,n)}},[N,S,e,o,L]);let R=J.useCallback((e,t,n)=>{o&&(n.stopPropagation(),n.preventDefault(),P({taskId:e.id,mode:t,originStart:new Date(e.start),originEnd:new Date(e.end),originClientX:n.clientX,dayDelta:0}))},[o]),z=J.useMemo(()=>{let t=n?new Date(n):new Date,r=i?new Date(i):new Date;return!n&&e.length>0&&(t=new Date(Math.min(...e.map(e=>e.start.getTime()))),t.setDate(t.getDate()-7)),!i&&e.length>0&&(r=new Date(Math.max(...e.map(e=>e.end.getTime()))),r.setDate(r.getDate()+14)),t.setHours(0,0,0,0),r.setHours(23,59,59,999),{start:t,end:r}},[n,i,e]),B=J.useMemo(()=>{let e=[],t=new Date(z.start);for(;t<=z.end;)e.push({date:new Date(t),label:t.getDate().toString(),isWeekend:t.getDay()===0||t.getDay()===6}),t.setDate(t.getDate()+1);return e},[z]),V=J.useRef(null),H=J.useRef(null),U=J.useRef(null),W=J.useRef(null),G=J.useRef(null),ie=J.useCallback(e=>{if(e.touches.length===2){let t=e.touches[0].clientX-e.touches[1].clientX,n=e.touches[0].clientY-e.touches[1].clientY;G.current={baseDistance:Math.max(1,Math.sqrt(t*t+n*n)),baseColumn:S}}},[S]),K=J.useCallback(e=>{if(e.touches.length!==2||!G.current)return;let t=e.touches[0].clientX-e.touches[1].clientX,n=e.touches[0].clientY-e.touches[1].clientY,r=Math.max(1,Math.sqrt(t*t+n*n))/G.current.baseDistance;b(Math.max(15,Math.min(120,Math.round(G.current.baseColumn*r))))},[]),ae=J.useCallback(()=>{G.current=null},[]),q=J.useMemo(()=>{let e=new Date;if(e<z.start||e>z.end)return null;let t=(e.getTime()-z.start.getTime())/(1440*60*1e3);return Math.round(t*S)},[z,S]),oe=J.useCallback(()=>{if(q==null||!W.current)return;let e=Math.max(0,q-W.current.clientWidth/2);W.current.scrollTo({left:e,behavior:`smooth`})},[q]),se=e=>{V.current&&(V.current.scrollLeft=e.currentTarget.scrollLeft),H.current&&(H.current.scrollTop=e.currentTarget.scrollTop)},ce=e=>{z.end.getTime()-z.start.getTime();let t=S,n=1e3*60*60*24,r=e.start.getTime()-z.start.getTime(),i=e.end.getTime()-e.start.getTime();return{left:r/n*t,width:Math.max(i/n*t,t)}};return(0,Y.jsxs)(`div`,{ref:f,className:t(`flex flex-col h-full bg-background overflow-hidden min-w-0`,s),children:[(0,Y.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 p-2 border-b bg-card`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,"aria-label":l(`gantt.toolbar.prevPeriod`),children:(0,Y.jsx)(te,{className:`h-4 w-4`})}),(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,"aria-label":l(`gantt.toolbar.nextPeriod`),children:(0,Y.jsx)(ne,{className:`h-4 w-4`})}),(0,Y.jsx)(`span`,{className:`font-semibold text-xs sm:text-sm`,children:z.start.toLocaleDateString(void 0,{month:`long`,year:`numeric`})})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex bg-muted rounded-md p-1`,children:[(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>b(Math.max(15,S-10)),"aria-label":l(`gantt.toolbar.zoomOut`),children:(0,Y.jsx)(x,{className:`h-3 w-3`})}),(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,className:`h-6 w-6`,onClick:()=>b(Math.min(120,S+10)),"aria-label":l(`gantt.toolbar.zoomIn`),children:(0,Y.jsx)(D,{className:`h-3 w-3`})})]}),(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,onClick:()=>ee(e=>!e),"aria-label":l(C?`gantt.toolbar.showTaskList`:`gantt.toolbar.hideTaskList`),"aria-pressed":C,"data-testid":`gantt-toggle-task-list`,children:(0,Y.jsx)(C?v:re,{className:`h-4 w-4`})}),(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,onClick:oe,disabled:q==null,"aria-label":l(`gantt.toolbar.jumpToToday`),"data-testid":`gantt-jump-today`,children:(0,Y.jsx)(ge,{className:`h-4 w-4`})})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`flex border-b bg-muted/30 shrink-0 h-10 sm:h-[50px]`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center font-medium text-xs text-muted-foreground px-2 sm:px-4 border-r bg-card z-20 shadow-sm`,style:{width:T,minWidth:T},children:[(0,Y.jsx)(`div`,{className:`flex-1 truncate`,children:l(`gantt.column.taskName`)}),E&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`w-16 sm:w-20 text-right`,children:l(`gantt.column.start`)}),(0,Y.jsx)(`div`,{className:`w-16 sm:w-20 text-right`,children:l(`gantt.column.end`)})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-hidden`,ref:V,children:(0,Y.jsx)(`div`,{className:`flex h-full`,style:{width:B.length*S},children:B.map((e,n)=>(0,Y.jsxs)(`div`,{className:t(`flex flex-col items-center justify-center border-r text-xs text-muted-foreground h-full`,e.isWeekend&&`bg-muted/50`),style:{width:S,minWidth:S},children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground`,children:e.label}),(0,Y.jsx)(`span`,{className:`text-[10px] opacity-70`,children:e.date.toLocaleDateString(void 0,{weekday:`narrow`})})]},n))})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,Y.jsx)(`div`,{className:`overflow-hidden border-r bg-card z-10 shadow-sm`,ref:H,style:{width:T,minWidth:T},children:e.map(e=>{let t=c&&O===e.id;return(0,Y.jsxs)(`div`,{className:`group/task-row flex items-center border-b px-2 sm:px-4 hover:bg-accent/50 cursor-pointer transition-colors touch-manipulation`,style:{height:g},onClick:()=>!t&&a?.(e),onDoubleClick:()=>{c&&o&&(k(e.id),M({title:e.title,start:e.start.toLocaleDateString(`en-CA`),end:e.end.toLocaleDateString(`en-CA`),progress:String(e.progress)}))},children:[(0,Y.jsxs)(`div`,{className:`flex-1 truncate font-medium text-xs sm:text-sm flex items-center gap-2`,children:[(0,Y.jsx)(`div`,{className:`w-2 h-2 rounded-full shrink-0`,style:{backgroundColor:e.color||`#3b82f6`}}),t?(0,Y.jsx)(`input`,{className:`border rounded px-1 py-0.5 text-xs w-full bg-background`,value:j.title||``,onChange:e=>M(t=>({...t,title:e.target.value})),onKeyDown:t=>{t.key===`Enter`?(o?.(e,{title:j.title,start:new Date(j.start),end:new Date(j.end),progress:Number(j.progress)||0}),k(null)):t.key===`Escape`&&k(null)},onClick:e=>e.stopPropagation(),autoFocus:!0}):(0,Y.jsxs)(`span`,{className:`flex flex-col min-w-0`,children:[(0,Y.jsx)(`span`,{className:`truncate`,children:e.title}),(0,Y.jsxs)(`span`,{className:`text-[10px] text-muted-foreground sm:hidden`,children:[e.start.toLocaleDateString(void 0,{month:`numeric`,day:`numeric`}),` → `,e.end.toLocaleDateString(void 0,{month:`numeric`,day:`numeric`})]})]})]}),(0,Y.jsx)(`div`,{className:`w-16 sm:w-20 text-right text-xs text-muted-foreground hidden sm:block`,hidden:!E,style:E?void 0:{display:`none`},children:t?(0,Y.jsx)(`input`,{type:`date`,className:`border rounded px-1 py-0.5 text-xs w-full bg-background`,value:j.start||``,onChange:e=>M(t=>({...t,start:e.target.value})),onClick:e=>e.stopPropagation()}):e.start.toLocaleDateString(void 0,{month:`numeric`,day:`numeric`})}),(0,Y.jsx)(`div`,{className:`w-16 sm:w-20 text-right text-xs text-muted-foreground hidden sm:block`,hidden:!E,style:E?void 0:{display:`none`},children:t?(0,Y.jsx)(`input`,{type:`date`,className:`border rounded px-1 py-0.5 text-xs w-full bg-background`,value:j.end||``,onChange:e=>M(t=>({...t,end:e.target.value})),onClick:e=>e.stopPropagation()}):e.end.toLocaleDateString(void 0,{month:`numeric`,day:`numeric`})})]},e.id)})}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto bg-background/50 relative [-webkit-overflow-scrolling:touch]`,ref:e=>{U.current=e,W.current=e},onScroll:se,onTouchStart:ie,onTouchMove:K,onTouchEnd:ae,"data-testid":`gantt-timeline`,children:(0,Y.jsxs)(`div`,{className:`relative`,style:{width:B.length*S},children:[q!=null&&(0,Y.jsx)(`div`,{className:`absolute top-0 bottom-0 w-px bg-red-500/80 z-20 pointer-events-none`,style:{left:q},"data-testid":`gantt-today-marker`,"aria-label":l(`gantt.toolbar.today`),children:(0,Y.jsx)(`div`,{className:`absolute -top-2 -translate-x-1/2 left-0 text-[10px] font-semibold text-white bg-red-500 rounded-sm px-1 py-0.5 whitespace-nowrap`,children:l(`gantt.toolbar.today`)})}),(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 flex pointer-events-none z-0`,children:B.map((e,n)=>(0,Y.jsx)(`div`,{className:t(`border-r h-full`,e.isWeekend&&`bg-muted/20`),style:{width:S,minWidth:S}},n))}),e.map(e=>{let n=ce(e),r=N?.taskId===e.id,i=n;if(r&&N){let t=L(N);i=ce({...e,start:t.start,end:t.end})}let s=!!o;return(0,Y.jsxs)(`div`,{className:`relative border-b hover:bg-black/5`,style:{height:g},children:[r&&(0,Y.jsx)(`div`,{className:`absolute top-1 sm:top-2 h-[calc(100%-8px)] sm:h-[calc(100%-16px)] rounded-sm border border-dashed border-primary/60 pointer-events-none`,style:{left:n.left,width:n.width,opacity:.35},"aria-hidden":`true`}),(0,Y.jsxs)(`div`,{className:t(`absolute top-1 sm:top-2 h-[calc(100%-8px)] sm:h-[calc(100%-16px)] rounded-sm bg-primary border border-primary-foreground/20 shadow-sm hover:brightness-110 flex items-center px-2 group select-none`,s?`cursor-grab active:cursor-grabbing`:`cursor-pointer`,r&&`ring-2 ring-primary/60 brightness-110 z-10`),style:{left:i.left,width:i.width,backgroundColor:e.color||`#3b82f6`},"data-testid":`gantt-task-bar-${e.id}`,onClick:()=>{I.current||a?.(e)},onPointerDown:s?t=>{t.button===0&&R(e,`move`,t)}:void 0,children:[s&&i.width>=14&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`absolute left-0 top-0 bottom-0 w-1.5 cursor-ew-resize hover:bg-white/40`,"data-testid":`gantt-task-resize-left-${e.id}`,onPointerDown:t=>{t.button===0&&R(e,`resize-left`,t)},onClick:e=>e.stopPropagation()}),(0,Y.jsx)(`div`,{className:`absolute right-0 top-0 bottom-0 w-1.5 cursor-ew-resize hover:bg-white/40`,"data-testid":`gantt-task-resize-right-${e.id}`,onPointerDown:t=>{t.button===0&&R(e,`resize-right`,t)},onClick:e=>e.stopPropagation()})]}),e.progress>0&&(0,Y.jsx)(`div`,{className:`absolute left-0 top-0 bottom-0 bg-black/20 rounded-l-sm pointer-events-none`,style:{width:`${e.progress}%`}}),(0,Y.jsx)(`span`,{className:`text-[10px] text-white font-medium truncate opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none`,children:r?`${L(N).start.toLocaleDateString(void 0,{month:`numeric`,day:`numeric`})} → ${L(N).end.toLocaleDateString(void 0,{month:`numeric`,day:`numeric`})}`:`${Math.round(e.progress)}%`})]})]},e.id)}),(0,Y.jsx)(`div`,{className:`absolute top-0 bottom-0 w-px bg-red-500 z-20 pointer-events-none`,style:{left:(new Date().getTime()-z.start.getTime())/(1e3*60*60*24)*S},children:(0,Y.jsx)(`div`,{className:`w-2 h-2 rounded-full bg-red-500 -ml-[3px]`})})]})]})})]})]})]})}function dt(e){return e.data?e.data:e.staticData?{provider:`value`,items:e.staticData}:e.objectName?{provider:`object`,object:e.objectName}:null}function ft(e){if(e){if(typeof e==`string`){let t=e.split(` `),n=t[0],r=t[1]?.toLowerCase()===`desc`?`desc`:`asc`;return{[n]:r}}if(Array.isArray(e))return e.reduce((e,t)=>(t.field&&t.order&&(e[t.field]=t.order),e),{})}}function pt(e){let t=null;if(e.startDateField&&e.endDateField)return t={startDateField:e.startDateField,endDateField:e.endDateField,titleField:e.titleField||`name`,progressField:e.progressField,dependenciesField:e.dependenciesField||e.dependencyField,colorField:e.colorField},t;if(e.gantt&&(t=e.gantt),t){let e=xe.safeParse(t);return e.success||console.warn(`[ObjectGantt] Invalid gantt configuration:`,e.error.format()),t}return null}var mt=({schema:e,dataSource:t,className:r,onTaskClick:i,onRowClick:a,...s})=>{let[c,l]=(0,J.useState)([]),[d,f]=(0,J.useState)(!0),[p,m]=(0,J.useState)(null),[h,_]=(0,J.useState)(null),v=dt(e),y=(0,J.useMemo)(()=>v,[JSON.stringify(v)]),b=pt(e),x=y?.provider===`value`;(0,J.useEffect)(()=>{(async()=>{try{if(f(!0),s.data&&Array.isArray(s.data)){l(s.data),f(!1);return}if(x&&y?.provider===`value`){l(y.items),f(!1);return}if(!t||typeof t.find!=`function`)throw Error(`DataSource required for object/api providers`);if(y?.provider===`object`){let n=y.object,r=he(h?.fields);l(P(await t.find(n,{$filter:e.filter,$orderby:ft(e.sort),...r.length>0?{$expand:r}:{}})))}else y?.provider===`api`&&(console.warn(`API provider not yet implemented for ObjectGantt`),l([]));f(!1)}catch(e){m(e),f(!1)}})()},[y,t,x,e.filter,e.sort,h]),(0,J.useEffect)(()=>{!x&&t&&(async()=>{try{if(!t)return;let n=y?.provider===`object`?y.object:e.objectName;if(!n)return;_(await t.getObjectSchema(n))}catch(e){console.error(`Failed to fetch object schema:`,e)}})()},[e.objectName,t,x,y]);let w=(0,J.useMemo)(()=>{if(!b||!c.length)return[];let{startDateField:e,endDateField:t,titleField:n,progressField:r,dependenciesField:i,colorField:a}=b,o=(e,t)=>{if(!t)return;let n=t.split(`.`),r=e;for(let e of n){if(r==null)return;r=r[e]}return r},s=e=>{let t=[o(e,n),e?.name,e?.title,e?.subject,e?.label,e?.account?.name,e?.opportunity?.name,e?.contact&&[e.contact.first_name,e.contact.last_name].filter(Boolean).join(` `),e?.id,e?._id];for(let e of t)if(e!=null&&String(e).trim()!==``)return String(e);return`Untitled`};return c.map((n,o)=>{let c=n[e],l=n[t],u=s(n),d=r?n[r]:0,f=i?n[i]:[],p=a?n[a]:void 0;if(!p){let e=n.status??n.state??n.priority??n.severity;if(e!=null&&e!==``){let t=C(void 0,e);t&&(p=ee(t))}}return{id:n.id||n._id||`task-${o}`,title:u,start:c?new Date(c):new Date,end:l?new Date(l):new Date,progress:Math.min(100,Math.max(0,d||0)),dependencies:Array.isArray(f)?f:[],color:p,data:n}}).filter(e=>!isNaN(e.start.getTime())&&!isNaN(e.end.getTime()))},[c,b]),T=e.navigation??{mode:`drawer`,width:`min(960px, 60vw)`},E=T.mode===`drawer`||T.mode===`modal`||T.mode===`split`||T.mode===`popover`,D=o({navigation:T,objectName:e.objectName,onRowClick:E?void 0:a}),O=(0,J.useCallback)(async(n,r)=>{if(!b)return;let i=y?.provider===`object`?y.object:e.objectName;if(!i||!t||typeof t.update!=`function`)return;let{startDateField:a,endDateField:o,titleField:s,progressField:u}=b,d={};if(r.start instanceof Date&&(d[a]=r.start.toISOString()),r.end instanceof Date&&(d[o]=r.end.toISOString()),typeof r.title==`string`&&s&&(d[s]=r.title),typeof r.progress==`number`&&u&&(d[u]=r.progress),Object.keys(d).length===0)return;let f=n.data?.id??n.data?._id??n.id;if(f==null)return;let p=c;l(e=>e.map(e=>String(e.id??e._id)===String(f)?{...e,...d}:e));try{await t.update(i,String(f),d)}catch(e){console.error(`[ObjectGantt] Failed to persist task update:`,e),l(p)}},[b,y,t,e.objectName,c]),[k,A]=(0,J.useState)(null),[j,M]=(0,J.useState)(!1),N=(0,J.useCallback)(e=>{A(e)},[]),F=(0,J.useCallback)(async()=>{if(!k)return;let n=y?.provider===`object`?y.object:e.objectName;if(!n||!t?.delete){A(null);return}let r=k.data?.id??k.data?._id??k.id;if(r==null){A(null);return}M(!0);let i=c;l(e=>e.filter(e=>String(e.id??e._id)!==String(r)));try{await t.delete(n,String(r)),A(null)}catch(e){console.error(`[ObjectGantt] Failed to delete:`,e),l(i),A(null)}finally{M(!1)}},[k,y,t,e.objectName,c]);return d?(0,Y.jsx)(`div`,{className:r,children:(0,Y.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,Y.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading Gantt chart...`})})}):p?(0,Y.jsx)(`div`,{className:r,children:(0,Y.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,Y.jsxs)(`div`,{className:`text-destructive`,children:[`Error: `,p.message]})})}):b?(0,Y.jsxs)(`div`,{className:r,children:[(0,Y.jsx)(`div`,{className:`h-[calc(100vh-200px)] min-h-[600px]`,children:(0,Y.jsx)(ut,{tasks:w,onTaskClick:e=>{D.handleClick(e.data),i?.(e.data)},onTaskUpdate:O,onTaskDelete:N,inlineEdit:!0})}),D.isOverlay&&D.isOpen&&D.selectedRecord&&(()=>{let r=y?.provider===`object`?y.object:e.objectName,i=D.selectedRecord,a=i.id??i._id;if(!r||a==null)return null;let o=b?.titleField?String(i[b.titleField]??`Task Details`):`Task Details`;return(0,Y.jsx)(n,{open:!0,onClose:D.close,title:o,record:i,objectName:r,recordId:a,dataSource:t,objectSchema:h,width:D.width,fullPageHref:U(r,a)??void 0,onFieldSave:async(e,n)=>{t?.update&&(await t.update(r,String(a),{[e]:n}),l(t=>t.map(t=>String(t.id??t._id)===String(a)?{...t,[e]:n}:t)))},onDelete:async()=>{t?.delete&&(await t.delete(r,String(a)),l(e=>e.filter(e=>String(e.id??e._id)!==String(a))))}})})(),(0,Y.jsx)(q,{open:!!k,onOpenChange:e=>{!e&&!j&&A(null)},children:(0,Y.jsxs)(g,{children:[(0,Y.jsxs)(le,{children:[(0,Y.jsx)(R,{children:`Delete this task?`}),(0,Y.jsx)(S,{children:k?(0,Y.jsxs)(Y.Fragment,{children:[`"`,k.title,`" will be permanently removed. This action cannot be undone.`]}):null})]}),(0,Y.jsxs)(ve,{children:[(0,Y.jsx)(u,{disabled:j,children:`Cancel`}),(0,Y.jsx)(fe,{onClick:e=>{e.preventDefault(),F()},disabled:j,"data-testid":`gantt-delete-confirm`,className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:j?`Deleting…`:`Delete`})]})]})})]}):(0,Y.jsx)(`div`,{className:r,children:(0,Y.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,Y.jsx)(`div`,{className:`text-muted-foreground`,children:`Gantt configuration required. Please specify startDateField, endDateField, and titleField.`})})})},ht=({schema:e})=>{let{dataSource:t}=a()||{};return(0,Y.jsx)(mt,{schema:e,dataSource:t})};I.register(`object-gantt`,ht,{namespace:`plugin-gantt`,label:`Object Gantt`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`gantt`,type:`object`,label:`Gantt Config`,description:`startDateField, endDateField, titleField, progressField, percentageField, colorField, dependenciesField`}]}),I.register(`gantt`,ht,{namespace:`view`,label:`Gantt View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`gantt`,type:`object`,label:`Gantt Config`,description:`startDateField, endDateField, titleField, progressField, percentageField, colorField, dependenciesField`}]});var gt=J.createContext(null);function _t(e,t){let n=Array.isArray(e)?e[0]:e?e.x:0,r=Array.isArray(e)?e[1]:e?e.y:0,i=Array.isArray(t)?t[0]:t?t.x:0,a=Array.isArray(t)?t[1]:t?t.y:0;return n===i&&r===a}function Z(e,t){if(e===t)return!0;if(!e||!t)return!1;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Z(e[n],t[n]))return!1;return!0}else if(Array.isArray(t))return!1;if(typeof e==`object`&&typeof t==`object`){let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(!t.hasOwnProperty(r)||!Z(e[r],t[r]))return!1;return!0}return!1}function vt(e){return{longitude:e.center.lng,latitude:e.center.lat,zoom:e.zoom,pitch:e.pitch,bearing:e.bearing,padding:e.padding}}function yt(e,t){let n=t.viewState||t,r={};if(`longitude`in n&&`latitude`in n&&(n.longitude!==e.center.lng||n.latitude!==e.center.lat)){let t=e.center.constructor;r.center=new t(n.longitude,n.latitude)}return`zoom`in n&&n.zoom!==e.zoom&&(r.zoom=n.zoom),`bearing`in n&&n.bearing!==e.bearing&&(r.bearing=n.bearing),`pitch`in n&&n.pitch!==e.pitch&&(r.pitch=n.pitch),n.padding&&e.padding&&!Z(n.padding,e.padding)&&(r.padding=n.padding),r}var bt=[`type`,`source`,`source-layer`,`minzoom`,`maxzoom`,`filter`,`layout`];function xt(e){if(!e)return null;if(typeof e==`string`||(`toJS`in e&&(e=e.toJS()),!e.layers))return e;let t={};for(let n of e.layers)t[n.id]=n;let n=e.layers.map(e=>{let n=null;`interactive`in e&&(n=Object.assign({},e),delete n.interactive);let r=t[e.ref];if(r){n||=Object.assign({},e),delete n.ref;for(let e of bt)e in r&&(n[e]=r[e])}return n||e});return{...e,layers:n}}var St={version:8,sources:{},layers:[]},Ct={minZoom:0,maxZoom:22,minPitch:0,maxPitch:85,maxBounds:[-180,-85.051129,180,85.051129],projection:`mercator`,renderWorldCopies:!0},wt={mousedown:`onMouseDown`,mouseup:`onMouseUp`,mouseover:`onMouseOver`,mousemove:`onMouseMove`,click:`onClick`,dblclick:`onDblClick`,mouseenter:`onMouseEnter`,mouseleave:`onMouseLeave`,mouseout:`onMouseOut`,contextmenu:`onContextMenu`,touchstart:`onTouchStart`,touchend:`onTouchEnd`,touchmove:`onTouchMove`,touchcancel:`onTouchCancel`},Tt={movestart:`onMoveStart`,move:`onMove`,moveend:`onMoveEnd`,dragstart:`onDragStart`,drag:`onDrag`,dragend:`onDragEnd`,zoomstart:`onZoomStart`,zoom:`onZoom`,zoomend:`onZoomEnd`,rotatestart:`onRotateStart`,rotate:`onRotate`,rotateend:`onRotateEnd`,pitchstart:`onPitchStart`,pitch:`onPitch`,pitchend:`onPitchEnd`},Et={wheel:`onWheel`,boxzoomstart:`onBoxZoomStart`,boxzoomend:`onBoxZoomEnd`,boxzoomcancel:`onBoxZoomCancel`,resize:`onResize`,load:`onLoad`,render:`onRender`,idle:`onIdle`,remove:`onRemove`,data:`onData`,styledata:`onStyleData`,sourcedata:`onSourceData`,error:`onError`},Dt=[`minZoom`,`maxZoom`,`minPitch`,`maxPitch`,`maxBounds`,`projection`,`renderWorldCopies`],Ot=[`scrollZoom`,`boxZoom`,`dragRotate`,`dragPan`,`keyboard`,`doubleClickZoom`,`touchZoomRotate`,`touchPitch`],kt=class e{constructor(e,t,n){this._map=null,this._internalUpdate=!1,this._hoveredFeatures=null,this._propsedCameraUpdate=null,this._styleComponents={},this._onEvent=e=>{let t=this.props[Et[e.type]];t?t(e):e.type===`error`&&console.error(e.error)},this._onCameraEvent=e=>{if(this._internalUpdate)return;e.viewState=this._propsedCameraUpdate||vt(this._map.transform);let t=this.props[Tt[e.type]];t&&t(e)},this._onCameraUpdate=e=>this._internalUpdate?e:(this._propsedCameraUpdate=vt(e),yt(e,this.props)),this._onPointerEvent=e=>{(e.type===`mousemove`||e.type===`mouseout`)&&this._updateHover(e);let t=this.props[wt[e.type]];t&&(this.props.interactiveLayerIds&&e.type!==`mouseover`&&e.type!==`mouseout`&&(e.features=this._hoveredFeatures||this._queryRenderedFeatures(e.point)),t(e),delete e.features)},this._MapClass=e,this.props=t,this._initialize(n)}get map(){return this._map}setProps(e){let t=this.props;this.props=e;let n=this._updateSettings(e,t),r=this._updateSize(e),i=this._updateViewState(e);this._updateStyle(e,t),this._updateStyleComponents(e),this._updateHandlers(e,t),(n||r||i&&!this._map.isMoving())&&this.redraw()}static reuse(t,n){let r=e.savedMaps.pop();if(!r)return null;let i=r.map,a=i.getContainer();for(n.className=a.className;a.childNodes.length>0;)n.appendChild(a.childNodes[0]);i._container=n;let o=i._resizeObserver;o&&(o.disconnect(),o.observe(n)),r.setProps({...t,styleDiffing:!1}),i.resize();let{initialViewState:s}=t;return s&&(s.bounds?i.fitBounds(s.bounds,{...s.fitBoundsOptions,duration:0}):r._updateViewState(s)),i.isStyleLoaded()?i.fire(`load`):i.once(`style.load`,()=>i.fire(`load`)),i._update(),r}_initialize(e){let{props:t}=this,{mapStyle:n=St}=t,r={...t,...t.initialViewState,container:e,style:xt(n)},i=r.initialViewState||r.viewState||r;if(Object.assign(r,{center:[i.longitude||0,i.latitude||0],zoom:i.zoom||0,pitch:i.pitch||0,bearing:i.bearing||0}),t.gl){let e=HTMLCanvasElement.prototype.getContext;HTMLCanvasElement.prototype.getContext=()=>(HTMLCanvasElement.prototype.getContext=e,t.gl)}let a=new this._MapClass(r);i.padding&&a.setPadding(i.padding),t.cursor&&(a.getCanvas().style.cursor=t.cursor),a.transformCameraUpdate=this._onCameraUpdate,a.on(`style.load`,()=>{this._styleComponents={light:a.getLight(),sky:a.getSky(),projection:a.getProjection?.(),terrain:a.getTerrain()},this._updateStyleComponents(this.props)}),a.on(`sourcedata`,()=>{this._updateStyleComponents(this.props)});for(let e in wt)a.on(e,this._onPointerEvent);for(let e in Tt)a.on(e,this._onCameraEvent);for(let e in Et)a.on(e,this._onEvent);this._map=a}recycle(){this.map.getContainer().querySelector(`[mapboxgl-children]`)?.remove(),e.savedMaps.push(this)}destroy(){this._map.remove()}redraw(){let e=this._map;e.style&&(e._frame&&=(e._frame.cancel(),null),e._render())}_updateSize(e){let{viewState:t}=e;if(t){let e=this._map;if(t.width!==e.transform.width||t.height!==e.transform.height)return e.resize(),!0}return!1}_updateViewState(e){let t=this._map,n=t.transform;if(!t.isMoving()){let r=yt(n,e);if(Object.keys(r).length>0)return this._internalUpdate=!0,t.jumpTo(r),this._internalUpdate=!1,!0}return!1}_updateSettings(e,t){let n=this._map,r=!1;for(let i of Dt)if((i in e||i in t)&&!Z(e[i],t[i])){r=!0;let t=i in e?e[i]:Ct[i];n[`set${i[0].toUpperCase()}${i.slice(1)}`]?.call(n,t)}return r}_updateStyle(e,t){if(e.cursor!==t.cursor&&(this._map.getCanvas().style.cursor=e.cursor||``),e.mapStyle!==t.mapStyle){let{mapStyle:t=St,styleDiffing:n=!0}=e,r={diff:n};`localIdeographFontFamily`in e&&(r.localIdeographFontFamily=e.localIdeographFontFamily),this._map.setStyle(xt(t),r)}}_updateStyleComponents({light:e,projection:t,sky:n,terrain:r}){let i=this._map,a=this._styleComponents;i.style?._loaded&&(e&&!Z(e,a.light)&&(a.light=e,i.setLight(e)),t&&!Z(t,a.projection)&&t!==a.projection?.type&&(a.projection=typeof t==`string`?{type:t}:t,i.setProjection?.(a.projection)),n&&!Z(n,a.sky)&&(a.sky=n,i.setSky(n)),r!==void 0&&!Z(r,a.terrain)&&(!r||i.getSource(r.source))&&(a.terrain=r,i.setTerrain(r)))}_updateHandlers(e,t){let n=this._map;for(let r of Ot){let i=e[r]??!0;Z(i,t[r]??!0)||(i?n[r].enable(i):n[r].disable())}}_queryRenderedFeatures(e){let t=this._map,{interactiveLayerIds:n=[]}=this.props;try{return t.queryRenderedFeatures(e,{layers:n.filter(t.getLayer.bind(t))})}catch{return[]}}_updateHover(e){let{props:t}=this;if(t.interactiveLayerIds&&(t.onMouseMove||t.onMouseEnter||t.onMouseLeave)){let t=e.type,n=this._hoveredFeatures?.length>0,r=this._queryRenderedFeatures(e.point),i=r.length>0;!i&&n&&(e.type=`mouseleave`,this._onPointerEvent(e)),this._hoveredFeatures=r,i&&!n&&(e.type=`mouseenter`,this._onPointerEvent(e)),e.type=t}else this._hoveredFeatures=null}};kt.savedMaps=[];var At=[`setMaxBounds`,`setMinZoom`,`setMaxZoom`,`setMinPitch`,`setMaxPitch`,`setRenderWorldCopies`,`setProjection`,`setStyle`,`addSource`,`removeSource`,`addLayer`,`removeLayer`,`setLayerZoomRange`,`setFilter`,`setPaintProperty`,`setLayoutProperty`,`setLight`,`setTerrain`,`setFog`,`remove`];function jt(e){if(!e)return null;let t=e.map,n={getMap:()=>t};for(let e of Mt(t))!(e in n)&&!At.includes(e)&&(n[e]=t[e].bind(t));return n}function Mt(e){let t=new Set,n=e;for(;n;){for(let r of Object.getOwnPropertyNames(n))r[0]!==`_`&&typeof e[r]==`function`&&r!==`fire`&&r!==`setEventedParent`&&t.add(r);n=Object.getPrototypeOf(n)}return Array.from(t)}var Nt=typeof document<`u`?J.useLayoutEffect:J.useEffect;function Pt(e,t){let{RTLTextPlugin:n,maxParallelImageRequests:r,workerCount:i,workerUrl:a}=t;if(n&&e.getRTLTextPluginStatus&&e.getRTLTextPluginStatus()===`unavailable`){let{pluginUrl:t,lazy:r=!0}=typeof n==`string`?{pluginUrl:n}:n;e.setRTLTextPlugin(t,e=>{e&&console.error(e)},r)}r!==void 0&&e.setMaxParallelImageRequests(r),i!==void 0&&e.setWorkerCount(i),a!==void 0&&e.setWorkerUrl(a)}var Ft=J.createContext(null);function It(t,n){let r=(0,J.useContext)(gt),[i,a]=(0,J.useState)(null),o=(0,J.useRef)(),{current:s}=(0,J.useRef)({mapLib:null,map:null});(0,J.useEffect)(()=>{let n=t.mapLib,i=!0,l;return Promise.resolve(n||c(()=>import(`./maplibre-gl-fFz1l9Ly.js`).then(t=>e(t.default,1)),[])).then(e=>{if(!i)return;if(!e)throw Error(`Invalid mapLib`);let n=`Map`in e?e:e.default;if(!n.Map)throw Error(`Invalid mapLib`);Pt(n,t),t.reuseMaps&&(l=kt.reuse(t,o.current)),l||=new kt(n.Map,t,o.current),s.map=jt(l),s.mapLib=n,a(l),r?.onMapMount(s.map,t.id)}).catch(e=>{let{onError:n}=t;n?n({type:`error`,target:null,originalEvent:null,error:e}):console.error(e)}),()=>{i=!1,l&&(r?.onMapUnmount(t.id),t.reuseMaps?l.recycle():l.destroy())}},[]),Nt(()=>{i&&i.setProps(t)}),(0,J.useImperativeHandle)(n,()=>s.map,[i]);let l=(0,J.useMemo)(()=>({position:`relative`,width:`100%`,height:`100%`,...t.style}),[t.style]);return J.createElement(`div`,{id:t.id,ref:o,style:l},i&&J.createElement(Ft.Provider,{value:s},J.createElement(`div`,{"mapboxgl-children":``,style:{height:`100%`}},t.children)))}var Lt=J.forwardRef(It),Rt=e(_e(),1),zt=/box|flex|grid|column|lineHeight|fontWeight|opacity|order|tabSize|zIndex/;function Q(e,t){if(!e||!t)return;let n=e.style;for(let e in t){let r=t[e];Number.isFinite(r)&&!zt.test(e)?n[e]=`${r}px`:n[e]=r}}function Bt(e,t){if(e===t)return null;let n=Vt(e),r=Vt(t),i=[];for(let e of r)n.has(e)||i.push(e);for(let e of n)r.has(e)||i.push(e);return i.length===0?null:i}function Vt(e){return new Set(e?e.trim().split(/\s+/):[])}var Ht=(0,J.memo)((0,J.forwardRef)((e,t)=>{let{map:n,mapLib:r}=(0,J.useContext)(Ft),i=(0,J.useRef)({props:e}),a=(0,J.useMemo)(()=>{let t=!1;J.Children.forEach(e.children,e=>{e&&(t=!0)});let n={...e,element:t?document.createElement(`div`):void 0},o=new r.Marker(n);return o.setLngLat([e.longitude,e.latitude]),o.getElement().addEventListener(`click`,e=>{i.current.props.onClick?.({type:`click`,target:o,originalEvent:e})}),o.on(`dragstart`,e=>{let t=e;t.lngLat=a.getLngLat(),i.current.props.onDragStart?.(t)}),o.on(`drag`,e=>{let t=e;t.lngLat=a.getLngLat(),i.current.props.onDrag?.(t)}),o.on(`dragend`,e=>{let t=e;t.lngLat=a.getLngLat(),i.current.props.onDragEnd?.(t)}),o},[]);(0,J.useEffect)(()=>(a.addTo(n.getMap()),()=>{a.remove()}),[]);let{longitude:o,latitude:s,offset:c,style:l,draggable:u=!1,popup:d=null,rotation:f=0,rotationAlignment:p=`auto`,pitchAlignment:m=`auto`}=e;(0,J.useEffect)(()=>{Q(a.getElement(),l)},[l]),(0,J.useImperativeHandle)(t,()=>a,[]);let h=i.current.props;(a.getLngLat().lng!==o||a.getLngLat().lat!==s)&&a.setLngLat([o,s]),c&&!_t(a.getOffset(),c)&&a.setOffset(c),a.isDraggable()!==u&&a.setDraggable(u),a.getRotation()!==f&&a.setRotation(f),a.getRotationAlignment()!==p&&a.setRotationAlignment(p),a.getPitchAlignment()!==m&&a.setPitchAlignment(m),a.getPopup()!==d&&a.setPopup(d);let g=Bt(h.className,e.className);if(g)for(let e of g)a.toggleClassName(e);return i.current.props=e,(0,Rt.createPortal)(e.children,a.getElement())})),Ut=(0,J.memo)((0,J.forwardRef)((e,t)=>{let{map:n,mapLib:r}=(0,J.useContext)(Ft),i=(0,J.useMemo)(()=>document.createElement(`div`),[]),a=(0,J.useRef)({props:e}),o=(0,J.useMemo)(()=>{let t={...e},n=new r.Popup(t);return n.setLngLat([e.longitude,e.latitude]),n.once(`open`,e=>{a.current.props.onOpen?.(e)}),n},[]);if((0,J.useEffect)(()=>{let e=e=>{a.current.props.onClose?.(e)};return o.on(`close`,e),o.setDOMContent(i).addTo(n.getMap()),()=>{o.off(`close`,e),o.isOpen()&&o.remove()}},[]),(0,J.useEffect)(()=>{Q(o.getElement(),e.style)},[e.style]),(0,J.useImperativeHandle)(t,()=>o,[]),o.isOpen()){let t=a.current.props;(o.getLngLat().lng!==e.longitude||o.getLngLat().lat!==e.latitude)&&o.setLngLat([e.longitude,e.latitude]),e.offset&&!Z(t.offset,e.offset)&&o.setOffset(e.offset),(t.anchor!==e.anchor||t.maxWidth!==e.maxWidth)&&(o.options.anchor=e.anchor,o.setMaxWidth(e.maxWidth));let n=Bt(t.className,e.className);if(n)for(let e of n)o.toggleClassName(e);a.current.props=e}return(0,Rt.createPortal)(e.children,i)}));function $(e,t,n,r){let i=(0,J.useContext)(Ft),a=(0,J.useMemo)(()=>e(i),[]);return(0,J.useEffect)(()=>{let e=r||n||t,o=typeof t==`function`&&typeof n==`function`?t:null,s=typeof n==`function`?n:typeof t==`function`?t:null,{map:c}=i;return c.hasControl(a)||(c.addControl(a,e?.position),o&&o(i)),()=>{s&&s(i),c.hasControl(a)&&c.removeControl(a)}},[]),a}function Wt(e){let t=$(({mapLib:t})=>new t.AttributionControl(e),{position:e.position});return(0,J.useEffect)(()=>{Q(t._container,e.style)},[e.style]),null}(0,J.memo)(Wt);function Gt(e){let t=$(({mapLib:t})=>new t.FullscreenControl({container:e.containerId&&document.getElementById(e.containerId)}),{position:e.position});return(0,J.useEffect)(()=>{Q(t._controlContainer,e.style)},[e.style]),null}(0,J.memo)(Gt);function Kt(e,t){let n=(0,J.useRef)({props:e}),r=$(({mapLib:t})=>{let r=new t.GeolocateControl(e),i=r._setupUI;return r._setupUI=()=>{r._container.hasChildNodes()||i()},r.on(`geolocate`,e=>{n.current.props.onGeolocate?.(e)}),r.on(`error`,e=>{n.current.props.onError?.(e)}),r.on(`outofmaxbounds`,e=>{n.current.props.onOutOfMaxBounds?.(e)}),r.on(`trackuserlocationstart`,e=>{n.current.props.onTrackUserLocationStart?.(e)}),r.on(`trackuserlocationend`,e=>{n.current.props.onTrackUserLocationEnd?.(e)}),r},{position:e.position});return n.current.props=e,(0,J.useImperativeHandle)(t,()=>r,[]),(0,J.useEffect)(()=>{Q(r._container,e.style)},[e.style]),null}(0,J.memo)((0,J.forwardRef)(Kt));function qt(e){let t=$(({mapLib:t})=>new t.NavigationControl(e),{position:e.position});return(0,J.useEffect)(()=>{Q(t._container,e.style)},[e.style]),null}var Jt=(0,J.memo)(qt);function Yt(e){let t=$(({mapLib:t})=>new t.ScaleControl(e),{position:e.position}),n=(0,J.useRef)(e),r=n.current;n.current=e;let{style:i}=e;return e.maxWidth!==void 0&&e.maxWidth!==r.maxWidth&&(t.options.maxWidth=e.maxWidth),e.unit!==void 0&&e.unit!==r.unit&&t.setUnit(e.unit),(0,J.useEffect)(()=>{Q(t._container,i)},[i]),null}(0,J.memo)(Yt);function Xt(e){let t=$(({mapLib:t})=>new t.TerrainControl(e),{position:e.position});return(0,J.useEffect)(()=>{Q(t._container,e.style)},[e.style]),null}(0,J.memo)(Xt);function Zt(e){let t=$(({mapLib:t})=>new t.LogoControl(e),{position:e.position});return(0,J.useEffect)(()=>{Q(t._container,e.style)},[e.style]),null}(0,J.memo)(Zt);var Qt=B({latitudeField:K().optional(),longitudeField:K().optional(),locationField:K().optional(),titleField:K().optional(),descriptionField:K().optional(),zoom:ce().optional(),center:de([ce(),ce()]).optional()});function $t(e){return e.data?e.data:e.staticData?{provider:`value`,items:e.staticData}:e.objectName?{provider:`object`,object:e.objectName}:null}function en(e){if(e){if(typeof e==`string`){let t=e.split(` `),n=t[0],r=t[1]?.toLowerCase()===`desc`?`desc`:`asc`;return{[n]:r}}if(Array.isArray(e))return e.reduce((e,t)=>(t.field&&t.order&&(e[t.field]=t.order),e),{})}}function tn(e){if(e.locationField||e.latitudeField)return{locationField:e.locationField,latitudeField:e.latitudeField,longitudeField:e.longitudeField,titleField:e.titleField||`name`,descriptionField:e.descriptionField,zoom:e.zoom,center:e.center};let t=null;if(e.filter&&typeof e.filter==`object`&&`map`in e.filter?t=e.filter.map:e.map&&(t=e.map),t){let e=Qt.safeParse(t);return e.success||console.warn(`[ObjectMap] Invalid map configuration:`,e.error.format()),t}return{latitudeField:`latitude`,longitudeField:`longitude`,locationField:`location`,titleField:`name`,descriptionField:`description`,zoom:10,center:[0,0]}}function nn(e,t){if(t.latitudeField&&t.longitudeField){let n=e[t.latitudeField],r=e[t.longitudeField];if(typeof n==`number`&&typeof r==`number`)return[n,r]}if(t.locationField){let n=e[t.locationField];if(typeof n==`object`&&n){let e=n.lat||n.latitude,t=n.lng||n.lon||n.longitude;if(typeof e==`number`&&typeof t==`number`)return[e,t]}if(typeof n==`string`){let e=n.split(`,`).map(e=>parseFloat(e.trim()));if(e.length===2&&!isNaN(e[0])&&!isNaN(e[1]))return[e[0],e[1]]}if(Array.isArray(n)&&n.length===2){let e=parseFloat(n[0]),t=parseFloat(n[1]);if(!isNaN(e)&&!isNaN(t))return[e,t]}}return null}function rn(e,t,n=50){if(e.length<=1||t>=15)return e.map(e=>({id:e.id,coordinates:e.coordinates,markers:[e],isCluster:!1}));let r=n/2**t,i=new Map;e.forEach(e=>{let t=`${Math.floor(e.coordinates[0]/r)}:${Math.floor(e.coordinates[1]/r)}`;i.has(t)||i.set(t,[]),i.get(t).push(e)});let a=[];return i.forEach((e,t)=>{if(e.length===1)a.push({id:e[0].id,coordinates:e[0].coordinates,markers:e,isCluster:!1});else{let n=e.reduce((e,t)=>e+t.coordinates[0],0)/e.length,r=e.reduce((e,t)=>e+t.coordinates[1],0)/e.length;a.push({id:`cluster-${t}`,coordinates:[n,r],markers:e,isCluster:!0})}}),a}var an=({schema:e,dataSource:n,className:r,onMarkerClick:i,onRowClick:a,onEdit:c,onDelete:l,enableClustering:u,clusterRadius:d=50,...f})=>{let[p,m]=(0,J.useState)([]),[h,g]=(0,J.useState)(!0),[_,v]=(0,J.useState)(null),[y,b]=(0,J.useState)(null),[x,S]=(0,J.useState)(null),[C,ee]=(0,J.useState)(``),w=E(),T=(0,J.useRef)(null),[D,O]=(0,J.useState)(null),[k,A]=(0,J.useState)(null),[j,M]=(0,J.useState)(!1),N=(0,J.useCallback)(()=>{if(typeof navigator>`u`||!navigator.geolocation){A(`Geolocation is not available in this browser.`);return}M(!0),A(null),navigator.geolocation.getCurrentPosition(e=>{let{longitude:t,latitude:n}=e.coords;O({lng:t,lat:n}),M(!1);try{T.current?.flyTo({center:[t,n],zoom:12,duration:800})}catch{}},e=>{M(!1),A(e.message||`Unable to retrieve location.`)},{enableHighAccuracy:!1,timeout:8e3,maximumAge:6e4})},[]),F=$t(e),I=(0,J.useMemo)(()=>F,[JSON.stringify(F)]),L=tn(e),te=I?.provider===`value`;(0,J.useEffect)(()=>{(async()=>{try{if(g(!0),f.data){let e=f.data;if(Array.isArray(e)){m(e),g(!1);return}}if(e.data){let t=e.data;if(Array.isArray(t)){m(t),g(!1);return}}if(te&&I?.provider===`value`){m(I.items),g(!1);return}if(!n||typeof n.find!=`function`)throw Error(`DataSource required for object/api providers`);if(I?.provider===`object`){let t=I.object,r=he(y?.fields);m(P(await n.find(t,{$filter:e.filter,$orderby:en(e.sort),...r.length>0?{$expand:r}:{}})))}else I?.provider===`api`&&(console.warn(`API provider not yet implemented for ObjectMap`),m([]));g(!1)}catch(e){v(e),g(!1)}})()},[I,n,te,e.filter,e.sort,y]),(0,J.useEffect)(()=>{!te&&n&&(async()=>{try{if(!n)return;let t=I?.provider===`object`?I.object:e.objectName;if(!t)return;b(await n.getObjectSchema(t))}catch(e){console.error(`Failed to fetch object schema:`,e)}})()},[e.objectName,n,te,I]);let{markers:R,invalidCount:ne}=(0,J.useMemo)(()=>{let e=0;return{markers:p.map((t,n)=>{let r=nn(t,L);if(!r)return e++,null;let i=L.titleField?t[L.titleField]:`Marker`,a=L.descriptionField?t[L.descriptionField]:void 0,[o,s]=r;return!isFinite(o)||!isFinite(s)||o<-90||o>90||s<-180||s>180?(e++,null):{id:t.id||t._id||`marker-${n}`,title:i,description:a,coordinates:[s,o],data:t}}).filter(e=>e!==null),invalidCount:e}},[p,L]),z=(0,J.useMemo)(()=>R.find(e=>e.id===x),[R,x]),[B,V]=(0,J.useState)(L.zoom||3),H=o({navigation:e.navigation,objectName:e.objectName,onRowClick:a}),U=(0,J.useMemo)(()=>{if(!C.trim())return R;let e=C.toLowerCase();return R.filter(t=>t.title?.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e))},[R,C]),re=(0,J.useMemo)(()=>u??(e.enableClustering||U.length>100)?rn(U,B,d):U.map(e=>({id:e.id,coordinates:e.coordinates,markers:[e],isCluster:!1})),[U,B,u,d,e]),W=(0,J.useMemo)(()=>{if(!U.length)return{longitude:L.center?.[1]||0,latitude:L.center?.[0]||0,zoom:L.zoom||2};let e=U.map(e=>e.coordinates[0]),t=U.map(e=>e.coordinates[1]),n=Math.min(...e),r=Math.max(...e),i=Math.min(...t),a=Math.max(...t);return{longitude:(n+r)/2,latitude:(i+a)/2,zoom:L.zoom||3}},[U,L]);return h?(0,Y.jsx)(`div`,{className:t(`min-w-0 overflow-hidden`,r),children:(0,Y.jsx)(`div`,{className:`flex items-center justify-center h-96 bg-muted rounded-lg border`,children:(0,Y.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading map...`})})}):_?(0,Y.jsx)(`div`,{className:t(`min-w-0 overflow-hidden`,r),children:(0,Y.jsx)(`div`,{className:`flex items-center justify-center h-96 bg-muted rounded-lg border`,children:(0,Y.jsxs)(`div`,{className:`text-destructive`,children:[`Error: `,_.message]})})}):(0,Y.jsxs)(`div`,{className:t(`min-w-0 overflow-hidden`,r),children:[ne>0&&(0,Y.jsx)(`div`,{className:`mb-2 p-2 text-sm text-yellow-800 bg-yellow-50 border border-yellow-200 rounded`,children:`${ne} record${ne===1?``:`s`} with missing or invalid coordinates excluded from the map.`}),R.length>0&&(0,Y.jsx)(`div`,{className:`mb-2`,children:(0,Y.jsx)(`input`,{type:`text`,value:C,onChange:e=>ee(e.target.value),placeholder:`Search locations…`,className:`w-full px-3 py-2 text-sm border rounded-md bg-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`})}),(0,Y.jsxs)(`div`,{className:`relative border rounded-lg overflow-hidden bg-muted h-[300px] sm:h-[400px] md:h-[500px] lg:h-[600px] w-full`,children:[(0,Y.jsxs)(Lt,{ref:e=>{T.current=e},initialViewState:W,style:{width:`100%`,height:`100%`},mapStyle:`https://demotiles.maplibre.org/style.json`,touchZoomRotate:!0,dragRotate:!0,touchPitch:!0,onZoom:e=>V(Math.round(e.viewState.zoom)),children:[(0,Y.jsx)(Jt,{position:`top-right`,showCompass:!0,showZoom:!0}),(0,Y.jsx)(`button`,{type:`button`,onClick:N,disabled:j,className:`absolute top-2 left-2 z-10 inline-flex items-center justify-center size-9 rounded-md bg-background/95 border shadow-sm hover:bg-background disabled:opacity-50`,"aria-label":`Show my location`,"data-testid":`map-geolocate`,children:(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:j?`⏳`:`🧭`})}),D&&(0,Y.jsx)(Ht,{longitude:D.lng,latitude:D.lat,anchor:`center`,children:(0,Y.jsx)(`div`,{className:`size-3 rounded-full bg-blue-500 ring-4 ring-blue-500/30 shadow`,"aria-label":`Your location`,"data-testid":`map-user-location`})}),re.map(e=>e.isCluster?(0,Y.jsx)(Ht,{longitude:e.coordinates[0],latitude:e.coordinates[1],anchor:`center`,onClick:t=>{t.originalEvent.stopPropagation();try{let t=Math.min(20,Math.max(B+2,8));T.current?.flyTo({center:[e.coordinates[0],e.coordinates[1]],zoom:t,duration:600})}catch{}},children:(0,Y.jsx)(`div`,{className:`flex items-center justify-center rounded-full bg-primary text-primary-foreground font-bold text-xs cursor-pointer hover:scale-110 transition-transform shadow-md`,style:{width:Math.min(48,24+e.markers.length*2),height:Math.min(48,24+e.markers.length*2)},title:`${e.markers.length} markers`,"data-testid":`map-cluster`,children:e.markers.length})},e.id):(0,Y.jsx)(Ht,{longitude:e.coordinates[0],latitude:e.coordinates[1],anchor:`bottom`,onClick:t=>{t.originalEvent.stopPropagation();let n=e.markers[0];S(n.id),H.handleClick(n.data),i?.(n.data)},children:(0,Y.jsx)(`div`,{className:`text-2xl cursor-pointer hover:scale-110 transition-transform`,children:`📍`})},e.id)),z&&!w&&(0,Y.jsx)(Ut,{longitude:z.coordinates[0],latitude:z.coordinates[1],anchor:`top`,onClose:()=>S(null),closeOnClick:!1,children:(0,Y.jsxs)(`div`,{className:`p-2 min-w-[150px] sm:min-w-[200px]`,children:[(0,Y.jsx)(`h3`,{className:`font-bold text-sm mb-1`,children:z.title}),z.description&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:z.description}),(0,Y.jsxs)(`div`,{className:`mt-2 text-xs flex gap-2`,children:[c&&(0,Y.jsx)(`button`,{className:`text-blue-500 hover:underline`,onClick:()=>c(z.data),children:`Edit`}),l&&(0,Y.jsx)(`button`,{className:`text-red-500 hover:underline`,onClick:()=>l(z.data),children:`Delete`})]})]})})]}),z&&w&&(0,Y.jsxs)(`div`,{className:`absolute inset-x-0 bottom-0 z-30 bg-background border-t shadow-lg rounded-t-2xl p-4 pb-[max(env(safe-area-inset-bottom),1rem)]`,role:`dialog`,"aria-label":`Location details`,"data-testid":`map-mobile-record-sheet`,children:[(0,Y.jsx)(`div`,{className:`mx-auto mb-2 h-1 w-10 rounded-full bg-muted`,"aria-hidden":`true`}),(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`h3`,{className:`text-sm font-semibold truncate`,children:z.title}),z.description&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground line-clamp-3`,children:z.description})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>S(null),className:`text-muted-foreground hover:text-foreground text-lg leading-none px-2`,"aria-label":`Close details`,"data-testid":`map-mobile-record-close`,children:`×`})]}),(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2 text-xs`,children:[c&&(0,Y.jsx)(`button`,{className:`px-3 py-1.5 rounded-md border bg-card hover:bg-accent`,onClick:()=>c(z.data),children:`Edit`}),l&&(0,Y.jsx)(`button`,{className:`px-3 py-1.5 rounded-md border border-destructive/30 text-destructive hover:bg-destructive/10`,onClick:()=>l(z.data),children:`Delete`})]})]}),k&&(0,Y.jsx)(`div`,{className:`absolute top-2 left-14 right-2 z-10 text-xs px-3 py-1.5 rounded-md bg-destructive/10 text-destructive border border-destructive/30`,children:k})]}),H.isOverlay&&(0,Y.jsx)(s,{...H,title:`Location Details`,children:e=>(0,Y.jsx)(`div`,{className:`space-y-3`,children:Object.entries(e).map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:e.replace(/_/g,` `)}),(0,Y.jsx)(`span`,{className:`text-sm`,children:String(t??`—`)})]},e))})})]})},on=({schema:e,...t})=>{let{dataSource:n}=a()||{};return(0,Y.jsx)(an,{schema:e,dataSource:n,...t})};console.log(`Registering object-map...`),I.register(`object-map`,on,{namespace:`plugin-map`,label:`Object Map`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`map`,type:`object`,label:`Map Config`,description:`latitudeField, longitudeField, titleField`}]}),I.register(`map`,on,{namespace:`view`,label:`Map View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`map`,type:`object`,label:`Map Config`,description:`latitudeField, longitudeField, titleField`}]});var sn=`/_account`;function cn(){return typeof window>`u`?`/`:window.location.pathname+window.location.search}function ln(e){let t=e??cn(),n=`${sn}/login?redirect=${encodeURIComponent(t)}`;window.location.assign(n)}function un(e){let t=e??cn(),n=`${sn}/register?redirect=${encodeURIComponent(t)}`;window.location.assign(n)}function dn(){window.location.assign(`${sn}/forgot-password`)}function fn({redirect:e}={}){return(0,J.useEffect)(()=>{ln(e)},[e]),(0,Y.jsx)(`div`,{className:`flex min-h-screen w-full items-center justify-center bg-background`,children:(0,Y.jsx)(`div`,{className:`h-8 w-8 animate-spin rounded-full border-4 border-muted border-t-primary`})})}var pn=[`cloud_control`];function mn(){let{apps:e,loading:t}=b();if(t)return(0,Y.jsx)(M,{});let n=new Set((e??[]).map(e=>e?.name).filter(Boolean));for(let e of pn)if(n.has(e))return(0,Y.jsx)(h,{to:`/apps/${e}`,replace:!0});return(0,Y.jsx)(h,{to:`/home`,replace:!0})}var hn=`/api/v1`;function gn(e){let t=typeof e==`string`?parseInt(e,10):e;return t===1||t===2||t===3||t===4?t:2}function _n(e){if(Array.isArray(e))return e.map(e=>{if(typeof e==`string`)return{value:e,label:e};if(e&&typeof e==`object`){let t=String(e.value??e.id??``);return{value:t,label:String(e.label??e.name??t)}}return{value:String(e),label:String(e)}})}function vn(e,t){let n=e.sections??e.groups??[],r=t?.fields??{};return n.map(e=>{let t=gn(e.columns),n=[];for(let t of e.fields??[]){let e=typeof t==`string`?{field:t}:{...t},i=r[e.field]??{type:`text`};n.push({name:e.field,label:e.label??i.label??e.field,type:i.type??`text`,required:e.required??i.required??!1,readonly:e.readonly??!1,hidden:e.hidden??!1,placeholder:e.placeholder??i.placeholder,helpText:e.helpText??i.helpText,defaultValue:i.defaultValue,options:_n(i.options),maxLength:i.maxLength,colSpan:e.colSpan??1})}return{label:e.label,columns:t,collapsible:!!e.collapsible,collapsed:!!e.collapsed,fields:n}})}function yn(e,t){let n={};for(let r of e){r.defaultValue!==void 0&&(n[r.name]=r.defaultValue);let e=t.get(`prefill_${r.name}`);e!==null&&(n[r.name]=e)}return n}async function bn(e,t){return fetch(`${hn}${e}`,{credentials:`include`,headers:{"Content-Type":`application/json`,...t?.headers??{}},...t})}async function xn(e){let t=await bn(`/forms/${encodeURIComponent(e)}`);if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`Failed to load form (${t.status}): ${e||t.statusText}`)}let n=await t.json();return{label:n.label??n.form?.label??n.object,object:n.object,form:n.form,objectSchema:n.objectSchema}}async function Sn(e){let t=await bn(`/meta/view/${encodeURIComponent(e)}`);if(!t.ok)throw Error(`Form metadata not found: view/${e}`);let n=await t.json(),r=n?.item??n,i=r?.spec??r,a=i?.object;if(!a)throw Error(`FormView "${e}" is missing an "object" target`);let o=null;try{let e=await bn(`/meta/object/${encodeURIComponent(a)}`);if(e.ok){let t=await e.json(),n=t?.item??t,r=n?.spec??n;r?.fields&&typeof r.fields==`object`&&(o={name:r.name??a,label:r.label,fields:r.fields})}}catch{}return{label:i?.label??e,object:a,form:i,objectSchema:o}}async function Cn(e,t){let n=await bn(`/forms/${encodeURIComponent(e)}/submit`,{method:`POST`,body:JSON.stringify(t)});if(!n.ok){let e=await n.text().catch(()=>``);throw Error(`Submit failed (${n.status}): ${e||n.statusText}`)}return n.json().catch(()=>({}))}async function wn(e,t){let n=await bn(`/data/${encodeURIComponent(e)}`,{method:`POST`,body:JSON.stringify(t)});if(!n.ok){let e=await n.text().catch(()=>``);throw Error(`Create failed (${n.status}): ${e||n.statusText}`)}return n.json().catch(()=>({}))}var Tn=`w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50`;function En({field:e,value:t,onChange:n}){let r={id:`f_${e.name}`,name:e.name,required:e.required,disabled:e.readonly,placeholder:e.placeholder,className:Tn},i=t??``;switch(e.type){case`textarea`:case`paragraph`:case`long_text`:return(0,Y.jsx)(`textarea`,{...r,rows:5,maxLength:e.maxLength,value:String(i),onChange:e=>n(e.target.value)});case`number`:case`integer`:case`decimal`:case`currency`:return(0,Y.jsx)(`input`,{...r,type:`number`,value:i===``?``:Number(i),onChange:e=>n(e.target.value===``?null:Number(e.target.value))});case`email`:return(0,Y.jsx)(`input`,{...r,type:`email`,value:String(i),onChange:e=>n(e.target.value)});case`url`:return(0,Y.jsx)(`input`,{...r,type:`url`,value:String(i),onChange:e=>n(e.target.value)});case`password`:return(0,Y.jsx)(`input`,{...r,type:`password`,value:String(i),onChange:e=>n(e.target.value)});case`date`:return(0,Y.jsx)(`input`,{...r,type:`date`,value:String(i),onChange:e=>n(e.target.value)});case`time`:return(0,Y.jsx)(`input`,{...r,type:`time`,value:String(i),onChange:e=>n(e.target.value)});case`datetime`:case`timestamp`:return(0,Y.jsx)(`input`,{...r,type:`datetime-local`,value:String(i),onChange:e=>n(e.target.value)});case`boolean`:case`toggle`:case`checkbox`:return(0,Y.jsxs)(`label`,{className:`inline-flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(`input`,{id:r.id,name:r.name,type:`checkbox`,disabled:e.readonly,checked:!!i,onChange:e=>n(e.target.checked),className:`h-4 w-4 rounded border-input`}),(0,Y.jsx)(`span`,{children:e.placeholder??e.label})]});case`select`:case`picklist`:case`enum`:{let t=e.options??[];return(0,Y.jsxs)(`select`,{...r,value:String(i),onChange:e=>n(e.target.value),children:[(0,Y.jsx)(`option`,{value:``,disabled:e.required,children:e.placeholder??`— Select —`}),t.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))]})}case`radio`:return(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-3`,children:(e.options??[]).map(t=>(0,Y.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-sm`,children:[(0,Y.jsx)(`input`,{type:`radio`,name:e.name,value:t.value,checked:String(i)===t.value,disabled:e.readonly,onChange:()=>n(t.value)}),(0,Y.jsx)(`span`,{children:t.label})]},t.value))});default:return(0,Y.jsx)(`input`,{...r,type:`text`,maxLength:e.maxLength,value:String(i),onChange:e=>n(e.target.value)})}}function Dn({mode:e}){let t=l(),[n]=m(),r=(e===`public`?t.slug:t.name)??``,[i,a]=(0,J.useState)(!0),[o,s]=(0,J.useState)(null),[c,u]=(0,J.useState)(null),[d,f]=(0,J.useState)({}),[p,h]=(0,J.useState)(!1),[g,_]=(0,J.useState)(!1);(0,J.useEffect)(()=>{let t=!1;return a(!0),s(null),(e===`public`?xn(r):Sn(r)).then(e=>{t||(u(e),f(yn(vn(e.form,e.objectSchema).flatMap(e=>e.fields),n)))}).catch(e=>{t||s(e?.message??String(e))}).finally(()=>{t||a(!1)}),()=>{t=!0}},[e,r,n]);let v=(0,J.useMemo)(()=>c?vn(c.form,c.objectSchema):[],[c]),y=c?.form?.submitBehavior??{kind:`thank-you`};return i?(0,Y.jsx)(`div`,{className:`flex min-h-[60vh] items-center justify-center`,children:(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Loading…`})}):o&&!c?(0,Y.jsx)(`div`,{className:`mx-auto max-w-2xl p-6`,children:(0,Y.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:o})}):c?g&&y.kind===`thank-you`?(0,Y.jsx)(`div`,{className:`mx-auto max-w-2xl p-6`,children:(0,Y.jsxs)(`div`,{className:`rounded-md border bg-card p-6 text-center`,children:[(0,Y.jsx)(`h2`,{className:`mb-2 text-lg font-semibold`,children:y.title??`Thanks!`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:y.message??`Your submission has been received.`})]})}):g&&y.kind===`redirect`?(0,Y.jsx)(`div`,{className:`mx-auto max-w-2xl p-6 text-center text-sm text-muted-foreground`,children:`Redirecting…`}):(0,Y.jsxs)(`div`,{className:`mx-auto max-w-2xl p-4 sm:p-6`,children:[(0,Y.jsxs)(`header`,{className:`mb-6`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold`,children:c.label}),c.form?.label&&c.form.label!==c.label&&(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:c.form.label})]}),(0,Y.jsxs)(`form`,{onSubmit:async t=>{if(t.preventDefault(),c){h(!0),s(null);try{switch(e===`public`?await Cn(r,d):await wn(c.object,d),oe.success(`Submitted`),y.kind){case`redirect`:{let e=y.delayMs??0;setTimeout(()=>window.location.assign(y.url),e),_(!0);break}case`continue`:f(yn(v.flatMap(e=>e.fields),n));break;default:_(!0);break}}catch(e){let t=e?.message??String(e);s(t),oe.error(t)}finally{h(!1)}}},className:`space-y-6`,children:[v.map((e,t)=>(0,Y.jsxs)(`section`,{className:`rounded-md border bg-card p-4 sm:p-5`,children:[e.label&&(0,Y.jsx)(`h2`,{className:`mb-3 text-sm font-medium`,children:e.label}),(0,Y.jsx)(`div`,{className:e.columns===1?`grid grid-cols-1 gap-4`:e.columns===2?`grid grid-cols-1 gap-4 sm:grid-cols-2`:e.columns===3?`grid grid-cols-1 gap-4 sm:grid-cols-3`:`grid grid-cols-1 gap-4 sm:grid-cols-4`,children:e.fields.filter(e=>!e.hidden).map(e=>(0,Y.jsxs)(`div`,{className:e.colSpan===2?`sm:col-span-2`:e.colSpan===3?`sm:col-span-3`:e.colSpan===4?`sm:col-span-4`:``,children:[(0,Y.jsxs)(`label`,{htmlFor:`f_${e.name}`,className:`mb-1 block text-xs font-medium text-foreground`,children:[e.label,e.required&&(0,Y.jsx)(`span`,{className:`ml-0.5 text-destructive`,children:`*`})]}),(0,Y.jsx)(En,{field:e,value:d[e.name],onChange:t=>f(n=>({...n,[e.name]:t}))}),e.helpText&&(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:e.helpText})]},e.name))})]},t)),o&&(0,Y.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:o}),(0,Y.jsx)(`div`,{className:`flex justify-end gap-2`,children:(0,Y.jsx)(`button`,{type:`submit`,disabled:p,className:`rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm hover:bg-primary/90 disabled:opacity-50`,children:p?`Submitting…`:`Submit`})})]})]}):null}function On({enabled:e=!1,url:t=`/api/v1/dev/metadata-events`,debounceMs:n=400,reconnectDelayMs:r=2e3}){let i=(0,J.useRef)(null);return(0,J.useEffect)(()=>{if(!e||typeof window>`u`||typeof EventSource>`u`)return;let a=null,o=null,s=!1,c=e=>{i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{try{oe.info(`Metadata changed (${e}) — reloading…`,{duration:800})}catch{}setTimeout(()=>{try{window.location.reload()}catch{}},150)},n)},l=e=>{try{let t=JSON.parse(e.data);c(t?.name?`${t.metadataType??`metadata`}:${t.name}`:`metadata`)}catch{c(`change`)}},u=e=>{let t=`rebuild`;try{t=JSON.parse(e.data)?.reason??t}catch{}c(t)},d=()=>{if(!s)try{a=new EventSource(t),a.addEventListener(`metadata-change`,l),a.addEventListener(`reload`,u),a.addEventListener(`error`,()=>{s||a?.readyState===EventSource.CLOSED&&(a=null,o=setTimeout(d,r))})}catch{o=setTimeout(d,r)}};return d(),()=>{if(s=!0,o&&clearTimeout(o),i.current&&clearTimeout(i.current),a)try{a.close()}catch{}}},[e,t,n,r]),null}var kn=`/api/v1/auth`,An=``,jn=`/api/v1/storage`,Mn=`/_console/`.replace(/\/$/,``)||`/`;function Nn(){let e=An.replace(/\/$/,``),t=t=>/^https?:/i.test(t)?t:`${e}${t}`;return{name:`objectstack-presigned`,async upload(e,n={}){let r=e,i=`name`in r&&r.name||`upload`,a=e.type||`application/octet-stream`,o=await fetch(t(`${jn}/upload/presigned`),{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`},signal:n.signal,body:JSON.stringify({filename:i,mimeType:a,size:e.size})});if(!o.ok)throw Error(`Presigned upload failed (${o.status}): ${await o.text().catch(()=>``)}`);let s=await o.json(),{uploadUrl:c,fileId:l,headers:u}=s?.data??s;if(!c||!l)throw Error(`Presigned upload response missing uploadUrl/fileId`);let d=await fetch(t(c),{method:`PUT`,signal:n.signal,headers:{"Content-Type":a,...u??{}},body:e});if(!d.ok)throw Error(`Raw PUT failed (${d.status}): ${await d.text().catch(()=>``)}`);let f=await fetch(t(`${jn}/upload/complete`),{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`},signal:n.signal,body:JSON.stringify({fileId:l})});if(!f.ok)throw Error(`Upload completion failed (${f.status}): ${await f.text().catch(()=>``)}`);return{url:t(`${jn}/files/${encodeURIComponent(l)}`),name:i,size:e.size,mimeType:a,meta:{fileId:l}}}}}function Pn({children:e,requireOrganization:t=!0}){return(0,Y.jsx)(N,{fallback:(0,Y.jsx)(fn,{}),loadingFallback:(0,Y.jsx)(M,{}),children:(0,Y.jsx)(ie,{children:t?(0,Y.jsx)(W,{children:e}):e})})}function Fn(){return(0,J.useEffect)(()=>{ln(new URLSearchParams(window.location.search).get(`redirect`)??void 0)},[]),(0,Y.jsx)(M,{})}function In(){return(0,J.useEffect)(()=>{un(new URLSearchParams(window.location.search).get(`redirect`)??void 0)},[]),(0,Y.jsx)(M,{})}function Ln(){return(0,J.useEffect)(()=>{dn()},[]),(0,Y.jsx)(M,{})}function Rn(){return(0,Y.jsx)(F,{authUrl:kn,children:(0,Y.jsxs)(d,{adapter:(0,J.useMemo)(()=>Nn(),[]),children:[(0,Y.jsx)(p,{position:`bottom-right`}),(0,Y.jsx)(On,{}),(0,Y.jsx)(H,{basename:Mn,children:(0,Y.jsx)(ue,{children:(0,Y.jsxs)(y,{children:[(0,Y.jsx)(_,{path:`/login`,element:(0,Y.jsx)(Fn,{})}),(0,Y.jsx)(_,{path:`/register`,element:(0,Y.jsx)(In,{})}),(0,Y.jsx)(_,{path:`/forgot-password`,element:(0,Y.jsx)(Ln,{})}),(0,Y.jsx)(_,{path:`/f/:slug`,element:(0,Y.jsx)(Dn,{mode:`public`})}),(0,Y.jsx)(_,{path:`/forms/:name`,element:(0,Y.jsx)(Pn,{children:(0,Y.jsx)(Dn,{mode:`internal`})})}),(0,Y.jsx)(_,{path:`/home`,element:(0,Y.jsx)(Pn,{children:(0,Y.jsx)(z,{children:(0,Y.jsx)(se,{})})})}),(0,Y.jsx)(_,{path:`/organizations`,element:(0,Y.jsx)(Pn,{requireOrganization:!1,children:(0,Y.jsx)(G,{children:(0,Y.jsx)(pe,{})})})}),(0,Y.jsx)(_,{path:`/system/*`,element:(0,Y.jsx)(me,{})}),(0,Y.jsx)(_,{path:`/apps/:appName/*`,element:(0,Y.jsx)(Pn,{children:(0,Y.jsx)(k,{})})}),(0,Y.jsx)(_,{path:`/`,element:(0,Y.jsx)(ie,{children:(0,Y.jsx)(mn,{})})}),(0,Y.jsx)(_,{path:`*`,element:(0,Y.jsx)(h,{to:`/`,replace:!0})})]})})})]})})}async function zn(e){try{let t=await fetch(`/api/v1/i18n/translations/${e}`);if(!t.ok)return console.warn(`[i18n] Failed to load translations for '${e}': HTTP ${t.status}`),{};let n=await t.json(),r;return r=n?.data?.translations&&typeof n.data.translations==`object`?n.data.translations:n,Bn(r)?Vn(r):r}catch(t){return console.warn(`[i18n] Failed to load translations for '${e}':`,t),{}}}function Bn(e){let t=e.objects;if(!t||typeof t!=`object`||Array.isArray(t))return!1;for(let e of Object.values(t))if(e&&typeof e==`object`&&!Array.isArray(e)&&`fields`in e)return!0;return!1}function Vn(e){let t={},n={},r={},i=e.objects;if(i)for(let[e,a]of Object.entries(i)){if(!a||typeof a!=`object`)continue;let i={label:a.label};if(a.pluralLabel&&(i.pluralLabel=a.pluralLabel),a.description&&(i.description=a.description),a._views&&(i._views=a._views),a._actions&&(i._actions=a._actions),a._sections&&(i._sections=a._sections),a._notifications&&(i._notifications=a._notifications),a._errors&&(i._errors=a._errors),a._options&&(i._options=a._options),t[e]=i,a.fields&&typeof a.fields==`object`){n[e]={};for(let[t,i]of Object.entries(a.fields))i?.label&&(n[e][t]=i.label),i?.options&&typeof i.options==`object`&&Object.keys(i.options).length>0&&(r[e]||(r[e]={}),r[e][t]=i.options)}}let a={};return Object.keys(t).length>0&&(a.objects=t),Object.keys(n).length>0&&(a.fields=n),Object.keys(r).length>0&&(a.fieldOptions=r),e.apps&&(a.apps=e.apps),e.messages&&(a.messages=e.messages),e.validationMessages&&(a.validationMessages=e.validationMessages),e.dashboards&&(a.dashboards=e.dashboards),e.globalActions&&(a.globalActions=e.globalActions),{app:a}}var Hn=`auth-session-token`,Un=`auth-active-organization-id`;async function Wn(e){if(typeof window>`u`)return;let t=null;try{t=localStorage.getItem(Hn)}catch{return}if(t)try{let n=await fetch(`${e}/get-session`,{method:`GET`,credentials:`omit`,headers:{Authorization:`Bearer ${t}`,Accept:`application/json`}});if(n.ok){let e=await n.json().catch(()=>null);if(e?.user??e?.data?.user??null)return}localStorage.removeItem(Hn),localStorage.removeItem(Un)}catch{}}Wn(`/api/v1/auth`).finally(()=>{Se.createRoot(document.getElementById(`root`)).render((0,Y.jsx)(J.StrictMode,{children:(0,Y.jsx)(L,{loadLanguage:zn,children:(0,Y.jsx)(Rn,{})})}))});