@happyvertical/smrt-planner 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/README.md +81 -8
  2. package/app/404.html +42 -49
  3. package/app/_app/immutable/assets/0.BvXq1Svw.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.DKPbJFmw.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.DzDhJQz3.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.T_hJQXHk.css +1 -0
  20. package/app/_app/immutable/assets/app.BS7nbUi0.css +1 -0
  21. package/app/_app/immutable/assets/currency-metadata.CJIy0Dzm.css +1 -0
  22. package/app/_app/immutable/assets/data.DQcbQG_b.css +1 -0
  23. package/app/_app/immutable/assets/feedback.FjY5wqsa.css +1 -0
  24. package/app/_app/immutable/assets/forms.DA06CFM9.css +1 -0
  25. package/app/_app/immutable/assets/labels.Dny6zd23.css +1 -0
  26. package/app/_app/immutable/assets/percent.CBivq97O.css +1 -0
  27. package/app/_app/immutable/assets/state.C9Put0ur.css +1 -0
  28. package/app/_app/immutable/assets/webmcp-ui-context.CC5pQLNE.css +1 -0
  29. package/app/_app/immutable/assets/workspace.Dtoe2fRU.css +1 -0
  30. package/app/_app/immutable/chunks/3ouNUakh.js +1 -0
  31. package/app/_app/immutable/chunks/B3FAegW4.js +4 -0
  32. package/app/_app/immutable/chunks/B8iReL-r.js +1 -0
  33. package/app/_app/immutable/chunks/BCmdRE3j.js +4 -0
  34. package/app/_app/immutable/chunks/BV3NwM01.js +1 -0
  35. package/app/_app/immutable/chunks/BVicq_6F.js +1 -0
  36. package/app/_app/immutable/chunks/Ba1g71Sq.js +1 -0
  37. package/app/_app/immutable/chunks/BdjvgMW6.js +1 -0
  38. package/app/_app/immutable/chunks/BiO_bqNH.js +2 -0
  39. package/app/_app/immutable/chunks/{DyGfbRG-.js → BrorvU4B.js} +1 -1
  40. package/app/_app/immutable/chunks/By-QJdbA.js +980 -0
  41. package/app/_app/immutable/chunks/{CyUMm_Wp.js → BzITuwgY.js} +1 -1
  42. package/app/_app/immutable/chunks/BzMfoxBk.js +1 -0
  43. package/app/_app/immutable/chunks/C-AoRalq.js +1 -0
  44. package/app/_app/immutable/chunks/CGKL_Nlh.js +1 -0
  45. package/app/_app/immutable/chunks/CNj-_B0j.js +1 -0
  46. package/app/_app/immutable/chunks/CU8cbxOZ.js +1 -0
  47. package/app/_app/immutable/chunks/CZGhPAoL.js +2 -0
  48. package/app/_app/immutable/chunks/CaEdOwVf.js +1 -0
  49. package/app/_app/immutable/chunks/Cas1hq-y.js +1 -0
  50. package/app/_app/immutable/chunks/CfOMUCNN.js +1 -0
  51. package/app/_app/immutable/chunks/Cm0VMWZu.js +1 -0
  52. package/app/_app/immutable/chunks/CsmXMAyE.js +1 -0
  53. package/app/_app/immutable/chunks/{BWPhGFHl.js → D0FW0z6R.js} +1 -1
  54. package/app/_app/immutable/chunks/D3nyL-ZK.js +1 -0
  55. package/app/_app/immutable/chunks/DEe2Vsu9.js +1 -0
  56. package/app/_app/immutable/chunks/DTs3DOB0.js +10 -0
  57. package/app/_app/immutable/chunks/Dm6R8q7G.js +1 -0
  58. package/app/_app/immutable/chunks/Dreozana.js +1 -0
  59. package/app/_app/immutable/chunks/Dx8H44Wq.js +2 -0
  60. package/app/_app/immutable/chunks/DxR35SQx.js +24 -0
  61. package/app/_app/immutable/chunks/EcFojPiU.js +11 -0
  62. package/app/_app/immutable/chunks/JBS2nHGN.js +1 -0
  63. package/app/_app/immutable/chunks/TjbilXEg.js +1 -0
  64. package/app/_app/immutable/chunks/ZLqixH7j.js +9 -0
  65. package/app/_app/immutable/chunks/auwiz8v4.js +1 -0
  66. package/app/_app/immutable/chunks/dbZ3U29n.js +1 -0
  67. package/app/_app/immutable/chunks/{D333l2GL.js → gHjidpzw.js} +2 -2
  68. package/app/_app/immutable/chunks/vNEnXNLV.js +3 -0
  69. package/app/_app/immutable/entry/app.vuScBcN4.js +2 -0
  70. package/app/_app/immutable/entry/start.C_vMied2.js +1 -0
  71. package/app/_app/immutable/nodes/0.BeNJfVow.js +9 -0
  72. package/app/_app/immutable/nodes/1.huiLmf4w.js +1 -0
  73. package/app/_app/immutable/nodes/10.B3buyRS-.js +3 -0
  74. package/app/_app/immutable/nodes/11.FNeDQehr.js +1 -0
  75. package/app/_app/immutable/nodes/12.umrKgKLQ.js +4 -0
  76. package/app/_app/immutable/nodes/13.DFr7i0IY.js +1 -0
  77. package/app/_app/immutable/nodes/14.BNgJ8cEq.js +1 -0
  78. package/app/_app/immutable/nodes/2.B3v0JtfB.js +24 -0
  79. package/app/_app/immutable/nodes/3.FLW3AkwU.js +1 -0
  80. package/app/_app/immutable/nodes/4.50B7EkB9.js +1 -0
  81. package/app/_app/immutable/nodes/5.Din7W_Et.js +1 -0
  82. package/app/_app/immutable/nodes/6.7dOUE7nr.js +1 -0
  83. package/app/_app/immutable/nodes/7.C4XsW0qI.js +1 -0
  84. package/app/_app/immutable/nodes/8.D_MREd8V.js +1 -0
  85. package/app/_app/immutable/nodes/9.cn87hhI-.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 +22 -4
  496. package/dist/ai/state.svelte.js +78 -15
  497. package/dist/ai/status.js +8 -0
  498. package/dist/assistant/change.d.ts +14 -3
  499. package/dist/assistant/change.js +26 -3
  500. package/dist/assistant/engine.js +5 -1
  501. package/dist/assistant/prompt.js +7 -3
  502. package/dist/assistant/session.svelte.d.ts +1 -0
  503. package/dist/assistant/session.svelte.js +22 -4
  504. package/dist/catalog/catalog.json +11244 -14189
  505. package/dist/catalog/generate/exclusions.d.ts +8 -0
  506. package/dist/catalog/generate/exclusions.js +29 -0
  507. package/dist/catalog/generate/extract.js +29 -8
  508. package/dist/catalog/types.d.ts +7 -0
  509. package/dist/components/AdvancedStyles.svelte +138 -0
  510. package/dist/components/AdvancedStyles.svelte.d.ts +6 -0
  511. package/dist/components/AiModelsPage.svelte +40 -0
  512. package/dist/components/AiModelsPage.svelte.d.ts +7 -0
  513. package/dist/components/AiSetup.svelte +40 -8
  514. package/dist/components/AiStatusIcons.svelte +8 -5
  515. package/dist/components/AppSettings.svelte +105 -1
  516. package/dist/components/BrowserAssistant.svelte +25 -22
  517. package/dist/components/BrowserAssistant.svelte.d.ts +2 -0
  518. package/dist/components/ChildRecords.svelte +61 -14
  519. package/dist/components/ChildRecords.svelte.d.ts +1 -0
  520. package/dist/components/ConnectTools.svelte +5 -2
  521. package/dist/components/CookbooksPanel.svelte +56 -33
  522. package/dist/components/CopyButton.svelte +65 -0
  523. package/dist/components/CopyButton.svelte.d.ts +24 -0
  524. package/dist/components/ExportPanel.svelte +292 -57
  525. package/dist/components/ExportPanel.svelte.d.ts +10 -1
  526. package/dist/components/FeatureCard.svelte +21 -10
  527. package/dist/components/FeaturesPanel.svelte +4 -1
  528. package/dist/components/FieldInput.svelte +6 -3
  529. package/dist/components/FieldMapForm.svelte +6 -10
  530. package/dist/components/FieldMapForm.svelte.d.ts +1 -0
  531. package/dist/components/FormWorkspace.svelte +80 -9
  532. package/dist/components/FormWorkspace.svelte.d.ts +1 -0
  533. package/dist/components/HeaderIconLink.svelte +86 -0
  534. package/dist/components/HeaderIconLink.svelte.d.ts +14 -0
  535. package/dist/components/HelpView.svelte +3 -0
  536. package/dist/components/ModelOptions.svelte +13 -2
  537. package/dist/components/ModelPage.svelte +33 -5
  538. package/dist/components/ModelPage.svelte.d.ts +4 -0
  539. package/dist/components/ModelWorkspace.svelte +148 -50
  540. package/dist/components/ModelWorkspace.svelte.d.ts +4 -0
  541. package/dist/components/PackagePage.svelte +96 -0
  542. package/dist/components/PackagePage.svelte.d.ts +9 -0
  543. package/dist/components/ProductMedia.svelte +95 -0
  544. package/dist/components/ProductMedia.svelte.d.ts +10 -0
  545. package/dist/components/RecipeCards.svelte +13 -1
  546. package/dist/components/RecipeHelp.svelte +3 -0
  547. package/dist/components/RecipeOptions.svelte +13 -1
  548. package/dist/components/RecordFeatures.svelte +22 -8
  549. package/dist/components/RecordView.svelte +354 -0
  550. package/dist/components/RecordView.svelte.d.ts +14 -0
  551. package/dist/components/RelationField.svelte +5 -2
  552. package/dist/components/SectionActions.svelte +8 -5
  553. package/dist/components/SectionHeading.svelte +63 -0
  554. package/dist/components/SectionHeading.svelte.d.ts +11 -0
  555. package/dist/components/SectionIcons.svelte +15 -3
  556. package/dist/components/SectionOverview.svelte +33 -3
  557. package/dist/components/SectionOverview.svelte.d.ts +4 -0
  558. package/dist/components/SectionPage.svelte +25 -165
  559. package/dist/components/SectionView.svelte +172 -0
  560. package/dist/components/SectionView.svelte.d.ts +18 -0
  561. package/dist/components/SettingsPanel.svelte +3 -9
  562. package/dist/components/SettingsPanel.svelte.d.ts +1 -5
  563. package/dist/components/ThemeBridge.svelte +80 -4
  564. package/dist/components/ThemeBridge.svelte.d.ts +5 -1
  565. package/dist/components/ThemeSection.svelte +208 -117
  566. package/dist/components/ThemeSection.svelte.d.ts +3 -7
  567. package/dist/components/VariantGridForm.svelte +9 -13
  568. package/dist/components/VariantGridForm.svelte.d.ts +1 -0
  569. package/dist/components/VoiceTyping.svelte +3 -0
  570. package/dist/cookbook/describe.d.ts +29 -0
  571. package/dist/cookbook/describe.js +164 -0
  572. package/dist/cookbook/file.d.ts +6 -0
  573. package/dist/cookbook/file.js +18 -4
  574. package/dist/cookbook/prompt.d.ts +49 -0
  575. package/dist/cookbook/prompt.js +100 -0
  576. package/dist/cookbook/store.svelte.d.ts +13 -0
  577. package/dist/cookbook/store.svelte.js +36 -8
  578. package/dist/core/app.d.ts +33 -8
  579. package/dist/core/app.js +112 -8
  580. package/dist/core/prompt.js +10 -1
  581. package/dist/core/reply.d.ts +6 -1
  582. package/dist/data/children.d.ts +50 -6
  583. package/dist/data/children.js +146 -16
  584. package/dist/data/derived.d.ts +37 -29
  585. package/dist/data/derived.js +49 -30
  586. package/dist/data/display.d.ts +21 -8
  587. package/dist/data/display.js +74 -11
  588. package/dist/data/fakes.d.ts +48 -9
  589. package/dist/data/fakes.js +146 -22
  590. package/dist/data/labels.d.ts +7 -2
  591. package/dist/data/labels.js +12 -2
  592. package/dist/data/list-sort.d.ts +8 -0
  593. package/dist/data/list-sort.js +45 -0
  594. package/dist/data/money.d.ts +227 -0
  595. package/dist/data/money.js +413 -0
  596. package/dist/data/packs.d.ts +13 -0
  597. package/dist/data/packs.js +1224 -0
  598. package/dist/data/planner-source.js +123 -3
  599. package/dist/data/source.d.ts +13 -2
  600. package/dist/data/source.js +274 -40
  601. package/dist/features/palette.d.ts +2 -0
  602. package/dist/features/palette.js +1 -1
  603. package/dist/forms/stock.d.ts +1 -1
  604. package/dist/forms/stock.js +3 -1
  605. package/dist/index.d.ts +8 -3
  606. package/dist/index.js +6 -1
  607. package/dist/inference/byo.svelte.d.ts +8 -4
  608. package/dist/inference/byo.svelte.js +36 -8
  609. package/dist/inference/config.d.ts +12 -5
  610. package/dist/inference/config.js +96 -40
  611. package/dist/inference/openai.js +5 -0
  612. package/dist/kitchen/LiveKitchenBridge.svelte +73 -0
  613. package/dist/kitchen/LiveKitchenBridge.svelte.d.ts +8 -0
  614. package/dist/kitchen/client.js +10 -4
  615. package/dist/kitchen/live.d.ts +7 -0
  616. package/dist/kitchen/live.js +51 -0
  617. package/dist/library/icons.js +34 -0
  618. package/dist/library/library.json +1546 -15
  619. package/dist/library/pending.json +5 -0
  620. package/dist/library/types.d.ts +4 -0
  621. package/dist/motion/tokens.d.ts +6 -0
  622. package/dist/motion/tokens.js +32 -0
  623. package/dist/motion/view-transition.d.ts +13 -0
  624. package/dist/motion/view-transition.js +17 -0
  625. package/dist/overviews/definitions.d.ts +41 -2
  626. package/dist/overviews/definitions.js +111 -4
  627. package/dist/overviews/models.d.ts +10 -0
  628. package/dist/overviews/models.js +19 -0
  629. package/dist/overviews/registry.d.ts +92 -5
  630. package/dist/overviews/registry.js +468 -58
  631. package/dist/overviews/validate.js +2 -2
  632. package/dist/planner/Planner.svelte +374 -166
  633. package/dist/planner/PlannerControls.svelte +255 -0
  634. package/dist/planner/PlannerControls.svelte.d.ts +17 -0
  635. package/dist/planner/PlannerLifecycle.svelte +73 -0
  636. package/dist/planner/PlannerLifecycle.svelte.d.ts +9 -0
  637. package/dist/planner/app.svelte.d.ts +12 -2
  638. package/dist/planner/app.svelte.js +13 -3
  639. package/dist/planner/assistant.js +21 -3
  640. package/dist/planner/commands/adapter.js +9 -2
  641. package/dist/planner/commands/types.d.ts +1 -1
  642. package/dist/planner/commands/types.js +1 -0
  643. package/dist/planner/header-icons.d.ts +12 -0
  644. package/dist/planner/header-icons.js +12 -0
  645. package/dist/planner/host/HostPlanner.svelte +70 -0
  646. package/dist/planner/host/HostPlanner.svelte.d.ts +17 -0
  647. package/dist/planner/host/session.svelte.d.ts +28 -0
  648. package/dist/planner/host/session.svelte.js +186 -0
  649. package/dist/planner/routes.d.ts +49 -0
  650. package/dist/planner/routes.js +64 -0
  651. package/dist/planner/shell.d.ts +40 -0
  652. package/dist/planner/shell.js +56 -0
  653. package/dist/planner/tab.svelte.d.ts +6 -3
  654. package/dist/planner/tab.svelte.js +11 -4
  655. package/dist/planner/title.d.ts +15 -0
  656. package/dist/planner/title.js +21 -0
  657. package/dist/planner/title.svelte.d.ts +6 -0
  658. package/dist/planner/title.svelte.js +11 -0
  659. package/dist/planner/types.d.ts +39 -7
  660. package/dist/products/media.d.ts +20 -0
  661. package/dist/products/media.js +65 -0
  662. package/dist/recipes/help/descriptions.json +1 -3
  663. package/dist/recipes/index.d.ts +2 -0
  664. package/dist/recipes/index.js +6 -0
  665. package/dist/recipes/plumbing.d.ts +35 -1
  666. package/dist/recipes/plumbing.js +74 -0
  667. package/dist/screens/definition.d.ts +35 -0
  668. package/dist/screens/definition.js +132 -0
  669. package/dist/screens/relations.d.ts +17 -0
  670. package/dist/screens/relations.js +98 -0
  671. package/dist/screens/totals.d.ts +37 -0
  672. package/dist/screens/totals.js +65 -0
  673. package/dist/sections/info.d.ts +1 -1
  674. package/dist/sections/info.js +2 -2
  675. package/dist/settings/app-settings.d.ts +17 -1
  676. package/dist/settings/app-settings.js +40 -3
  677. package/dist/smrt-version.d.ts +2 -0
  678. package/dist/smrt-version.js +4 -0
  679. package/dist/styles/planner-forms.css +53 -0
  680. package/dist/styles/planner-lists.css +43 -0
  681. package/dist/theme/css-highlight.d.ts +6 -0
  682. package/dist/theme/css-highlight.js +34 -0
  683. package/dist/theme/custom-css.svelte.d.ts +34 -0
  684. package/dist/theme/custom-css.svelte.js +246 -0
  685. package/dist/theme/runtime.js +25 -5
  686. package/dist/theme/theme.d.ts +26 -3
  687. package/dist/theme/theme.js +70 -2
  688. package/dist/upstream/overlay.d.ts +14 -5
  689. package/dist/upstream/overlay.js +20 -2
  690. package/package.json +13 -6
  691. package/app/_app/immutable/assets/0.B5zXkXe_.css +0 -1
  692. package/app/_app/immutable/assets/10.hpcnxvK1.css +0 -1
  693. package/app/_app/immutable/assets/11.D7zoXfVV.css +0 -1
  694. package/app/_app/immutable/assets/12.CPobm1ED.css +0 -1
  695. package/app/_app/immutable/assets/2.CyaWdRdI.css +0 -1
  696. package/app/_app/immutable/assets/3.BlPQOes8.css +0 -1
  697. package/app/_app/immutable/assets/8.2gQeKBp_.css +0 -1
  698. package/app/_app/immutable/assets/9.HOPT4xtg.css +0 -1
  699. package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +0 -1
  700. package/app/_app/immutable/assets/Button.DkP0qkG9.css +0 -1
  701. package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +0 -1
  702. package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +0 -1
  703. package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +0 -1
  704. package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +0 -1
  705. package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +0 -1
  706. package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +0 -1
  707. package/app/_app/immutable/assets/dist.C5nHBk_O.css +0 -1
  708. package/app/_app/immutable/assets/feedback.BVKAwFck.css +0 -1
  709. package/app/_app/immutable/assets/forms.BChZ2RWM.css +0 -1
  710. package/app/_app/immutable/assets/percent.LH0z-ozZ.css +0 -1
  711. package/app/_app/immutable/assets/store.CGDwHkkF.css +0 -1
  712. package/app/_app/immutable/assets/ui.B1A1Zl2p.css +0 -1
  713. package/app/_app/immutable/assets/workspace.BIMkuZDb.css +0 -1
  714. package/app/_app/immutable/chunks/1okeBSoq.js +0 -1
  715. package/app/_app/immutable/chunks/B32EWqI8.js +0 -9
  716. package/app/_app/immutable/chunks/B4Kevpe0.js +0 -1
  717. package/app/_app/immutable/chunks/BKwRT_1p.js +0 -1
  718. package/app/_app/immutable/chunks/BS4h9ES-.js +0 -1
  719. package/app/_app/immutable/chunks/BYde9M_U.js +0 -1
  720. package/app/_app/immutable/chunks/CMhpRMKg.js +0 -1
  721. package/app/_app/immutable/chunks/CPRHZZeW.js +0 -1
  722. package/app/_app/immutable/chunks/CRQ1Pmzr.js +0 -1
  723. package/app/_app/immutable/chunks/CV-2zt0K.js +0 -2
  724. package/app/_app/immutable/chunks/CWtfVMDz.js +0 -1
  725. package/app/_app/immutable/chunks/Chyo8rdT.js +0 -3
  726. package/app/_app/immutable/chunks/CmmuWmp6.js +0 -2
  727. package/app/_app/immutable/chunks/CrFNLK0f.js +0 -1
  728. package/app/_app/immutable/chunks/CygC84VT.js +0 -2
  729. package/app/_app/immutable/chunks/D0VgZnk1.js +0 -1
  730. package/app/_app/immutable/chunks/DD7gpKb2.js +0 -1
  731. package/app/_app/immutable/chunks/DJtH-lRi.js +0 -3
  732. package/app/_app/immutable/chunks/DNRgqfTx.js +0 -1
  733. package/app/_app/immutable/chunks/DVRKjN-E.js +0 -1
  734. package/app/_app/immutable/chunks/D_J_XtJy.js +0 -846
  735. package/app/_app/immutable/chunks/Dp9GVO-9.js +0 -1
  736. package/app/_app/immutable/chunks/DqcD-WtP.js +0 -1
  737. package/app/_app/immutable/chunks/OJ_lLTHH.js +0 -1
  738. package/app/_app/immutable/chunks/QukgIHDX.js +0 -1
  739. package/app/_app/immutable/chunks/WxSPP8QW.js +0 -4
  740. package/app/_app/immutable/chunks/leQCwW2d.js +0 -1
  741. package/app/_app/immutable/chunks/p6bgzXiY.js +0 -1
  742. package/app/_app/immutable/chunks/ufuM4XBq.js +0 -33
  743. package/app/_app/immutable/entry/app.D5JJain6.js +0 -2
  744. package/app/_app/immutable/entry/start.CH9DJLgI.js +0 -1
  745. package/app/_app/immutable/nodes/0.CL1MxOva.js +0 -10
  746. package/app/_app/immutable/nodes/1.BO731RRg.js +0 -1
  747. package/app/_app/immutable/nodes/10.1nQxyH9H.js +0 -4
  748. package/app/_app/immutable/nodes/11.Cw0JnQF3.js +0 -1
  749. package/app/_app/immutable/nodes/12.BmZyLHbM.js +0 -1
  750. package/app/_app/immutable/nodes/2.BEw046av.js +0 -17
  751. package/app/_app/immutable/nodes/3.DvwpTAQA.js +0 -1
  752. package/app/_app/immutable/nodes/4.qrT4bnmS.js +0 -1
  753. package/app/_app/immutable/nodes/5.DDLa2uhV.js +0 -1
  754. package/app/_app/immutable/nodes/6.DN0QTY6z.js +0 -1
  755. package/app/_app/immutable/nodes/7.C_8N82Wq.js +0 -1
  756. package/app/_app/immutable/nodes/8.D2Mszsua.js +0 -3
  757. package/app/_app/immutable/nodes/9.CLYsywul.js +0 -1
  758. package/app/m/content/Contents/index.html +0 -96
  759. package/app/m/preferences/UiPreferenceRecord/index.html +0 -96
  760. package/app/m/users/AccessRequest/index.html +0 -96
  761. package/app/m/users/ResourceGrant/index.html +0 -96
  762. package/app/m/users/UsersCliAuthRequest/index.html +0 -96
  763. package/app/m/users/UsersMagicLinkToken/index.html +0 -96
@@ -16,3 +16,11 @@
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
+ /**
20
+ * Models that are s-m-r-t bookkeeping inside a package the catalog keeps,
21
+ * never something a visitor would add or see: dropped from the catalog, the
22
+ * reason recorded here. Qualified names.
23
+ */
24
+ export declare const EXCLUDED_MODELS: Readonly<Record<string, string>>;
25
+ /** Is `field` of a model in `packageName` a framework-managed money internal? */
26
+ export declare function isInternalMoneyField(packageName: string, field: string): boolean;
@@ -31,3 +31,32 @@ export const EXCLUDED_PACKAGES = {
31
31
  };
32
32
  export const PACKAGE_SCOPE = '@happyvertical/';
33
33
  export const PACKAGE_PREFIX = `${PACKAGE_SCOPE}smrt-`;
34
+ /**
35
+ * Models that are s-m-r-t bookkeeping inside a package the catalog keeps,
36
+ * never something a visitor would add or see: dropped from the catalog, the
37
+ * reason recorded here. Qualified names.
38
+ */
39
+ export const EXCLUDED_MODELS = {
40
+ '@happyvertical/smrt-commerce:MoneyMigrationDocument': 'tenant money-migration journal (smrt#3988); written only by the migration',
41
+ };
42
+ /**
43
+ * Money-model internals of smrt-commerce (smrt#3988): serialized snapshots
44
+ * (`*Json`: tax components, registrations, credit bases, sync state), the
45
+ * freeze identity (`moneySnapshotId`), the migration's rollback copy
46
+ * (`legacyAmount`) and its marker and owner (`moneyModel`,
47
+ * `moneyMigrationId`). The framework writes them; generated surfaces and
48
+ * cookbooks never do. They stay in the catalog marked `system`, so forms,
49
+ * lists, record pages and policies skip them while sample data still keeps
50
+ * a line's tax snapshot.
51
+ */
52
+ const INTERNAL_MONEY_FIELDS = new Set([
53
+ 'moneySnapshotId',
54
+ 'legacyAmount',
55
+ 'moneyModel',
56
+ 'moneyMigrationId',
57
+ ]);
58
+ /** Is `field` of a model in `packageName` a framework-managed money internal? */
59
+ export function isInternalMoneyField(packageName, field) {
60
+ return (packageName === `${PACKAGE_PREFIX}commerce` &&
61
+ (INTERNAL_MONEY_FIELDS.has(field) || /[a-z]Json$/.test(field)));
62
+ }
@@ -1,4 +1,4 @@
1
- import { PACKAGE_PREFIX } from "./exclusions.js";
1
+ import { EXCLUDED_MODELS, 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;
@@ -210,7 +231,7 @@ export function extractPackage(raw) {
210
231
  const browser = extractBrowser(knowledge?.browser ?? manifest.browser);
211
232
  const objects = Object.values(manifest.objects);
212
233
  const objectMap = new Map(objects.map((o) => [o.qualifiedName, o]));
213
- const rawModels = objects.filter((o) => isModel(o, objectMap));
234
+ const rawModels = objects.filter((o) => isModel(o, objectMap) && !EXCLUDED_MODELS[o.qualifiedName]);
214
235
  const modelMap = new Map(rawModels.map((m) => [m.qualifiedName, m]));
215
236
  const collections = objects.filter((o) => !modelMap.has(o.qualifiedName));
216
237
  const knowledgeSurfaces = knowledge?.surfaces ?? null;
@@ -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;
@@ -42,6 +42,12 @@ const byo = $derived(aiState.byo);
42
42
  const thinkWhere = $derived(
43
43
  summaries.find((s) => s.id === 'think')?.where ?? '',
44
44
  );
45
+ const modeLabel = {
46
+ manual: 'Manual planning',
47
+ byo: 'Your model',
48
+ browser: 'In-browser model (WebLLM)',
49
+ host: "This site's server",
50
+ } as const;
45
51
 
46
52
  const model = $derived(getModel(session.prefs.modelId));
47
53
  // A roomy graphics card can run the smarter model; it is only suggested, the
@@ -84,7 +90,28 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
84
90
  </p>
85
91
  </div>
86
92
  </header>
87
- {#if mode === 'host'}
93
+ {#if aiState.availableModes.length > 1}
94
+ <label>
95
+ Assistant mode
96
+ <Select
97
+ value={mode}
98
+ onchange={(event) =>
99
+ aiState.selectInference(event.currentTarget.value as keyof typeof modeLabel)}
100
+ >
101
+ {#each aiState.availableModes as option (option)}
102
+ <option value={option}>{modeLabel[option]}</option>
103
+ {/each}
104
+ </Select>
105
+ </label>
106
+ <p class="meta">Changing modes happens only when you choose it here.</p>
107
+ {/if}
108
+ {#if mode === 'manual'}
109
+ <p class="status">Inference off</p>
110
+ <p class="meta">
111
+ Build, edit, validate and export your cookbook without a model. No
112
+ provider is contacted and no browser model is downloaded.
113
+ </p>
114
+ {:else if mode === 'host'}
88
115
  <p class="status">Server</p>
89
116
  <p class="meta">
90
117
  This site's server answers the assistant. What you type, and a short
@@ -146,7 +173,9 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
146
173
  </p>
147
174
  {/if}
148
175
  <p class="meta">
149
- Stored only in this browser, and sent only to {byo.baseUrl || 'the address above'} (https, or this computer).
176
+ {aiState.inference.credentialPersistence === 'memory'
177
+ ? 'Kept only in this tab until reload'
178
+ : 'Stored only in this browser'}, and sent only to {byo.baseUrl || 'the address above'} (https, or this computer).
150
179
  <button class="link" type="button" onclick={() => byo.forgetKey()}>
151
180
  Forget the key
152
181
  </button>
@@ -380,6 +409,8 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
380
409
  </div>
381
410
 
382
411
  <style>
412
+ @layer smrt.reset, smrt.structure, smrt.theme;
413
+ @layer smrt.theme {
383
414
  .cards {
384
415
  display: grid;
385
416
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
@@ -394,9 +425,9 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
394
425
  padding: var(--smrt-spacing-4);
395
426
  min-width: 0;
396
427
  overflow-wrap: anywhere;
397
- border: 1px solid var(--smrt-color-outline-variant);
428
+ border: var(--smrt-hairline);
398
429
  border-radius: var(--smrt-radius-lg, 12px);
399
- background: var(--smrt-color-surface-container-low, transparent);
430
+ background: var(--smrt-surface-panel, transparent);
400
431
  }
401
432
 
402
433
  header {
@@ -412,7 +443,7 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
412
443
  width: 2.5rem;
413
444
  height: 2.5rem;
414
445
  border-radius: 50%;
415
- border: 1px solid var(--smrt-color-outline-variant);
446
+ border: var(--smrt-hairline);
416
447
  }
417
448
 
418
449
  .card[data-state='ready'] .badge {
@@ -422,13 +453,13 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
422
453
  }
423
454
 
424
455
  .card[data-state='available'] .badge {
425
- border: 1px dashed var(--smrt-color-outline);
456
+ border: 1px dashed var(--smrt-hairline-strong-color);
426
457
  color: var(--smrt-color-on-surface-variant);
427
458
  }
428
459
 
429
460
  .card[data-state='off'] .badge {
430
461
  position: relative;
431
- border: 1px dashed var(--smrt-color-outline-variant);
462
+ border: 1px dashed var(--smrt-hairline-color);
432
463
  opacity: 0.5;
433
464
  }
434
465
 
@@ -478,7 +509,7 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
478
509
  .notice {
479
510
  margin: 0 0 var(--smrt-spacing-3);
480
511
  padding: var(--smrt-spacing-3);
481
- border: 1px solid var(--smrt-color-outline-variant);
512
+ border: var(--smrt-hairline);
482
513
  border-radius: var(--smrt-radius-md, 8px);
483
514
  }
484
515
 
@@ -496,4 +527,5 @@ const handsFreeAvailable = $derived(voice.status === 'ready');
496
527
  cursor: pointer;
497
528
  font: inherit;
498
529
  }
530
+ }
499
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>