@wildo-ai/saas-frontend-lib 1.1.8 → 1.1.10

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 (987) hide show
  1. package/dist/esm/companion-exports.d.ts.map +1 -1
  2. package/dist/esm/companion-runtime-exports.d.ts.map +1 -1
  3. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  4. package/dist/esm/components/actions/action-button.d.ts.map +1 -1
  5. package/dist/esm/components/actions/button-group.d.ts.map +1 -1
  6. package/dist/esm/components/actions/button.d.ts.map +1 -1
  7. package/dist/esm/components/ai-elements/artifacts/artifact-list.d.ts.map +1 -1
  8. package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
  9. package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
  10. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -1
  11. package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
  12. package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
  13. package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
  14. package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
  15. package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
  16. package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
  17. package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
  18. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  19. package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
  20. package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
  21. package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
  22. package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
  23. package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
  24. package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
  25. package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
  26. package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
  27. package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
  28. package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
  29. package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
  30. package/dist/esm/components/ai-elements/meta/agent-wrappers.d.ts.map +1 -1
  31. package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
  32. package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
  33. package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
  34. package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
  35. package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
  36. package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
  37. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
  38. package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
  39. package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
  40. package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
  41. package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
  42. package/dist/esm/components/app/AppLayout_AuthenticatedRoute.d.ts.map +1 -1
  43. package/dist/esm/components/app/AppLayout_ConsentGate.d.ts.map +1 -1
  44. package/dist/esm/components/app/AppLayout_ConsentGate.labels.d.ts.map +1 -1
  45. package/dist/esm/components/app/AppLayout_DocumentAcceptanceGate.d.ts.map +1 -1
  46. package/dist/esm/components/app/AppLayout_DocumentAcceptanceGate.labels.d.ts.map +1 -1
  47. package/dist/esm/components/app/AppLayout_ErrorBoundary.d.ts.map +1 -1
  48. package/dist/esm/components/app/AppLayout_ErrorBoundary.labels.d.ts.map +1 -1
  49. package/dist/esm/components/app/AppLayout_Home.d.ts.map +1 -1
  50. package/dist/esm/components/app/AppLayout_Home.labels.d.ts.map +1 -1
  51. package/dist/esm/components/app/AppLayout_MainContainer.d.ts.map +1 -1
  52. package/dist/esm/components/app/AppLayout_NotificationCenter.d.ts.map +1 -1
  53. package/dist/esm/components/app/AppLayout_RouterErrorBoundary.d.ts.map +1 -1
  54. package/dist/esm/components/app/AppLayout_RouterErrorBoundary.labels.d.ts.map +1 -1
  55. package/dist/esm/components/app/AppPage_Home.d.ts.map +1 -1
  56. package/dist/esm/components/app/PublicLayout_LegalNotice.d.ts +18 -0
  57. package/dist/esm/components/app/PublicLayout_LegalNotice.d.ts.map +1 -0
  58. package/dist/esm/components/app/PublicLayout_LegalNotice.js +8 -0
  59. package/dist/esm/components/app/PublicLayout_LegalNotice.js.map +1 -0
  60. package/dist/esm/components/app/PublicLayout_LegalNotice.labels.d.ts +3 -0
  61. package/dist/esm/components/app/PublicLayout_LegalNotice.labels.d.ts.map +1 -0
  62. package/dist/esm/components/app/PublicLayout_LegalNotice.labels.js +38 -0
  63. package/dist/esm/components/app/PublicLayout_LegalNotice.labels.js.map +1 -0
  64. package/dist/esm/components/app/PublicLayout_MainContainer.d.ts.map +1 -1
  65. package/dist/esm/components/app/PublicLayout_StaticContentContainer.d.ts.map +1 -1
  66. package/dist/esm/components/app/PublicLayout_StaticContentContainer.labels.d.ts.map +1 -1
  67. package/dist/esm/components/app/PublicLayout_Terms.d.ts.map +1 -1
  68. package/dist/esm/components/app/PublicLayout_Terms.labels.d.ts.map +1 -1
  69. package/dist/esm/components/auth/Auth_AuthCallback.d.ts.map +1 -1
  70. package/dist/esm/components/auth/Auth_AuthCallback.labels.d.ts.map +1 -1
  71. package/dist/esm/components/auth/Auth_ConfirmEmail.d.ts.map +1 -1
  72. package/dist/esm/components/auth/Auth_ConfirmEmail.labels.d.ts.map +1 -1
  73. package/dist/esm/components/auth/Auth_EnrollmentRequired.d.ts.map +1 -1
  74. package/dist/esm/components/auth/Auth_EnrollmentRequired.labels.d.ts.map +1 -1
  75. package/dist/esm/components/auth/Auth_Invitation.d.ts.map +1 -1
  76. package/dist/esm/components/auth/Auth_Invitation.labels.d.ts.map +1 -1
  77. package/dist/esm/components/auth/Auth_MagicLinkVerify.d.ts.map +1 -1
  78. package/dist/esm/components/auth/Auth_MagicLinkVerify.labels.d.ts.map +1 -1
  79. package/dist/esm/components/auth/Auth_Main.d.ts.map +1 -1
  80. package/dist/esm/components/auth/Auth_Main.labels.d.ts.map +1 -1
  81. package/dist/esm/components/auth/Auth_MfaChallenge.d.ts.map +1 -1
  82. package/dist/esm/components/auth/Auth_MfaChallenge.labels.d.ts.map +1 -1
  83. package/dist/esm/components/auth/Auth_OAuthConsent.d.ts.map +1 -1
  84. package/dist/esm/components/auth/Auth_OAuthConsent.labels.d.ts.map +1 -1
  85. package/dist/esm/components/auth/Auth_OAuthLoggedOut.d.ts.map +1 -1
  86. package/dist/esm/components/auth/Auth_OAuthLoggedOut.labels.d.ts.map +1 -1
  87. package/dist/esm/components/auth/Auth_OAuthLogoutConfirm.d.ts.map +1 -1
  88. package/dist/esm/components/auth/Auth_OAuthLogoutConfirm.labels.d.ts.map +1 -1
  89. package/dist/esm/components/auth/Auth_OneOffSession.d.ts.map +1 -1
  90. package/dist/esm/components/auth/Auth_OneOffSession.labels.d.ts.map +1 -1
  91. package/dist/esm/components/auth/Auth_OrganizationOnboarding.d.ts.map +1 -1
  92. package/dist/esm/components/auth/Auth_OrganizationOnboarding.labels.d.ts.map +1 -1
  93. package/dist/esm/components/auth/Auth_PasswordLost.d.ts.map +1 -1
  94. package/dist/esm/components/auth/Auth_PasswordLost.labels.d.ts.map +1 -1
  95. package/dist/esm/components/auth/Auth_Register.d.ts.map +1 -1
  96. package/dist/esm/components/auth/Auth_Register.labels.d.ts.map +1 -1
  97. package/dist/esm/components/auth/StepUpAuthDialog.d.ts.map +1 -1
  98. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.d.ts.map +1 -1
  99. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.d.ts.map +1 -1
  100. package/dist/esm/components/auth/admin-config/ResourceLayoutPreset_Create_SamlWizard.d.ts.map +1 -1
  101. package/dist/esm/components/auth/admin-config/ResourceLayoutPreset_Read_SsoSaml.d.ts.map +1 -1
  102. package/dist/esm/components/auth/admin-config/SsoConnectionSamlReadSection.d.ts.map +1 -1
  103. package/dist/esm/components/auth/enrollment/PasskeyEnrollmentMethod.d.ts.map +1 -1
  104. package/dist/esm/components/auth/enrollment/PhoneEnrollmentMethod.d.ts.map +1 -1
  105. package/dist/esm/components/auth/enrollment/TotpEnrollmentMethod.d.ts.map +1 -1
  106. package/dist/esm/components/auth/enrollment/enrollment-method-components.d.ts.map +1 -1
  107. package/dist/esm/components/auth/methods/EmailOtpAuthMethod.d.ts.map +1 -1
  108. package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.d.ts.map +1 -1
  109. package/dist/esm/components/auth/methods/MagicLinkAuthMethod.d.ts.map +1 -1
  110. package/dist/esm/components/auth/methods/OrgOidcAuthMethod.d.ts.map +1 -1
  111. package/dist/esm/components/auth/methods/OrgSamlAuthMethod.d.ts.map +1 -1
  112. package/dist/esm/components/auth/methods/PasskeyAuthMethod.d.ts.map +1 -1
  113. package/dist/esm/components/auth/methods/PasswordAuthMethod.d.ts.map +1 -1
  114. package/dist/esm/components/auth/methods/SmsOtpAuthMethod.d.ts.map +1 -1
  115. package/dist/esm/components/auth/methods/TotpAuthMethod.d.ts.map +1 -1
  116. package/dist/esm/components/auth/methods/auth-method-components.d.ts.map +1 -1
  117. package/dist/esm/components/auth/methods/auth-method-presentation.d.ts.map +1 -1
  118. package/dist/esm/components/auth/pages/AuthPage_AuthCallback.d.ts.map +1 -1
  119. package/dist/esm/components/auth/pages/AuthPage_AuthExchange.d.ts.map +1 -1
  120. package/dist/esm/components/auth/pages/AuthPage_ConfirmEmail.d.ts.map +1 -1
  121. package/dist/esm/components/auth/pages/AuthPage_EnrollmentRequired.d.ts.map +1 -1
  122. package/dist/esm/components/auth/pages/AuthPage_Invitation.d.ts.map +1 -1
  123. package/dist/esm/components/auth/pages/AuthPage_MagicLinkVerify.d.ts.map +1 -1
  124. package/dist/esm/components/auth/pages/AuthPage_Main.d.ts.map +1 -1
  125. package/dist/esm/components/auth/pages/AuthPage_MfaChallenge.d.ts.map +1 -1
  126. package/dist/esm/components/auth/pages/AuthPage_OAuthConsent.d.ts.map +1 -1
  127. package/dist/esm/components/auth/pages/AuthPage_OAuthLoggedOut.d.ts.map +1 -1
  128. package/dist/esm/components/auth/pages/AuthPage_OAuthLogoutConfirm.d.ts.map +1 -1
  129. package/dist/esm/components/auth/pages/AuthPage_OneOffSession.d.ts.map +1 -1
  130. package/dist/esm/components/auth/pages/AuthPage_OrganizationOnboarding.d.ts.map +1 -1
  131. package/dist/esm/components/auth/pages/AuthPage_PasswordLost.d.ts.map +1 -1
  132. package/dist/esm/components/auth/pages/AuthPage_ReAuthenticationCallback.d.ts.map +1 -1
  133. package/dist/esm/components/auth/pages/AuthPage_Register.d.ts.map +1 -1
  134. package/dist/esm/components/auth/utils/AuthMethodChoiceList.d.ts.map +1 -1
  135. package/dist/esm/components/auth/utils/AuthMethodIcon.d.ts.map +1 -1
  136. package/dist/esm/components/auth/utils/AuthSecondaryLink.d.ts.map +1 -1
  137. package/dist/esm/components/auth/utils/AuthSingleFieldFormLayout.d.ts.map +1 -1
  138. package/dist/esm/components/auth/utils/OAuthProvidersSection.d.ts.map +1 -1
  139. package/dist/esm/components/auth/utils/PasswordStrengthIndicator.d.ts.map +1 -1
  140. package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.d.ts.map +1 -1
  141. package/dist/esm/components/auth/utils/resolvePasswordViolationsToLabels.d.ts.map +1 -1
  142. package/dist/esm/components/auth/utils/useMfaContinuationNavigation.d.ts.map +1 -1
  143. package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
  144. package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -1
  145. package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
  146. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  147. package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
  148. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  149. package/dist/esm/components/compliance/GovernedDocumentAcceptanceControl.d.ts.map +1 -1
  150. package/dist/esm/components/data-display/AutomaticDisplayer.d.ts.map +1 -1
  151. package/dist/esm/components/data-display/DisplayField.d.ts.map +1 -1
  152. package/dist/esm/components/data-display/DisplayFieldArray.d.ts.map +1 -1
  153. package/dist/esm/components/data-display/DisplayFieldEditable.d.ts.map +1 -1
  154. package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts.map +1 -1
  155. package/dist/esm/components/data-display/DisplayFieldReadOnly.d.ts.map +1 -1
  156. package/dist/esm/components/data-display/DisplayFieldReadOnlyArraySection.d.ts.map +1 -1
  157. package/dist/esm/components/data-display/DisplayTemplateContext.d.ts.map +1 -1
  158. package/dist/esm/components/data-display/DisplayValueDispatcher.d.ts.map +1 -1
  159. package/dist/esm/components/data-display/ResourceAutomaticDisplayer.d.ts.map +1 -1
  160. package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts.map +1 -1
  161. package/dist/esm/components/data-display/automatic-displayer.utils.d.ts.map +1 -1
  162. package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
  163. package/dist/esm/components/data-display/badge-tone.d.ts.map +1 -1
  164. package/dist/esm/components/data-display/badge.d.ts.map +1 -1
  165. package/dist/esm/components/data-display/chart-echarts.d.ts.map +1 -1
  166. package/dist/esm/components/data-display/chromes/DisplayChromeContext.d.ts.map +1 -1
  167. package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts.map +1 -1
  168. package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
  169. package/dist/esm/components/data-display/display-field-resolution.utils.d.ts.map +1 -1
  170. package/dist/esm/components/data-display/display-field-resolved-props.d.ts.map +1 -1
  171. package/dist/esm/components/data-display/display-resource-link-trail.d.ts.map +1 -1
  172. package/dist/esm/components/data-display/duration.d.ts.map +1 -1
  173. package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.d.ts.map +1 -1
  174. package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts.map +1 -1
  175. package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.d.ts.map +1 -1
  176. package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -1
  177. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
  178. package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
  179. package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
  180. package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
  181. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
  182. package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
  183. package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
  184. package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
  185. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
  186. package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
  187. package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
  188. package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
  189. package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
  190. package/dist/esm/components/data-display/formatters/display-field-json.d.ts.map +1 -1
  191. package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
  192. package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
  193. package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
  194. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
  195. package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
  196. package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
  197. package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
  198. package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
  199. package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
  200. package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
  201. package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
  202. package/dist/esm/components/data-display/identifier.d.ts.map +1 -1
  203. package/dist/esm/components/data-display/kbd.d.ts.map +1 -1
  204. package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
  205. package/dist/esm/components/data-display/timeline.d.ts.map +1 -1
  206. package/dist/esm/components/data-display/useFileActivation.d.ts.map +1 -1
  207. package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
  208. package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
  209. package/dist/esm/components/feedback/empty-display-policy.utils.d.ts.map +1 -1
  210. package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
  211. package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
  212. package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
  213. package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
  214. package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
  215. package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
  216. package/dist/esm/components/feedback/lazy-door-error-boundary.d.ts.map +1 -1
  217. package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
  218. package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
  219. package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
  220. package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
  221. package/dist/esm/components/feedback/progress.d.ts.map +1 -1
  222. package/dist/esm/components/feedback/resource-empty-state.d.ts.map +1 -1
  223. package/dist/esm/components/feedback/skeleton-text.d.ts.map +1 -1
  224. package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
  225. package/dist/esm/components/feedback/toast.d.ts.map +1 -1
  226. package/dist/esm/components/files/Files_UploadGrantDrop.d.ts.map +1 -1
  227. package/dist/esm/components/files/Files_UploadGrantDrop.labels.d.ts.map +1 -1
  228. package/dist/esm/components/files/pages/FilesPage_UploadGrant.d.ts.map +1 -1
  229. package/dist/esm/components/flows-actors/actor.d.ts.map +1 -1
  230. package/dist/esm/components/flows-actors/actor.labels.d.ts.map +1 -1
  231. package/dist/esm/components/flows-actors/agent-config.d.ts.map +1 -1
  232. package/dist/esm/components/flows-actors/agent-config.labels.d.ts.map +1 -1
  233. package/dist/esm/components/flows-actors/approval-modification-refusal.utils.d.ts.map +1 -1
  234. package/dist/esm/components/flows-actors/approval.d.ts.map +1 -1
  235. package/dist/esm/components/flows-actors/approval.labels.d.ts.map +1 -1
  236. package/dist/esm/components/flows-actors/artifact-browser.d.ts.map +1 -1
  237. package/dist/esm/components/flows-actors/artifact-browser.labels.d.ts.map +1 -1
  238. package/dist/esm/components/flows-actors/execution-plan.d.ts.map +1 -1
  239. package/dist/esm/components/flows-actors/execution-plan.labels.d.ts.map +1 -1
  240. package/dist/esm/components/flows-actors/flow-execution.d.ts.map +1 -1
  241. package/dist/esm/components/flows-actors/flow-execution.labels.d.ts.map +1 -1
  242. package/dist/esm/components/flows-actors/flow-node-badges.d.ts.map +1 -1
  243. package/dist/esm/components/flows-actors/flow-node.d.ts.map +1 -1
  244. package/dist/esm/components/flows-actors/flow-node.labels.d.ts.map +1 -1
  245. package/dist/esm/components/flows-actors/flows-actors-graph-runtime.d.ts.map +1 -1
  246. package/dist/esm/components/flows-actors/flows-actors-graph.lazy.d.ts.map +1 -1
  247. package/dist/esm/components/flows-actors/system-catalog.d.ts.map +1 -1
  248. package/dist/esm/components/flows-actors/system-catalog.labels.d.ts.map +1 -1
  249. package/dist/esm/components/flows-actors/task-detail.d.ts.map +1 -1
  250. package/dist/esm/components/flows-actors/task-detail.labels.d.ts.map +1 -1
  251. package/dist/esm/components/flows-actors/task-memory.d.ts.map +1 -1
  252. package/dist/esm/components/flows-actors/task-memory.labels.d.ts.map +1 -1
  253. package/dist/esm/components/form/Form.d.ts.map +1 -1
  254. package/dist/esm/components/form/automated/AutomatedArrayField.d.ts.map +1 -1
  255. package/dist/esm/components/form/automated/AutomatedForm.d.ts.map +1 -1
  256. package/dist/esm/components/form/automated/AutosaveContext.d.ts.map +1 -1
  257. package/dist/esm/components/form/automated/FormField.d.ts.map +1 -1
  258. package/dist/esm/components/form/automated/FormFieldArray.d.ts.map +1 -1
  259. package/dist/esm/components/form/automated/FormFieldComposite.d.ts.map +1 -1
  260. package/dist/esm/components/form/automated/FormFieldRecord.d.ts.map +1 -1
  261. package/dist/esm/components/form/automated/FormTemplateContext.d.ts.map +1 -1
  262. package/dist/esm/components/form/automated/GeneratedAssociationRelationshipField.d.ts.map +1 -1
  263. package/dist/esm/components/form/automated/GeneratedReferenceRelationshipField.d.ts.map +1 -1
  264. package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts.map +1 -1
  265. package/dist/esm/components/form/automated/automated-form-submit.utils.d.ts.map +1 -1
  266. package/dist/esm/components/form/automated/autosave-derivation.frontend.utils.d.ts.map +1 -1
  267. package/dist/esm/components/form/automated/autosave-indicator.d.ts.map +1 -1
  268. package/dist/esm/components/form/automated/autosave-indicator.utils.d.ts.map +1 -1
  269. package/dist/esm/components/form/automated/create-form-default-values.utils.d.ts.map +1 -1
  270. package/dist/esm/components/form/automated/field-clearing-rule.frontend.utils.d.ts.map +1 -1
  271. package/dist/esm/components/form/automated/form-field-autocomplete.frontend.utils.d.ts.map +1 -1
  272. package/dist/esm/components/form/automated/generated-relationship-field.helpers.d.ts.map +1 -1
  273. package/dist/esm/components/form/automated/generated-relationship-field.hooks.d.ts.map +1 -1
  274. package/dist/esm/components/form/automated/generated-relationship-field.shared.d.ts.map +1 -1
  275. package/dist/esm/components/form/automated/generated-relationship-field.utils.d.ts.map +1 -1
  276. package/dist/esm/components/form/automated/useArrayItemAutosaveField.d.ts.map +1 -1
  277. package/dist/esm/components/form/chromes/FormChromeContext.d.ts.map +1 -1
  278. package/dist/esm/components/form/chromes/FormFieldChrome.d.ts.map +1 -1
  279. package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
  280. package/dist/esm/components/form/chromes/form-primitives.d.ts.map +1 -1
  281. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  282. package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
  283. package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
  284. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
  285. package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
  286. package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
  287. package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
  288. package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
  289. package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
  290. package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
  291. package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
  292. package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
  293. package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
  294. package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
  295. package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
  296. package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
  297. package/dist/esm/components/form/controls/file/file-readiness.frontend.utils.d.ts.map +1 -1
  298. package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
  299. package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
  300. package/dist/esm/components/form/controls/file/image-crop.frontend.utils.d.ts.map +1 -1
  301. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +1 -1
  302. package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
  303. package/dist/esm/components/form/controls/input.d.ts.map +1 -1
  304. package/dist/esm/components/form/controls/number/slider.d.ts +1 -1
  305. package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
  306. package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
  307. package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
  308. package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
  309. package/dist/esm/components/form/controls/string/markdown-editor.d.ts.map +1 -1
  310. package/dist/esm/components/form/controls/string/markdown-editor.labels.d.ts.map +1 -1
  311. package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
  312. package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
  313. package/dist/esm/components/form/feedback/RemoteChangeNotification.d.ts.map +1 -1
  314. package/dist/esm/components/form/fields/accepted-file-kinds-description.frontend.utils.d.ts.map +1 -1
  315. package/dist/esm/components/form/fields/form-field-address.d.ts.map +1 -1
  316. package/dist/esm/components/form/fields/form-field-address.labels.d.ts.map +1 -1
  317. package/dist/esm/components/form/fields/form-field-bigdecimal.d.ts.map +1 -1
  318. package/dist/esm/components/form/fields/form-field-bigdecimal.labels.d.ts.map +1 -1
  319. package/dist/esm/components/form/fields/form-field-boolean.d.ts.map +1 -1
  320. package/dist/esm/components/form/fields/form-field-boolean.labels.d.ts.map +1 -1
  321. package/dist/esm/components/form/fields/form-field-code.d.ts.map +1 -1
  322. package/dist/esm/components/form/fields/form-field-code.labels.d.ts.map +1 -1
  323. package/dist/esm/components/form/fields/form-field-date.d.ts.map +1 -1
  324. package/dist/esm/components/form/fields/form-field-date.labels.d.ts.map +1 -1
  325. package/dist/esm/components/form/fields/form-field-datetime.d.ts.map +1 -1
  326. package/dist/esm/components/form/fields/form-field-datetime.labels.d.ts.map +1 -1
  327. package/dist/esm/components/form/fields/form-field-duration.d.ts.map +1 -1
  328. package/dist/esm/components/form/fields/form-field-duration.labels.d.ts.map +1 -1
  329. package/dist/esm/components/form/fields/form-field-enum.d.ts.map +1 -1
  330. package/dist/esm/components/form/fields/form-field-enum.labels.d.ts.map +1 -1
  331. package/dist/esm/components/form/fields/form-field-file-provider-constraints.frontend.utils.d.ts.map +1 -1
  332. package/dist/esm/components/form/fields/form-field-file.d.ts.map +1 -1
  333. package/dist/esm/components/form/fields/form-field-file.labels.d.ts.map +1 -1
  334. package/dist/esm/components/form/fields/form-field-money.d.ts.map +1 -1
  335. package/dist/esm/components/form/fields/form-field-money.labels.d.ts.map +1 -1
  336. package/dist/esm/components/form/fields/form-field-number.d.ts.map +1 -1
  337. package/dist/esm/components/form/fields/form-field-number.labels.d.ts.map +1 -1
  338. package/dist/esm/components/form/fields/form-field-phone.d.ts.map +1 -1
  339. package/dist/esm/components/form/fields/form-field-phone.labels.d.ts.map +1 -1
  340. package/dist/esm/components/form/fields/form-field-range-bigdecimal.d.ts.map +1 -1
  341. package/dist/esm/components/form/fields/form-field-range-bigdecimal.labels.d.ts.map +1 -1
  342. package/dist/esm/components/form/fields/form-field-range-date.d.ts.map +1 -1
  343. package/dist/esm/components/form/fields/form-field-range-date.labels.d.ts.map +1 -1
  344. package/dist/esm/components/form/fields/form-field-range-datetime.d.ts.map +1 -1
  345. package/dist/esm/components/form/fields/form-field-range-datetime.labels.d.ts.map +1 -1
  346. package/dist/esm/components/form/fields/form-field-range-money.d.ts.map +1 -1
  347. package/dist/esm/components/form/fields/form-field-range-money.labels.d.ts.map +1 -1
  348. package/dist/esm/components/form/fields/form-field-range-number.d.ts.map +1 -1
  349. package/dist/esm/components/form/fields/form-field-range-number.labels.d.ts.map +1 -1
  350. package/dist/esm/components/form/fields/form-field-range-time.d.ts.map +1 -1
  351. package/dist/esm/components/form/fields/form-field-range-time.labels.d.ts.map +1 -1
  352. package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts.map +1 -1
  353. package/dist/esm/components/form/fields/form-field-string.d.ts.map +1 -1
  354. package/dist/esm/components/form/fields/form-field-string.labels.d.ts.map +1 -1
  355. package/dist/esm/components/form/fields/form-field-time.d.ts.map +1 -1
  356. package/dist/esm/components/form/fields/form-field-time.labels.d.ts.map +1 -1
  357. package/dist/esm/components/form/form-context.d.ts.map +1 -1
  358. package/dist/esm/components/form/form-context.utils.d.ts.map +1 -1
  359. package/dist/esm/components/form/form-field-types.d.ts.map +1 -1
  360. package/dist/esm/components/form/useFormSchemaContext.d.ts.map +1 -1
  361. package/dist/esm/components/form/validation-errors/FormErrorSummary.d.ts.map +1 -1
  362. package/dist/esm/components/form/validation-errors/form-error-extraction.utils.d.ts.map +1 -1
  363. package/dist/esm/components/form/validation-errors/form-validation.d.ts.map +1 -1
  364. package/dist/esm/components/form/validation-errors/getFieldError.d.ts.map +1 -1
  365. package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.d.ts.map +1 -1
  366. package/dist/esm/components/form/validation-errors/useFieldUniquenessValidation.d.ts.map +1 -1
  367. package/dist/esm/components/form/validation-errors/useServerErrorInjection.d.ts.map +1 -1
  368. package/dist/esm/components/form/validation-errors/validate-field-url.frontend.d.ts.map +1 -1
  369. package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
  370. package/dist/esm/components/layout/carousel.d.ts.map +1 -1
  371. package/dist/esm/components/layout/divider.d.ts.map +1 -1
  372. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  373. package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
  374. package/dist/esm/components/layout/separator.d.ts.map +1 -1
  375. package/dist/esm/components/navigation/NavigationItemBadge.d.ts.map +1 -1
  376. package/dist/esm/components/navigation/app-level/ApplicationLevel_ActivityBar.d.ts.map +1 -1
  377. package/dist/esm/components/navigation/app-level/ApplicationLevel_CommandMenu.d.ts.map +1 -1
  378. package/dist/esm/components/navigation/app-level/ApplicationLevel_ControlPanel.d.ts.map +1 -1
  379. package/dist/esm/components/navigation/app-level/ApplicationLevel_MenuBar.d.ts.map +1 -1
  380. package/dist/esm/components/navigation/app-level/ApplicationLevel_MenuUserOrg.d.ts.map +1 -1
  381. package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.d.ts.map +1 -1
  382. package/dist/esm/components/navigation/app-level/ApplicationLevel_NotificationCenter.d.ts.map +1 -1
  383. package/dist/esm/components/navigation/app-level/ApplicationLevel_QuickActionButton.d.ts.map +1 -1
  384. package/dist/esm/components/navigation/app-level/ApplicationLevel_QuickSwitcher.d.ts.map +1 -1
  385. package/dist/esm/components/navigation/app-level/ApplicationLevel_Sidebar.d.ts.map +1 -1
  386. package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.d.ts.map +1 -1
  387. package/dist/esm/components/navigation/app-level/ApplicationLevel_Toolbar.d.ts.map +1 -1
  388. package/dist/esm/components/navigation/app-level/ApplicationLevel_UtilityPanel.d.ts.map +1 -1
  389. package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.d.ts.map +1 -1
  390. package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.d.ts.map +1 -1
  391. package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js +5 -27
  392. package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js.map +1 -1
  393. package/dist/esm/components/navigation/app-level/sidebar-resource-browser-empty-label.d.ts.map +1 -1
  394. package/dist/esm/components/navigation/app-level/useActivityBarBehavior.d.ts.map +1 -1
  395. package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.d.ts.map +1 -1
  396. package/dist/esm/components/navigation/app-level/useControlPanelBehavior.d.ts.map +1 -1
  397. package/dist/esm/components/navigation/app-level/useMenuBarBehavior.d.ts.map +1 -1
  398. package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.d.ts.map +1 -1
  399. package/dist/esm/components/navigation/app-level/useNavigationBehaviors.d.ts.map +1 -1
  400. package/dist/esm/components/navigation/app-level/useNotificationCenterBehavior.d.ts.map +1 -1
  401. package/dist/esm/components/navigation/app-level/useQuickActionButtonBehavior.d.ts.map +1 -1
  402. package/dist/esm/components/navigation/app-level/useQuickSwitcherBehavior.d.ts.map +1 -1
  403. package/dist/esm/components/navigation/app-level/useSidebarBehavior.d.ts.map +1 -1
  404. package/dist/esm/components/navigation/app-level/useStatusBarBehavior.d.ts.map +1 -1
  405. package/dist/esm/components/navigation/app-level/useToolbarBehavior.d.ts.map +1 -1
  406. package/dist/esm/components/navigation/app-level/useUtilityPanelBehavior.d.ts.map +1 -1
  407. package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
  408. package/dist/esm/components/navigation/command.d.ts.map +1 -1
  409. package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
  410. package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
  411. package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
  412. package/dist/esm/components/overlays/containers/OverlayContainer.d.ts.map +1 -1
  413. package/dist/esm/components/overlays/containers/OverlayContainer.labels.d.ts.map +1 -1
  414. package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
  415. package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
  416. package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
  417. package/dist/esm/components/overlays/containers/dialog.shared-types.d.ts.map +1 -1
  418. package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
  419. package/dist/esm/components/overlays/containers/navigation-overlay-container.utils.d.ts.map +1 -1
  420. package/dist/esm/components/overlays/containers/overlay-container-mode-resolution.utils.d.ts.map +1 -1
  421. package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
  422. package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
  423. package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
  424. package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
  425. package/dist/esm/components/overlays/floating/menu.shared-types.d.ts.map +1 -1
  426. package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
  427. package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
  428. package/dist/esm/components/progression/ProgressionAchievementBadge.d.ts.map +1 -1
  429. package/dist/esm/components/progression/ProgressionAchievementBadge.labels.d.ts.map +1 -1
  430. package/dist/esm/components/progression/ProgressionMilestoneTracker.d.ts.map +1 -1
  431. package/dist/esm/components/progression/ProgressionMilestoneTracker.labels.d.ts.map +1 -1
  432. package/dist/esm/components/resources/CollectionSelectionControls.d.ts.map +1 -1
  433. package/dist/esm/components/resources/CollectionSelectionHeaderRail.d.ts.map +1 -1
  434. package/dist/esm/components/resources/EphemeralFieldsRevealDialog.d.ts.map +1 -1
  435. package/dist/esm/components/resources/InlineSearchInput.d.ts.map +1 -1
  436. package/dist/esm/components/resources/ResourceCollectionBody_Table.d.ts.map +1 -1
  437. package/dist/esm/components/resources/ResourceCollectionFilterPresets.d.ts.map +1 -1
  438. package/dist/esm/components/resources/ResourceCollectionFilterPresets.js +16 -7
  439. package/dist/esm/components/resources/ResourceCollectionFilterPresets.js.map +1 -1
  440. package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.d.ts.map +1 -1
  441. package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts.map +1 -1
  442. package/dist/esm/components/resources/ResourceInPlaceOperationRow.d.ts.map +1 -1
  443. package/dist/esm/components/resources/ResourceLayout_Action.d.ts.map +1 -1
  444. package/dist/esm/components/resources/ResourceLayout_Action.labels.d.ts.map +1 -1
  445. package/dist/esm/components/resources/ResourceLayout_Breadcrumb.d.ts.map +1 -1
  446. package/dist/esm/components/resources/ResourceLayout_Breadcrumb.labels.d.ts.map +1 -1
  447. package/dist/esm/components/resources/ResourceLayout_CollectionActions.d.ts +1 -1
  448. package/dist/esm/components/resources/ResourceLayout_CollectionActions.d.ts.map +1 -1
  449. package/dist/esm/components/resources/ResourceLayout_CollectionActions.js.map +1 -1
  450. package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.d.ts.map +1 -1
  451. package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.labels.d.ts.map +1 -1
  452. package/dist/esm/components/resources/ResourceLayout_ContainerNested.d.ts.map +1 -1
  453. package/dist/esm/components/resources/ResourceLayout_ContainerNested.labels.d.ts.map +1 -1
  454. package/dist/esm/components/resources/ResourceLayout_Create.d.ts.map +1 -1
  455. package/dist/esm/components/resources/ResourceLayout_Create.labels.d.ts.map +1 -1
  456. package/dist/esm/components/resources/ResourceLayout_DangerZone.d.ts.map +1 -1
  457. package/dist/esm/components/resources/ResourceLayout_DangerZone.labels.d.ts.map +1 -1
  458. package/dist/esm/components/resources/ResourceLayout_FilterChips.d.ts +6 -0
  459. package/dist/esm/components/resources/ResourceLayout_FilterChips.d.ts.map +1 -1
  460. package/dist/esm/components/resources/ResourceLayout_FilterChips.js +36 -0
  461. package/dist/esm/components/resources/ResourceLayout_FilterChips.js.map +1 -1
  462. package/dist/esm/components/resources/ResourceLayout_Filters.d.ts.map +1 -1
  463. package/dist/esm/components/resources/ResourceLayout_Filters.labels.d.ts.map +1 -1
  464. package/dist/esm/components/resources/ResourceLayout_FiltersControl.d.ts.map +1 -1
  465. package/dist/esm/components/resources/ResourceLayout_Header.d.ts.map +1 -1
  466. package/dist/esm/components/resources/ResourceLayout_Header.labels.d.ts.map +1 -1
  467. package/dist/esm/components/resources/ResourceLayout_InsertedViews.d.ts.map +1 -1
  468. package/dist/esm/components/resources/ResourceLayout_List.d.ts.map +1 -1
  469. package/dist/esm/components/resources/ResourceLayout_List.js +1 -0
  470. package/dist/esm/components/resources/ResourceLayout_List.js.map +1 -1
  471. package/dist/esm/components/resources/ResourceLayout_List.labels.d.ts.map +1 -1
  472. package/dist/esm/components/resources/ResourceLayout_List_Table.d.ts.map +1 -1
  473. package/dist/esm/components/resources/ResourceLayout_OperationBulk.d.ts.map +1 -1
  474. package/dist/esm/components/resources/ResourceLayout_OperationBulk.labels.d.ts.map +1 -1
  475. package/dist/esm/components/resources/ResourceLayout_OperationsItems.d.ts.map +1 -1
  476. package/dist/esm/components/resources/ResourceLayout_OperationsItems.labels.d.ts.map +1 -1
  477. package/dist/esm/components/resources/ResourceLayout_Pagination.d.ts.map +1 -1
  478. package/dist/esm/components/resources/ResourceLayout_Pagination.labels.d.ts.map +1 -1
  479. package/dist/esm/components/resources/ResourceLayout_Read.d.ts.map +1 -1
  480. package/dist/esm/components/resources/ResourceLayout_Read.labels.d.ts.map +1 -1
  481. package/dist/esm/components/resources/ResourceLayout_ReadSummary.d.ts.map +1 -1
  482. package/dist/esm/components/resources/ResourceLayout_ReadSummary.labels.d.ts.map +1 -1
  483. package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.d.ts.map +1 -1
  484. package/dist/esm/components/resources/ResourceLayout_Read_Expandable.d.ts.map +1 -1
  485. package/dist/esm/components/resources/ResourceLayout_Search.d.ts.map +1 -1
  486. package/dist/esm/components/resources/ResourceLayout_Search.labels.d.ts.map +1 -1
  487. package/dist/esm/components/resources/ResourceLayout_Search_Table.d.ts.map +1 -1
  488. package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.d.ts.map +1 -1
  489. package/dist/esm/components/resources/ResourceLayout_SortControl.d.ts.map +1 -1
  490. package/dist/esm/components/resources/ResourceLayout_Update.d.ts.map +1 -1
  491. package/dist/esm/components/resources/ResourceLayout_Update.labels.d.ts.map +1 -1
  492. package/dist/esm/components/resources/ResourceListItemRenderer.d.ts.map +1 -1
  493. package/dist/esm/components/resources/ResourceOperationActionDropdown.d.ts.map +1 -1
  494. package/dist/esm/components/resources/ResourceOperationActionPopover.d.ts.map +1 -1
  495. package/dist/esm/components/resources/ResourceOperationDetachedHost.d.ts.map +1 -1
  496. package/dist/esm/components/resources/ResourceOperationSurface.d.ts.map +1 -1
  497. package/dist/esm/components/resources/ResourceOwnedViewEmbeds.d.ts.map +1 -1
  498. package/dist/esm/components/resources/ResourceViewModeToggle.d.ts.map +1 -1
  499. package/dist/esm/components/resources/card-action-placement.utils.d.ts.map +1 -1
  500. package/dist/esm/components/resources/collection-view-mode.frontend.d.ts.map +1 -1
  501. package/dist/esm/components/resources/component-props.resources-layout.frontend.schemas.d.ts.map +1 -1
  502. package/dist/esm/components/resources/embeds/ComposedChildrenRegistry.d.ts.map +1 -1
  503. package/dist/esm/components/resources/embeds/EmbeddedResourceDescent.d.ts.map +1 -1
  504. package/dist/esm/components/resources/embeds/EmbeddedResourceHostContext.d.ts.map +1 -1
  505. package/dist/esm/components/resources/embeds/RelatedResourcePreview.d.ts.map +1 -1
  506. package/dist/esm/components/resources/embeds/RelatedResourceSections.d.ts.map +1 -1
  507. package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts.map +1 -1
  508. package/dist/esm/components/resources/embeds/child-operation-addressability.utils.d.ts.map +1 -1
  509. package/dist/esm/components/resources/embeds/useEmbeddedResourceContext.d.ts.map +1 -1
  510. package/dist/esm/components/resources/inserted-resource-view.frontend.utils.d.ts.map +1 -1
  511. package/dist/esm/components/resources/resource-operation-custom-view.contracts.d.ts.map +1 -1
  512. package/dist/esm/components/resources/resourceLayout.utils.d.ts.map +1 -1
  513. package/dist/esm/components/resources/skeleton/ArrayField.d.ts.map +1 -1
  514. package/dist/esm/components/resources/skeleton/DisplayDiscriminatorSwitch.d.ts.map +1 -1
  515. package/dist/esm/components/resources/skeleton/DisplayLayout.d.ts.map +1 -1
  516. package/dist/esm/components/resources/skeleton/FormErrorSummarySlot.d.ts.map +1 -1
  517. package/dist/esm/components/resources/skeleton/FormLayout.d.ts.map +1 -1
  518. package/dist/esm/components/resources/skeleton/Group.d.ts.map +1 -1
  519. package/dist/esm/components/resources/skeleton/ResourceHeaderTitle.d.ts.map +1 -1
  520. package/dist/esm/components/resources/skeleton/Section.d.ts.map +1 -1
  521. package/dist/esm/components/resources/skeleton/SectionPresentationContext.d.ts.map +1 -1
  522. package/dist/esm/components/resources/skeleton/SubmitButton.d.ts.map +1 -1
  523. package/dist/esm/components/resources/skeleton/SummaryLayout.d.ts.map +1 -1
  524. package/dist/esm/components/resources/skeleton/SummaryTitle.d.ts.map +1 -1
  525. package/dist/esm/components/resources/skeleton/WizardLayout.d.ts.map +1 -1
  526. package/dist/esm/components/resources/skeleton/section-consolidation.shared.d.ts.map +1 -1
  527. package/dist/esm/components/resources/skeleton/section-consolidation.utils.d.ts.map +1 -1
  528. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.d.ts.map +1 -1
  529. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.d.ts.map +1 -1
  530. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.labels.d.ts.map +1 -1
  531. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Search.d.ts.map +1 -1
  532. package/dist/esm/components/resources-fields/resource-reference/ResourceFieldDisplay_ResourceReference.d.ts.map +1 -1
  533. package/dist/esm/components/resources-fields/resource-reference/ResourceFieldEdit_ResourceReference.d.ts.map +1 -1
  534. package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.d.ts.map +1 -1
  535. package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.d.ts.map +1 -1
  536. package/dist/esm/components/sections/ContentSectionContainer.d.ts.map +1 -1
  537. package/dist/esm/components/sections/ContentSectionContainer.labels.d.ts.map +1 -1
  538. package/dist/esm/components/sections/accordion.d.ts.map +1 -1
  539. package/dist/esm/components/sections/card.d.ts.map +1 -1
  540. package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
  541. package/dist/esm/components/sections/content-section.d.ts.map +1 -1
  542. package/dist/esm/components/sections/pagination.d.ts.map +1 -1
  543. package/dist/esm/components/sections/section-grouping.shared.d.ts.map +1 -1
  544. package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
  545. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  546. package/dist/esm/components/sections/surface.d.ts.map +1 -1
  547. package/dist/esm/components/sections/table.d.ts.map +1 -1
  548. package/dist/esm/components/sections/tabs.d.ts.map +1 -1
  549. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.d.ts.map +1 -1
  550. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.d.ts.map +1 -1
  551. package/dist/esm/components/settings/AppPage_AppearanceSettings.d.ts.map +1 -1
  552. package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.d.ts.map +1 -1
  553. package/dist/esm/components/settings/AppPage_BillingSettings.d.ts.map +1 -1
  554. package/dist/esm/components/settings/AppPage_BillingSettings.labels.d.ts.map +1 -1
  555. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts.map +1 -1
  556. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.d.ts.map +1 -1
  557. package/dist/esm/components/settings/AppPage_InvitationsSettings.d.ts.map +1 -1
  558. package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.d.ts.map +1 -1
  559. package/dist/esm/components/settings/SettingsHub.d.ts.map +1 -1
  560. package/dist/esm/components/settings/SettingsHub.labels.d.ts.map +1 -1
  561. package/dist/esm/components/settings/SettingsResourceOperationPanel.d.ts.map +1 -1
  562. package/dist/esm/components/settings/SettingsSectionNavigationHost.d.ts.map +1 -1
  563. package/dist/esm/components/settings/useOwnerProviderConnections.d.ts.map +1 -1
  564. package/dist/esm/components/typography/heading.d.ts.map +1 -1
  565. package/dist/esm/components/typography/label.d.ts.map +1 -1
  566. package/dist/esm/components/typography/link.d.ts.map +1 -1
  567. package/dist/esm/components/typography/text.d.ts.map +1 -1
  568. package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
  569. package/dist/esm/components/views/ViewLayout_Header.d.ts.map +1 -1
  570. package/dist/esm/components/views/ViewNotFound.d.ts.map +1 -1
  571. package/dist/esm/components/views/ViewNotFound.labels.d.ts.map +1 -1
  572. package/dist/esm/components/views/chart-view/ChartEmptyState.d.ts.map +1 -1
  573. package/dist/esm/components/views/chart-view/ChartErrorState.d.ts.map +1 -1
  574. package/dist/esm/components/views/chart-view/ChartLoadingSkeleton.d.ts.map +1 -1
  575. package/dist/esm/components/views/chart-view/ChartView.d.ts.map +1 -1
  576. package/dist/esm/components/views/chart-view/ChartView.labels.d.ts.map +1 -1
  577. package/dist/esm/components/views/chart-view/ChartView.lazy.d.ts.map +1 -1
  578. package/dist/esm/components/views/chart-view/ChartWidget.d.ts.map +1 -1
  579. package/dist/esm/components/views/chart-view/ChartWidget.labels.d.ts.map +1 -1
  580. package/dist/esm/components/views/chart-view/chart-export.utils.d.ts.map +1 -1
  581. package/dist/esm/components/views/chart-view/chart-runtime.utils.d.ts.map +1 -1
  582. package/dist/esm/components/views/chart-view/chart-theme-bridge.d.ts.map +1 -1
  583. package/dist/esm/components/views/chart-view/chart-view.utils.d.ts.map +1 -1
  584. package/dist/esm/components/views/chart-view/dev/ChartView.example.d.ts.map +1 -1
  585. package/dist/esm/components/views/chart-view/enum-color-bridge.d.ts.map +1 -1
  586. package/dist/esm/components/views/chart-view/option-builder/builder-utils.d.ts.map +1 -1
  587. package/dist/esm/components/views/chart-view/option-builder/builders/bar-family.builder.d.ts.map +1 -1
  588. package/dist/esm/components/views/chart-view/option-builder/builders/composed.builder.d.ts.map +1 -1
  589. package/dist/esm/components/views/chart-view/option-builder/builders/funnel.builder.d.ts.map +1 -1
  590. package/dist/esm/components/views/chart-view/option-builder/builders/gauge.builder.d.ts.map +1 -1
  591. package/dist/esm/components/views/chart-view/option-builder/builders/heatmap.builder.d.ts.map +1 -1
  592. package/dist/esm/components/views/chart-view/option-builder/builders/hierarchical-family.builder.d.ts.map +1 -1
  593. package/dist/esm/components/views/chart-view/option-builder/builders/line-family.builder.d.ts.map +1 -1
  594. package/dist/esm/components/views/chart-view/option-builder/builders/parallel.builder.d.ts.map +1 -1
  595. package/dist/esm/components/views/chart-view/option-builder/builders/pie-family.builder.d.ts.map +1 -1
  596. package/dist/esm/components/views/chart-view/option-builder/builders/radar.builder.d.ts.map +1 -1
  597. package/dist/esm/components/views/chart-view/option-builder/builders/sankey.builder.d.ts.map +1 -1
  598. package/dist/esm/components/views/chart-view/option-builder/builders/scatter-family.builder.d.ts.map +1 -1
  599. package/dist/esm/components/views/chart-view/option-builder/builders/statistical-family.builder.d.ts.map +1 -1
  600. package/dist/esm/components/views/chart-view/option-builder/chart-type-builder.interface.d.ts.map +1 -1
  601. package/dist/esm/components/views/chart-view/option-builder/echarts-option-builder.d.ts.map +1 -1
  602. package/dist/esm/components/views/chart-view/useResourceChartData.d.ts.map +1 -1
  603. package/dist/esm/components/views/composite-view/CompositeLayout.d.ts.map +1 -1
  604. package/dist/esm/components/views/composite-view/CompositeView.d.ts.map +1 -1
  605. package/dist/esm/components/views/composite-view/CompositeViewContext.d.ts.map +1 -1
  606. package/dist/esm/components/views/composite-view/useCompositeResourceOperationContextBuilder.d.ts.map +1 -1
  607. package/dist/esm/components/views/composite-view/useHostRecordDerivedParentContext.d.ts.map +1 -1
  608. package/dist/esm/components/views/execution-view/ExecutionView.d.ts.map +1 -1
  609. package/dist/esm/components/views/execution-view/ExecutionView.labels.d.ts.map +1 -1
  610. package/dist/esm/components/views/flows-actors-view/FlowsActorsView.d.ts.map +1 -1
  611. package/dist/esm/components/views/flows-actors-view/FlowsActorsView.labels.d.ts.map +1 -1
  612. package/dist/esm/components/views/full-custom-view/FullCustomView.d.ts.map +1 -1
  613. package/dist/esm/components/views/onboarding-view/OnboardingView.d.ts.map +1 -1
  614. package/dist/esm/components/views/onboarding-view/OnboardingView.labels.d.ts.map +1 -1
  615. package/dist/esm/components/views/onboarding-view/onboarding-view.utils.d.ts.map +1 -1
  616. package/dist/esm/core/app-shell/AppShellBuildingBlocks.d.ts.map +1 -1
  617. package/dist/esm/core/app-shell/PortalContainerContext.d.ts.map +1 -1
  618. package/dist/esm/core/app-shell/app-shell.schemas.d.ts.map +1 -1
  619. package/dist/esm/core/app-shell/app-shell.utils.d.ts.map +1 -1
  620. package/dist/esm/core/app-shell/hosted-components.utils.d.ts.map +1 -1
  621. package/dist/esm/core/app-shell/useAppShellLayout.d.ts.map +1 -1
  622. package/dist/esm/core/app-shell/usePublicShellLayout.d.ts.map +1 -1
  623. package/dist/esm/core/automated-layout/automated-layout.frontend.schemas.d.ts.map +1 -1
  624. package/dist/esm/core/automated-layout/automated-layout.frontend.utils.d.ts.map +1 -1
  625. package/dist/esm/core/automated-layout/composite-value-defaults.frontend.utils.d.ts.map +1 -1
  626. package/dist/esm/core/automated-layout/default-layout-generator.frontend.utils.d.ts.map +1 -1
  627. package/dist/esm/core/billing/BillingContext.d.ts.map +1 -1
  628. package/dist/esm/core/billing/BillingErrorNotifier.d.ts.map +1 -1
  629. package/dist/esm/core/billing/billing-launcher.d.ts.map +1 -1
  630. package/dist/esm/core/billing/billing-provider-display.frontend.utils.d.ts.map +1 -1
  631. package/dist/esm/core/billing/useBilling.d.ts.map +1 -1
  632. package/dist/esm/core/billing/useBillingAction.d.ts.map +1 -1
  633. package/dist/esm/core/billing/useBillingPlanChange.d.ts.map +1 -1
  634. package/dist/esm/core/billing/useSafeBillingActionExecutor.d.ts.map +1 -1
  635. package/dist/esm/core/branding/useBrandIdentity.d.ts.map +1 -1
  636. package/dist/esm/core/branding/useBrandPresentation.d.ts.map +1 -1
  637. package/dist/esm/core/commons/devices.frontend.schemas.d.ts.map +1 -1
  638. package/dist/esm/core/companion/companion-exports.frontend.definitions.d.ts.map +1 -1
  639. package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.d.ts.map +1 -1
  640. package/dist/esm/core/components-registry/component-registry-loader.frontend.service.d.ts.map +1 -1
  641. package/dist/esm/core/components-registry/component-registry.frontend.schemas.d.ts.map +1 -1
  642. package/dist/esm/core/components-registry/component-registry.frontend.service.d.ts.map +1 -1
  643. package/dist/esm/core/components-registry/component-resolver.frontend.helper.d.ts.map +1 -1
  644. package/dist/esm/core/components-registry/provider-component-registry.frontend.service.d.ts.map +1 -1
  645. package/dist/esm/core/components-registry/register-framework-layouts.d.ts.map +1 -1
  646. package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.d.ts.map +1 -1
  647. package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts +20 -0
  648. package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts.map +1 -1
  649. package/dist/esm/core/config/app-level-components.frontend.schemas.d.ts.map +1 -1
  650. package/dist/esm/core/config/chart-view.frontend.schemas.d.ts +10 -10
  651. package/dist/esm/core/config/chart-view.frontend.schemas.d.ts.map +1 -1
  652. package/dist/esm/core/config/composite-view.schemas.d.ts +4 -4
  653. package/dist/esm/core/config/composite-view.schemas.d.ts.map +1 -1
  654. package/dist/esm/core/config/config-merge-utilities.d.ts +11 -3
  655. package/dist/esm/core/config/config-merge-utilities.d.ts.map +1 -1
  656. package/dist/esm/core/config/config-merge-utilities.js +19 -5
  657. package/dist/esm/core/config/config-merge-utilities.js.map +1 -1
  658. package/dist/esm/core/config/engine-settings-destinations.d.ts.map +1 -1
  659. package/dist/esm/core/config/engine-settings-destinations.js +2 -0
  660. package/dist/esm/core/config/engine-settings-destinations.js.map +1 -1
  661. package/dist/esm/core/config/execution-view.schemas.d.ts.map +1 -1
  662. package/dist/esm/core/config/flows-actors-view.schemas.d.ts.map +1 -1
  663. package/dist/esm/core/config/full-custom-view.schemas.d.ts.map +1 -1
  664. package/dist/esm/core/config/inserted-view-launcher.schemas.d.ts.map +1 -1
  665. package/dist/esm/core/config/inserted-view.frontend.schemas.d.ts.map +1 -1
  666. package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts +58 -25
  667. package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts.map +1 -1
  668. package/dist/esm/core/config/launcher-items.frontend.schemas.js +5 -13
  669. package/dist/esm/core/config/launcher-items.frontend.schemas.js.map +1 -1
  670. package/dist/esm/core/config/onboarding-view.frontend.schemas.d.ts.map +1 -1
  671. package/dist/esm/core/config/resource-owned-view-resolution.frontend.utils.d.ts.map +1 -1
  672. package/dist/esm/core/config/settings-hub-gating.frontend.utils.d.ts +3 -2
  673. package/dist/esm/core/config/settings-hub-gating.frontend.utils.d.ts.map +1 -1
  674. package/dist/esm/core/config/settings-hub-gating.frontend.utils.js +7 -4
  675. package/dist/esm/core/config/settings-hub-gating.frontend.utils.js.map +1 -1
  676. package/dist/esm/core/config/settings-hub-presentation.frontend.utils.d.ts.map +1 -1
  677. package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts +12 -5
  678. package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts.map +1 -1
  679. package/dist/esm/core/config/settings-hub.frontend.schemas.js.map +1 -1
  680. package/dist/esm/core/config/useSettingsHubConfig.d.ts.map +1 -1
  681. package/dist/esm/core/config/useVisibleSettingsHubConfig.d.ts.map +1 -1
  682. package/dist/esm/core/config/verify-feature-references.frontend.d.ts.map +1 -1
  683. package/dist/esm/core/config/verify-launcher-content.d.ts +16 -2
  684. package/dist/esm/core/config/verify-launcher-content.d.ts.map +1 -1
  685. package/dist/esm/core/config/verify-launcher-content.js +61 -2
  686. package/dist/esm/core/config/verify-launcher-content.js.map +1 -1
  687. package/dist/esm/core/config/verify-settings-hub-content.d.ts.map +1 -1
  688. package/dist/esm/core/config/view-label-declaration.schemas.d.ts.map +1 -1
  689. package/dist/esm/core/config/views-frontend.schemas.d.ts.map +1 -1
  690. package/dist/esm/core/enums/common-enum-registry.d.ts.map +1 -1
  691. package/dist/esm/core/errors/ErrorBoundary.d.ts.map +1 -1
  692. package/dist/esm/core/errors/ErrorContext.d.ts.map +1 -1
  693. package/dist/esm/core/errors/ErrorModalContent.d.ts.map +1 -1
  694. package/dist/esm/core/errors/GlobalErrorHandler.d.ts.map +1 -1
  695. package/dist/esm/core/errors/RouterErrorBoundary.d.ts.map +1 -1
  696. package/dist/esm/core/errors/error-management.frontend.service.d.ts.map +1 -1
  697. package/dist/esm/core/errors/errors-builder.frontend.services.d.ts.map +1 -1
  698. package/dist/esm/core/errors/errors.frontend.schemas.d.ts.map +1 -1
  699. package/dist/esm/core/errors/http-error-behavior.frontend.schemas.d.ts.map +1 -1
  700. package/dist/esm/core/errors/useError.d.ts.map +1 -1
  701. package/dist/esm/core/errors/useUserFacingErrorMessage.d.ts.map +1 -1
  702. package/dist/esm/core/errors/user-facing-error-message.frontend.utils.d.ts.map +1 -1
  703. package/dist/esm/core/errors/withErrorBoundary.d.ts.map +1 -1
  704. package/dist/esm/core/events/EventBusContext.d.ts.map +1 -1
  705. package/dist/esm/core/events/NotificationContext.d.ts.map +1 -1
  706. package/dist/esm/core/events/event-bus.frontend.service.d.ts.map +1 -1
  707. package/dist/esm/core/events/events.frontend.schemas.d.ts.map +1 -1
  708. package/dist/esm/core/events/notification-display-policy.frontend.schemas.d.ts.map +1 -1
  709. package/dist/esm/core/events/useEventBus.d.ts.map +1 -1
  710. package/dist/esm/core/events/useNotification.d.ts.map +1 -1
  711. package/dist/esm/core/execution/ExecutionDirtyMarkerScopeContext.d.ts.map +1 -1
  712. package/dist/esm/core/execution/ExecutionRuntimeContext.d.ts.map +1 -1
  713. package/dist/esm/core/execution/execution-anchor.utils.d.ts.map +1 -1
  714. package/dist/esm/core/execution/execution-dirty-markers.utils.d.ts.map +1 -1
  715. package/dist/esm/core/execution/execution-failure-handling.utils.d.ts.map +1 -1
  716. package/dist/esm/core/execution/execution-outcome-emission.utils.d.ts.map +1 -1
  717. package/dist/esm/core/execution/execution-participation.utils.d.ts.map +1 -1
  718. package/dist/esm/core/execution/useExecution.d.ts.map +1 -1
  719. package/dist/esm/core/execution/useExecutionDirtyBridge.d.ts.map +1 -1
  720. package/dist/esm/core/execution/useExecutionParticipationDataPrefetch.d.ts.map +1 -1
  721. package/dist/esm/core/execution/useExecutionParticipationPrefetch.d.ts.map +1 -1
  722. package/dist/esm/core/execution/useExecutionParticipationRMM.d.ts.map +1 -1
  723. package/dist/esm/core/execution/useExecutionResourceOperationContextBuilder.d.ts.map +1 -1
  724. package/dist/esm/core/execution/useExecutionResourceOperationSurface.d.ts.map +1 -1
  725. package/dist/esm/core/external-providers/ConsentBasedProviderSdks.d.ts.map +1 -1
  726. package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.d.ts.map +1 -1
  727. package/dist/esm/core/external-providers/ProviderAddressLookupHost.d.ts.map +1 -1
  728. package/dist/esm/core/external-providers/ProviderFilePickerHost.d.ts.map +1 -1
  729. package/dist/esm/core/external-providers/frontend-provider-display-label.frontend.utils.d.ts.map +1 -1
  730. package/dist/esm/core/external-providers/frontend-provider-registry.frontend.service.d.ts.map +1 -1
  731. package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.d.ts.map +1 -1
  732. package/dist/esm/core/external-providers/provider-file-selection.frontend.utils.d.ts.map +1 -1
  733. package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts.map +1 -1
  734. package/dist/esm/core/features/FeatureGate.d.ts.map +1 -1
  735. package/dist/esm/core/features/FeatureRouteGuard.d.ts.map +1 -1
  736. package/dist/esm/core/features/FeaturesContext.d.ts.map +1 -1
  737. package/dist/esm/core/features/feature-gate-surface.example.d.ts.map +1 -1
  738. package/dist/esm/core/features/feature-unavailability.frontend.utils.d.ts.map +1 -1
  739. package/dist/esm/core/features/useFeatureAvailability.d.ts.map +1 -1
  740. package/dist/esm/core/features/useFeatureGate.d.ts.map +1 -1
  741. package/dist/esm/core/features/useFeatures.d.ts.map +1 -1
  742. package/dist/esm/core/features/useOperationFeatureAvailability.d.ts.map +1 -1
  743. package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts.map +1 -1
  744. package/dist/esm/core/flows-actors/useFlowsActors.d.ts.map +1 -1
  745. package/dist/esm/core/flows-actors/usePendingDecisions.d.ts.map +1 -1
  746. package/dist/esm/core/guidance/GuidanceContext.d.ts.map +1 -1
  747. package/dist/esm/core/guidance/GuidanceRenderer.d.ts.map +1 -1
  748. package/dist/esm/core/guidance/guidance-audience.frontend.utils.d.ts.map +1 -1
  749. package/dist/esm/core/guidance/guidance-resource-compiler.shared.utils.d.ts.map +1 -1
  750. package/dist/esm/core/guidance/renderers/GuidanceAnnouncement.d.ts.map +1 -1
  751. package/dist/esm/core/guidance/renderers/GuidanceAnnouncement.labels.d.ts.map +1 -1
  752. package/dist/esm/core/guidance/renderers/GuidanceBadge.d.ts.map +1 -1
  753. package/dist/esm/core/guidance/renderers/GuidanceBadge.labels.d.ts.map +1 -1
  754. package/dist/esm/core/guidance/renderers/GuidanceBanner.d.ts.map +1 -1
  755. package/dist/esm/core/guidance/renderers/GuidanceBanner.labels.d.ts.map +1 -1
  756. package/dist/esm/core/guidance/renderers/GuidanceCard.d.ts.map +1 -1
  757. package/dist/esm/core/guidance/renderers/GuidanceCard.labels.d.ts.map +1 -1
  758. package/dist/esm/core/guidance/renderers/GuidanceChecklist.d.ts.map +1 -1
  759. package/dist/esm/core/guidance/renderers/GuidanceChecklist.labels.d.ts.map +1 -1
  760. package/dist/esm/core/guidance/renderers/GuidanceChecklistItem.d.ts.map +1 -1
  761. package/dist/esm/core/guidance/renderers/GuidanceChecklistItem.labels.d.ts.map +1 -1
  762. package/dist/esm/core/guidance/renderers/GuidanceModal.d.ts.map +1 -1
  763. package/dist/esm/core/guidance/renderers/GuidanceModal.labels.d.ts.map +1 -1
  764. package/dist/esm/core/guidance/renderers/GuidanceSurvey.d.ts.map +1 -1
  765. package/dist/esm/core/guidance/renderers/GuidanceSurvey.labels.d.ts.map +1 -1
  766. package/dist/esm/core/guidance/renderers/GuidanceTooltip.d.ts.map +1 -1
  767. package/dist/esm/core/guidance/renderers/GuidanceTooltip.labels.d.ts.map +1 -1
  768. package/dist/esm/core/guidance/renderers/GuidanceTour.d.ts.map +1 -1
  769. package/dist/esm/core/guidance/renderers/GuidanceTour.labels.d.ts.map +1 -1
  770. package/dist/esm/core/guidance/useGuidance.d.ts.map +1 -1
  771. package/dist/esm/core/hotkey/DefaultHotkeyHandler.d.ts.map +1 -1
  772. package/dist/esm/core/hotkey/HotkeyRegistryContext.d.ts.map +1 -1
  773. package/dist/esm/core/hotkey/HotkeyShortcutsHelpDialog.d.ts.map +1 -1
  774. package/dist/esm/core/hotkey/hotkey-registry.frontend.schemas.d.ts.map +1 -1
  775. package/dist/esm/core/hotkey/merge-hotkey-emit-shortcuts.d.ts.map +1 -1
  776. package/dist/esm/core/hotkey/useHotkey.d.ts.map +1 -1
  777. package/dist/esm/core/i18n/I18nContext.d.ts.map +1 -1
  778. package/dist/esm/core/i18n/component-label-resolution.utils.d.ts.map +1 -1
  779. package/dist/esm/core/i18n/operation-title-resolution.utils.d.ts.map +1 -1
  780. package/dist/esm/core/i18n/regional-preference-resolution.frontend.utils.d.ts.map +1 -1
  781. package/dist/esm/core/i18n/useI18n.d.ts.map +1 -1
  782. package/dist/esm/core/icons/IconRegistryBridge.d.ts.map +1 -1
  783. package/dist/esm/core/icons/IconRegistryContext.d.ts.map +1 -1
  784. package/dist/esm/core/icons/icon-registry.frontend.definitions.d.ts.map +1 -1
  785. package/dist/esm/core/icons/icon-registry.frontend.schemas.d.ts.map +1 -1
  786. package/dist/esm/core/icons/useIconRegistry.d.ts.map +1 -1
  787. package/dist/esm/core/loading/AppLoadingGate.d.ts.map +1 -1
  788. package/dist/esm/core/loading/LoadingBarrier.d.ts.map +1 -1
  789. package/dist/esm/core/loading/LoadingContext.d.ts.map +1 -1
  790. package/dist/esm/core/loading/LoadingGate.d.ts.map +1 -1
  791. package/dist/esm/core/loading/loading-policy.frontend.schemas.d.ts.map +1 -1
  792. package/dist/esm/core/loading/loading-scope.frontend.utils.d.ts.map +1 -1
  793. package/dist/esm/core/loading/resolveLoadingPolicy.d.ts.map +1 -1
  794. package/dist/esm/core/loading/useAppLoading.d.ts.map +1 -1
  795. package/dist/esm/core/loading/useComponentLoading.d.ts.map +1 -1
  796. package/dist/esm/core/loading/useEmitLoadingScope.d.ts.map +1 -1
  797. package/dist/esm/core/loading/useLoading.d.ts.map +1 -1
  798. package/dist/esm/core/mode/AppModeContext.d.ts.map +1 -1
  799. package/dist/esm/core/mode/section-visibility.d.ts.map +1 -1
  800. package/dist/esm/core/monitoring/analytics/AnalyticsContext.d.ts.map +1 -1
  801. package/dist/esm/core/monitoring/analytics/AnalyticsEventBridge.d.ts.map +1 -1
  802. package/dist/esm/core/monitoring/analytics/AnalyticsScopeBridge.d.ts.map +1 -1
  803. package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.d.ts.map +1 -1
  804. package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.d.ts.map +1 -1
  805. package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.d.ts.map +1 -1
  806. package/dist/esm/core/monitoring/analytics/useAnalytics.d.ts.map +1 -1
  807. package/dist/esm/core/monitoring/error-monitoring-bridge.frontend.service.d.ts.map +1 -1
  808. package/dist/esm/core/monitoring/logger.frontend.service.d.ts.map +1 -1
  809. package/dist/esm/core/navigation/NavigationContentAreas.d.ts.map +1 -1
  810. package/dist/esm/core/navigation/NavigationContext.d.ts.map +1 -1
  811. package/dist/esm/core/navigation/NavigationRequestBridge.d.ts.map +1 -1
  812. package/dist/esm/core/navigation/launcher-resolution.d.ts +9 -1
  813. package/dist/esm/core/navigation/launcher-resolution.d.ts.map +1 -1
  814. package/dist/esm/core/navigation/launcher-resolution.js +33 -6
  815. package/dist/esm/core/navigation/launcher-resolution.js.map +1 -1
  816. package/dist/esm/core/navigation/launcher-runtime-availability.d.ts +21 -5
  817. package/dist/esm/core/navigation/launcher-runtime-availability.d.ts.map +1 -1
  818. package/dist/esm/core/navigation/launcher-runtime-availability.js +40 -7
  819. package/dist/esm/core/navigation/launcher-runtime-availability.js.map +1 -1
  820. package/dist/esm/core/navigation/navigation-cascade.d.ts.map +1 -1
  821. package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.d.ts.map +1 -1
  822. package/dist/esm/core/navigation/navigation-controller-internals.d.ts.map +1 -1
  823. package/dist/esm/core/navigation/navigation-policy-resolver.service.d.ts.map +1 -1
  824. package/dist/esm/core/navigation/navigation.schemas.d.ts.map +1 -1
  825. package/dist/esm/core/navigation/navigation.utils.d.ts.map +1 -1
  826. package/dist/esm/core/navigation/primary-destination-layout.d.ts.map +1 -1
  827. package/dist/esm/core/navigation/sidebar-resource-browser-operation.d.ts +8 -0
  828. package/dist/esm/core/navigation/sidebar-resource-browser-operation.d.ts.map +1 -0
  829. package/dist/esm/core/navigation/sidebar-resource-browser-operation.js +27 -0
  830. package/dist/esm/core/navigation/sidebar-resource-browser-operation.js.map +1 -0
  831. package/dist/esm/core/navigation/useLauncherResolutionContext.d.ts +7 -0
  832. package/dist/esm/core/navigation/useLauncherResolutionContext.d.ts.map +1 -1
  833. package/dist/esm/core/navigation/useLauncherResolutionContext.js +39 -2
  834. package/dist/esm/core/navigation/useLauncherResolutionContext.js.map +1 -1
  835. package/dist/esm/core/navigation/useNavigationController.d.ts.map +1 -1
  836. package/dist/esm/core/navigation/useNavigationRouterSync.d.ts.map +1 -1
  837. package/dist/esm/core/navigation/useNavigationState.d.ts.map +1 -1
  838. package/dist/esm/core/navigation/useOverlayTitle.d.ts.map +1 -1
  839. package/dist/esm/core/navigation/useResponsiveZoneMigration.d.ts.map +1 -1
  840. package/dist/esm/core/navigation/useTransactionAwareSyncRetry.d.ts.map +1 -1
  841. package/dist/esm/core/navigation/view-title-resolution.d.ts.map +1 -1
  842. package/dist/esm/core/navigation/zone-collapse-migration.d.ts.map +1 -1
  843. package/dist/esm/core/navigation/zone-collapse.d.ts.map +1 -1
  844. package/dist/esm/core/navigation/zone-content-geometry.d.ts.map +1 -1
  845. package/dist/esm/core/navigation/zone-emphasis.d.ts.map +1 -1
  846. package/dist/esm/core/navigation/zone-empty-behavior.d.ts.map +1 -1
  847. package/dist/esm/core/navigation/zone-visible-entry.d.ts.map +1 -1
  848. package/dist/esm/core/requests/api-readiness-checker.frontend.service.d.ts.map +1 -1
  849. package/dist/esm/core/requests/client-instance-id.frontend.service.d.ts.map +1 -1
  850. package/dist/esm/core/requests/websockets/ConnectionStatusNotifier.d.ts.map +1 -1
  851. package/dist/esm/core/requests/websockets/WebSocketContext.d.ts.map +1 -1
  852. package/dist/esm/core/requests/websockets/WebSocketEventBridge.d.ts.map +1 -1
  853. package/dist/esm/core/requests/websockets/useNotificationBadges.d.ts.map +1 -1
  854. package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.d.ts.map +1 -1
  855. package/dist/esm/core/requests/websockets/useResourceRoom.d.ts.map +1 -1
  856. package/dist/esm/core/requests/websockets/useWebSocket.d.ts.map +1 -1
  857. package/dist/esm/core/requests/websockets/websocket-resource-validation.frontend.service.d.ts.map +1 -1
  858. package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.d.ts.map +1 -1
  859. package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.d.ts.map +1 -1
  860. package/dist/esm/core/requests/wildo-http-client.frontend.service.d.ts.map +1 -1
  861. package/dist/esm/core/resources/ResourceOperationViewContext.d.ts.map +1 -1
  862. package/dist/esm/core/resources/ResourceOperationViewProvider.d.ts.map +1 -1
  863. package/dist/esm/core/resources/ResourceReadCacheBridge.d.ts.map +1 -1
  864. package/dist/esm/core/resources/ResourceRegistryContext.d.ts.map +1 -1
  865. package/dist/esm/core/resources/ScopedResourceRegistryProvider.d.ts.map +1 -1
  866. package/dist/esm/core/resources/bulk-failure-grouping.frontend.utils.d.ts.map +1 -1
  867. package/dist/esm/core/resources/collection-export-url.frontend.utils.d.ts +1 -1
  868. package/dist/esm/core/resources/collection-export-url.frontend.utils.d.ts.map +1 -1
  869. package/dist/esm/core/resources/collection-export-url.frontend.utils.js +29 -1
  870. package/dist/esm/core/resources/collection-export-url.frontend.utils.js.map +1 -1
  871. package/dist/esm/core/resources/collection-filter-presets.frontend.utils.d.ts +22 -8
  872. package/dist/esm/core/resources/collection-filter-presets.frontend.utils.d.ts.map +1 -1
  873. package/dist/esm/core/resources/collection-filter-presets.frontend.utils.js +99 -37
  874. package/dist/esm/core/resources/collection-filter-presets.frontend.utils.js.map +1 -1
  875. package/dist/esm/core/resources/context-resource-identifiers.frontend.utils.d.ts.map +1 -1
  876. package/dist/esm/core/resources/ephemeral-fields.utils.d.ts.map +1 -1
  877. package/dist/esm/core/resources/file-serve-url.frontend.utils.d.ts.map +1 -1
  878. package/dist/esm/core/resources/frontend-resource.utils.d.ts.map +1 -1
  879. package/dist/esm/core/resources/hooks/useOperationEnabled.d.ts.map +1 -1
  880. package/dist/esm/core/resources/in-place/InPlaceOperationContext.d.ts.map +1 -1
  881. package/dist/esm/core/resources/operation-initiator-satisfaction.frontend.utils.d.ts.map +1 -1
  882. package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts.map +1 -1
  883. package/dist/esm/core/resources/relationship-quick-create.frontend.utils.d.ts.map +1 -1
  884. package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.d.ts.map +1 -1
  885. package/dist/esm/core/resources/resource-addressability.frontend.utils.d.ts.map +1 -1
  886. package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.d.ts.map +1 -1
  887. package/dist/esm/core/resources/resource-operation-view.frontend.utils.d.ts.map +1 -1
  888. package/dist/esm/core/resources/resource-path.frontend.schemas.d.ts.map +1 -1
  889. package/dist/esm/core/resources/resource-read-cache.frontend.service.d.ts.map +1 -1
  890. package/dist/esm/core/resources/resources-repository.frontend.service.d.ts.map +1 -1
  891. package/dist/esm/core/resources/resources.frontend.schemas.d.ts +70 -21
  892. package/dist/esm/core/resources/resources.frontend.schemas.d.ts.map +1 -1
  893. package/dist/esm/core/resources/resources.frontend.schemas.js +49 -18
  894. package/dist/esm/core/resources/resources.frontend.schemas.js.map +1 -1
  895. package/dist/esm/core/resources/rmm/HttpTransportAdapter.d.ts.map +1 -1
  896. package/dist/esm/core/resources/rmm/RMMRegistry.d.ts.map +1 -1
  897. package/dist/esm/core/resources/rmm/RMMRegistryContext.d.ts.map +1 -1
  898. package/dist/esm/core/resources/rmm/RMMWebSocketBridge.d.ts.map +1 -1
  899. package/dist/esm/core/resources/rmm/ResourceMutationManager.d.ts.map +1 -1
  900. package/dist/esm/core/resources/rmm/canonical-read.frontend.utils.d.ts.map +1 -1
  901. package/dist/esm/core/resources/rmm/mutation-error-report.utils.d.ts.map +1 -1
  902. package/dist/esm/core/resources/rmm/rmm-noop-snapshot.d.ts.map +1 -1
  903. package/dist/esm/core/resources/rmm/types.d.ts.map +1 -1
  904. package/dist/esm/core/resources/rmm/useListInvalidation.d.ts.map +1 -1
  905. package/dist/esm/core/resources/rmm/useRMMEventHandler.d.ts.map +1 -1
  906. package/dist/esm/core/resources/rmm/useRMMSnapshot.d.ts.map +1 -1
  907. package/dist/esm/core/resources/rmm/useResourceMutationManager.d.ts.map +1 -1
  908. package/dist/esm/core/resources/rmm/useResourceRMM.d.ts.map +1 -1
  909. package/dist/esm/core/resources/useAuthedFileObjectUrl.frontend.hook.d.ts.map +1 -1
  910. package/dist/esm/core/resources/useBulkJobProgress.d.ts.map +1 -1
  911. package/dist/esm/core/resources/useHostlessResourceNavigation.d.ts.map +1 -1
  912. package/dist/esm/core/resources/useOperationDirectExecution.d.ts.map +1 -1
  913. package/dist/esm/core/resources/useOperationEnabled.d.ts.map +1 -1
  914. package/dist/esm/core/resources/useResourceLabels.d.ts.map +1 -1
  915. package/dist/esm/core/resources/useResourceOperationActions.d.ts +2 -1
  916. package/dist/esm/core/resources/useResourceOperationActions.d.ts.map +1 -1
  917. package/dist/esm/core/resources/useResourceOperationActions.js.map +1 -1
  918. package/dist/esm/core/resources/useResourceOperationOutcomeEmitter.d.ts.map +1 -1
  919. package/dist/esm/core/resources/useResourceOperationSurface.d.ts.map +1 -1
  920. package/dist/esm/core/resources/useResourceRegistry.d.ts.map +1 -1
  921. package/dist/esm/core/resources/utils/operation-enabled-condition.frontend.utils.d.ts.map +1 -1
  922. package/dist/esm/core/runtime/AppRouter.d.ts.map +1 -1
  923. package/dist/esm/core/runtime/AppRouter.js +3 -2
  924. package/dist/esm/core/runtime/AppRouter.js.map +1 -1
  925. package/dist/esm/core/runtime/ApplicationContext.shared.d.ts.map +1 -1
  926. package/dist/esm/core/runtime/ApplicationMainContext.d.ts.map +1 -1
  927. package/dist/esm/core/runtime/StartupFailureScreen.d.ts.map +1 -1
  928. package/dist/esm/core/runtime/app-config-overrides.frontend.definitions.d.ts.map +1 -1
  929. package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts.map +1 -1
  930. package/dist/esm/core/runtime/frontend-companion-resource-inputs.d.ts.map +1 -1
  931. package/dist/esm/core/runtime/routes.frontend.definitions.d.ts.map +1 -1
  932. package/dist/esm/core/runtime/runtime.frontend.schemas.d.ts.map +1 -1
  933. package/dist/esm/core/runtime/start-application.frontend.service.d.ts.map +1 -1
  934. package/dist/esm/core/runtime/start-application.frontend.service.js +3 -1
  935. package/dist/esm/core/runtime/start-application.frontend.service.js.map +1 -1
  936. package/dist/esm/core/runtime/startup-failure-copy.frontend.d.ts.map +1 -1
  937. package/dist/esm/core/runtime/useApplication.d.ts.map +1 -1
  938. package/dist/esm/core/scope/AppScopeContext.d.ts.map +1 -1
  939. package/dist/esm/core/scope/scope.frontend.schemas.d.ts.map +1 -1
  940. package/dist/esm/core/scope/scope.utils.frontend.service.d.ts.map +1 -1
  941. package/dist/esm/core/scope/useAppScope.d.ts.map +1 -1
  942. package/dist/esm/core/security/AnonymousSessionContext.d.ts.map +1 -1
  943. package/dist/esm/core/security/AuthSessionContext.d.ts.map +1 -1
  944. package/dist/esm/core/security/StepUpAuthContext.d.ts.map +1 -1
  945. package/dist/esm/core/security/UserOrgsContext.d.ts.map +1 -1
  946. package/dist/esm/core/security/auth-redirect.frontend.utils.d.ts.map +1 -1
  947. package/dist/esm/core/security/auth-session.utils.d.ts.map +1 -1
  948. package/dist/esm/core/security/consent-gate.frontend.utils.d.ts.map +1 -1
  949. package/dist/esm/core/security/cross-frontend-handoff.frontend.service.d.ts.map +1 -1
  950. package/dist/esm/core/security/federated-reauthentication.frontend.d.ts.map +1 -1
  951. package/dist/esm/core/security/organization-onboarding.frontend.utils.d.ts.map +1 -1
  952. package/dist/esm/core/security/registration-outcome.frontend.utils.d.ts.map +1 -1
  953. package/dist/esm/core/security/route-organization-access.frontend.utils.d.ts.map +1 -1
  954. package/dist/esm/core/security/security.frontend.schemas.d.ts.map +1 -1
  955. package/dist/esm/core/security/useAuthSession.d.ts.map +1 -1
  956. package/dist/esm/core/security/useConsentGateBehavior.d.ts.map +1 -1
  957. package/dist/esm/core/security/useDocumentAcceptanceGateBehavior.d.ts.map +1 -1
  958. package/dist/esm/core/security/useGrantedConsentPurposes.d.ts.map +1 -1
  959. package/dist/esm/core/security/useResolvedAuthConfig.d.ts.map +1 -1
  960. package/dist/esm/core/security/useRouteOrganizationAccess.d.ts.map +1 -1
  961. package/dist/esm/core/security/useStepUpAuth.d.ts.map +1 -1
  962. package/dist/esm/core/security/useUserOrgs.d.ts.map +1 -1
  963. package/dist/esm/core/ui/SurfaceErrorBoundary.d.ts.map +1 -1
  964. package/dist/esm/core/ui/SurfaceErrorBoundary.labels.d.ts.map +1 -1
  965. package/dist/esm/core/ui/SurfacePolicyContext.d.ts.map +1 -1
  966. package/dist/esm/core/ui/UIContext.d.ts.map +1 -1
  967. package/dist/esm/core/ui/chart-style-defaults.d.ts.map +1 -1
  968. package/dist/esm/core/ui/design-token-config.utils.d.ts.map +1 -1
  969. package/dist/esm/core/ui/design-token.utils.d.ts.map +1 -1
  970. package/dist/esm/core/ui/material-runtime.d.ts.map +1 -1
  971. package/dist/esm/core/ui/surface-a11y.utils.d.ts.map +1 -1
  972. package/dist/esm/core/ui/themes/default.theme.d.ts.map +1 -1
  973. package/dist/esm/core/ui/ui.frontend.schemas.d.ts +6 -0
  974. package/dist/esm/core/ui/ui.frontend.schemas.d.ts.map +1 -1
  975. package/dist/esm/core/ui/useThemePreferenceControl.d.ts.map +1 -1
  976. package/dist/esm/core/ui/useUI.d.ts.map +1 -1
  977. package/dist/esm/index.d.ts +1 -0
  978. package/dist/esm/index.d.ts.map +1 -1
  979. package/dist/esm/index.js +1 -0
  980. package/dist/esm/index.js.map +1 -1
  981. package/dist/esm/testing/app-shell-placement-coverage.d.ts.map +1 -1
  982. package/dist/esm/testing/mock-builders.d.ts.map +1 -1
  983. package/dist/esm/testing/rmm-helpers.d.ts.map +1 -1
  984. package/dist/esm/testing/test-providers.d.ts.map +1 -1
  985. package/dist/esm/testing.d.ts.map +1 -1
  986. package/dist/tsconfig.build.tsbuildinfo +1 -1
  987. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"settings-hub.frontend.schemas.js","sourceRoot":"","sources":["../../../../../src/core/config/settings-hub.frontend.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH,mEAAmE;AACnE,+DAA+D;AAC/D,mEAAmE;AAEnE,oEAAoE;AACpE;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,yBASX;AATD,WAAY,yBAAyB;IACnC,iEAAiE;IACjE,0DAA6B,CAAA;IAC7B,+FAA+F;IAC/F,sEAAyC,CAAA;IACzC,sFAAsF;IACtF,kEAAqC,CAAA;IACrC,0GAA0G;IAC1G,kDAAqB,CAAA;AACvB,CAAC,EATW,yBAAyB,KAAzB,yBAAyB,QASpC;AACD,kEAAkE;AAElE,mEAAmE;AACnE,6DAA6D;AAC7D,mEAAmE;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,CAAN,IAAY,gBAmDX;AAnDD,WAAY,gBAAgB;IAC1B,wGAAwG;IACxG,yCAAqB,CAAA;IACrB,qEAAqE;IACrE,6CAAyB,CAAA;IACzB,oFAAoF;IACpF,+CAA2B,CAAA;IAC3B;;;;;;;;;;;OAWG;IACH,uCAAmB,CAAA;IACnB;;;;;;;;;;;OAWG;IACH,6DAAyC,CAAA;IACzC;;;;;;;OAOG;IACH,uFAAmE,CAAA;IACnE;;;;;;;OAOG;IACH,yEAAqD,CAAA;AACvD,CAAC,EAnDW,gBAAgB,KAAhB,gBAAgB,QAmD3B;AAgSD,kEAAkE","sourcesContent":["/**\n * Settings Hub — Declarative Section Registry\n *\n * The Settings Hub is the framework's single point of configuration: one overlay\n * surface that consolidates every settings destination (account, security,\n * appearance, organization, members, billing, …) behind a vertical `Tabs` rail\n * grouped by category. Many entry points (user dropdown, sidebar, command menu)\n * all converge on this one hub; links differ only by which section they pre-open.\n *\n * This file owns the **config-time** registry contract. It is declaration-first\n * and mirrors `launcher-items.frontend.schemas.ts`:\n * - `SettingsSectionTarget` is an interface-based discriminated union on `kind`\n * (exactly like `LauncherItemRef`), because section targets are config-time\n * descriptors resolved by the runtime — not Zod-validated wire payloads.\n * - The engine ships DESTINATIONS (`ENGINE_SETTINGS_DESTINATIONS`) and no\n * arrangement; an application authors its own `SettingsHubConfig` — its\n * categories, its placements, and any destinations of its own.\n *\n * Runtime concerns live elsewhere:\n * - `NavigationContentType.SETTINGS_HUB` (navigation.schemas.ts) — what renders\n * in the overlay zone.\n * - `SettingsHub` component (components/settings/) — resolves a section's target\n * to a rendered panel.\n *\n * @see launcher-items.frontend.schemas.ts — the sibling launcher registry this mirrors\n * @see .claude/plans/unified-settings-hub.md — design + layer trace\n */\n\nimport { ResourcePrimaryScope } from '@wildo-ai/saas-models';\nimport type { RequiredFeaturesConfig } from '@wildo-ai/saas-models';\nimport type { LauncherRuntimeAvailabilityConfig } from './launcher-items.frontend.schemas';\n\n// ════════════════════════════════════════════════════════════════\n// Section Target Kind — discriminant for SettingsSectionTarget\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement */\n/**\n * What a settings section renders in its content panel.\n *\n * Discriminant for the `SettingsSectionTarget` union. The default for\n * data-backed settings is `RESOURCE_OPERATION` (reuse the auto-rendered\n * resource surface); `ENGINE_PANEL` is reserved for the few sections whose\n * bespoke layout earns it (Security, Appearance).\n */\nexport enum SettingsSectionTargetKind {\n /** A framework-owned bespoke panel (Security, Appearance, …). */\n ENGINE_PANEL = 'engine_panel',\n /** An auto-rendered resource-operation surface (members, API tokens, billing, preferences). */\n RESOURCE_OPERATION = 'resource_operation',\n /** An app-registered custom React component (resolved via the component registry). */\n CUSTOM_COMPONENT = 'custom_component',\n /** A section that itself splits into horizontal sub-tabs (e.g. Teams → Members / Roles & Permissions). */\n SUB_TABS = 'sub_tabs',\n}\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n\n// ════════════════════════════════════════════════════════════════\n// Engine Panel Ref — framework-owned bespoke settings panels\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Framework-provided settings panels with bespoke (non-CRUD) layout.\n *\n * Closed enum — only framework panels belong here. Most settings sections should\n * be `RESOURCE_OPERATION` targets instead; a panel earns a slot here only when a\n * standard resource surface cannot express it (multi-factor enrollment flows,\n * theme/dark-mode toggles, …).\n *\n * The runtime maps each ref to a registered panel component in the\n * `SettingsHub` resolver.\n */\nexport enum SettingsPanelRef {\n /** Password, MFA enrollment, passkeys, identity links (wraps the former `AppPage_SecuritySettings`). */\n SECURITY = 'security',\n /** Theme, dark-mode, density and other look-and-feel preferences. */\n APPEARANCE = 'appearance',\n /** The caller's own pending org invitations — accept/reject in-app (Approach P). */\n INVITATIONS = 'invitations',\n /**\n * The billing home: subscription status, plan catalog + checkout, usage,\n * invoices and the provider portal link — composed from the BillingContext\n * aggregated state (`GET_STATE`), NOT from per-resource LIST surfaces.\n *\n * Bespoke on purpose: the billing child resources (subscriptions, invoice\n * refs, usage records) are routed UNDER the billing account\n * (`REQUIRES_CONTEXT`), so a generic org-scoped `RESOURCE_OPERATION` panel\n * cannot build their URLs. The aggregated billing state is org-addressable\n * and auto-creates the account, which makes it the correct settings-surface\n * data source.\n */\n BILLING = 'billing',\n /**\n * Where a person CONNECTS one of their own third-party accounts.\n *\n * Bespoke because connecting is not a row somebody creates: it is a flow that leaves the\n * application, obtains consent at a vendor, and returns with a grant nobody typed. The generic\n * resource surface can list, inspect and delete the resulting credentials perfectly — it simply has\n * no mechanism for an ACTION of that shape, which is why the whole outbound-authorization lane had\n * no surface that could begin it until this existed.\n *\n * Paired with, never replacing, the credential list: this panel answers what MAY be connected and\n * the list answers what IS, and the empty answer to the second is exactly when the first matters.\n */\n CONNECTED_ACCOUNTS = 'connected-accounts',\n /**\n * The same act at the TENANT's scope: connecting an account the whole organization acts as.\n *\n * A distinct ref rather than a parameterised one, because a settings destination resolves a ref to\n * a panel and carries no arguments — and because the two must never be reachable from each other's\n * screen. The component behind them IS shared: the act is identical, and duplicating it would\n * guarantee the two drift. What is never shared is the data.\n */\n ORGANIZATION_CONNECTED_ACCOUNTS = 'organization-connected-accounts',\n /**\n * How often the organization's experts override its agents (#1599), per agent, tool, case or reviewer, over a\n * window: the counts behind the rate, the decisions nobody took counted apart, and a group where nothing was decided\n * shown as that rather than as 0 %.\n *\n * Bespoke because the rate is not a row: it is a summary the engine computes from the decision records on request\n * (`POST /agent-work/override-rate`), and no resource surface can render a computed aggregate.\n */\n AGENT_WORK_OVERRIDE_RATE = 'agent-work-override-rate',\n}\n\n// ════════════════════════════════════════════════════════════════\n// Section Target — discriminated union on `kind`\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement */\n/** Renders a framework-owned bespoke panel. */\nexport interface SettingsEnginePanelTarget {\n kind: SettingsSectionTargetKind.ENGINE_PANEL;\n panelRef: SettingsPanelRef;\n}\n\n/**\n * Renders an auto-generated resource-operation surface inside the section panel.\n * Resolved against the resource registry exactly like a launcher\n * `RESOURCE_OPERATION` target.\n */\nexport interface SettingsResourceOperationTarget {\n kind: SettingsSectionTargetKind.RESOURCE_OPERATION;\n resourceType: string;\n operation: string;\n operationVariant?: string;\n}\n\n/** Renders an app-registered custom React component (resolved by `componentRef`). */\nexport interface SettingsCustomComponentTarget {\n kind: SettingsSectionTargetKind.CUSTOM_COMPONENT;\n componentRef: string;\n}\n\n/**\n * Leaf targets renderable directly in a panel. Sub-tabs may only point at leaf\n * targets — sub-tabs cannot nest further sub-tabs (one level of in-section\n * tabbing, matching the BetterStack reference).\n */\nexport type SettingsLeafTarget =\n | SettingsEnginePanelTarget\n | SettingsResourceOperationTarget\n | SettingsCustomComponentTarget;\n\n/**\n * One horizontal sub-tab within a section (e.g. the \"Members\" / \"Roles &\n * Permissions\" tabs inside a Teams section).\n */\nexport interface SettingsSubTab {\n /** Sub-tab reference — app-defined, used for i18n + the `value` of the inner Tabs. */\n ref: string;\n /** Display label (i18n ref). */\n label: string;\n /** Optional icon ref for the sub-tab trigger. */\n icon?: string;\n /** What this sub-tab renders. Sub-tabs hold leaf targets only. */\n target: SettingsLeafTarget;\n}\n\n/** Splits a section into horizontal sub-tabs rendered above the panel content. */\nexport interface SettingsSubTabsTarget {\n kind: SettingsSectionTargetKind.SUB_TABS;\n subTabs: SettingsSubTab[];\n}\n\n/**\n * What a settings section renders. Discriminated on `kind`; the `SettingsHub`\n * resolver dispatches on it to produce the panel content.\n */\nexport type SettingsSectionTarget = SettingsLeafTarget | SettingsSubTabsTarget;\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n\n// ════════════════════════════════════════════════════════════════\n// Category — the rail group\n// ════════════════════════════════════════════════════════════════\n\n/**\n * A category groups sections in the vertical rail (the `Account` / `Organization`\n * group headers in the BetterStack reference). Rendered as a label + separator\n * inside the `TabsList` — NOT a separate nav widget (the `Tabs` primitive stays\n * the section mechanism).\n *\n * `scope` ties the category to a primary-scope axis so the runtime can hide it\n * when the scope is unavailable — e.g. an `ORGANIZATIONS` category is hidden when\n * no organization is selected. It is derived against `AppScope`, not authored\n * per-user.\n */\nexport interface SettingsCategory {\n /** Category reference — app-defined, referenced by `SettingsSection.categoryRef`. */\n ref: string;\n /** Group header label (i18n ref). */\n label: string;\n /**\n * Primary scope this category belongs to. Drives rail grouping order and\n * scope-gated visibility (org categories hide when no org is selected).\n * Omit for a scope-agnostic category.\n */\n scope?: ResourcePrimaryScope;\n /** Optional icon ref for the group header. */\n icon?: string;\n /** Sort order among categories in the rail (lower = higher). */\n order?: number;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Section — one vertical tab in the rail\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement facet:layer:frontend facet:family:config facet:audience:app-developer */\n/**\n * An addressable settings DESTINATION — what a settings surface *is*, with no\n * opinion on where it appears.\n *\n * The engine ships most of them (`ENGINE_SETTINGS_DESTINATIONS`); an application\n * may declare its own in `SettingsHubConfig.destinations` — a settings surface for\n * one of its OWN resources, or a component it registers. Either way a destination\n * carries the target and the gating stack, and deliberately carries **no\n * `categoryRef`, no `order` and no `label`**: those are placement, and placement is\n * the application's decision (`SettingsPlacement`).\n *\n * The split exists because the engine shipping a PLACED hub is what made the\n * settings rail unauthorable — an application could not add, remove, reorder or\n * rename a section without the framework agreeing. Splitting destination from\n * placement lets the engine keep owning what a destination MEANS (its target,\n * its roles, its entitlement) while the application owns where it sits.\n */\nexport interface SettingsDestination {\n /** Destination reference — the `/settings/:sectionRef` URL segment and the id a placement names. */\n ref: string;\n /** What the destination renders in its content panel. */\n target: SettingsSectionTarget;\n /** Declarative runtime capability gating (same contract as launcher items). */\n runtimeAvailability?: LauncherRuntimeAvailabilityConfig;\n /** Feature flags required to surface this destination (plan/subscription gating). */\n requiredFeatures?: RequiredFeaturesConfig;\n /** RBAC roles required to surface this destination (OR semantics). */\n requiredRoles?: string[];\n /** Optional CoreFeature id this destination's content is ENTITLED by (soft gate — renders an upgrade prompt). */\n entitlementFeatureId?: string;\n}\n\n/**\n * An application's explicit PLACEMENT of one destination in its settings rail.\n *\n * Authored in the application's own config. Nothing is placed implicitly: a\n * destination the application does not place does not render, which is the whole\n * point — \"we should just place things\", with no automatic inference.\n *\n * `label` is optional and is an OVERRIDE. The resolved label otherwise comes from\n * the `settings_hub.sections.<ref>.label` key, so a placed section is localizable\n * without the application authoring an English string.\n *\n * That namespace and its resolver (`tSettingsHubSection`) EXIST and already fall\n * back to the authored label. What does not exist is anything that generates the\n * units: `LabellingTypes.SETTINGS_HUB` is declared with an empty pattern and the\n * companion plans nothing for it, so today every rail label is the authored\n * English string. R9 is a wiring job, not a new mechanism.\n */\nexport interface SettingsPlacement {\n /** The {@link SettingsDestination.ref} being placed — an engine destination or one of `destinations`. Refused at DEV startup when unknown. */\n destinationRef: string;\n /** Which category (rail group) this destination sits under. */\n categoryRef: string;\n /** Sort order within the category (lower = higher). */\n order?: number;\n /** Optional icon ref for the rail entry. */\n icon?: string;\n /** Rail label override. Omit to take `settings_hub.sections.<ref>.label`. */\n label?: string;\n}\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n\n/**\n * A settings section is one entry in the vertical rail (one `TabsTrigger`) —\n * the RESOLVED union of a {@link SettingsDestination} and the\n * {@link SettingsPlacement} that placed it.\n *\n * Produced by `resolveSettingsHubConfig()`; never authored directly. It\n * belongs to a category, addresses a target, and reuses the existing launcher\n * gating stack:\n * - `runtimeAvailability` — survives the app-shell filtering pass (capabilities).\n * - `requiredFeatures` — plan/subscription gating once resolved.\n * - `requiredRoles` — RBAC gating (e.g. org-admin-only sections).\n *\n * `ref` is the URL-addressable section id (`/settings/:sectionRef`).\n */\nexport interface SettingsSection {\n /** Section reference — app-defined; the `/settings/:sectionRef` URL segment + Tabs `value`. */\n ref: string;\n /** Which category (rail group) this section sits under. */\n categoryRef: string;\n /** Rail label (i18n ref). */\n label: string;\n /** Optional icon ref for the rail entry. */\n icon?: string;\n /** Sort order within the category (lower = higher). */\n order?: number;\n /** What the section renders in its content panel. */\n target: SettingsSectionTarget;\n /** Declarative runtime capability gating (same contract as launcher items). */\n runtimeAvailability?: LauncherRuntimeAvailabilityConfig;\n /**\n * Feature flags required to surface this section (plan/subscription gating).\n *\n * Uses the framework-canonical {@link RequiredFeaturesConfig} contract shared\n * with views and resource operations — shorthand `string[]` (OR semantics) or\n * the full `{ features, mode: 'OR' | 'AND' }` form. `limitChecks` are not\n * evaluated for section visibility (a section is shown or hidden, never\n * \"over-limit\"); use {@link requiredRoles} / capabilities for hard gating.\n */\n requiredFeatures?: RequiredFeaturesConfig;\n /**\n * RBAC roles required to surface this section (OR semantics — the user needs\n * ANY one of these roles). Evaluated against the merged app-level + current-\n * organization role set, the same effective surface the rest of the frontend\n * gating layer resolves (see `buildFeaturePolicyRoles`). Org-management\n * sections gate on `[CORE_ORG_ROLES.ORG_OWNER, CORE_ORG_ROLES.ORG_ADMIN]`.\n */\n requiredRoles?: string[];\n /**\n * Optional CoreFeature id this section's content is ENTITLED by. Distinct from\n * {@link requiredFeatures} (a HARD hide-gate): when set, the section still\n * SURVIVES (per `runtimeAvailability`/roles) and its body is wrapped in a\n * `FeatureGate` so an OFFERED-but-not-yet-entitled feature renders the\n * policy-driven upgrade/add-on prompt (`unavailabilityPolicy`) instead of\n * vanishing. Pair with a `runtimeAvailability.requiredCapabilities` gate whose\n * capability is the plan-independent \"app offers X\" signal, so a feature the\n * app does NOT offer at all is hidden outright while an offered one prompts.\n */\n entitlementFeatureId?: string;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Hub Config — the registry root\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement */\n/**\n * The AUTHORED Settings Hub registry — an application's own settings rail.\n *\n * The framework ships destinations (`ENGINE_SETTINGS_DESTINATIONS`), never a\n * placed hub. This is the application's half: which categories exist, which\n * destinations are placed where, and any destinations the application owns.\n * `wildo init` scaffolds the full engine destination list as placements so a new\n * application starts complete and edits down.\n *\n * Resolve it with `resolveSettingsHubConfig()` to get the rendered\n * {@link SettingsSection} list; the render path never reads this shape directly.\n */\nexport interface SettingsHubConfig {\n /** Rail groups, in render order (also orderable via `SettingsCategory.order`). */\n categories: SettingsCategory[];\n /**\n * Every destination this application places, and where.\n *\n * A destination that appears in no placement does not render. That is\n * deliberate: absence is how an application removes a settings section, and it\n * must not be second-guessed by a merge against a framework default.\n */\n placements: SettingsPlacement[];\n /**\n * The application's OWN destinations — settings surfaces the engine does not\n * ship, such as a list of the application's team members or a component it\n * registers. Declared here, then placed like any other destination; a\n * declared destination that no placement names does not render.\n *\n * The ref must not be an engine destination's ref. The engine keeps owning\n * what its destinations mean, so on a clash the ENGINE destination is the one\n * resolved, and the DEV startup verifier reports the clash.\n */\n destinations?: SettingsDestination[];\n /**\n * Section opened when the hub is launched without an explicit section\n * (`/settings` with no `:sectionRef`). Falls back to the first section of the\n * first category when omitted.\n */\n defaultSectionRef?: string;\n}\n\n/**\n * The RESOLVED hub — categories plus fully-resolved sections, ready to render.\n *\n * Distinct from {@link SettingsHubConfig} (what an application AUTHORS) because\n * conflating the two is what let a placed default ship from the engine. A\n * consumer that renders takes this; a consumer that configures takes the other.\n */\nexport interface ResolvedSettingsHubConfig {\n categories: SettingsCategory[];\n sections: SettingsSection[];\n defaultSectionRef?: string;\n}\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n"]}
1
+ {"version":3,"file":"settings-hub.frontend.schemas.js","sourceRoot":"","sources":["../../../../src/core/config/settings-hub.frontend.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAcH,mEAAmE;AACnE,+DAA+D;AAC/D,mEAAmE;AAEnE,oEAAoE;AACpE;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,yBASX;AATD,WAAY,yBAAyB;IACnC,iEAAiE;IACjE,0DAA6B,CAAA;IAC7B,+FAA+F;IAC/F,sEAAyC,CAAA;IACzC,sFAAsF;IACtF,kEAAqC,CAAA;IACrC,0GAA0G;IAC1G,kDAAqB,CAAA;AACvB,CAAC,EATW,yBAAyB,KAAzB,yBAAyB,QASpC;AACD,kEAAkE;AAElE,mEAAmE;AACnE,6DAA6D;AAC7D,mEAAmE;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,CAAN,IAAY,gBAmDX;AAnDD,WAAY,gBAAgB;IAC1B,wGAAwG;IACxG,yCAAqB,CAAA;IACrB,qEAAqE;IACrE,6CAAyB,CAAA;IACzB,oFAAoF;IACpF,+CAA2B,CAAA;IAC3B;;;;;;;;;;;OAWG;IACH,uCAAmB,CAAA;IACnB;;;;;;;;;;;OAWG;IACH,6DAAyC,CAAA;IACzC;;;;;;;OAOG;IACH,uFAAmE,CAAA;IACnE;;;;;;;OAOG;IACH,yEAAqD,CAAA;AACvD,CAAC,EAnDW,gBAAgB,KAAhB,gBAAgB,QAmD3B;AAgSD,kEAAkE","sourcesContent":["/**\n * Settings Hub — Declarative Section Registry\n *\n * The Settings Hub is the framework's single point of configuration: one overlay\n * surface that consolidates every settings destination (account, security,\n * appearance, organization, members, billing, …) behind a vertical `Tabs` rail\n * grouped by category. Many entry points (user dropdown, sidebar, command menu)\n * all converge on this one hub; links differ only by which section they pre-open.\n *\n * This file owns the **config-time** registry contract. It is declaration-first\n * and mirrors `launcher-items.frontend.schemas.ts`:\n * - `SettingsSectionTarget` is an interface-based discriminated union on `kind`\n * (exactly like `LauncherItemRef`), because section targets are config-time\n * descriptors resolved by the runtime — not Zod-validated wire payloads.\n * - The engine ships DESTINATIONS (`ENGINE_SETTINGS_DESTINATIONS`) and no\n * arrangement; an application authors its own `SettingsHubConfig` — its\n * categories, its placements, and any destinations of its own.\n *\n * Runtime concerns live elsewhere:\n * - `NavigationContentType.SETTINGS_HUB` (navigation.schemas.ts) — what renders\n * in the overlay zone.\n * - `SettingsHub` component (components/settings/) — resolves a section's target\n * to a rendered panel.\n *\n * @see launcher-items.frontend.schemas.ts — the sibling launcher registry this mirrors\n * @see .claude/plans/unified-settings-hub.md — design + layer trace\n */\n\nimport { ResourcePrimaryScope } from '@wildo-ai/saas-models';\nimport type { RequiredFeaturesConfig } from '@wildo-ai/saas-models';\nimport type { LauncherRuntimeAvailabilityConfig } from './launcher-items.frontend.schemas';\n\n/**\n * A settings destination's runtime availability: CAPABILITIES only. Its roles are `requiredRoles`, an exact match the\n * settings hub has always applied, so the launcher's `visibleToRoles` (which also counts core-role inheritance) is\n * deliberately not accepted here: one decision with two role rules that disagree on an organization owner is the drift\n * to avoid. The placement plan refuses an audience on the settings rail for the same reason.\n */\nexport type SettingsRuntimeAvailabilityConfig = Omit<LauncherRuntimeAvailabilityConfig, 'visibleToRoles'>;\n\n// ════════════════════════════════════════════════════════════════\n// Section Target Kind — discriminant for SettingsSectionTarget\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement */\n/**\n * What a settings section renders in its content panel.\n *\n * Discriminant for the `SettingsSectionTarget` union. The default for\n * data-backed settings is `RESOURCE_OPERATION` (reuse the auto-rendered\n * resource surface); `ENGINE_PANEL` is reserved for the few sections whose\n * bespoke layout earns it (Security, Appearance).\n */\nexport enum SettingsSectionTargetKind {\n /** A framework-owned bespoke panel (Security, Appearance, …). */\n ENGINE_PANEL = 'engine_panel',\n /** An auto-rendered resource-operation surface (members, API tokens, billing, preferences). */\n RESOURCE_OPERATION = 'resource_operation',\n /** An app-registered custom React component (resolved via the component registry). */\n CUSTOM_COMPONENT = 'custom_component',\n /** A section that itself splits into horizontal sub-tabs (e.g. Teams → Members / Roles & Permissions). */\n SUB_TABS = 'sub_tabs',\n}\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n\n// ════════════════════════════════════════════════════════════════\n// Engine Panel Ref — framework-owned bespoke settings panels\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Framework-provided settings panels with bespoke (non-CRUD) layout.\n *\n * Closed enum — only framework panels belong here. Most settings sections should\n * be `RESOURCE_OPERATION` targets instead; a panel earns a slot here only when a\n * standard resource surface cannot express it (multi-factor enrollment flows,\n * theme/dark-mode toggles, …).\n *\n * The runtime maps each ref to a registered panel component in the\n * `SettingsHub` resolver.\n */\nexport enum SettingsPanelRef {\n /** Password, MFA enrollment, passkeys, identity links (wraps the former `AppPage_SecuritySettings`). */\n SECURITY = 'security',\n /** Theme, dark-mode, density and other look-and-feel preferences. */\n APPEARANCE = 'appearance',\n /** The caller's own pending org invitations — accept/reject in-app (Approach P). */\n INVITATIONS = 'invitations',\n /**\n * The billing home: subscription status, plan catalog + checkout, usage,\n * invoices and the provider portal link — composed from the BillingContext\n * aggregated state (`GET_STATE`), NOT from per-resource LIST surfaces.\n *\n * Bespoke on purpose: the billing child resources (subscriptions, invoice\n * refs, usage records) are routed UNDER the billing account\n * (`REQUIRES_CONTEXT`), so a generic org-scoped `RESOURCE_OPERATION` panel\n * cannot build their URLs. The aggregated billing state is org-addressable\n * and auto-creates the account, which makes it the correct settings-surface\n * data source.\n */\n BILLING = 'billing',\n /**\n * Where a person CONNECTS one of their own third-party accounts.\n *\n * Bespoke because connecting is not a row somebody creates: it is a flow that leaves the\n * application, obtains consent at a vendor, and returns with a grant nobody typed. The generic\n * resource surface can list, inspect and delete the resulting credentials perfectly — it simply has\n * no mechanism for an ACTION of that shape, which is why the whole outbound-authorization lane had\n * no surface that could begin it until this existed.\n *\n * Paired with, never replacing, the credential list: this panel answers what MAY be connected and\n * the list answers what IS, and the empty answer to the second is exactly when the first matters.\n */\n CONNECTED_ACCOUNTS = 'connected-accounts',\n /**\n * The same act at the TENANT's scope: connecting an account the whole organization acts as.\n *\n * A distinct ref rather than a parameterised one, because a settings destination resolves a ref to\n * a panel and carries no arguments — and because the two must never be reachable from each other's\n * screen. The component behind them IS shared: the act is identical, and duplicating it would\n * guarantee the two drift. What is never shared is the data.\n */\n ORGANIZATION_CONNECTED_ACCOUNTS = 'organization-connected-accounts',\n /**\n * How often the organization's experts override its agents (#1599), per agent, tool, case or reviewer, over a\n * window: the counts behind the rate, the decisions nobody took counted apart, and a group where nothing was decided\n * shown as that rather than as 0 %.\n *\n * Bespoke because the rate is not a row: it is a summary the engine computes from the decision records on request\n * (`POST /agent-work/override-rate`), and no resource surface can render a computed aggregate.\n */\n AGENT_WORK_OVERRIDE_RATE = 'agent-work-override-rate',\n}\n\n// ════════════════════════════════════════════════════════════════\n// Section Target — discriminated union on `kind`\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement */\n/** Renders a framework-owned bespoke panel. */\nexport interface SettingsEnginePanelTarget {\n kind: SettingsSectionTargetKind.ENGINE_PANEL;\n panelRef: SettingsPanelRef;\n}\n\n/**\n * Renders an auto-generated resource-operation surface inside the section panel.\n * Resolved against the resource registry exactly like a launcher\n * `RESOURCE_OPERATION` target.\n */\nexport interface SettingsResourceOperationTarget {\n kind: SettingsSectionTargetKind.RESOURCE_OPERATION;\n resourceType: string;\n operation: string;\n operationVariant?: string;\n}\n\n/** Renders an app-registered custom React component (resolved by `componentRef`). */\nexport interface SettingsCustomComponentTarget {\n kind: SettingsSectionTargetKind.CUSTOM_COMPONENT;\n componentRef: string;\n}\n\n/**\n * Leaf targets renderable directly in a panel. Sub-tabs may only point at leaf\n * targets — sub-tabs cannot nest further sub-tabs (one level of in-section\n * tabbing, matching the BetterStack reference).\n */\nexport type SettingsLeafTarget =\n | SettingsEnginePanelTarget\n | SettingsResourceOperationTarget\n | SettingsCustomComponentTarget;\n\n/**\n * One horizontal sub-tab within a section (e.g. the \"Members\" / \"Roles &\n * Permissions\" tabs inside a Teams section).\n */\nexport interface SettingsSubTab {\n /** Sub-tab reference — app-defined, used for i18n + the `value` of the inner Tabs. */\n ref: string;\n /** Display label (i18n ref). */\n label: string;\n /** Optional icon ref for the sub-tab trigger. */\n icon?: string;\n /** What this sub-tab renders. Sub-tabs hold leaf targets only. */\n target: SettingsLeafTarget;\n}\n\n/** Splits a section into horizontal sub-tabs rendered above the panel content. */\nexport interface SettingsSubTabsTarget {\n kind: SettingsSectionTargetKind.SUB_TABS;\n subTabs: SettingsSubTab[];\n}\n\n/**\n * What a settings section renders. Discriminated on `kind`; the `SettingsHub`\n * resolver dispatches on it to produce the panel content.\n */\nexport type SettingsSectionTarget = SettingsLeafTarget | SettingsSubTabsTarget;\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n\n// ════════════════════════════════════════════════════════════════\n// Category — the rail group\n// ════════════════════════════════════════════════════════════════\n\n/**\n * A category groups sections in the vertical rail (the `Account` / `Organization`\n * group headers in the BetterStack reference). Rendered as a label + separator\n * inside the `TabsList` — NOT a separate nav widget (the `Tabs` primitive stays\n * the section mechanism).\n *\n * `scope` ties the category to a primary-scope axis so the runtime can hide it\n * when the scope is unavailable — e.g. an `ORGANIZATIONS` category is hidden when\n * no organization is selected. It is derived against `AppScope`, not authored\n * per-user.\n */\nexport interface SettingsCategory {\n /** Category reference — app-defined, referenced by `SettingsSection.categoryRef`. */\n ref: string;\n /** Group header label (i18n ref). */\n label: string;\n /**\n * Primary scope this category belongs to. Drives rail grouping order and\n * scope-gated visibility (org categories hide when no org is selected).\n * Omit for a scope-agnostic category.\n */\n scope?: ResourcePrimaryScope;\n /** Optional icon ref for the group header. */\n icon?: string;\n /** Sort order among categories in the rail (lower = higher). */\n order?: number;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Section — one vertical tab in the rail\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement facet:layer:frontend facet:family:config facet:audience:app-developer */\n/**\n * An addressable settings DESTINATION — what a settings surface *is*, with no\n * opinion on where it appears.\n *\n * The engine ships most of them (`ENGINE_SETTINGS_DESTINATIONS`); an application\n * may declare its own in `SettingsHubConfig.destinations` — a settings surface for\n * one of its OWN resources, or a component it registers. Either way a destination\n * carries the target and the gating stack, and deliberately carries **no\n * `categoryRef`, no `order` and no `label`**: those are placement, and placement is\n * the application's decision (`SettingsPlacement`).\n *\n * The split exists because the engine shipping a PLACED hub is what made the\n * settings rail unauthorable — an application could not add, remove, reorder or\n * rename a section without the framework agreeing. Splitting destination from\n * placement lets the engine keep owning what a destination MEANS (its target,\n * its roles, its entitlement) while the application owns where it sits.\n */\nexport interface SettingsDestination {\n /** Destination reference — the `/settings/:sectionRef` URL segment and the id a placement names. */\n ref: string;\n /** What the destination renders in its content panel. */\n target: SettingsSectionTarget;\n /** Declarative runtime capability gating (launcher items' `requiredCapabilities`; roles are `requiredRoles`). */\n runtimeAvailability?: SettingsRuntimeAvailabilityConfig;\n /** Feature flags required to surface this destination (plan/subscription gating). */\n requiredFeatures?: RequiredFeaturesConfig;\n /** RBAC roles required to surface this destination (OR semantics). */\n requiredRoles?: string[];\n /** Optional CoreFeature id this destination's content is ENTITLED by (soft gate — renders an upgrade prompt). */\n entitlementFeatureId?: string;\n}\n\n/**\n * An application's explicit PLACEMENT of one destination in its settings rail.\n *\n * Authored in the application's own config. Nothing is placed implicitly: a\n * destination the application does not place does not render, which is the whole\n * point — \"we should just place things\", with no automatic inference.\n *\n * `label` is optional and is an OVERRIDE. The resolved label otherwise comes from\n * the `settings_hub.sections.<ref>.label` key, so a placed section is localizable\n * without the application authoring an English string.\n *\n * That namespace and its resolver (`tSettingsHubSection`) EXIST and already fall\n * back to the authored label. What does not exist is anything that generates the\n * units: `LabellingTypes.SETTINGS_HUB` is declared with an empty pattern and the\n * companion plans nothing for it, so today every rail label is the authored\n * English string. R9 is a wiring job, not a new mechanism.\n */\nexport interface SettingsPlacement {\n /** The {@link SettingsDestination.ref} being placed — an engine destination or one of `destinations`. Refused at DEV startup when unknown. */\n destinationRef: string;\n /** Which category (rail group) this destination sits under. */\n categoryRef: string;\n /** Sort order within the category (lower = higher). */\n order?: number;\n /** Optional icon ref for the rail entry. */\n icon?: string;\n /** Rail label override. Omit to take `settings_hub.sections.<ref>.label`. */\n label?: string;\n}\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n\n/**\n * A settings section is one entry in the vertical rail (one `TabsTrigger`) —\n * the RESOLVED union of a {@link SettingsDestination} and the\n * {@link SettingsPlacement} that placed it.\n *\n * Produced by `resolveSettingsHubConfig()`; never authored directly. It\n * belongs to a category, addresses a target, and reuses the existing launcher\n * gating stack:\n * - `runtimeAvailability` — survives the app-shell filtering pass (capabilities only; roles are `requiredRoles`).\n * - `requiredFeatures` — plan/subscription gating once resolved.\n * - `requiredRoles` — RBAC gating (e.g. org-admin-only sections).\n *\n * `ref` is the URL-addressable section id (`/settings/:sectionRef`).\n */\nexport interface SettingsSection {\n /** Section reference — app-defined; the `/settings/:sectionRef` URL segment + Tabs `value`. */\n ref: string;\n /** Which category (rail group) this section sits under. */\n categoryRef: string;\n /** Rail label (i18n ref). */\n label: string;\n /** Optional icon ref for the rail entry. */\n icon?: string;\n /** Sort order within the category (lower = higher). */\n order?: number;\n /** What the section renders in its content panel. */\n target: SettingsSectionTarget;\n /** Declarative runtime capability gating (launcher items' `requiredCapabilities`; roles are `requiredRoles`). */\n runtimeAvailability?: SettingsRuntimeAvailabilityConfig;\n /**\n * Feature flags required to surface this section (plan/subscription gating).\n *\n * Uses the framework-canonical {@link RequiredFeaturesConfig} contract shared\n * with views and resource operations — shorthand `string[]` (OR semantics) or\n * the full `{ features, mode: 'OR' | 'AND' }` form. `limitChecks` are not\n * evaluated for section visibility (a section is shown or hidden, never\n * \"over-limit\"); use {@link requiredRoles} / capabilities for hard gating.\n */\n requiredFeatures?: RequiredFeaturesConfig;\n /**\n * RBAC roles required to surface this section (OR semantics — the user needs\n * ANY one of these roles). Evaluated against the merged app-level + current-\n * organization role set, the same effective surface the rest of the frontend\n * gating layer resolves (see `buildFeaturePolicyRoles`). Org-management\n * sections gate on `[CORE_ORG_ROLES.ORG_OWNER, CORE_ORG_ROLES.ORG_ADMIN]`.\n */\n requiredRoles?: string[];\n /**\n * Optional CoreFeature id this section's content is ENTITLED by. Distinct from\n * {@link requiredFeatures} (a HARD hide-gate): when set, the section still\n * SURVIVES (per `runtimeAvailability`/roles) and its body is wrapped in a\n * `FeatureGate` so an OFFERED-but-not-yet-entitled feature renders the\n * policy-driven upgrade/add-on prompt (`unavailabilityPolicy`) instead of\n * vanishing. Pair with a `runtimeAvailability.requiredCapabilities` gate whose\n * capability is the plan-independent \"app offers X\" signal, so a feature the\n * app does NOT offer at all is hidden outright while an offered one prompts.\n */\n entitlementFeatureId?: string;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Hub Config — the registry root\n// ════════════════════════════════════════════════════════════════\n\n/** @wildo_source:part:start saas.frontend.settings-hub.placement */\n/**\n * The AUTHORED Settings Hub registry — an application's own settings rail.\n *\n * The framework ships destinations (`ENGINE_SETTINGS_DESTINATIONS`), never a\n * placed hub. This is the application's half: which categories exist, which\n * destinations are placed where, and any destinations the application owns.\n * `wildo init` scaffolds the full engine destination list as placements so a new\n * application starts complete and edits down.\n *\n * Resolve it with `resolveSettingsHubConfig()` to get the rendered\n * {@link SettingsSection} list; the render path never reads this shape directly.\n */\nexport interface SettingsHubConfig {\n /** Rail groups, in render order (also orderable via `SettingsCategory.order`). */\n categories: SettingsCategory[];\n /**\n * Every destination this application places, and where.\n *\n * A destination that appears in no placement does not render. That is\n * deliberate: absence is how an application removes a settings section, and it\n * must not be second-guessed by a merge against a framework default.\n */\n placements: SettingsPlacement[];\n /**\n * The application's OWN destinations — settings surfaces the engine does not\n * ship, such as a list of the application's team members or a component it\n * registers. Declared here, then placed like any other destination; a\n * declared destination that no placement names does not render.\n *\n * The ref must not be an engine destination's ref. The engine keeps owning\n * what its destinations mean, so on a clash the ENGINE destination is the one\n * resolved, and the DEV startup verifier reports the clash.\n */\n destinations?: SettingsDestination[];\n /**\n * Section opened when the hub is launched without an explicit section\n * (`/settings` with no `:sectionRef`). Falls back to the first section of the\n * first category when omitted.\n */\n defaultSectionRef?: string;\n}\n\n/**\n * The RESOLVED hub — categories plus fully-resolved sections, ready to render.\n *\n * Distinct from {@link SettingsHubConfig} (what an application AUTHORS) because\n * conflating the two is what let a placed default ship from the engine. A\n * consumer that renders takes this; a consumer that configures takes the other.\n */\nexport interface ResolvedSettingsHubConfig {\n categories: SettingsCategory[];\n sections: SettingsSection[];\n defaultSectionRef?: string;\n}\n/** @wildo_source:part:end saas.frontend.settings-hub.placement */\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useSettingsHubConfig.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/useSettingsHubConfig.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,iCAAiC,CAAC;AAQzC;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACzD,uEAAuE;IACvE,QAAQ,CAAC,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,+BAA+B,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5D,+FAA+F;IAC/F,QAAQ,CAAC,mCAAmC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjE;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,0BAA0B,CAkBrH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,yBAAyB,CA2C3G;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,EAAE,CAQ5F;AAED,wBAAgB,oBAAoB,IAAI,yBAAyB,CAShE"}
1
+ {"version":3,"file":"useSettingsHubConfig.d.ts","sourceRoot":"","sources":["../../../../src/core/config/useSettingsHubConfig.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,iCAAiC,CAAC;AAQzC;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACzD,uEAAuE;IACvE,QAAQ,CAAC,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,+BAA+B,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5D,+FAA+F;IAC/F,QAAQ,CAAC,mCAAmC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjE;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,0BAA0B,CAkBrH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,yBAAyB,CA2C3G;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,EAAE,CAQ5F;AAED,wBAAgB,oBAAoB,IAAI,yBAAyB,CAShE"}
@@ -1 +1 @@
1
- {"version":3,"file":"useVisibleSettingsHubConfig.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/useVisibleSettingsHubConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAWH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,wBAAgB,2BAA2B,IAAI,yBAAyB,CAwCvE"}
1
+ {"version":3,"file":"useVisibleSettingsHubConfig.d.ts","sourceRoot":"","sources":["../../../../src/core/config/useVisibleSettingsHubConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAWH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,wBAAgB,2BAA2B,IAAI,yBAAyB,CAwCvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify-feature-references.frontend.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/verify-feature-references.frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gCAAgC,EAGjC,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,+DAA+D,CAAC;AAEvE,MAAM,WAAW,0CAA2C,SAAQ,gCAAgC;IAClG,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IACtD,iBAAiB,EAAE,yBAAyB,CAAC;IAC7C,SAAS,EAAE,yBAAyB,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D,GAAG,0CAA0C,CAiC7C"}
1
+ {"version":3,"file":"verify-feature-references.frontend.d.ts","sourceRoot":"","sources":["../../../../src/core/config/verify-feature-references.frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gCAAgC,EAGjC,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,+DAA+D,CAAC;AAEvE,MAAM,WAAW,0CAA2C,SAAQ,gCAAgC;IAClG,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IACtD,iBAAiB,EAAE,yBAAyB,CAAC;IAC7C,SAAS,EAAE,yBAAyB,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D,GAAG,0CAA0C,CAiC7C"}
@@ -42,7 +42,14 @@ export declare enum LauncherVerificationErrorCode {
42
42
  * `resolveItemRef` falls back to the hub's DEFAULT section for an unknown
43
43
  * `sectionRef`, so a command labelled "Billing" opens Profile.
44
44
  */
45
- SETTINGS_SECTION_NOT_PLACED = "SETTINGS_SECTION_NOT_PLACED"
45
+ SETTINGS_SECTION_NOT_PLACED = "SETTINGS_SECTION_NOT_PLACED",
46
+ /**
47
+ * A `runtimeAvailability.visibleToRoles` names a role that is neither a core role nor one of the application's
48
+ * organization roles. WARNING, because the entry then renders for nobody holding that spelling, silently: an audience
49
+ * never fails open. Not an error, because the browser does not receive the application's custom APPLICATION-level
50
+ * roles, so a role of that kind is reported too.
51
+ */
52
+ VISIBLE_TO_ROLES_UNKNOWN_ROLE = "VISIBLE_TO_ROLES_UNKNOWN_ROLE"
46
53
  }
47
54
  export interface LauncherVerificationError {
48
55
  severity: LauncherVerificationSeverity;
@@ -63,7 +70,14 @@ export interface LauncherVerificationResult {
63
70
  *
64
71
  * @see launcher-operation-binding-analysis.md §3.11
65
72
  */
66
- export declare function verifyLauncherContent(registry: FrontendResourcesRegistry, appConfig: AppConfiguration_Frontend, isComponentRegistered?: (componentRef: string) => boolean): LauncherVerificationResult;
73
+ export declare function verifyLauncherContent(registry: FrontendResourcesRegistry, appConfig: AppConfiguration_Frontend, isComponentRegistered?: (componentRef: string) => boolean,
74
+ /**
75
+ * What the BACKEND published, which the frontend config does not carry: the organization role keys
76
+ * (`AppConfiguration_Shared.organizationRoles`) that `visibleToRoles` is checked against.
77
+ */
78
+ backendPublished?: {
79
+ readonly organizationRoles?: readonly string[];
80
+ }): LauncherVerificationResult;
67
81
  /**
68
82
  * Formats and logs verification results to the console.
69
83
  * Groups errors by severity and includes a summary table.
@@ -1 +1 @@
1
- {"version":3,"file":"verify-launcher-content.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/verify-launcher-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAAE,yBAAyB,EAAoC,MAAM,+DAA+D,CAAC;AAqCjJ,oBAAY,4BAA4B;IACtC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAID,oBAAY,6BAA6B;IACvC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,cAAc,mBAAmB;IACjC,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;IAC/C,mCAAmC,wCAAwC;IAC3E,0CAA0C,+CAA+C;IACzF,+CAA+C,oDAAoD;IACnG,qCAAqC,0CAA0C;IAC/E,qCAAqC,0CAA0C;IAC/E,+BAA+B,oCAAoC;IACnE,uBAAuB,4BAA4B;IACnD,gCAAgC,qCAAqC;IACrE,iCAAiC,sCAAsC;IACvE,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;IAC3C;;;;;;OAMG;IACH,2BAA2B,gCAAgC;CAC5D;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,IAAI,EAAE,6BAA6B,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;CAClB;AAwfD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,SAAS,EAAE,yBAAyB,EACpC,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,GACxD,0BAA0B,CAmK5B;AAMD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI,CAqB1F"}
1
+ {"version":3,"file":"verify-launcher-content.d.ts","sourceRoot":"","sources":["../../../../src/core/config/verify-launcher-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAAE,yBAAyB,EAAoC,MAAM,+DAA+D,CAAC;AAqCjJ,oBAAY,4BAA4B;IACtC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAID,oBAAY,6BAA6B;IACvC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,cAAc,mBAAmB;IACjC,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;IAC/C,mCAAmC,wCAAwC;IAC3E,0CAA0C,+CAA+C;IACzF,+CAA+C,oDAAoD;IACnG,qCAAqC,0CAA0C;IAC/E,qCAAqC,0CAA0C;IAC/E,+BAA+B,oCAAoC;IACnE,uBAAuB,4BAA4B;IACnD,gCAAgC,qCAAqC;IACrE,iCAAiC,sCAAsC;IACvE,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;IAC3C;;;;;;OAMG;IACH,2BAA2B,gCAAgC;IAC3D;;;;;OAKG;IACH,6BAA6B,kCAAkC;CAChE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,IAAI,EAAE,6BAA6B,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;CAClB;AAwfD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,SAAS,EAAE,yBAAyB,EACpC,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO;AACzD;;;GAGG;AACH,gBAAgB,CAAC,EAAE;IAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACpE,0BAA0B,CAqK5B;AAqDD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI,CAqB1F"}
@@ -12,7 +12,7 @@
12
12
  * @see launcher-operation-binding-analysis.md §3.11
13
13
  * @see app-shell-implementation-plan.md Step 5
14
14
  */
15
- import { notificationBadgeIdentityKey } from '@wildo-ai/saas-models';
15
+ import { CORE_APP_ROLES, CORE_ORG_ROLES, notificationBadgeIdentityKey } from '@wildo-ai/saas-models';
16
16
  import { FrontendView_ScopeMode } from './views-frontend.schemas.js';
17
17
  import { findResourceOwnedViewReferenceMatches, resolveResourceOwnedViewReference, } from './resource-owned-view-resolution.frontend.utils.js';
18
18
  import { findDuplicateAppScopeResourceTypes, } from './app-configuration-frontend.schemas.js';
@@ -53,6 +53,13 @@ export var LauncherVerificationErrorCode;
53
53
  * `sectionRef`, so a command labelled "Billing" opens Profile.
54
54
  */
55
55
  LauncherVerificationErrorCode["SETTINGS_SECTION_NOT_PLACED"] = "SETTINGS_SECTION_NOT_PLACED";
56
+ /**
57
+ * A `runtimeAvailability.visibleToRoles` names a role that is neither a core role nor one of the application's
58
+ * organization roles. WARNING, because the entry then renders for nobody holding that spelling, silently: an audience
59
+ * never fails open. Not an error, because the browser does not receive the application's custom APPLICATION-level
60
+ * roles, so a role of that kind is reported too.
61
+ */
62
+ LauncherVerificationErrorCode["VISIBLE_TO_ROLES_UNKNOWN_ROLE"] = "VISIBLE_TO_ROLES_UNKNOWN_ROLE";
56
63
  })(LauncherVerificationErrorCode || (LauncherVerificationErrorCode = {}));
57
64
  function buildViewRegistry(appConfig) {
58
65
  const applicationViewsByRef = new Map();
@@ -451,7 +458,12 @@ function verifySidebarSection(section, registry, viewRegistry, appModeRefs, erro
451
458
  *
452
459
  * @see launcher-operation-binding-analysis.md §3.11
453
460
  */
454
- export function verifyLauncherContent(registry, appConfig, isComponentRegistered) {
461
+ export function verifyLauncherContent(registry, appConfig, isComponentRegistered,
462
+ /**
463
+ * What the BACKEND published, which the frontend config does not carry: the organization role keys
464
+ * (`AppConfiguration_Shared.organizationRoles`) that `visibleToRoles` is checked against.
465
+ */
466
+ backendPublished) {
455
467
  const errors = [];
456
468
  const config = appConfig.appComponentsConfiguration;
457
469
  const viewRegistry = buildViewRegistry(appConfig);
@@ -599,8 +611,55 @@ export function verifyLauncherContent(registry, appConfig, isComponentRegistered
599
611
  });
600
612
  }
601
613
  }
614
+ verifyLauncherAudiences(config, backendPublished?.organizationRoles, errors);
602
615
  return { errors, isValid: errors.length === 0 };
603
616
  }
617
+ /**
618
+ * Every `runtimeAvailability.visibleToRoles` across the launcher surfaces, against the roles that exist: the core
619
+ * application and organization roles and the application's published organization roles. Skipped when the backend
620
+ * publishes no organization role table, since every custom role would then read as unknown.
621
+ */
622
+ function verifyLauncherAudiences(config, organizationRoles, errors) {
623
+ if (!organizationRoles?.length)
624
+ return;
625
+ const knownRoles = new Set([...Object.values(CORE_APP_ROLES), ...Object.values(CORE_ORG_ROLES), ...organizationRoles]);
626
+ const visit = (declaration, context) => {
627
+ if (typeof declaration !== 'object' || declaration === null)
628
+ return;
629
+ const record = declaration;
630
+ const roles = record.runtimeAvailability?.visibleToRoles;
631
+ if (Array.isArray(roles)) {
632
+ for (const role of roles) {
633
+ if (typeof role === 'string' && !knownRoles.has(role)) {
634
+ errors.push({
635
+ severity: LauncherVerificationSeverity.WARNING,
636
+ code: LauncherVerificationErrorCode.VISIBLE_TO_ROLES_UNKNOWN_ROLE,
637
+ context,
638
+ message: `visibleToRoles names "${role}", which is neither a core role nor one of the application's organization roles: `
639
+ + 'nobody holds it, so the entry is shown to none of the roles meant by it. Check the spelling (a custom application-level role is also reported here).',
640
+ item: declaration,
641
+ });
642
+ }
643
+ }
644
+ }
645
+ if (Array.isArray(record.children))
646
+ record.children.forEach((child, index) => visit(child, `${context}.children[${index}]`));
647
+ };
648
+ const listOf = (key, field) => {
649
+ const surface = config[key];
650
+ if (typeof surface !== 'object' || surface === null)
651
+ return [];
652
+ const list = surface[field];
653
+ return Array.isArray(list) ? list : [];
654
+ };
655
+ listOf(ApplicationLevelComponentType.SIDEBAR, 'contentSections').forEach((section, index) => visit(section, `sidebar.contentSections[${index}]`));
656
+ listOf(ApplicationLevelComponentType.COMMAND_MENU, 'commands').forEach((entry, index) => visit(entry, `command_menu.commands[${index}]`));
657
+ listOf(ApplicationLevelComponentType.HOTKEY, 'bindings').forEach((entry, index) => visit(entry, `hotkey.bindings[${index}]`));
658
+ listOf(ApplicationLevelComponentType.QUICK_ACTION_BUTTON, 'actions').forEach((entry, index) => visit(entry, `quick_action_button.actions[${index}]`));
659
+ listOf(ApplicationLevelComponentType.CONTROL_PANEL, 'items').forEach((entry, index) => visit(entry, `control_panel.items[${index}]`));
660
+ listOf(ApplicationLevelComponentType.TOOLBAR, 'tools').forEach((entry, index) => visit(entry, `toolbar.tools[${index}]`));
661
+ listOf(ApplicationLevelComponentType.MENUBAR, 'items').forEach((entry, index) => visit(entry, `menubar.items[${index}]`));
662
+ }
604
663
  // ════════════════════════════════════════════════════════════════
605
664
  // Console Reporter
606
665
  // ════════════════════════════════════════════════════════════════
@@ -1 +1 @@
1
- {"version":3,"file":"verify-launcher-content.js","sourceRoot":"","sources":["../../../../../src/core/config/verify-launcher-content.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Launcher Content Verification\n *\n * DEV-mode startup validator that walks every content-declaring launcher's\n * configuration and verifies that all declared references resolve to real\n * registry entries (operations, views, engine pages, hosted components).\n *\n * Adapts traversal to each launcher's structural model — sidebar sections\n * use a discriminated union on `contentKind`, while other launchers are\n * flat item arrays.\n *\n * @see launcher-operation-binding-analysis.md §3.11\n * @see app-shell-implementation-plan.md Step 5\n */\n\nimport { notificationBadgeIdentityKey } from '@wildo-ai/saas-models';\n\nimport type { AppConfiguration_Frontend } from './app-configuration-frontend.schemas';\nimport type { FrontendResourcesRegistry, AnyFrontendResourceConfiguration } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport type { CompositeViewDefinition } from './composite-view.schemas';\nimport type { FullCustomViewDefinition } from './full-custom-view.schemas';\nimport type { FlowsActorsViewDefinition } from './flows-actors-view.schemas';\nimport { FrontendView_ScopeMode } from './views-frontend.schemas';\nimport {\n findResourceOwnedViewReferenceMatches,\n resolveResourceOwnedViewReference,\n} from './resource-owned-view-resolution.frontend.utils';\nimport {\n findDuplicateAppScopeResourceTypes,\n} from './app-configuration-frontend.schemas';\nimport {\n ApplicationLevelComponentType,\n} from './app-level-components.frontend.schemas';\nimport {\n LauncherItemTargetKind,\n EnginePageRef,\n SidebarSectionContentKind,\n ENGINE_PAGE_METADATA,\n} from './launcher-items.frontend.schemas';\nimport type {\n LauncherItemRef,\n MenubarLauncherItem,\n ToolbarItem,\n SidebarItem,\n SidebarSection,\n SidebarSection_NavigationList,\n SidebarSection_ResourceBrowser,\n AppModeDefinition,\n} from './launcher-items.frontend.schemas';\n\n\n// ════════════════════════════════════════════════════════════════\n// Verification Result Types\n// ════════════════════════════════════════════════════════════════\n\nexport enum LauncherVerificationSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n}\n\nimport { resolveSettingsHubConfig } from './useSettingsHubConfig';\n\nexport enum LauncherVerificationErrorCode {\n RESOURCE_NOT_FOUND = 'RESOURCE_NOT_FOUND',\n OPERATION_NOT_FOUND = 'OPERATION_NOT_FOUND',\n VIEW_NOT_FOUND = 'VIEW_NOT_FOUND',\n VIEW_REF_COLLISION = 'VIEW_REF_COLLISION',\n ENGINE_PAGE_NOT_FOUND = 'ENGINE_PAGE_NOT_FOUND',\n RESOURCE_BROWSER_RESOURCE_NOT_FOUND = 'RESOURCE_BROWSER_RESOURCE_NOT_FOUND',\n RESOURCE_BROWSER_BOUND_OPERATION_NOT_FOUND = 'RESOURCE_BROWSER_BOUND_OPERATION_NOT_FOUND',\n RESOURCE_BROWSER_NAVIGATION_OPERATION_NOT_FOUND = 'RESOURCE_BROWSER_NAVIGATION_OPERATION_NOT_FOUND',\n RESOURCE_BROWSER_MISSING_LABEL_CONFIG = 'RESOURCE_BROWSER_MISSING_LABEL_CONFIG',\n ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES = 'ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES',\n HOSTED_COMPONENT_NOT_CONFIGURED = 'HOSTED_COMPONENT_NOT_CONFIGURED',\n VISIBLE_IN_MODES_ORPHAN = 'VISIBLE_IN_MODES_ORPHAN',\n NOTIFICATION_BADGE_REF_NOT_FOUND = 'NOTIFICATION_BADGE_REF_NOT_FOUND',\n APP_SCOPE_DUPLICATE_RESOURCE_TYPE = 'APP_SCOPE_DUPLICATE_RESOURCE_TYPE',\n VIEW_NOT_LAUNCHABLE = 'VIEW_NOT_LAUNCHABLE',\n UNKNOWN_TARGET_KIND = 'UNKNOWN_TARGET_KIND',\n /**\n * A launcher opens a Settings Hub section the application did not PLACE.\n *\n * ERROR, because the failure is silent and lands the user somewhere plausible:\n * `resolveItemRef` falls back to the hub's DEFAULT section for an unknown\n * `sectionRef`, so a command labelled \"Billing\" opens Profile.\n */\n SETTINGS_SECTION_NOT_PLACED = 'SETTINGS_SECTION_NOT_PLACED',\n}\n\nexport interface LauncherVerificationError {\n severity: LauncherVerificationSeverity;\n code: LauncherVerificationErrorCode;\n context: string;\n message: string;\n item?: unknown;\n}\n\nexport interface LauncherVerificationResult {\n errors: LauncherVerificationError[];\n isValid: boolean;\n}\n\n// ════════════════════════════════════════════════════════════════\n// View Registry — collected from AppConfiguration_Frontend\n// ════════════════════════════════════════════════════════════════\n\ninterface ViewDefinitionBase {\n ref: string;\n}\n\ninterface ViewRegistry {\n applicationViewsByRef: Map<string, { family: 'composite' | 'fullCustom' | 'flowsActors' }>;\n duplicateApplicationViewRefs: Set<string>;\n compositeViewsByRef: Map<string, CompositeViewDefinition>;\n fullCustomViewsByRef: Map<string, FullCustomViewDefinition>;\n flowsActorsViewsByRef: Map<string, FlowsActorsViewDefinition>;\n}\n\nfunction buildViewRegistry(appConfig: AppConfiguration_Frontend): ViewRegistry {\n const applicationViewsByRef = new Map<string, { family: 'composite' | 'fullCustom' | 'flowsActors' }>();\n const duplicateApplicationViewRefs = new Set<string>();\n const compositeViewsByRef = new Map<string, CompositeViewDefinition>();\n const fullCustomViewsByRef = new Map<string, FullCustomViewDefinition>();\n const flowsActorsViewsByRef = new Map<string, FlowsActorsViewDefinition>();\n\n const registerScopedView = (\n view: ViewDefinitionBase & { scope: FrontendView_ScopeMode },\n family: 'composite' | 'fullCustom' | 'flowsActors',\n ): void => {\n if (view.scope !== FrontendView_ScopeMode.APPLICATION) {\n return;\n }\n\n if (applicationViewsByRef.has(view.ref)) {\n duplicateApplicationViewRefs.add(view.ref);\n return;\n }\n\n applicationViewsByRef.set(view.ref, { family });\n };\n\n for (const compositeView of appConfig.compositeViews ?? []) {\n compositeViewsByRef.set(compositeView.ref, compositeView);\n registerScopedView(compositeView, 'composite');\n }\n\n for (const fullCustomView of appConfig.fullCustomViews ?? []) {\n fullCustomViewsByRef.set(fullCustomView.ref, fullCustomView);\n registerScopedView(fullCustomView, 'fullCustom');\n }\n\n for (const flowsActorsView of appConfig.flowsActorsViews ?? []) {\n flowsActorsViewsByRef.set(flowsActorsView.ref, flowsActorsView);\n registerScopedView(flowsActorsView, 'flowsActors');\n }\n\n return {\n applicationViewsByRef,\n duplicateApplicationViewRefs,\n compositeViewsByRef,\n fullCustomViewsByRef,\n flowsActorsViewsByRef,\n };\n}\n\nfunction verifyScopedViewRef(\n item: Extract<LauncherItemRef, { viewRef: string }>,\n context: string,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n errors: LauncherVerificationError[],\n scope: 'application' | 'resource',\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n const viewEntry = scope === 'application'\n ? resolveApplicationScopedViewEntry(item.viewRef, viewRegistry, context, errors, item)\n : resolveResourceScopedViewEntry(item as Extract<LauncherItemRef, { kind: LauncherItemTargetKind.RESOURCE_VIEW }>, registry, context, errors);\n if (!viewEntry) {\n return;\n }\n\n switch (viewEntry.family) {\n case 'fullCustom': {\n const fullCustomView = viewRegistry.fullCustomViewsByRef.get(item.viewRef);\n if (fullCustomView && isComponentRegistered && !isComponentRegistered(fullCustomView.componentRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.HOSTED_COMPONENT_NOT_CONFIGURED,\n context,\n message: `Full custom view \"${item.viewRef}\" references component \"${fullCustomView.componentRef}\" which is not registered in ComponentRegistryService`,\n item,\n });\n }\n break;\n }\n\n case 'composite':\n case 'flowsActors':\n break;\n }\n}\n\nfunction resolveApplicationScopedViewEntry(\n viewRef: string,\n viewRegistry: ViewRegistry,\n context: string,\n errors: LauncherVerificationError[],\n item: LauncherItemRef,\n): { family: 'composite' | 'fullCustom' | 'flowsActors' } | null {\n if (viewRegistry.duplicateApplicationViewRefs.has(viewRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_REF_COLLISION,\n context,\n message: `Application view ref \"${viewRef}\" is declared by multiple special-view families in the same launcher scope`,\n item,\n });\n return null;\n }\n\n const viewEntry = viewRegistry.applicationViewsByRef.get(viewRef);\n if (!viewEntry) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_NOT_FOUND,\n context,\n message: `Application view \"${viewRef}\" not found in any compatible special-view definition`,\n item,\n });\n return null;\n }\n\n return viewEntry;\n}\n\nfunction resolveResourceScopedViewEntry(\n item: Extract<LauncherItemRef, { kind: LauncherItemTargetKind.RESOURCE_VIEW }>,\n registry: FrontendResourcesRegistry,\n context: string,\n errors: LauncherVerificationError[],\n): { family: 'composite' | 'chart' | 'execution' } | null {\n const resourceConfig = registry.resourceConfigurations[item.resourceType];\n if (!resourceConfig) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_NOT_FOUND,\n context,\n message: `Resource type \"${item.resourceType}\" not found in registry`,\n item,\n });\n return null;\n }\n\n const viewMatches = findResourceOwnedViewReferenceMatches({\n resourceType: item.resourceType,\n viewRef: item.viewRef,\n registry,\n });\n if (viewMatches.length > 1) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_REF_COLLISION,\n context,\n message: `Resource view ref \"${item.viewRef}\" is declared multiple times on resource \"${item.resourceType}\". RESOURCE_VIEW refs must be unique per resource-owned view namespace.`,\n item,\n });\n return null;\n }\n\n const resolvedView = resolveResourceOwnedViewReference({\n resourceType: item.resourceType,\n viewRef: item.viewRef,\n registry,\n });\n if (resolvedView) {\n if (resolvedView.scope !== FrontendView_ScopeMode.RESOURCE) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_NOT_LAUNCHABLE,\n context,\n message: `Resource view \"${item.viewRef}\" on resource \"${item.resourceType}\" must be declared with RESOURCE scope to be targeted by RESOURCE_VIEW launchers`,\n item,\n });\n return null;\n }\n return { family: resolvedView.family };\n }\n\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_NOT_FOUND,\n context,\n message: `Resource view \"${item.viewRef}\" is not declared on resource \"${item.resourceType}\"`,\n item,\n });\n return null;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Item Reference Verification\n// ════════════════════════════════════════════════════════════════\n\nfunction verifyItemRef(\n item: LauncherItemRef,\n context: string,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n errors: LauncherVerificationError[],\n /**\n * Section refs the application actually placed in its settings rail.\n *\n * REQUIRED rather than optional on purpose: an optional parameter lets a call\n * site silently skip the check, which is precisely the \"invariant applied at\n * one of N call sites\" shape (`invariant-call-site-enumeration.md`). Required,\n * the compiler enumerates the sites for you.\n */\n placedSettingsSectionRefs: ReadonlySet<string>,\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n switch (item.kind) {\n case LauncherItemTargetKind.RESOURCE_OPERATION: {\n const resourceConfig = registry.resourceConfigurations[item.resourceType];\n if (!resourceConfig) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_NOT_FOUND,\n context,\n message: `Resource type \"${item.resourceType}\" not found in registry`,\n item,\n });\n return;\n }\n const matchingOperations = resourceConfig.operations.filter(\n (op: { operationIdentifier: string; variantKey?: string; isOperationDefault?: boolean }) => (\n op.operationIdentifier === item.operation\n ),\n );\n const opExists = item.operationVariant\n ? matchingOperations.some((op) => op.variantKey === item.operationVariant)\n : matchingOperations.length > 0;\n if (!opExists) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.OPERATION_NOT_FOUND,\n context,\n message: `Operation \"${item.operation}\"${item.operationVariant ? ` (variant: ${item.operationVariant})` : ''} not found on resource \"${item.resourceType}\"`,\n item,\n });\n } else if (!item.operationVariant) {\n const defaultOperations = matchingOperations.filter((op) => op.isOperationDefault === true);\n if (matchingOperations.length > 1 && defaultOperations.length !== 1) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.OPERATION_NOT_FOUND,\n context,\n message: `Operation \"${item.operation}\" on resource \"${item.resourceType}\" is ambiguous without an explicit launcher operationVariant`,\n item,\n });\n }\n }\n break;\n }\n\n case LauncherItemTargetKind.VIEW: {\n verifyScopedViewRef(item, context, registry, viewRegistry, errors, 'application', isComponentRegistered);\n break;\n }\n\n case LauncherItemTargetKind.RESOURCE_VIEW: {\n verifyScopedViewRef(item, context, registry, viewRegistry, errors, 'resource', isComponentRegistered);\n break;\n }\n\n case LauncherItemTargetKind.ENGINE_PAGE: {\n if (!(item.pageRef in ENGINE_PAGE_METADATA)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.ENGINE_PAGE_NOT_FOUND,\n context,\n message: `Engine page ref \"${item.pageRef}\" has no entry in ENGINE_PAGE_METADATA`,\n item,\n });\n }\n break;\n }\n\n case LauncherItemTargetKind.CUSTOM_COMPONENT: {\n if (isComponentRegistered && !isComponentRegistered(item.componentRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.HOSTED_COMPONENT_NOT_CONFIGURED,\n context,\n message: `Custom launcher component \"${item.componentRef}\" is not registered in ComponentRegistryService`,\n item,\n });\n }\n break;\n }\n\n case LauncherItemTargetKind.SETTINGS_SECTION: {\n // This case used to `break` with a comment saying a settings launcher ref\n // is \"always structurally valid\" because the hub falls back to its default\n // section. That fallback is exactly why the ref MUST be checked: it turns a\n // dangling reference into a silently wrong destination rather than an\n // error, so nothing downstream can ever report it.\n //\n // An omitted `sectionRef` is legitimate — it means \"open the hub at its\n // default section\" — so only a NAMED ref is checked.\n if (item.sectionRef !== undefined && !placedSettingsSectionRefs.has(item.sectionRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.SETTINGS_SECTION_NOT_PLACED,\n context,\n message: `Launcher opens Settings Hub section \"${item.sectionRef}\", which this application does not place in its settings rail (\\`settingsHub.placements\\`); the hub would silently open its default section instead.`,\n item,\n });\n }\n break;\n }\n\n default: {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.UNKNOWN_TARGET_KIND,\n context,\n message: `Unknown LauncherItemTargetKind: \"${(item as LauncherItemRef).kind}\"`,\n item,\n });\n }\n }\n}\n\n/**\n * A launcher item's `notificationBadgeRef` must name a registered definition — sidebar and menubar\n * items alike, since both draw it with `NavigationItemBadge`.\n *\n * Matched on the badge KEY (`<scope>:<identifier>`), which is what `NavigationItemBadge` resolves\n * with and what the badge store indexes by. Matching on the bare `identifier` — the previous\n * behaviour — accepted a ref that names a definition at a DIFFERENT scope from the one that would\n * actually render, and reported nothing.\n */\nfunction verifyNotificationBadgeRef(\n item: LauncherItemRef & { notificationBadgeRef?: string },\n context: string,\n registry: FrontendResourcesRegistry,\n errors: LauncherVerificationError[],\n): void {\n if (!item.notificationBadgeRef\n || registry.notificationBadgeDefinitions.some((definition) => notificationBadgeIdentityKey(definition) === item.notificationBadgeRef)) {\n return;\n }\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.NOTIFICATION_BADGE_REF_NOT_FOUND,\n context,\n message: `notificationBadgeRef \"${item.notificationBadgeRef}\" does not resolve to a registered notification badge definition. `\n + `A ref is a badge key (\"<scope>:<identifier>\"); registered keys are: `\n + `${registry.notificationBadgeDefinitions.map(notificationBadgeIdentityKey).join(', ') || '(none)'}`,\n item,\n });\n}\n\n/**\n * Recursively verify sidebar items (navigation list children can nest).\n */\nfunction verifySidebarItems(\n items: SidebarItem[],\n context: string,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n errors: LauncherVerificationError[],\n placedSettingsSectionRefs: ReadonlySet<string>,\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n for (const item of items) {\n verifyItemRef(item, context, registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n verifyNotificationBadgeRef(item, context, registry, errors);\n if (item.children) {\n verifySidebarItems(item.children, `${context}.children`, registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n}\n\n// ════════════════════════════════════════════════════════════════\n// Sidebar Section Verification\n// ════════════════════════════════════════════════════════════════\n\nfunction verifySidebarSection(\n section: SidebarSection,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n appModeRefs: Set<string>,\n errors: LauncherVerificationError[],\n placedSettingsSectionRefs: ReadonlySet<string>,\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n const ctx = `sidebar.contentSections[${section.ref}]`;\n\n // Verify visibleInModes refs match declared appModes\n if (section.visibleInModes && section.visibleInModes.length > 0) {\n if (appModeRefs.size === 0) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.VISIBLE_IN_MODES_ORPHAN,\n context: ctx,\n message: `Section has visibleInModes but no appModes are declared — section will always be hidden`,\n item: section,\n });\n } else {\n for (const modeRef of section.visibleInModes) {\n if (!appModeRefs.has(modeRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.VISIBLE_IN_MODES_ORPHAN,\n context: ctx,\n message: `visibleInModes ref \"${modeRef}\" does not match any declared appMode`,\n item: section,\n });\n }\n }\n }\n }\n\n switch (section.contentKind) {\n case SidebarSectionContentKind.NAVIGATION_LIST: {\n const navSection = section as SidebarSection_NavigationList;\n verifySidebarItems(navSection.children, ctx, registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n break;\n }\n\n case SidebarSectionContentKind.RESOURCE_BROWSER: {\n const browserSection = section as SidebarSection_ResourceBrowser;\n const resourceConfig = registry.resourceConfigurations[browserSection.resourceType];\n\n if (!resourceConfig) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_RESOURCE_NOT_FOUND,\n context: ctx,\n message: `RESOURCE_BROWSER resourceType \"${browserSection.resourceType}\" not found in registry`,\n item: section,\n });\n break;\n }\n\n if (browserSection.operation) {\n const opExists = resourceConfig.operations.some(\n (op: { operationIdentifier: string; variantKey?: string }) =>\n op.operationIdentifier === browserSection.operation &&\n (!browserSection.operationVariant || op.variantKey === browserSection.operationVariant),\n );\n if (!opExists) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_BOUND_OPERATION_NOT_FOUND,\n context: ctx,\n message: `RESOURCE_BROWSER bound operation \"${browserSection.operation}\"${browserSection.operationVariant ? ` (variant: ${browserSection.operationVariant})` : ''} not found on \"${browserSection.resourceType}\"`,\n item: section,\n });\n }\n }\n\n if (browserSection.navigateOperation) {\n const navigateOpExists = resourceConfig.operations.some(\n (op: { operationIdentifier: string; variantKey?: string }) =>\n op.operationIdentifier === browserSection.navigateOperation &&\n (!browserSection.navigateOperationVariant || op.variantKey === browserSection.navigateOperationVariant),\n );\n if (!navigateOpExists) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_NAVIGATION_OPERATION_NOT_FOUND,\n context: ctx,\n message: `RESOURCE_BROWSER navigation operation \"${browserSection.navigateOperation}\"${browserSection.navigateOperationVariant ? ` (variant: ${browserSection.navigateOperationVariant})` : ''} not found on \"${browserSection.resourceType}\"`,\n item: section,\n });\n }\n }\n\n // Warn when no label derivation is configured — SidebarResourceBrowser names instances through the shared\n // resolver (`computeFrontendResourceLabel`), which falls back to the record's declared summary fields, then\n // its id; an explicit config is preferred.\n if (!resourceConfig.frontendConfiguration?.getFrontendResourceLabel) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_MISSING_LABEL_CONFIG,\n context: ctx,\n message: `RESOURCE_BROWSER for \"${browserSection.resourceType}\" has no getFrontendResourceLabel configured — instance labels will fall back to the record's summary fields, then its id`,\n item: section,\n });\n }\n break;\n }\n\n case SidebarSectionContentKind.GUIDANCE_WIDGET:\n case SidebarSectionContentKind.CUSTOM_COMPONENT:\n break;\n }\n}\n\n// ════════════════════════════════════════════════════════════════\n// Main Verification Function\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Validates all launcher content declarations against the resource registry\n * and view definitions. Adapts traversal per launcher's structural model.\n *\n * Call at startup in DEV mode only. Returns errors/warnings — does not throw.\n *\n * @see launcher-operation-binding-analysis.md §3.11\n */\nexport function verifyLauncherContent(\n registry: FrontendResourcesRegistry,\n appConfig: AppConfiguration_Frontend,\n isComponentRegistered?: (componentRef: string) => boolean,\n): LauncherVerificationResult {\n const errors: LauncherVerificationError[] = [];\n const config = appConfig.appComponentsConfiguration;\n const viewRegistry = buildViewRegistry(appConfig);\n\n // The section refs this application actually places. Derived through the same\n // resolver the hub renders with, so the verifier cannot disagree with what a\n // user will see — an unplaced destination is absent from both.\n const placedSettingsSectionRefs: ReadonlySet<string> = new Set(\n resolveSettingsHubConfig(appConfig.settingsHub).sections.map(section => section.ref),\n );\n\n // Collect appMode refs for cross-validation\n const appModeRefs = new Set<string>();\n const appModes: AppModeDefinition[] = appConfig.appModes ?? [];\n for (const mode of appModes) {\n appModeRefs.add(mode.ref);\n }\n\n const appScopeFields = appConfig.appScope?.fields ?? [];\n const duplicateAppScopeResourceTypes = findDuplicateAppScopeResourceTypes(appScopeFields);\n for (const duplicate of duplicateAppScopeResourceTypes) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.APP_SCOPE_DUPLICATE_RESOURCE_TYPE,\n context: 'appScope.fields',\n message: `Duplicate app-scope resourceType \"${duplicate.resourceType}\" is not allowed in appScope.fields. Conflicting fieldIdentifiers: ${duplicate.fieldIdentifiers.join(', ')}`,\n item: duplicate,\n });\n }\n\n for (const duplicateViewRef of viewRegistry.duplicateApplicationViewRefs) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_REF_COLLISION,\n context: 'applicationViews',\n message: `Application view ref \"${duplicateViewRef}\" is declared by multiple special-view families. View refs must be unique per launcher scope.`,\n item: duplicateViewRef,\n });\n }\n\n // ── SIDEBAR: verify per content kind ──\n const sidebarConfig = config[ApplicationLevelComponentType.SIDEBAR];\n if (typeof sidebarConfig === 'object' && sidebarConfig !== null && 'contentSections' in sidebarConfig) {\n const contentSections = (sidebarConfig as { contentSections?: SidebarSection[] }).contentSections;\n if (contentSections) {\n for (const section of contentSections) {\n verifySidebarSection(section, registry, viewRegistry, appModeRefs, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── COMMAND_MENU: verify commands ──\n const cmdConfig = config[ApplicationLevelComponentType.COMMAND_MENU];\n if (typeof cmdConfig === 'object' && cmdConfig !== null && 'commands' in cmdConfig) {\n const commands = (cmdConfig as { commands?: LauncherItemRef[] }).commands;\n if (commands) {\n for (const cmd of commands) {\n verifyItemRef(cmd, 'command_menu.commands', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── HOTKEY: verify bindings ──\n const hotkeyConfig = config[ApplicationLevelComponentType.HOTKEY];\n if (typeof hotkeyConfig === 'object' && hotkeyConfig !== null && 'bindings' in hotkeyConfig) {\n const bindings = (hotkeyConfig as { bindings?: LauncherItemRef[] }).bindings;\n if (bindings) {\n for (const binding of bindings) {\n verifyItemRef(binding, 'hotkey.bindings', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── QUICK_ACTION_BUTTON: verify actions ──\n const qabConfig = config[ApplicationLevelComponentType.QUICK_ACTION_BUTTON];\n if (typeof qabConfig === 'object' && qabConfig !== null && 'actions' in qabConfig) {\n const actions = (qabConfig as { actions?: LauncherItemRef[] }).actions;\n if (actions) {\n for (const action of actions) {\n verifyItemRef(action, 'quick_action_button.actions', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── CONTROL_PANEL: verify items ──\n const cpConfig = config[ApplicationLevelComponentType.CONTROL_PANEL];\n if (typeof cpConfig === 'object' && cpConfig !== null && 'items' in cpConfig) {\n const items = (cpConfig as { items?: LauncherItemRef[] }).items;\n if (items) {\n for (const item of items) {\n verifyItemRef(item, 'control_panel.items', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── TOOLBAR: verify tools ──\n const toolbarConfig = config[ApplicationLevelComponentType.TOOLBAR];\n if (typeof toolbarConfig === 'object' && toolbarConfig !== null && 'tools' in toolbarConfig) {\n const tools = (toolbarConfig as { tools?: ToolbarItem[] }).tools;\n if (tools) {\n for (const tool of tools) {\n verifyItemRef(tool, 'toolbar.tools', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── MENUBAR: verify hostedComponents + items ──\n const menubarConfig = config[ApplicationLevelComponentType.MENUBAR];\n if (typeof menubarConfig === 'object' && menubarConfig !== null) {\n if ('hostedComponents' in menubarConfig) {\n const hostedComponents = (menubarConfig as { hostedComponents?: Array<{ componentType: string }> }).hostedComponents;\n if (hostedComponents) {\n for (const hosted of hostedComponents) {\n const componentKey = hosted.componentType as keyof typeof config;\n if (!(componentKey in config)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.HOSTED_COMPONENT_NOT_CONFIGURED,\n context: 'menubar.hostedComponents',\n message: `Hosted component \"${hosted.componentType}\" is not configured in appComponentsConfiguration`,\n item: hosted,\n });\n }\n }\n }\n }\n if ('items' in menubarConfig) {\n const items = (menubarConfig as { items?: MenubarLauncherItem[] }).items;\n if (items) {\n for (const item of items) {\n verifyItemRef(item, 'menubar.items', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n verifyNotificationBadgeRef(item, 'menubar.items', registry, errors);\n }\n }\n }\n }\n\n // ── ACTIVITY_BAR: verify appModes exist ──\n const activityBarConfig = config[ApplicationLevelComponentType.ACTIVITY_BAR];\n if (typeof activityBarConfig === 'object' && activityBarConfig !== null) {\n if (appModes.length === 0) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES,\n context: 'activity_bar',\n message: 'ACTIVITY_BAR is configured but no appModes are declared — the mode selector will have nothing to render',\n item: activityBarConfig,\n });\n }\n } else if (activityBarConfig === true) {\n if (appModes.length === 0) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES,\n context: 'activity_bar',\n message: 'ACTIVITY_BAR is enabled but no appModes are declared — the mode selector will have nothing to render',\n item: activityBarConfig,\n });\n }\n }\n\n return { errors, isValid: errors.length === 0 };\n}\n\n// ════════════════════════════════════════════════════════════════\n// Console Reporter\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Formats and logs verification results to the console.\n * Groups errors by severity and includes a summary table.\n */\nexport function reportLauncherVerificationResults(result: LauncherVerificationResult): void {\n if (result.isValid) {\n console.log('[LauncherVerification] ✓ All launcher content declarations are valid');\n return;\n }\n\n const errorCount = result.errors.filter(e => e.severity === LauncherVerificationSeverity.ERROR).length;\n const warningCount = result.errors.filter(e => e.severity === LauncherVerificationSeverity.WARNING).length;\n\n console.group(\n `[LauncherVerification] ${errorCount} error(s), ${warningCount} warning(s)`,\n );\n\n for (const error of result.errors) {\n const prefix = error.severity === LauncherVerificationSeverity.ERROR ? '✗ ERROR' : '⚠ WARN';\n console.warn(\n `${prefix} [${error.code}] ${error.context}: ${error.message}`,\n );\n }\n\n console.groupEnd();\n}\n"]}
1
+ {"version":3,"file":"verify-launcher-content.js","sourceRoot":"","sources":["../../../../src/core/config/verify-launcher-content.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Launcher Content Verification\n *\n * DEV-mode startup validator that walks every content-declaring launcher's\n * configuration and verifies that all declared references resolve to real\n * registry entries (operations, views, engine pages, hosted components).\n *\n * Adapts traversal to each launcher's structural model — sidebar sections\n * use a discriminated union on `contentKind`, while other launchers are\n * flat item arrays.\n *\n * @see launcher-operation-binding-analysis.md §3.11\n * @see app-shell-implementation-plan.md Step 5\n */\n\nimport { CORE_APP_ROLES, CORE_ORG_ROLES, notificationBadgeIdentityKey } from '@wildo-ai/saas-models';\n\nimport type { AppConfiguration_Frontend } from './app-configuration-frontend.schemas';\nimport type { FrontendResourcesRegistry, AnyFrontendResourceConfiguration } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport type { CompositeViewDefinition } from './composite-view.schemas';\nimport type { FullCustomViewDefinition } from './full-custom-view.schemas';\nimport type { FlowsActorsViewDefinition } from './flows-actors-view.schemas';\nimport { FrontendView_ScopeMode } from './views-frontend.schemas';\nimport {\n findResourceOwnedViewReferenceMatches,\n resolveResourceOwnedViewReference,\n} from './resource-owned-view-resolution.frontend.utils';\nimport {\n findDuplicateAppScopeResourceTypes,\n} from './app-configuration-frontend.schemas';\nimport {\n ApplicationLevelComponentType,\n} from './app-level-components.frontend.schemas';\nimport {\n LauncherItemTargetKind,\n EnginePageRef,\n SidebarSectionContentKind,\n ENGINE_PAGE_METADATA,\n} from './launcher-items.frontend.schemas';\nimport type {\n LauncherItemRef,\n MenubarLauncherItem,\n ToolbarItem,\n SidebarItem,\n SidebarSection,\n SidebarSection_NavigationList,\n SidebarSection_ResourceBrowser,\n AppModeDefinition,\n} from './launcher-items.frontend.schemas';\n\n\n// ════════════════════════════════════════════════════════════════\n// Verification Result Types\n// ════════════════════════════════════════════════════════════════\n\nexport enum LauncherVerificationSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n}\n\nimport { resolveSettingsHubConfig } from './useSettingsHubConfig';\n\nexport enum LauncherVerificationErrorCode {\n RESOURCE_NOT_FOUND = 'RESOURCE_NOT_FOUND',\n OPERATION_NOT_FOUND = 'OPERATION_NOT_FOUND',\n VIEW_NOT_FOUND = 'VIEW_NOT_FOUND',\n VIEW_REF_COLLISION = 'VIEW_REF_COLLISION',\n ENGINE_PAGE_NOT_FOUND = 'ENGINE_PAGE_NOT_FOUND',\n RESOURCE_BROWSER_RESOURCE_NOT_FOUND = 'RESOURCE_BROWSER_RESOURCE_NOT_FOUND',\n RESOURCE_BROWSER_BOUND_OPERATION_NOT_FOUND = 'RESOURCE_BROWSER_BOUND_OPERATION_NOT_FOUND',\n RESOURCE_BROWSER_NAVIGATION_OPERATION_NOT_FOUND = 'RESOURCE_BROWSER_NAVIGATION_OPERATION_NOT_FOUND',\n RESOURCE_BROWSER_MISSING_LABEL_CONFIG = 'RESOURCE_BROWSER_MISSING_LABEL_CONFIG',\n ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES = 'ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES',\n HOSTED_COMPONENT_NOT_CONFIGURED = 'HOSTED_COMPONENT_NOT_CONFIGURED',\n VISIBLE_IN_MODES_ORPHAN = 'VISIBLE_IN_MODES_ORPHAN',\n NOTIFICATION_BADGE_REF_NOT_FOUND = 'NOTIFICATION_BADGE_REF_NOT_FOUND',\n APP_SCOPE_DUPLICATE_RESOURCE_TYPE = 'APP_SCOPE_DUPLICATE_RESOURCE_TYPE',\n VIEW_NOT_LAUNCHABLE = 'VIEW_NOT_LAUNCHABLE',\n UNKNOWN_TARGET_KIND = 'UNKNOWN_TARGET_KIND',\n /**\n * A launcher opens a Settings Hub section the application did not PLACE.\n *\n * ERROR, because the failure is silent and lands the user somewhere plausible:\n * `resolveItemRef` falls back to the hub's DEFAULT section for an unknown\n * `sectionRef`, so a command labelled \"Billing\" opens Profile.\n */\n SETTINGS_SECTION_NOT_PLACED = 'SETTINGS_SECTION_NOT_PLACED',\n /**\n * A `runtimeAvailability.visibleToRoles` names a role that is neither a core role nor one of the application's\n * organization roles. WARNING, because the entry then renders for nobody holding that spelling, silently: an audience\n * never fails open. Not an error, because the browser does not receive the application's custom APPLICATION-level\n * roles, so a role of that kind is reported too.\n */\n VISIBLE_TO_ROLES_UNKNOWN_ROLE = 'VISIBLE_TO_ROLES_UNKNOWN_ROLE',\n}\n\nexport interface LauncherVerificationError {\n severity: LauncherVerificationSeverity;\n code: LauncherVerificationErrorCode;\n context: string;\n message: string;\n item?: unknown;\n}\n\nexport interface LauncherVerificationResult {\n errors: LauncherVerificationError[];\n isValid: boolean;\n}\n\n// ════════════════════════════════════════════════════════════════\n// View Registry — collected from AppConfiguration_Frontend\n// ════════════════════════════════════════════════════════════════\n\ninterface ViewDefinitionBase {\n ref: string;\n}\n\ninterface ViewRegistry {\n applicationViewsByRef: Map<string, { family: 'composite' | 'fullCustom' | 'flowsActors' }>;\n duplicateApplicationViewRefs: Set<string>;\n compositeViewsByRef: Map<string, CompositeViewDefinition>;\n fullCustomViewsByRef: Map<string, FullCustomViewDefinition>;\n flowsActorsViewsByRef: Map<string, FlowsActorsViewDefinition>;\n}\n\nfunction buildViewRegistry(appConfig: AppConfiguration_Frontend): ViewRegistry {\n const applicationViewsByRef = new Map<string, { family: 'composite' | 'fullCustom' | 'flowsActors' }>();\n const duplicateApplicationViewRefs = new Set<string>();\n const compositeViewsByRef = new Map<string, CompositeViewDefinition>();\n const fullCustomViewsByRef = new Map<string, FullCustomViewDefinition>();\n const flowsActorsViewsByRef = new Map<string, FlowsActorsViewDefinition>();\n\n const registerScopedView = (\n view: ViewDefinitionBase & { scope: FrontendView_ScopeMode },\n family: 'composite' | 'fullCustom' | 'flowsActors',\n ): void => {\n if (view.scope !== FrontendView_ScopeMode.APPLICATION) {\n return;\n }\n\n if (applicationViewsByRef.has(view.ref)) {\n duplicateApplicationViewRefs.add(view.ref);\n return;\n }\n\n applicationViewsByRef.set(view.ref, { family });\n };\n\n for (const compositeView of appConfig.compositeViews ?? []) {\n compositeViewsByRef.set(compositeView.ref, compositeView);\n registerScopedView(compositeView, 'composite');\n }\n\n for (const fullCustomView of appConfig.fullCustomViews ?? []) {\n fullCustomViewsByRef.set(fullCustomView.ref, fullCustomView);\n registerScopedView(fullCustomView, 'fullCustom');\n }\n\n for (const flowsActorsView of appConfig.flowsActorsViews ?? []) {\n flowsActorsViewsByRef.set(flowsActorsView.ref, flowsActorsView);\n registerScopedView(flowsActorsView, 'flowsActors');\n }\n\n return {\n applicationViewsByRef,\n duplicateApplicationViewRefs,\n compositeViewsByRef,\n fullCustomViewsByRef,\n flowsActorsViewsByRef,\n };\n}\n\nfunction verifyScopedViewRef(\n item: Extract<LauncherItemRef, { viewRef: string }>,\n context: string,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n errors: LauncherVerificationError[],\n scope: 'application' | 'resource',\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n const viewEntry = scope === 'application'\n ? resolveApplicationScopedViewEntry(item.viewRef, viewRegistry, context, errors, item)\n : resolveResourceScopedViewEntry(item as Extract<LauncherItemRef, { kind: LauncherItemTargetKind.RESOURCE_VIEW }>, registry, context, errors);\n if (!viewEntry) {\n return;\n }\n\n switch (viewEntry.family) {\n case 'fullCustom': {\n const fullCustomView = viewRegistry.fullCustomViewsByRef.get(item.viewRef);\n if (fullCustomView && isComponentRegistered && !isComponentRegistered(fullCustomView.componentRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.HOSTED_COMPONENT_NOT_CONFIGURED,\n context,\n message: `Full custom view \"${item.viewRef}\" references component \"${fullCustomView.componentRef}\" which is not registered in ComponentRegistryService`,\n item,\n });\n }\n break;\n }\n\n case 'composite':\n case 'flowsActors':\n break;\n }\n}\n\nfunction resolveApplicationScopedViewEntry(\n viewRef: string,\n viewRegistry: ViewRegistry,\n context: string,\n errors: LauncherVerificationError[],\n item: LauncherItemRef,\n): { family: 'composite' | 'fullCustom' | 'flowsActors' } | null {\n if (viewRegistry.duplicateApplicationViewRefs.has(viewRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_REF_COLLISION,\n context,\n message: `Application view ref \"${viewRef}\" is declared by multiple special-view families in the same launcher scope`,\n item,\n });\n return null;\n }\n\n const viewEntry = viewRegistry.applicationViewsByRef.get(viewRef);\n if (!viewEntry) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_NOT_FOUND,\n context,\n message: `Application view \"${viewRef}\" not found in any compatible special-view definition`,\n item,\n });\n return null;\n }\n\n return viewEntry;\n}\n\nfunction resolveResourceScopedViewEntry(\n item: Extract<LauncherItemRef, { kind: LauncherItemTargetKind.RESOURCE_VIEW }>,\n registry: FrontendResourcesRegistry,\n context: string,\n errors: LauncherVerificationError[],\n): { family: 'composite' | 'chart' | 'execution' } | null {\n const resourceConfig = registry.resourceConfigurations[item.resourceType];\n if (!resourceConfig) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_NOT_FOUND,\n context,\n message: `Resource type \"${item.resourceType}\" not found in registry`,\n item,\n });\n return null;\n }\n\n const viewMatches = findResourceOwnedViewReferenceMatches({\n resourceType: item.resourceType,\n viewRef: item.viewRef,\n registry,\n });\n if (viewMatches.length > 1) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_REF_COLLISION,\n context,\n message: `Resource view ref \"${item.viewRef}\" is declared multiple times on resource \"${item.resourceType}\". RESOURCE_VIEW refs must be unique per resource-owned view namespace.`,\n item,\n });\n return null;\n }\n\n const resolvedView = resolveResourceOwnedViewReference({\n resourceType: item.resourceType,\n viewRef: item.viewRef,\n registry,\n });\n if (resolvedView) {\n if (resolvedView.scope !== FrontendView_ScopeMode.RESOURCE) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_NOT_LAUNCHABLE,\n context,\n message: `Resource view \"${item.viewRef}\" on resource \"${item.resourceType}\" must be declared with RESOURCE scope to be targeted by RESOURCE_VIEW launchers`,\n item,\n });\n return null;\n }\n return { family: resolvedView.family };\n }\n\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_NOT_FOUND,\n context,\n message: `Resource view \"${item.viewRef}\" is not declared on resource \"${item.resourceType}\"`,\n item,\n });\n return null;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Item Reference Verification\n// ════════════════════════════════════════════════════════════════\n\nfunction verifyItemRef(\n item: LauncherItemRef,\n context: string,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n errors: LauncherVerificationError[],\n /**\n * Section refs the application actually placed in its settings rail.\n *\n * REQUIRED rather than optional on purpose: an optional parameter lets a call\n * site silently skip the check, which is precisely the \"invariant applied at\n * one of N call sites\" shape (`invariant-call-site-enumeration.md`). Required,\n * the compiler enumerates the sites for you.\n */\n placedSettingsSectionRefs: ReadonlySet<string>,\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n switch (item.kind) {\n case LauncherItemTargetKind.RESOURCE_OPERATION: {\n const resourceConfig = registry.resourceConfigurations[item.resourceType];\n if (!resourceConfig) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_NOT_FOUND,\n context,\n message: `Resource type \"${item.resourceType}\" not found in registry`,\n item,\n });\n return;\n }\n const matchingOperations = resourceConfig.operations.filter(\n (op: { operationIdentifier: string; variantKey?: string; isOperationDefault?: boolean }) => (\n op.operationIdentifier === item.operation\n ),\n );\n const opExists = item.operationVariant\n ? matchingOperations.some((op) => op.variantKey === item.operationVariant)\n : matchingOperations.length > 0;\n if (!opExists) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.OPERATION_NOT_FOUND,\n context,\n message: `Operation \"${item.operation}\"${item.operationVariant ? ` (variant: ${item.operationVariant})` : ''} not found on resource \"${item.resourceType}\"`,\n item,\n });\n } else if (!item.operationVariant) {\n const defaultOperations = matchingOperations.filter((op) => op.isOperationDefault === true);\n if (matchingOperations.length > 1 && defaultOperations.length !== 1) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.OPERATION_NOT_FOUND,\n context,\n message: `Operation \"${item.operation}\" on resource \"${item.resourceType}\" is ambiguous without an explicit launcher operationVariant`,\n item,\n });\n }\n }\n break;\n }\n\n case LauncherItemTargetKind.VIEW: {\n verifyScopedViewRef(item, context, registry, viewRegistry, errors, 'application', isComponentRegistered);\n break;\n }\n\n case LauncherItemTargetKind.RESOURCE_VIEW: {\n verifyScopedViewRef(item, context, registry, viewRegistry, errors, 'resource', isComponentRegistered);\n break;\n }\n\n case LauncherItemTargetKind.ENGINE_PAGE: {\n if (!(item.pageRef in ENGINE_PAGE_METADATA)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.ENGINE_PAGE_NOT_FOUND,\n context,\n message: `Engine page ref \"${item.pageRef}\" has no entry in ENGINE_PAGE_METADATA`,\n item,\n });\n }\n break;\n }\n\n case LauncherItemTargetKind.CUSTOM_COMPONENT: {\n if (isComponentRegistered && !isComponentRegistered(item.componentRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.HOSTED_COMPONENT_NOT_CONFIGURED,\n context,\n message: `Custom launcher component \"${item.componentRef}\" is not registered in ComponentRegistryService`,\n item,\n });\n }\n break;\n }\n\n case LauncherItemTargetKind.SETTINGS_SECTION: {\n // This case used to `break` with a comment saying a settings launcher ref\n // is \"always structurally valid\" because the hub falls back to its default\n // section. That fallback is exactly why the ref MUST be checked: it turns a\n // dangling reference into a silently wrong destination rather than an\n // error, so nothing downstream can ever report it.\n //\n // An omitted `sectionRef` is legitimate — it means \"open the hub at its\n // default section\" — so only a NAMED ref is checked.\n if (item.sectionRef !== undefined && !placedSettingsSectionRefs.has(item.sectionRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.SETTINGS_SECTION_NOT_PLACED,\n context,\n message: `Launcher opens Settings Hub section \"${item.sectionRef}\", which this application does not place in its settings rail (\\`settingsHub.placements\\`); the hub would silently open its default section instead.`,\n item,\n });\n }\n break;\n }\n\n default: {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.UNKNOWN_TARGET_KIND,\n context,\n message: `Unknown LauncherItemTargetKind: \"${(item as LauncherItemRef).kind}\"`,\n item,\n });\n }\n }\n}\n\n/**\n * A launcher item's `notificationBadgeRef` must name a registered definition — sidebar and menubar\n * items alike, since both draw it with `NavigationItemBadge`.\n *\n * Matched on the badge KEY (`<scope>:<identifier>`), which is what `NavigationItemBadge` resolves\n * with and what the badge store indexes by. Matching on the bare `identifier` — the previous\n * behaviour — accepted a ref that names a definition at a DIFFERENT scope from the one that would\n * actually render, and reported nothing.\n */\nfunction verifyNotificationBadgeRef(\n item: LauncherItemRef & { notificationBadgeRef?: string },\n context: string,\n registry: FrontendResourcesRegistry,\n errors: LauncherVerificationError[],\n): void {\n if (!item.notificationBadgeRef\n || registry.notificationBadgeDefinitions.some((definition) => notificationBadgeIdentityKey(definition) === item.notificationBadgeRef)) {\n return;\n }\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.NOTIFICATION_BADGE_REF_NOT_FOUND,\n context,\n message: `notificationBadgeRef \"${item.notificationBadgeRef}\" does not resolve to a registered notification badge definition. `\n + `A ref is a badge key (\"<scope>:<identifier>\"); registered keys are: `\n + `${registry.notificationBadgeDefinitions.map(notificationBadgeIdentityKey).join(', ') || '(none)'}`,\n item,\n });\n}\n\n/**\n * Recursively verify sidebar items (navigation list children can nest).\n */\nfunction verifySidebarItems(\n items: SidebarItem[],\n context: string,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n errors: LauncherVerificationError[],\n placedSettingsSectionRefs: ReadonlySet<string>,\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n for (const item of items) {\n verifyItemRef(item, context, registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n verifyNotificationBadgeRef(item, context, registry, errors);\n if (item.children) {\n verifySidebarItems(item.children, `${context}.children`, registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n}\n\n// ════════════════════════════════════════════════════════════════\n// Sidebar Section Verification\n// ════════════════════════════════════════════════════════════════\n\nfunction verifySidebarSection(\n section: SidebarSection,\n registry: FrontendResourcesRegistry,\n viewRegistry: ViewRegistry,\n appModeRefs: Set<string>,\n errors: LauncherVerificationError[],\n placedSettingsSectionRefs: ReadonlySet<string>,\n isComponentRegistered?: (componentRef: string) => boolean,\n): void {\n const ctx = `sidebar.contentSections[${section.ref}]`;\n\n // Verify visibleInModes refs match declared appModes\n if (section.visibleInModes && section.visibleInModes.length > 0) {\n if (appModeRefs.size === 0) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.VISIBLE_IN_MODES_ORPHAN,\n context: ctx,\n message: `Section has visibleInModes but no appModes are declared — section will always be hidden`,\n item: section,\n });\n } else {\n for (const modeRef of section.visibleInModes) {\n if (!appModeRefs.has(modeRef)) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.VISIBLE_IN_MODES_ORPHAN,\n context: ctx,\n message: `visibleInModes ref \"${modeRef}\" does not match any declared appMode`,\n item: section,\n });\n }\n }\n }\n }\n\n switch (section.contentKind) {\n case SidebarSectionContentKind.NAVIGATION_LIST: {\n const navSection = section as SidebarSection_NavigationList;\n verifySidebarItems(navSection.children, ctx, registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n break;\n }\n\n case SidebarSectionContentKind.RESOURCE_BROWSER: {\n const browserSection = section as SidebarSection_ResourceBrowser;\n const resourceConfig = registry.resourceConfigurations[browserSection.resourceType];\n\n if (!resourceConfig) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_RESOURCE_NOT_FOUND,\n context: ctx,\n message: `RESOURCE_BROWSER resourceType \"${browserSection.resourceType}\" not found in registry`,\n item: section,\n });\n break;\n }\n\n if (browserSection.operation) {\n const opExists = resourceConfig.operations.some(\n (op: { operationIdentifier: string; variantKey?: string }) =>\n op.operationIdentifier === browserSection.operation &&\n (!browserSection.operationVariant || op.variantKey === browserSection.operationVariant),\n );\n if (!opExists) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_BOUND_OPERATION_NOT_FOUND,\n context: ctx,\n message: `RESOURCE_BROWSER bound operation \"${browserSection.operation}\"${browserSection.operationVariant ? ` (variant: ${browserSection.operationVariant})` : ''} not found on \"${browserSection.resourceType}\"`,\n item: section,\n });\n }\n }\n\n if (browserSection.navigateOperation) {\n const navigateOpExists = resourceConfig.operations.some(\n (op: { operationIdentifier: string; variantKey?: string }) =>\n op.operationIdentifier === browserSection.navigateOperation &&\n (!browserSection.navigateOperationVariant || op.variantKey === browserSection.navigateOperationVariant),\n );\n if (!navigateOpExists) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_NAVIGATION_OPERATION_NOT_FOUND,\n context: ctx,\n message: `RESOURCE_BROWSER navigation operation \"${browserSection.navigateOperation}\"${browserSection.navigateOperationVariant ? ` (variant: ${browserSection.navigateOperationVariant})` : ''} not found on \"${browserSection.resourceType}\"`,\n item: section,\n });\n }\n }\n\n // Warn when no label derivation is configured — SidebarResourceBrowser names instances through the shared\n // resolver (`computeFrontendResourceLabel`), which falls back to the record's declared summary fields, then\n // its id; an explicit config is preferred.\n if (!resourceConfig.frontendConfiguration?.getFrontendResourceLabel) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.RESOURCE_BROWSER_MISSING_LABEL_CONFIG,\n context: ctx,\n message: `RESOURCE_BROWSER for \"${browserSection.resourceType}\" has no getFrontendResourceLabel configured — instance labels will fall back to the record's summary fields, then its id`,\n item: section,\n });\n }\n break;\n }\n\n case SidebarSectionContentKind.GUIDANCE_WIDGET:\n case SidebarSectionContentKind.CUSTOM_COMPONENT:\n break;\n }\n}\n\n// ════════════════════════════════════════════════════════════════\n// Main Verification Function\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Validates all launcher content declarations against the resource registry\n * and view definitions. Adapts traversal per launcher's structural model.\n *\n * Call at startup in DEV mode only. Returns errors/warnings — does not throw.\n *\n * @see launcher-operation-binding-analysis.md §3.11\n */\nexport function verifyLauncherContent(\n registry: FrontendResourcesRegistry,\n appConfig: AppConfiguration_Frontend,\n isComponentRegistered?: (componentRef: string) => boolean,\n /**\n * What the BACKEND published, which the frontend config does not carry: the organization role keys\n * (`AppConfiguration_Shared.organizationRoles`) that `visibleToRoles` is checked against.\n */\n backendPublished?: { readonly organizationRoles?: readonly string[] },\n): LauncherVerificationResult {\n const errors: LauncherVerificationError[] = [];\n const config = appConfig.appComponentsConfiguration;\n const viewRegistry = buildViewRegistry(appConfig);\n\n // The section refs this application actually places. Derived through the same\n // resolver the hub renders with, so the verifier cannot disagree with what a\n // user will see — an unplaced destination is absent from both.\n const placedSettingsSectionRefs: ReadonlySet<string> = new Set(\n resolveSettingsHubConfig(appConfig.settingsHub).sections.map(section => section.ref),\n );\n\n // Collect appMode refs for cross-validation\n const appModeRefs = new Set<string>();\n const appModes: AppModeDefinition[] = appConfig.appModes ?? [];\n for (const mode of appModes) {\n appModeRefs.add(mode.ref);\n }\n\n const appScopeFields = appConfig.appScope?.fields ?? [];\n const duplicateAppScopeResourceTypes = findDuplicateAppScopeResourceTypes(appScopeFields);\n for (const duplicate of duplicateAppScopeResourceTypes) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.APP_SCOPE_DUPLICATE_RESOURCE_TYPE,\n context: 'appScope.fields',\n message: `Duplicate app-scope resourceType \"${duplicate.resourceType}\" is not allowed in appScope.fields. Conflicting fieldIdentifiers: ${duplicate.fieldIdentifiers.join(', ')}`,\n item: duplicate,\n });\n }\n\n for (const duplicateViewRef of viewRegistry.duplicateApplicationViewRefs) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.VIEW_REF_COLLISION,\n context: 'applicationViews',\n message: `Application view ref \"${duplicateViewRef}\" is declared by multiple special-view families. View refs must be unique per launcher scope.`,\n item: duplicateViewRef,\n });\n }\n\n // ── SIDEBAR: verify per content kind ──\n const sidebarConfig = config[ApplicationLevelComponentType.SIDEBAR];\n if (typeof sidebarConfig === 'object' && sidebarConfig !== null && 'contentSections' in sidebarConfig) {\n const contentSections = (sidebarConfig as { contentSections?: SidebarSection[] }).contentSections;\n if (contentSections) {\n for (const section of contentSections) {\n verifySidebarSection(section, registry, viewRegistry, appModeRefs, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── COMMAND_MENU: verify commands ──\n const cmdConfig = config[ApplicationLevelComponentType.COMMAND_MENU];\n if (typeof cmdConfig === 'object' && cmdConfig !== null && 'commands' in cmdConfig) {\n const commands = (cmdConfig as { commands?: LauncherItemRef[] }).commands;\n if (commands) {\n for (const cmd of commands) {\n verifyItemRef(cmd, 'command_menu.commands', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── HOTKEY: verify bindings ──\n const hotkeyConfig = config[ApplicationLevelComponentType.HOTKEY];\n if (typeof hotkeyConfig === 'object' && hotkeyConfig !== null && 'bindings' in hotkeyConfig) {\n const bindings = (hotkeyConfig as { bindings?: LauncherItemRef[] }).bindings;\n if (bindings) {\n for (const binding of bindings) {\n verifyItemRef(binding, 'hotkey.bindings', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── QUICK_ACTION_BUTTON: verify actions ──\n const qabConfig = config[ApplicationLevelComponentType.QUICK_ACTION_BUTTON];\n if (typeof qabConfig === 'object' && qabConfig !== null && 'actions' in qabConfig) {\n const actions = (qabConfig as { actions?: LauncherItemRef[] }).actions;\n if (actions) {\n for (const action of actions) {\n verifyItemRef(action, 'quick_action_button.actions', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── CONTROL_PANEL: verify items ──\n const cpConfig = config[ApplicationLevelComponentType.CONTROL_PANEL];\n if (typeof cpConfig === 'object' && cpConfig !== null && 'items' in cpConfig) {\n const items = (cpConfig as { items?: LauncherItemRef[] }).items;\n if (items) {\n for (const item of items) {\n verifyItemRef(item, 'control_panel.items', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── TOOLBAR: verify tools ──\n const toolbarConfig = config[ApplicationLevelComponentType.TOOLBAR];\n if (typeof toolbarConfig === 'object' && toolbarConfig !== null && 'tools' in toolbarConfig) {\n const tools = (toolbarConfig as { tools?: ToolbarItem[] }).tools;\n if (tools) {\n for (const tool of tools) {\n verifyItemRef(tool, 'toolbar.tools', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n }\n }\n }\n\n // ── MENUBAR: verify hostedComponents + items ──\n const menubarConfig = config[ApplicationLevelComponentType.MENUBAR];\n if (typeof menubarConfig === 'object' && menubarConfig !== null) {\n if ('hostedComponents' in menubarConfig) {\n const hostedComponents = (menubarConfig as { hostedComponents?: Array<{ componentType: string }> }).hostedComponents;\n if (hostedComponents) {\n for (const hosted of hostedComponents) {\n const componentKey = hosted.componentType as keyof typeof config;\n if (!(componentKey in config)) {\n errors.push({\n severity: LauncherVerificationSeverity.ERROR,\n code: LauncherVerificationErrorCode.HOSTED_COMPONENT_NOT_CONFIGURED,\n context: 'menubar.hostedComponents',\n message: `Hosted component \"${hosted.componentType}\" is not configured in appComponentsConfiguration`,\n item: hosted,\n });\n }\n }\n }\n }\n if ('items' in menubarConfig) {\n const items = (menubarConfig as { items?: MenubarLauncherItem[] }).items;\n if (items) {\n for (const item of items) {\n verifyItemRef(item, 'menubar.items', registry, viewRegistry, errors, placedSettingsSectionRefs, isComponentRegistered);\n verifyNotificationBadgeRef(item, 'menubar.items', registry, errors);\n }\n }\n }\n }\n\n // ── ACTIVITY_BAR: verify appModes exist ──\n const activityBarConfig = config[ApplicationLevelComponentType.ACTIVITY_BAR];\n if (typeof activityBarConfig === 'object' && activityBarConfig !== null) {\n if (appModes.length === 0) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES,\n context: 'activity_bar',\n message: 'ACTIVITY_BAR is configured but no appModes are declared — the mode selector will have nothing to render',\n item: activityBarConfig,\n });\n }\n } else if (activityBarConfig === true) {\n if (appModes.length === 0) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.ACTIVITY_BAR_ENABLED_BUT_NO_APP_MODES,\n context: 'activity_bar',\n message: 'ACTIVITY_BAR is enabled but no appModes are declared — the mode selector will have nothing to render',\n item: activityBarConfig,\n });\n }\n }\n\n verifyLauncherAudiences(config, backendPublished?.organizationRoles, errors);\n\n return { errors, isValid: errors.length === 0 };\n}\n\n/**\n * Every `runtimeAvailability.visibleToRoles` across the launcher surfaces, against the roles that exist: the core\n * application and organization roles and the application's published organization roles. Skipped when the backend\n * publishes no organization role table, since every custom role would then read as unknown.\n */\nfunction verifyLauncherAudiences(\n config: AppConfiguration_Frontend['appComponentsConfiguration'],\n organizationRoles: readonly string[] | undefined,\n errors: LauncherVerificationError[],\n): void {\n if (!organizationRoles?.length) return;\n const knownRoles = new Set<string>([...Object.values(CORE_APP_ROLES), ...Object.values(CORE_ORG_ROLES), ...organizationRoles]);\n const visit = (declaration: unknown, context: string): void => {\n if (typeof declaration !== 'object' || declaration === null) return;\n const record = declaration as { runtimeAvailability?: { visibleToRoles?: unknown }; children?: unknown };\n const roles = record.runtimeAvailability?.visibleToRoles;\n if (Array.isArray(roles)) {\n for (const role of roles) {\n if (typeof role === 'string' && !knownRoles.has(role)) {\n errors.push({\n severity: LauncherVerificationSeverity.WARNING,\n code: LauncherVerificationErrorCode.VISIBLE_TO_ROLES_UNKNOWN_ROLE,\n context,\n message: `visibleToRoles names \"${role}\", which is neither a core role nor one of the application's organization roles: `\n + 'nobody holds it, so the entry is shown to none of the roles meant by it. Check the spelling (a custom application-level role is also reported here).',\n item: declaration,\n });\n }\n }\n }\n if (Array.isArray(record.children)) record.children.forEach((child, index) => visit(child, `${context}.children[${index}]`));\n };\n const listOf = (key: ApplicationLevelComponentType, field: string): unknown[] => {\n const surface = config[key as keyof typeof config] as unknown;\n if (typeof surface !== 'object' || surface === null) return [];\n const list = (surface as Record<string, unknown>)[field];\n return Array.isArray(list) ? list : [];\n };\n listOf(ApplicationLevelComponentType.SIDEBAR, 'contentSections').forEach((section, index) => visit(section, `sidebar.contentSections[${index}]`));\n listOf(ApplicationLevelComponentType.COMMAND_MENU, 'commands').forEach((entry, index) => visit(entry, `command_menu.commands[${index}]`));\n listOf(ApplicationLevelComponentType.HOTKEY, 'bindings').forEach((entry, index) => visit(entry, `hotkey.bindings[${index}]`));\n listOf(ApplicationLevelComponentType.QUICK_ACTION_BUTTON, 'actions').forEach((entry, index) => visit(entry, `quick_action_button.actions[${index}]`));\n listOf(ApplicationLevelComponentType.CONTROL_PANEL, 'items').forEach((entry, index) => visit(entry, `control_panel.items[${index}]`));\n listOf(ApplicationLevelComponentType.TOOLBAR, 'tools').forEach((entry, index) => visit(entry, `toolbar.tools[${index}]`));\n listOf(ApplicationLevelComponentType.MENUBAR, 'items').forEach((entry, index) => visit(entry, `menubar.items[${index}]`));\n}\n\n// ════════════════════════════════════════════════════════════════\n// Console Reporter\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Formats and logs verification results to the console.\n * Groups errors by severity and includes a summary table.\n */\nexport function reportLauncherVerificationResults(result: LauncherVerificationResult): void {\n if (result.isValid) {\n console.log('[LauncherVerification] ✓ All launcher content declarations are valid');\n return;\n }\n\n const errorCount = result.errors.filter(e => e.severity === LauncherVerificationSeverity.ERROR).length;\n const warningCount = result.errors.filter(e => e.severity === LauncherVerificationSeverity.WARNING).length;\n\n console.group(\n `[LauncherVerification] ${errorCount} error(s), ${warningCount} warning(s)`,\n );\n\n for (const error of result.errors) {\n const prefix = error.severity === LauncherVerificationSeverity.ERROR ? '✗ ERROR' : '⚠ WARN';\n console.warn(\n `${prefix} [${error.code}] ${error.context}: ${error.message}`,\n );\n }\n\n console.groupEnd();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"verify-settings-hub-content.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/verify-settings-hub-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAMzE,oBAAY,+BAA+B;IACzC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,gCAAgC;IAC1C,kFAAkF;IAClF,qBAAqB,0BAA0B;IAC/C,qDAAqD;IACrD,sBAAsB,2BAA2B;IACjD,+EAA+E;IAC/E,4BAA4B,iCAAiC;IAC7D,+EAA+E;IAC/E,qBAAqB,0BAA0B;IAC/C,oEAAoE;IACpE,2BAA2B,gCAAgC;IAC3D;;;;;;;OAOG;IACH,iCAAiC,sCAAsC;IACvE;;;;OAIG;IACH,sCAAsC,2CAA2C;IACjF,4EAA4E;IAC5E,qCAAqC,0CAA0C;CAChF;AAED,yFAAyF;AACzF,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,0BAA0B,EAC1B,iCAAiC,GAAG,qCAAqC,CAC1E,CAAC;AAOF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,IAAI,EAAE,gCAAgC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,yBAAyB,EACjC,sBAAsB,GAAE,SAAS,MAAM,EAAO,EAC9C,oBAAoB,GAAE,4BAAuD,GAC5E,6BAA6B,CA+G/B;AAMD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,6BAA6B,GAAG,IAAI,CAqBhG"}
1
+ {"version":3,"file":"verify-settings-hub-content.d.ts","sourceRoot":"","sources":["../../../../src/core/config/verify-settings-hub-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAMzE,oBAAY,+BAA+B;IACzC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,gCAAgC;IAC1C,kFAAkF;IAClF,qBAAqB,0BAA0B;IAC/C,qDAAqD;IACrD,sBAAsB,2BAA2B;IACjD,+EAA+E;IAC/E,4BAA4B,iCAAiC;IAC7D,+EAA+E;IAC/E,qBAAqB,0BAA0B;IAC/C,oEAAoE;IACpE,2BAA2B,gCAAgC;IAC3D;;;;;;;OAOG;IACH,iCAAiC,sCAAsC;IACvE;;;;OAIG;IACH,sCAAsC,2CAA2C;IACjF,4EAA4E;IAC5E,qCAAqC,0CAA0C;CAChF;AAED,yFAAyF;AACzF,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,0BAA0B,EAC1B,iCAAiC,GAAG,qCAAqC,CAC1E,CAAC;AAOF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,IAAI,EAAE,gCAAgC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,yBAAyB,EACjC,sBAAsB,GAAE,SAAS,MAAM,EAAO,EAC9C,oBAAoB,GAAE,4BAAuD,GAC5E,6BAA6B,CA+G/B;AAMD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,6BAA6B,GAAG,IAAI,CAqBhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"view-label-declaration.schemas.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/view-label-declaration.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"view-label-declaration.schemas.d.ts","sourceRoot":"","sources":["../../../../src/core/config/view-label-declaration.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"views-frontend.schemas.d.ts","sourceRoot":"","sources":["../../../../../src/core/config/views-frontend.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,oBAAY,sBAAsB;IAChC,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;4BASxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,iEAAiE;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E"}
1
+ {"version":3,"file":"views-frontend.schemas.d.ts","sourceRoot":"","sources":["../../../../src/core/config/views-frontend.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,oBAAY,sBAAsB;IAChC,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;4BASxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,iEAAiE;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"common-enum-registry.d.ts","sourceRoot":"","sources":["../../../../../src/core/enums/common-enum-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG/E;;;;;GAKG;AACH,KAAK,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;AAExG;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,0BAA0B,qCAA4C,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,YAAY,GAAG,SAAS,CASvF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAE3F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EACrB,aAAa,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAAC,YAAY,CAAC,GACtE,IAAI,CASN"}
1
+ {"version":3,"file":"common-enum-registry.d.ts","sourceRoot":"","sources":["../../../../src/core/enums/common-enum-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG/E;;;;;GAKG;AACH,KAAK,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;AAExG;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,0BAA0B,qCAA4C,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,YAAY,GAAG,SAAS,CASvF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAE3F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EACrB,aAAa,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAAC,YAAY,CAAC,GACtE,IAAI,CASN"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../../src/core/errors/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAUpD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAsBnC;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBACtE,KAAK,EAAE,kBAAkB;IAUrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ1E,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAgCjE,UAAU,EAAE,MAAM,IAAI,CAMpB;IAEF,MAAM,IAAI,KAAK,CAAC,SAAS;CA0B1B"}
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/core/errors/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAUpD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAsBnC;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBACtE,KAAK,EAAE,kBAAkB;IAUrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ1E,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAgCjE,UAAU,EAAE,MAAM,IAAI,CAMpB;IAEF,MAAM,IAAI,KAAK,CAAC,SAAS;CA0B1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorContext.d.ts","sourceRoot":"","sources":["../../../../../src/core/errors/ErrorContext.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA4D,MAAM,OAAO,CAAC;AAUnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAM7D;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAA0D,CAAC;AAEhI,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CA+P3D,CAAC"}
1
+ {"version":3,"file":"ErrorContext.d.ts","sourceRoot":"","sources":["../../../../src/core/errors/ErrorContext.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA4D,MAAM,OAAO,CAAC;AAUnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAM7D;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAA0D,CAAC;AAEhI,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CA+P3D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorModalContent.d.ts","sourceRoot":"","sources":["../../../../../src/core/errors/ErrorModalContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,sBAAsB;IACrC,mGAAmG;IACnG,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAQ9D,CAAC"}
1
+ {"version":3,"file":"ErrorModalContent.d.ts","sourceRoot":"","sources":["../../../../src/core/errors/ErrorModalContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,sBAAsB;IACrC,mGAAmG;IACnG,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAQ9D,CAAC"}