@wildo-ai/presets-components 1.1.4 → 1.1.6

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 (780) hide show
  1. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  2. package/dist/esm/components/actions/action-bar.js +65 -8
  3. package/dist/esm/components/actions/action-bar.js.map +1 -1
  4. package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
  5. package/dist/esm/components/actions/action-button.d.ts.map +1 -1
  6. package/dist/esm/components/actions/action-button.js +3 -3
  7. package/dist/esm/components/actions/action-button.js.map +1 -1
  8. package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
  9. package/dist/esm/components/actions/button-group.d.ts.map +1 -1
  10. package/dist/esm/components/actions/button.d.ts.map +1 -1
  11. package/dist/esm/components/actions/button.js +62 -3
  12. package/dist/esm/components/actions/button.js.map +1 -1
  13. package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
  14. package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
  15. package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
  16. package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
  17. package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
  18. package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
  19. package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
  20. package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
  21. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
  22. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
  23. package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
  24. package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
  25. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
  26. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
  27. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
  28. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
  29. package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
  30. package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
  31. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
  32. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
  33. package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
  34. package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
  35. package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
  36. package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
  37. package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
  38. package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
  39. package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
  40. package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
  41. package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
  42. package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
  43. package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
  44. package/dist/esm/components/ai-elements/chat/suggestion.js +8 -1
  45. package/dist/esm/components/ai-elements/chat/suggestion.js.map +1 -1
  46. package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
  47. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
  48. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
  49. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
  50. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
  51. package/dist/esm/components/ai-elements/decision/approval.d.ts +124 -17
  52. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  53. package/dist/esm/components/ai-elements/decision/approval.js +105 -13
  54. package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
  55. package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
  56. package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
  57. package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
  58. package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
  59. package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
  60. package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
  61. package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
  62. package/dist/esm/components/ai-elements/execution/task.js +1 -1
  63. package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
  64. package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
  65. package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
  66. package/dist/esm/components/ai-elements/execution/tool.js +8 -1
  67. package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
  68. package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
  69. package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
  70. package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
  71. package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
  72. package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
  73. package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
  74. package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
  75. package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
  76. package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
  77. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts +3 -1
  78. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
  79. package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
  80. package/dist/esm/components/ai-elements/graph/graph-runtime.js.map +1 -1
  81. package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
  82. package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
  83. package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
  84. package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
  85. package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
  86. package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
  87. package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
  88. package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
  89. package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
  90. package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
  91. package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
  92. package/dist/esm/components/ai-elements/meta/agent.js +23 -18
  93. package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
  94. package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
  95. package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
  96. package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
  97. package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
  98. package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
  99. package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
  100. package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
  101. package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
  102. package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
  103. package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
  104. package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
  105. package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
  106. package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
  107. package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
  108. package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
  109. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
  110. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
  111. package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
  112. package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
  113. package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
  114. package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
  115. package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
  116. package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
  117. package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
  118. package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
  119. package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
  120. package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
  121. package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
  122. package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
  123. package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
  124. package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
  125. package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
  126. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
  127. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
  128. package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
  129. package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
  130. package/dist/esm/components/app/app-layout-main-container.d.ts +9 -0
  131. package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
  132. package/dist/esm/components/app/app-layout-main-container.js +17 -23
  133. package/dist/esm/components/app/app-layout-main-container.js.map +1 -1
  134. package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
  135. package/dist/esm/components/app/app-layout-main-container.labels.js +48 -0
  136. package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
  137. package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
  138. package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
  139. package/dist/esm/components/app/public-layout-main-container.js +9 -8
  140. package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
  141. package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
  142. package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
  143. package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
  144. package/dist/esm/components/app/public-layout-terms.js +137 -0
  145. package/dist/esm/components/app/public-layout-terms.js.map +1 -0
  146. package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
  147. package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
  148. package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
  149. package/dist/esm/components/billing/billing-invoice-history.js +3 -1
  150. package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
  151. package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
  152. package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
  153. package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
  154. package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
  155. package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
  156. package/dist/esm/components/billing/billing-plan-change-preview.js +25 -0
  157. package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
  158. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
  159. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
  160. package/dist/esm/components/billing/billing-plan-change-preview.labels.js +22 -0
  161. package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
  162. package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
  163. package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
  164. package/dist/esm/components/billing/billing-portal-link.js +3 -1
  165. package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
  166. package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
  167. package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
  168. package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
  169. package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
  170. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  171. package/dist/esm/components/billing/billing-pricing-table.js +10 -4
  172. package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
  173. package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
  174. package/dist/esm/components/billing/billing-pricing-table.labels.js +8 -1
  175. package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
  176. package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
  177. package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
  178. package/dist/esm/components/billing/billing-subscription-status.js +3 -1
  179. package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
  180. package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
  181. package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
  182. package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
  183. package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
  184. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  185. package/dist/esm/components/billing/billing-usage-dashboard.js +10 -7
  186. package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
  187. package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
  188. package/dist/esm/components/billing/billing-usage-dashboard.labels.js +4 -1
  189. package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
  190. package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
  191. package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
  192. package/dist/esm/components/data-display/badge.d.ts.map +1 -1
  193. package/dist/esm/components/data-display/badge.js +16 -15
  194. package/dist/esm/components/data-display/badge.js.map +1 -1
  195. package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
  196. package/dist/esm/components/data-display/description-list.d.ts +2 -1
  197. package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
  198. package/dist/esm/components/data-display/description-list.js +24 -8
  199. package/dist/esm/components/data-display/description-list.js.map +1 -1
  200. package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
  201. package/dist/esm/components/data-display/duration.d.ts +15 -0
  202. package/dist/esm/components/data-display/duration.d.ts.map +1 -0
  203. package/dist/esm/components/data-display/duration.js +50 -0
  204. package/dist/esm/components/data-display/duration.js.map +1 -0
  205. package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
  206. package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
  207. package/dist/esm/components/data-display/duration.labels.js +35 -0
  208. package/dist/esm/components/data-display/duration.labels.js.map +1 -0
  209. package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
  210. package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
  211. package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
  212. package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
  213. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
  214. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
  215. package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
  216. package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
  217. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
  218. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
  219. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
  220. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
  221. package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
  222. package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
  223. package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
  224. package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
  225. package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
  226. package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
  227. package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
  228. package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
  229. package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
  230. package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
  231. package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
  232. package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
  233. package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
  234. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
  235. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
  236. package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
  237. package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
  238. package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
  239. package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
  240. package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
  241. package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
  242. package/dist/esm/components/data-display/formatters/display-field-enum.js +29 -11
  243. package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
  244. package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
  245. package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
  246. package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
  247. package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
  248. package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
  249. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
  250. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
  251. package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
  252. package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
  253. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
  254. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
  255. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
  256. package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
  257. package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
  258. package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
  259. package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
  260. package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
  261. package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
  262. package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
  263. package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
  264. package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
  265. package/dist/esm/components/data-display/formatters/display-field-file.js +14 -15
  266. package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
  267. package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
  268. package/dist/esm/components/data-display/formatters/display-field-file.labels.js +2 -0
  269. package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
  270. package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
  271. package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
  272. package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
  273. package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
  274. package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
  275. package/dist/esm/components/data-display/formatters/display-field-number.js +8 -3
  276. package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
  277. package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
  278. package/dist/esm/components/data-display/formatters/display-field-number.labels.js +5 -2
  279. package/dist/esm/components/data-display/formatters/display-field-number.labels.js.map +1 -1
  280. package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
  281. package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
  282. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
  283. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
  284. package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
  285. package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
  286. package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
  287. package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
  288. package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
  289. package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
  290. package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
  291. package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
  292. package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
  293. package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
  294. package/dist/esm/components/data-display/formatters/display-field-string.d.ts +1 -1
  295. package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
  296. package/dist/esm/components/data-display/formatters/display-field-string.js +129 -15
  297. package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
  298. package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
  299. package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
  300. package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
  301. package/dist/esm/components/data-display/identifier.d.ts +19 -0
  302. package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
  303. package/dist/esm/components/data-display/identifier.js +21 -0
  304. package/dist/esm/components/data-display/identifier.js.map +1 -0
  305. package/dist/esm/components/data-display/kbd.d.ts +17 -0
  306. package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
  307. package/dist/esm/components/data-display/kbd.js +18 -0
  308. package/dist/esm/components/data-display/kbd.js.map +1 -0
  309. package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
  310. package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
  311. package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
  312. package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
  313. package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
  314. package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
  315. package/dist/esm/components/data-display/notification-indicator.js +3 -11
  316. package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
  317. package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
  318. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
  319. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
  320. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
  321. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
  322. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
  323. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
  324. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
  325. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
  326. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
  327. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  328. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
  329. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
  330. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
  331. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
  332. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
  333. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
  334. package/dist/esm/components/data-display/timeline.d.ts +3 -0
  335. package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
  336. package/dist/esm/components/data-display/timeline.js +92 -0
  337. package/dist/esm/components/data-display/timeline.js.map +1 -0
  338. package/dist/esm/components/data-display/untrusted-html-content.d.ts +55 -0
  339. package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
  340. package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
  341. package/dist/esm/components/data-display/untrusted-html-content.js.map +1 -0
  342. package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
  343. package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
  344. package/dist/esm/components/feedback/celebration-overlay.js +146 -22
  345. package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
  346. package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
  347. package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
  348. package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
  349. package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
  350. package/dist/esm/components/feedback/empty-state.js.map +1 -1
  351. package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
  352. package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
  353. package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
  354. package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
  355. package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
  356. package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
  357. package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
  358. package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
  359. package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
  360. package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
  361. package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
  362. package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
  363. package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
  364. package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
  365. package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
  366. package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
  367. package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
  368. package/dist/esm/components/feedback/notification-center.js +5 -5
  369. package/dist/esm/components/feedback/notification-center.js.map +1 -1
  370. package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
  371. package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
  372. package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
  373. package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
  374. package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
  375. package/dist/esm/components/feedback/progress.d.ts.map +1 -1
  376. package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
  377. package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
  378. package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
  379. package/dist/esm/components/feedback/toast.d.ts.map +1 -1
  380. package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
  381. package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
  382. package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
  383. package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
  384. package/dist/esm/components/form/chromes/field.js +11 -3
  385. package/dist/esm/components/form/chromes/field.js.map +1 -1
  386. package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
  387. package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
  388. package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
  389. package/dist/esm/components/form/chromes/form-primitive.labels.js +37 -0
  390. package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
  391. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  392. package/dist/esm/components/form/combobox.js +14 -13
  393. package/dist/esm/components/form/combobox.js.map +1 -1
  394. package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
  395. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
  396. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
  397. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
  398. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
  399. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
  400. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
  401. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
  402. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
  403. package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
  404. package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
  405. package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
  406. package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
  407. package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
  408. package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
  409. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
  410. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
  411. package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
  412. package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
  413. package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
  414. package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
  415. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
  416. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
  417. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
  418. package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
  419. package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
  420. package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
  421. package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
  422. package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
  423. package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
  424. package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
  425. package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
  426. package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
  427. package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
  428. package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
  429. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
  430. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
  431. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
  432. package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
  433. package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
  434. package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
  435. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
  436. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
  437. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
  438. package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
  439. package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
  440. package/dist/esm/components/form/controls/enum/radio.js +13 -12
  441. package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
  442. package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
  443. package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
  444. package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
  445. package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
  446. package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
  447. package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
  448. package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
  449. package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
  450. package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
  451. package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
  452. package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
  453. package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
  454. package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
  455. package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
  456. package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
  457. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
  458. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
  459. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
  460. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
  461. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
  462. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
  463. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
  464. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
  465. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +3 -1
  466. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -1
  467. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +3 -1
  468. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -1
  469. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +6 -0
  470. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -1
  471. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +8 -1
  472. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -1
  473. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +6 -2
  474. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -1
  475. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +6 -2
  476. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -1
  477. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +6 -0
  478. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -1
  479. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +8 -1
  480. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -1
  481. package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
  482. package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
  483. package/dist/esm/components/form/controls/input.d.ts.map +1 -1
  484. package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
  485. package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
  486. package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
  487. package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
  488. package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
  489. package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
  490. package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
  491. package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
  492. package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
  493. package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
  494. package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
  495. package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
  496. package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
  497. package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
  498. package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
  499. package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
  500. package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
  501. package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
  502. package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
  503. package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
  504. package/dist/esm/components/layout/carousel.d.ts.map +1 -1
  505. package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
  506. package/dist/esm/components/layout/divider.d.ts.map +1 -1
  507. package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
  508. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  509. package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
  510. package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
  511. package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
  512. package/dist/esm/components/layout/separator.d.ts.map +1 -1
  513. package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
  514. package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
  515. package/dist/esm/components/navigation/app-level/activity-bar.js +2 -2
  516. package/dist/esm/components/navigation/app-level/activity-bar.js.map +1 -1
  517. package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
  518. package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
  519. package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
  520. package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
  521. package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
  522. package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
  523. package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
  524. package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
  525. package/dist/esm/components/navigation/app-level/menu-user-org.js +10 -4
  526. package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
  527. package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
  528. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js +7 -0
  529. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.map +1 -1
  530. package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
  531. package/dist/esm/components/navigation/app-level/menubar.js +36 -14
  532. package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
  533. package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
  534. package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
  535. package/dist/esm/components/navigation/app-level/navigation-back.js +31 -5
  536. package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
  537. package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
  538. package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
  539. package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
  540. package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
  541. package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
  542. package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
  543. package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
  544. package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
  545. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
  546. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
  547. package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
  548. package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
  549. package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
  550. package/dist/esm/components/navigation/app-level/sidebar.js +41 -25
  551. package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
  552. package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
  553. package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
  554. package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
  555. package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
  556. package/dist/esm/components/navigation/app-level/status-bar.js +2 -2
  557. package/dist/esm/components/navigation/app-level/status-bar.js.map +1 -1
  558. package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
  559. package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
  560. package/dist/esm/components/navigation/app-level/toolbar.js +2 -2
  561. package/dist/esm/components/navigation/app-level/toolbar.js.map +1 -1
  562. package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
  563. package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
  564. package/dist/esm/components/navigation/app-level/utility-panel.js +24 -6
  565. package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
  566. package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
  567. package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
  568. package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
  569. package/dist/esm/components/navigation/breadcrumb.js +1 -1
  570. package/dist/esm/components/navigation/breadcrumb.js.map +1 -1
  571. package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
  572. package/dist/esm/components/navigation/command.d.ts.map +1 -1
  573. package/dist/esm/components/navigation/command.js +2 -2
  574. package/dist/esm/components/navigation/command.js.map +1 -1
  575. package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
  576. package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
  577. package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
  578. package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
  579. package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
  580. package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
  581. package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
  582. package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
  583. package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
  584. package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
  585. package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
  586. package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
  587. package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
  588. package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
  589. package/dist/esm/components/overlays/containers/dialog.js +11 -1
  590. package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
  591. package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
  592. package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
  593. package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
  594. package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
  595. package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
  596. package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
  597. package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
  598. package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
  599. package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
  600. package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
  601. package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
  602. package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
  603. package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
  604. package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
  605. package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
  606. package/dist/esm/components/sections/accordion.d.ts.map +1 -1
  607. package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
  608. package/dist/esm/components/sections/card.d.ts.map +1 -1
  609. package/dist/esm/components/sections/card.js +71 -6
  610. package/dist/esm/components/sections/card.js.map +1 -1
  611. package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
  612. package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
  613. package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
  614. package/dist/esm/components/sections/content-section.d.ts.map +1 -1
  615. package/dist/esm/components/sections/content-section.js +36 -6
  616. package/dist/esm/components/sections/content-section.js.map +1 -1
  617. package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
  618. package/dist/esm/components/sections/option-gesture.d.ts +15 -0
  619. package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
  620. package/dist/esm/components/sections/option-gesture.js +66 -0
  621. package/dist/esm/components/sections/option-gesture.js.map +1 -0
  622. package/dist/esm/components/sections/pagination.d.ts.map +1 -1
  623. package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
  624. package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
  625. package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
  626. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  627. package/dist/esm/components/sections/stepper.js +5 -3
  628. package/dist/esm/components/sections/stepper.js.map +1 -1
  629. package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
  630. package/dist/esm/components/sections/table.d.ts.map +1 -1
  631. package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
  632. package/dist/esm/components/sections/tabs.d.ts.map +1 -1
  633. package/dist/esm/components/sections/tabs.js +60 -15
  634. package/dist/esm/components/sections/tabs.js.map +1 -1
  635. package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
  636. package/dist/esm/components/typography/heading.d.ts.map +1 -1
  637. package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
  638. package/dist/esm/components/typography/label.d.ts.map +1 -1
  639. package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
  640. package/dist/esm/components/typography/link.d.ts.map +1 -1
  641. package/dist/esm/components/typography/link.js +9 -3
  642. package/dist/esm/components/typography/link.js.map +1 -1
  643. package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
  644. package/dist/esm/components/typography/text.d.ts +1 -1
  645. package/dist/esm/components/typography/text.d.ts.map +1 -1
  646. package/dist/esm/components/typography/text.js +3 -2
  647. package/dist/esm/components/typography/text.js.map +1 -1
  648. package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
  649. package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
  650. package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
  651. package/dist/esm/config/index.d.ts.map +1 -1
  652. package/dist/esm/config/preset-design-system.d.ts.map +1 -1
  653. package/dist/esm/config/preset-design-system.js +37 -60
  654. package/dist/esm/config/preset-design-system.js.map +1 -1
  655. package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
  656. package/dist/esm/config/preset-kits.d.ts.map +1 -1
  657. package/dist/esm/config/preset-navigation.d.ts.map +1 -1
  658. package/dist/esm/config/preset-navigation.js +23 -7
  659. package/dist/esm/config/preset-navigation.js.map +1 -1
  660. package/dist/esm/config/preset-resources.d.ts.map +1 -1
  661. package/dist/esm/config/preset-shell.d.ts.map +1 -1
  662. package/dist/esm/config/preset-utils.d.ts.map +1 -1
  663. package/dist/esm/config/presets.d.ts.map +1 -1
  664. package/dist/esm/config/resources/agent-work.resource-presets.d.ts +4 -0
  665. package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
  666. package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
  667. package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
  668. package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
  669. package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
  670. package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
  671. package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
  672. package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
  673. package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
  674. package/dist/esm/config/resources/application.resource-presets.js +268 -26
  675. package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
  676. package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
  677. package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
  678. package/dist/esm/config/resources/billing.resource-presets.js +241 -111
  679. package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
  680. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
  681. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
  682. package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
  683. package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
  684. package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
  685. package/dist/esm/config/resources/guidance.resource-presets.js +39 -16
  686. package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
  687. package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
  688. package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
  689. package/dist/esm/config/resources/identity.resource-presets.js +71 -17
  690. package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
  691. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
  692. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
  693. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
  694. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
  695. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
  696. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
  697. package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
  698. package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
  699. package/dist/esm/config/resources/index.d.ts.map +1 -1
  700. package/dist/esm/config/resources/index.js +9 -2
  701. package/dist/esm/config/resources/index.js.map +1 -1
  702. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
  703. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
  704. package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
  705. package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
  706. package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
  707. package/dist/esm/config/resources/organizations.resource-presets.js +216 -35
  708. package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
  709. package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
  710. package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
  711. package/dist/esm/config/resources/resource.config.utils.js +20 -0
  712. package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
  713. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
  714. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
  715. package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
  716. package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
  717. package/dist/esm/config/resources/security.resource-presets.d.ts +11 -3
  718. package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
  719. package/dist/esm/config/resources/security.resource-presets.js +685 -99
  720. package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
  721. package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
  722. package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
  723. package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
  724. package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
  725. package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
  726. package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
  727. package/dist/esm/config/resources/webhooks.resource-presets.js +102 -26
  728. package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
  729. package/dist/esm/index.d.ts +7 -1
  730. package/dist/esm/index.d.ts.map +1 -1
  731. package/dist/esm/index.js +7 -1
  732. package/dist/esm/index.js.map +1 -1
  733. package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
  734. package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
  735. package/dist/esm/mermaid-stub.d.ts.map +1 -1
  736. package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
  737. package/dist/esm/registration/register-common-enums.js +63 -34
  738. package/dist/esm/registration/register-common-enums.js.map +1 -1
  739. package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
  740. package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
  741. package/dist/esm/registration/register-default-icons.js +3 -1
  742. package/dist/esm/registration/register-default-icons.js.map +1 -1
  743. package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
  744. package/dist/esm/registration/register-default-presets.js +32 -4
  745. package/dist/esm/registration/register-default-presets.js.map +1 -1
  746. package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
  747. package/dist/esm/registration/register-provider-components.js +11 -0
  748. package/dist/esm/registration/register-provider-components.js.map +1 -1
  749. package/dist/esm/shiki-subset.d.ts +11 -3
  750. package/dist/esm/shiki-subset.d.ts.map +1 -1
  751. package/dist/esm/shiki-subset.js +10 -2
  752. package/dist/esm/shiki-subset.js.map +1 -1
  753. package/dist/esm/theme-exports.d.ts.map +1 -1
  754. package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
  755. package/dist/esm/themes/cozy.theme.js +19 -5
  756. package/dist/esm/themes/cozy.theme.js.map +1 -1
  757. package/dist/esm/themes/dense.theme.d.ts.map +1 -1
  758. package/dist/esm/themes/dense.theme.js +76 -10
  759. package/dist/esm/themes/dense.theme.js.map +1 -1
  760. package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
  761. package/dist/esm/themes/editorial.theme.js +19 -5
  762. package/dist/esm/themes/editorial.theme.js.map +1 -1
  763. package/dist/esm/themes/glass.theme.d.ts.map +1 -1
  764. package/dist/esm/themes/glass.theme.js +5 -1
  765. package/dist/esm/themes/glass.theme.js.map +1 -1
  766. package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
  767. package/dist/esm/themes/neo-brutalist.theme.js +9 -2
  768. package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
  769. package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
  770. package/dist/esm/themes/terminal.theme.js +19 -5
  771. package/dist/esm/themes/terminal.theme.js.map +1 -1
  772. package/dist/esm/themes/trading.theme.d.ts.map +1 -1
  773. package/dist/esm/themes/trading.theme.js +22 -6
  774. package/dist/esm/themes/trading.theme.js.map +1 -1
  775. package/dist/tsconfig.build.tsbuildinfo +1 -1
  776. package/package.json +31 -45
  777. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
  778. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
  779. package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
  780. package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { RelatedResourceSections, resourceUIBehavior, resourceUIBehaviorFrom, SummaryFlow, SummaryMeta, SummaryTitle, } from '@wildo-ai/saas-frontend-lib';
3
- import { DisplayField, DisplayLayout, FormField, FormLayout, ObjectScope, Section, SummaryLayout, } from '@wildo-ai/saas-frontend-lib';
4
- import { BadgeSemanticVariant, EnumDisplayMode, SectionMode } from '@wildo-ai/zod-decorators';
5
- import { CalendarPlus, ChartColumn, GitBranch, Key, LayoutGrid, Power, PowerOff, RefreshCw, RotateCcw, RotateCw, ToggleLeft, ToggleRight, } from 'lucide-react';
6
- import { CoreResourceType as R, CoreResourceOperation as Op, ApiKeyStatus, AppApiKeys_Operations, ApplicationFeatures_Operations, applicationResourceConfiguration_InitializationFactory as appFactory, applicationVersionsResourceConfiguration_InitializationFactory as appVersionsFactory, applicationMetadataResourceConfiguration_InitializationFactory as appMetadataFactory, appApiKeysResourceConfiguration_InitializationFactory as appApiKeysFactory, applicationFeaturesResourceConfiguration_InitializationFactory as appFeaturesFactory, ApplicationSchema, ApplicationVersionSchema, ApplicationMetadataSchema, ApiKeyApplicationSchema, ScopeFeaturesWithOverridesSchema, } from '@wildo-ai/saas-models';
7
- import { notAddressable, apiOnly } from './resource.config.utils.js';
2
+ import { RelatedResourceSections, ResourceHeaderTitle, resourceUIBehavior, resourceUIBehaviorFrom, SummaryFlow, SummaryMeta, SummaryTitle, ResourceLayoutInlineEditDefault, } from '@wildo-ai/saas-frontend-lib';
3
+ import { DisplayField, DisplayLayout, FormField, FormLayout, ObjectScope, Section, SummaryLayout, SummaryTitlePlacement, } from '@wildo-ai/saas-frontend-lib';
4
+ import { BadgeSemanticVariant, DisplayChromeMode, EditChromeMode, EnumDisplayMode, ForeignKeyDisplayMode, SectionMode, StringEditMode, } from '@wildo-ai/zod-decorators';
5
+ import { BadgeCheck, CalendarPlus, FileText, ChartColumn, GitBranch, Key, KeyRound, ShieldCheck, ShieldX, Ban, Hourglass, LayoutGrid, Power, PowerOff, RefreshCw, RotateCcw, RotateCw, ToggleLeft, ToggleRight, } from 'lucide-react';
6
+ import { CoreResourceType as R, CoreResourceOperation as Op, ApiKeyStatus, AppApiKeys_Operations, ApplicationFeatures_Operations, applicationResourceConfiguration_InitializationFactory as appFactory, applicationVersionsResourceConfiguration_InitializationFactory as appVersionsFactory, applicationMetadataResourceConfiguration_InitializationFactory as appMetadataFactory, appApiKeysResourceConfiguration_InitializationFactory as appApiKeysFactory, appOAuthClientsResourceConfiguration_InitializationFactory as appOAuthClientsFactory, applicationAccessGrantsResourceConfiguration_InitializationFactory as appAccessGrantsFactory, ApplicationAccessGrants_Operations, ApplicationAccessGrantSchema, PlatformAccessGrantStatus, AppOAuthClients_Operations, OAuthClientApplicationSchema, OAuthClientStatus, applicationFeaturesResourceConfiguration_InitializationFactory as appFeaturesFactory, ApplicationSchema, ApplicationVersionSchema, ApplicationMetadataSchema, ApiKeyApplicationSchema, ScopeFeaturesWithOverridesSchema, } from '@wildo-ai/saas-models';
7
+ import { ApiKeyRotationWindowRows } from './api-key-rotation-window.js';
8
+ import { addressable, notAddressable, apiOnly, ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE } from './resource.config.utils.js';
8
9
  /**
9
10
  * Application — Resource frontend presets
10
11
  *
@@ -67,14 +68,28 @@ export function buildApplicationAdminPresets(main) {
67
68
  })),
68
69
  [R.APPLICATION_VERSIONS]: resourceUIBehavior(appVersionsFactory, ApplicationVersionSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
69
70
  icon: GitBranch,
71
+ // A release is named by its version string, so the page title IS the version and no row repeats it.
70
72
  getFrontendResourceLabel: ({ currentObject }) => currentObject.version,
71
73
  layout: {
72
74
  refs: {
73
75
  sections: ['overview', 'releaseNotes'],
74
76
  },
75
- display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(DisplayField, { name: "version" }), _jsx(DisplayField, { name: "releaseDate" })] }), _jsx(Section, { name: "releaseNotes", children: _jsx(DisplayField, { name: "releaseNotes" }) })] })),
76
- summary: () => (_jsxs(SummaryLayout, { flow: SummaryFlow.ROW, children: [_jsx(DisplayField, { name: "version" }), _jsx(DisplayField, { name: "releaseDate" })] })),
77
- edit: () => (_jsxs(FormLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(FormField, { name: "version" }), _jsx(FormField, { name: "releaseDate" })] }), _jsx(Section, { name: "releaseNotes", children: _jsx(FormField, { name: "releaseNotes" }) })] })),
77
+ // Settings rows on the read page, bare values on a card, and a STACKED form: a release is authored
78
+ // content (a version string and a paragraph of notes), not a list of settings.
79
+ defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },
80
+ display: () => (_jsxs(DisplayLayout, { children: [_jsx(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: _jsx(DisplayField, { name: "releaseDate" }) }), _jsx(Section, { name: "releaseNotes", appearance: SectionMode.CARD, chromeMode: DisplayChromeMode.HIDDEN, hideDescription: true, children: _jsx(DisplayField, { name: "releaseNotes" }) })] })),
81
+ summary: () => (
82
+ // One line: the version and the day it shipped, bare. TEMPLATE_OWNED with no title, because the card's
83
+ // LABEL is the version string, which the first field already renders. At AUTO the row read
84
+ // "1.4.2 · Version: 1.4.2 · Released: …".
85
+ _jsxs(SummaryLayout, { flow: SummaryFlow.ROW, titlePlacement: SummaryTitlePlacement.TEMPLATE_OWNED, children: [_jsx(DisplayField, { name: "version", className: "w-auto" }), _jsx(DisplayField, { name: "releaseDate", className: "w-auto" })] })),
86
+ // One flat form: three fields need no headings, and "Release Notes" over the only field in its section
87
+ // said what the field's own label says.
88
+ edit: () => (_jsxs(FormLayout, { children: [_jsx(FormField, { name: "version", autoFocus: true }), _jsx(FormField, { name: "releaseDate" }), _jsx(FormField, { name: "releaseNotes" })] })),
89
+ },
90
+ fields: {
91
+ // Release notes are a paragraph, not a line.
92
+ releaseNotes: schemaShape.releaseNotes.stringUI({ edit: { editMode: StringEditMode.TEXTAREA } }),
78
93
  },
79
94
  views: [
80
95
  // Versions are created by the app-version system (API-driven) — headless (API-only).
@@ -87,13 +102,31 @@ export function buildApplicationAdminPresets(main) {
87
102
  ],
88
103
  })),
89
104
  [R.APPLICATION_METADATA]: resourceUIBehavior(appMetadataFactory, ApplicationMetadataSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
105
+ // The header showed the registry's missing-icon placeholder: nothing had ever named one.
106
+ icon: FileText,
90
107
  layout: {
91
- refs: {
92
- sections: ['overview'],
93
- },
94
- display: () => (_jsx(DisplayLayout, { children: _jsx(Section, { name: "overview", appearance: SectionMode.CARD, children: _jsx(DisplayField, { name: "description" }) }) })),
108
+ // No sections. The record is one field — the application's description — and an "Overview" card with a
109
+ // "Purpose, audience, and positioning" description over it was a heading and a prompt per field.
110
+ // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows, bare on a card,
111
+ // and a STACKED form, because the description is a paragraph someone writes.
112
+ defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },
113
+ // Application metadata — the application’s own description. A settings pane is a list of decisions an operator came to TAKE, so its
114
+ // writable fields are offered in place rather than behind a whole-pane edit mode. The set is
115
+ // DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field
116
+ // added to this schema tomorrow is covered without anyone remembering to decorate it.
117
+ defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,
118
+ // And its empty rows say WHICH emptiness they are — "None yet" for a list with no members,
119
+ // "Not available" for a computed value, "No value" for a field awaiting input — instead of one
120
+ // em dash standing for all three. Here the empty description IS the information: the seed writes
121
+ // an empty one, and the pane is where somebody fills it in.
122
+ defaultEmptyValue: 'placeholder',
123
+ display: () => (_jsx(DisplayLayout, { children: _jsx(DisplayField, { name: "description" }) })),
95
124
  summary: () => (_jsx(SummaryLayout, { children: _jsx(DisplayField, { name: "description" }) })),
96
- edit: () => (_jsx(FormLayout, { children: _jsx(Section, { name: "overview", appearance: SectionMode.CARD, children: _jsx(FormField, { name: "description" }) }) })),
125
+ edit: () => (_jsx(FormLayout, { children: _jsx(FormField, { name: "description", autoFocus: true }) })),
126
+ },
127
+ fields: {
128
+ // A description is a paragraph, not a line.
129
+ description: schemaShape.description.stringUI({ edit: { editMode: StringEditMode.TEXTAREA } }),
97
130
  },
98
131
  views: [
99
132
  // Metadata is system-managed, auto-initialized with the app — headless (API-only).
@@ -104,11 +137,21 @@ export function buildApplicationAdminPresets(main) {
104
137
  ],
105
138
  })),
106
139
  [R.APPLICATION_FEATURES]: resourceUIBehavior(appFeaturesFactory, ScopeFeaturesWithOverridesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
140
+ // The header showed the registry's missing-icon placeholder: nothing had ever named one. The same glyph as
141
+ // the organization's entitlements, because it is the same record at another scope.
142
+ icon: BadgeCheck,
107
143
  layout: {
108
144
  refs: { sections: ['overview', 'overrides'] },
109
- display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(DisplayField, { name: "features" }), _jsx(DisplayField, { name: "limits" })] }), _jsx(Section, { name: "overrides", children: _jsxs(ObjectScope, { name: "manualOverrides", children: [_jsx(DisplayField, { name: "addedFeatures" }), _jsx(DisplayField, { name: "removedFeatures" }), _jsx(DisplayField, { name: "limitOverrides" })] }) })] })),
145
+ // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows on read, bare
146
+ // values on a card. The form STACKS, because every field it edits is a list or a map of entries, which
147
+ // needs the full width a settings row gives to its label.
148
+ defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },
149
+ // An override list with nothing in it IS the answer on this pane — "no feature was granted or withdrawn
150
+ // by hand" — so it says "None yet" rather than an em dash that reads as missing data.
151
+ defaultEmptyValue: 'placeholder',
152
+ display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "features" }), _jsx(DisplayField, { name: "limits" })] }), _jsx(Section, { name: "overrides", hideDescription: true, children: _jsxs(ObjectScope, { name: "manualOverrides", children: [_jsx(DisplayField, { name: "addedFeatures" }), _jsx(DisplayField, { name: "removedFeatures" }), _jsx(DisplayField, { name: "limitOverrides" })] }) })] })),
110
153
  summary: () => (_jsxs(SummaryLayout, { children: [_jsx(DisplayField, { name: "features" }), _jsx(DisplayField, { name: "limits" })] })),
111
- edit: () => (_jsxs(FormLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(FormField, { name: "features" }), _jsx(FormField, { name: "limits" })] }), _jsx(Section, { name: "overrides", children: _jsxs(ObjectScope, { name: "manualOverrides", children: [_jsx(FormField, { name: "addedFeatures" }), _jsx(FormField, { name: "removedFeatures" }), _jsx(FormField, { name: "limitOverrides" })] }) })] })),
154
+ edit: () => (_jsxs(FormLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(FormField, { name: "features" }), _jsx(FormField, { name: "limits" })] }), _jsx(Section, { name: "overrides", children: _jsxs(ObjectScope, { name: "manualOverrides", children: [_jsx(FormField, { name: "addedFeatures" }), _jsx(FormField, { name: "removedFeatures" }), _jsx(FormField, { name: "limitOverrides" })] }) })] })),
112
155
  },
113
156
  views: [
114
157
  [Op.READ, notAddressable()],
@@ -123,15 +166,24 @@ export function buildApplicationAdminPresets(main) {
123
166
  icon: Key,
124
167
  layout: {
125
168
  refs: {
126
- sections: ['overview', 'access', 'lifecycle'],
169
+ sections: ['overview', 'lifecycle'],
127
170
  },
128
- display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(DisplayField, { name: "name" }), _jsx(DisplayField, { name: "scope" }), _jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "keyPrefix" })] }), _jsxs(Section, { name: "access", children: [_jsx(DisplayField, { name: "roles" }), _jsx(DisplayField, { name: "description" })] }), _jsxs(Section, { name: "lifecycle", children: [_jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "createdAt" })] })] })),
129
- summary: () => (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "name" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "scope" }), _jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "keyPrefix" })] })] })),
130
- edit: () => (_jsxs(FormLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(FormField, { name: "name" }), _jsx(FormField, { name: "status" }), _jsx(FormField, { name: "expiresAt" })] }), _jsxs(Section, { name: "access", children: [_jsx(FormField, { name: "roles" }), _jsx(FormField, { name: "description" })] })] })),
171
+ // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows on read and on the
172
+ // form — a credential is configured, not written — and bare values on a card.
173
+ defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
174
+ // The identity line: the key's name (the page title) and its status beside it. Neither is repeated below.
175
+ header: () => (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "status", hideLabel: true, hideDescription: true, className: "w-auto" })] })),
176
+ display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "keyPrefix" }), _jsx(DisplayField, { name: "description" }), _jsx(DisplayField, { name: "roles" })] }), _jsxs(Section, { name: "lifecycle", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "createdAt" }), _jsx(ApiKeyRotationWindowRows, {})] })] })),
177
+ summary: () => (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "name" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "keyPrefix" }), _jsx(DisplayField, { name: "expiresAt" })] })] })),
178
+ // One flat form. The name first, because it is what the key is called everywhere; the description as a
179
+ // paragraph. Headings over two or three fields of one short form separated nothing.
180
+ edit: () => (_jsxs(FormLayout, { children: [_jsx(FormField, { name: "name", autoFocus: true }), _jsx(FormField, { name: "description" }), _jsx(FormField, { name: "status" }), _jsx(FormField, { name: "expiresAt" }), _jsx(FormField, { name: "roles" })] })),
131
181
  },
132
182
  fields: {
183
+ // The badge's colour carries the state; the state's description is a form hint, not a line under every
184
+ // badge on a list.
133
185
  status: schemaShape.status.enumUI({
134
- display: { displayMode: EnumDisplayMode.BADGE, showDescription: true },
186
+ display: { displayMode: EnumDisplayMode.BADGE },
135
187
  edit: { showDescription: true },
136
188
  values: {
137
189
  [ApiKeyStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },
@@ -139,6 +191,23 @@ export function buildApplicationAdminPresets(main) {
139
191
  [ApiKeyStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },
140
192
  },
141
193
  }),
194
+ description: schemaShape.description.stringUI({
195
+ display: { hideWhenEmpty: true },
196
+ edit: { editMode: StringEditMode.TEXTAREA },
197
+ }),
198
+ // A key with no expiry never expires, and one never used has no last use: an empty row says nothing.
199
+ // On a card the expiry keeps its label — a bare date beside a name and a status could be any of the key's
200
+ // dates.
201
+ expiresAt: schemaShape.expiresAt.dateUI({
202
+ display: { hideWhenEmpty: true },
203
+ summaryOverride: { chromeMode: DisplayChromeMode.INLINE },
204
+ }),
205
+ lastUsedAt: schemaShape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),
206
+ // The rotation window, rendered only while the previous secret still authenticates (`ApiKeyRotationWindowRows`).
207
+ // The prefix row says what an empty end date means — after a regenerate the old secret has none and keeps
208
+ // working — so it carries its description; the end-date row hides itself when there is no date.
209
+ previousKeyPrefix: schemaShape.previousKeyPrefix.stringUI({ display: { hideWhenEmpty: true, showDescription: true } }),
210
+ previousKeyInvalidationDate: schemaShape.previousKeyInvalidationDate.dateUI({ display: { hideWhenEmpty: true } }),
142
211
  },
143
212
  getFrontendResourceLabel: ({ currentObject }) => currentObject.name,
144
213
  views: [
@@ -146,14 +215,185 @@ export function buildApplicationAdminPresets(main) {
146
215
  [Op.LIST, notAddressable()],
147
216
  [Op.SEARCH, notAddressable()],
148
217
  [Op.CREATE, notAddressable()],
149
- [AppApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw })],
150
- [AppApiKeys_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw })],
151
- [AppApiKeys_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff })],
152
- [AppApiKeys_Operations.REACTIVATE, notAddressable({ iconOverride: Power })],
153
- [AppApiKeys_Operations.EXTEND_EXPIRY, notAddressable({ iconOverride: CalendarPlus })],
218
+ [AppApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
219
+ [AppApiKeys_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
220
+ [AppApiKeys_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
221
+ [AppApiKeys_Operations.REACTIVATE, notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
222
+ [AppApiKeys_Operations.EXTEND_EXPIRY, notAddressable({ iconOverride: CalendarPlus, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
154
223
  [AppApiKeys_Operations.USAGE_STATS, notAddressable({ iconOverride: ChartColumn })],
155
224
  ],
156
225
  })),
226
+ /**
227
+ * Application OAuth clients — the credential a machine presents to obtain a token.
228
+ *
229
+ * Shaped against the API-keys preset above on purpose: the resource's own specification calls
230
+ * itself "a FAITHFUL MIRROR of the api-keys resource", and under client-credentials both
231
+ * authenticate the SAME `APPLICATION_MACHINE` principal. An operator holding both screens is
232
+ * looking at two credential TYPES for one identity, so making them look like siblings is the
233
+ * honest rendering; giving them different shapes would suggest two different principals.
234
+ *
235
+ * Four sections rather than the api-keys three, because a client carries a concern a key does
236
+ * not: `redirects` exists only for the authorization-code leg, and folding those URIs into
237
+ * `access` would bury the one field whose exact value decides whether a sign-in round trip
238
+ * lands. `EXTEND_EXPIRY` and `USAGE_STATS` are absent from the views for the reason the
239
+ * specification gives — a client's validity is fixed at registration and no usage accounting is
240
+ * recorded for clients, so naming either would name an operation this factory does not declare.
241
+ *
242
+ * The secret itself is never laid out. `hashedSecret` / `previousHashedSecret` are backend-only,
243
+ * and `secretPrefix` is the part a human uses to recognise WHICH credential a log line names.
244
+ */
245
+ [R.OAUTH_CLIENTS_APPLICATION]: resourceUIBehavior(appOAuthClientsFactory, OAuthClientApplicationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
246
+ icon: KeyRound,
247
+ layout: {
248
+ refs: {
249
+ sections: ['overview', 'access', 'redirects', 'lifecycle'],
250
+ },
251
+ // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows on read and on the
252
+ // form — a client is configured, not written — and bare values on a card.
253
+ defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
254
+ // The identity line: the client's name (the page title) and its status beside it. Neither is repeated below.
255
+ header: () => (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "status", hideLabel: true, hideDescription: true, className: "w-auto" })] })),
256
+ display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "secretPrefix" }), _jsx(DisplayField, { name: "description" })] }), _jsxs(Section, { name: "access", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "allowedGrants" }), _jsx(DisplayField, { name: "allowedScopes" }), _jsx(DisplayField, { name: "roles" }), _jsx(DisplayField, { name: "tokenEndpointAuthMethod" }), _jsx(DisplayField, { name: "requiresConsent" })] }), _jsxs(Section, { name: "redirects", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "redirectUris" }), _jsx(DisplayField, { name: "postLogoutRedirectUris" })] }), _jsxs(Section, { name: "lifecycle", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "createdAt" })] })] })),
257
+ summary: () => (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "name" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "secretPrefix" }), _jsx(DisplayField, { name: "expiresAt" })] })] })),
258
+ edit: () => (_jsxs(FormLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(FormField, { name: "name", autoFocus: true }), _jsx(FormField, { name: "description" }), _jsx(FormField, { name: "expiresAt" })] }), _jsxs(Section, { name: "access", hideDescription: true, children: [_jsx(FormField, { name: "allowedGrants" }), _jsx(FormField, { name: "allowedScopes" }), _jsx(FormField, { name: "roles" }), _jsx(FormField, { name: "tokenEndpointAuthMethod" }), _jsx(FormField, { name: "requiresConsent" })] }), _jsxs(Section, { name: "redirects", children: [_jsx(FormField, { name: "redirectUris" }), _jsx(FormField, { name: "postLogoutRedirectUris" })] })] })),
259
+ },
260
+ fields: {
261
+ // Same three states and the same colours as an API key, because they mean the same things.
262
+ // EXPIRED is a WARNING rather than a DESTRUCTIVE: it is the end of a validity window, not a
263
+ // failure, and it is the one state `reactivate` deliberately does NOT revive. The state's description
264
+ // is a form hint; under every badge on a list it read "Whether the client can obtain tokens…" per row.
265
+ status: schemaShape.status.enumUI({
266
+ display: { displayMode: EnumDisplayMode.BADGE },
267
+ edit: { showDescription: true },
268
+ values: {
269
+ [OAuthClientStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },
270
+ [OAuthClientStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },
271
+ [OAuthClientStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },
272
+ },
273
+ }),
274
+ description: schemaShape.description.stringUI({
275
+ display: { hideWhenEmpty: true },
276
+ edit: { editMode: StringEditMode.TEXTAREA },
277
+ }),
278
+ // A client-credentials client has no sign-out redirect, a client with no expiry never expires, and one
279
+ // never used has no last use: each empty row said nothing.
280
+ postLogoutRedirectUris: schemaShape.postLogoutRedirectUris.arrayUI({ display: { hideWhenEmpty: true } }),
281
+ // On a card the expiry keeps its label: a bare date beside a name and a status could be any of the
282
+ // client's dates.
283
+ expiresAt: schemaShape.expiresAt.dateUI({
284
+ display: { hideWhenEmpty: true },
285
+ summaryOverride: { chromeMode: DisplayChromeMode.INLINE },
286
+ }),
287
+ lastUsedAt: schemaShape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),
288
+ },
289
+ getFrontendResourceLabel: ({ currentObject }) => currentObject.name,
290
+ views: [
291
+ [Op.READ, notAddressable()],
292
+ [Op.LIST, notAddressable()],
293
+ [Op.SEARCH, notAddressable()],
294
+ [Op.CREATE, notAddressable()],
295
+ [AppOAuthClients_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
296
+ [AppOAuthClients_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
297
+ [AppOAuthClients_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
298
+ [AppOAuthClients_Operations.REACTIVATE, notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
299
+ // Dispatched by the expiry sweep rather than by a person — headless, so it must carry no
300
+ // view fields at all. An operator ends a client early with DEACTIVATE.
301
+ [AppOAuthClients_Operations.EXPIRE, apiOnly()],
302
+ ],
303
+ })),
304
+ /**
305
+ * Application-wide access grants — the two-person rule, made visible.
306
+ *
307
+ * This is the record of an ELEVATION, not of a permission: one administrator requests a
308
+ * time-bound window over an application-wide read, and a DIFFERENT administrator signs it.
309
+ * Until this preset existed the mechanism ran with no surface at all, which is the worst shape
310
+ * for a control of this kind — its entire justification is that the consequence becomes VISIBLE
311
+ * rather than prevented, and nothing that cannot be read can make anything visible.
312
+ *
313
+ * Three sections, each answering one of the questions a reviewer actually asks:
314
+ * `request` (who asked, and for what stated reason), `decision` (who signed, when, and why),
315
+ * and `window` (how long it lasts, and which credential it admits). Merging decision into
316
+ * request would put the requester and the approver in one block — the two identities the
317
+ * control exists to keep apart.
318
+ *
319
+ * `justification` and `decisionReason` are laid out as first-class fields rather than metadata.
320
+ * A grant whose reason is unreadable is a grant nobody can review, and the reason is the only
321
+ * part of the row a human wrote.
322
+ */
323
+ [R.APPLICATION_ACCESS_GRANTS]: resourceUIBehavior(appAccessGrantsFactory, ApplicationAccessGrantSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
324
+ icon: ShieldCheck,
325
+ // A request is named by the instant it was made, in the viewer's date-time format. It was named by the
326
+ // requesting operator's user id, which put a raw `6aa25215267f7e7758312323` at the top of the page and as the
327
+ // title of every card: this callback is synchronous over the record, and the record carries the operator's id
328
+ // alone, never their name. WHO asked is still the first thing the body and the card show, resolved to the
329
+ // person by the foreign-key renderer (see `operatorUserId` below). `createdAt` is optional on the row, so a
330
+ // row without it falls back to its id rather than to nothing.
331
+ //
332
+ // (History: this preset once declared no label strategy at all while the specification documented
333
+ // `frontend.label`, and that pair THROWS at module scope in `resourceSpecificationFromFrontendConfiguration`,
334
+ // taking the whole `@wildo-ai/saas-specifications` package down. Keep the two declared together.)
335
+ getFrontendResourceLabel: ({ currentObject, formatDateTime }) => currentObject.createdAt ? formatDateTime(currentObject.createdAt) : currentObject._id,
336
+ layout: {
337
+ refs: {
338
+ sections: ['request', 'decision', 'window'],
339
+ },
340
+ // Settings rows on the read page, bare values on a card. There is no form: every state change is a named verb.
341
+ defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
342
+ // The identity line: when it was asked (the title) and where it stands. Neither is repeated below.
343
+ header: () => (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "status", hideLabel: true, hideDescription: true, className: "w-auto" })] })),
344
+ // The three headings stay — they are what keeps the requester and the approver in separate blocks, which is
345
+ // the distinction this control exists for. Their descriptions do not: each explained the control to a
346
+ // reader who is looking at one of its records.
347
+ display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "request", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "operatorUserId" }), _jsx(DisplayField, { name: "justification" })] }), _jsxs(Section, { name: "decision", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "approvedByUserId" }), _jsx(DisplayField, { name: "approvedAt" }), _jsx(DisplayField, { name: "decisionReason" })] }), _jsxs(Section, { name: "window", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "grantedMachineCredential" })] })] })),
348
+ // The instant is the card's title (AUTO); below it, who asked, where it stands, and when the window ends.
349
+ summary: () => (_jsx(SummaryLayout, { children: _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "operatorUserId" }), _jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "expiresAt" })] }) })),
350
+ },
351
+ fields: {
352
+ // PENDING_APPROVAL is a WARNING rather than a neutral secondary: an unsigned request is the
353
+ // state a reviewer must act on, and the one state where the window does not yet exist.
354
+ // DENIED and REVOKED are both DESTRUCTIVE because both are a refusal; EXPIRED is not — it is
355
+ // the control working, a window closing on its own. The state's description ("Active status requires a
356
+ // valid, unexpired access window.") read under every badge on the queue, so it is not shown.
357
+ status: schemaShape.status.enumUI({
358
+ display: { displayMode: EnumDisplayMode.BADGE },
359
+ values: {
360
+ [PlatformAccessGrantStatus.PENDING_APPROVAL]: { color: BadgeSemanticVariant.WARNING },
361
+ [PlatformAccessGrantStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },
362
+ [PlatformAccessGrantStatus.DENIED]: { color: BadgeSemanticVariant.DESTRUCTIVE },
363
+ [PlatformAccessGrantStatus.REVOKED]: { color: BadgeSemanticVariant.DESTRUCTIVE },
364
+ [PlatformAccessGrantStatus.EXPIRED]: { color: BadgeSemanticVariant.SECONDARY },
365
+ },
366
+ }),
367
+ // Both identities resolve to the PERSON, never an id: a reviewer is asking "who", and a hex id answers
368
+ // nobody.
369
+ operatorUserId: schemaShape.operatorUserId.foreignKeyUI({ display: { mode: ForeignKeyDisplayMode.LABEL } }),
370
+ // Empty until somebody signs, and on a PENDING request that emptiness is the answer ("not signed yet"), so
371
+ // the approver row stays; the reason is optional even on a decision, and hides.
372
+ approvedByUserId: schemaShape.approvedByUserId.foreignKeyUI({ display: { mode: ForeignKeyDisplayMode.LABEL } }),
373
+ decisionReason: schemaShape.decisionReason.stringUI({ display: { hideWhenEmpty: true } }),
374
+ // Present only when the grant was requested for a machine credential.
375
+ grantedMachineCredential: schemaShape.grantedMachineCredential.objectUI({ display: { hideWhenEmpty: true } }),
376
+ // On a card the expiry keeps its label: a bare date beside a name and a status could be the request's.
377
+ expiresAt: schemaShape.expiresAt.dateUI({ summaryOverride: { chromeMode: DisplayChromeMode.INLINE } }),
378
+ },
379
+ views: [
380
+ [Op.READ, notAddressable()],
381
+ // The review queue. `status` is the axis a reviewer sorts by — an unsigned request is the
382
+ // only row that needs anybody — so it is the quick filter.
383
+ [Op.LIST, addressable({
384
+ collectionDisplayConfig: {
385
+ quickFilterField: 'status',
386
+ temporalGroupField: 'createdAt',
387
+ },
388
+ })],
389
+ [ApplicationAccessGrants_Operations.REQUEST_ACCESS, notAddressable({ iconOverride: Hourglass })],
390
+ [ApplicationAccessGrants_Operations.APPROVE, notAddressable({ iconOverride: ShieldCheck })],
391
+ [ApplicationAccessGrants_Operations.DENY, notAddressable({ iconOverride: ShieldX })],
392
+ [ApplicationAccessGrants_Operations.REVOKE, notAddressable({ iconOverride: Ban })],
393
+ // Dispatched by the credential-expiry sweep and by nothing else, so it is headless.
394
+ [ApplicationAccessGrants_Operations.EXPIRE, apiOnly()],
395
+ ],
396
+ })),
157
397
  };
158
398
  }
159
399
  export const applicationMainPresets = buildApplicationMainPresets();
@@ -164,4 +404,6 @@ export const applicationVersionsAdminResourceUIBehavior = applicationAdminPreset
164
404
  export const applicationMetadataAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_METADATA];
165
405
  export const applicationFeaturesAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_FEATURES];
166
406
  export const appApiKeysApplicationAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_API_KEYS];
407
+ export const appOAuthClientsApplicationAdminResourceUIBehavior = applicationAdminPresets[R.OAUTH_CLIENTS_APPLICATION];
408
+ export const applicationAccessGrantsAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_ACCESS_GRANTS];
167
409
  //# sourceMappingURL=application.resource-presets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"application.resource-presets.js","sourceRoot":"","sources":["../../../../../src/config/resources/application.resource-presets.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { ResourceUIBehavior } from '@wildo-ai/saas-frontend-lib';\nimport {\n RelatedResourceSections,\n resourceUIBehavior,\n resourceUIBehaviorFrom,\n SummaryFlow,\n SummaryMeta,\n SummaryTitle,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n DisplayField,\n DisplayLayout,\n FormField,\n FormLayout,\n ObjectScope,\n Section,\n SummaryLayout,\n} from '@wildo-ai/saas-frontend-lib';\nimport { BadgeSemanticVariant, EnumDisplayMode, SectionMode } from '@wildo-ai/zod-decorators';\nimport {\n CalendarPlus,\n ChartColumn,\n GitBranch,\n Key,\n LayoutGrid,\n Power,\n PowerOff,\n RefreshCw,\n RotateCcw,\n RotateCw,\n ToggleLeft,\n ToggleRight,\n} from 'lucide-react';\nimport {\n CoreResourceType as R,\n CoreResourceOperation as Op,\n ApiKeyStatus,\n AppApiKeys_Operations,\n ApplicationFeatures_Operations,\n applicationResourceConfiguration_InitializationFactory as appFactory,\n applicationVersionsResourceConfiguration_InitializationFactory as appVersionsFactory,\n applicationMetadataResourceConfiguration_InitializationFactory as appMetadataFactory,\n appApiKeysResourceConfiguration_InitializationFactory as appApiKeysFactory,\n applicationFeaturesResourceConfiguration_InitializationFactory as appFeaturesFactory,\n ApplicationSchema,\n ApplicationVersionSchema,\n ApplicationMetadataSchema,\n ApiKeyApplicationSchema,\n ScopeFeaturesWithOverridesSchema,\n} from '@wildo-ai/saas-models';\nimport { notAddressable, apiOnly } from './resource.config.utils';\n\n/**\n * Application — Resource frontend presets\n *\n * **Main:** APPLICATION is read-only and non-addressable (accessible from a menu dropdown —\n * \"About this app\" type surface). End users never manage versions or metadata.\n *\n * **Admin:** Full APPLICATION management (CRUD, activate/suspend), plus\n * APPLICATION_VERSIONS, APPLICATION_METADATA, and APPLICATION_API_KEYS.\n *\n * Field-level `{primitive}UI` uses `showDescription` aligned with `billing.resource-presets.tsx`.\n */\n\nexport function buildApplicationMainPresets(): Partial<ResourceUIBehavior> {\n return {\n [R.APPLICATION]: resourceUIBehavior(appFactory, ApplicationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: LayoutGrid,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.appDisplayName,\n layout: {\n refs: {\n sections: ['overview'],\n },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"appDisplayName\" />\n <DisplayField name=\"appSlug\" />\n <DisplayField name=\"lastVersion\" />\n </Section>\n {/*\n This surface composes NO children. It renders EMBEDDED (its READ is\n `notAddressable`), where the application's nine owned children —\n versions, features, api-keys, SSO/SCIM/SIEM configuration — would be\n noise. `targets={[]}` states that as a decision; saying nothing would\n mean \"compose them all\", which is what nine `hidden: true` entries\n were working around one edge at a time.\n The ADMIN variant below extends this display and names the four it\n does want.\n */}\n <RelatedResourceSections config={{ mode: SectionMode.TABS }} targets={[]} />\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"appDisplayName\" />\n <SummaryMeta>\n <DisplayField name=\"appSlug\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"appDisplayName\" />\n <FormField name=\"appSlug\" />\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n ],\n })),\n };\n}\n\nexport function buildApplicationAdminPresets(main: Partial<ResourceUIBehavior>): Partial<ResourceUIBehavior> {\n return {\n [R.APPLICATION]: resourceUIBehaviorFrom(appFactory, main[R.APPLICATION]!, ({ base, opsVariantResolver }) => ({\n icon: base.icon,\n getFrontendResourceLabel: base.getFrontendResourceLabel,\n // The admin surface EXTENDS the base display rather than reusing it: both\n // variants share one layout object, but they compose different children —\n // the base none, this one four. Extending is what lets a single shared\n // layout serve both without a per-variant relationship config.\n layout: {\n ...base.layout,\n display: () => {\n const BaseDisplay = base.layout!.display!;\n return (\n <>\n <BaseDisplay />\n {/* The four an operator manages here. The remaining five owned\n children — SSO / SCIM / SIEM configuration — stay out by not\n being named, which is what five `hidden: true` entries said. */}\n <RelatedResourceSections\n config={{ mode: SectionMode.TABS }}\n targets={[\n { resourceType: R.APPLICATION_METADATA, operationLike: Op.READ },\n R.APPLICATION_VERSIONS,\n R.APPLICATION_FEATURES,\n R.APPLICATION_API_KEYS,\n ]}\n />\n </>\n );\n },\n },\n views: [\n [opsVariantResolver(Op.READ, 'admin'), notAddressable()],\n [opsVariantResolver(Op.LIST, 'admin'), notAddressable()],\n [opsVariantResolver(Op.SEARCH, 'admin'), notAddressable()],\n [opsVariantResolver(Op.CREATE, 'admin'), notAddressable()],\n [opsVariantResolver(Op.UPDATE, 'admin'), notAddressable()],\n [opsVariantResolver(Op.DELETE, 'admin'), notAddressable()],\n ],\n })),\n\n [R.APPLICATION_VERSIONS]: resourceUIBehavior(appVersionsFactory, ApplicationVersionSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: GitBranch,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.version,\n layout: {\n refs: {\n sections: ['overview', 'releaseNotes'],\n },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"version\" />\n <DisplayField name=\"releaseDate\" />\n </Section>\n <Section name=\"releaseNotes\">\n <DisplayField name=\"releaseNotes\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout flow={SummaryFlow.ROW}>\n <DisplayField name=\"version\" />\n <DisplayField name=\"releaseDate\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"version\" />\n <FormField name=\"releaseDate\" />\n </Section>\n <Section name=\"releaseNotes\">\n <FormField name=\"releaseNotes\" />\n </Section>\n </FormLayout>\n ),\n },\n views: [\n // Versions are created by the app-version system (API-driven) — headless (API-only).\n [Op.CREATE, apiOnly()],\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n ],\n })),\n\n [R.APPLICATION_METADATA]: resourceUIBehavior(appMetadataFactory, ApplicationMetadataSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n layout: {\n refs: {\n sections: ['overview'],\n },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"description\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <DisplayField name=\"description\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"description\" />\n </Section>\n </FormLayout>\n ),\n },\n views: [\n // Metadata is system-managed, auto-initialized with the app — headless (API-only).\n [Op.CREATE, apiOnly()],\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n ],\n })),\n\n [R.APPLICATION_FEATURES]: resourceUIBehavior(appFeaturesFactory, ScopeFeaturesWithOverridesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n layout: {\n refs: { sections: ['overview', 'overrides'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </Section>\n <Section name=\"overrides\">\n <ObjectScope name=\"manualOverrides\">\n <DisplayField name=\"addedFeatures\" />\n <DisplayField name=\"removedFeatures\" />\n <DisplayField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"features\" />\n <FormField name=\"limits\" />\n </Section>\n <Section name=\"overrides\">\n <ObjectScope name=\"manualOverrides\">\n <FormField name=\"addedFeatures\" />\n <FormField name=\"removedFeatures\" />\n <FormField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [ApplicationFeatures_Operations.ENABLE_FEATURE, notAddressable({ iconOverride: ToggleRight })],\n [ApplicationFeatures_Operations.DISABLE_FEATURE, notAddressable({ iconOverride: ToggleLeft })],\n [ApplicationFeatures_Operations.RESET_FEATURES, notAddressable({ iconOverride: RotateCcw })],\n ],\n })),\n\n [R.APPLICATION_API_KEYS]: resourceUIBehavior(appApiKeysFactory, ApiKeyApplicationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: Key,\n layout: {\n refs: {\n sections: ['overview', 'access', 'lifecycle'],\n },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"name\" />\n <DisplayField name=\"scope\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"keyPrefix\" />\n </Section>\n <Section name=\"access\">\n <DisplayField name=\"roles\" />\n <DisplayField name=\"description\" />\n </Section>\n <Section name=\"lifecycle\">\n <DisplayField name=\"expiresAt\" />\n <DisplayField name=\"lastUsedAt\" />\n <DisplayField name=\"createdAt\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"scope\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"keyPrefix\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"name\" />\n <FormField name=\"status\" />\n <FormField name=\"expiresAt\" />\n </Section>\n <Section name=\"access\">\n <FormField name=\"roles\" />\n <FormField name=\"description\" />\n </Section>\n </FormLayout>\n ),\n },\n fields: {\n status: schemaShape.status.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE, showDescription: true },\n edit: { showDescription: true },\n values: {\n [ApiKeyStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [ApiKeyStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },\n [ApiKeyStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },\n },\n }),\n },\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n views: [\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.CREATE, notAddressable()],\n [AppApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw })],\n [AppApiKeys_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw })],\n [AppApiKeys_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff })],\n [AppApiKeys_Operations.REACTIVATE, notAddressable({ iconOverride: Power })],\n [AppApiKeys_Operations.EXTEND_EXPIRY, notAddressable({ iconOverride: CalendarPlus })],\n [AppApiKeys_Operations.USAGE_STATS, notAddressable({ iconOverride: ChartColumn })],\n ],\n })),\n };\n}\n\nexport const applicationMainPresets = buildApplicationMainPresets();\nexport const applicationAdminPresets = buildApplicationAdminPresets(applicationMainPresets);\n\nexport const applicationMainApplicationResourceUIBehavior = applicationMainPresets[R.APPLICATION]!;\nexport const applicationAdminApplicationResourceUIBehavior = applicationAdminPresets[R.APPLICATION]!;\nexport const applicationVersionsAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_VERSIONS]!;\nexport const applicationMetadataAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_METADATA]!;\nexport const applicationFeaturesAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_FEATURES]!;\nexport const appApiKeysApplicationAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_API_KEYS]!;\n"]}
1
+ {"version":3,"file":"application.resource-presets.js","sourceRoot":"","sources":["../../../../../src/config/resources/application.resource-presets.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { ResourceUIBehavior } from '@wildo-ai/saas-frontend-lib';\nimport {\n RelatedResourceSections,\n ResourceHeaderTitle,\n resourceUIBehavior,\n resourceUIBehaviorFrom,\n SummaryFlow,\n SummaryMeta,\n SummaryTitle,\n ResourceLayoutInlineEditDefault,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n DisplayField,\n DisplayLayout,\n FormField,\n FormLayout,\n ObjectScope,\n Section,\n SummaryLayout,\n SummaryTitlePlacement,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n BadgeSemanticVariant,\n DisplayChromeMode,\n EditChromeMode,\n EnumDisplayMode,\n ForeignKeyDisplayMode,\n SectionMode,\n StringEditMode,\n} from '@wildo-ai/zod-decorators';\nimport {\n BadgeCheck,\n CalendarPlus,\n FileText,\n ChartColumn,\n GitBranch,\n Key,\n KeyRound,\n ShieldCheck,\n ShieldX,\n Ban,\n Hourglass,\n LayoutGrid,\n Power,\n PowerOff,\n RefreshCw,\n RotateCcw,\n RotateCw,\n ToggleLeft,\n ToggleRight,\n} from 'lucide-react';\nimport {\n CoreResourceType as R,\n CoreResourceOperation as Op,\n ApiKeyStatus,\n AppApiKeys_Operations,\n ApplicationFeatures_Operations,\n applicationResourceConfiguration_InitializationFactory as appFactory,\n applicationVersionsResourceConfiguration_InitializationFactory as appVersionsFactory,\n applicationMetadataResourceConfiguration_InitializationFactory as appMetadataFactory,\n appApiKeysResourceConfiguration_InitializationFactory as appApiKeysFactory,\n appOAuthClientsResourceConfiguration_InitializationFactory as appOAuthClientsFactory,\n applicationAccessGrantsResourceConfiguration_InitializationFactory as appAccessGrantsFactory,\n ApplicationAccessGrants_Operations,\n ApplicationAccessGrantSchema,\n PlatformAccessGrantStatus,\n AppOAuthClients_Operations,\n OAuthClientApplicationSchema,\n OAuthClientStatus,\n applicationFeaturesResourceConfiguration_InitializationFactory as appFeaturesFactory,\n ApplicationSchema,\n ApplicationVersionSchema,\n ApplicationMetadataSchema,\n ApiKeyApplicationSchema,\n ScopeFeaturesWithOverridesSchema,\n} from '@wildo-ai/saas-models';\nimport { ApiKeyRotationWindowRows } from './api-key-rotation-window';\nimport { addressable, notAddressable, apiOnly, ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE } from './resource.config.utils';\n\n/**\n * Application — Resource frontend presets\n *\n * **Main:** APPLICATION is read-only and non-addressable (accessible from a menu dropdown —\n * \"About this app\" type surface). End users never manage versions or metadata.\n *\n * **Admin:** Full APPLICATION management (CRUD, activate/suspend), plus\n * APPLICATION_VERSIONS, APPLICATION_METADATA, and APPLICATION_API_KEYS.\n *\n * Field-level `{primitive}UI` uses `showDescription` aligned with `billing.resource-presets.tsx`.\n */\n\nexport function buildApplicationMainPresets(): Partial<ResourceUIBehavior> {\n return {\n [R.APPLICATION]: resourceUIBehavior(appFactory, ApplicationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: LayoutGrid,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.appDisplayName,\n layout: {\n refs: {\n sections: ['overview'],\n },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"appDisplayName\" />\n <DisplayField name=\"appSlug\" />\n <DisplayField name=\"lastVersion\" />\n </Section>\n {/*\n This surface composes NO children. It renders EMBEDDED (its READ is\n `notAddressable`), where the application's nine owned children —\n versions, features, api-keys, SSO/SCIM/SIEM configuration — would be\n noise. `targets={[]}` states that as a decision; saying nothing would\n mean \"compose them all\", which is what nine `hidden: true` entries\n were working around one edge at a time.\n The ADMIN variant below extends this display and names the four it\n does want.\n */}\n <RelatedResourceSections config={{ mode: SectionMode.TABS }} targets={[]} />\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"appDisplayName\" />\n <SummaryMeta>\n <DisplayField name=\"appSlug\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"appDisplayName\" />\n <FormField name=\"appSlug\" />\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n ],\n })),\n };\n}\n\nexport function buildApplicationAdminPresets(main: Partial<ResourceUIBehavior>): Partial<ResourceUIBehavior> {\n return {\n [R.APPLICATION]: resourceUIBehaviorFrom(appFactory, main[R.APPLICATION]!, ({ base, opsVariantResolver }) => ({\n icon: base.icon,\n getFrontendResourceLabel: base.getFrontendResourceLabel,\n // The admin surface EXTENDS the base display rather than reusing it: both\n // variants share one layout object, but they compose different children —\n // the base none, this one four. Extending is what lets a single shared\n // layout serve both without a per-variant relationship config.\n layout: {\n ...base.layout,\n display: () => {\n const BaseDisplay = base.layout!.display!;\n return (\n <>\n <BaseDisplay />\n {/* The four an operator manages here. The remaining five owned\n children — SSO / SCIM / SIEM configuration — stay out by not\n being named, which is what five `hidden: true` entries said. */}\n <RelatedResourceSections\n config={{ mode: SectionMode.TABS }}\n targets={[\n { resourceType: R.APPLICATION_METADATA, operationLike: Op.READ },\n R.APPLICATION_VERSIONS,\n R.APPLICATION_FEATURES,\n R.APPLICATION_API_KEYS,\n ]}\n />\n </>\n );\n },\n },\n views: [\n [opsVariantResolver(Op.READ, 'admin'), notAddressable()],\n [opsVariantResolver(Op.LIST, 'admin'), notAddressable()],\n [opsVariantResolver(Op.SEARCH, 'admin'), notAddressable()],\n [opsVariantResolver(Op.CREATE, 'admin'), notAddressable()],\n [opsVariantResolver(Op.UPDATE, 'admin'), notAddressable()],\n [opsVariantResolver(Op.DELETE, 'admin'), notAddressable()],\n ],\n })),\n\n [R.APPLICATION_VERSIONS]: resourceUIBehavior(appVersionsFactory, ApplicationVersionSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: GitBranch,\n // A release is named by its version string, so the page title IS the version and no row repeats it.\n getFrontendResourceLabel: ({ currentObject }) => currentObject.version,\n layout: {\n refs: {\n sections: ['overview', 'releaseNotes'],\n },\n // Settings rows on the read page, bare values on a card, and a STACKED form: a release is authored\n // content (a version string and a paragraph of notes), not a list of settings.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },\n display: () => (\n <DisplayLayout>\n {/* The version is the page's name, so this card holds only the date and carries no heading: \"Overview\"\n over one row named the page, not a part of it. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <DisplayField name=\"releaseDate\" />\n </Section>\n {/* The heading names the notes, so the notes carry no label and take the full width — as a settings\n row \"Release notes\" repeated the heading and squeezed a paragraph into half the card. */}\n <Section name=\"releaseNotes\" appearance={SectionMode.CARD} chromeMode={DisplayChromeMode.HIDDEN} hideDescription>\n <DisplayField name=\"releaseNotes\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n // One line: the version and the day it shipped, bare. TEMPLATE_OWNED with no title, because the card's\n // LABEL is the version string, which the first field already renders. At AUTO the row read\n // \"1.4.2 · Version: 1.4.2 · Released: …\".\n <SummaryLayout flow={SummaryFlow.ROW} titlePlacement={SummaryTitlePlacement.TEMPLATE_OWNED}>\n <DisplayField name=\"version\" className=\"w-auto\" />\n <DisplayField name=\"releaseDate\" className=\"w-auto\" />\n </SummaryLayout>\n ),\n // One flat form: three fields need no headings, and \"Release Notes\" over the only field in its section\n // said what the field's own label says.\n edit: () => (\n <FormLayout>\n <FormField name=\"version\" autoFocus />\n <FormField name=\"releaseDate\" />\n <FormField name=\"releaseNotes\" />\n </FormLayout>\n ),\n },\n fields: {\n // Release notes are a paragraph, not a line.\n releaseNotes: schemaShape.releaseNotes.stringUI({ edit: { editMode: StringEditMode.TEXTAREA } }),\n },\n views: [\n // Versions are created by the app-version system (API-driven) — headless (API-only).\n [Op.CREATE, apiOnly()],\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n ],\n })),\n\n [R.APPLICATION_METADATA]: resourceUIBehavior(appMetadataFactory, ApplicationMetadataSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n // The header showed the registry's missing-icon placeholder: nothing had ever named one.\n icon: FileText,\n layout: {\n // No sections. The record is one field — the application's description — and an \"Overview\" card with a\n // \"Purpose, audience, and positioning\" description over it was a heading and a prompt per field.\n // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows, bare on a card,\n // and a STACKED form, because the description is a paragraph someone writes.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },\n // Application metadata — the application’s own description. A settings pane is a list of decisions an operator came to TAKE, so its\n // writable fields are offered in place rather than behind a whole-pane edit mode. The set is\n // DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field\n // added to this schema tomorrow is covered without anyone remembering to decorate it.\n defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,\n // And its empty rows say WHICH emptiness they are — \"None yet\" for a list with no members,\n // \"Not available\" for a computed value, \"No value\" for a field awaiting input — instead of one\n // em dash standing for all three. Here the empty description IS the information: the seed writes\n // an empty one, and the pane is where somebody fills it in.\n defaultEmptyValue: 'placeholder',\n display: () => (\n <DisplayLayout>\n <DisplayField name=\"description\" />\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <DisplayField name=\"description\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <FormField name=\"description\" autoFocus />\n </FormLayout>\n ),\n },\n fields: {\n // A description is a paragraph, not a line.\n description: schemaShape.description.stringUI({ edit: { editMode: StringEditMode.TEXTAREA } }),\n },\n views: [\n // Metadata is system-managed, auto-initialized with the app — headless (API-only).\n [Op.CREATE, apiOnly()],\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n ],\n })),\n\n [R.APPLICATION_FEATURES]: resourceUIBehavior(appFeaturesFactory, ScopeFeaturesWithOverridesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n // The header showed the registry's missing-icon placeholder: nothing had ever named one. The same glyph as\n // the organization's entitlements, because it is the same record at another scope.\n icon: BadgeCheck,\n layout: {\n refs: { sections: ['overview', 'overrides'] },\n // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows on read, bare\n // values on a card. The form STACKS, because every field it edits is a list or a map of entries, which\n // needs the full width a settings row gives to its label.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },\n // An override list with nothing in it IS the answer on this pane — \"no feature was granted or withdrawn\n // by hand\" — so it says \"None yet\" rather than an em dash that reads as missing data.\n defaultEmptyValue: 'placeholder',\n display: () => (\n <DisplayLayout>\n {/* What the application HAS, as the engine evaluates it. The card carries no heading: it was titled\n \"Application Features\", exactly what the page header says above it. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </Section>\n {/* What an operator changed BY HAND. This heading stays: it is what separates a grant the configuration\n gave from one a person gave. Its description is an edit prompt and stays on the form. */}\n <Section name=\"overrides\" hideDescription>\n <ObjectScope name=\"manualOverrides\">\n <DisplayField name=\"addedFeatures\" />\n <DisplayField name=\"removedFeatures\" />\n <DisplayField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n {/* The effective lists need no introduction on the form either. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <FormField name=\"features\" />\n <FormField name=\"limits\" />\n </Section>\n {/* The one description kept: that a hand-made override outlives configuration changes until it is\n reset is not something the field names can say, and it is the consequence of saving. */}\n <Section name=\"overrides\">\n <ObjectScope name=\"manualOverrides\">\n <FormField name=\"addedFeatures\" />\n <FormField name=\"removedFeatures\" />\n <FormField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [ApplicationFeatures_Operations.ENABLE_FEATURE, notAddressable({ iconOverride: ToggleRight })],\n [ApplicationFeatures_Operations.DISABLE_FEATURE, notAddressable({ iconOverride: ToggleLeft })],\n [ApplicationFeatures_Operations.RESET_FEATURES, notAddressable({ iconOverride: RotateCcw })],\n ],\n })),\n\n [R.APPLICATION_API_KEYS]: resourceUIBehavior(appApiKeysFactory, ApiKeyApplicationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: Key,\n layout: {\n refs: {\n sections: ['overview', 'lifecycle'],\n },\n // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows on read and on the\n // form — a credential is configured, not written — and bare values on a card.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },\n // The identity line: the key's name (the page title) and its status beside it. Neither is repeated below.\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"status\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n display: () => (\n <DisplayLayout>\n {/* Name and status are the header's. `scope` is not laid out at all: on this screen it is always\n \"application\" (the schema pins it to that literal), so a row for it said nothing. The card has no\n heading, because \"Overview\" over the first group named the page rather than a part of it. */}\n {/* What the key is and what it may do, in one card: an \"Access\" section held `roles` alone, a heading\n over one row. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <DisplayField name=\"keyPrefix\" />\n <DisplayField name=\"description\" />\n <DisplayField name=\"roles\" />\n </Section>\n <Section name=\"lifecycle\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"expiresAt\" />\n <DisplayField name=\"lastUsedAt\" />\n <DisplayField name=\"createdAt\" />\n {/* While the previous secret still authenticates after a rotation: its prefix, and until when. */}\n <ApiKeyRotationWindowRows />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"status\" />\n <DisplayField name=\"keyPrefix\" />\n <DisplayField name=\"expiresAt\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n // One flat form. The name first, because it is what the key is called everywhere; the description as a\n // paragraph. Headings over two or three fields of one short form separated nothing.\n edit: () => (\n <FormLayout>\n <FormField name=\"name\" autoFocus />\n <FormField name=\"description\" />\n <FormField name=\"status\" />\n <FormField name=\"expiresAt\" />\n <FormField name=\"roles\" />\n </FormLayout>\n ),\n },\n fields: {\n // The badge's colour carries the state; the state's description is a form hint, not a line under every\n // badge on a list.\n status: schemaShape.status.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE },\n edit: { showDescription: true },\n values: {\n [ApiKeyStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [ApiKeyStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },\n [ApiKeyStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },\n },\n }),\n description: schemaShape.description.stringUI({\n display: { hideWhenEmpty: true },\n edit: { editMode: StringEditMode.TEXTAREA },\n }),\n // A key with no expiry never expires, and one never used has no last use: an empty row says nothing.\n // On a card the expiry keeps its label — a bare date beside a name and a status could be any of the key's\n // dates.\n expiresAt: schemaShape.expiresAt.dateUI({\n display: { hideWhenEmpty: true },\n summaryOverride: { chromeMode: DisplayChromeMode.INLINE },\n }),\n lastUsedAt: schemaShape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),\n // The rotation window, rendered only while the previous secret still authenticates (`ApiKeyRotationWindowRows`).\n // The prefix row says what an empty end date means — after a regenerate the old secret has none and keeps\n // working — so it carries its description; the end-date row hides itself when there is no date.\n previousKeyPrefix: schemaShape.previousKeyPrefix.stringUI({ display: { hideWhenEmpty: true, showDescription: true } }),\n previousKeyInvalidationDate: schemaShape.previousKeyInvalidationDate.dateUI({ display: { hideWhenEmpty: true } }),\n },\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n views: [\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.CREATE, notAddressable()],\n [AppApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppApiKeys_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppApiKeys_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppApiKeys_Operations.REACTIVATE, notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppApiKeys_Operations.EXTEND_EXPIRY, notAddressable({ iconOverride: CalendarPlus, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppApiKeys_Operations.USAGE_STATS, notAddressable({ iconOverride: ChartColumn })],\n ],\n })),\n\n /**\n * Application OAuth clients — the credential a machine presents to obtain a token.\n *\n * Shaped against the API-keys preset above on purpose: the resource's own specification calls\n * itself \"a FAITHFUL MIRROR of the api-keys resource\", and under client-credentials both\n * authenticate the SAME `APPLICATION_MACHINE` principal. An operator holding both screens is\n * looking at two credential TYPES for one identity, so making them look like siblings is the\n * honest rendering; giving them different shapes would suggest two different principals.\n *\n * Four sections rather than the api-keys three, because a client carries a concern a key does\n * not: `redirects` exists only for the authorization-code leg, and folding those URIs into\n * `access` would bury the one field whose exact value decides whether a sign-in round trip\n * lands. `EXTEND_EXPIRY` and `USAGE_STATS` are absent from the views for the reason the\n * specification gives — a client's validity is fixed at registration and no usage accounting is\n * recorded for clients, so naming either would name an operation this factory does not declare.\n *\n * The secret itself is never laid out. `hashedSecret` / `previousHashedSecret` are backend-only,\n * and `secretPrefix` is the part a human uses to recognise WHICH credential a log line names.\n */\n [R.OAUTH_CLIENTS_APPLICATION]: resourceUIBehavior(appOAuthClientsFactory, OAuthClientApplicationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: KeyRound,\n layout: {\n refs: {\n sections: ['overview', 'access', 'redirects', 'lifecycle'],\n },\n // Settings-page chrome (Settings Hub → Administration): label-left / value-right rows on read and on the\n // form — a client is configured, not written — and bare values on a card.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },\n // The identity line: the client's name (the page title) and its status beside it. Neither is repeated below.\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"status\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n display: () => (\n <DisplayLayout>\n {/* Name and status are the header's, so the first card holds what remains of the client's identity and\n carries no heading — \"Overview\" over it named the page rather than a part of it. No section carries\n a description on read: they were prompts (\"Warn that these are matched exactly…\" belongs where the\n URIs are typed, not where they are read). */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <DisplayField name=\"secretPrefix\" />\n <DisplayField name=\"description\" />\n </Section>\n <Section name=\"access\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"allowedGrants\" />\n <DisplayField name=\"allowedScopes\" />\n <DisplayField name=\"roles\" />\n <DisplayField name=\"tokenEndpointAuthMethod\" />\n <DisplayField name=\"requiresConsent\" />\n </Section>\n <Section name=\"redirects\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"redirectUris\" />\n <DisplayField name=\"postLogoutRedirectUris\" />\n </Section>\n <Section name=\"lifecycle\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"expiresAt\" />\n <DisplayField name=\"lastUsedAt\" />\n <DisplayField name=\"createdAt\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"status\" />\n <DisplayField name=\"secretPrefix\" />\n <DisplayField name=\"expiresAt\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n {/* The name first, focused: it is what the client is called on every screen and in every audit row. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <FormField name=\"name\" autoFocus />\n <FormField name=\"description\" />\n <FormField name=\"expiresAt\" />\n </Section>\n <Section name=\"access\" hideDescription>\n <FormField name=\"allowedGrants\" />\n <FormField name=\"allowedScopes\" />\n <FormField name=\"roles\" />\n <FormField name=\"tokenEndpointAuthMethod\" />\n <FormField name=\"requiresConsent\" />\n </Section>\n {/* The one description the form keeps: that these URIs are matched EXACTLY is not something the field\n names say, and a trailing slash typed here is a failed sign-in later. */}\n <Section name=\"redirects\">\n <FormField name=\"redirectUris\" />\n <FormField name=\"postLogoutRedirectUris\" />\n </Section>\n </FormLayout>\n ),\n },\n fields: {\n // Same three states and the same colours as an API key, because they mean the same things.\n // EXPIRED is a WARNING rather than a DESTRUCTIVE: it is the end of a validity window, not a\n // failure, and it is the one state `reactivate` deliberately does NOT revive. The state's description\n // is a form hint; under every badge on a list it read \"Whether the client can obtain tokens…\" per row.\n status: schemaShape.status.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE },\n edit: { showDescription: true },\n values: {\n [OAuthClientStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [OAuthClientStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },\n [OAuthClientStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },\n },\n }),\n description: schemaShape.description.stringUI({\n display: { hideWhenEmpty: true },\n edit: { editMode: StringEditMode.TEXTAREA },\n }),\n // A client-credentials client has no sign-out redirect, a client with no expiry never expires, and one\n // never used has no last use: each empty row said nothing.\n postLogoutRedirectUris: schemaShape.postLogoutRedirectUris.arrayUI({ display: { hideWhenEmpty: true } }),\n // On a card the expiry keeps its label: a bare date beside a name and a status could be any of the\n // client's dates.\n expiresAt: schemaShape.expiresAt.dateUI({\n display: { hideWhenEmpty: true },\n summaryOverride: { chromeMode: DisplayChromeMode.INLINE },\n }),\n lastUsedAt: schemaShape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),\n },\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n views: [\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.CREATE, notAddressable()],\n [AppOAuthClients_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppOAuthClients_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppOAuthClients_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n [AppOAuthClients_Operations.REACTIVATE, notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n // Dispatched by the expiry sweep rather than by a person — headless, so it must carry no\n // view fields at all. An operator ends a client early with DEACTIVATE.\n [AppOAuthClients_Operations.EXPIRE, apiOnly()],\n ],\n })),\n\n /**\n * Application-wide access grants — the two-person rule, made visible.\n *\n * This is the record of an ELEVATION, not of a permission: one administrator requests a\n * time-bound window over an application-wide read, and a DIFFERENT administrator signs it.\n * Until this preset existed the mechanism ran with no surface at all, which is the worst shape\n * for a control of this kind — its entire justification is that the consequence becomes VISIBLE\n * rather than prevented, and nothing that cannot be read can make anything visible.\n *\n * Three sections, each answering one of the questions a reviewer actually asks:\n * `request` (who asked, and for what stated reason), `decision` (who signed, when, and why),\n * and `window` (how long it lasts, and which credential it admits). Merging decision into\n * request would put the requester and the approver in one block — the two identities the\n * control exists to keep apart.\n *\n * `justification` and `decisionReason` are laid out as first-class fields rather than metadata.\n * A grant whose reason is unreadable is a grant nobody can review, and the reason is the only\n * part of the row a human wrote.\n */\n [R.APPLICATION_ACCESS_GRANTS]: resourceUIBehavior(appAccessGrantsFactory, ApplicationAccessGrantSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: ShieldCheck,\n // A request is named by the instant it was made, in the viewer's date-time format. It was named by the\n // requesting operator's user id, which put a raw `6aa25215267f7e7758312323` at the top of the page and as the\n // title of every card: this callback is synchronous over the record, and the record carries the operator's id\n // alone, never their name. WHO asked is still the first thing the body and the card show, resolved to the\n // person by the foreign-key renderer (see `operatorUserId` below). `createdAt` is optional on the row, so a\n // row without it falls back to its id rather than to nothing.\n //\n // (History: this preset once declared no label strategy at all while the specification documented\n // `frontend.label`, and that pair THROWS at module scope in `resourceSpecificationFromFrontendConfiguration`,\n // taking the whole `@wildo-ai/saas-specifications` package down. Keep the two declared together.)\n getFrontendResourceLabel: ({ currentObject, formatDateTime }) =>\n currentObject.createdAt ? formatDateTime(currentObject.createdAt) : currentObject._id,\n layout: {\n refs: {\n sections: ['request', 'decision', 'window'],\n },\n // Settings rows on the read page, bare values on a card. There is no form: every state change is a named verb.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },\n // The identity line: when it was asked (the title) and where it stands. Neither is repeated below.\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"status\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n // The three headings stay — they are what keeps the requester and the approver in separate blocks, which is\n // the distinction this control exists for. Their descriptions do not: each explained the control to a\n // reader who is looking at one of its records.\n display: () => (\n <DisplayLayout>\n <Section name=\"request\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"operatorUserId\" />\n <DisplayField name=\"justification\" />\n </Section>\n <Section name=\"decision\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"approvedByUserId\" />\n <DisplayField name=\"approvedAt\" />\n <DisplayField name=\"decisionReason\" />\n </Section>\n <Section name=\"window\" appearance={SectionMode.CARD} hideDescription>\n <DisplayField name=\"expiresAt\" />\n <DisplayField name=\"grantedMachineCredential\" />\n </Section>\n </DisplayLayout>\n ),\n // The instant is the card's title (AUTO); below it, who asked, where it stands, and when the window ends.\n summary: () => (\n <SummaryLayout>\n <SummaryMeta>\n <DisplayField name=\"operatorUserId\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"expiresAt\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n },\n fields: {\n // PENDING_APPROVAL is a WARNING rather than a neutral secondary: an unsigned request is the\n // state a reviewer must act on, and the one state where the window does not yet exist.\n // DENIED and REVOKED are both DESTRUCTIVE because both are a refusal; EXPIRED is not — it is\n // the control working, a window closing on its own. The state's description (\"Active status requires a\n // valid, unexpired access window.\") read under every badge on the queue, so it is not shown.\n status: schemaShape.status.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE },\n values: {\n [PlatformAccessGrantStatus.PENDING_APPROVAL]: { color: BadgeSemanticVariant.WARNING },\n [PlatformAccessGrantStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [PlatformAccessGrantStatus.DENIED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n [PlatformAccessGrantStatus.REVOKED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n [PlatformAccessGrantStatus.EXPIRED]: { color: BadgeSemanticVariant.SECONDARY },\n },\n }),\n // Both identities resolve to the PERSON, never an id: a reviewer is asking \"who\", and a hex id answers\n // nobody.\n operatorUserId: schemaShape.operatorUserId.foreignKeyUI({ display: { mode: ForeignKeyDisplayMode.LABEL } }),\n // Empty until somebody signs, and on a PENDING request that emptiness is the answer (\"not signed yet\"), so\n // the approver row stays; the reason is optional even on a decision, and hides.\n approvedByUserId: schemaShape.approvedByUserId.foreignKeyUI({ display: { mode: ForeignKeyDisplayMode.LABEL } }),\n decisionReason: schemaShape.decisionReason.stringUI({ display: { hideWhenEmpty: true } }),\n // Present only when the grant was requested for a machine credential.\n grantedMachineCredential: schemaShape.grantedMachineCredential.objectUI({ display: { hideWhenEmpty: true } }),\n // On a card the expiry keeps its label: a bare date beside a name and a status could be the request's.\n expiresAt: schemaShape.expiresAt.dateUI({ summaryOverride: { chromeMode: DisplayChromeMode.INLINE } }),\n },\n views: [\n [Op.READ, notAddressable()],\n // The review queue. `status` is the axis a reviewer sorts by — an unsigned request is the\n // only row that needs anybody — so it is the quick filter.\n [Op.LIST, addressable({\n collectionDisplayConfig: {\n quickFilterField: 'status',\n temporalGroupField: 'createdAt',\n },\n })],\n [ApplicationAccessGrants_Operations.REQUEST_ACCESS, notAddressable({ iconOverride: Hourglass })],\n [ApplicationAccessGrants_Operations.APPROVE, notAddressable({ iconOverride: ShieldCheck })],\n [ApplicationAccessGrants_Operations.DENY, notAddressable({ iconOverride: ShieldX })],\n [ApplicationAccessGrants_Operations.REVOKE, notAddressable({ iconOverride: Ban })],\n // Dispatched by the credential-expiry sweep and by nothing else, so it is headless.\n [ApplicationAccessGrants_Operations.EXPIRE, apiOnly()],\n ],\n })),\n };\n}\n\nexport const applicationMainPresets = buildApplicationMainPresets();\nexport const applicationAdminPresets = buildApplicationAdminPresets(applicationMainPresets);\n\nexport const applicationMainApplicationResourceUIBehavior = applicationMainPresets[R.APPLICATION]!;\nexport const applicationAdminApplicationResourceUIBehavior = applicationAdminPresets[R.APPLICATION]!;\nexport const applicationVersionsAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_VERSIONS]!;\nexport const applicationMetadataAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_METADATA]!;\nexport const applicationFeaturesAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_FEATURES]!;\nexport const appApiKeysApplicationAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_API_KEYS]!;\nexport const appOAuthClientsApplicationAdminResourceUIBehavior = applicationAdminPresets[R.OAUTH_CLIENTS_APPLICATION]!;\nexport const applicationAccessGrantsAdminResourceUIBehavior = applicationAdminPresets[R.APPLICATION_ACCESS_GRANTS]!;\n"]}