@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,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.
@@ -33,13 +35,15 @@ const voice = $derived(aiState.voice);
33
35
  const model = $derived(getModel(session.prefs.modelId));
34
36
  const dataSource = useDataSource();
35
37
  const thinkName = $derived(
36
- session.mode === 'browser'
37
- ? model
38
- ? shortLabel(model)
39
- : ''
40
- : session.mode === 'host'
41
- ? 'Server'
42
- : session.remoteLabel,
38
+ session.mode === 'manual'
39
+ ? 'Off'
40
+ : session.mode === 'browser'
41
+ ? model
42
+ ? shortLabel(model)
43
+ : ''
44
+ : session.mode === 'host'
45
+ ? 'Server'
46
+ : session.remoteLabel,
43
47
  );
44
48
 
45
49
  // Applying a cookbook runs the Cookbooks tab's path, with the cookbook's own
@@ -143,7 +147,7 @@ $effect(() => {
143
147
  <span class="model-name">{thinkName}</span>
144
148
  <a
145
149
  class="model-link"
146
- href={appHref('/ai/')}
150
+ href={settingsHref}
147
151
  aria-label="AI settings: change model or voice"
148
152
  title="AI settings"
149
153
  >
@@ -188,21 +192,19 @@ $effect(() => {
188
192
  />
189
193
  </div>
190
194
  {:else}
191
- <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">
192
198
  <h2>Assistant</h2>
193
- <p>
194
- Describe your business and an assistant adds the matching recipes.
195
- {aiState.inference.mode === 'browser'
196
- ? 'It runs on your own device, so nothing you type leaves this page.'
197
- : aiState.privacyNote}
198
- </p>
199
- <AiSetup show={['think']} />
200
- <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>
201
201
  </div>
202
202
  {/if}
203
203
  </div>
204
204
 
205
205
  <style>
206
+ @layer smrt.reset, smrt.structure, smrt.theme;
207
+ @layer smrt.theme {
206
208
  .assistant {
207
209
  display: grid;
208
210
  grid-template-columns: minmax(0, 1fr);
@@ -262,12 +264,12 @@ $effect(() => {
262
264
  }
263
265
 
264
266
  .model-link:hover {
265
- background: var(--smrt-color-surface-container);
267
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
266
268
  }
267
269
 
268
270
  .model-link:focus-visible {
269
- outline: 2px solid var(--smrt-color-primary);
270
- outline-offset: 1px;
271
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
272
+ outline-offset: var(--smrt-focus-ring-offset);
271
273
  }
272
274
 
273
275
  .offer {
@@ -311,4 +313,5 @@ $effect(() => {
311
313
  p {
312
314
  color: var(--smrt-color-on-surface-variant);
313
315
  }
316
+ }
314
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>;
@@ -17,14 +17,20 @@ import {
17
17
  derivedFieldNames,
18
18
  isLineModel,
19
19
  isProductField,
20
- lineAmounts,
20
+ lineAmount,
21
21
  productPrefill,
22
22
  } from '../data/derived.js';
23
23
  import type { ModelRecord } from '../data/fakes.js';
24
24
  import { formatValue } from '../data/format.js';
25
25
  import { relationLabels, shortId } from '../data/labels.js';
26
+ import {
27
+ type ListSort,
28
+ nextListSort,
29
+ sortListRows,
30
+ } from '../data/list-sort.js';
26
31
  import { focusFirstInvalid } from '../fields/invalid.js';
27
32
  import type { ViewField } from '../recipes/policy.js';
33
+ import '../styles/planner-lists.css';
28
34
  import FieldInput from './FieldInput.svelte';
29
35
 
30
36
  interface ChildRecordsProps {
@@ -60,12 +66,25 @@ const columns = $derived(listColumns(fields));
60
66
  const calculated = $derived(derivedFieldNames(model, false));
61
67
  /** The line's amount as it will be saved, live as quantity and price change. */
62
68
  const derivedPreview = (name: string): unknown =>
63
- name === 'amount' ? lineAmounts(draft).amount : draft[name];
69
+ name === 'amount' ? lineAmount(draft) : draft[name];
64
70
  let errors = $state<Record<string, string>>({});
65
- const summary = $derived(errorSummary(fields, errors));
71
+ let saveError = $state('');
72
+ let removeError = $state('');
73
+ const summary = $derived(errorSummary(fields, errors) || saveError);
66
74
 
67
75
  let rows = $state<ModelRecord[]>([]);
68
76
  let labels = $state(new Map<string, string>());
77
+ let sort = $state<ListSort | null>(null);
78
+ const sortedRows = $derived(
79
+ sortListRows(rows, sort, (row, key) => {
80
+ const column = columns.find((item) => item.name === key);
81
+ if (!column) return undefined;
82
+ const value = cellValue(column, row);
83
+ return column.type === 'foreignKey' || column.type === 'crossPackageRef'
84
+ ? formatValue(column, value, labels)
85
+ : value;
86
+ }),
87
+ );
69
88
  let loaded = $state(false);
70
89
  /** `null` closed, `'new'` adding, otherwise the id being edited. */
71
90
  let editing = $state<string | 'new' | null>(null);
@@ -83,6 +102,7 @@ $effect(() => {
83
102
  // Reload when the parent record (or the child model) changes.
84
103
  model.id;
85
104
  parentId;
105
+ sort = null;
86
106
  editing = null;
87
107
  loaded = false;
88
108
  void load();
@@ -93,6 +113,7 @@ const nameOf = (row: ModelRecord) =>
93
113
 
94
114
  function startCreate() {
95
115
  errors = {};
116
+ saveError = '';
96
117
  draft = blankChild(fields, fk, parentId);
97
118
  editing = 'new';
98
119
  formKey++;
@@ -100,6 +121,7 @@ function startCreate() {
100
121
 
101
122
  function startEdit(row: ModelRecord) {
102
123
  errors = {};
124
+ saveError = '';
103
125
  draft = { ...row };
104
126
  editing = row.id;
105
127
  formKey++;
@@ -129,15 +151,30 @@ async function save(event: SubmitEvent) {
129
151
  if (!calculated.has(field.name)) values[field.name] = draft[field.name];
130
152
  }
131
153
  values[fk] = parentId;
132
- if (editing === 'new') await source.create(model, values);
133
- else if (editing) await source.update(model, editing, values);
154
+ try {
155
+ if (editing === 'new') await source.create(model, values);
156
+ else if (editing) await source.update(model, editing, values);
157
+ } catch (failure) {
158
+ // Money the model refuses (a discount above the line's price): the
159
+ // write was undone, and the form stays open with the reason.
160
+ saveError = failure instanceof Error ? failure.message : String(failure);
161
+ return;
162
+ }
163
+ saveError = '';
134
164
  editing = null;
135
165
  await load();
136
166
  onchanged?.();
137
167
  }
138
168
 
139
169
  async function remove(row: ModelRecord) {
140
- await source.delete(model, row.id);
170
+ removeError = '';
171
+ try {
172
+ await source.delete(model, row.id);
173
+ } catch (failure) {
174
+ // An issued document keeps its lines: the delete was undone.
175
+ removeError = failure instanceof Error ? failure.message : String(failure);
176
+ return;
177
+ }
141
178
  await load();
142
179
  onchanged?.();
143
180
  }
@@ -146,6 +183,9 @@ async function remove(row: ModelRecord) {
146
183
  <section class="children" data-child-model={model.name}>
147
184
  <header>
148
185
  <h3>{title} <small>{rows.length}</small></h3>
186
+ {#if removeError}
187
+ <p class="error" role="alert" data-remove-error>{removeError}</p>
188
+ {/if}
149
189
  <button type="button" class="secondary" onclick={startCreate}>
150
190
  Add {title.toLowerCase().replace(/s$/, '')}
151
191
  </button>
@@ -194,17 +234,21 @@ async function remove(row: ModelRecord) {
194
234
  <p class="empty">None yet.</p>
195
235
  {:else}
196
236
  <div class="scroll">
197
- <table>
237
+ <table class="planner-list">
198
238
  <thead>
199
239
  <tr>
200
240
  {#each columns as column (column.name)}
201
- <th>{column.label}</th>
241
+ <th scope="col" aria-sort={sort?.key === column.name ? sort.direction : 'none'}>
242
+ <button type="button" class="sort-button" onclick={() => (sort = nextListSort(sort, column.name))}>
243
+ {column.label}<span class="sort-icon" aria-hidden="true">{sort?.key === column.name ? (sort.direction === 'ascending' ? '↑' : '↓') : '↕'}</span>
244
+ </button>
245
+ </th>
202
246
  {/each}
203
- <th><span class="visually-hidden">Actions</span></th>
247
+ <th scope="col"><span class="visually-hidden">Actions</span></th>
204
248
  </tr>
205
249
  </thead>
206
250
  <tbody>
207
- {#each rows as row (row.id)}
251
+ {#each sortedRows as row (row.id)}
208
252
  <tr>
209
253
  {#each columns as column (column.name)}
210
254
  <td>{formatValue(column, cellValue(column, row), labels)}</td>
@@ -236,11 +280,13 @@ async function remove(row: ModelRecord) {
236
280
  </section>
237
281
 
238
282
  <style>
283
+ @layer smrt.reset, smrt.structure, smrt.theme;
284
+ @layer smrt.theme {
239
285
  .children {
240
286
  display: grid;
241
287
  gap: var(--smrt-spacing-3);
242
288
  padding: var(--smrt-spacing-3) var(--smrt-spacing-4);
243
- border: 1px solid var(--smrt-color-outline-variant);
289
+ border: var(--smrt-hairline);
244
290
  border-radius: var(--smrt-radius-large);
245
291
  }
246
292
 
@@ -253,7 +299,7 @@ async function remove(row: ModelRecord) {
253
299
 
254
300
  h3 {
255
301
  margin: 0;
256
- font-size: 1rem;
302
+ font: var(--smrt-typography-title-medium-font); letter-spacing: var(--smrt-typography-title-medium-tracking);
257
303
  }
258
304
 
259
305
  small,
@@ -300,7 +346,7 @@ async function remove(row: ModelRecord) {
300
346
  th,
301
347
  td {
302
348
  padding: var(--smrt-spacing-1) var(--smrt-spacing-2);
303
- border-bottom: 1px solid var(--smrt-color-outline-variant);
349
+ border-bottom: var(--smrt-hairline);
304
350
  text-align: left;
305
351
  white-space: nowrap;
306
352
  }
@@ -316,7 +362,7 @@ async function remove(row: ModelRecord) {
316
362
  }
317
363
 
318
364
  button.secondary {
319
- border: 1px solid var(--smrt-color-outline);
365
+ border: var(--smrt-control-border);
320
366
  background: transparent;
321
367
  color: var(--smrt-color-on-surface);
322
368
  }
@@ -328,4 +374,5 @@ async function remove(row: ModelRecord) {
328
374
  overflow: hidden;
329
375
  clip-path: inset(50%);
330
376
  }
377
+ }
331
378
  </style>
@@ -1,5 +1,6 @@
1
1
  import type { CatalogModel } from '../catalog/types.ts';
2
2
  import type { ViewField } from '../recipes/policy.ts';
3
+ import '../styles/planner-lists.css';
3
4
  interface ChildRecordsProps {
4
5
  model: CatalogModel;
5
6
  fields: ViewField[];
@@ -78,6 +78,8 @@ const exposed = $derived(models.filter((m) => m.exposed));
78
78
  </section>
79
79
 
80
80
  <style>
81
+ @layer smrt.reset, smrt.structure, smrt.theme;
82
+ @layer smrt.theme {
81
83
  .panel {
82
84
  display: grid;
83
85
  gap: var(--smrt-spacing-4);
@@ -97,7 +99,7 @@ const exposed = $derived(models.filter((m) => m.exposed));
97
99
  display: grid;
98
100
  gap: var(--smrt-spacing-3);
99
101
  padding: var(--smrt-spacing-4);
100
- border: 1px solid var(--smrt-color-outline-variant);
102
+ border: var(--smrt-hairline);
101
103
  border-radius: var(--smrt-radius-large);
102
104
  }
103
105
 
@@ -108,7 +110,7 @@ const exposed = $derived(models.filter((m) => m.exposed));
108
110
  }
109
111
 
110
112
  h4 {
111
- font-size: 0.9rem;
113
+ font: var(--smrt-typography-title-small-font); letter-spacing: var(--smrt-typography-title-small-tracking);
112
114
  color: var(--smrt-color-on-surface-variant);
113
115
  }
114
116
 
@@ -142,4 +144,5 @@ const exposed = $derived(models.filter((m) => m.exposed));
142
144
  color: var(--smrt-color-on-tertiary-container);
143
145
  font-size: 0.75rem;
144
146
  }
147
+ }
145
148
  </style>
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import { tryUseAdminShell } from '@happyvertical/smrt-svelte/workspace';
2
3
  import { Button } from '@happyvertical/smrt-ui';
3
4
  import { Alert, ConfirmDialog } from '@happyvertical/smrt-ui/feedback';
4
5
  import { onMount } from 'svelte';
@@ -25,6 +26,7 @@ import {
25
26
  import AppSettings from './AppSettings.svelte';
26
27
 
27
28
  const dataSource = useDataSource();
29
+ const shell = tryUseAdminShell();
28
30
  let selectedId = $state<string | null>(null);
29
31
  let confirming = $state(false);
30
32
  let error = $state('');
@@ -69,7 +71,9 @@ function commit() {
69
71
  dataSource.reset?.();
70
72
  libraryState.select(selected.id);
71
73
  error = '';
72
- notice = `Now using the ${selected.name} cookbook.`;
74
+ const count = previewMenu(selected.document).length;
75
+ notice = `${selected.name} added ${count} menu sections. Explore them in the left sidebar.`;
76
+ shell?.setPanelState('left', 'expanded');
73
77
  } else {
74
78
  error = result.error;
75
79
  notice = '';
@@ -78,6 +82,9 @@ function commit() {
78
82
  </script>
79
83
 
80
84
  <div class="cookbooks">
85
+ {#if notice}
86
+ <Alert variant="success" title="Cookbook applied">{notice}</Alert>
87
+ {/if}
81
88
  <p class="meta">
82
89
  A cookbook is a ready-made starting point: the recipes, menu and settings a
83
90
  kind of business usually needs. Pick one, look it over, then change
@@ -93,25 +100,27 @@ function commit() {
93
100
  class="card"
94
101
  class:selected={selectedId === cookbook.id}
95
102
  aria-pressed={selectedId === cookbook.id}
96
- onclick={() => (selectedId = cookbook.id)}
103
+ onclick={() => { selectedId = cookbook.id; notice = ''; }}
97
104
  >
98
- <svg
99
- class="icon"
100
- viewBox="0 0 24 24"
101
- width="32"
102
- height="32"
103
- fill="none"
104
- stroke="currentColor"
105
- stroke-width="1.75"
106
- stroke-linecap="round"
107
- stroke-linejoin="round"
108
- aria-hidden="true"
109
- >
110
- {#each COOKBOOK_ICONS[cookbook.icon] ?? [] as d (d)}
111
- <path {d} />
112
- {/each}
113
- </svg>
114
- <span class="name">{cookbook.name}</span>
105
+ <span class="heading">
106
+ <svg
107
+ class="icon"
108
+ viewBox="0 0 24 24"
109
+ width="28"
110
+ height="28"
111
+ fill="none"
112
+ stroke="currentColor"
113
+ stroke-width="1.75"
114
+ stroke-linecap="round"
115
+ stroke-linejoin="round"
116
+ aria-hidden="true"
117
+ >
118
+ {#each COOKBOOK_ICONS[cookbook.icon] ?? [] as d (d)}
119
+ <path {d} />
120
+ {/each}
121
+ </svg>
122
+ <span class="name">{cookbook.name}</span>
123
+ </span>
115
124
  <span class="summary">{cookbook.summary}</span>
116
125
  {#if active}<span class="badge">In use</span>{/if}
117
126
  </button>
@@ -164,7 +173,6 @@ function commit() {
164
173
  {#if error}
165
174
  <Alert variant="error" title="Could not use this cookbook">{error}</Alert>
166
175
  {/if}
167
- <p class="notice" role="status" aria-live="polite">{notice}</p>
168
176
  </div>
169
177
 
170
178
  <ConfirmDialog
@@ -178,6 +186,8 @@ function commit() {
178
186
  />
179
187
 
180
188
  <style>
189
+ @layer smrt.reset, smrt.structure, smrt.theme;
190
+ @layer smrt.theme {
181
191
  .cookbooks {
182
192
  display: grid;
183
193
  gap: var(--smrt-spacing-4);
@@ -192,19 +202,14 @@ function commit() {
192
202
 
193
203
  h3,
194
204
  h4 {
195
- font-size: 1rem;
205
+ font: var(--smrt-typography-title-medium-font); letter-spacing: var(--smrt-typography-title-medium-tracking);
196
206
  }
197
207
 
198
208
  .meta,
199
- .summary,
200
- .notice {
209
+ .summary {
201
210
  color: var(--smrt-color-on-surface-variant);
202
211
  }
203
212
 
204
- .notice:empty {
205
- display: none;
206
- }
207
-
208
213
  .grid {
209
214
  display: grid;
210
215
  grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
@@ -222,9 +227,9 @@ function commit() {
222
227
  width: 100%;
223
228
  height: 100%;
224
229
  padding: var(--smrt-spacing-4);
225
- border: 1px solid var(--smrt-color-outline-variant);
230
+ border: var(--smrt-hairline);
226
231
  border-radius: var(--smrt-radius-lg, 0.75rem);
227
- background: var(--smrt-color-surface);
232
+ background: var(--smrt-surface-panel);
228
233
  color: inherit;
229
234
  font: inherit;
230
235
  text-align: start;
@@ -237,11 +242,20 @@ function commit() {
237
242
  }
238
243
 
239
244
  .icon {
245
+ flex: 0 0 auto;
240
246
  color: var(--smrt-color-primary);
241
247
  }
242
248
 
249
+ .heading {
250
+ display: flex;
251
+ align-items: center;
252
+ gap: var(--smrt-spacing-2);
253
+ min-inline-size: 0;
254
+ padding-inline-end: 4rem;
255
+ }
256
+
243
257
  .name {
244
- font-weight: 600;
258
+ font-weight: var(--smrt-typography-weight-semibold);
245
259
  }
246
260
 
247
261
  .badge {
@@ -249,7 +263,7 @@ function commit() {
249
263
  top: var(--smrt-spacing-3);
250
264
  right: var(--smrt-spacing-3);
251
265
  padding: 0 var(--smrt-spacing-2);
252
- border-radius: 999px;
266
+ border-radius: var(--smrt-radius-full, 999px);
253
267
  background: var(--smrt-color-primary);
254
268
  color: var(--smrt-color-on-primary);
255
269
  font-size: 0.75rem;
@@ -259,7 +273,7 @@ function commit() {
259
273
  display: grid;
260
274
  gap: var(--smrt-spacing-4);
261
275
  padding: var(--smrt-spacing-4);
262
- border: 1px solid var(--smrt-color-outline-variant);
276
+ border: var(--smrt-hairline);
263
277
  border-radius: var(--smrt-radius-lg, 0.75rem);
264
278
  }
265
279
 
@@ -283,7 +297,7 @@ function commit() {
283
297
 
284
298
  .chips li {
285
299
  padding: 0 var(--smrt-spacing-3);
286
- border-radius: 999px;
300
+ border-radius: var(--smrt-radius-full, 999px);
287
301
  background: var(--smrt-color-surface-container);
288
302
  }
289
303
 
@@ -305,4 +319,13 @@ function commit() {
305
319
  align-items: center;
306
320
  gap: var(--smrt-spacing-3);
307
321
  }
322
+
323
+ /* Forced colours: the selected cookbook keeps a Highlight frame. */
324
+ @media (forced-colors: active) {
325
+ .card.selected {
326
+ border-color: Highlight;
327
+ outline-color: Highlight;
328
+ }
329
+ }
330
+ }
308
331
  </style>
@@ -0,0 +1,65 @@
1
+ <script lang="ts">
2
+ import type { ButtonVariant } from '@happyvertical/smrt-ui';
3
+ import { Button } from '@happyvertical/smrt-ui';
4
+
5
+ /**
6
+ * A button that puts `text` on the clipboard and says "Copied" for a moment.
7
+ * When the clipboard is not available (no secure context, permission denied,
8
+ * an old browser) it calls `onfail` so the owner can select the text and
9
+ * tell the person to copy it by hand; the status line belongs to the owner.
10
+ */
11
+ interface Props {
12
+ /** What to copy; a function is read at click time. */
13
+ text: string | (() => string);
14
+ label: string;
15
+ copiedLabel?: string;
16
+ variant?: ButtonVariant;
17
+ /** How long the button says it copied, in milliseconds. */
18
+ confirmFor?: number;
19
+ oncopied?: () => void;
20
+ onfail?: () => void;
21
+ /** Replaces `navigator.clipboard.writeText` (tests). */
22
+ write?: (text: string) => Promise<void>;
23
+ 'aria-describedby'?: string;
24
+ }
25
+
26
+ let {
27
+ text,
28
+ label,
29
+ copiedLabel = 'Copied',
30
+ variant = 'primary',
31
+ confirmFor = 2000,
32
+ oncopied,
33
+ onfail,
34
+ write,
35
+ 'aria-describedby': describedBy,
36
+ }: Props = $props();
37
+
38
+ let copied = $state(false);
39
+ let timer: ReturnType<typeof setTimeout> | undefined;
40
+
41
+ async function copy() {
42
+ const value = typeof text === 'function' ? text() : text;
43
+ const writer =
44
+ write ??
45
+ (typeof navigator !== 'undefined' && navigator.clipboard
46
+ ? (t: string) => navigator.clipboard.writeText(t)
47
+ : undefined);
48
+ try {
49
+ if (!writer) throw new Error('no clipboard');
50
+ await writer(value);
51
+ } catch {
52
+ copied = false;
53
+ onfail?.();
54
+ return;
55
+ }
56
+ copied = true;
57
+ oncopied?.();
58
+ clearTimeout(timer);
59
+ timer = setTimeout(() => (copied = false), confirmFor);
60
+ }
61
+ </script>
62
+
63
+ <Button {variant} onclick={copy} aria-live="polite" aria-describedby={describedBy}>
64
+ {copied ? copiedLabel : label}
65
+ </Button>
@@ -0,0 +1,24 @@
1
+ import type { ButtonVariant } from '@happyvertical/smrt-ui';
2
+ /**
3
+ * A button that puts `text` on the clipboard and says "Copied" for a moment.
4
+ * When the clipboard is not available (no secure context, permission denied,
5
+ * an old browser) it calls `onfail` so the owner can select the text and
6
+ * tell the person to copy it by hand; the status line belongs to the owner.
7
+ */
8
+ interface Props {
9
+ /** What to copy; a function is read at click time. */
10
+ text: string | (() => string);
11
+ label: string;
12
+ copiedLabel?: string;
13
+ variant?: ButtonVariant;
14
+ /** How long the button says it copied, in milliseconds. */
15
+ confirmFor?: number;
16
+ oncopied?: () => void;
17
+ onfail?: () => void;
18
+ /** Replaces `navigator.clipboard.writeText` (tests). */
19
+ write?: (text: string) => Promise<void>;
20
+ 'aria-describedby'?: string;
21
+ }
22
+ declare const CopyButton: import("svelte").Component<Props, {}, "">;
23
+ type CopyButton = ReturnType<typeof CopyButton>;
24
+ export default CopyButton;