@happyvertical/smrt-planner 0.0.2 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. package/README.md +81 -8
  2. package/app/404.html +42 -49
  3. package/app/_app/immutable/assets/0.DUow1OzM.css +1 -0
  4. package/app/_app/immutable/assets/10.CdYxvH4G.css +1 -0
  5. package/app/_app/immutable/assets/11.nOT5Z4Fv.css +1 -0
  6. package/app/_app/immutable/assets/12.F7A7zP4J.css +1 -0
  7. package/app/_app/immutable/assets/13.JoySu8W5.css +1 -0
  8. package/app/_app/immutable/assets/14.nsp62-4b.css +1 -0
  9. package/app/_app/immutable/assets/2.CbPiqdz5.css +1 -0
  10. package/app/_app/immutable/assets/3.D518dbB5.css +1 -0
  11. package/app/_app/immutable/assets/4.B3vt1gMJ.css +1 -0
  12. package/app/_app/immutable/assets/AiSetup.4fXjMpTZ.css +1 -0
  13. package/app/_app/immutable/assets/AppShell.DOvXbUZo.css +1 -0
  14. package/app/_app/immutable/assets/ConnectTools.DTleL8YA.css +1 -0
  15. package/app/_app/immutable/assets/FieldMapForm.C8SZ3t4N.css +1 -0
  16. package/app/_app/immutable/assets/ModelPage.DbXvPbHE.css +1 -0
  17. package/app/_app/immutable/assets/SectionActions.BE1CPmxk.css +1 -0
  18. package/app/_app/immutable/assets/SectionIcons.BGFcFuOf.css +1 -0
  19. package/app/_app/immutable/assets/SegmentedControl.BkyuoCEJ.css +1 -0
  20. package/app/_app/immutable/assets/app.eM0k786r.css +1 -0
  21. package/app/_app/immutable/assets/currency-metadata.DDyu8_ub.css +1 -0
  22. package/app/_app/immutable/assets/data.bGq43K60.css +1 -0
  23. package/app/_app/immutable/assets/feedback.xBpOq9ef.css +1 -0
  24. package/app/_app/immutable/assets/forms.B3_bbIMe.css +1 -0
  25. package/app/_app/immutable/assets/labels.BiuUjqHs.css +1 -0
  26. package/app/_app/immutable/assets/percent.DbwvwMhf.css +1 -0
  27. package/app/_app/immutable/assets/state.CJipYvSU.css +1 -0
  28. package/app/_app/immutable/assets/webmcp-ui-context.BnR-DUfO.css +1 -0
  29. package/app/_app/immutable/assets/workspace.B5Xq-5pJ.css +1 -0
  30. package/app/_app/immutable/chunks/1ElZWh_R.js +10 -0
  31. package/app/_app/immutable/chunks/B-CpwO-j.js +1 -0
  32. package/app/_app/immutable/chunks/{BnRri03M.js → B7KB-rhH.js} +1 -1
  33. package/app/_app/immutable/chunks/BUhghcIm.js +1 -0
  34. package/app/_app/immutable/chunks/BV3NwM01.js +1 -0
  35. package/app/_app/immutable/chunks/BZVZZ6VY.js +1 -0
  36. package/app/_app/immutable/chunks/Ba1g71Sq.js +1 -0
  37. package/app/_app/immutable/chunks/BeJD7_hy.js +1 -0
  38. package/app/_app/immutable/chunks/BiO_bqNH.js +2 -0
  39. package/app/_app/immutable/chunks/{DkR8_Ws6.js → BqBuCJB_.js} +2 -2
  40. package/app/_app/immutable/chunks/BsJoBmTA.js +1 -0
  41. package/app/_app/immutable/chunks/Bxbz6_Mb.js +1 -0
  42. package/app/_app/immutable/chunks/Bz5uCkjV.js +2 -0
  43. package/app/_app/immutable/chunks/BzMfoxBk.js +1 -0
  44. package/app/_app/immutable/chunks/CF6zSg_o.js +2 -0
  45. package/app/_app/immutable/chunks/CFL0B6dk.js +1 -0
  46. package/app/_app/immutable/chunks/CRu55ZTy.js +4 -0
  47. package/app/_app/immutable/chunks/{CyUMm_Wp.js → Cv2EcCr0.js} +1 -1
  48. package/app/_app/immutable/chunks/D-3Ri0zJ.js +1 -0
  49. package/app/_app/immutable/chunks/{BWPhGFHl.js → D0FW0z6R.js} +1 -1
  50. package/app/_app/immutable/chunks/D7d5GssF.js +1 -0
  51. package/app/_app/immutable/chunks/DCsSRJsN.js +1 -0
  52. package/app/_app/immutable/chunks/DGqV6_5v.js +1 -0
  53. package/app/_app/immutable/chunks/DNSRTkf6.js +11 -0
  54. package/app/_app/immutable/chunks/DQNX_XPY.js +1 -0
  55. package/app/_app/immutable/chunks/DSyIMN4M.js +1 -0
  56. package/app/_app/immutable/chunks/DUTtmM1Y.js +1 -0
  57. package/app/_app/immutable/chunks/DYuawOB3.js +980 -0
  58. package/app/_app/immutable/chunks/DfCLzLZc.js +1 -0
  59. package/app/_app/immutable/chunks/Dh5fne6n.js +1 -0
  60. package/app/_app/immutable/chunks/LruoUXGC.js +1 -0
  61. package/app/_app/immutable/chunks/ZLqixH7j.js +9 -0
  62. package/app/_app/immutable/chunks/_pYwB_Eb.js +4 -0
  63. package/app/_app/immutable/chunks/aoU3lIZI.js +1 -0
  64. package/app/_app/immutable/chunks/c57ZlocB.js +24 -0
  65. package/app/_app/immutable/chunks/h8ppmjOm.js +1 -0
  66. package/app/_app/immutable/chunks/jhcy_jeO.js +1 -0
  67. package/app/_app/immutable/chunks/vNEnXNLV.js +3 -0
  68. package/app/_app/immutable/chunks/vwntRvfV.js +1 -0
  69. package/app/_app/immutable/entry/app.D5LoTsNA.js +2 -0
  70. package/app/_app/immutable/entry/start.Sb_s0NGC.js +1 -0
  71. package/app/_app/immutable/nodes/0.Cuo9-RQc.js +9 -0
  72. package/app/_app/immutable/nodes/1.BW8Ar5T3.js +1 -0
  73. package/app/_app/immutable/nodes/10.CpLYjN7r.js +3 -0
  74. package/app/_app/immutable/nodes/11.BMPKD4M3.js +1 -0
  75. package/app/_app/immutable/nodes/12.WYpy0AHE.js +4 -0
  76. package/app/_app/immutable/nodes/13.BYo05X9B.js +1 -0
  77. package/app/_app/immutable/nodes/14.DN0MT3KB.js +1 -0
  78. package/app/_app/immutable/nodes/2.DM6k_pqu.js +24 -0
  79. package/app/_app/immutable/nodes/3.YgEwJ-vF.js +1 -0
  80. package/app/_app/immutable/nodes/4.A3Y6Lax0.js +1 -0
  81. package/app/_app/immutable/nodes/5.D9Vd85hG.js +1 -0
  82. package/app/_app/immutable/nodes/6.C5c56bSW.js +1 -0
  83. package/app/_app/immutable/nodes/7.CDBMbYlD.js +1 -0
  84. package/app/_app/immutable/nodes/8.8olDkDou.js +1 -0
  85. package/app/_app/immutable/nodes/9.CWgx__8Z.js +1 -0
  86. package/app/_app/version.json +1 -1
  87. package/app/advanced-styles/index.html +84 -0
  88. package/app/ai/index.html +60 -52
  89. package/app/blueprint/index.html +46 -53
  90. package/app/cookbook/index.html +46 -53
  91. package/app/index.html +92 -64
  92. package/app/m/ads/AdDeliveryTier/index.html +52 -59
  93. package/app/m/ads/AdEvent/index.html +52 -59
  94. package/app/m/ads/AdFormat/index.html +52 -59
  95. package/app/m/ads/AdGroup/index.html +52 -59
  96. package/app/m/ads/AdVariation/index.html +52 -59
  97. package/app/m/analytics/AnalyticsDataStream/index.html +52 -59
  98. package/app/m/analytics/AnalyticsEvent/index.html +52 -59
  99. package/app/m/analytics/AnalyticsProperty/index.html +52 -59
  100. package/app/m/analytics/AnalyticsReport/index.html +52 -59
  101. package/app/m/approvals/ApprovalEvent/index.html +52 -59
  102. package/app/m/approvals/ApprovalPolicy/index.html +52 -59
  103. package/app/m/approvals/ApprovalRequest/index.html +52 -59
  104. package/app/m/assets/Asset/attachments/index.html +91 -0
  105. package/app/m/assets/Asset/index.html +52 -59
  106. package/app/m/assets/AssetAssociation/index.html +53 -60
  107. package/app/m/assets/AssetMetafield/index.html +52 -59
  108. package/app/m/assets/AssetStatus/index.html +52 -59
  109. package/app/m/assets/AssetType/index.html +52 -59
  110. package/app/m/assets/Folder/index.html +52 -59
  111. package/app/m/chat/AgentSession/index.html +52 -59
  112. package/app/m/chat/ChatMessage/index.html +53 -60
  113. package/app/m/chat/ChatParticipant/index.html +53 -60
  114. package/app/m/chat/ChatReaction/index.html +52 -59
  115. package/app/m/chat/ChatRoom/index.html +52 -59
  116. package/app/m/chat/ChatThread/index.html +53 -60
  117. package/app/m/chat/VoiceGatewayTurn/index.html +52 -59
  118. package/app/m/chat/VoiceSession/index.html +52 -59
  119. package/app/m/commerce/Agreement/index.html +52 -59
  120. package/app/m/commerce/Cart/index.html +52 -59
  121. package/app/m/commerce/Contract/index.html +52 -59
  122. package/app/m/commerce/ContractLineItem/index.html +53 -60
  123. package/app/m/commerce/Customer/index.html +52 -59
  124. package/app/m/commerce/DocumentTax/index.html +89 -0
  125. package/app/m/commerce/Estimate/index.html +52 -59
  126. package/app/m/commerce/Fulfillment/index.html +52 -59
  127. package/app/m/commerce/FulfillmentLineItem/index.html +53 -60
  128. package/app/m/commerce/Invoice/index.html +52 -59
  129. package/app/m/commerce/InvoiceLineItem/index.html +53 -60
  130. package/app/m/commerce/Lease/index.html +52 -59
  131. package/app/m/commerce/LicenseSale/index.html +52 -59
  132. package/app/m/commerce/Order/index.html +52 -59
  133. package/app/m/commerce/Payment/index.html +52 -59
  134. package/app/m/commerce/PaymentAllocation/index.html +53 -60
  135. package/app/m/commerce/PaymentInstrument/index.html +52 -59
  136. package/app/m/commerce/PaymentIntent/index.html +52 -59
  137. package/app/m/commerce/Payout/index.html +52 -59
  138. package/app/m/commerce/ProductionOrder/index.html +52 -59
  139. package/app/m/commerce/PurchaseContract/index.html +89 -0
  140. package/app/m/commerce/PurchaseOrder/index.html +52 -59
  141. package/app/m/commerce/SalesContract/index.html +89 -0
  142. package/app/m/commerce/SupplierQuote/index.html +89 -0
  143. package/app/m/commerce/TaxCode/index.html +89 -0
  144. package/app/m/commerce/TaxComponent/index.html +89 -0
  145. package/app/m/commerce/TaxSettings/index.html +89 -0
  146. package/app/m/commerce/TaxSummaryReport/index.html +89 -0
  147. package/app/m/commerce/Vendor/index.html +52 -59
  148. package/app/m/commerce/WholesaleOrder/index.html +52 -59
  149. package/app/m/content/Content/index.html +52 -59
  150. package/app/m/content/ContentContribution/index.html +52 -59
  151. package/app/m/content/ContentContributionAttachment/index.html +52 -59
  152. package/app/m/content/ContentContributionRevision/index.html +52 -59
  153. package/app/m/content/ContentContributionType/index.html +52 -59
  154. package/app/m/content/ContentContributor/index.html +52 -59
  155. package/app/m/content/ContentCorrection/index.html +52 -59
  156. package/app/m/content/ContentFeedSource/index.html +52 -59
  157. package/app/m/content/ContentGovernanceAssignment/index.html +52 -59
  158. package/app/m/content/ContentGovernancePolicy/index.html +52 -59
  159. package/app/m/content/ContentGovernanceProfile/index.html +52 -59
  160. package/app/m/content/ContentReference/index.html +52 -59
  161. package/app/m/content/ContentReview/index.html +52 -59
  162. package/app/m/content/ContentVersion/index.html +52 -59
  163. package/app/m/events/Event/index.html +52 -59
  164. package/app/m/events/EventParticipant/index.html +53 -60
  165. package/app/m/events/EventSeries/index.html +52 -59
  166. package/app/m/events/EventType/index.html +52 -59
  167. package/app/m/expenses/Expense/index.html +89 -0
  168. package/app/m/facts/Fact/index.html +52 -59
  169. package/app/m/facts/FactContent/index.html +52 -59
  170. package/app/m/facts/FactEvidence/index.html +52 -59
  171. package/app/m/facts/FactSource/index.html +52 -59
  172. package/app/m/facts/FactSubject/index.html +52 -59
  173. package/app/m/facts/FactTag/index.html +52 -59
  174. package/app/m/fields/FieldPolicy/index.html +52 -59
  175. package/app/m/fields/FieldPolicySuggestion/index.html +52 -59
  176. package/app/m/fields/FieldUsageCounter/index.html +52 -59
  177. package/app/m/images/Image/index.html +52 -59
  178. package/app/m/inventory/InventoryLocation/index.html +52 -59
  179. package/app/m/inventory/StockLevel/index.html +52 -59
  180. package/app/m/inventory/StockMovement/index.html +52 -59
  181. package/app/m/ledgers/Account/index.html +52 -59
  182. package/app/m/ledgers/Journal/index.html +52 -59
  183. package/app/m/ledgers/JournalEntry/index.html +53 -60
  184. package/app/m/manufacturing/Assembly/index.html +52 -59
  185. package/app/m/manufacturing/BillOfMaterials/index.html +52 -59
  186. package/app/m/manufacturing/BomLine/index.html +52 -59
  187. package/app/m/manufacturing/Operation/index.html +52 -59
  188. package/app/m/manufacturing/ProductionRun/index.html +52 -59
  189. package/app/m/manufacturing/ProductionRunCompletion/index.html +52 -59
  190. package/app/m/manufacturing/RoutingStep/index.html +52 -59
  191. package/app/m/marketing/Campaign/index.html +52 -59
  192. package/app/m/marketing/CampaignChannel/index.html +52 -59
  193. package/app/m/marketing/CampaignMetricSnapshot/index.html +52 -59
  194. package/app/m/messages/Account/index.html +52 -59
  195. package/app/m/messages/Attachment/index.html +52 -59
  196. package/app/m/messages/Blacklist/index.html +52 -59
  197. package/app/m/messages/Email/failed-sends/index.html +54 -59
  198. package/app/m/messages/Email/index.html +52 -59
  199. package/app/m/messages/Email/mailbox/index.html +54 -59
  200. package/app/m/messages/EmailAccount/index.html +52 -59
  201. package/app/m/messages/EmailAttachment/index.html +89 -0
  202. package/app/m/messages/EmailFolder/index.html +52 -59
  203. package/app/m/messages/Message/index.html +52 -59
  204. package/app/m/messages/MessagingEndpoint/index.html +52 -59
  205. package/app/m/messages/PersonaMessageRoute/index.html +52 -59
  206. package/app/m/messages/SlackAccount/index.html +52 -59
  207. package/app/m/messages/SlackMessage/index.html +52 -59
  208. package/app/m/messages/TelegramAccount/index.html +52 -59
  209. package/app/m/messages/Tweet/index.html +52 -59
  210. package/app/m/messages/TwitterAccount/index.html +52 -59
  211. package/app/m/messages/Whitelist/index.html +52 -59
  212. package/app/m/messages/ZulipAccount/index.html +52 -59
  213. package/app/m/places/Place/index.html +52 -59
  214. package/app/m/places/PlaceType/index.html +52 -59
  215. package/app/m/products/Category/index.html +52 -59
  216. package/app/m/products/Material/index.html +52 -59
  217. package/app/m/products/Product/index.html +52 -59
  218. package/app/m/products/Product/ingredients/index.html +54 -59
  219. package/app/m/products/ProductVariant/index.html +53 -60
  220. package/app/m/products/Sku/index.html +53 -60
  221. package/app/m/profiles/ApiKey/index.html +52 -59
  222. package/app/m/profiles/Bot/index.html +52 -59
  223. package/app/m/profiles/MagicLinkToken/index.html +52 -59
  224. package/app/m/profiles/NostrIdentity/index.html +52 -59
  225. package/app/m/profiles/OidcIdentity/index.html +52 -59
  226. package/app/m/profiles/Organization/index.html +52 -59
  227. package/app/m/profiles/Person/index.html +52 -59
  228. package/app/m/profiles/Profile/index.html +52 -59
  229. package/app/m/profiles/ProfileMetadata/index.html +52 -59
  230. package/app/m/profiles/ProfileMetafield/index.html +52 -59
  231. package/app/m/profiles/ProfileRelationship/index.html +52 -59
  232. package/app/m/profiles/ProfileRelationshipTerm/index.html +52 -59
  233. package/app/m/profiles/ProfileRelationshipType/index.html +52 -59
  234. package/app/m/profiles/ProfileType/index.html +52 -59
  235. package/app/m/projects/Comment/index.html +53 -60
  236. package/app/m/projects/Issue/index.html +52 -59
  237. package/app/m/projects/Label/index.html +52 -59
  238. package/app/m/projects/Project/index.html +52 -59
  239. package/app/m/projects/ProjectIntegration/index.html +52 -59
  240. package/app/m/projects/PullRequest/index.html +52 -59
  241. package/app/m/projects/Repository/index.html +52 -59
  242. package/app/m/properties/Property/index.html +52 -59
  243. package/app/m/properties/Zone/index.html +52 -59
  244. package/app/m/reports/RuntimeReport/index.html +52 -59
  245. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +52 -59
  246. package/app/m/reports/SmrtReportLock/index.html +52 -59
  247. package/app/m/reports/SmrtReportRefreshTask/index.html +52 -59
  248. package/app/m/reports/SmrtReportRun/index.html +52 -59
  249. package/app/m/reports/SmrtReportSchedule/index.html +52 -59
  250. package/app/m/reports/SmrtReportWatermark/index.html +52 -59
  251. package/app/m/sales/AttributionException/index.html +52 -59
  252. package/app/m/sales/AttributionPolicy/index.html +52 -59
  253. package/app/m/sales/Commission/index.html +52 -59
  254. package/app/m/sales/CommissionAdjustment/index.html +52 -59
  255. package/app/m/sales/CommissionPayout/index.html +52 -59
  256. package/app/m/sales/CommissionPlan/index.html +52 -59
  257. package/app/m/sales/Earner/index.html +52 -59
  258. package/app/m/sales/EarnerSourceAttribution/index.html +52 -59
  259. package/app/m/sales/EarningEvent/index.html +52 -59
  260. package/app/m/sales/ExecutedAgreement/index.html +52 -59
  261. package/app/m/sales/Lead/index.html +52 -59
  262. package/app/m/sales/Opportunity/index.html +52 -59
  263. package/app/m/sales/OpportunityConversion/index.html +52 -59
  264. package/app/m/sales/PipelineDefinition/index.html +52 -59
  265. package/app/m/sales/PipelineStage/index.html +53 -60
  266. package/app/m/sales/Referral/index.html +52 -59
  267. package/app/m/sales/ReferralAgreement/index.html +52 -59
  268. package/app/m/sales/ReferralLink/index.html +52 -59
  269. package/app/m/sales/ReferralProgram/index.html +52 -59
  270. package/app/m/sales/ReferralTermSnapshot/index.html +52 -59
  271. package/app/m/sales/ReferralTouch/index.html +52 -59
  272. package/app/m/sales/Referrer/index.html +52 -59
  273. package/app/m/sales/SalesActivity/index.html +52 -59
  274. package/app/m/sales/SalesRepresentative/index.html +52 -59
  275. package/app/m/sites/Site/index.html +52 -59
  276. package/app/m/sites/SiteAgentBinding/index.html +52 -59
  277. package/app/m/social/OAuthState/index.html +52 -59
  278. package/app/m/social/SocialAccount/index.html +52 -59
  279. package/app/m/social/SocialPost/index.html +52 -59
  280. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +52 -59
  281. package/app/m/subscriptions/BillingAdjustment/index.html +52 -59
  282. package/app/m/subscriptions/ClientCharge/index.html +52 -59
  283. package/app/m/subscriptions/CreditGrant/index.html +52 -59
  284. package/app/m/subscriptions/PricingRule/index.html +52 -59
  285. package/app/m/subscriptions/RetailCharge/index.html +52 -59
  286. package/app/m/subscriptions/SpendingPolicy/index.html +52 -59
  287. package/app/m/subscriptions/SubscriptionPlan/index.html +52 -59
  288. package/app/m/subscriptions/TenantSubscription/index.html +52 -59
  289. package/app/m/subscriptions/TenantUsageMetric/index.html +52 -59
  290. package/app/m/support/ServiceTimeEntry/index.html +52 -59
  291. package/app/m/support/SupportAiRun/index.html +52 -59
  292. package/app/m/support/SupportAvailability/index.html +52 -59
  293. package/app/m/support/SupportCase/index.html +52 -59
  294. package/app/m/support/SupportCaseEvent/index.html +52 -59
  295. package/app/m/support/SupportChannelBinding/index.html +52 -59
  296. package/app/m/support/SupportCharge/index.html +52 -59
  297. package/app/m/support/SupportCompensation/index.html +52 -59
  298. package/app/m/support/SupportCompensationPlan/index.html +52 -59
  299. package/app/m/support/SupportEscalation/index.html +52 -59
  300. package/app/m/support/SupportInteraction/index.html +52 -59
  301. package/app/m/support/SupportPlan/index.html +52 -59
  302. package/app/m/support/SupportPolicy/index.html +52 -59
  303. package/app/m/support/SupportQualification/index.html +52 -59
  304. package/app/m/support/SupportServiceTarget/index.html +52 -59
  305. package/app/m/support/SupportSpecialist/index.html +52 -59
  306. package/app/m/support/SupportWorkLink/index.html +52 -59
  307. package/app/m/tags/Tag/index.html +52 -59
  308. package/app/m/tags/TagAlias/index.html +52 -59
  309. package/app/m/timesheets/AttendanceBreak/index.html +52 -59
  310. package/app/m/timesheets/AttendancePunch/index.html +52 -59
  311. package/app/m/timesheets/AttendanceSegment/index.html +89 -0
  312. package/app/m/timesheets/ServiceChargeSnapshot/index.html +52 -59
  313. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +52 -59
  314. package/app/m/timesheets/ServiceTimeEntry/index.html +52 -59
  315. package/app/m/users/Group/index.html +52 -59
  316. package/app/m/users/GroupMember/index.html +52 -59
  317. package/app/m/users/GroupRole/index.html +52 -59
  318. package/app/m/users/Membership/index.html +53 -60
  319. package/app/m/users/MembershipOverride/index.html +52 -59
  320. package/app/m/users/Permission/index.html +52 -59
  321. package/app/m/users/Role/index.html +52 -59
  322. package/app/m/users/RolePermission/index.html +52 -59
  323. package/app/m/users/Session/index.html +52 -59
  324. package/app/m/users/Tenant/index.html +52 -59
  325. package/app/m/users/TenantIntegration/index.html +52 -59
  326. package/app/m/users/TenantPermissionOverride/index.html +52 -59
  327. package/app/m/users/User/index.html +52 -59
  328. package/app/m/video/Character/index.html +52 -59
  329. package/app/m/video/CharacterAsset/index.html +52 -59
  330. package/app/m/video/CompositeJob/index.html +52 -59
  331. package/app/m/video/Performer/index.html +52 -59
  332. package/app/m/video/PerformerAsset/index.html +52 -59
  333. package/app/m/video/Scene/index.html +52 -59
  334. package/app/m/video/SceneAsset/index.html +52 -59
  335. package/app/m/video/VideoComposition/index.html +52 -59
  336. package/app/m/video/VideoCompositionAsset/index.html +52 -59
  337. package/app/m/video/VideoSequence/index.html +52 -59
  338. package/app/m/video/VideoSequenceAsset/index.html +52 -59
  339. package/app/m/video/VideoShot/index.html +52 -59
  340. package/app/m/video/VideoShotAsset/index.html +52 -59
  341. package/app/m/video/VideoShotCharacter/index.html +52 -59
  342. package/app/m/video/VideoWorkflow/index.html +52 -59
  343. package/app/m/voice/VoiceOutput/index.html +52 -59
  344. package/app/m/voice/VoiceProfile/index.html +52 -59
  345. package/app/m/voice/VoiceSample/index.html +52 -59
  346. package/app/packages/ads/index.html +50 -57
  347. package/app/packages/analytics/index.html +50 -57
  348. package/app/packages/approvals/index.html +50 -57
  349. package/app/packages/assets/index.html +50 -57
  350. package/app/packages/chat/index.html +50 -57
  351. package/app/packages/comments/index.html +50 -57
  352. package/app/packages/commerce/index.html +50 -57
  353. package/app/packages/content/index.html +50 -57
  354. package/app/packages/events/index.html +50 -57
  355. package/app/packages/expenses/index.html +50 -57
  356. package/app/packages/facts/index.html +50 -57
  357. package/app/packages/fields/index.html +50 -57
  358. package/app/packages/human-resources/index.html +50 -57
  359. package/app/packages/images/index.html +50 -57
  360. package/app/packages/index.html +49 -55
  361. package/app/packages/ingestion/index.html +85 -0
  362. package/app/packages/inventory/index.html +50 -57
  363. package/app/packages/ledgers/index.html +50 -57
  364. package/app/packages/manufacturing/index.html +50 -57
  365. package/app/packages/marketing/index.html +50 -57
  366. package/app/packages/messages/index.html +50 -57
  367. package/app/packages/places/index.html +50 -57
  368. package/app/packages/preferences/index.html +50 -57
  369. package/app/packages/products/index.html +50 -57
  370. package/app/packages/profiles/index.html +50 -57
  371. package/app/packages/projects/index.html +50 -57
  372. package/app/packages/properties/index.html +50 -57
  373. package/app/packages/reports/index.html +50 -57
  374. package/app/packages/sales/index.html +50 -57
  375. package/app/packages/sites/index.html +50 -57
  376. package/app/packages/social/index.html +50 -57
  377. package/app/packages/subscriptions/index.html +50 -57
  378. package/app/packages/support/index.html +50 -57
  379. package/app/packages/tags/index.html +50 -57
  380. package/app/packages/timesheets/index.html +50 -57
  381. package/app/packages/users/index.html +50 -57
  382. package/app/packages/video/index.html +50 -57
  383. package/app/packages/voice/index.html +50 -57
  384. package/app/packages/webhooks/index.html +85 -0
  385. package/app/recipes/account-access/help/index.html +52 -57
  386. package/app/recipes/account-access/index.html +57 -59
  387. package/app/recipes/activity/help/index.html +52 -57
  388. package/app/recipes/activity/index.html +57 -59
  389. package/app/recipes/agreements/help/index.html +52 -57
  390. package/app/recipes/agreements/index.html +57 -59
  391. package/app/recipes/analytics.reports/help/index.html +52 -57
  392. package/app/recipes/analytics.reports/index.html +57 -59
  393. package/app/recipes/assets/help/index.html +52 -57
  394. package/app/recipes/assets/index.html +57 -59
  395. package/app/recipes/billing/help/index.html +52 -57
  396. package/app/recipes/billing/index.html +57 -59
  397. package/app/recipes/chat.assistant/help/index.html +52 -57
  398. package/app/recipes/chat.assistant/index.html +57 -59
  399. package/app/recipes/comments/help/index.html +52 -57
  400. package/app/recipes/comments/index.html +57 -59
  401. package/app/recipes/commerce.customers/help/index.html +52 -57
  402. package/app/recipes/commerce.customers/index.html +57 -59
  403. package/app/recipes/commerce.estimates/help/index.html +52 -57
  404. package/app/recipes/commerce.estimates/index.html +57 -59
  405. package/app/recipes/commerce.purchases/help/index.html +52 -57
  406. package/app/recipes/commerce.purchases/index.html +57 -59
  407. package/app/recipes/commerce.sales/help/index.html +52 -57
  408. package/app/recipes/commerce.sales/index.html +57 -59
  409. package/app/recipes/commerce.vendors/help/index.html +52 -57
  410. package/app/recipes/commerce.vendors/index.html +57 -59
  411. package/app/recipes/commerce.wholesale/help/index.html +52 -57
  412. package/app/recipes/commerce.wholesale/index.html +57 -59
  413. package/app/recipes/events.calendar/help/index.html +52 -57
  414. package/app/recipes/events.calendar/index.html +57 -59
  415. package/app/recipes/expenses.tracking/help/index.html +88 -0
  416. package/app/recipes/expenses.tracking/index.html +92 -0
  417. package/app/recipes/fields.form-customization/help/index.html +52 -57
  418. package/app/recipes/fields.form-customization/index.html +57 -59
  419. package/app/recipes/ingestion/help/index.html +88 -0
  420. package/app/recipes/ingestion/index.html +93 -0
  421. package/app/recipes/integrations/help/index.html +88 -0
  422. package/app/recipes/integrations/index.html +92 -0
  423. package/app/recipes/inventory.stock/help/index.html +52 -57
  424. package/app/recipes/inventory.stock/index.html +57 -59
  425. package/app/recipes/ledgers.bookkeeping/help/index.html +52 -57
  426. package/app/recipes/ledgers.bookkeeping/index.html +57 -59
  427. package/app/recipes/messages/help/index.html +52 -57
  428. package/app/recipes/messages/index.html +57 -59
  429. package/app/recipes/products/help/index.html +52 -57
  430. package/app/recipes/products/index.html +57 -59
  431. package/app/recipes/projects.tracker/help/index.html +52 -57
  432. package/app/recipes/projects.tracker/index.html +57 -59
  433. package/app/recipes/reports.materialized/help/index.html +52 -57
  434. package/app/recipes/reports.materialized/index.html +57 -59
  435. package/app/recipes/reports.runtime/help/index.html +88 -0
  436. package/app/recipes/reports.runtime/index.html +92 -0
  437. package/app/recipes/sales.pipeline/help/index.html +52 -57
  438. package/app/recipes/sales.pipeline/index.html +57 -59
  439. package/app/recipes/tags.taxonomy/help/index.html +52 -57
  440. package/app/recipes/tags.taxonomy/index.html +57 -59
  441. package/app/recipes/team-collaboration/help/index.html +52 -57
  442. package/app/recipes/team-collaboration/index.html +57 -59
  443. package/app/recipes/timesheets.time-entries/help/index.html +88 -0
  444. package/app/recipes/timesheets.time-entries/index.html +92 -0
  445. package/app/s/custom-accounts/index.html +82 -0
  446. package/app/s/custom-appointments/index.html +82 -0
  447. package/app/s/custom-billing/index.html +47 -54
  448. package/app/s/custom-buying/index.html +47 -54
  449. package/app/s/custom-checkout/index.html +82 -0
  450. package/app/s/custom-classes/index.html +47 -54
  451. package/app/s/custom-clients/index.html +82 -0
  452. package/app/s/custom-events/index.html +82 -0
  453. package/app/s/custom-fleet/index.html +82 -0
  454. package/app/s/custom-giving/index.html +82 -0
  455. package/app/s/custom-jobs/index.html +47 -54
  456. package/app/s/custom-kitchen/index.html +47 -54
  457. package/app/s/custom-material/index.html +47 -54
  458. package/app/s/custom-meetings/index.html +82 -0
  459. package/app/s/custom-members/index.html +47 -54
  460. package/app/s/custom-parts/index.html +47 -54
  461. package/app/s/custom-rentals/index.html +82 -0
  462. package/app/s/custom-roastery/index.html +82 -0
  463. package/app/s/custom-schedule/index.html +47 -54
  464. package/app/s/custom-shelf/index.html +82 -0
  465. package/app/s/custom-shop/index.html +47 -54
  466. package/app/s/custom-wholesale/index.html +47 -54
  467. package/app/s/custom-work/index.html +82 -0
  468. package/app/s/custom-yard/index.html +82 -0
  469. package/app/s/section-access-control/index.html +47 -54
  470. package/app/s/section-account-security/index.html +47 -54
  471. package/app/s/section-accounting/index.html +47 -54
  472. package/app/s/section-activity/index.html +47 -54
  473. package/app/s/section-agreements/index.html +47 -54
  474. package/app/s/section-analytics/index.html +47 -54
  475. package/app/s/section-assets/index.html +47 -54
  476. package/app/s/section-billing/index.html +47 -54
  477. package/app/s/section-calendar/index.html +47 -54
  478. package/app/s/section-catalog/index.html +47 -54
  479. package/app/s/section-chat.assistant/index.html +47 -54
  480. package/app/s/section-comments/index.html +47 -54
  481. package/app/s/section-fields.form-customization/index.html +47 -54
  482. package/app/s/section-ingestion/index.html +82 -0
  483. package/app/s/section-integrations/index.html +82 -0
  484. package/app/s/section-messages/index.html +47 -54
  485. package/app/s/section-more/index.html +47 -54
  486. package/app/s/section-operations/index.html +47 -54
  487. package/app/s/section-projects/index.html +47 -54
  488. package/app/s/section-purchasing/index.html +47 -54
  489. package/app/s/section-reports.materialized/index.html +47 -54
  490. package/app/s/section-reports.runtime/index.html +82 -0
  491. package/app/s/section-sales/index.html +47 -54
  492. package/app/s/section-taxonomy/index.html +47 -54
  493. package/app/s/section-team/index.html +47 -54
  494. package/app/s/section-work/index.html +82 -0
  495. package/dist/ai/state.svelte.d.ts +13 -0
  496. package/dist/ai/state.svelte.js +33 -0
  497. package/dist/assistant/change.d.ts +14 -3
  498. package/dist/assistant/change.js +26 -3
  499. package/dist/assistant/engine.js +5 -1
  500. package/dist/assistant/prompt.js +7 -3
  501. package/dist/catalog/catalog.json +11263 -14455
  502. package/dist/catalog/generate/exclusions.d.ts +2 -0
  503. package/dist/catalog/generate/exclusions.js +14 -0
  504. package/dist/catalog/generate/extract.js +28 -7
  505. package/dist/catalog/types.d.ts +7 -0
  506. package/dist/components/AdvancedStyles.svelte +138 -0
  507. package/dist/components/AdvancedStyles.svelte.d.ts +6 -0
  508. package/dist/components/AiModelsPage.svelte +40 -0
  509. package/dist/components/AiModelsPage.svelte.d.ts +7 -0
  510. package/dist/components/AiSetup.svelte +9 -6
  511. package/dist/components/AiStatusIcons.svelte +8 -5
  512. package/dist/components/AppSettings.svelte +105 -1
  513. package/dist/components/BrowserAssistant.svelte +16 -17
  514. package/dist/components/BrowserAssistant.svelte.d.ts +2 -0
  515. package/dist/components/ChildRecords.svelte +61 -14
  516. package/dist/components/ChildRecords.svelte.d.ts +1 -0
  517. package/dist/components/ConnectTools.svelte +5 -2
  518. package/dist/components/CookbooksPanel.svelte +56 -33
  519. package/dist/components/CopyButton.svelte +65 -0
  520. package/dist/components/CopyButton.svelte.d.ts +24 -0
  521. package/dist/components/ExportPanel.svelte +292 -57
  522. package/dist/components/ExportPanel.svelte.d.ts +10 -1
  523. package/dist/components/FeatureCard.svelte +21 -10
  524. package/dist/components/FeaturesPanel.svelte +4 -1
  525. package/dist/components/FieldInput.svelte +6 -3
  526. package/dist/components/FieldMapForm.svelte +6 -10
  527. package/dist/components/FieldMapForm.svelte.d.ts +1 -0
  528. package/dist/components/FormWorkspace.svelte +80 -9
  529. package/dist/components/FormWorkspace.svelte.d.ts +1 -0
  530. package/dist/components/HeaderIconLink.svelte +86 -0
  531. package/dist/components/HeaderIconLink.svelte.d.ts +14 -0
  532. package/dist/components/HelpView.svelte +3 -0
  533. package/dist/components/ModelOptions.svelte +13 -2
  534. package/dist/components/ModelPage.svelte +33 -5
  535. package/dist/components/ModelPage.svelte.d.ts +4 -0
  536. package/dist/components/ModelWorkspace.svelte +148 -50
  537. package/dist/components/ModelWorkspace.svelte.d.ts +4 -0
  538. package/dist/components/PackagePage.svelte +96 -0
  539. package/dist/components/PackagePage.svelte.d.ts +9 -0
  540. package/dist/components/ProductMedia.svelte +95 -0
  541. package/dist/components/ProductMedia.svelte.d.ts +10 -0
  542. package/dist/components/RecipeCards.svelte +13 -1
  543. package/dist/components/RecipeHelp.svelte +3 -0
  544. package/dist/components/RecipeOptions.svelte +13 -1
  545. package/dist/components/RecordFeatures.svelte +22 -8
  546. package/dist/components/RecordView.svelte +354 -0
  547. package/dist/components/RecordView.svelte.d.ts +14 -0
  548. package/dist/components/RelationField.svelte +5 -2
  549. package/dist/components/SectionActions.svelte +8 -5
  550. package/dist/components/SectionHeading.svelte +63 -0
  551. package/dist/components/SectionHeading.svelte.d.ts +11 -0
  552. package/dist/components/SectionIcons.svelte +15 -3
  553. package/dist/components/SectionOverview.svelte +33 -3
  554. package/dist/components/SectionOverview.svelte.d.ts +4 -0
  555. package/dist/components/SectionPage.svelte +25 -165
  556. package/dist/components/SectionView.svelte +172 -0
  557. package/dist/components/SectionView.svelte.d.ts +18 -0
  558. package/dist/components/SettingsPanel.svelte +3 -9
  559. package/dist/components/SettingsPanel.svelte.d.ts +1 -5
  560. package/dist/components/ThemeBridge.svelte +80 -4
  561. package/dist/components/ThemeBridge.svelte.d.ts +5 -1
  562. package/dist/components/ThemeSection.svelte +208 -117
  563. package/dist/components/ThemeSection.svelte.d.ts +3 -7
  564. package/dist/components/VariantGridForm.svelte +9 -13
  565. package/dist/components/VariantGridForm.svelte.d.ts +1 -0
  566. package/dist/components/VoiceTyping.svelte +3 -0
  567. package/dist/cookbook/describe.d.ts +29 -0
  568. package/dist/cookbook/describe.js +164 -0
  569. package/dist/cookbook/file.d.ts +6 -0
  570. package/dist/cookbook/file.js +18 -4
  571. package/dist/cookbook/prompt.d.ts +49 -0
  572. package/dist/cookbook/prompt.js +96 -0
  573. package/dist/cookbook/store.svelte.d.ts +13 -0
  574. package/dist/cookbook/store.svelte.js +36 -8
  575. package/dist/core/prompt.js +10 -1
  576. package/dist/core/reply.d.ts +6 -1
  577. package/dist/data/children.d.ts +50 -6
  578. package/dist/data/children.js +146 -16
  579. package/dist/data/derived.d.ts +37 -29
  580. package/dist/data/derived.js +49 -30
  581. package/dist/data/display.d.ts +21 -8
  582. package/dist/data/display.js +74 -11
  583. package/dist/data/fakes.d.ts +48 -9
  584. package/dist/data/fakes.js +146 -22
  585. package/dist/data/labels.d.ts +7 -2
  586. package/dist/data/labels.js +12 -2
  587. package/dist/data/list-sort.d.ts +8 -0
  588. package/dist/data/list-sort.js +45 -0
  589. package/dist/data/money.d.ts +225 -0
  590. package/dist/data/money.js +411 -0
  591. package/dist/data/packs.d.ts +13 -0
  592. package/dist/data/packs.js +1224 -0
  593. package/dist/data/planner-source.js +120 -3
  594. package/dist/data/source.d.ts +13 -2
  595. package/dist/data/source.js +274 -40
  596. package/dist/features/palette.d.ts +2 -0
  597. package/dist/features/palette.js +1 -1
  598. package/dist/forms/stock.d.ts +1 -1
  599. package/dist/forms/stock.js +3 -1
  600. package/dist/index.d.ts +7 -2
  601. package/dist/index.js +6 -1
  602. package/dist/kitchen/LiveKitchenBridge.svelte +73 -0
  603. package/dist/kitchen/LiveKitchenBridge.svelte.d.ts +8 -0
  604. package/dist/kitchen/live.d.ts +7 -0
  605. package/dist/kitchen/live.js +51 -0
  606. package/dist/library/icons.js +34 -0
  607. package/dist/library/library.json +1546 -15
  608. package/dist/library/pending.json +5 -0
  609. package/dist/library/types.d.ts +4 -0
  610. package/dist/motion/tokens.d.ts +6 -0
  611. package/dist/motion/tokens.js +32 -0
  612. package/dist/motion/view-transition.d.ts +13 -0
  613. package/dist/motion/view-transition.js +17 -0
  614. package/dist/overviews/definitions.d.ts +41 -2
  615. package/dist/overviews/definitions.js +111 -4
  616. package/dist/overviews/models.d.ts +10 -0
  617. package/dist/overviews/models.js +19 -0
  618. package/dist/overviews/registry.d.ts +92 -5
  619. package/dist/overviews/registry.js +468 -58
  620. package/dist/overviews/validate.js +2 -2
  621. package/dist/planner/Planner.svelte +374 -166
  622. package/dist/planner/PlannerControls.svelte +255 -0
  623. package/dist/planner/PlannerControls.svelte.d.ts +17 -0
  624. package/dist/planner/PlannerLifecycle.svelte +73 -0
  625. package/dist/planner/PlannerLifecycle.svelte.d.ts +9 -0
  626. package/dist/planner/app.svelte.d.ts +12 -2
  627. package/dist/planner/app.svelte.js +13 -3
  628. package/dist/planner/assistant.js +20 -2
  629. package/dist/planner/commands/adapter.js +9 -2
  630. package/dist/planner/commands/types.d.ts +1 -1
  631. package/dist/planner/commands/types.js +1 -0
  632. package/dist/planner/header-icons.d.ts +12 -0
  633. package/dist/planner/header-icons.js +12 -0
  634. package/dist/planner/host/HostPlanner.svelte +70 -0
  635. package/dist/planner/host/HostPlanner.svelte.d.ts +17 -0
  636. package/dist/planner/host/session.svelte.d.ts +28 -0
  637. package/dist/planner/host/session.svelte.js +186 -0
  638. package/dist/planner/routes.d.ts +49 -0
  639. package/dist/planner/routes.js +64 -0
  640. package/dist/planner/shell.d.ts +40 -0
  641. package/dist/planner/shell.js +56 -0
  642. package/dist/planner/tab.svelte.d.ts +6 -3
  643. package/dist/planner/tab.svelte.js +11 -4
  644. package/dist/planner/title.d.ts +15 -0
  645. package/dist/planner/title.js +21 -0
  646. package/dist/planner/title.svelte.d.ts +6 -0
  647. package/dist/planner/title.svelte.js +11 -0
  648. package/dist/planner/types.d.ts +39 -7
  649. package/dist/products/media.d.ts +20 -0
  650. package/dist/products/media.js +65 -0
  651. package/dist/recipes/help/descriptions.json +1 -3
  652. package/dist/recipes/index.d.ts +2 -0
  653. package/dist/recipes/index.js +6 -0
  654. package/dist/recipes/plumbing.d.ts +35 -1
  655. package/dist/recipes/plumbing.js +74 -0
  656. package/dist/screens/definition.d.ts +35 -0
  657. package/dist/screens/definition.js +132 -0
  658. package/dist/screens/relations.d.ts +17 -0
  659. package/dist/screens/relations.js +98 -0
  660. package/dist/screens/totals.d.ts +37 -0
  661. package/dist/screens/totals.js +65 -0
  662. package/dist/sections/info.d.ts +1 -1
  663. package/dist/sections/info.js +2 -2
  664. package/dist/settings/app-settings.d.ts +17 -1
  665. package/dist/settings/app-settings.js +40 -3
  666. package/dist/smrt-version.d.ts +2 -0
  667. package/dist/smrt-version.js +4 -0
  668. package/dist/styles/planner-forms.css +53 -0
  669. package/dist/styles/planner-lists.css +43 -0
  670. package/dist/theme/css-highlight.d.ts +6 -0
  671. package/dist/theme/css-highlight.js +34 -0
  672. package/dist/theme/custom-css.svelte.d.ts +34 -0
  673. package/dist/theme/custom-css.svelte.js +246 -0
  674. package/dist/theme/runtime.js +25 -5
  675. package/dist/theme/theme.d.ts +26 -3
  676. package/dist/theme/theme.js +70 -2
  677. package/dist/upstream/overlay.d.ts +14 -5
  678. package/dist/upstream/overlay.js +20 -2
  679. package/package.json +12 -6
  680. package/app/_app/immutable/assets/0.B5zXkXe_.css +0 -1
  681. package/app/_app/immutable/assets/10.hpcnxvK1.css +0 -1
  682. package/app/_app/immutable/assets/11.D7zoXfVV.css +0 -1
  683. package/app/_app/immutable/assets/12.CPobm1ED.css +0 -1
  684. package/app/_app/immutable/assets/2.CyaWdRdI.css +0 -1
  685. package/app/_app/immutable/assets/3.BlPQOes8.css +0 -1
  686. package/app/_app/immutable/assets/8.2gQeKBp_.css +0 -1
  687. package/app/_app/immutable/assets/9.HOPT4xtg.css +0 -1
  688. package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +0 -1
  689. package/app/_app/immutable/assets/Button.DkP0qkG9.css +0 -1
  690. package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +0 -1
  691. package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +0 -1
  692. package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +0 -1
  693. package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +0 -1
  694. package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +0 -1
  695. package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +0 -1
  696. package/app/_app/immutable/assets/dist.C5nHBk_O.css +0 -1
  697. package/app/_app/immutable/assets/feedback.BVKAwFck.css +0 -1
  698. package/app/_app/immutable/assets/forms.BChZ2RWM.css +0 -1
  699. package/app/_app/immutable/assets/percent.LH0z-ozZ.css +0 -1
  700. package/app/_app/immutable/assets/store.CGDwHkkF.css +0 -1
  701. package/app/_app/immutable/assets/ui.B1A1Zl2p.css +0 -1
  702. package/app/_app/immutable/assets/workspace.BIMkuZDb.css +0 -1
  703. package/app/_app/immutable/chunks/1okeBSoq.js +0 -1
  704. package/app/_app/immutable/chunks/2jFBkS1C.js +0 -1
  705. package/app/_app/immutable/chunks/6P9zxrzU.js +0 -1
  706. package/app/_app/immutable/chunks/B32EWqI8.js +0 -9
  707. package/app/_app/immutable/chunks/B4Kevpe0.js +0 -1
  708. package/app/_app/immutable/chunks/BKwRT_1p.js +0 -1
  709. package/app/_app/immutable/chunks/BS4h9ES-.js +0 -1
  710. package/app/_app/immutable/chunks/CMhpRMKg.js +0 -1
  711. package/app/_app/immutable/chunks/CPRHZZeW.js +0 -1
  712. package/app/_app/immutable/chunks/CRQ1Pmzr.js +0 -1
  713. package/app/_app/immutable/chunks/CWtfVMDz.js +0 -1
  714. package/app/_app/immutable/chunks/Chyo8rdT.js +0 -3
  715. package/app/_app/immutable/chunks/Ci0DUht6.js +0 -34
  716. package/app/_app/immutable/chunks/CmmuWmp6.js +0 -2
  717. package/app/_app/immutable/chunks/CrFNLK0f.js +0 -1
  718. package/app/_app/immutable/chunks/CsprTb3f.js +0 -2
  719. package/app/_app/immutable/chunks/CygC84VT.js +0 -2
  720. package/app/_app/immutable/chunks/D0VgZnk1.js +0 -1
  721. package/app/_app/immutable/chunks/DD7gpKb2.js +0 -1
  722. package/app/_app/immutable/chunks/DNRgqfTx.js +0 -1
  723. package/app/_app/immutable/chunks/DVRKjN-E.js +0 -1
  724. package/app/_app/immutable/chunks/D_J_XtJy.js +0 -846
  725. package/app/_app/immutable/chunks/Dp9GVO-9.js +0 -1
  726. package/app/_app/immutable/chunks/DqcD-WtP.js +0 -1
  727. package/app/_app/immutable/chunks/QukgIHDX.js +0 -1
  728. package/app/_app/immutable/chunks/WxSPP8QW.js +0 -4
  729. package/app/_app/immutable/chunks/Xp1g1t4n.js +0 -3
  730. package/app/_app/immutable/chunks/leQCwW2d.js +0 -1
  731. package/app/_app/immutable/chunks/p6bgzXiY.js +0 -1
  732. package/app/_app/immutable/entry/app.IZIJXhgq.js +0 -2
  733. package/app/_app/immutable/entry/start.BuaYHD1N.js +0 -1
  734. package/app/_app/immutable/nodes/0.m_U8WC7E.js +0 -10
  735. package/app/_app/immutable/nodes/1.Crw8ULhB.js +0 -1
  736. package/app/_app/immutable/nodes/10.1nQxyH9H.js +0 -4
  737. package/app/_app/immutable/nodes/11.Cw0JnQF3.js +0 -1
  738. package/app/_app/immutable/nodes/12.BIocA1aI.js +0 -1
  739. package/app/_app/immutable/nodes/2.CR5BwGnt.js +0 -17
  740. package/app/_app/immutable/nodes/3.1B56hgAG.js +0 -1
  741. package/app/_app/immutable/nodes/4.SSIC7sUh.js +0 -1
  742. package/app/_app/immutable/nodes/5.DgdwleDQ.js +0 -1
  743. package/app/_app/immutable/nodes/6.DmD9rqLU.js +0 -1
  744. package/app/_app/immutable/nodes/7.DdngsBmo.js +0 -1
  745. package/app/_app/immutable/nodes/8.D2Mszsua.js +0 -3
  746. package/app/_app/immutable/nodes/9.CLYsywul.js +0 -1
  747. package/app/m/content/Contents/index.html +0 -96
  748. package/app/m/preferences/UiPreferenceRecord/index.html +0 -96
  749. package/app/m/users/AccessRequest/index.html +0 -96
  750. package/app/m/users/ResourceGrant/index.html +0 -96
  751. package/app/m/users/UsersCliAuthRequest/index.html +0 -96
  752. package/app/m/users/UsersMagicLinkToken/index.html +0 -96
@@ -16,3 +16,5 @@
16
16
  export declare const EXCLUDED_PACKAGES: Readonly<Record<string, string>>;
17
17
  export declare const PACKAGE_SCOPE = "@happyvertical/";
18
18
  export declare const PACKAGE_PREFIX = "@happyvertical/smrt-";
19
+ /** Is `field` of a model in `packageName` a framework-managed money internal? */
20
+ export declare function isInternalMoneyField(packageName: string, field: string): boolean;
@@ -31,3 +31,17 @@ export const EXCLUDED_PACKAGES = {
31
31
  };
32
32
  export const PACKAGE_SCOPE = '@happyvertical/';
33
33
  export const PACKAGE_PREFIX = `${PACKAGE_SCOPE}smrt-`;
34
+ /**
35
+ * Money-model internals of smrt-commerce (smrt#3988): serialized snapshots
36
+ * (`*Json`: tax components, registrations, credit bases, sync state) and the
37
+ * freeze identity (`moneySnapshotId`). The framework writes them; generated
38
+ * surfaces and cookbooks never do. They stay in the catalog marked `system`,
39
+ * so forms, lists, record pages and policies skip them while sample data
40
+ * still keeps a line's tax snapshot.
41
+ */
42
+ const INTERNAL_MONEY_FIELDS = new Set(['moneySnapshotId']);
43
+ /** Is `field` of a model in `packageName` a framework-managed money internal? */
44
+ export function isInternalMoneyField(packageName, field) {
45
+ return (packageName === `${PACKAGE_PREFIX}commerce` &&
46
+ (INTERNAL_MONEY_FIELDS.has(field) || /[a-z]Json$/.test(field)));
47
+ }
@@ -1,4 +1,4 @@
1
- import { PACKAGE_PREFIX } from "./exclusions.js";
1
+ import { isInternalMoneyField, PACKAGE_PREFIX } from "./exclusions.js";
2
2
  import { extractBrowser, extractRecipeMetadata } from "./recipe-metadata.js";
3
3
  /** Fields the framework manages; shown in the catalog, hidden from forms. */
4
4
  const SYSTEM_FIELDS = new Set([
@@ -10,7 +10,22 @@ const SYSTEM_FIELDS = new Set([
10
10
  'tenantId',
11
11
  ]);
12
12
  /** Field types that hold other rows, not a value a form can edit. */
13
- const NON_VALUE_TYPES = new Set(['oneToMany', 'meta']);
13
+ const NON_VALUE_TYPES = new Set(['oneToMany']);
14
+ /**
15
+ * A `Meta<T>` field is a value kept in the row's `_meta_data` column: the form
16
+ * edits it as its underlying type (`_meta.underlyingType`). One without that
17
+ * type is not a value the planner can show.
18
+ */
19
+ function valueType(field) {
20
+ if (NON_VALUE_TYPES.has(field.type))
21
+ return undefined;
22
+ if (field.type !== 'meta')
23
+ return field.type;
24
+ const underlying = field._meta?.underlyingType;
25
+ return typeof underlying === 'string' && underlying && underlying !== 'meta'
26
+ ? underlying
27
+ : undefined;
28
+ }
14
29
  const CRUD_VERBS = ['list', 'get', 'create', 'update', 'delete'];
15
30
  const byName = (a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
16
31
  /** `@happyvertical/smrt-products` -> `products`. */
@@ -27,6 +42,7 @@ function primitiveDefault(value) {
27
42
  ? value
28
43
  : undefined;
29
44
  }
45
+ const FORMATS = new Set(['money', 'date', 'datetime', 'percent']);
30
46
  const WIDGETS = new Set([
31
47
  'textarea',
32
48
  'currency',
@@ -47,6 +63,9 @@ function extractUi(value) {
47
63
  ? { order: raw.order }
48
64
  : {}),
49
65
  ...(typeof raw.locked === 'boolean' ? { locked: raw.locked } : {}),
66
+ ...(typeof raw.format === 'string' && FORMATS.has(raw.format)
67
+ ? { format: raw.format }
68
+ : {}),
50
69
  ...(typeof raw.widget === 'string' && WIDGETS.has(raw.widget)
51
70
  ? { widget: raw.widget }
52
71
  : {}),
@@ -60,14 +79,15 @@ function extractEnum(value) {
60
79
  ? value
61
80
  : undefined;
62
81
  }
63
- function extractFields(raw) {
82
+ function extractFields(raw, packageName) {
64
83
  const fields = [];
65
84
  for (const [name, field] of Object.entries(raw.fields)) {
66
- if (NON_VALUE_TYPES.has(field.type))
85
+ const type = valueType(field);
86
+ if (!type)
67
87
  continue;
68
88
  const entry = {
69
89
  name,
70
- type: field.type,
90
+ type,
71
91
  required: field.required === true,
72
92
  };
73
93
  const fallback = primitiveDefault(field.default);
@@ -85,8 +105,9 @@ function extractFields(raw) {
85
105
  if (typeof described === 'string' && described.trim()) {
86
106
  entry.description = described.trim();
87
107
  }
88
- if (SYSTEM_FIELDS.has(name))
108
+ if (SYSTEM_FIELDS.has(name) || isInternalMoneyField(packageName, name)) {
89
109
  entry.system = true;
110
+ }
90
111
  fields.push(entry);
91
112
  }
92
113
  return fields;
@@ -253,7 +274,7 @@ export function extractPackage(raw) {
253
274
  aiCallable: mcpOps.has(m.name),
254
275
  }))
255
276
  .sort(byName);
256
- const fields = extractFields(model);
277
+ const fields = extractFields(model, packageName);
257
278
  const references = [
258
279
  ...new Set(fields
259
280
  .filter((f) => f.related && ['foreignKey', 'crossPackageRef'].includes(f.type))
@@ -24,7 +24,14 @@ export interface CatalogFieldUI {
24
24
  * in when the catalog loads; a value in the manifest always wins.
25
25
  */
26
26
  widget?: CatalogFieldWidget;
27
+ /**
28
+ * How the value is shown (`_meta.ui.format`), e.g. `money`. A declared
29
+ * format wins over the planner's name-based guess (`isMoneyField`).
30
+ */
31
+ format?: CatalogFieldFormat;
27
32
  }
33
+ /** The presentation formats a manifest's `ui.format` may name. */
34
+ export type CatalogFieldFormat = 'money' | 'date' | 'datetime' | 'percent';
28
35
  /** The widget hints of happyvertical/smrt#3599. */
29
36
  export type CatalogFieldWidget = 'textarea' | 'currency' | 'email' | 'url' | 'phone';
30
37
  export interface CatalogField {
@@ -0,0 +1,138 @@
1
+ <script lang="ts">
2
+ import { onDestroy } from 'svelte';
3
+ import { cookbookStore } from '../cookbook/store.svelte.js';
4
+ import { highlightCss } from '../theme/css-highlight.js';
5
+ import {
6
+ approveCustomCss,
7
+ containCustomCss,
8
+ customCssApproved,
9
+ customCssDisabled,
10
+ shellScopeOf,
11
+ } from '../theme/custom-css.svelte.js';
12
+
13
+ interface Props {
14
+ backHref?: string;
15
+ }
16
+ let { backHref = '#/configure/' }: Props = $props();
17
+ const css = $derived(cookbookStore.theme?.customCss ?? '');
18
+ let draftCss = $state('');
19
+ let editing = $state(false);
20
+ let timer: ReturnType<typeof setTimeout> | undefined;
21
+ const tokens = $derived(highlightCss(draftCss));
22
+ // CSS that arrived with a cookbook waits for the visitor's approval.
23
+ const pending = $derived(Boolean(css) && !editing && !customCssApproved(css));
24
+ let highlight = $state<HTMLElement | null>(null);
25
+ let editor = $state<HTMLTextAreaElement | null>(null);
26
+
27
+ $effect(() => {
28
+ const stored = css;
29
+ if (!editing || stored === draftCss) {
30
+ draftCss = stored;
31
+ editing = false;
32
+ }
33
+ });
34
+
35
+ // Keep the current keystrokes on screen while the host confirms the cookbook.
36
+ $effect(() => {
37
+ if (typeof document === 'undefined' || !editing || !draftCss) return;
38
+ if (customCssDisabled(location.search)) return;
39
+ const scope = shellScopeOf(editor);
40
+ if (!scope) return;
41
+ const contained = containCustomCss(draftCss, scope);
42
+ if (!contained) return;
43
+ const style = document.createElement('style');
44
+ style.dataset.smrtPlannerDraft = '';
45
+ style.textContent = contained;
46
+ document.head.append(style);
47
+ return () => style.remove();
48
+ });
49
+
50
+ function syncScroll() {
51
+ if (highlight && editor) {
52
+ highlight.scrollTop = editor.scrollTop;
53
+ highlight.scrollLeft = editor.scrollLeft;
54
+ }
55
+ }
56
+
57
+ function setCss(value: string) {
58
+ cookbookStore.setTheme({
59
+ ...cookbookStore.theme,
60
+ customCss: value || undefined,
61
+ });
62
+ }
63
+
64
+ function editCss(value: string) {
65
+ // What the visitor types here is theirs to apply.
66
+ approveCustomCss(value);
67
+ draftCss = value;
68
+ editing = true;
69
+ clearTimeout(timer);
70
+ timer = setTimeout(() => setCss(draftCss), 400);
71
+ }
72
+
73
+ onDestroy(() => {
74
+ clearTimeout(timer);
75
+ if (editing) setCss(draftCss);
76
+ });
77
+ </script>
78
+
79
+ <section class="advanced-styles" aria-labelledby="advanced-styles-title">
80
+ <a class="back" href={backHref} data-sveltekit-reload={backHref.startsWith('/') ? true : undefined}>← Back to Theme</a>
81
+ <div class="heading">
82
+ <div>
83
+ <h1 id="advanced-styles-title">Advanced Styles</h1>
84
+ <p>Make this app your own with CSS. Changes appear as you type and are saved with your cookbook.</p>
85
+ </div>
86
+ <span class="live"><span aria-hidden="true"></span>Live preview</span>
87
+ </div>
88
+ {#if pending}
89
+ <div class="pending" role="status">
90
+ <p>This cookbook brings its own CSS. It is not applied until you review and approve it.</p>
91
+ <button type="button" onclick={() => approveCustomCss(css)}>Apply these styles</button>
92
+ </div>
93
+ {/if}
94
+ <label for="advanced-css">Custom CSS</label>
95
+ <div class="editor">
96
+ <pre bind:this={highlight} aria-hidden="true"><code>{#each tokens as token}<span class:comment={token.kind === 'comment'} class:selector={token.kind === 'selector'} class:property={token.kind === 'property'} class:value={token.kind === 'value'} class:punctuation={token.kind === 'punctuation'}>{token.text}</span>{/each}</code></pre>
97
+ <textarea id="advanced-css" bind:this={editor} value={draftCss} oninput={(event) => editCss(event.currentTarget.value)}
98
+ onscroll={syncScroll} spellcheck="false" maxlength="65536" wrap="off"
99
+ placeholder="/* Add your app styles here */" aria-describedby="advanced-css-help"></textarea>
100
+ </div>
101
+ <p id="advanced-css-help" class="help">Ask your agent to write styles here, or start with a selector like <code>.smrt-admin-shell</code>. Clearing the editor removes your custom styles. Styles apply only inside the app shell and cannot load files from other sites; add <code>?styles=off</code> to the address to turn them off.</p>
102
+ </section>
103
+
104
+ <style>
105
+ @layer smrt.reset, smrt.structure, smrt.theme;
106
+ @layer smrt.theme {
107
+ .advanced-styles { display: grid; gap: 1rem; max-inline-size: 72rem; }
108
+ .pending { display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-radius-medium); }
109
+ .pending p { margin: 0; }
110
+ .back { color: var(--smrt-color-primary); font-weight: 700; text-decoration: none; }
111
+ .back:hover { text-decoration: underline; }
112
+ .heading { display: flex; align-items: start; justify-content: space-between; gap: 1rem; }
113
+ h1, p { margin: 0; }
114
+ h1 { font: var(--smrt-typography-headline-large-font); letter-spacing: var(--smrt-typography-headline-large-tracking); }
115
+ .heading p, .help { color: var(--smrt-color-on-surface-variant); }
116
+ .heading p { margin-top: .35rem; }
117
+ .live { display: inline-flex; align-items: center; gap: .4rem; flex: none; padding: .4rem .65rem; border-radius: 2rem; background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); font-size: .8rem; font-weight: 700; }
118
+ .live span { inline-size: .5rem; block-size: .5rem; border-radius: 50%; background: var(--smrt-color-primary); }
119
+ label { font-weight: 700; }
120
+ .editor { position: relative; min-block-size: 24rem; border: var(--smrt-control-border); border-radius: var(--smrt-radius-large, .75rem); background: var(--smrt-surface-control); overflow: hidden; }
121
+ .editor:focus-within { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
122
+ pre, textarea { box-sizing: border-box; position: absolute; inset: 0; inline-size: 100%; block-size: 100%; margin: 0; padding: 1rem; overflow: auto; white-space: pre; tab-size: 2; font: 500 .9rem/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; letter-spacing: normal; }
123
+ pre { pointer-events: none; color: var(--smrt-color-on-surface); }
124
+ textarea { z-index: 1; border: 0; resize: none; background: transparent; color: transparent; caret-color: var(--smrt-color-on-surface); -webkit-text-fill-color: transparent; }
125
+ textarea::selection { background: color-mix(in srgb, var(--smrt-color-primary) 28%, transparent); }
126
+ textarea:focus { outline: none; }
127
+ textarea::placeholder { color: var(--smrt-color-on-surface-variant); -webkit-text-fill-color: var(--smrt-color-on-surface-variant); }
128
+ /* Syntax roles on the theme's own colours, so they follow the scheme and
129
+ the chosen brand instead of a fixed light/dark palette. */
130
+ .selector { color: var(--smrt-color-tertiary); }
131
+ .property { color: var(--smrt-color-primary); }
132
+ .value { color: var(--smrt-color-secondary); }
133
+ .comment { color: var(--smrt-color-on-surface-variant); }
134
+ .punctuation { color: var(--smrt-color-on-surface-variant); }
135
+ .help { font-size: .9rem; }
136
+ @media (max-width: 42rem) { .heading { display: grid; } .live { justify-self: start; } }
137
+ }
138
+ </style>
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ backHref?: string;
3
+ }
4
+ declare const AdvancedStyles: import("svelte").Component<Props, {}, "">;
5
+ type AdvancedStyles = ReturnType<typeof AdvancedStyles>;
6
+ export default AdvancedStyles;
@@ -0,0 +1,40 @@
1
+ <script lang="ts">
2
+ // The AI models page ("Set up your assistant"): the static app serves it at
3
+ // `/ai/`, a mounted `Planner` at `#/ai/`. Both render this.
4
+ import { aiState } from '../ai/instance.js';
5
+ import AiSetup from './AiSetup.svelte';
6
+
7
+ interface AiModelsPageProps {
8
+ /** Where the breadcrumb's "Planner" leads. */
9
+ backHref: string;
10
+ }
11
+
12
+ let { backHref }: AiModelsPageProps = $props();
13
+ </script>
14
+
15
+ <div class="ai-page">
16
+ <p class="meta"><a href={backHref}>Planner</a> / AI models</p>
17
+ <h1>Set up your assistant</h1>
18
+ <p class="privacy">{aiState.privacyNote}</p>
19
+ <AiSetup />
20
+ </div>
21
+
22
+ <style>
23
+ @layer smrt.reset, smrt.structure, smrt.theme;
24
+ @layer smrt.theme {
25
+ .ai-page {
26
+ display: grid;
27
+ gap: var(--smrt-spacing-4);
28
+ }
29
+
30
+ h1,
31
+ p {
32
+ margin: 0;
33
+ }
34
+
35
+ .meta,
36
+ .privacy {
37
+ color: var(--smrt-color-on-surface-variant);
38
+ }
39
+ }
40
+ </style>
@@ -0,0 +1,7 @@
1
+ interface AiModelsPageProps {
2
+ /** Where the breadcrumb's "Planner" leads. */
3
+ backHref: string;
4
+ }
5
+ declare const AiModelsPage: import("svelte").Component<AiModelsPageProps, {}, "">;
6
+ type AiModelsPage = ReturnType<typeof AiModelsPage>;
7
+ export default AiModelsPage;
@@ -409,6 +409,8 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
409
409
  </div>
410
410
 
411
411
  <style>
412
+ @layer smrt.reset, smrt.structure, smrt.theme;
413
+ @layer smrt.theme {
412
414
  .cards {
413
415
  display: grid;
414
416
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
@@ -423,9 +425,9 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
423
425
  padding: var(--smrt-spacing-4);
424
426
  min-width: 0;
425
427
  overflow-wrap: anywhere;
426
- border: 1px solid var(--smrt-color-outline-variant);
428
+ border: var(--smrt-hairline);
427
429
  border-radius: var(--smrt-radius-lg, 12px);
428
- background: var(--smrt-color-surface-container-low, transparent);
430
+ background: var(--smrt-surface-panel, transparent);
429
431
  }
430
432
 
431
433
  header {
@@ -441,7 +443,7 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
441
443
  width: 2.5rem;
442
444
  height: 2.5rem;
443
445
  border-radius: 50%;
444
- border: 1px solid var(--smrt-color-outline-variant);
446
+ border: var(--smrt-hairline);
445
447
  }
446
448
 
447
449
  .card[data-state='ready'] .badge {
@@ -451,13 +453,13 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
451
453
  }
452
454
 
453
455
  .card[data-state='available'] .badge {
454
- border: 1px dashed var(--smrt-color-outline);
456
+ border: 1px dashed var(--smrt-hairline-strong-color);
455
457
  color: var(--smrt-color-on-surface-variant);
456
458
  }
457
459
 
458
460
  .card[data-state='off'] .badge {
459
461
  position: relative;
460
- border: 1px dashed var(--smrt-color-outline-variant);
462
+ border: 1px dashed var(--smrt-hairline-color);
461
463
  opacity: 0.5;
462
464
  }
463
465
 
@@ -507,7 +509,7 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
507
509
  .notice {
508
510
  margin: 0 0 var(--smrt-spacing-3);
509
511
  padding: var(--smrt-spacing-3);
510
- border: 1px solid var(--smrt-color-outline-variant);
512
+ border: var(--smrt-hairline);
511
513
  border-radius: var(--smrt-radius-md, 8px);
512
514
  }
513
515
 
@@ -525,4 +527,5 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
525
527
  cursor: pointer;
526
528
  font: inherit;
527
529
  }
530
+ }
528
531
  </style>
@@ -30,6 +30,8 @@ const icons: Record<CapabilityId, string> = {
30
30
  </div>
31
31
 
32
32
  <style>
33
+ @layer smrt.reset, smrt.structure, smrt.theme;
34
+ @layer smrt.theme {
33
35
  .ai-status {
34
36
  display: flex;
35
37
  gap: var(--smrt-spacing-2);
@@ -48,12 +50,12 @@ const icons: Record<CapabilityId, string> = {
48
50
  }
49
51
 
50
52
  .cap:hover {
51
- background: var(--smrt-color-surface-container-high, transparent);
53
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
52
54
  }
53
55
 
54
56
  .cap:focus-visible {
55
- outline: 2px solid var(--smrt-color-primary);
56
- outline-offset: 2px;
57
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
58
+ outline-offset: var(--smrt-focus-ring-offset);
57
59
  }
58
60
 
59
61
  .cap[data-state='ready'] {
@@ -63,14 +65,14 @@ const icons: Record<CapabilityId, string> = {
63
65
 
64
66
  /* Set up elsewhere but not on: dashed and muted. */
65
67
  .cap[data-state='available'] {
66
- border: 1px dashed var(--smrt-color-outline);
68
+ border: 1px dashed var(--smrt-hairline-strong-color);
67
69
  color: var(--smrt-color-on-surface-variant);
68
70
  }
69
71
 
70
72
  /* Not possible here: dashed, faded and struck through. */
71
73
  .cap[data-state='off'] {
72
74
  position: relative;
73
- border: 1px dashed var(--smrt-color-outline-variant);
75
+ border: 1px dashed var(--smrt-hairline-color);
74
76
  color: var(--smrt-color-on-surface-variant);
75
77
  opacity: 0.5;
76
78
  }
@@ -83,4 +85,5 @@ const icons: Record<CapabilityId, string> = {
83
85
  border-top: 2px solid currentColor;
84
86
  transform: rotate(-45deg);
85
87
  }
88
+ }
86
89
  </style>
@@ -4,9 +4,17 @@ import {
4
4
  CurrencySelect,
5
5
  FieldLabel,
6
6
  Input,
7
+ Select,
8
+ Switch,
7
9
  } from '@happyvertical/smrt-ui/forms';
10
+ import {
11
+ defaultTaxCode,
12
+ EXAMPLE_TAX_CODES,
13
+ type SampleTaxCode,
14
+ SEEDED_TAX_CODES,
15
+ } from '../data/money.js';
8
16
  import { fractionToPercent, percentToFraction } from '../fields/percent.js';
9
- import type { AppSettings } from '../settings/app-settings.js';
17
+ import type { AppSettings, TaxRounding } from '../settings/app-settings.js';
10
18
 
11
19
  interface AppSettingsProps {
12
20
  value: AppSettings;
@@ -27,6 +35,18 @@ const TERMS = [
27
35
  ];
28
36
 
29
37
  const set = (patch: Partial<AppSettings>) => onchange({ ...value, ...patch });
38
+
39
+ /** The code new documents default to, from the tax rate (smrt's activation). */
40
+ const fallback = $derived(defaultTaxCode(value.taxRate));
41
+ /** The other codes a line can choose: the seeded ones and the example pack. */
42
+ const others = $derived(
43
+ [...SEEDED_TAX_CODES, ...EXAMPLE_TAX_CODES].filter(
44
+ (code) => code.id !== fallback.id,
45
+ ),
46
+ );
47
+ const rates = (code: SampleTaxCode) =>
48
+ code.components.map((part) => part.name).join(' + ') ||
49
+ `No tax, reported as ${code.kind.replace(/-/g, ' ')}`;
30
50
  </script>
31
51
 
32
52
  <div class="settings">
@@ -51,6 +71,33 @@ const set = (patch: Partial<AppSettings>) => onchange({ ...value, ...patch });
51
71
  <span class="percent-sign" aria-hidden="true">%</span>
52
72
  </div>
53
73
 
74
+ <div class="field">
75
+ <FieldLabel for="{idPrefix}-rounding" label="Tax rounding" />
76
+ <Select
77
+ id="{idPrefix}-rounding"
78
+ value={value.taxRounding}
79
+ onchange={(event) =>
80
+ set({ taxRounding: event.currentTarget.value as TaxRounding })}
81
+ >
82
+ <option value="line">Per line</option>
83
+ <option value="document">Once per document</option>
84
+ </Select>
85
+ </div>
86
+
87
+ <div class="field switch">
88
+ <Switch
89
+ checked={value.pricesIncludeTax}
90
+ onchange={(event) =>
91
+ set({ pricesIncludeTax: event.currentTarget.checked })}
92
+ label="Prices include tax"
93
+ />
94
+ <small>
95
+ {value.pricesIncludeTax
96
+ ? 'A line’s amount is what the customer pays; tax is part of it.'
97
+ : 'Tax is added on top of each line’s amount.'}
98
+ </small>
99
+ </div>
100
+
54
101
  <div class="field">
55
102
  <FieldLabel for="{idPrefix}-terms" label="Default payment terms" />
56
103
  <Input
@@ -70,7 +117,29 @@ const set = (patch: Partial<AppSettings>) => onchange({ ...value, ...patch });
70
117
  </div>
71
118
  </div>
72
119
 
120
+ <section class="tax-codes" aria-labelledby="{idPrefix}-tax-codes">
121
+ <h3 id="{idPrefix}-tax-codes">Tax codes</h3>
122
+ <p class="meta">
123
+ New documents use <strong>{fallback.name}</strong> ({rates(fallback)}),
124
+ from the default tax rate. A line can choose another code; an exempt
125
+ customer pays none.
126
+ </p>
127
+ <ul>
128
+ {#each others as code (code.id)}
129
+ <li data-tax-code={code.code}>
130
+ <span class="name">{code.name}</span>
131
+ <span class="rates">{rates(code)}</span>
132
+ </li>
133
+ {/each}
134
+ </ul>
135
+ <p class="meta">
136
+ The country codes are smrt’s examples; check they apply before using one.
137
+ </p>
138
+ </section>
139
+
73
140
  <style>
141
+ @layer smrt.reset, smrt.structure, smrt.theme;
142
+ @layer smrt.theme {
74
143
  .settings {
75
144
  display: grid;
76
145
  grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
@@ -97,4 +166,39 @@ const set = (patch: Partial<AppSettings>) => onchange({ ...value, ...patch });
97
166
  padding-bottom: var(--smrt-spacing-2);
98
167
  color: var(--smrt-color-on-surface-variant);
99
168
  }
169
+
170
+ .switch small,
171
+ .meta {
172
+ color: var(--smrt-color-on-surface-variant);
173
+ }
174
+
175
+ .tax-codes {
176
+ display: grid;
177
+ gap: var(--smrt-spacing-2);
178
+ margin-top: var(--smrt-spacing-4);
179
+ }
180
+
181
+ .tax-codes h3,
182
+ .tax-codes p {
183
+ margin: 0;
184
+ }
185
+
186
+ .tax-codes ul {
187
+ display: grid;
188
+ grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
189
+ gap: var(--smrt-spacing-1) var(--smrt-spacing-4);
190
+ margin: 0;
191
+ padding: 0;
192
+ list-style: none;
193
+ }
194
+
195
+ .tax-codes li {
196
+ display: grid;
197
+ }
198
+
199
+ .tax-codes .rates {
200
+ font-size: 0.875rem;
201
+ color: var(--smrt-color-on-surface-variant);
202
+ }
203
+ }
100
204
  </style>
@@ -16,15 +16,17 @@ import { previewMenu } from '../library/menu.js';
16
16
  import { libraryState } from '../library/state.svelte.js';
17
17
  import { appHref } from '../planner/app.svelte.js';
18
18
  import { settingsOfCookbook } from '../settings/app-settings.js';
19
- import AiSetup from './AiSetup.svelte';
20
19
  import VoiceTyping from './VoiceTyping.svelte';
21
20
 
22
21
  interface BrowserAssistantProps {
23
22
  /** The registry the shell gives its `dock` snippet. */
24
23
  registry: DataSurfaceRegistry;
24
+ /** The AI models page; a mounted `Planner` serves it at `#/ai/`. */
25
+ settingsHref?: string;
25
26
  }
26
27
 
27
- let { registry }: BrowserAssistantProps = $props();
28
+ let { registry, settingsHref = appHref('/ai/') }: BrowserAssistantProps =
29
+ $props();
28
30
 
29
31
  // The model and voice live in the shared AI state (the sidebar icons and the
30
32
  // AI models page read the same), so closing the dock keeps them loaded.
@@ -145,7 +147,7 @@ $effect(() => {
145
147
  <span class="model-name">{thinkName}</span>
146
148
  <a
147
149
  class="model-link"
148
- href={appHref('/ai/')}
150
+ href={settingsHref}
149
151
  aria-label="AI settings: change model or voice"
150
152
  title="AI settings"
151
153
  >
@@ -190,23 +192,19 @@ $effect(() => {
190
192
  />
191
193
  </div>
192
194
  {:else}
193
- <div class="panel">
195
+ <!-- The header control only opens the dock once the assistant is ready;
196
+ this covers a dock left open when the model goes away. -->
197
+ <div class="panel" role="status">
194
198
  <h2>Assistant</h2>
195
- <p>
196
- Describe your business and an assistant adds the matching recipes.
197
- {aiState.inference.mode === 'manual'
198
- ? 'Inference is off. The Planner page still works without a model.'
199
- : aiState.inference.mode === 'browser'
200
- ? 'It runs on your own device, so nothing you type leaves this page.'
201
- : aiState.privacyNote}
202
- </p>
203
- <AiSetup show={['think']} />
204
- <a href={appHref('/ai/')}>All AI settings</a>
199
+ <p>The assistant is not set up.</p>
200
+ <a href={settingsHref}>Set up the assistant</a>
205
201
  </div>
206
202
  {/if}
207
203
  </div>
208
204
 
209
205
  <style>
206
+ @layer smrt.reset, smrt.structure, smrt.theme;
207
+ @layer smrt.theme {
210
208
  .assistant {
211
209
  display: grid;
212
210
  grid-template-columns: minmax(0, 1fr);
@@ -266,12 +264,12 @@ $effect(() => {
266
264
  }
267
265
 
268
266
  .model-link:hover {
269
- background: var(--smrt-color-surface-container);
267
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
270
268
  }
271
269
 
272
270
  .model-link:focus-visible {
273
- outline: 2px solid var(--smrt-color-primary);
274
- outline-offset: 1px;
271
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
272
+ outline-offset: var(--smrt-focus-ring-offset);
275
273
  }
276
274
 
277
275
  .offer {
@@ -315,4 +313,5 @@ $effect(() => {
315
313
  p {
316
314
  color: var(--smrt-color-on-surface-variant);
317
315
  }
316
+ }
318
317
  </style>
@@ -2,6 +2,8 @@ import type { DataSurfaceRegistry } from '@happyvertical/smrt-ui/data-surface';
2
2
  interface BrowserAssistantProps {
3
3
  /** The registry the shell gives its `dock` snippet. */
4
4
  registry: DataSurfaceRegistry;
5
+ /** The AI models page; a mounted `Planner` serves it at `#/ai/`. */
6
+ settingsHref?: string;
5
7
  }
6
8
  declare const BrowserAssistant: import("svelte").Component<BrowserAssistantProps, {}, "">;
7
9
  type BrowserAssistant = ReturnType<typeof BrowserAssistant>;