@happyvertical/smrt-planner 0.0.0-stage → 0.0.2

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 (815) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -2
  3. package/app/404.html +80 -0
  4. package/app/_app/immutable/assets/0.B5zXkXe_.css +1 -0
  5. package/app/_app/immutable/assets/10.hpcnxvK1.css +1 -0
  6. package/app/_app/immutable/assets/11.D7zoXfVV.css +1 -0
  7. package/app/_app/immutable/assets/12.CPobm1ED.css +1 -0
  8. package/app/_app/immutable/assets/2.CyaWdRdI.css +1 -0
  9. package/app/_app/immutable/assets/3.BlPQOes8.css +1 -0
  10. package/app/_app/immutable/assets/8.2gQeKBp_.css +1 -0
  11. package/app/_app/immutable/assets/9.HOPT4xtg.css +1 -0
  12. package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +1 -0
  13. package/app/_app/immutable/assets/Button.DkP0qkG9.css +1 -0
  14. package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +1 -0
  15. package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +1 -0
  16. package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +1 -0
  17. package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +1 -0
  18. package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +1 -0
  19. package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +1 -0
  20. package/app/_app/immutable/assets/dist.C5nHBk_O.css +1 -0
  21. package/app/_app/immutable/assets/feedback.BVKAwFck.css +1 -0
  22. package/app/_app/immutable/assets/forms.BChZ2RWM.css +1 -0
  23. package/app/_app/immutable/assets/inter-latin-ext.B_-bZUTo.woff2 +0 -0
  24. package/app/_app/immutable/assets/inter-latin.8kRkwJBP.woff2 +0 -0
  25. package/app/_app/immutable/assets/jetbrains-mono-latin-ext.Bnd2h4Br.woff2 +0 -0
  26. package/app/_app/immutable/assets/jetbrains-mono-latin.Db4Uuiha.woff2 +0 -0
  27. package/app/_app/immutable/assets/ort-wasm-simd-threaded.asyncify.CxOG5pUO.wasm +0 -0
  28. package/app/_app/immutable/assets/percent.LH0z-ozZ.css +1 -0
  29. package/app/_app/immutable/assets/space-grotesk-latin-ext.wJGaI8U0.woff2 +0 -0
  30. package/app/_app/immutable/assets/space-grotesk-latin.DPT1xrvW.woff2 +0 -0
  31. package/app/_app/immutable/assets/store.CGDwHkkF.css +1 -0
  32. package/app/_app/immutable/assets/ui.B1A1Zl2p.css +1 -0
  33. package/app/_app/immutable/assets/workspace.BIMkuZDb.css +1 -0
  34. package/app/_app/immutable/chunks/1okeBSoq.js +1 -0
  35. package/app/_app/immutable/chunks/2jFBkS1C.js +1 -0
  36. package/app/_app/immutable/chunks/6P9zxrzU.js +1 -0
  37. package/app/_app/immutable/chunks/B32EWqI8.js +9 -0
  38. package/app/_app/immutable/chunks/B4Kevpe0.js +1 -0
  39. package/app/_app/immutable/chunks/BJfAXhak.js +3 -0
  40. package/app/_app/immutable/chunks/BKwRT_1p.js +1 -0
  41. package/app/_app/immutable/chunks/BQxY8kkL.js +1 -0
  42. package/app/_app/immutable/chunks/BS4h9ES-.js +1 -0
  43. package/app/_app/immutable/chunks/BWPhGFHl.js +1 -0
  44. package/app/_app/immutable/chunks/BYcBM-fh.js +1 -0
  45. package/app/_app/immutable/chunks/BegKiy2G.js +1 -0
  46. package/app/_app/immutable/chunks/Bjy-W4x2.js +81 -0
  47. package/app/_app/immutable/chunks/BnRri03M.js +1 -0
  48. package/app/_app/immutable/chunks/C7zBd-pD.js +1 -0
  49. package/app/_app/immutable/chunks/CA-A9Ngs.js +1 -0
  50. package/app/_app/immutable/chunks/CMhpRMKg.js +1 -0
  51. package/app/_app/immutable/chunks/CPRHZZeW.js +1 -0
  52. package/app/_app/immutable/chunks/CRQ1Pmzr.js +1 -0
  53. package/app/_app/immutable/chunks/CWtfVMDz.js +1 -0
  54. package/app/_app/immutable/chunks/CgAkqYsL.js +1 -0
  55. package/app/_app/immutable/chunks/Chyo8rdT.js +3 -0
  56. package/app/_app/immutable/chunks/Ci0DUht6.js +34 -0
  57. package/app/_app/immutable/chunks/CmmuWmp6.js +2 -0
  58. package/app/_app/immutable/chunks/CrFNLK0f.js +1 -0
  59. package/app/_app/immutable/chunks/CrO3W89x.js +1 -0
  60. package/app/_app/immutable/chunks/CsprTb3f.js +2 -0
  61. package/app/_app/immutable/chunks/CyUMm_Wp.js +1 -0
  62. package/app/_app/immutable/chunks/CygC84VT.js +2 -0
  63. package/app/_app/immutable/chunks/D0VgZnk1.js +1 -0
  64. package/app/_app/immutable/chunks/D71UrO5c.js +1 -0
  65. package/app/_app/immutable/chunks/D7hhQvDO.js +1 -0
  66. package/app/_app/immutable/chunks/DD7gpKb2.js +1 -0
  67. package/app/_app/immutable/chunks/DNRgqfTx.js +1 -0
  68. package/app/_app/immutable/chunks/DRByVC-c.js +1 -0
  69. package/app/_app/immutable/chunks/DVRKjN-E.js +1 -0
  70. package/app/_app/immutable/chunks/D_J_XtJy.js +846 -0
  71. package/app/_app/immutable/chunks/Dbjm4OuC.js +1 -0
  72. package/app/_app/immutable/chunks/Dc4q22LH.js +42 -0
  73. package/app/_app/immutable/chunks/Dd_uD5pT.js +1 -0
  74. package/app/_app/immutable/chunks/DkR8_Ws6.js +2 -0
  75. package/app/_app/immutable/chunks/Dp9GVO-9.js +1 -0
  76. package/app/_app/immutable/chunks/DqcD-WtP.js +1 -0
  77. package/app/_app/immutable/chunks/Dt-HX3Vu.js +1 -0
  78. package/app/_app/immutable/chunks/FbOxj-PF.js +69 -0
  79. package/app/_app/immutable/chunks/QukgIHDX.js +1 -0
  80. package/app/_app/immutable/chunks/WxSPP8QW.js +4 -0
  81. package/app/_app/immutable/chunks/Xp1g1t4n.js +3 -0
  82. package/app/_app/immutable/chunks/iET62IRm.js +2 -0
  83. package/app/_app/immutable/chunks/leQCwW2d.js +1 -0
  84. package/app/_app/immutable/chunks/p6bgzXiY.js +1 -0
  85. package/app/_app/immutable/chunks/uBIymjUX.js +1 -0
  86. package/app/_app/immutable/chunks/xihTtKlq.js +1 -0
  87. package/app/_app/immutable/entry/app.IZIJXhgq.js +2 -0
  88. package/app/_app/immutable/entry/start.BuaYHD1N.js +1 -0
  89. package/app/_app/immutable/nodes/0.m_U8WC7E.js +10 -0
  90. package/app/_app/immutable/nodes/1.Crw8ULhB.js +1 -0
  91. package/app/_app/immutable/nodes/10.1nQxyH9H.js +4 -0
  92. package/app/_app/immutable/nodes/11.Cw0JnQF3.js +1 -0
  93. package/app/_app/immutable/nodes/12.BIocA1aI.js +1 -0
  94. package/app/_app/immutable/nodes/2.CR5BwGnt.js +17 -0
  95. package/app/_app/immutable/nodes/3.1B56hgAG.js +1 -0
  96. package/app/_app/immutable/nodes/4.SSIC7sUh.js +1 -0
  97. package/app/_app/immutable/nodes/5.DgdwleDQ.js +1 -0
  98. package/app/_app/immutable/nodes/6.DmD9rqLU.js +1 -0
  99. package/app/_app/immutable/nodes/7.DdngsBmo.js +1 -0
  100. package/app/_app/immutable/nodes/8.D2Mszsua.js +3 -0
  101. package/app/_app/immutable/nodes/9.CLYsywul.js +1 -0
  102. package/app/_app/immutable/workers/assets/ort-wasm-simd-threaded.asyncify-CxOG5pUO.wasm +0 -0
  103. package/app/_app/immutable/workers/llm.worker-wfCOG_uk.js +69 -0
  104. package/app/_app/immutable/workers/local-speech.worker-DWbfmFUk.js +51 -0
  105. package/app/_app/version.json +1 -0
  106. package/app/ai/index.html +89 -0
  107. package/app/blueprint/index.html +87 -0
  108. package/app/cookbook/index.html +87 -0
  109. package/app/index.html +103 -0
  110. package/app/m/ads/AdDeliveryTier/index.html +96 -0
  111. package/app/m/ads/AdEvent/index.html +96 -0
  112. package/app/m/ads/AdFormat/index.html +96 -0
  113. package/app/m/ads/AdGroup/index.html +96 -0
  114. package/app/m/ads/AdVariation/index.html +96 -0
  115. package/app/m/analytics/AnalyticsDataStream/index.html +96 -0
  116. package/app/m/analytics/AnalyticsEvent/index.html +96 -0
  117. package/app/m/analytics/AnalyticsProperty/index.html +96 -0
  118. package/app/m/analytics/AnalyticsReport/index.html +96 -0
  119. package/app/m/approvals/ApprovalEvent/index.html +96 -0
  120. package/app/m/approvals/ApprovalPolicy/index.html +96 -0
  121. package/app/m/approvals/ApprovalRequest/index.html +96 -0
  122. package/app/m/assets/Asset/index.html +96 -0
  123. package/app/m/assets/AssetAssociation/index.html +97 -0
  124. package/app/m/assets/AssetMetafield/index.html +96 -0
  125. package/app/m/assets/AssetStatus/index.html +96 -0
  126. package/app/m/assets/AssetType/index.html +96 -0
  127. package/app/m/assets/Folder/index.html +96 -0
  128. package/app/m/chat/AgentSession/index.html +96 -0
  129. package/app/m/chat/ChatMessage/index.html +97 -0
  130. package/app/m/chat/ChatParticipant/index.html +97 -0
  131. package/app/m/chat/ChatReaction/index.html +96 -0
  132. package/app/m/chat/ChatRoom/index.html +96 -0
  133. package/app/m/chat/ChatThread/index.html +97 -0
  134. package/app/m/chat/VoiceGatewayTurn/index.html +96 -0
  135. package/app/m/chat/VoiceSession/index.html +96 -0
  136. package/app/m/commerce/Agreement/index.html +96 -0
  137. package/app/m/commerce/Cart/index.html +96 -0
  138. package/app/m/commerce/Contract/index.html +96 -0
  139. package/app/m/commerce/ContractLineItem/index.html +97 -0
  140. package/app/m/commerce/Customer/index.html +96 -0
  141. package/app/m/commerce/Estimate/index.html +96 -0
  142. package/app/m/commerce/Fulfillment/index.html +96 -0
  143. package/app/m/commerce/FulfillmentLineItem/index.html +97 -0
  144. package/app/m/commerce/Invoice/index.html +96 -0
  145. package/app/m/commerce/InvoiceLineItem/index.html +97 -0
  146. package/app/m/commerce/Lease/index.html +96 -0
  147. package/app/m/commerce/LicenseSale/index.html +96 -0
  148. package/app/m/commerce/Order/index.html +96 -0
  149. package/app/m/commerce/Payment/index.html +96 -0
  150. package/app/m/commerce/PaymentAllocation/index.html +97 -0
  151. package/app/m/commerce/PaymentInstrument/index.html +96 -0
  152. package/app/m/commerce/PaymentIntent/index.html +96 -0
  153. package/app/m/commerce/Payout/index.html +96 -0
  154. package/app/m/commerce/ProductionOrder/index.html +96 -0
  155. package/app/m/commerce/PurchaseOrder/index.html +96 -0
  156. package/app/m/commerce/Vendor/index.html +96 -0
  157. package/app/m/commerce/WholesaleOrder/index.html +96 -0
  158. package/app/m/content/Content/index.html +96 -0
  159. package/app/m/content/ContentContribution/index.html +96 -0
  160. package/app/m/content/ContentContributionAttachment/index.html +96 -0
  161. package/app/m/content/ContentContributionRevision/index.html +96 -0
  162. package/app/m/content/ContentContributionType/index.html +96 -0
  163. package/app/m/content/ContentContributor/index.html +96 -0
  164. package/app/m/content/ContentCorrection/index.html +96 -0
  165. package/app/m/content/ContentFeedSource/index.html +96 -0
  166. package/app/m/content/ContentGovernanceAssignment/index.html +96 -0
  167. package/app/m/content/ContentGovernancePolicy/index.html +96 -0
  168. package/app/m/content/ContentGovernanceProfile/index.html +96 -0
  169. package/app/m/content/ContentReference/index.html +96 -0
  170. package/app/m/content/ContentReview/index.html +96 -0
  171. package/app/m/content/ContentVersion/index.html +96 -0
  172. package/app/m/content/Contents/index.html +96 -0
  173. package/app/m/events/Event/index.html +96 -0
  174. package/app/m/events/EventParticipant/index.html +97 -0
  175. package/app/m/events/EventSeries/index.html +96 -0
  176. package/app/m/events/EventType/index.html +96 -0
  177. package/app/m/facts/Fact/index.html +96 -0
  178. package/app/m/facts/FactContent/index.html +96 -0
  179. package/app/m/facts/FactEvidence/index.html +96 -0
  180. package/app/m/facts/FactSource/index.html +96 -0
  181. package/app/m/facts/FactSubject/index.html +96 -0
  182. package/app/m/facts/FactTag/index.html +96 -0
  183. package/app/m/fields/FieldPolicy/index.html +96 -0
  184. package/app/m/fields/FieldPolicySuggestion/index.html +96 -0
  185. package/app/m/fields/FieldUsageCounter/index.html +96 -0
  186. package/app/m/images/Image/index.html +96 -0
  187. package/app/m/inventory/InventoryLocation/index.html +96 -0
  188. package/app/m/inventory/StockLevel/index.html +96 -0
  189. package/app/m/inventory/StockMovement/index.html +96 -0
  190. package/app/m/ledgers/Account/index.html +96 -0
  191. package/app/m/ledgers/Journal/index.html +96 -0
  192. package/app/m/ledgers/JournalEntry/index.html +97 -0
  193. package/app/m/manufacturing/Assembly/index.html +96 -0
  194. package/app/m/manufacturing/BillOfMaterials/index.html +96 -0
  195. package/app/m/manufacturing/BomLine/index.html +96 -0
  196. package/app/m/manufacturing/Operation/index.html +96 -0
  197. package/app/m/manufacturing/ProductionRun/index.html +96 -0
  198. package/app/m/manufacturing/ProductionRunCompletion/index.html +96 -0
  199. package/app/m/manufacturing/RoutingStep/index.html +96 -0
  200. package/app/m/marketing/Campaign/index.html +96 -0
  201. package/app/m/marketing/CampaignChannel/index.html +96 -0
  202. package/app/m/marketing/CampaignMetricSnapshot/index.html +96 -0
  203. package/app/m/messages/Account/index.html +96 -0
  204. package/app/m/messages/Attachment/index.html +96 -0
  205. package/app/m/messages/Blacklist/index.html +96 -0
  206. package/app/m/messages/Email/failed-sends/index.html +96 -0
  207. package/app/m/messages/Email/index.html +96 -0
  208. package/app/m/messages/Email/mailbox/index.html +96 -0
  209. package/app/m/messages/EmailAccount/index.html +96 -0
  210. package/app/m/messages/EmailFolder/index.html +96 -0
  211. package/app/m/messages/Message/index.html +96 -0
  212. package/app/m/messages/MessagingEndpoint/index.html +96 -0
  213. package/app/m/messages/PersonaMessageRoute/index.html +96 -0
  214. package/app/m/messages/SlackAccount/index.html +96 -0
  215. package/app/m/messages/SlackMessage/index.html +96 -0
  216. package/app/m/messages/TelegramAccount/index.html +96 -0
  217. package/app/m/messages/Tweet/index.html +96 -0
  218. package/app/m/messages/TwitterAccount/index.html +96 -0
  219. package/app/m/messages/Whitelist/index.html +96 -0
  220. package/app/m/messages/ZulipAccount/index.html +96 -0
  221. package/app/m/places/Place/index.html +96 -0
  222. package/app/m/places/PlaceType/index.html +96 -0
  223. package/app/m/preferences/UiPreferenceRecord/index.html +96 -0
  224. package/app/m/products/Category/index.html +96 -0
  225. package/app/m/products/Material/index.html +96 -0
  226. package/app/m/products/Product/index.html +96 -0
  227. package/app/m/products/Product/ingredients/index.html +96 -0
  228. package/app/m/products/ProductVariant/index.html +97 -0
  229. package/app/m/products/Sku/index.html +97 -0
  230. package/app/m/profiles/ApiKey/index.html +96 -0
  231. package/app/m/profiles/Bot/index.html +96 -0
  232. package/app/m/profiles/MagicLinkToken/index.html +96 -0
  233. package/app/m/profiles/NostrIdentity/index.html +96 -0
  234. package/app/m/profiles/OidcIdentity/index.html +96 -0
  235. package/app/m/profiles/Organization/index.html +96 -0
  236. package/app/m/profiles/Person/index.html +96 -0
  237. package/app/m/profiles/Profile/index.html +96 -0
  238. package/app/m/profiles/ProfileMetadata/index.html +96 -0
  239. package/app/m/profiles/ProfileMetafield/index.html +96 -0
  240. package/app/m/profiles/ProfileRelationship/index.html +96 -0
  241. package/app/m/profiles/ProfileRelationshipTerm/index.html +96 -0
  242. package/app/m/profiles/ProfileRelationshipType/index.html +96 -0
  243. package/app/m/profiles/ProfileType/index.html +96 -0
  244. package/app/m/projects/Comment/index.html +97 -0
  245. package/app/m/projects/Issue/index.html +96 -0
  246. package/app/m/projects/Label/index.html +96 -0
  247. package/app/m/projects/Project/index.html +96 -0
  248. package/app/m/projects/ProjectIntegration/index.html +96 -0
  249. package/app/m/projects/PullRequest/index.html +96 -0
  250. package/app/m/projects/Repository/index.html +96 -0
  251. package/app/m/properties/Property/index.html +96 -0
  252. package/app/m/properties/Zone/index.html +96 -0
  253. package/app/m/reports/RuntimeReport/index.html +96 -0
  254. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +96 -0
  255. package/app/m/reports/SmrtReportLock/index.html +96 -0
  256. package/app/m/reports/SmrtReportRefreshTask/index.html +96 -0
  257. package/app/m/reports/SmrtReportRun/index.html +96 -0
  258. package/app/m/reports/SmrtReportSchedule/index.html +96 -0
  259. package/app/m/reports/SmrtReportWatermark/index.html +96 -0
  260. package/app/m/sales/AttributionException/index.html +96 -0
  261. package/app/m/sales/AttributionPolicy/index.html +96 -0
  262. package/app/m/sales/Commission/index.html +96 -0
  263. package/app/m/sales/CommissionAdjustment/index.html +96 -0
  264. package/app/m/sales/CommissionPayout/index.html +96 -0
  265. package/app/m/sales/CommissionPlan/index.html +96 -0
  266. package/app/m/sales/Earner/index.html +96 -0
  267. package/app/m/sales/EarnerSourceAttribution/index.html +96 -0
  268. package/app/m/sales/EarningEvent/index.html +96 -0
  269. package/app/m/sales/ExecutedAgreement/index.html +96 -0
  270. package/app/m/sales/Lead/index.html +96 -0
  271. package/app/m/sales/Opportunity/index.html +96 -0
  272. package/app/m/sales/OpportunityConversion/index.html +96 -0
  273. package/app/m/sales/PipelineDefinition/index.html +96 -0
  274. package/app/m/sales/PipelineStage/index.html +97 -0
  275. package/app/m/sales/Referral/index.html +96 -0
  276. package/app/m/sales/ReferralAgreement/index.html +96 -0
  277. package/app/m/sales/ReferralLink/index.html +96 -0
  278. package/app/m/sales/ReferralProgram/index.html +96 -0
  279. package/app/m/sales/ReferralTermSnapshot/index.html +96 -0
  280. package/app/m/sales/ReferralTouch/index.html +96 -0
  281. package/app/m/sales/Referrer/index.html +96 -0
  282. package/app/m/sales/SalesActivity/index.html +96 -0
  283. package/app/m/sales/SalesRepresentative/index.html +96 -0
  284. package/app/m/sites/Site/index.html +96 -0
  285. package/app/m/sites/SiteAgentBinding/index.html +96 -0
  286. package/app/m/social/OAuthState/index.html +96 -0
  287. package/app/m/social/SocialAccount/index.html +96 -0
  288. package/app/m/social/SocialPost/index.html +96 -0
  289. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +96 -0
  290. package/app/m/subscriptions/BillingAdjustment/index.html +96 -0
  291. package/app/m/subscriptions/ClientCharge/index.html +96 -0
  292. package/app/m/subscriptions/CreditGrant/index.html +96 -0
  293. package/app/m/subscriptions/PricingRule/index.html +96 -0
  294. package/app/m/subscriptions/RetailCharge/index.html +96 -0
  295. package/app/m/subscriptions/SpendingPolicy/index.html +96 -0
  296. package/app/m/subscriptions/SubscriptionPlan/index.html +96 -0
  297. package/app/m/subscriptions/TenantSubscription/index.html +96 -0
  298. package/app/m/subscriptions/TenantUsageMetric/index.html +96 -0
  299. package/app/m/support/ServiceTimeEntry/index.html +96 -0
  300. package/app/m/support/SupportAiRun/index.html +96 -0
  301. package/app/m/support/SupportAvailability/index.html +96 -0
  302. package/app/m/support/SupportCase/index.html +96 -0
  303. package/app/m/support/SupportCaseEvent/index.html +96 -0
  304. package/app/m/support/SupportChannelBinding/index.html +96 -0
  305. package/app/m/support/SupportCharge/index.html +96 -0
  306. package/app/m/support/SupportCompensation/index.html +96 -0
  307. package/app/m/support/SupportCompensationPlan/index.html +96 -0
  308. package/app/m/support/SupportEscalation/index.html +96 -0
  309. package/app/m/support/SupportInteraction/index.html +96 -0
  310. package/app/m/support/SupportPlan/index.html +96 -0
  311. package/app/m/support/SupportPolicy/index.html +96 -0
  312. package/app/m/support/SupportQualification/index.html +96 -0
  313. package/app/m/support/SupportServiceTarget/index.html +96 -0
  314. package/app/m/support/SupportSpecialist/index.html +96 -0
  315. package/app/m/support/SupportWorkLink/index.html +96 -0
  316. package/app/m/tags/Tag/index.html +96 -0
  317. package/app/m/tags/TagAlias/index.html +96 -0
  318. package/app/m/timesheets/AttendanceBreak/index.html +96 -0
  319. package/app/m/timesheets/AttendancePunch/index.html +96 -0
  320. package/app/m/timesheets/ServiceChargeSnapshot/index.html +96 -0
  321. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +96 -0
  322. package/app/m/timesheets/ServiceTimeEntry/index.html +96 -0
  323. package/app/m/users/AccessRequest/index.html +96 -0
  324. package/app/m/users/Group/index.html +96 -0
  325. package/app/m/users/GroupMember/index.html +96 -0
  326. package/app/m/users/GroupRole/index.html +96 -0
  327. package/app/m/users/Membership/index.html +97 -0
  328. package/app/m/users/MembershipOverride/index.html +96 -0
  329. package/app/m/users/Permission/index.html +96 -0
  330. package/app/m/users/ResourceGrant/index.html +96 -0
  331. package/app/m/users/Role/index.html +96 -0
  332. package/app/m/users/RolePermission/index.html +96 -0
  333. package/app/m/users/Session/index.html +96 -0
  334. package/app/m/users/Tenant/index.html +96 -0
  335. package/app/m/users/TenantIntegration/index.html +96 -0
  336. package/app/m/users/TenantPermissionOverride/index.html +96 -0
  337. package/app/m/users/User/index.html +96 -0
  338. package/app/m/users/UsersCliAuthRequest/index.html +96 -0
  339. package/app/m/users/UsersMagicLinkToken/index.html +96 -0
  340. package/app/m/video/Character/index.html +96 -0
  341. package/app/m/video/CharacterAsset/index.html +96 -0
  342. package/app/m/video/CompositeJob/index.html +96 -0
  343. package/app/m/video/Performer/index.html +96 -0
  344. package/app/m/video/PerformerAsset/index.html +96 -0
  345. package/app/m/video/Scene/index.html +96 -0
  346. package/app/m/video/SceneAsset/index.html +96 -0
  347. package/app/m/video/VideoComposition/index.html +96 -0
  348. package/app/m/video/VideoCompositionAsset/index.html +96 -0
  349. package/app/m/video/VideoSequence/index.html +96 -0
  350. package/app/m/video/VideoSequenceAsset/index.html +96 -0
  351. package/app/m/video/VideoShot/index.html +96 -0
  352. package/app/m/video/VideoShotAsset/index.html +96 -0
  353. package/app/m/video/VideoShotCharacter/index.html +96 -0
  354. package/app/m/video/VideoWorkflow/index.html +96 -0
  355. package/app/m/voice/VoiceOutput/index.html +96 -0
  356. package/app/m/voice/VoiceProfile/index.html +96 -0
  357. package/app/m/voice/VoiceSample/index.html +96 -0
  358. package/app/packages/ads/index.html +92 -0
  359. package/app/packages/analytics/index.html +92 -0
  360. package/app/packages/approvals/index.html +92 -0
  361. package/app/packages/assets/index.html +92 -0
  362. package/app/packages/chat/index.html +92 -0
  363. package/app/packages/comments/index.html +92 -0
  364. package/app/packages/commerce/index.html +92 -0
  365. package/app/packages/content/index.html +92 -0
  366. package/app/packages/events/index.html +92 -0
  367. package/app/packages/expenses/index.html +92 -0
  368. package/app/packages/facts/index.html +92 -0
  369. package/app/packages/fields/index.html +92 -0
  370. package/app/packages/human-resources/index.html +92 -0
  371. package/app/packages/images/index.html +92 -0
  372. package/app/packages/index.html +90 -0
  373. package/app/packages/inventory/index.html +92 -0
  374. package/app/packages/ledgers/index.html +92 -0
  375. package/app/packages/manufacturing/index.html +92 -0
  376. package/app/packages/marketing/index.html +92 -0
  377. package/app/packages/messages/index.html +92 -0
  378. package/app/packages/places/index.html +92 -0
  379. package/app/packages/preferences/index.html +92 -0
  380. package/app/packages/products/index.html +92 -0
  381. package/app/packages/profiles/index.html +92 -0
  382. package/app/packages/projects/index.html +92 -0
  383. package/app/packages/properties/index.html +92 -0
  384. package/app/packages/reports/index.html +92 -0
  385. package/app/packages/sales/index.html +92 -0
  386. package/app/packages/sites/index.html +92 -0
  387. package/app/packages/social/index.html +92 -0
  388. package/app/packages/subscriptions/index.html +92 -0
  389. package/app/packages/support/index.html +92 -0
  390. package/app/packages/tags/index.html +92 -0
  391. package/app/packages/timesheets/index.html +92 -0
  392. package/app/packages/users/index.html +92 -0
  393. package/app/packages/video/index.html +92 -0
  394. package/app/packages/voice/index.html +92 -0
  395. package/app/recipes/account-access/help/index.html +93 -0
  396. package/app/recipes/account-access/index.html +95 -0
  397. package/app/recipes/activity/help/index.html +93 -0
  398. package/app/recipes/activity/index.html +94 -0
  399. package/app/recipes/agreements/help/index.html +93 -0
  400. package/app/recipes/agreements/index.html +96 -0
  401. package/app/recipes/analytics.reports/help/index.html +93 -0
  402. package/app/recipes/analytics.reports/index.html +94 -0
  403. package/app/recipes/assets/help/index.html +93 -0
  404. package/app/recipes/assets/index.html +95 -0
  405. package/app/recipes/billing/help/index.html +93 -0
  406. package/app/recipes/billing/index.html +95 -0
  407. package/app/recipes/chat.assistant/help/index.html +93 -0
  408. package/app/recipes/chat.assistant/index.html +94 -0
  409. package/app/recipes/comments/help/index.html +93 -0
  410. package/app/recipes/comments/index.html +94 -0
  411. package/app/recipes/commerce.customers/help/index.html +93 -0
  412. package/app/recipes/commerce.customers/index.html +94 -0
  413. package/app/recipes/commerce.estimates/help/index.html +93 -0
  414. package/app/recipes/commerce.estimates/index.html +94 -0
  415. package/app/recipes/commerce.purchases/help/index.html +93 -0
  416. package/app/recipes/commerce.purchases/index.html +94 -0
  417. package/app/recipes/commerce.sales/help/index.html +93 -0
  418. package/app/recipes/commerce.sales/index.html +94 -0
  419. package/app/recipes/commerce.vendors/help/index.html +93 -0
  420. package/app/recipes/commerce.vendors/index.html +94 -0
  421. package/app/recipes/commerce.wholesale/help/index.html +93 -0
  422. package/app/recipes/commerce.wholesale/index.html +94 -0
  423. package/app/recipes/events.calendar/help/index.html +93 -0
  424. package/app/recipes/events.calendar/index.html +94 -0
  425. package/app/recipes/fields.form-customization/help/index.html +93 -0
  426. package/app/recipes/fields.form-customization/index.html +94 -0
  427. package/app/recipes/inventory.stock/help/index.html +93 -0
  428. package/app/recipes/inventory.stock/index.html +94 -0
  429. package/app/recipes/ledgers.bookkeeping/help/index.html +93 -0
  430. package/app/recipes/ledgers.bookkeeping/index.html +94 -0
  431. package/app/recipes/messages/help/index.html +93 -0
  432. package/app/recipes/messages/index.html +95 -0
  433. package/app/recipes/products/help/index.html +93 -0
  434. package/app/recipes/products/index.html +96 -0
  435. package/app/recipes/projects.tracker/help/index.html +93 -0
  436. package/app/recipes/projects.tracker/index.html +94 -0
  437. package/app/recipes/reports.materialized/help/index.html +93 -0
  438. package/app/recipes/reports.materialized/index.html +94 -0
  439. package/app/recipes/sales.pipeline/help/index.html +93 -0
  440. package/app/recipes/sales.pipeline/index.html +94 -0
  441. package/app/recipes/tags.taxonomy/help/index.html +93 -0
  442. package/app/recipes/tags.taxonomy/index.html +94 -0
  443. package/app/recipes/team-collaboration/help/index.html +93 -0
  444. package/app/recipes/team-collaboration/index.html +94 -0
  445. package/app/s/custom-billing/index.html +89 -0
  446. package/app/s/custom-buying/index.html +89 -0
  447. package/app/s/custom-classes/index.html +89 -0
  448. package/app/s/custom-jobs/index.html +89 -0
  449. package/app/s/custom-kitchen/index.html +89 -0
  450. package/app/s/custom-material/index.html +89 -0
  451. package/app/s/custom-members/index.html +89 -0
  452. package/app/s/custom-parts/index.html +89 -0
  453. package/app/s/custom-schedule/index.html +89 -0
  454. package/app/s/custom-shop/index.html +89 -0
  455. package/app/s/custom-wholesale/index.html +89 -0
  456. package/app/s/section-access-control/index.html +89 -0
  457. package/app/s/section-account-security/index.html +89 -0
  458. package/app/s/section-accounting/index.html +89 -0
  459. package/app/s/section-activity/index.html +89 -0
  460. package/app/s/section-agreements/index.html +89 -0
  461. package/app/s/section-analytics/index.html +89 -0
  462. package/app/s/section-assets/index.html +89 -0
  463. package/app/s/section-billing/index.html +89 -0
  464. package/app/s/section-calendar/index.html +89 -0
  465. package/app/s/section-catalog/index.html +89 -0
  466. package/app/s/section-chat.assistant/index.html +89 -0
  467. package/app/s/section-comments/index.html +89 -0
  468. package/app/s/section-fields.form-customization/index.html +89 -0
  469. package/app/s/section-messages/index.html +89 -0
  470. package/app/s/section-more/index.html +89 -0
  471. package/app/s/section-operations/index.html +89 -0
  472. package/app/s/section-projects/index.html +89 -0
  473. package/app/s/section-purchasing/index.html +89 -0
  474. package/app/s/section-reports.materialized/index.html +89 -0
  475. package/app/s/section-sales/index.html +89 -0
  476. package/app/s/section-taxonomy/index.html +89 -0
  477. package/app/s/section-team/index.html +89 -0
  478. package/dist/ai/echo-gate.d.ts +13 -0
  479. package/dist/ai/echo-gate.js +21 -0
  480. package/dist/ai/icons.d.ts +9 -0
  481. package/dist/ai/icons.js +9 -0
  482. package/dist/ai/instance.d.ts +3 -0
  483. package/dist/ai/instance.js +25 -0
  484. package/dist/ai/state.svelte.d.ts +130 -0
  485. package/dist/ai/state.svelte.js +316 -0
  486. package/dist/ai/status.d.ts +67 -0
  487. package/dist/ai/status.js +125 -0
  488. package/dist/assets/smrt-mark.svg +38 -0
  489. package/dist/assistant/change.d.ts +101 -0
  490. package/dist/assistant/change.js +209 -0
  491. package/dist/assistant/engine.d.ts +20 -0
  492. package/dist/assistant/engine.js +43 -0
  493. package/dist/assistant/llm.worker.d.ts +1 -0
  494. package/dist/assistant/llm.worker.js +7 -0
  495. package/dist/assistant/match.d.ts +59 -0
  496. package/dist/assistant/match.js +271 -0
  497. package/dist/assistant/models.d.ts +38 -0
  498. package/dist/assistant/models.js +57 -0
  499. package/dist/assistant/offers.svelte.d.ts +36 -0
  500. package/dist/assistant/offers.svelte.js +59 -0
  501. package/dist/assistant/prefs.d.ts +14 -0
  502. package/dist/assistant/prefs.js +32 -0
  503. package/dist/assistant/prompt.d.ts +23 -0
  504. package/dist/assistant/prompt.js +163 -0
  505. package/dist/assistant/session.svelte.d.ts +74 -0
  506. package/dist/assistant/session.svelte.js +181 -0
  507. package/dist/assistant/theme-undo.svelte.d.ts +38 -0
  508. package/dist/assistant/theme-undo.svelte.js +50 -0
  509. package/dist/assistant/transport.d.ts +73 -0
  510. package/dist/assistant/transport.js +231 -0
  511. package/dist/assistant/voice-host.d.ts +10 -0
  512. package/dist/assistant/voice-host.js +17 -0
  513. package/dist/assistant/voice.svelte.d.ts +107 -0
  514. package/dist/assistant/voice.svelte.js +261 -0
  515. package/dist/catalog/catalog.json +89663 -0
  516. package/dist/catalog/generate/build.d.ts +33 -0
  517. package/dist/catalog/generate/build.js +131 -0
  518. package/dist/catalog/generate/exclusions.d.ts +18 -0
  519. package/dist/catalog/generate/exclusions.js +33 -0
  520. package/dist/catalog/generate/extract.d.ts +90 -0
  521. package/dist/catalog/generate/extract.js +326 -0
  522. package/dist/catalog/generate/local.d.ts +8 -0
  523. package/dist/catalog/generate/local.js +45 -0
  524. package/dist/catalog/generate/recipe-demo.d.ts +11 -0
  525. package/dist/catalog/generate/recipe-demo.js +29 -0
  526. package/dist/catalog/generate/recipe-metadata.d.ts +12 -0
  527. package/dist/catalog/generate/recipe-metadata.js +138 -0
  528. package/dist/catalog/generate/registry.d.ts +14 -0
  529. package/dist/catalog/generate/registry.js +83 -0
  530. package/dist/catalog/index.d.ts +21 -0
  531. package/dist/catalog/index.js +53 -0
  532. package/dist/catalog/types.d.ts +141 -0
  533. package/dist/catalog/types.js +8 -0
  534. package/dist/components/AiSetup.svelte +528 -0
  535. package/dist/components/AiSetup.svelte.d.ts +8 -0
  536. package/dist/components/AiStatusIcons.svelte +86 -0
  537. package/dist/components/AiStatusIcons.svelte.d.ts +18 -0
  538. package/dist/components/AppSettings.svelte +100 -0
  539. package/dist/components/AppSettings.svelte.d.ts +10 -0
  540. package/dist/components/BrowserAssistant.svelte +318 -0
  541. package/dist/components/BrowserAssistant.svelte.d.ts +8 -0
  542. package/dist/components/ChildRecords.svelte +331 -0
  543. package/dist/components/ChildRecords.svelte.d.ts +15 -0
  544. package/dist/components/ConnectTools.svelte +145 -0
  545. package/dist/components/ConnectTools.svelte.d.ts +8 -0
  546. package/dist/components/CookbooksPanel.svelte +308 -0
  547. package/dist/components/CookbooksPanel.svelte.d.ts +3 -0
  548. package/dist/components/ExportPanel.svelte +217 -0
  549. package/dist/components/ExportPanel.svelte.d.ts +3 -0
  550. package/dist/components/FeatureCard.svelte +197 -0
  551. package/dist/components/FeatureCard.svelte.d.ts +13 -0
  552. package/dist/components/FeaturesPanel.svelte +155 -0
  553. package/dist/components/FeaturesPanel.svelte.d.ts +3 -0
  554. package/dist/components/FieldInput.svelte +307 -0
  555. package/dist/components/FieldInput.svelte.d.ts +24 -0
  556. package/dist/components/FieldMapForm.svelte +173 -0
  557. package/dist/components/FieldMapForm.svelte.d.ts +18 -0
  558. package/dist/components/FormWorkspace.svelte +274 -0
  559. package/dist/components/FormWorkspace.svelte.d.ts +19 -0
  560. package/dist/components/HelpView.svelte +129 -0
  561. package/dist/components/HelpView.svelte.d.ts +12 -0
  562. package/dist/components/ModelOptions.svelte +239 -0
  563. package/dist/components/ModelOptions.svelte.d.ts +12 -0
  564. package/dist/components/ModelPage.svelte +295 -0
  565. package/dist/components/ModelPage.svelte.d.ts +9 -0
  566. package/dist/components/ModelWorkspace.svelte +488 -0
  567. package/dist/components/ModelWorkspace.svelte.d.ts +32 -0
  568. package/dist/components/PlannerEditBridge.svelte +36 -0
  569. package/dist/components/PlannerEditBridge.svelte.d.ts +3 -0
  570. package/dist/components/PlannerPalette.svelte +38 -0
  571. package/dist/components/PlannerPalette.svelte.d.ts +18 -0
  572. package/dist/components/RecipeCards.svelte +145 -0
  573. package/dist/components/RecipeCards.svelte.d.ts +3 -0
  574. package/dist/components/RecipeHelp.svelte +54 -0
  575. package/dist/components/RecipeHelp.svelte.d.ts +9 -0
  576. package/dist/components/RecipeOptions.svelte +160 -0
  577. package/dist/components/RecipeOptions.svelte.d.ts +9 -0
  578. package/dist/components/RecordFeatures.svelte +240 -0
  579. package/dist/components/RecordFeatures.svelte.d.ts +3 -0
  580. package/dist/components/RelationField.svelte +175 -0
  581. package/dist/components/RelationField.svelte.d.ts +16 -0
  582. package/dist/components/SectionActions.svelte +91 -0
  583. package/dist/components/SectionActions.svelte.d.ts +12 -0
  584. package/dist/components/SectionIcons.svelte +98 -0
  585. package/dist/components/SectionIcons.svelte.d.ts +15 -0
  586. package/dist/components/SectionOverview.svelte +65 -0
  587. package/dist/components/SectionOverview.svelte.d.ts +14 -0
  588. package/dist/components/SectionPage.svelte +230 -0
  589. package/dist/components/SectionPage.svelte.d.ts +7 -0
  590. package/dist/components/SettingsPanel.svelte +60 -0
  591. package/dist/components/SettingsPanel.svelte.d.ts +7 -0
  592. package/dist/components/ThemeBridge.svelte +56 -0
  593. package/dist/components/ThemeBridge.svelte.d.ts +3 -0
  594. package/dist/components/ThemeSection.svelte +167 -0
  595. package/dist/components/ThemeSection.svelte.d.ts +11 -0
  596. package/dist/components/VariantGridForm.svelte +309 -0
  597. package/dist/components/VariantGridForm.svelte.d.ts +12 -0
  598. package/dist/components/VoiceTyping.svelte +108 -0
  599. package/dist/components/VoiceTyping.svelte.d.ts +7 -0
  600. package/dist/cookbook/assemble.d.ts +16 -0
  601. package/dist/cookbook/assemble.js +29 -0
  602. package/dist/cookbook/file.d.ts +7 -0
  603. package/dist/cookbook/file.js +25 -0
  604. package/dist/cookbook/legacy.d.ts +9 -0
  605. package/dist/cookbook/legacy.js +87 -0
  606. package/dist/cookbook/migrate.d.ts +22 -0
  607. package/dist/cookbook/migrate.js +106 -0
  608. package/dist/cookbook/parse.d.ts +16 -0
  609. package/dist/cookbook/parse.js +246 -0
  610. package/dist/cookbook/storage.d.ts +45 -0
  611. package/dist/cookbook/storage.js +98 -0
  612. package/dist/cookbook/store.svelte.d.ts +94 -0
  613. package/dist/cookbook/store.svelte.js +231 -0
  614. package/dist/cookbook/types.d.ts +76 -0
  615. package/dist/cookbook/types.js +11 -0
  616. package/dist/cookbook/validate.d.ts +14 -0
  617. package/dist/cookbook/validate.js +29 -0
  618. package/dist/core/app.d.ts +37 -0
  619. package/dist/core/app.js +119 -0
  620. package/dist/core/catalog.d.ts +19 -0
  621. package/dist/core/catalog.js +9 -0
  622. package/dist/core/headless.d.ts +52 -0
  623. package/dist/core/headless.js +39 -0
  624. package/dist/core/index.d.ts +28 -0
  625. package/dist/core/index.js +28 -0
  626. package/dist/core/prompt.d.ts +38 -0
  627. package/dist/core/prompt.js +95 -0
  628. package/dist/core/reply.d.ts +60 -0
  629. package/dist/core/reply.js +89 -0
  630. package/dist/core/request.d.ts +15 -0
  631. package/dist/core/request.js +55 -0
  632. package/dist/data/children.d.ts +20 -0
  633. package/dist/data/children.js +80 -0
  634. package/dist/data/columns.d.ts +56 -0
  635. package/dist/data/columns.js +150 -0
  636. package/dist/data/context.d.ts +8 -0
  637. package/dist/data/context.js +19 -0
  638. package/dist/data/derived.d.ts +79 -0
  639. package/dist/data/derived.js +139 -0
  640. package/dist/data/display.d.ts +23 -0
  641. package/dist/data/display.js +84 -0
  642. package/dist/data/fakes.d.ts +52 -0
  643. package/dist/data/fakes.js +443 -0
  644. package/dist/data/format.d.ts +48 -0
  645. package/dist/data/format.js +121 -0
  646. package/dist/data/labels.d.ts +45 -0
  647. package/dist/data/labels.js +179 -0
  648. package/dist/data/packs.d.ts +95 -0
  649. package/dist/data/packs.js +830 -0
  650. package/dist/data/payments.d.ts +17 -0
  651. package/dist/data/payments.js +60 -0
  652. package/dist/data/planner-source.d.ts +7 -0
  653. package/dist/data/planner-source.js +32 -0
  654. package/dist/data/source.d.ts +119 -0
  655. package/dist/data/source.js +432 -0
  656. package/dist/features/catalogue.d.ts +96 -0
  657. package/dist/features/catalogue.js +225 -0
  658. package/dist/features/demo.d.ts +36 -0
  659. package/dist/features/demo.js +66 -0
  660. package/dist/features/palette.d.ts +39 -0
  661. package/dist/features/palette.js +53 -0
  662. package/dist/fields/address.d.ts +23 -0
  663. package/dist/fields/address.js +39 -0
  664. package/dist/fields/invalid.d.ts +2 -0
  665. package/dist/fields/invalid.js +8 -0
  666. package/dist/fields/modal.d.ts +7 -0
  667. package/dist/fields/modal.js +14 -0
  668. package/dist/fields/percent.d.ts +8 -0
  669. package/dist/fields/percent.js +16 -0
  670. package/dist/fields/renderer.d.ts +17 -0
  671. package/dist/fields/renderer.js +43 -0
  672. package/dist/forms/active.d.ts +16 -0
  673. package/dist/forms/active.js +24 -0
  674. package/dist/forms/fieldMap.d.ts +44 -0
  675. package/dist/forms/fieldMap.js +134 -0
  676. package/dist/forms/shared.d.ts +41 -0
  677. package/dist/forms/shared.js +138 -0
  678. package/dist/forms/stock.d.ts +28 -0
  679. package/dist/forms/stock.js +104 -0
  680. package/dist/forms/variantGrid.d.ts +83 -0
  681. package/dist/forms/variantGrid.js +283 -0
  682. package/dist/index.d.ts +17 -0
  683. package/dist/index.js +16 -0
  684. package/dist/inference/byo.svelte.d.ts +90 -0
  685. package/dist/inference/byo.svelte.js +295 -0
  686. package/dist/inference/config.d.ts +77 -0
  687. package/dist/inference/config.js +205 -0
  688. package/dist/inference/host.d.ts +40 -0
  689. package/dist/inference/host.js +57 -0
  690. package/dist/inference/openai.d.ts +59 -0
  691. package/dist/inference/openai.js +207 -0
  692. package/dist/inference/presets.d.ts +5 -0
  693. package/dist/inference/presets.js +46 -0
  694. package/dist/kitchen/client.d.ts +39 -0
  695. package/dist/kitchen/client.js +115 -0
  696. package/dist/kitchen/fragment.d.ts +30 -0
  697. package/dist/kitchen/fragment.js +49 -0
  698. package/dist/kitchen/state.svelte.d.ts +26 -0
  699. package/dist/kitchen/state.svelte.js +45 -0
  700. package/dist/library/apply.d.ts +17 -0
  701. package/dist/library/apply.js +32 -0
  702. package/dist/library/document.d.ts +12 -0
  703. package/dist/library/document.js +27 -0
  704. package/dist/library/icons.d.ts +6 -0
  705. package/dist/library/icons.js +26 -0
  706. package/dist/library/index.d.ts +8 -0
  707. package/dist/library/index.js +12 -0
  708. package/dist/library/library.json +788 -0
  709. package/dist/library/menu.d.ts +18 -0
  710. package/dist/library/menu.js +72 -0
  711. package/dist/library/state.svelte.d.ts +10 -0
  712. package/dist/library/state.svelte.js +28 -0
  713. package/dist/library/types.d.ts +57 -0
  714. package/dist/library/types.js +1 -0
  715. package/dist/overviews/definitions.d.ts +24 -0
  716. package/dist/overviews/definitions.js +97 -0
  717. package/dist/overviews/page.d.ts +21 -0
  718. package/dist/overviews/page.js +36 -0
  719. package/dist/overviews/registry.d.ts +44 -0
  720. package/dist/overviews/registry.js +191 -0
  721. package/dist/overviews/validate.d.ts +32 -0
  722. package/dist/overviews/validate.js +91 -0
  723. package/dist/planner/Planner.svelte +204 -0
  724. package/dist/planner/Planner.svelte.d.ts +4 -0
  725. package/dist/planner/app.svelte.d.ts +6 -0
  726. package/dist/planner/app.svelte.js +23 -0
  727. package/dist/planner/assistant.d.ts +46 -0
  728. package/dist/planner/assistant.js +122 -0
  729. package/dist/planner/commands/adapter.d.ts +121 -0
  730. package/dist/planner/commands/adapter.js +597 -0
  731. package/dist/planner/commands/catalog.d.ts +19 -0
  732. package/dist/planner/commands/catalog.js +54 -0
  733. package/dist/planner/commands/controller.svelte.d.ts +13 -0
  734. package/dist/planner/commands/controller.svelte.js +77 -0
  735. package/dist/planner/commands/index.d.ts +15 -0
  736. package/dist/planner/commands/index.js +15 -0
  737. package/dist/planner/commands/schemas.d.ts +25 -0
  738. package/dist/planner/commands/schemas.js +67 -0
  739. package/dist/planner/commands/slices.d.ts +18 -0
  740. package/dist/planner/commands/slices.js +49 -0
  741. package/dist/planner/commands/types.d.ts +80 -0
  742. package/dist/planner/commands/types.js +18 -0
  743. package/dist/planner/create.d.ts +4 -0
  744. package/dist/planner/create.js +22 -0
  745. package/dist/planner/instance.d.ts +15 -0
  746. package/dist/planner/instance.js +22 -0
  747. package/dist/planner/query.d.ts +16 -0
  748. package/dist/planner/query.js +28 -0
  749. package/dist/planner/selection.d.ts +15 -0
  750. package/dist/planner/selection.js +38 -0
  751. package/dist/planner/selection.svelte.d.ts +29 -0
  752. package/dist/planner/selection.svelte.js +54 -0
  753. package/dist/planner/tab.svelte.d.ts +11 -0
  754. package/dist/planner/tab.svelte.js +22 -0
  755. package/dist/planner/types.d.ts +41 -0
  756. package/dist/planner/types.js +1 -0
  757. package/dist/recipes/cards.d.ts +55 -0
  758. package/dist/recipes/cards.js +80 -0
  759. package/dist/recipes/features.d.ts +53 -0
  760. package/dist/recipes/features.js +97 -0
  761. package/dist/recipes/help/descriptions.json +373 -0
  762. package/dist/recipes/help.d.ts +121 -0
  763. package/dist/recipes/help.js +262 -0
  764. package/dist/recipes/index.d.ts +65 -0
  765. package/dist/recipes/index.js +95 -0
  766. package/dist/recipes/merge.d.ts +26 -0
  767. package/dist/recipes/merge.js +21 -0
  768. package/dist/recipes/overlay.json +409 -0
  769. package/dist/recipes/plan-data.d.ts +41 -0
  770. package/dist/recipes/plan-data.js +97 -0
  771. package/dist/recipes/plumbing.d.ts +70 -0
  772. package/dist/recipes/plumbing.js +185 -0
  773. package/dist/recipes/policy.d.ts +118 -0
  774. package/dist/recipes/policy.js +268 -0
  775. package/dist/recipes/resolve.d.ts +19 -0
  776. package/dist/recipes/resolve.js +65 -0
  777. package/dist/recipes/scope.d.ts +25 -0
  778. package/dist/recipes/scope.js +31 -0
  779. package/dist/recipes/sections.d.ts +49 -0
  780. package/dist/recipes/sections.js +84 -0
  781. package/dist/recipes/state.svelte.d.ts +67 -0
  782. package/dist/recipes/state.svelte.js +112 -0
  783. package/dist/recipes/types.d.ts +322 -0
  784. package/dist/recipes/types.js +8 -0
  785. package/dist/sections/entries.d.ts +30 -0
  786. package/dist/sections/entries.js +57 -0
  787. package/dist/sections/info.d.ts +16 -0
  788. package/dist/sections/info.js +39 -0
  789. package/dist/sections/path.d.ts +12 -0
  790. package/dist/sections/path.js +18 -0
  791. package/dist/settings/app-settings.d.ts +44 -0
  792. package/dist/settings/app-settings.js +138 -0
  793. package/dist/settings/currencies.d.ts +2 -0
  794. package/dist/settings/currencies.js +8 -0
  795. package/dist/theme/runtime.d.ts +14 -0
  796. package/dist/theme/runtime.js +27 -0
  797. package/dist/theme/theme.d.ts +47 -0
  798. package/dist/theme/theme.js +122 -0
  799. package/dist/upstream/CustomerSelect.svelte +60 -0
  800. package/dist/upstream/CustomerSelect.svelte.d.ts +17 -0
  801. package/dist/upstream/VendorSelect.svelte +60 -0
  802. package/dist/upstream/VendorSelect.svelte.d.ts +17 -0
  803. package/dist/upstream/overlay.d.ts +10 -0
  804. package/dist/upstream/overlay.js +49 -0
  805. package/dist/upstream/partySelect.d.ts +8 -0
  806. package/dist/upstream/partySelect.js +21 -0
  807. package/dist/upstream/partyTypes.d.ts +64 -0
  808. package/dist/upstream/partyTypes.js +8 -0
  809. package/dist/upstream/relations.d.ts +2 -0
  810. package/dist/upstream/relations.js +24 -0
  811. package/dist/upstream/selects.d.ts +26 -0
  812. package/dist/upstream/selects.js +20 -0
  813. package/dist/upstream/widgets.d.ts +20 -0
  814. package/dist/upstream/widgets.js +30 -0
  815. package/package.json +81 -3
@@ -0,0 +1,18 @@
1
+ import type { ShellNavGroup } from '@happyvertical/smrt-svelte/workspace';
2
+ import type { Cookbook } from '../cookbook/types.ts';
3
+ import type { CookbookLayout, MenuSection } from './types.ts';
4
+ /**
5
+ * The navigation a cookbook produces before its layout: one group per nav
6
+ * section, items in recipe order, with the same stable ids the app shell uses
7
+ * (`navItemId`), so a layout's ids line up with what the app generates.
8
+ */
9
+ export declare function cookbookNavGroups(cookbook: Pick<Cookbook, 'recipes' | 'features'>): ShellNavGroup[];
10
+ /**
11
+ * The menu a cookbook gives its app, in the visitor's own words: sections and
12
+ * entries after the layout is applied (moves, hides, renames), with each
13
+ * entry's `layout.items` label. Pure, so the Cookbooks preview shows exactly
14
+ * what applying the cookbook will build.
15
+ */
16
+ export declare function previewMenu(cookbook: Pick<Cookbook, 'recipes' | 'features'> & {
17
+ layout?: CookbookLayout;
18
+ }): MenuSection[];
@@ -0,0 +1,72 @@
1
+ import { applyShellLayout } from '@happyvertical/smrt-svelte/workspace/layout';
2
+ import { FEATURE_SECTION, featureNavItems } from "../recipes/features.js";
3
+ import { buildNavSections, recipeNav, recipesById } from "../recipes/index.js";
4
+ import { navItemId } from "../recipes/sections.js";
5
+ /**
6
+ * The navigation a cookbook produces before its layout: one group per nav
7
+ * section, items in recipe order, with the same stable ids the app shell uses
8
+ * (`navItemId`), so a layout's ids line up with what the app generates.
9
+ */
10
+ export function cookbookNavGroups(cookbook) {
11
+ const added = cookbook.recipes.flatMap((id) => {
12
+ const recipe = recipesById.get(id);
13
+ return recipe ? [recipe] : [];
14
+ });
15
+ // A section none of whose recipes has a menu entry (an assistant, a settings
16
+ // panel) is left out rather than shown empty.
17
+ const groups = buildNavSections(added)
18
+ .map((section) => {
19
+ const seen = new Set();
20
+ const items = [];
21
+ for (const recipe of section.recipes) {
22
+ for (const entry of recipeNav(recipe)) {
23
+ const id = navItemId(entry.packageId, entry.model.name, entry.key);
24
+ if (seen.has(id))
25
+ continue;
26
+ seen.add(id);
27
+ items.push({
28
+ id,
29
+ href: '#',
30
+ label: entry.label,
31
+ icon: entry.icon,
32
+ description: entry.description,
33
+ });
34
+ }
35
+ }
36
+ return { id: `section:${section.id}`, heading: section.label, items };
37
+ })
38
+ .filter((group) => group.items.length > 0);
39
+ const features = featureNavItems(cookbook.features).map((item) => ({
40
+ id: item.id,
41
+ href: '#',
42
+ label: item.label,
43
+ icon: item.icon,
44
+ description: item.description,
45
+ }));
46
+ if (features.length) {
47
+ groups.push({
48
+ id: `section:${FEATURE_SECTION.id}`,
49
+ heading: FEATURE_SECTION.label,
50
+ items: features,
51
+ });
52
+ }
53
+ return groups;
54
+ }
55
+ /**
56
+ * The menu a cookbook gives its app, in the visitor's own words: sections and
57
+ * entries after the layout is applied (moves, hides, renames), with each
58
+ * entry's `layout.items` label. Pure, so the Cookbooks preview shows exactly
59
+ * what applying the cookbook will build.
60
+ */
61
+ export function previewMenu(cookbook) {
62
+ const layout = cookbook.layout;
63
+ const applied = applyShellLayout([], cookbookNavGroups(cookbook), undefined, layout);
64
+ return applied.groups.map((group) => ({
65
+ id: group.id ?? String(group.heading),
66
+ label: group.heading ?? '',
67
+ entries: group.items.map((item) => ({
68
+ id: item.id ?? item.href,
69
+ label: layout?.items?.[item.id ?? item.href]?.label?.trim() || item.label,
70
+ })),
71
+ }));
72
+ }
@@ -0,0 +1,10 @@
1
+ /** Which cookbook the visitor last applied; a UI note, not part of the cookbook. */
2
+ export declare const COOKBOOK_KEY = "smrt-planner:cookbook";
3
+ declare class CookbookState {
4
+ active: string | null;
5
+ /** Read the remembered cookbook (browser only; never throws). */
6
+ load(storage?: Storage | null): void;
7
+ select(id: string, storage?: Storage | null): void;
8
+ }
9
+ export declare const libraryState: CookbookState;
10
+ export {};
@@ -0,0 +1,28 @@
1
+ import { browserStorage } from "../cookbook/storage.js";
2
+ import { setSamplePack } from "../data/packs.js";
3
+ /** Which cookbook the visitor last applied; a UI note, not part of the cookbook. */
4
+ export const COOKBOOK_KEY = 'smrt-planner:cookbook';
5
+ class CookbookState {
6
+ active = $state(null);
7
+ /** Read the remembered cookbook (browser only; never throws). */
8
+ load(storage = browserStorage()) {
9
+ try {
10
+ this.active = storage?.getItem(COOKBOOK_KEY) ?? null;
11
+ }
12
+ catch {
13
+ this.active = null;
14
+ }
15
+ // The sample data follows the cookbook the visitor last applied.
16
+ setSamplePack(this.active);
17
+ }
18
+ select(id, storage = browserStorage()) {
19
+ this.active = id;
20
+ try {
21
+ storage?.setItem(COOKBOOK_KEY, id);
22
+ }
23
+ catch {
24
+ // Remembered in memory only.
25
+ }
26
+ }
27
+ }
28
+ export const libraryState = new CookbookState();
@@ -0,0 +1,57 @@
1
+ import type { ShellLayout } from '@happyvertical/smrt-svelte/workspace/layout';
2
+ import type { Cookbook } from '../cookbook/types.ts';
3
+ /**
4
+ * `ShellLayout` plus the per-entry rename smrt-svelte is adding
5
+ * (`layout.items[<navItemId>].label`). The planner writes it today; it renders
6
+ * once the installed smrt-svelte reads it, and the cookbook preview reads the
7
+ * same labels either way. Delete this type when `ShellLayout` carries `items`.
8
+ */
9
+ export type CookbookLayout = ShellLayout & {
10
+ items?: Record<string, {
11
+ label?: string;
12
+ description?: string;
13
+ }>;
14
+ };
15
+ /** The app-wide defaults a cookbook sets (the policy rows realise them). */
16
+ export interface CookbookSettings {
17
+ /** ISO currency code, e.g. `USD`. */
18
+ currency?: string;
19
+ /** Default payment terms on customer-facing documents and customers. */
20
+ paymentTerms?: string;
21
+ /** Default line-item tax rate as a fraction (0.0825 is 8.25%). */
22
+ taxRate?: number;
23
+ }
24
+ /** A curated, ready-made cookbook with the words that introduce it. */
25
+ export interface LibraryCookbook {
26
+ id: string;
27
+ name: string;
28
+ /** A key of `COOKBOOK_ICONS`. */
29
+ icon: string;
30
+ summary: string;
31
+ /**
32
+ * Words and phrases that point at this cookbook ("brakes", "oil change").
33
+ * The assistant matches them against what the person types; the name is
34
+ * matched too. Ambiguous words (like "car" or "classes") only hint.
35
+ */
36
+ keywords: string[];
37
+ settings: CookbookSettings;
38
+ /**
39
+ * One line per custom section (`custom:<id>`), shown under its title on the
40
+ * section's page. The section's icon is in `cookbook.layout.sections`.
41
+ */
42
+ sectionDescriptions?: Record<string, string>;
43
+ /** The same document the Export tab saves. */
44
+ document: Cookbook;
45
+ }
46
+ export interface LibraryFile {
47
+ cookbooks: LibraryCookbook[];
48
+ }
49
+ export interface MenuEntry {
50
+ id: string;
51
+ label: string;
52
+ }
53
+ export interface MenuSection {
54
+ id: string;
55
+ label: string;
56
+ entries: MenuEntry[];
57
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Which overviews exist and what each declares (smrt#3727). Every navigation
3
+ * section page is an editable overview whose id is the section's layout id
4
+ * (`section:sales`, `custom:shop-2`), so a cookbook's `overviews` key names the
5
+ * page it customises and stays valid when the section is renamed.
6
+ *
7
+ * Definitions are static per section (they never depend on which recipes are
8
+ * on), so a saved override always resolves against the same defaults: the
9
+ * cookbook loader, the import and the page agree on what is canonical.
10
+ */
11
+ import { type OverviewDefinition } from '@happyvertical/smrt-svelte/overview';
12
+ import type { ShellLayout } from '@happyvertical/smrt-svelte/workspace/layout';
13
+ /**
14
+ * The overview a section page renders; one frozen definition per id.
15
+ * `undefined` for an id no overview can have (a hand-edited layout's custom
16
+ * section id outside the overview id pattern): the page then shows its menu.
17
+ */
18
+ export declare function sectionOverview(sectionId: string): OverviewDefinition | undefined;
19
+ /**
20
+ * Whether `id` names an overview in a cookbook with this layout: a section a
21
+ * recipe suggests, More, or one of the layout's custom sections. Anything else
22
+ * (a typo, a section from another app) is unknown and its override is dropped.
23
+ */
24
+ export declare function isOverviewId(id: string, layout?: ShellLayout): boolean;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Which overviews exist and what each declares (smrt#3727). Every navigation
3
+ * section page is an editable overview whose id is the section's layout id
4
+ * (`section:sales`, `custom:shop-2`), so a cookbook's `overviews` key names the
5
+ * page it customises and stays valid when the section is renamed.
6
+ *
7
+ * Definitions are static per section (they never depend on which recipes are
8
+ * on), so a saved override always resolves against the same defaults: the
9
+ * cookbook loader, the import and the page agree on what is canonical.
10
+ */
11
+ import { defineOverview, OVERVIEW_PAGE_ID_PATTERN, } from '@happyvertical/smrt-svelte/overview';
12
+ import { catalog } from "../catalog/index.js";
13
+ import { humanize, pluralize } from "../data/format.js";
14
+ import { FEATURE_SECTION } from "../recipes/features.js";
15
+ import { buildNavSections, recipeNav, recipes } from "../recipes/index.js";
16
+ import { CORE_WIDGET_TYPES, RECIPE_WIDGET_TYPES } from "./registry.js";
17
+ const NAV_SECTIONS = new Map(buildNavSections(recipes).map((section) => [
18
+ `section:${section.id}`,
19
+ section,
20
+ ]));
21
+ /** Every model a widget may read: the catalog's, the data the sample source holds. */
22
+ const MODELS = catalog.packages.flatMap((pkg) => pkg.models.map((model) => model.id));
23
+ const ALLOWED = [
24
+ ...CORE_WIDGET_TYPES,
25
+ ...RECIPE_WIDGET_TYPES,
26
+ ];
27
+ /**
28
+ * The section's lead model: the first menu entry of the first recipe that
29
+ * suggests the section. Its count and records follow the shortcuts.
30
+ */
31
+ function leadModel(sectionId) {
32
+ const section = NAV_SECTIONS.get(sectionId);
33
+ for (const recipe of section?.recipes ?? []) {
34
+ const entry = recipeNav(recipe)[0];
35
+ if (entry)
36
+ return { id: entry.model.id, name: humanize(entry.model.name) };
37
+ }
38
+ return undefined;
39
+ }
40
+ function defaults(sectionId) {
41
+ const widgets = [
42
+ { id: 'shortcuts', type: 'shortcuts', span: 4, options: {} },
43
+ ];
44
+ const lead = leadModel(sectionId);
45
+ if (lead) {
46
+ widgets.push({
47
+ id: 'count',
48
+ type: 'metric',
49
+ span: 1,
50
+ options: {
51
+ title: pluralize(lead.name),
52
+ model: lead.id,
53
+ measure: 'count',
54
+ },
55
+ }, {
56
+ id: 'latest',
57
+ type: 'records',
58
+ span: 3,
59
+ options: { title: `${lead.name} records`, model: lead.id, limit: 5 },
60
+ });
61
+ }
62
+ return widgets;
63
+ }
64
+ const cache = new Map();
65
+ /**
66
+ * The overview a section page renders; one frozen definition per id.
67
+ * `undefined` for an id no overview can have (a hand-edited layout's custom
68
+ * section id outside the overview id pattern): the page then shows its menu.
69
+ */
70
+ export function sectionOverview(sectionId) {
71
+ if (!OVERVIEW_PAGE_ID_PATTERN.test(sectionId))
72
+ return undefined;
73
+ let definition = cache.get(sectionId);
74
+ if (!definition) {
75
+ definition = defineOverview({
76
+ id: sectionId,
77
+ allowed: ALLOWED,
78
+ models: MODELS,
79
+ defaults: defaults(sectionId),
80
+ });
81
+ cache.set(sectionId, definition);
82
+ }
83
+ return definition;
84
+ }
85
+ /**
86
+ * Whether `id` names an overview in a cookbook with this layout: a section a
87
+ * recipe suggests, More, or one of the layout's custom sections. Anything else
88
+ * (a typo, a section from another app) is unknown and its override is dropped.
89
+ */
90
+ export function isOverviewId(id, layout) {
91
+ if (NAV_SECTIONS.has(id) || id === `section:${FEATURE_SECTION.id}`) {
92
+ return true;
93
+ }
94
+ return (id.startsWith('custom:') &&
95
+ OVERVIEW_PAGE_ID_PATTERN.test(id) &&
96
+ (layout?.customSections ?? []).some((section) => section.id === id));
97
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * How a section page wires its overview to the cookbook (smrt#3727): the
3
+ * controller reads the page's stored override from the cookbook store and
4
+ * writes every edit back, so the cookbook is the single source of truth.
5
+ * `SectionOverview.svelte` calls this; tests drive the same wiring.
6
+ */
7
+ import { type OverviewController, type OverviewDefinition, type OverviewOverride, type OverviewWidget } from '@happyvertical/smrt-svelte/overview';
8
+ import { type PlannerWidgetContext } from './registry.ts';
9
+ /** The part of the cookbook store an overview reads and writes. */
10
+ export interface OverviewStore {
11
+ overview(id: string): OverviewOverride | null;
12
+ setOverview(id: string, override: OverviewOverride | null): void;
13
+ }
14
+ /**
15
+ * One widget's data from the in-browser source, through the same
16
+ * sanitize-and-load path (timeout, serializable check) as a page load. A
17
+ * failed load throws, which the grid shows as that widget's error tile.
18
+ */
19
+ export declare function loadSectionWidget(definition: OverviewDefinition, context: PlannerWidgetContext, widget: OverviewWidget, signal?: AbortSignal): Promise<unknown>;
20
+ /** The controller of a section's overview, persisted through `store`. */
21
+ export declare function createSectionOverview(definition: OverviewDefinition, store: OverviewStore, context?: () => PlannerWidgetContext): OverviewController;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * How a section page wires its overview to the cookbook (smrt#3727): the
3
+ * controller reads the page's stored override from the cookbook store and
4
+ * writes every edit back, so the cookbook is the single source of truth.
5
+ * `SectionOverview.svelte` calls this; tests drive the same wiring.
6
+ */
7
+ import { createOverview, loadOverview, } from '@happyvertical/smrt-svelte/overview';
8
+ import { overviewRegistry } from "./registry.js";
9
+ /**
10
+ * One widget's data from the in-browser source, through the same
11
+ * sanitize-and-load path (timeout, serializable check) as a page load. A
12
+ * failed load throws, which the grid shows as that widget's error tile.
13
+ */
14
+ export async function loadSectionWidget(definition, context, widget, signal) {
15
+ const loaded = await loadOverview({ widgets: [widget] }, definition, overviewRegistry, { ...context, signal, locale: 'en-US' });
16
+ const result = loaded.widgets[0];
17
+ if (!result || result.status === 'error') {
18
+ throw new Error(result?.error?.code ?? 'load_failed');
19
+ }
20
+ return result.data;
21
+ }
22
+ /** The controller of a section's overview, persisted through `store`. */
23
+ export function createSectionOverview(definition, store, context) {
24
+ const id = definition.id;
25
+ return createOverview({
26
+ definition,
27
+ registry: overviewRegistry,
28
+ override: () => store.overview(id),
29
+ onchange: (override) => store.setOverview(id, override),
30
+ ...(context
31
+ ? {
32
+ loadWidget: (widget, signal) => loadSectionWidget(definition, context(), widget, signal),
33
+ }
34
+ : {}),
35
+ });
36
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The planner's overview widgets (smrt#3727): one registry for every section
3
+ * overview, the core widgets wired to the IN-BROWSER sample data, and the
4
+ * recipes' `widget` surfaces. Validation (`cookbook/validate.ts`) and the
5
+ * section pages share it, so what a cookbook may hold is exactly what a page
6
+ * can render.
7
+ *
8
+ * Loaders receive validated options only. What they read comes from the host
9
+ * capabilities a page passes in the load context ({@link PlannerWidgetContext}),
10
+ * never from option values: an option names a model or field, the loader looks
11
+ * it up in the catalog and asks the `DataSource` for it.
12
+ */
13
+ import { type RecipeExportResolver, type RecipeWidgetSource, type ShortcutNavSection } from '@happyvertical/smrt-svelte/overview';
14
+ import type { DataSource } from '../data/source.ts';
15
+ import type { SectionEntry } from '../sections/entries.ts';
16
+ /** The capabilities a section page hands its widgets' loaders. */
17
+ export interface PlannerWidgetContext {
18
+ /** The in-browser sample data. */
19
+ source: DataSource;
20
+ /** The shell's resolved sections (renames and hides applied). */
21
+ sections: readonly ShortcutNavSection[];
22
+ /** Layout item id -> the model and scope it lists, for record counts. */
23
+ entries: ReadonlyMap<string, SectionEntry>;
24
+ /** An in-app path with the app query (`appHref`). */
25
+ href: (path: string) => string;
26
+ }
27
+ /** The registry every planner overview uses. */
28
+ export declare const overviewRegistry: import("@happyvertical/smrt-svelte/overview").WidgetRegistry;
29
+ /** The core widget types a section overview offers. */
30
+ export declare const CORE_WIDGET_TYPES: readonly ["shortcuts", "metric", "records", "note"];
31
+ export declare const resolveRecipeExport: RecipeExportResolver;
32
+ /** Recipes that declare at least one `widget` surface. */
33
+ export declare const widgetRecipes: readonly RecipeWidgetSource[];
34
+ /**
35
+ * Widget types the recipes contribute, allowed on every section overview. A
36
+ * widget's own `allowedIn` still confines it.
37
+ */
38
+ export declare const RECIPE_WIDGET_TYPES: readonly string[];
39
+ /**
40
+ * Register the recipes' widgets. Surfaces without a `migrate` register
41
+ * synchronously inside this call (the helper awaits only `migrate` exports), so
42
+ * validation at load sees them; the promise reports what was skipped.
43
+ */
44
+ export declare const recipeWidgets: Promise<import("@happyvertical/smrt-svelte/overview").RecipeWidgetRegistration>;
@@ -0,0 +1,191 @@
1
+ /**
2
+ * The planner's overview widgets (smrt#3727): one registry for every section
3
+ * overview, the core widgets wired to the IN-BROWSER sample data, and the
4
+ * recipes' `widget` surfaces. Validation (`cookbook/validate.ts`) and the
5
+ * section pages share it, so what a cookbook may hold is exactly what a page
6
+ * can render.
7
+ *
8
+ * Loaders receive validated options only. What they read comes from the host
9
+ * capabilities a page passes in the load context ({@link PlannerWidgetContext}),
10
+ * never from option values: an option names a model or field, the loader looks
11
+ * it up in the catalog and asks the `DataSource` for it.
12
+ */
13
+ import { createWidgetRegistry, registerCoreWidgets, registerRecipeWidgets, shortcutsFromNav, } from '@happyvertical/smrt-svelte/overview';
14
+ import { getModelByQualifiedName } from "../catalog/index.js";
15
+ import { isMoneyField } from "../data/fakes.js";
16
+ import { recordCount } from "../data/format.js";
17
+ import { recordLabel } from "../data/labels.js";
18
+ import { recipes } from "../recipes/index.js";
19
+ import { inScope } from "../recipes/scope.js";
20
+ /** The registry every planner overview uses. */
21
+ export const overviewRegistry = createWidgetRegistry();
22
+ function capabilities(ctx) {
23
+ const { source, sections, entries, href } = ctx;
24
+ if (!source || !sections || !entries || !href) {
25
+ throw new Error('the planner widget context is missing');
26
+ }
27
+ return { source, sections, entries, href };
28
+ }
29
+ function modelOf(qualified) {
30
+ const found = typeof qualified === 'string'
31
+ ? getModelByQualifiedName(qualified)
32
+ : undefined;
33
+ if (!found)
34
+ throw new Error(`unknown model ${String(qualified)}`);
35
+ return {
36
+ model: found.model,
37
+ path: `/m/${found.pkg.id}/${found.model.name}/`,
38
+ };
39
+ }
40
+ /** The sample data has no named filters yet: naming one is an error tile. */
41
+ function refuseFilter(filter) {
42
+ if (typeof filter === 'string' && filter !== '') {
43
+ throw new Error(`unknown filter ${filter}`);
44
+ }
45
+ }
46
+ const numeric = (value) => typeof value === 'number' && Number.isFinite(value);
47
+ /**
48
+ * `metric`: a count, or the sum / average / min / max of one numeric field,
49
+ * over the model's sample rows. Money fields stay integer minor units.
50
+ */
51
+ async function loadMetric(options, ctx) {
52
+ const { source, href } = capabilities(ctx);
53
+ const { model, path } = modelOf(options.model);
54
+ refuseFilter(options.filter);
55
+ const rows = await source.list(model);
56
+ const measure = typeof options.measure === 'string' ? options.measure : '';
57
+ if (measure === 'count' || measure === '') {
58
+ return {
59
+ value: rows.length,
60
+ format: 'integer',
61
+ href: href(path),
62
+ };
63
+ }
64
+ const field = model.fields.find((f) => f.name === options.field);
65
+ if (!field || (field.type !== 'integer' && field.type !== 'decimal')) {
66
+ throw new Error(`${measure} needs a numeric field of ${model.name}`);
67
+ }
68
+ const values = rows.map((row) => row[field.name]).filter(numeric);
69
+ let value = 0;
70
+ if (values.length) {
71
+ if (measure === 'sum' || measure === 'avg') {
72
+ value = values.reduce((total, v) => total + v, 0);
73
+ if (measure === 'avg')
74
+ value /= values.length;
75
+ }
76
+ else if (measure === 'min')
77
+ value = Math.min(...values);
78
+ else if (measure === 'max')
79
+ value = Math.max(...values);
80
+ else
81
+ throw new Error(`unknown measure ${measure}`);
82
+ }
83
+ const money = isMoneyField(field);
84
+ return {
85
+ // Money is integer minor units, also for an average.
86
+ value: money ? Math.round(value) : value,
87
+ format: money ? 'money' : field.type === 'integer' ? 'integer' : 'decimal',
88
+ ...(money ? { currency: 'USD' } : {}),
89
+ href: href(path),
90
+ };
91
+ }
92
+ function compare(a, b) {
93
+ if (numeric(a) && numeric(b))
94
+ return a - b;
95
+ return String(a ?? '').localeCompare(String(b ?? ''));
96
+ }
97
+ /** `records`: the first `limit` sample rows, optionally sorted by a field. */
98
+ async function loadRecords(options, ctx) {
99
+ const { source, href } = capabilities(ctx);
100
+ const { model, path } = modelOf(options.model);
101
+ refuseFilter(options.filter);
102
+ let rows = await source.list(model);
103
+ if (typeof options.sort === 'string' && options.sort) {
104
+ const sort = options.sort;
105
+ if (!model.fields.some((f) => f.name === sort)) {
106
+ throw new Error(`${model.name} has no field ${sort}`);
107
+ }
108
+ const sign = options.direction === 'asc' ? 1 : -1;
109
+ rows = [...rows].sort((a, b) => sign * compare(a[sort], b[sort]));
110
+ }
111
+ const limit = numeric(options.limit) ? options.limit : 5;
112
+ const shown = rows.slice(0, limit);
113
+ return {
114
+ rows: await Promise.all(shown.map(async (row) => ({
115
+ id: String(row.id),
116
+ title: await recordLabel(source, model, row),
117
+ }))),
118
+ ...(rows.length > shown.length ? { total: rows.length } : {}),
119
+ href: href(path),
120
+ };
121
+ }
122
+ /**
123
+ * `shortcuts`: the section's menu entries as cards, as the shell resolves them
124
+ * (renames, hides, moves), each with its record count. `section` names another
125
+ * section by its id without the `section:` / `custom:` prefix; absent, the
126
+ * overview's own section.
127
+ */
128
+ async function loadShortcuts(options, ctx) {
129
+ const { source, sections, entries } = capabilities(ctx);
130
+ const named = typeof options.section === 'string' ? options.section : '';
131
+ const sectionId = named
132
+ ? sections.find((s) => s.id === `section:${named}` || s.id === `custom:${named}`)?.id
133
+ : ctx.overviewId;
134
+ if (!sectionId)
135
+ throw new Error(`unknown section ${named}`);
136
+ const data = shortcutsFromNav(sections, sectionId);
137
+ const items = await Promise.all(data.items.map(async (item) => {
138
+ const entry = entries.get(item.id);
139
+ if (!entry)
140
+ return item;
141
+ const rows = await source.list(entry.model);
142
+ const count = recordCount(rows.filter((row) => inScope(entry.scope, row)).length);
143
+ return {
144
+ ...item,
145
+ // The count first: a long description is clipped.
146
+ description: item.description
147
+ ? `${count} · ${item.description}`
148
+ : count,
149
+ };
150
+ }));
151
+ return { items };
152
+ }
153
+ registerCoreWidgets(overviewRegistry, {
154
+ metric: loadMetric,
155
+ records: loadRecords,
156
+ shortcuts: loadShortcuts,
157
+ });
158
+ /** The core widget types a section overview offers. */
159
+ export const CORE_WIDGET_TYPES = [
160
+ 'shortcuts',
161
+ 'metric',
162
+ 'records',
163
+ 'note',
164
+ ];
165
+ /**
166
+ * How a recipe widget's `'<specifier>#<Export>'` becomes a module: a static map
167
+ * of dynamic imports, one entry per package that ships widgets. No published
168
+ * recipe declares a `widget` surface yet, so it is empty and every lookup is
169
+ * `undefined` (the widget then renders as unavailable).
170
+ */
171
+ const RECIPE_WIDGET_MODULES = {};
172
+ export const resolveRecipeExport = async (specifier, exportName) => {
173
+ const load = RECIPE_WIDGET_MODULES[specifier];
174
+ if (!load)
175
+ return undefined;
176
+ const module = (await load());
177
+ return module[exportName];
178
+ };
179
+ /** Recipes that declare at least one `widget` surface. */
180
+ export const widgetRecipes = recipes.filter((recipe) => recipe.surfaces?.some((surface) => surface.kind === 'widget'));
181
+ /**
182
+ * Widget types the recipes contribute, allowed on every section overview. A
183
+ * widget's own `allowedIn` still confines it.
184
+ */
185
+ export const RECIPE_WIDGET_TYPES = widgetRecipes.flatMap((recipe) => (recipe.surfaces ?? []).flatMap((surface) => surface.kind === 'widget' ? [surface.type] : []));
186
+ /**
187
+ * Register the recipes' widgets. Surfaces without a `migrate` register
188
+ * synchronously inside this call (the helper awaits only `migrate` exports), so
189
+ * validation at load sees them; the promise reports what was skipped.
190
+ */
191
+ export const recipeWidgets = registerRecipeWidgets(overviewRegistry, widgetRecipes, resolveRecipeExport);
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The cookbook's `overviews` field: one sparse smrt-svelte `OverviewOverride`
3
+ * per overview id. A stored override is untrusted data. Each one is checked
4
+ * with `checkOverviewOverride` against its page's definition; what fails (an
5
+ * unknown or disallowed widget type, options outside the widget's schema, an
6
+ * unknown overview id, a malformed entry) is dropped and reported, never
7
+ * rendered or loaded, and only the canonical override is kept.
8
+ */
9
+ import { type OverviewIssue, type OverviewOverride } from '@happyvertical/smrt-svelte/overview';
10
+ import type { ShellLayout } from '@happyvertical/smrt-svelte/workspace/layout';
11
+ export type CookbookOverviews = Record<string, OverviewOverride>;
12
+ export interface ParsedOverviews {
13
+ /** Canonical, non-empty overrides by overview id, keys sorted. */
14
+ overviews: CookbookOverviews;
15
+ /** One sentence per dropped override or widget. */
16
+ dropped: string[];
17
+ }
18
+ /**
19
+ * Check one stored override. `checkOverviewOverride` is strict (any issue
20
+ * rejects); when it rejects, the offending widgets are taken out and the rest
21
+ * checked again, so one bad widget does not cost the visitor the others.
22
+ */
23
+ export declare function checkStoredOverride(id: string, raw: unknown): {
24
+ override: OverviewOverride | null;
25
+ issues: OverviewIssue[];
26
+ };
27
+ /**
28
+ * Read a cookbook's `overviews` value. `null` when it is not an object (the
29
+ * caller rejects the file, as for any malformed field); otherwise every entry
30
+ * is checked and what fails is dropped and reported.
31
+ */
32
+ export declare function parseOverviews(input: unknown, layout: ShellLayout | undefined): ParsedOverviews | null;