@arbidocs/blocks 0.5.113 → 0.5.114

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 (167) hide show
  1. package/dist/{ConnectedCallDock-VCJ6Q7WE.cjs → ConnectedCallDock-2KXEQENS.cjs} +13 -13
  2. package/dist/{ConnectedCallDock-VCJ6Q7WE.cjs.map → ConnectedCallDock-2KXEQENS.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-BUI3ILJD.cjs → ConnectedCallRoom-MU3NPNXF.cjs} +12 -12
  4. package/dist/{ConnectedCallRoom-BUI3ILJD.cjs.map → ConnectedCallRoom-MU3NPNXF.cjs.map} +1 -1
  5. package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs → ConnectedMailInviteCard-EINB3THA.cjs} +5 -5
  6. package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs.map → ConnectedMailInviteCard-EINB3THA.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxComparison-JO2H4QIP.cjs → ConnectedNativeDocxComparison-VH3I65H6.cjs} +16 -16
  8. package/dist/{ConnectedNativeDocxComparison-JO2H4QIP.cjs.map → ConnectedNativeDocxComparison-VH3I65H6.cjs.map} +1 -1
  9. package/dist/{ConnectedProductionSetDialog-BSPM4NQC.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +8 -8
  10. package/dist/{ConnectedProductionSetDialog-BSPM4NQC.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-DMQEJFCA.cjs → ConnectedStreamedWordArtifact-KQSHCA75.cjs} +16 -16
  12. package/dist/{ConnectedStreamedWordArtifact-DMQEJFCA.cjs.map → ConnectedStreamedWordArtifact-KQSHCA75.cjs.map} +1 -1
  13. package/dist/{DocumentReviewCard-UBE2DVAC.cjs → DocumentReviewCard-OCPFVMLD.cjs} +20 -20
  14. package/dist/{DocumentReviewCard-UBE2DVAC.cjs.map → DocumentReviewCard-OCPFVMLD.cjs.map} +1 -1
  15. package/dist/{FilesViewerDialog-EBYRA3ZZ.cjs → FilesViewerDialog-BAGOEMXW.cjs} +38 -38
  16. package/dist/{FilesViewerDialog-EBYRA3ZZ.cjs.map → FilesViewerDialog-BAGOEMXW.cjs.map} +1 -1
  17. package/dist/{WorkspaceTableView-BO2OJO7A.cjs → WorkspaceTableView-IMAZICIZ.cjs} +3 -3
  18. package/dist/{WorkspaceTableView-BO2OJO7A.cjs.map → WorkspaceTableView-IMAZICIZ.cjs.map} +1 -1
  19. package/dist/agents/index.cjs +202 -202
  20. package/dist/{ai-EMNMGDAN.cjs → ai-7U4B4CVF.cjs} +22 -22
  21. package/dist/ai-7U4B4CVF.cjs.map +1 -0
  22. package/dist/calls/index.cjs +51 -51
  23. package/dist/chat/index.cjs +29 -29
  24. package/dist/{chunk-GVTKFVXH.cjs → chunk-2W5E62EY.cjs} +6 -6
  25. package/dist/{chunk-GVTKFVXH.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
  26. package/dist/{chunk-ZZZ6AZDR.cjs → chunk-3ODEWSRO.cjs} +4 -4
  27. package/dist/{chunk-ZZZ6AZDR.cjs.map → chunk-3ODEWSRO.cjs.map} +1 -1
  28. package/dist/{chunk-LCNKKSN3.cjs → chunk-3R6YHJ3G.cjs} +4 -4
  29. package/dist/{chunk-LCNKKSN3.cjs.map → chunk-3R6YHJ3G.cjs.map} +1 -1
  30. package/dist/{chunk-DZWIVRYP.cjs → chunk-3U36VYMD.cjs} +21 -21
  31. package/dist/{chunk-DZWIVRYP.cjs.map → chunk-3U36VYMD.cjs.map} +1 -1
  32. package/dist/{chunk-DMNX556N.cjs → chunk-436I7PQL.cjs} +8 -8
  33. package/dist/{chunk-DMNX556N.cjs.map → chunk-436I7PQL.cjs.map} +1 -1
  34. package/dist/{chunk-J2RXQVVF.cjs → chunk-4EK7TAP7.cjs} +5 -5
  35. package/dist/{chunk-J2RXQVVF.cjs.map → chunk-4EK7TAP7.cjs.map} +1 -1
  36. package/dist/{chunk-MJHIBCF7.cjs → chunk-4NPCDS2X.cjs} +4 -4
  37. package/dist/{chunk-MJHIBCF7.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
  38. package/dist/{chunk-ONZOVO2B.cjs → chunk-57EE6CMW.cjs} +15 -15
  39. package/dist/{chunk-ONZOVO2B.cjs.map → chunk-57EE6CMW.cjs.map} +1 -1
  40. package/dist/{chunk-Y45VRNSZ.cjs → chunk-57NHXEU2.cjs} +4 -4
  41. package/dist/{chunk-Y45VRNSZ.cjs.map → chunk-57NHXEU2.cjs.map} +1 -1
  42. package/dist/{chunk-OVKJ7OVZ.cjs → chunk-5QUL5BZO.cjs} +5 -5
  43. package/dist/{chunk-OVKJ7OVZ.cjs.map → chunk-5QUL5BZO.cjs.map} +1 -1
  44. package/dist/{chunk-MUA5PJGX.cjs → chunk-5SKHK3BG.cjs} +4 -4
  45. package/dist/{chunk-MUA5PJGX.cjs.map → chunk-5SKHK3BG.cjs.map} +1 -1
  46. package/dist/{chunk-AFXDLDPU.cjs → chunk-5UYFLFNR.cjs} +4 -4
  47. package/dist/{chunk-AFXDLDPU.cjs.map → chunk-5UYFLFNR.cjs.map} +1 -1
  48. package/dist/{chunk-R4TP3VS3.cjs → chunk-6DCIZA3X.cjs} +55 -55
  49. package/dist/{chunk-R4TP3VS3.cjs.map → chunk-6DCIZA3X.cjs.map} +1 -1
  50. package/dist/{chunk-KGGSBJMU.cjs → chunk-7TEUGFIL.cjs} +4 -4
  51. package/dist/{chunk-KGGSBJMU.cjs.map → chunk-7TEUGFIL.cjs.map} +1 -1
  52. package/dist/{chunk-A4Z5CTLF.cjs → chunk-7X3FS5HQ.cjs} +39 -39
  53. package/dist/{chunk-A4Z5CTLF.cjs.map → chunk-7X3FS5HQ.cjs.map} +1 -1
  54. package/dist/{chunk-GGBNUDLK.cjs → chunk-7XT5B2DZ.cjs} +25 -25
  55. package/dist/{chunk-GGBNUDLK.cjs.map → chunk-7XT5B2DZ.cjs.map} +1 -1
  56. package/dist/{chunk-AJVZYRAJ.cjs → chunk-AHT6DQNI.cjs} +59 -59
  57. package/dist/{chunk-AJVZYRAJ.cjs.map → chunk-AHT6DQNI.cjs.map} +1 -1
  58. package/dist/{chunk-MY7Q3QE2.cjs → chunk-BW5MF464.cjs} +4 -4
  59. package/dist/{chunk-MY7Q3QE2.cjs.map → chunk-BW5MF464.cjs.map} +1 -1
  60. package/dist/{chunk-NP4EWPIP.cjs → chunk-CJYWHUZR.cjs} +6 -6
  61. package/dist/{chunk-NP4EWPIP.cjs.map → chunk-CJYWHUZR.cjs.map} +1 -1
  62. package/dist/{chunk-6W4X4EFI.cjs → chunk-CMGNRMPA.cjs} +5 -5
  63. package/dist/{chunk-6W4X4EFI.cjs.map → chunk-CMGNRMPA.cjs.map} +1 -1
  64. package/dist/{chunk-Z3VNKPPH.cjs → chunk-E3Y7RI3J.cjs} +4 -4
  65. package/dist/{chunk-Z3VNKPPH.cjs.map → chunk-E3Y7RI3J.cjs.map} +1 -1
  66. package/dist/{chunk-WT7CCCIN.cjs → chunk-GNX3FBBX.cjs} +4 -4
  67. package/dist/{chunk-WT7CCCIN.cjs.map → chunk-GNX3FBBX.cjs.map} +1 -1
  68. package/dist/{chunk-KZKGZ7IG.cjs → chunk-GQXPNIRE.cjs} +14 -14
  69. package/dist/{chunk-KZKGZ7IG.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
  70. package/dist/{chunk-IIWJQEBC.cjs → chunk-H7PHOTX2.cjs} +10 -10
  71. package/dist/{chunk-IIWJQEBC.cjs.map → chunk-H7PHOTX2.cjs.map} +1 -1
  72. package/dist/{chunk-LQHXUSWZ.cjs → chunk-HQDR43JC.cjs} +6 -6
  73. package/dist/{chunk-LQHXUSWZ.cjs.map → chunk-HQDR43JC.cjs.map} +1 -1
  74. package/dist/{chunk-6LQN4BMX.cjs → chunk-IDCD5TEZ.cjs} +5 -5
  75. package/dist/{chunk-6LQN4BMX.cjs.map → chunk-IDCD5TEZ.cjs.map} +1 -1
  76. package/dist/{chunk-6YOZKXV6.cjs → chunk-JR2YSBD5.cjs} +4 -4
  77. package/dist/{chunk-6YOZKXV6.cjs.map → chunk-JR2YSBD5.cjs.map} +1 -1
  78. package/dist/{chunk-OTG5T5Z5.cjs → chunk-JSQQV23D.cjs} +4 -4
  79. package/dist/{chunk-OTG5T5Z5.cjs.map → chunk-JSQQV23D.cjs.map} +1 -1
  80. package/dist/{chunk-ZFKWCGA5.cjs → chunk-JV5TVUOU.cjs} +4 -4
  81. package/dist/{chunk-ZFKWCGA5.cjs.map → chunk-JV5TVUOU.cjs.map} +1 -1
  82. package/dist/{chunk-BHTEKYWJ.cjs → chunk-LFRNBT2I.cjs} +21 -21
  83. package/dist/{chunk-BHTEKYWJ.cjs.map → chunk-LFRNBT2I.cjs.map} +1 -1
  84. package/dist/{chunk-WJP6ICDM.cjs → chunk-LYTIQQQ2.cjs} +3 -3
  85. package/dist/{chunk-WJP6ICDM.cjs.map → chunk-LYTIQQQ2.cjs.map} +1 -1
  86. package/dist/{chunk-YONJRX6N.cjs → chunk-MC4F2URI.cjs} +28 -28
  87. package/dist/{chunk-YONJRX6N.cjs.map → chunk-MC4F2URI.cjs.map} +1 -1
  88. package/dist/{chunk-MQANCZOD.cjs → chunk-MGQSLMTC.cjs} +77 -77
  89. package/dist/{chunk-MQANCZOD.cjs.map → chunk-MGQSLMTC.cjs.map} +1 -1
  90. package/dist/{chunk-M2D4POJV.cjs → chunk-MZ2KZXNU.cjs} +8 -8
  91. package/dist/{chunk-M2D4POJV.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
  92. package/dist/{chunk-FGEBA3TL.cjs → chunk-NHHEMBXQ.cjs} +22 -22
  93. package/dist/{chunk-FGEBA3TL.cjs.map → chunk-NHHEMBXQ.cjs.map} +1 -1
  94. package/dist/{chunk-ENUZ35NR.cjs → chunk-P5AQYC4D.cjs} +4 -4
  95. package/dist/{chunk-ENUZ35NR.cjs.map → chunk-P5AQYC4D.cjs.map} +1 -1
  96. package/dist/{chunk-5I2VUNZR.cjs → chunk-PGJYD67F.cjs} +6 -6
  97. package/dist/{chunk-5I2VUNZR.cjs.map → chunk-PGJYD67F.cjs.map} +1 -1
  98. package/dist/{chunk-BYN7UMC5.cjs → chunk-PL7HUTM3.cjs} +8 -8
  99. package/dist/{chunk-BYN7UMC5.cjs.map → chunk-PL7HUTM3.cjs.map} +1 -1
  100. package/dist/{chunk-GTTDJMWX.cjs → chunk-Q6DQGGP4.cjs} +6 -6
  101. package/dist/{chunk-GTTDJMWX.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
  102. package/dist/{chunk-T7J352JD.cjs → chunk-QMIHLJMH.cjs} +6 -6
  103. package/dist/{chunk-T7J352JD.cjs.map → chunk-QMIHLJMH.cjs.map} +1 -1
  104. package/dist/{chunk-IE677C4I.cjs → chunk-SBWIA4PL.cjs} +21 -21
  105. package/dist/{chunk-IE677C4I.cjs.map → chunk-SBWIA4PL.cjs.map} +1 -1
  106. package/dist/{chunk-JDI7E4RI.cjs → chunk-TDN33HSK.cjs} +14 -14
  107. package/dist/{chunk-JDI7E4RI.cjs.map → chunk-TDN33HSK.cjs.map} +1 -1
  108. package/dist/{chunk-U5T46QCS.cjs → chunk-TKHCIHE2.cjs} +3 -3
  109. package/dist/chunk-TKHCIHE2.cjs.map +1 -0
  110. package/dist/{chunk-WIAWHETB.cjs → chunk-ULPTSXXO.cjs} +4 -4
  111. package/dist/{chunk-WIAWHETB.cjs.map → chunk-ULPTSXXO.cjs.map} +1 -1
  112. package/dist/{chunk-PIB7K7HI.cjs → chunk-UNDQYTRF.cjs} +7 -7
  113. package/dist/{chunk-PIB7K7HI.cjs.map → chunk-UNDQYTRF.cjs.map} +1 -1
  114. package/dist/{chunk-OKHKJ5ML.cjs → chunk-UUENH4BJ.cjs} +11 -11
  115. package/dist/{chunk-OKHKJ5ML.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
  116. package/dist/{chunk-K5MYEWD5.cjs → chunk-UZHWXKS6.cjs} +7 -7
  117. package/dist/{chunk-K5MYEWD5.cjs.map → chunk-UZHWXKS6.cjs.map} +1 -1
  118. package/dist/{chunk-OZWYCRRK.cjs → chunk-V5IMYLYK.cjs} +29 -29
  119. package/dist/{chunk-OZWYCRRK.cjs.map → chunk-V5IMYLYK.cjs.map} +1 -1
  120. package/dist/{chunk-XW524KUX.cjs → chunk-VJCSEMXT.cjs} +4 -4
  121. package/dist/{chunk-XW524KUX.cjs.map → chunk-VJCSEMXT.cjs.map} +1 -1
  122. package/dist/{chunk-B5442TKX.cjs → chunk-VRK3IQAP.cjs} +4 -4
  123. package/dist/{chunk-B5442TKX.cjs.map → chunk-VRK3IQAP.cjs.map} +1 -1
  124. package/dist/{chunk-MYRKL3JO.cjs → chunk-VWTOIGX4.cjs} +4 -4
  125. package/dist/{chunk-MYRKL3JO.cjs.map → chunk-VWTOIGX4.cjs.map} +1 -1
  126. package/dist/{chunk-5VCID67B.cjs → chunk-WW6LXQY6.cjs} +10 -10
  127. package/dist/{chunk-5VCID67B.cjs.map → chunk-WW6LXQY6.cjs.map} +1 -1
  128. package/dist/{chunk-YAPXIANR.cjs → chunk-YVCOQHCE.cjs} +5 -5
  129. package/dist/{chunk-YAPXIANR.cjs.map → chunk-YVCOQHCE.cjs.map} +1 -1
  130. package/dist/{chunk-L52N2LVE.cjs → chunk-ZZA756I4.cjs} +4 -4
  131. package/dist/{chunk-L52N2LVE.cjs.map → chunk-ZZA756I4.cjs.map} +1 -1
  132. package/dist/citations/index.cjs +8 -8
  133. package/dist/connect/docx.cjs +19 -19
  134. package/dist/connect/index.cjs +1121 -1097
  135. package/dist/connect/index.cjs.map +1 -1
  136. package/dist/connect/viewer.cjs +26 -26
  137. package/dist/connection/ConnectedWorkflowBuilder.d.ts +11 -0
  138. package/dist/connection/ConnectedWorkflowBuilder.js +42 -3
  139. package/dist/connection/ConnectedWorkflowBuilder.js.map +2 -2
  140. package/dist/connection/conversation/ConnectedConversationPage.js +36 -2
  141. package/dist/connection/conversation/ConnectedConversationPage.js.map +2 -2
  142. package/dist/connection/workflows/ConnectedWorkflowsPage.js +10 -3
  143. package/dist/connection/workflows/ConnectedWorkflowsPage.js.map +2 -2
  144. package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -0
  145. package/dist/connection/workflows/useWorkflowsPageState.js.map +2 -2
  146. package/dist/dashboards/index.cjs +22 -22
  147. package/dist/embed/index.cjs +32 -32
  148. package/dist/facts/index.cjs +44 -44
  149. package/dist/files/index.cjs +226 -226
  150. package/dist/home/index.cjs +32 -32
  151. package/dist/index.cjs +907 -907
  152. package/dist/provider/environment.d.ts +5 -0
  153. package/dist/provider/environment.js +1 -1
  154. package/dist/provider/environment.js.map +2 -2
  155. package/dist/provider/requests.d.ts +2 -0
  156. package/dist/provider/requests.js.map +2 -2
  157. package/dist/retrieval/index.cjs +4 -4
  158. package/dist/shell/index.cjs +50 -50
  159. package/dist/site/index.cjs +5 -5
  160. package/dist/studio/index.cjs +31 -31
  161. package/dist/workflow-canvas/index.cjs +92 -50
  162. package/dist/workflow-canvas/index.cjs.map +1 -1
  163. package/dist/workspaces/index.cjs +27 -27
  164. package/node_modules/@arbidocs/coedit/package.json +1 -1
  165. package/package.json +5 -5
  166. package/dist/ai-EMNMGDAN.cjs.map +0 -1
  167. package/dist/chunk-U5T46QCS.cjs.map +0 -1
@@ -65,6 +65,11 @@ export interface OpenWorkflowOptions {
65
65
  * (`ConnectedWorkflowRunPage`) itself; the host only shows the page.
66
66
  */
67
67
  view?: 'builder' | 'runs' | 'run';
68
+ /**
69
+ * With no workflow: a new workflow's builder starts from this preset instead of a blank one
70
+ * (`schedule`: a repeating schedule with one task prompt to fill in).
71
+ */
72
+ preset?: 'schedule';
68
73
  /** The workspace the workflow is in, when it is not the open one. */
69
74
  workspaceId?: string;
70
75
  }
@@ -92,7 +92,7 @@ function resolve(environment) {
92
92
  openMail(options);
93
93
  }),
94
94
  openWorkflow: recordingIntent(environment.openWorkflow, (openWorkflow) => (id, options) => {
95
- workflowOpenRequest.request({ workflowId: id, view: options?.view });
95
+ workflowOpenRequest.request({ workflowId: id, view: options?.view, preset: options?.preset });
96
96
  openWorkflow(id, options);
97
97
  }),
98
98
  openNewConversation: recordingIntent(environment.openNewConversation, (openNewConversation) => (options) => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/provider/environment.ts"],
4
- "sourcesContent": ["import { useSyncExternalStore, type ReactNode } from 'react'\nimport type { AnalyticsChartRequest, MailAttachment } from '@arbidocs/react'\nimport {\n notify as notifyStore,\n useHostConfigRecord,\n type NotifyOptions,\n type NotifyVariant,\n} from '@arbidocs/react/shell'\nimport type { BlockLinkComponent } from '../components/blockLink'\nimport { requestCalendarEvent, type PendingCalendarEvent } from '../connection/calendar/store'\nimport { choiceDialog, confirmDialog, type ChoiceRequest, type ConfirmRequest } from './dialogs'\nimport {\n closeDialog,\n openDialog,\n type BlocksDialogKind,\n type DialogPropsArg,\n type ShareRequest,\n type UploadSource,\n} from './dialog-registry'\nimport {\n conversationStartRequest,\n mailDraftRequest,\n mailMessageRequest,\n mailFolderRequest,\n mailComposeRequest,\n workflowOpenRequest,\n} from './requests'\nimport { requestSettingsSection } from './settings-section'\n\n/** What blocks need from the host's runtime configuration (the app's `config.json`). */\nexport interface BlocksRuntimeConfig {\n /** Origin of the ARBI API; `''` means the page's own origin. */\n apiBaseUrl: string\n /** The deployment's domain, e.g. `www.arbidocs.com` (deep links, key derivation, labels). */\n deploymentDomain: string\n /** Where seats are added for this deployment (a Box's licence page); none: its settings. */\n licenceUrl?: string\n /**\n * A public page where a Microsoft administrator approves SharePoint access, for the user to send\n * them (the accounts import offers the link). None: no link.\n */\n sharePointAdminUrl?: string\n}\n\nexport interface OpenDocumentOptions {\n /** 1-based page to scroll to. */\n page?: number\n /** Passage (chunk) to highlight. */\n passageId?: string\n /**\n * The workspace the document is in, when it is not the open one (a document an agent wrote in\n * its own workspace): the host opens that workspace first.\n */\n workspaceId?: string\n /** An earlier version (1-based); none: the current one. */\n version?: number\n /**\n * The viewer tab to show: `pdf` is where a signature request is reviewed and signed, and where\n * a copy the document tools made (frozen, signed) opens.\n */\n tab?: 'pdf'\n}\n\nexport type { ShareRequest, UploadSource }\n\nexport interface OpenWordEditorOptions {\n /** The comment to show (a mention in it, a reply to it). */\n commentId?: string\n /** The workspace the document is in, when it is not the open one. */\n workspaceId?: string\n}\n\nexport interface OpenConversationOptions {\n /** The message to scroll to. */\n messageId?: string\n /** The open document stays on screen beside the thread (a thread about it). */\n keepDocumentOpen?: boolean\n /** The workspace the thread is in, when it is not the open one. */\n workspaceId?: string\n}\n\nexport interface OpenNewConversationOptions {\n /** Its first message, sent once the new conversation is ready (an ask bar, \"Ask about this\"). */\n prompt?: string\n /** The open document stays on screen beside it (a chat started from it). */\n keepDocumentOpen?: boolean\n}\n\nexport interface OpenWorkflowOptions {\n /**\n * The workflow's editor (default), its runs, or (`run`, a host catalogue entry) where it starts.\n * The Workflows page (`ConnectedWorkflowsPage`) opens the editor, the runs or the run page\n * (`ConnectedWorkflowRunPage`) itself; the host only shows the page.\n */\n view?: 'builder' | 'runs' | 'run'\n /** The workspace the workflow is in, when it is not the open one. */\n workspaceId?: string\n}\n\nexport interface OpenMailOptions {\n /** The email draft to show (a draft a workflow step or an agent left), to check and send. */\n draftId?: string\n /** The folder to show (`inbox`, `sent`, `trash`, `outbox`\u2026). Default: the host's own. */\n folder?: string\n /** A message to show in the native inbox (a secure message just claimed from its link). */\n messageId?: string\n /** Start a new message with these files attached (\"Email\" on a document). */\n attachments?: MailAttachment[]\n}\n\nexport interface OpenCalendarOptions {\n /** The event to open on. */\n event?: PendingCalendarEvent\n}\n\n/** What `openFiles` shows: some files selected, and the list narrowed. */\nexport interface OpenFilesOptions {\n /** Files to select. */\n select?: string[]\n /** Quick filters by key (a label id, `folder:<path>`, `folder:none`): show or hide those files. */\n filters?: Record<string, 'include' | 'exclude'>\n}\n\n/**\n * Something a kit links to (the target of an `open\u2026` intent), for `hrefFor`. `workspaceId` is the\n * workspace it is in, when the kit knows it.\n */\nexport type LinkTarget =\n | { kind: 'document'; documentId: string; workspaceId?: string | null }\n | {\n kind: 'conversation'\n conversationId: string\n workspaceId?: string | null\n messageId?: string\n }\n | { kind: 'workspace'; workspaceId: string }\n /** A project; none: the projects list. */\n | { kind: 'project'; projectId?: string }\n /** A workflow (its editor); none: the workflows list. */\n | { kind: 'workflow'; workflowId?: string; workspaceId?: string | null }\n /** The mailbox, on an email draft when given. */\n | { kind: 'mail'; draftId?: string }\n /** The user's settings, at a section when given. */\n | { kind: 'settings'; section?: string }\n /** The calendar, on an event when given. */\n | { kind: 'calendar'; eventId?: string }\n\n/**\n * The only way blocks reach the host app's environment: the host configuration's `environment`\n * (`<ArbiHost config={{ environment: { navigate, notify, \u2026 } }}>`). Blocks never import a router, a\n * toast library or an app store; the host gives what it has, and every field has a safe default so\n * a block renders correctly with no host at all. A nested host overrides only the fields it gives\n * and inherits the rest.\n */\nexport interface BlocksEnvironment {\n /** Router-aware link (keeps navigation in-SPA). Default: a plain `<a href>`. */\n linkComponent?: BlockLinkComponent\n /** Imperative navigation for buttons and keyboard shortcuts. Default: `window.location.assign`. */\n navigate: (href: string) => void\n /**\n * A hook: the address on screen (path, then any search), re-rendering when it changes. A routed\n * shell reads its current row from it. A host with a router adapts that router's location\n * (react-router: `() => { const l = useLocation(); return l.pathname + l.search }`); keep the\n * same hook for the host's life. Default: the window's address, following Back/Forward.\n */\n useLocation: () => string\n /** Surface a transient message (and record it in the notification centre). Default: the shared\n * `@arbidocs/react` notify store, rendered by its `<Toaster/>`. */\n notify: (message: ReactNode, kind?: NotifyVariant, options?: NotifyOptions) => void\n /** Ask the user to confirm. Default: the blocks prompt dialog. */\n confirm: (request: ConfirmRequest) => Promise<boolean>\n /** Ask the user to pick one of several choices; `null` when dismissed. Default: the blocks\n * prompt dialog. */\n choose: <T extends string>(request: ChoiceRequest<T>) => Promise<T | null>\n /**\n * Open a global dialog by kind (`BlocksDialogProps`), shown by the one `<ConnectedGlobalDialogs>`\n * in the shell. Default: the blocks dialog registry.\n */\n openDialog: <K extends BlocksDialogKind>(kind: K, ...props: DialogPropsArg<K>) => void\n /** Close a global dialog. Default: the blocks dialog registry. */\n closeDialog: (kind: BlocksDialogKind) => void\n /** Deployment configuration. Default: same-origin API on the page's own host. */\n runtimeConfig: BlocksRuntimeConfig\n /**\n * The address of a target in the host's router, for a real link (open in a new tab, middle-click,\n * copy link) beside the matching `open\u2026` intent: a kit never builds an app path itself, so its\n * links and its navigation agree on every site. `undefined`: no link (the row still opens on a\n * click). Default: none. ARBI's addresses (`/wrk-\u2026/doc-\u2026`): the route codec's `hrefFor`.\n */\n hrefFor: (target: LinkTarget) => string | undefined\n /** Open a document (optionally at a page / passage) wherever the host shows documents.\n * Default: no-op. */\n openDocument: (documentId: string, options?: OpenDocumentOptions) => void\n /**\n * Open a Word document (`opensInWord`) in the host's Word editor, optionally on a comment.\n * Default: `openDocument` (a host whose viewer edits Word documents in place needs no other).\n */\n openWordEditor: (documentId: string, options?: OpenWordEditorOptions) => void\n /** Open a conversation thread, optionally scrolled to a message. Default: no-op. */\n openConversation: (conversationId: string, options?: OpenConversationOptions) => void\n /**\n * Show a new, empty conversation, unbound to any document. With a `prompt` it is sent as the\n * first message once the conversation is ready (recorded for the chat that shows it:\n * `ConnectedConversationThread`, `ChatPage`). Without one a launch composes into the session's draft\n * after this. Default: no-op.\n */\n openNewConversation: (options?: OpenNewConversationOptions) => void\n /**\n * Open the user's settings, optionally at a section (a `ConnectedSettingsPage` section id).\n * The section is always recorded for `ConnectedSettingsPage` first (`requestSettingsSection`);\n * the host's handler then shows its settings. Default: only that record.\n */\n openSettings: (section?: string) => void\n /** Open a project; no id: the projects list. Default: no-op. */\n openProject: (projectId?: string) => void\n /**\n * Show the calendar page (`ConnectedCalendar`), optionally on an event (recorded for the\n * calendar first: `requestCalendarEvent`). Default: only that record.\n */\n openCalendar: (options?: OpenCalendarOptions) => void\n /**\n * Show the mailbox (`ConnectedMailbox`), optionally on an email draft (recorded for the mailbox\n * first). Absent: the host has no mail, and a kit offers no way to open it.\n */\n openMail?: (options?: OpenMailOptions) => void\n /** Show the host's calls page (call history, scheduled calls). Absent: not offered. */\n openCalls?: () => void\n /** Open the direct chat with a person (the host's messenger). Absent: not offered. */\n openDirectChat?: (userId: string) => void\n /** Open one of my chats (a group or meeting chat) in the host's messenger. Absent: not offered. */\n openChat?: (chatId: string) => void\n /** Show the host's notification centre (`ConnectedNotificationCenter`), optionally on one\n * entry (`focusId`). Absent: not offered. */\n openNotifications?: (options?: { focusId?: string }) => void\n /** Show the host's contacts (a panel it toggles, a page). Absent: not offered. */\n openContacts?: () => void\n /** Show the host's databases page (user-defined tables). Absent: not offered. */\n openDatabases?: () => void\n /** Show the host's Analytics page (saved dashboards); `database`: with a new dashboard charting that\n * database (a database's \"Chart this\"). Absent: not offered. */\n openAnalytics?: (options?: { database?: AnalyticsChartRequest }) => void\n /** Show the host's tags page (people, organisations and the other tags). Absent: not offered. */\n openTags?: () => void\n /** Show the host's facts page; `compose`: with its composer open for a new fact; `focusId`: at\n * that fact. Absent: not offered. */\n openFacts?: (options?: { compose?: boolean; focusId?: string }) => void\n /** Show the open workspace's threads (the host's threads page). Absent: not offered. */\n openThreads?: () => void\n /** Show the host's Smart Search page (`ConnectedSearchPage`). Absent: not offered. */\n openSmartSearch?: () => void\n /**\n * Open a workflow in the host's Workflows page (its editor, or its runs); no id: the list.\n * Offered only while the `workflows` feature is on (`useOpenWorkflow` in `/connect`). Absent: never.\n */\n openWorkflow?: (workflowId?: string, options?: OpenWorkflowOptions) => void\n /**\n * Show the open workspace's document processing (the host's processing panel: what is indexing,\n * what failed). Absent: not offered.\n */\n openProcessing?: () => void\n /** Show the open workspace's files, optionally with some selected and the list narrowed. Default: no-op. */\n openFiles: (options?: OpenFilesOptions) => void\n /**\n * Add files the host's way (its upload dialog), optionally with some already picked, or from one\n * source. Absent: a kit that adds files uploads them itself.\n */\n openUpload?: (files?: File[], options?: { source?: UploadSource }) => void\n /** Open the host's skills browser, optionally at one skill. Absent: not offered. */\n openSkillsBrowser?: (skillSlug?: string) => void\n /** Share a document or a thread by email (the host's share dialog). Absent: not offered. */\n openShare?: (request: ShareRequest) => void\n /**\n * Show a workspace (its own page). Under `defaultHost`'s sign-in layer the kits select it first\n * (`useConnectedWorkspace().openWorkspace`); a host that keeps its own session switches to it\n * here. `name` is for the host's messages. Default: no-op.\n */\n openWorkspace: (workspaceId: string, options?: { name?: string }) => void\n}\n\nconst noop = () => {}\n\nconst subscribeToHistory = (listener: () => void) => {\n window.addEventListener('popstate', listener)\n return () => window.removeEventListener('popstate', listener)\n}\nconst windowAddress = () => window.location.pathname + window.location.search\n\n/** The window's address, following Back/Forward (the environment's default `useLocation`). */\nfunction useWindowLocation(): string {\n return useSyncExternalStore(subscribeToHistory, windowAddress, () => '/')\n}\n\nconst defaultEnvironment: BlocksEnvironment = {\n navigate: (href) => {\n if (typeof window !== 'undefined') window.location.assign(href)\n },\n useLocation: useWindowLocation,\n notify: (message, kind = 'info', options) => {\n notifyStore[kind](message, options)\n },\n confirm: confirmDialog,\n choose: choiceDialog,\n openDialog,\n closeDialog,\n runtimeConfig: {\n apiBaseUrl: '',\n deploymentDomain: typeof window !== 'undefined' ? window.location.host : '',\n },\n hrefFor: () => undefined,\n openDocument: noop,\n openWordEditor: noop,\n openConversation: noop,\n openNewConversation: noop,\n openSettings: requestSettingsSection,\n openProject: noop,\n openCalendar: (options) => {\n if (options?.event) requestCalendarEvent(options.event)\n },\n openFiles: noop,\n openWorkspace: noop,\n}\n\nconst resolved = new WeakMap<object, BlocksEnvironment>()\nconst complete = new WeakSet<BlocksEnvironment>()\n// The intents below that record what they open on: a resolved environment passed on again (a\n// nested host's, `createBlocksEnvironment`'s) records once, not twice.\nconst recording = new WeakSet<object>()\n\nfunction records<F extends object>(intent: F): F {\n recording.add(intent)\n return intent\n}\n\nfunction recordingIntent<F extends object>(\n host: F | undefined,\n wrap: (host: F) => F\n): F | undefined {\n if (!host) return undefined\n return recording.has(host) ? host : records(wrap(host))\n}\n\nfunction resolve(environment: Partial<BlocksEnvironment>): BlocksEnvironment {\n const { openDocument } = environment\n const value: BlocksEnvironment = {\n ...defaultEnvironment,\n openWordEditor: openDocument\n ? (documentId, options) => openDocument(documentId, { workspaceId: options?.workspaceId })\n : noop,\n ...environment,\n // What an intent opens on is recorded for the surface before the host shows it.\n openSettings:\n recordingIntent(environment.openSettings, (openSettings) => (section) => {\n requestSettingsSection(section)\n openSettings(section)\n }) ?? defaultEnvironment.openSettings,\n openCalendar:\n recordingIntent(environment.openCalendar, (openCalendar) => (options) => {\n defaultEnvironment.openCalendar(options)\n openCalendar(options)\n }) ?? defaultEnvironment.openCalendar,\n openMail: recordingIntent(environment.openMail, (openMail) => (options) => {\n if (options?.draftId) mailDraftRequest.request(options.draftId)\n if (options?.messageId) mailMessageRequest.request(options.messageId)\n if (options?.folder) mailFolderRequest.request(options.folder)\n if (options?.attachments?.length) mailComposeRequest.request(options.attachments)\n openMail(options)\n }),\n openWorkflow: recordingIntent(environment.openWorkflow, (openWorkflow) => (id, options) => {\n workflowOpenRequest.request({ workflowId: id, view: options?.view })\n openWorkflow(id, options)\n }),\n openNewConversation:\n recordingIntent(environment.openNewConversation, (openNewConversation) => (options) => {\n openNewConversation(options)\n // After the host's reset of the new conversation, which clears its draft.\n const prompt = options?.prompt?.trim()\n if (prompt) conversationStartRequest.request(prompt)\n }) ?? noop,\n }\n complete.add(value)\n return value\n}\n\n/**\n * The environment with every field filled in (the defaults where `environment` gives none), and\n * every intent recording what it opens on. A host calls it for code outside React (a store action,\n * a notification handler); passing the result as the host configuration's `environment` uses it\n * as is.\n */\nexport function createBlocksEnvironment(\n environment: Partial<BlocksEnvironment>\n): BlocksEnvironment {\n if (complete.has(environment as BlocksEnvironment)) return environment as BlocksEnvironment\n let value = resolved.get(environment)\n if (!value) resolved.set(environment, (value = resolve(environment)))\n return value\n}\n\n/** The host's environment, every field filled in (the defaults where the host gives none). */\nexport function useBlocksEnvironment(): BlocksEnvironment {\n const environment = useHostConfigRecord().environment as Partial<BlocksEnvironment> | undefined\n return environment ? createBlocksEnvironment(environment) : defaultEnvironment\n}\n\n/** Open and close the global dialogs (`<ConnectedGlobalDialogs>`), the host's way. */\nexport function useBlocksDialogs(): Pick<BlocksEnvironment, 'openDialog' | 'closeDialog'> {\n const { openDialog, closeDialog } = useBlocksEnvironment()\n return { openDialog, closeDialog }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useSyncExternalStore, type ReactNode } from 'react'\nimport type { AnalyticsChartRequest, MailAttachment } from '@arbidocs/react'\nimport {\n notify as notifyStore,\n useHostConfigRecord,\n type NotifyOptions,\n type NotifyVariant,\n} from '@arbidocs/react/shell'\nimport type { BlockLinkComponent } from '../components/blockLink'\nimport { requestCalendarEvent, type PendingCalendarEvent } from '../connection/calendar/store'\nimport { choiceDialog, confirmDialog, type ChoiceRequest, type ConfirmRequest } from './dialogs'\nimport {\n closeDialog,\n openDialog,\n type BlocksDialogKind,\n type DialogPropsArg,\n type ShareRequest,\n type UploadSource,\n} from './dialog-registry'\nimport {\n conversationStartRequest,\n mailDraftRequest,\n mailMessageRequest,\n mailFolderRequest,\n mailComposeRequest,\n workflowOpenRequest,\n} from './requests'\nimport { requestSettingsSection } from './settings-section'\n\n/** What blocks need from the host's runtime configuration (the app's `config.json`). */\nexport interface BlocksRuntimeConfig {\n /** Origin of the ARBI API; `''` means the page's own origin. */\n apiBaseUrl: string\n /** The deployment's domain, e.g. `www.arbidocs.com` (deep links, key derivation, labels). */\n deploymentDomain: string\n /** Where seats are added for this deployment (a Box's licence page); none: its settings. */\n licenceUrl?: string\n /**\n * A public page where a Microsoft administrator approves SharePoint access, for the user to send\n * them (the accounts import offers the link). None: no link.\n */\n sharePointAdminUrl?: string\n}\n\nexport interface OpenDocumentOptions {\n /** 1-based page to scroll to. */\n page?: number\n /** Passage (chunk) to highlight. */\n passageId?: string\n /**\n * The workspace the document is in, when it is not the open one (a document an agent wrote in\n * its own workspace): the host opens that workspace first.\n */\n workspaceId?: string\n /** An earlier version (1-based); none: the current one. */\n version?: number\n /**\n * The viewer tab to show: `pdf` is where a signature request is reviewed and signed, and where\n * a copy the document tools made (frozen, signed) opens.\n */\n tab?: 'pdf'\n}\n\nexport type { ShareRequest, UploadSource }\n\nexport interface OpenWordEditorOptions {\n /** The comment to show (a mention in it, a reply to it). */\n commentId?: string\n /** The workspace the document is in, when it is not the open one. */\n workspaceId?: string\n}\n\nexport interface OpenConversationOptions {\n /** The message to scroll to. */\n messageId?: string\n /** The open document stays on screen beside the thread (a thread about it). */\n keepDocumentOpen?: boolean\n /** The workspace the thread is in, when it is not the open one. */\n workspaceId?: string\n}\n\nexport interface OpenNewConversationOptions {\n /** Its first message, sent once the new conversation is ready (an ask bar, \"Ask about this\"). */\n prompt?: string\n /** The open document stays on screen beside it (a chat started from it). */\n keepDocumentOpen?: boolean\n}\n\nexport interface OpenWorkflowOptions {\n /**\n * The workflow's editor (default), its runs, or (`run`, a host catalogue entry) where it starts.\n * The Workflows page (`ConnectedWorkflowsPage`) opens the editor, the runs or the run page\n * (`ConnectedWorkflowRunPage`) itself; the host only shows the page.\n */\n view?: 'builder' | 'runs' | 'run'\n /**\n * With no workflow: a new workflow's builder starts from this preset instead of a blank one\n * (`schedule`: a repeating schedule with one task prompt to fill in).\n */\n preset?: 'schedule'\n /** The workspace the workflow is in, when it is not the open one. */\n workspaceId?: string\n}\n\nexport interface OpenMailOptions {\n /** The email draft to show (a draft a workflow step or an agent left), to check and send. */\n draftId?: string\n /** The folder to show (`inbox`, `sent`, `trash`, `outbox`\u2026). Default: the host's own. */\n folder?: string\n /** A message to show in the native inbox (a secure message just claimed from its link). */\n messageId?: string\n /** Start a new message with these files attached (\"Email\" on a document). */\n attachments?: MailAttachment[]\n}\n\nexport interface OpenCalendarOptions {\n /** The event to open on. */\n event?: PendingCalendarEvent\n}\n\n/** What `openFiles` shows: some files selected, and the list narrowed. */\nexport interface OpenFilesOptions {\n /** Files to select. */\n select?: string[]\n /** Quick filters by key (a label id, `folder:<path>`, `folder:none`): show or hide those files. */\n filters?: Record<string, 'include' | 'exclude'>\n}\n\n/**\n * Something a kit links to (the target of an `open\u2026` intent), for `hrefFor`. `workspaceId` is the\n * workspace it is in, when the kit knows it.\n */\nexport type LinkTarget =\n | { kind: 'document'; documentId: string; workspaceId?: string | null }\n | {\n kind: 'conversation'\n conversationId: string\n workspaceId?: string | null\n messageId?: string\n }\n | { kind: 'workspace'; workspaceId: string }\n /** A project; none: the projects list. */\n | { kind: 'project'; projectId?: string }\n /** A workflow (its editor); none: the workflows list. */\n | { kind: 'workflow'; workflowId?: string; workspaceId?: string | null }\n /** The mailbox, on an email draft when given. */\n | { kind: 'mail'; draftId?: string }\n /** The user's settings, at a section when given. */\n | { kind: 'settings'; section?: string }\n /** The calendar, on an event when given. */\n | { kind: 'calendar'; eventId?: string }\n\n/**\n * The only way blocks reach the host app's environment: the host configuration's `environment`\n * (`<ArbiHost config={{ environment: { navigate, notify, \u2026 } }}>`). Blocks never import a router, a\n * toast library or an app store; the host gives what it has, and every field has a safe default so\n * a block renders correctly with no host at all. A nested host overrides only the fields it gives\n * and inherits the rest.\n */\nexport interface BlocksEnvironment {\n /** Router-aware link (keeps navigation in-SPA). Default: a plain `<a href>`. */\n linkComponent?: BlockLinkComponent\n /** Imperative navigation for buttons and keyboard shortcuts. Default: `window.location.assign`. */\n navigate: (href: string) => void\n /**\n * A hook: the address on screen (path, then any search), re-rendering when it changes. A routed\n * shell reads its current row from it. A host with a router adapts that router's location\n * (react-router: `() => { const l = useLocation(); return l.pathname + l.search }`); keep the\n * same hook for the host's life. Default: the window's address, following Back/Forward.\n */\n useLocation: () => string\n /** Surface a transient message (and record it in the notification centre). Default: the shared\n * `@arbidocs/react` notify store, rendered by its `<Toaster/>`. */\n notify: (message: ReactNode, kind?: NotifyVariant, options?: NotifyOptions) => void\n /** Ask the user to confirm. Default: the blocks prompt dialog. */\n confirm: (request: ConfirmRequest) => Promise<boolean>\n /** Ask the user to pick one of several choices; `null` when dismissed. Default: the blocks\n * prompt dialog. */\n choose: <T extends string>(request: ChoiceRequest<T>) => Promise<T | null>\n /**\n * Open a global dialog by kind (`BlocksDialogProps`), shown by the one `<ConnectedGlobalDialogs>`\n * in the shell. Default: the blocks dialog registry.\n */\n openDialog: <K extends BlocksDialogKind>(kind: K, ...props: DialogPropsArg<K>) => void\n /** Close a global dialog. Default: the blocks dialog registry. */\n closeDialog: (kind: BlocksDialogKind) => void\n /** Deployment configuration. Default: same-origin API on the page's own host. */\n runtimeConfig: BlocksRuntimeConfig\n /**\n * The address of a target in the host's router, for a real link (open in a new tab, middle-click,\n * copy link) beside the matching `open\u2026` intent: a kit never builds an app path itself, so its\n * links and its navigation agree on every site. `undefined`: no link (the row still opens on a\n * click). Default: none. ARBI's addresses (`/wrk-\u2026/doc-\u2026`): the route codec's `hrefFor`.\n */\n hrefFor: (target: LinkTarget) => string | undefined\n /** Open a document (optionally at a page / passage) wherever the host shows documents.\n * Default: no-op. */\n openDocument: (documentId: string, options?: OpenDocumentOptions) => void\n /**\n * Open a Word document (`opensInWord`) in the host's Word editor, optionally on a comment.\n * Default: `openDocument` (a host whose viewer edits Word documents in place needs no other).\n */\n openWordEditor: (documentId: string, options?: OpenWordEditorOptions) => void\n /** Open a conversation thread, optionally scrolled to a message. Default: no-op. */\n openConversation: (conversationId: string, options?: OpenConversationOptions) => void\n /**\n * Show a new, empty conversation, unbound to any document. With a `prompt` it is sent as the\n * first message once the conversation is ready (recorded for the chat that shows it:\n * `ConnectedConversationThread`, `ChatPage`). Without one a launch composes into the session's draft\n * after this. Default: no-op.\n */\n openNewConversation: (options?: OpenNewConversationOptions) => void\n /**\n * Open the user's settings, optionally at a section (a `ConnectedSettingsPage` section id).\n * The section is always recorded for `ConnectedSettingsPage` first (`requestSettingsSection`);\n * the host's handler then shows its settings. Default: only that record.\n */\n openSettings: (section?: string) => void\n /** Open a project; no id: the projects list. Default: no-op. */\n openProject: (projectId?: string) => void\n /**\n * Show the calendar page (`ConnectedCalendar`), optionally on an event (recorded for the\n * calendar first: `requestCalendarEvent`). Default: only that record.\n */\n openCalendar: (options?: OpenCalendarOptions) => void\n /**\n * Show the mailbox (`ConnectedMailbox`), optionally on an email draft (recorded for the mailbox\n * first). Absent: the host has no mail, and a kit offers no way to open it.\n */\n openMail?: (options?: OpenMailOptions) => void\n /** Show the host's calls page (call history, scheduled calls). Absent: not offered. */\n openCalls?: () => void\n /** Open the direct chat with a person (the host's messenger). Absent: not offered. */\n openDirectChat?: (userId: string) => void\n /** Open one of my chats (a group or meeting chat) in the host's messenger. Absent: not offered. */\n openChat?: (chatId: string) => void\n /** Show the host's notification centre (`ConnectedNotificationCenter`), optionally on one\n * entry (`focusId`). Absent: not offered. */\n openNotifications?: (options?: { focusId?: string }) => void\n /** Show the host's contacts (a panel it toggles, a page). Absent: not offered. */\n openContacts?: () => void\n /** Show the host's databases page (user-defined tables). Absent: not offered. */\n openDatabases?: () => void\n /** Show the host's Analytics page (saved dashboards); `database`: with a new dashboard charting that\n * database (a database's \"Chart this\"). Absent: not offered. */\n openAnalytics?: (options?: { database?: AnalyticsChartRequest }) => void\n /** Show the host's tags page (people, organisations and the other tags). Absent: not offered. */\n openTags?: () => void\n /** Show the host's facts page; `compose`: with its composer open for a new fact; `focusId`: at\n * that fact. Absent: not offered. */\n openFacts?: (options?: { compose?: boolean; focusId?: string }) => void\n /** Show the open workspace's threads (the host's threads page). Absent: not offered. */\n openThreads?: () => void\n /** Show the host's Smart Search page (`ConnectedSearchPage`). Absent: not offered. */\n openSmartSearch?: () => void\n /**\n * Open a workflow in the host's Workflows page (its editor, or its runs); no id: the list.\n * Offered only while the `workflows` feature is on (`useOpenWorkflow` in `/connect`). Absent: never.\n */\n openWorkflow?: (workflowId?: string, options?: OpenWorkflowOptions) => void\n /**\n * Show the open workspace's document processing (the host's processing panel: what is indexing,\n * what failed). Absent: not offered.\n */\n openProcessing?: () => void\n /** Show the open workspace's files, optionally with some selected and the list narrowed. Default: no-op. */\n openFiles: (options?: OpenFilesOptions) => void\n /**\n * Add files the host's way (its upload dialog), optionally with some already picked, or from one\n * source. Absent: a kit that adds files uploads them itself.\n */\n openUpload?: (files?: File[], options?: { source?: UploadSource }) => void\n /** Open the host's skills browser, optionally at one skill. Absent: not offered. */\n openSkillsBrowser?: (skillSlug?: string) => void\n /** Share a document or a thread by email (the host's share dialog). Absent: not offered. */\n openShare?: (request: ShareRequest) => void\n /**\n * Show a workspace (its own page). Under `defaultHost`'s sign-in layer the kits select it first\n * (`useConnectedWorkspace().openWorkspace`); a host that keeps its own session switches to it\n * here. `name` is for the host's messages. Default: no-op.\n */\n openWorkspace: (workspaceId: string, options?: { name?: string }) => void\n}\n\nconst noop = () => {}\n\nconst subscribeToHistory = (listener: () => void) => {\n window.addEventListener('popstate', listener)\n return () => window.removeEventListener('popstate', listener)\n}\nconst windowAddress = () => window.location.pathname + window.location.search\n\n/** The window's address, following Back/Forward (the environment's default `useLocation`). */\nfunction useWindowLocation(): string {\n return useSyncExternalStore(subscribeToHistory, windowAddress, () => '/')\n}\n\nconst defaultEnvironment: BlocksEnvironment = {\n navigate: (href) => {\n if (typeof window !== 'undefined') window.location.assign(href)\n },\n useLocation: useWindowLocation,\n notify: (message, kind = 'info', options) => {\n notifyStore[kind](message, options)\n },\n confirm: confirmDialog,\n choose: choiceDialog,\n openDialog,\n closeDialog,\n runtimeConfig: {\n apiBaseUrl: '',\n deploymentDomain: typeof window !== 'undefined' ? window.location.host : '',\n },\n hrefFor: () => undefined,\n openDocument: noop,\n openWordEditor: noop,\n openConversation: noop,\n openNewConversation: noop,\n openSettings: requestSettingsSection,\n openProject: noop,\n openCalendar: (options) => {\n if (options?.event) requestCalendarEvent(options.event)\n },\n openFiles: noop,\n openWorkspace: noop,\n}\n\nconst resolved = new WeakMap<object, BlocksEnvironment>()\nconst complete = new WeakSet<BlocksEnvironment>()\n// The intents below that record what they open on: a resolved environment passed on again (a\n// nested host's, `createBlocksEnvironment`'s) records once, not twice.\nconst recording = new WeakSet<object>()\n\nfunction records<F extends object>(intent: F): F {\n recording.add(intent)\n return intent\n}\n\nfunction recordingIntent<F extends object>(\n host: F | undefined,\n wrap: (host: F) => F\n): F | undefined {\n if (!host) return undefined\n return recording.has(host) ? host : records(wrap(host))\n}\n\nfunction resolve(environment: Partial<BlocksEnvironment>): BlocksEnvironment {\n const { openDocument } = environment\n const value: BlocksEnvironment = {\n ...defaultEnvironment,\n openWordEditor: openDocument\n ? (documentId, options) => openDocument(documentId, { workspaceId: options?.workspaceId })\n : noop,\n ...environment,\n // What an intent opens on is recorded for the surface before the host shows it.\n openSettings:\n recordingIntent(environment.openSettings, (openSettings) => (section) => {\n requestSettingsSection(section)\n openSettings(section)\n }) ?? defaultEnvironment.openSettings,\n openCalendar:\n recordingIntent(environment.openCalendar, (openCalendar) => (options) => {\n defaultEnvironment.openCalendar(options)\n openCalendar(options)\n }) ?? defaultEnvironment.openCalendar,\n openMail: recordingIntent(environment.openMail, (openMail) => (options) => {\n if (options?.draftId) mailDraftRequest.request(options.draftId)\n if (options?.messageId) mailMessageRequest.request(options.messageId)\n if (options?.folder) mailFolderRequest.request(options.folder)\n if (options?.attachments?.length) mailComposeRequest.request(options.attachments)\n openMail(options)\n }),\n openWorkflow: recordingIntent(environment.openWorkflow, (openWorkflow) => (id, options) => {\n workflowOpenRequest.request({ workflowId: id, view: options?.view, preset: options?.preset })\n openWorkflow(id, options)\n }),\n openNewConversation:\n recordingIntent(environment.openNewConversation, (openNewConversation) => (options) => {\n openNewConversation(options)\n // After the host's reset of the new conversation, which clears its draft.\n const prompt = options?.prompt?.trim()\n if (prompt) conversationStartRequest.request(prompt)\n }) ?? noop,\n }\n complete.add(value)\n return value\n}\n\n/**\n * The environment with every field filled in (the defaults where `environment` gives none), and\n * every intent recording what it opens on. A host calls it for code outside React (a store action,\n * a notification handler); passing the result as the host configuration's `environment` uses it\n * as is.\n */\nexport function createBlocksEnvironment(\n environment: Partial<BlocksEnvironment>\n): BlocksEnvironment {\n if (complete.has(environment as BlocksEnvironment)) return environment as BlocksEnvironment\n let value = resolved.get(environment)\n if (!value) resolved.set(environment, (value = resolve(environment)))\n return value\n}\n\n/** The host's environment, every field filled in (the defaults where the host gives none). */\nexport function useBlocksEnvironment(): BlocksEnvironment {\n const environment = useHostConfigRecord().environment as Partial<BlocksEnvironment> | undefined\n return environment ? createBlocksEnvironment(environment) : defaultEnvironment\n}\n\n/** Open and close the global dialogs (`<ConnectedGlobalDialogs>`), the host's way. */\nexport function useBlocksDialogs(): Pick<BlocksEnvironment, 'openDialog' | 'closeDialog'> {\n const { openDialog, closeDialog } = useBlocksEnvironment()\n return { openDialog, closeDialog }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["openDialog", "closeDialog"]
7
7
  }
@@ -29,4 +29,6 @@ export declare const mailComposeRequest: IntentRequest<MailAttachment[]>;
29
29
  export declare const workflowOpenRequest: IntentRequest<{
30
30
  workflowId?: string;
31
31
  view?: "builder" | "runs" | "run";
32
+ /** No workflow: a new one's builder starts from this preset. */
33
+ preset?: "schedule";
32
34
  }>;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/provider/requests.ts"],
4
- "sourcesContent": ["/**\n * What an intent asks of the surface it opens, carried across the navigation: the first message\n * of a new conversation (`openNewConversation({ prompt })`), the email draft or message to show\n * (`openMail({ draftId })`, `openMail({ messageId })`), the folder (`openMail({ folder })`), a new\n * message with files (`openMail({ attachments })`) and the workflow to show\n * (`openWorkflow(id, { view })`). The environment records the request before the host navigates;\n * the surface takes it when it mounts, or at once while it is already on screen. Taking clears it,\n * so a request is acted on once, by one surface.\n */\nimport { useEffect, useRef } from 'react'\nimport type { MailAttachment } from '@arbidocs/react'\n\nexport interface IntentRequest<T> {\n /** Record a request (replacing one not taken yet). */\n request(value: T): void\n /** The pending request, cleared: `undefined` when there is none. */\n take(): T | undefined\n /** Calls `listener` whenever a request is made. */\n subscribe(listener: () => void): () => void\n}\n\nfunction intentRequest<T>(): IntentRequest<T> {\n let pending: { value: T } | undefined\n const listeners = new Set<() => void>()\n return {\n request(value) {\n pending = { value }\n listeners.forEach((listener) => listener())\n },\n take() {\n const taken = pending\n pending = undefined\n return taken?.value\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n\n/**\n * Take each request while `enabled`: the one pending on mount and every later one. The latest\n * `onRequest` is called.\n */\nexport function useIntentRequest<T>(\n store: IntentRequest<T>,\n onRequest: (value: T) => void,\n enabled = true\n): void {\n const latest = useRef(onRequest)\n latest.current = onRequest\n useEffect(() => {\n if (!enabled) return\n const take = () => {\n const value = store.take()\n if (value !== undefined) latest.current(value)\n }\n take()\n return store.subscribe(take)\n }, [store, enabled])\n}\n\n/** The first message of the new conversation `openNewConversation({ prompt })` showed. */\nexport const conversationStartRequest = intentRequest<string>()\n\n/** The email draft `openMail({ draftId })` showed. */\nexport const mailDraftRequest = intentRequest<string>()\n\n/** The message `openMail({ messageId })` showed. */\nexport const mailMessageRequest = intentRequest<string>()\n\n/** The folder `openMail({ folder })` showed (a role such as `outbox`, or an id). */\nexport const mailFolderRequest = intentRequest<string>()\n\n/** The new message `openMail({ attachments })` starts, with these files attached. */\nexport const mailComposeRequest = intentRequest<MailAttachment[]>()\n\n/**\n * The workflow `openWorkflow(id, { view })` showed: its editor, its runs, or (`run`, a host\n * catalogue entry) its run page (no id: the list).\n */\nexport const workflowOpenRequest = intentRequest<{\n workflowId?: string\n view?: 'builder' | 'runs' | 'run'\n}>()\n"],
5
- "mappings": ";AASA,SAAS,WAAW,cAAc;AAYlC,SAAS,gBAAqC;AAC5C,MAAI;AACJ,QAAM,YAAY,oBAAI,IAAgB;AACtC,SAAO;AAAA,IACL,QAAQ,OAAO;AACb,gBAAU,EAAE,MAAM;AAClB,gBAAU,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,IAC5C;AAAA,IACA,OAAO;AACL,YAAM,QAAQ;AACd,gBAAU;AACV,aAAO,OAAO;AAAA,IAChB;AAAA,IACA,UAAU,UAAU;AAClB,gBAAU,IAAI,QAAQ;AACtB,aAAO,MAAM,UAAU,OAAO,QAAQ;AAAA,IACxC;AAAA,EACF;AACF;AAMO,SAAS,iBACd,OACA,WACA,UAAU,MACJ;AACN,QAAM,SAAS,OAAO,SAAS;AAC/B,SAAO,UAAU;AACjB,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,OAAO,MAAM;AACjB,YAAM,QAAQ,MAAM,KAAK;AACzB,UAAI,UAAU,OAAW,QAAO,QAAQ,KAAK;AAAA,IAC/C;AACA,SAAK;AACL,WAAO,MAAM,UAAU,IAAI;AAAA,EAC7B,GAAG,CAAC,OAAO,OAAO,CAAC;AACrB;AAGO,MAAM,2BAA2B,cAAsB;AAGvD,MAAM,mBAAmB,cAAsB;AAG/C,MAAM,qBAAqB,cAAsB;AAGjD,MAAM,oBAAoB,cAAsB;AAGhD,MAAM,qBAAqB,cAAgC;AAM3D,MAAM,sBAAsB,cAGhC;",
4
+ "sourcesContent": ["/**\n * What an intent asks of the surface it opens, carried across the navigation: the first message\n * of a new conversation (`openNewConversation({ prompt })`), the email draft or message to show\n * (`openMail({ draftId })`, `openMail({ messageId })`), the folder (`openMail({ folder })`), a new\n * message with files (`openMail({ attachments })`) and the workflow to show\n * (`openWorkflow(id, { view })`). The environment records the request before the host navigates;\n * the surface takes it when it mounts, or at once while it is already on screen. Taking clears it,\n * so a request is acted on once, by one surface.\n */\nimport { useEffect, useRef } from 'react'\nimport type { MailAttachment } from '@arbidocs/react'\n\nexport interface IntentRequest<T> {\n /** Record a request (replacing one not taken yet). */\n request(value: T): void\n /** The pending request, cleared: `undefined` when there is none. */\n take(): T | undefined\n /** Calls `listener` whenever a request is made. */\n subscribe(listener: () => void): () => void\n}\n\nfunction intentRequest<T>(): IntentRequest<T> {\n let pending: { value: T } | undefined\n const listeners = new Set<() => void>()\n return {\n request(value) {\n pending = { value }\n listeners.forEach((listener) => listener())\n },\n take() {\n const taken = pending\n pending = undefined\n return taken?.value\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n\n/**\n * Take each request while `enabled`: the one pending on mount and every later one. The latest\n * `onRequest` is called.\n */\nexport function useIntentRequest<T>(\n store: IntentRequest<T>,\n onRequest: (value: T) => void,\n enabled = true\n): void {\n const latest = useRef(onRequest)\n latest.current = onRequest\n useEffect(() => {\n if (!enabled) return\n const take = () => {\n const value = store.take()\n if (value !== undefined) latest.current(value)\n }\n take()\n return store.subscribe(take)\n }, [store, enabled])\n}\n\n/** The first message of the new conversation `openNewConversation({ prompt })` showed. */\nexport const conversationStartRequest = intentRequest<string>()\n\n/** The email draft `openMail({ draftId })` showed. */\nexport const mailDraftRequest = intentRequest<string>()\n\n/** The message `openMail({ messageId })` showed. */\nexport const mailMessageRequest = intentRequest<string>()\n\n/** The folder `openMail({ folder })` showed (a role such as `outbox`, or an id). */\nexport const mailFolderRequest = intentRequest<string>()\n\n/** The new message `openMail({ attachments })` starts, with these files attached. */\nexport const mailComposeRequest = intentRequest<MailAttachment[]>()\n\n/**\n * The workflow `openWorkflow(id, { view })` showed: its editor, its runs, or (`run`, a host\n * catalogue entry) its run page (no id: the list).\n */\nexport const workflowOpenRequest = intentRequest<{\n workflowId?: string\n view?: 'builder' | 'runs' | 'run'\n /** No workflow: a new one's builder starts from this preset. */\n preset?: 'schedule'\n}>()\n"],
5
+ "mappings": ";AASA,SAAS,WAAW,cAAc;AAYlC,SAAS,gBAAqC;AAC5C,MAAI;AACJ,QAAM,YAAY,oBAAI,IAAgB;AACtC,SAAO;AAAA,IACL,QAAQ,OAAO;AACb,gBAAU,EAAE,MAAM;AAClB,gBAAU,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,IAC5C;AAAA,IACA,OAAO;AACL,YAAM,QAAQ;AACd,gBAAU;AACV,aAAO,OAAO;AAAA,IAChB;AAAA,IACA,UAAU,UAAU;AAClB,gBAAU,IAAI,QAAQ;AACtB,aAAO,MAAM,UAAU,OAAO,QAAQ;AAAA,IACxC;AAAA,EACF;AACF;AAMO,SAAS,iBACd,OACA,WACA,UAAU,MACJ;AACN,QAAM,SAAS,OAAO,SAAS;AAC/B,SAAO,UAAU;AACjB,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,OAAO,MAAM;AACjB,YAAM,QAAQ,MAAM,KAAK;AACzB,UAAI,UAAU,OAAW,QAAO,QAAQ,KAAK;AAAA,IAC/C;AACA,SAAK;AACL,WAAO,MAAM,UAAU,IAAI;AAAA,EAC7B,GAAG,CAAC,OAAO,OAAO,CAAC;AACrB;AAGO,MAAM,2BAA2B,cAAsB;AAGvD,MAAM,mBAAmB,cAAsB;AAG/C,MAAM,qBAAqB,cAAsB;AAGjD,MAAM,oBAAoB,cAAsB;AAGhD,MAAM,qBAAqB,cAAgC;AAM3D,MAAM,sBAAsB,cAKhC;",
6
6
  "names": []
7
7
  }
@@ -3,8 +3,8 @@
3
3
 
4
4
  var chunkSRTSMA5K_cjs = require('../chunk-SRTSMA5K.cjs');
5
5
  var chunkNX56DIG3_cjs = require('../chunk-NX56DIG3.cjs');
6
- var chunkWT7CCCIN_cjs = require('../chunk-WT7CCCIN.cjs');
7
- require('../chunk-U5T46QCS.cjs');
6
+ var chunkGNX3FBBX_cjs = require('../chunk-GNX3FBBX.cjs');
7
+ require('../chunk-TKHCIHE2.cjs');
8
8
  require('../chunk-JDFBEGQO.cjs');
9
9
  require('../chunk-ULWRNGGE.cjs');
10
10
  require('../chunk-PLIF5CUV.cjs');
@@ -181,11 +181,11 @@ Object.defineProperty(exports, "stripMarkdownLinks", {
181
181
  });
182
182
  Object.defineProperty(exports, "DEFAULT_SEARCH_HIT_LABELS", {
183
183
  enumerable: true,
184
- get: function () { return chunkWT7CCCIN_cjs.DEFAULT_SEARCH_HIT_LABELS; }
184
+ get: function () { return chunkGNX3FBBX_cjs.DEFAULT_SEARCH_HIT_LABELS; }
185
185
  });
186
186
  Object.defineProperty(exports, "SearchHit", {
187
187
  enumerable: true,
188
- get: function () { return chunkWT7CCCIN_cjs.SearchHit; }
188
+ get: function () { return chunkGNX3FBBX_cjs.SearchHit; }
189
189
  });
190
190
  //# sourceMappingURL=index.cjs.map
191
191
  //# sourceMappingURL=index.cjs.map
@@ -4,9 +4,9 @@
4
4
  var chunkVCEX7COE_cjs = require('../chunk-VCEX7COE.cjs');
5
5
  require('../chunk-34HQO4ZQ.cjs');
6
6
  var chunkCT3SLXB7_cjs = require('../chunk-CT3SLXB7.cjs');
7
- var chunk5VCID67B_cjs = require('../chunk-5VCID67B.cjs');
8
- var chunkMJHIBCF7_cjs = require('../chunk-MJHIBCF7.cjs');
9
- var chunkGTTDJMWX_cjs = require('../chunk-GTTDJMWX.cjs');
7
+ var chunkWW6LXQY6_cjs = require('../chunk-WW6LXQY6.cjs');
8
+ var chunk4NPCDS2X_cjs = require('../chunk-4NPCDS2X.cjs');
9
+ var chunkQ6DQGGP4_cjs = require('../chunk-Q6DQGGP4.cjs');
10
10
  var chunkDEXUL3T6_cjs = require('../chunk-DEXUL3T6.cjs');
11
11
  var chunk6WMMZLEV_cjs = require('../chunk-6WMMZLEV.cjs');
12
12
  var chunkYZSQ7F5K_cjs = require('../chunk-YZSQ7F5K.cjs');
@@ -14,12 +14,12 @@ var chunkKQF7POTG_cjs = require('../chunk-KQF7POTG.cjs');
14
14
  var chunkFX3K6LNZ_cjs = require('../chunk-FX3K6LNZ.cjs');
15
15
  require('../chunk-AHDJXIUB.cjs');
16
16
  var chunk6UZC4XVV_cjs = require('../chunk-6UZC4XVV.cjs');
17
- require('../chunk-ZFKWCGA5.cjs');
17
+ require('../chunk-JV5TVUOU.cjs');
18
18
  var chunkKKYNTWDU_cjs = require('../chunk-KKYNTWDU.cjs');
19
19
  require('../chunk-3YZKDCWY.cjs');
20
20
  var chunkSJSGSHIT_cjs = require('../chunk-SJSGSHIT.cjs');
21
21
  require('../chunk-PPCATBOY.cjs');
22
- require('../chunk-U5T46QCS.cjs');
22
+ require('../chunk-TKHCIHE2.cjs');
23
23
  require('../chunk-JDFBEGQO.cjs');
24
24
  require('../chunk-ULWRNGGE.cjs');
25
25
  require('../chunk-PLIF5CUV.cjs');
@@ -88,183 +88,183 @@ Object.defineProperty(exports, "Toaster", {
88
88
  });
89
89
  Object.defineProperty(exports, "ActionCluster", {
90
90
  enumerable: true,
91
- get: function () { return chunk5VCID67B_cjs.ActionCluster; }
91
+ get: function () { return chunkWW6LXQY6_cjs.ActionCluster; }
92
92
  });
93
93
  Object.defineProperty(exports, "AskField", {
94
94
  enumerable: true,
95
- get: function () { return chunk5VCID67B_cjs.AskField; }
95
+ get: function () { return chunkWW6LXQY6_cjs.AskField; }
96
96
  });
97
97
  Object.defineProperty(exports, "AskRow", {
98
98
  enumerable: true,
99
- get: function () { return chunk5VCID67B_cjs.AskRow; }
99
+ get: function () { return chunkWW6LXQY6_cjs.AskRow; }
100
100
  });
101
101
  Object.defineProperty(exports, "AskTrigger", {
102
102
  enumerable: true,
103
- get: function () { return chunk5VCID67B_cjs.AskTrigger; }
103
+ get: function () { return chunkWW6LXQY6_cjs.AskTrigger; }
104
104
  });
105
105
  Object.defineProperty(exports, "DEFAULT_ASK_FIELD_LABELS", {
106
106
  enumerable: true,
107
- get: function () { return chunk5VCID67B_cjs.DEFAULT_ASK_FIELD_LABELS; }
107
+ get: function () { return chunkWW6LXQY6_cjs.DEFAULT_ASK_FIELD_LABELS; }
108
108
  });
109
109
  Object.defineProperty(exports, "DEFAULT_OFFLINE_PILL_LABELS", {
110
110
  enumerable: true,
111
- get: function () { return chunk5VCID67B_cjs.DEFAULT_OFFLINE_PILL_LABELS; }
111
+ get: function () { return chunkWW6LXQY6_cjs.DEFAULT_OFFLINE_PILL_LABELS; }
112
112
  });
113
113
  Object.defineProperty(exports, "DEFAULT_REMOTE_CONTROL_PILL_LABELS", {
114
114
  enumerable: true,
115
- get: function () { return chunk5VCID67B_cjs.DEFAULT_REMOTE_CONTROL_PILL_LABELS; }
115
+ get: function () { return chunkWW6LXQY6_cjs.DEFAULT_REMOTE_CONTROL_PILL_LABELS; }
116
116
  });
117
117
  Object.defineProperty(exports, "DEFAULT_TIP_CARD_LABELS", {
118
118
  enumerable: true,
119
- get: function () { return chunk5VCID67B_cjs.DEFAULT_TIP_CARD_LABELS; }
119
+ get: function () { return chunkWW6LXQY6_cjs.DEFAULT_TIP_CARD_LABELS; }
120
120
  });
121
121
  Object.defineProperty(exports, "DockZone", {
122
122
  enumerable: true,
123
- get: function () { return chunk5VCID67B_cjs.DockZone; }
123
+ get: function () { return chunkWW6LXQY6_cjs.DockZone; }
124
124
  });
125
125
  Object.defineProperty(exports, "OfflinePill", {
126
126
  enumerable: true,
127
- get: function () { return chunk5VCID67B_cjs.OfflinePill; }
127
+ get: function () { return chunkWW6LXQY6_cjs.OfflinePill; }
128
128
  });
129
129
  Object.defineProperty(exports, "PanelModeSwitcher", {
130
130
  enumerable: true,
131
- get: function () { return chunk5VCID67B_cjs.PanelModeSwitcher; }
131
+ get: function () { return chunkWW6LXQY6_cjs.PanelModeSwitcher; }
132
132
  });
133
133
  Object.defineProperty(exports, "PanelPortal", {
134
134
  enumerable: true,
135
- get: function () { return chunk5VCID67B_cjs.PanelPortal; }
135
+ get: function () { return chunkWW6LXQY6_cjs.PanelPortal; }
136
136
  });
137
137
  Object.defineProperty(exports, "RemoteControlPill", {
138
138
  enumerable: true,
139
- get: function () { return chunk5VCID67B_cjs.RemoteControlPill; }
139
+ get: function () { return chunkWW6LXQY6_cjs.RemoteControlPill; }
140
140
  });
141
141
  Object.defineProperty(exports, "ShellSidebar", {
142
142
  enumerable: true,
143
- get: function () { return chunk5VCID67B_cjs.ShellSidebar; }
143
+ get: function () { return chunkWW6LXQY6_cjs.ShellSidebar; }
144
144
  });
145
145
  Object.defineProperty(exports, "SidebarRowAction", {
146
146
  enumerable: true,
147
- get: function () { return chunk5VCID67B_cjs.SidebarRowAction; }
147
+ get: function () { return chunkWW6LXQY6_cjs.SidebarRowAction; }
148
148
  });
149
149
  Object.defineProperty(exports, "StatusBadge", {
150
150
  enumerable: true,
151
- get: function () { return chunk5VCID67B_cjs.StatusBadge; }
151
+ get: function () { return chunkWW6LXQY6_cjs.StatusBadge; }
152
152
  });
153
153
  Object.defineProperty(exports, "StatusRow", {
154
154
  enumerable: true,
155
- get: function () { return chunk5VCID67B_cjs.StatusRow; }
155
+ get: function () { return chunkWW6LXQY6_cjs.StatusRow; }
156
156
  });
157
157
  Object.defineProperty(exports, "TipCard", {
158
158
  enumerable: true,
159
- get: function () { return chunk5VCID67B_cjs.TipCard; }
159
+ get: function () { return chunkWW6LXQY6_cjs.TipCard; }
160
160
  });
161
161
  Object.defineProperty(exports, "createPanelWindowManager", {
162
162
  enumerable: true,
163
- get: function () { return chunk5VCID67B_cjs.createPanelWindowManager; }
163
+ get: function () { return chunkWW6LXQY6_cjs.createPanelWindowManager; }
164
164
  });
165
165
  Object.defineProperty(exports, "resolveSidebarLayout", {
166
166
  enumerable: true,
167
- get: function () { return chunk5VCID67B_cjs.resolveSidebarLayout; }
167
+ get: function () { return chunkWW6LXQY6_cjs.resolveSidebarLayout; }
168
168
  });
169
169
  Object.defineProperty(exports, "useCloseOnEscape", {
170
170
  enumerable: true,
171
- get: function () { return chunk5VCID67B_cjs.useCloseOnEscape; }
171
+ get: function () { return chunkWW6LXQY6_cjs.useCloseOnEscape; }
172
172
  });
173
173
  Object.defineProperty(exports, "usePanelHostSupport", {
174
174
  enumerable: true,
175
- get: function () { return chunk5VCID67B_cjs.usePanelHostSupport; }
175
+ get: function () { return chunkWW6LXQY6_cjs.usePanelHostSupport; }
176
176
  });
177
177
  Object.defineProperty(exports, "useSidebarController", {
178
178
  enumerable: true,
179
- get: function () { return chunk5VCID67B_cjs.useSidebarController; }
179
+ get: function () { return chunkWW6LXQY6_cjs.useSidebarController; }
180
180
  });
181
181
  Object.defineProperty(exports, "useSidebarSettle", {
182
182
  enumerable: true,
183
- get: function () { return chunk5VCID67B_cjs.useSidebarSettle; }
183
+ get: function () { return chunkWW6LXQY6_cjs.useSidebarSettle; }
184
184
  });
185
185
  Object.defineProperty(exports, "DEFAULT_MOBILE_BARS_LABELS", {
186
186
  enumerable: true,
187
- get: function () { return chunkMJHIBCF7_cjs.DEFAULT_MOBILE_BARS_LABELS; }
187
+ get: function () { return chunk4NPCDS2X_cjs.DEFAULT_MOBILE_BARS_LABELS; }
188
188
  });
189
189
  Object.defineProperty(exports, "DEFAULT_WORKSPACE_KIND_LABELS", {
190
190
  enumerable: true,
191
- get: function () { return chunkMJHIBCF7_cjs.DEFAULT_WORKSPACE_KIND_LABELS; }
191
+ get: function () { return chunk4NPCDS2X_cjs.DEFAULT_WORKSPACE_KIND_LABELS; }
192
192
  });
193
193
  Object.defineProperty(exports, "DEFAULT_WORKSPACE_SWITCHER_LABELS", {
194
194
  enumerable: true,
195
- get: function () { return chunkMJHIBCF7_cjs.DEFAULT_WORKSPACE_SWITCHER_LABELS; }
195
+ get: function () { return chunk4NPCDS2X_cjs.DEFAULT_WORKSPACE_SWITCHER_LABELS; }
196
196
  });
197
197
  Object.defineProperty(exports, "MobileAppBar", {
198
198
  enumerable: true,
199
- get: function () { return chunkMJHIBCF7_cjs.MobileAppBar; }
199
+ get: function () { return chunk4NPCDS2X_cjs.MobileAppBar; }
200
200
  });
201
201
  Object.defineProperty(exports, "MobileTabBar", {
202
202
  enumerable: true,
203
- get: function () { return chunkMJHIBCF7_cjs.MobileTabBar; }
203
+ get: function () { return chunk4NPCDS2X_cjs.MobileTabBar; }
204
204
  });
205
205
  Object.defineProperty(exports, "WorkspaceIdentity", {
206
206
  enumerable: true,
207
- get: function () { return chunkMJHIBCF7_cjs.WorkspaceIdentity; }
207
+ get: function () { return chunk4NPCDS2X_cjs.WorkspaceIdentity; }
208
208
  });
209
209
  Object.defineProperty(exports, "WorkspaceSwitcher", {
210
210
  enumerable: true,
211
- get: function () { return chunkMJHIBCF7_cjs.WorkspaceSwitcher; }
211
+ get: function () { return chunk4NPCDS2X_cjs.WorkspaceSwitcher; }
212
212
  });
213
213
  Object.defineProperty(exports, "hasUnsavedInput", {
214
214
  enumerable: true,
215
- get: function () { return chunkMJHIBCF7_cjs.hasUnsavedInput; }
215
+ get: function () { return chunk4NPCDS2X_cjs.hasUnsavedInput; }
216
216
  });
217
217
  Object.defineProperty(exports, "installReloadPolicy", {
218
218
  enumerable: true,
219
- get: function () { return chunkMJHIBCF7_cjs.installReloadPolicy; }
219
+ get: function () { return chunk4NPCDS2X_cjs.installReloadPolicy; }
220
220
  });
221
221
  Object.defineProperty(exports, "markBuildStale", {
222
222
  enumerable: true,
223
- get: function () { return chunkMJHIBCF7_cjs.markBuildStale; }
223
+ get: function () { return chunk4NPCDS2X_cjs.markBuildStale; }
224
224
  });
225
225
  Object.defineProperty(exports, "prefetchChunk", {
226
226
  enumerable: true,
227
- get: function () { return chunkMJHIBCF7_cjs.prefetchChunk; }
227
+ get: function () { return chunk4NPCDS2X_cjs.prefetchChunk; }
228
228
  });
229
229
  Object.defineProperty(exports, "requestReload", {
230
230
  enumerable: true,
231
- get: function () { return chunkMJHIBCF7_cjs.requestReload; }
231
+ get: function () { return chunk4NPCDS2X_cjs.requestReload; }
232
232
  });
233
233
  Object.defineProperty(exports, "workspaceKindColor", {
234
234
  enumerable: true,
235
- get: function () { return chunkMJHIBCF7_cjs.workspaceKindColor; }
235
+ get: function () { return chunk4NPCDS2X_cjs.workspaceKindColor; }
236
236
  });
237
237
  Object.defineProperty(exports, "workspaceKindMeta", {
238
238
  enumerable: true,
239
- get: function () { return chunkMJHIBCF7_cjs.workspaceKindMeta; }
239
+ get: function () { return chunk4NPCDS2X_cjs.workspaceKindMeta; }
240
240
  });
241
241
  Object.defineProperty(exports, "DEFAULT_SIDEBAR_LABELS", {
242
242
  enumerable: true,
243
- get: function () { return chunkGTTDJMWX_cjs.DEFAULT_SIDEBAR_LABELS; }
243
+ get: function () { return chunkQ6DQGGP4_cjs.DEFAULT_SIDEBAR_LABELS; }
244
244
  });
245
245
  Object.defineProperty(exports, "SHELL_START_INSET_VAR", {
246
246
  enumerable: true,
247
- get: function () { return chunkGTTDJMWX_cjs.SHELL_START_INSET_VAR; }
247
+ get: function () { return chunkQ6DQGGP4_cjs.SHELL_START_INSET_VAR; }
248
248
  });
249
249
  Object.defineProperty(exports, "Sidebar", {
250
250
  enumerable: true,
251
- get: function () { return chunkGTTDJMWX_cjs.Sidebar; }
251
+ get: function () { return chunkQ6DQGGP4_cjs.Sidebar; }
252
252
  });
253
253
  Object.defineProperty(exports, "SidebarBadgeRow", {
254
254
  enumerable: true,
255
- get: function () { return chunkGTTDJMWX_cjs.SidebarBadgeRow; }
255
+ get: function () { return chunkQ6DQGGP4_cjs.SidebarBadgeRow; }
256
256
  });
257
257
  Object.defineProperty(exports, "SidebarRowHoverContext", {
258
258
  enumerable: true,
259
- get: function () { return chunkGTTDJMWX_cjs.SidebarRowHoverContext; }
259
+ get: function () { return chunkQ6DQGGP4_cjs.SidebarRowHoverContext; }
260
260
  });
261
261
  Object.defineProperty(exports, "useShellStartInset", {
262
262
  enumerable: true,
263
- get: function () { return chunkGTTDJMWX_cjs.useShellStartInset; }
263
+ get: function () { return chunkQ6DQGGP4_cjs.useShellStartInset; }
264
264
  });
265
265
  Object.defineProperty(exports, "useSidebarContext", {
266
266
  enumerable: true,
267
- get: function () { return chunkGTTDJMWX_cjs.useSidebarContext; }
267
+ get: function () { return chunkQ6DQGGP4_cjs.useSidebarContext; }
268
268
  });
269
269
  Object.defineProperty(exports, "STATUS_ROW_BASE_CLASS", {
270
270
  enumerable: true,
@@ -5,8 +5,8 @@ var chunk2PQ5Z3WL_cjs = require('../chunk-2PQ5Z3WL.cjs');
5
5
  var chunkANWJG4A4_cjs = require('../chunk-ANWJG4A4.cjs');
6
6
  var chunkICZSVCDT_cjs = require('../chunk-ICZSVCDT.cjs');
7
7
  var chunkNEGFHF3V_cjs = require('../chunk-NEGFHF3V.cjs');
8
- var chunkADMNU2CR_cjs = require('../chunk-ADMNU2CR.cjs');
9
8
  var chunkPCB2BPN3_cjs = require('../chunk-PCB2BPN3.cjs');
9
+ var chunkADMNU2CR_cjs = require('../chunk-ADMNU2CR.cjs');
10
10
  var chunk34HQO4ZQ_cjs = require('../chunk-34HQO4ZQ.cjs');
11
11
  var chunkNWNVWO6L_cjs = require('../chunk-NWNVWO6L.cjs');
12
12
  var chunkZU2B2RZK_cjs = require('../chunk-ZU2B2RZK.cjs');
@@ -269,6 +269,10 @@ Object.defineProperty(exports, "toHslTriplet", {
269
269
  enumerable: true,
270
270
  get: function () { return chunkNEGFHF3V_cjs.toHslTriplet; }
271
271
  });
272
+ Object.defineProperty(exports, "Callout", {
273
+ enumerable: true,
274
+ get: function () { return chunkPCB2BPN3_cjs.Callout; }
275
+ });
272
276
  Object.defineProperty(exports, "TimelineCalendar", {
273
277
  enumerable: true,
274
278
  get: function () { return chunkADMNU2CR_cjs.TimelineCalendar; }
@@ -297,10 +301,6 @@ Object.defineProperty(exports, "utcDay", {
297
301
  enumerable: true,
298
302
  get: function () { return chunkADMNU2CR_cjs.utcDay; }
299
303
  });
300
- Object.defineProperty(exports, "Callout", {
301
- enumerable: true,
302
- get: function () { return chunkPCB2BPN3_cjs.Callout; }
303
- });
304
304
  Object.defineProperty(exports, "Banner", {
305
305
  enumerable: true,
306
306
  get: function () { return chunk34HQO4ZQ_cjs.Banner; }