@pitcher/js-api 1.29.0 → 1.31.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 (158) hide show
  1. package/js-api.esm.js +488 -56
  2. package/js-api.esm.js.map +1 -1
  3. package/js-api.umd.min.js +32 -11
  4. package/js-api.umd.min.js.map +1 -1
  5. package/lib/ai-tasks/__tests__/weekly-focus.spec.d.ts +1 -0
  6. package/lib/ai-tasks/weekly-focus.d.ts +241 -0
  7. package/lib/apps/browser/appTypes.d.ts +28 -0
  8. package/lib/apps/browser/components/ContextMenu/TranslateFileButton.test.d.ts +1 -0
  9. package/lib/apps/browser/stores/api.d.ts +6 -1
  10. package/lib/apps/browser/stores/api.filesFoldersDeleter.test.d.ts +1 -0
  11. package/lib/apps/browser/stores/app.d.ts +5 -0
  12. package/lib/apps/browser/stores/app.selectionPruneScope.test.d.ts +1 -0
  13. package/lib/apps/browser/stores/upload.d.ts +26 -1
  14. package/lib/apps/browser/stores/upload.types.d.ts +9 -0
  15. package/lib/apps/browser/util/lifecycle.d.ts +57 -0
  16. package/lib/apps/browser/util/lifecycle.test.d.ts +1 -0
  17. package/lib/apps/canvas-builder/components/container/PopupApps/PopupAppModal.spec.d.ts +1 -0
  18. package/lib/apps/canvas-builder/components/container/PresentationTools/PresentationToolsButtons.spec.d.ts +1 -0
  19. package/lib/apps/canvas-builder/components/ui/BottomSheetModal/BottomSheetModal.integration.spec.d.ts +1 -0
  20. package/lib/apps/canvas-builder/components/ui/BottomSheetModal/BottomSheetModal.spec.d.ts +1 -0
  21. package/lib/apps/canvas-builder/components/ui/DynamicContent/section-component-bindings.util.d.ts +32 -0
  22. package/lib/apps/canvas-builder/components/ui/DynamicContent/useDynamicContent.d.ts +6 -0
  23. package/lib/apps/canvas-builder/components/ui/Link/Link.util.d.ts +8 -1
  24. package/lib/apps/canvas-builder/components/ui/Link/Link.util.test.d.ts +1 -0
  25. package/lib/apps/canvas-builder/components/ui/Multimedia/Multimedia.ldAsset.spec.d.ts +1 -0
  26. package/lib/apps/canvas-builder/components/ui/SectionList/SectionItemModal.spec.d.ts +1 -0
  27. package/lib/apps/canvas-builder/composables/useCanvas.d.ts +286 -10
  28. package/lib/apps/canvas-builder/composables/useCanvas.saveEcho.spec.d.ts +1 -0
  29. package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +40 -2
  30. package/lib/apps/canvas-builder/composables/useCanvasExit.d.ts +1 -0
  31. package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +38 -2
  32. package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +4 -2
  33. package/lib/apps/canvas-builder/composables/useContentSelector.d.ts +8 -1
  34. package/lib/apps/canvas-builder/composables/useInstalledEmbeddables.d.ts +1 -1
  35. package/lib/apps/canvas-builder/composables/useNavigatorDrawer.d.ts +27 -0
  36. package/lib/apps/canvas-builder/composables/useNavigatorDrawer.spec.d.ts +1 -0
  37. package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +43 -4
  38. package/lib/apps/canvas-builder/composables/usePopupApps.spec.d.ts +1 -0
  39. package/lib/apps/canvas-builder/composables/usePresentationTools.d.ts +112 -0
  40. package/lib/apps/canvas-builder/composables/usePresentationTools.spec.d.ts +1 -0
  41. package/lib/apps/canvas-builder/types/canvas.d.ts +66 -3
  42. package/lib/apps/canvas-builder/util/canvas.util.d.ts +12 -0
  43. package/lib/apps/canvas-builder/util/completionWizard.util.d.ts +347 -0
  44. package/lib/apps/canvas-builder/util/completionWizard.util.test.d.ts +1 -0
  45. package/lib/apps/canvas-builder/util/fullscreenMode.util.d.ts +7 -0
  46. package/lib/apps/canvas-builder/util/fullscreenMode.util.test.d.ts +1 -0
  47. package/lib/apps/canvas-builder/util/iframe.util.d.ts +24 -2
  48. package/lib/apps/canvas-builder/util/iframe.util.test.d.ts +1 -0
  49. package/lib/apps/canvas-builder/util/lazySections.util.d.ts +35 -0
  50. package/lib/apps/canvas-builder/util/lazySections.util.test.d.ts +1 -0
  51. package/lib/apps/canvas-selector/stores/app.d.ts +14 -0
  52. package/lib/apps/collection-player/components/AppHeader.spec.d.ts +1 -0
  53. package/lib/apps/collection-player/composables/collection-navigation.util.d.ts +27 -0
  54. package/lib/apps/collection-player/composables/collection-navigation.util.spec.d.ts +1 -0
  55. package/lib/apps/collection-player/composables/speaker-notes.use.d.ts +14 -0
  56. package/lib/apps/collection-player/composables/speaker-notes.use.spec.d.ts +1 -0
  57. package/lib/apps/collection-player/stores/app.store.d.ts +8 -1
  58. package/lib/apps/collection-player/stores/showNotesToggle.spec.d.ts +1 -0
  59. package/lib/apps/content-selector/appTypes.d.ts +16 -0
  60. package/lib/apps/content-selector/components/Assets.uploaderRefresh.spec.d.ts +1 -0
  61. package/lib/apps/content-selector/components/Content/AllContent/List/expandFileGuard.spec.d.ts +1 -0
  62. package/lib/apps/content-selector/stores/app.d.ts +1 -1
  63. package/lib/apps/notes/NotesApp.accountNotes.spec.d.ts +1 -0
  64. package/lib/apps/notes/NotesApp.speakerNotes.spec.d.ts +1 -0
  65. package/lib/apps/notes/composables/useAccountNotes.d.ts +14 -0
  66. package/lib/apps/notes/composables/useAccountNotes.spec.d.ts +1 -0
  67. package/lib/apps/notes/composables/useAccountOnlyNotesGate.d.ts +21 -0
  68. package/lib/apps/notes/composables/useAccountOnlyNotesGate.spec.d.ts +1 -0
  69. package/lib/apps/notes/composables/useActiveSlideNotes.d.ts +42 -0
  70. package/lib/apps/notes/composables/useActiveSlideNotes.spec.d.ts +1 -0
  71. package/lib/components/CFileAccessManagement/collaborationApi.d.ts +2 -0
  72. package/lib/components/CFilePanel/Details.spec.d.ts +1 -0
  73. package/lib/components/CFilePanel/KeyMessages.spec.d.ts +1 -0
  74. package/lib/components/CFilePanel/Summary.spec.d.ts +1 -0
  75. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.annotations.use.d.ts +5 -1
  76. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.formFields.use.d.ts +8 -0
  77. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.link.use.d.ts +1 -1
  78. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.overlayItems.use.d.ts +1 -1
  79. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.use.d.ts +4 -9
  80. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.util.d.ts +53 -1
  81. package/lib/components/CFileViewer/pdf/CFileViewerFullscreen.pdf.use.d.ts +1 -1
  82. package/lib/components/CFileViewer/pdf/__tests__/CFileViewer.pdf.annotations.text.test.d.ts +1 -0
  83. package/lib/components/CGlobalLoader/CGlobalLoaderMark.spec.d.ts +1 -0
  84. package/lib/components/CGlobalLoader/globalLoader.paths.d.ts +2 -0
  85. package/lib/components/CGlobalSearch/globalSearchTarget.util.d.ts +31 -0
  86. package/lib/components/CGlobalSearch/globalSearchTarget.util.test.d.ts +1 -0
  87. package/lib/components/CRichTextEditor/extensions/paragraphExtended.d.ts +7 -1
  88. package/lib/components/CRichTextEditor/extensions/paragraphExtended.test.d.ts +1 -0
  89. package/lib/components/canvases/CanvasesManagementBulk.use.d.ts +12 -2
  90. package/lib/components/masterCanvases/CMasterCanvasesManagement.use.d.ts +86 -0
  91. package/lib/components/masterCanvases/CMasterCanvasesManagement.use.spec.d.ts +1 -0
  92. package/lib/components/masterCanvases/CMasterCanvasesPendingShareCell.spec.d.ts +1 -0
  93. package/lib/components/masterCanvases/CMasterCanvasesSharedWithCell.use.d.ts +39 -0
  94. package/lib/components/masterCanvases/CMasterCanvasesSharedWithCell.use.spec.d.ts +1 -0
  95. package/lib/components/masterCanvases/createFromMaster.use.d.ts +255 -0
  96. package/lib/components/masterCanvases/createFromMaster.use.spec.d.ts +1 -0
  97. package/lib/components/masterCanvases/masterCanvasDocuments.use.d.ts +56 -0
  98. package/lib/components/masterCanvases/masterCanvasDocuments.use.spec.d.ts +1 -0
  99. package/lib/components/masterCanvases/masterCanvasShares.use.d.ts +103 -0
  100. package/lib/components/masterCanvases/masterCanvasShares.use.spec.d.ts +1 -0
  101. package/lib/components/masterCanvases/masterFromCanvas.use.d.ts +122 -0
  102. package/lib/components/masterCanvases/masterFromCanvas.use.spec.d.ts +1 -0
  103. package/lib/components/masterCanvases/masterFromTemplate.use.d.ts +50 -0
  104. package/lib/components/masterCanvases/masterFromTemplate.use.spec.d.ts +1 -0
  105. package/lib/components/savedCanvases/CSavedCanvasesManagement.use.d.ts +204 -0
  106. package/lib/components/savedCanvases/savedCanvasDocuments.use.d.ts +111 -0
  107. package/lib/components/savedCanvases/savedCanvasDocuments.use.spec.d.ts +1 -0
  108. package/lib/components/savedCanvases/smartFolders/SmartFolders.use.d.ts +4 -0
  109. package/lib/composables/useCourseOnlyApps.d.ts +1 -1
  110. package/lib/composables/usePdfInterpolation.d.ts +2 -2
  111. package/lib/composables/useWindowEvents.d.ts +1 -1
  112. package/lib/constants/cdp.const.d.ts +2 -0
  113. package/lib/constants/translationLanguages.const.d.ts +150 -0
  114. package/lib/constants/translationLanguages.const.spec.d.ts +1 -0
  115. package/lib/main.lib.d.ts +7 -0
  116. package/lib/sdk/api/HighLevelApi.d.ts +19 -6
  117. package/lib/sdk/api/modules/ai.d.ts +43 -1
  118. package/lib/sdk/api/modules/ai.spec.d.ts +1 -0
  119. package/lib/sdk/api/modules/appsDb.d.ts +4 -4
  120. package/lib/sdk/api/modules/canvas.d.ts +20 -0
  121. package/lib/sdk/api/modules/ui/types.ui.d.ts +25 -0
  122. package/lib/sdk/interfaces.d.ts +31 -1
  123. package/lib/sdk/main.d.ts +46 -0
  124. package/lib/sdk/payload.types.d.ts +149 -0
  125. package/lib/sdk/platform.d.ts +27 -0
  126. package/lib/sdk/platform.spec.d.ts +1 -0
  127. package/lib/sdk/singleton-scope.spec.d.ts +1 -0
  128. package/lib/sdk/utils/httpFetch.spec.d.ts +1 -0
  129. package/lib/theme/canvasUiUnoPreset.test.d.ts +1 -0
  130. package/lib/types/ai-tasks.const.d.ts +39 -1
  131. package/lib/types/app.d.ts +55 -1
  132. package/lib/types/call.d.ts +14 -0
  133. package/lib/types/canvases.d.ts +15 -0
  134. package/lib/types/launchDarkly.types.d.ts +8 -3
  135. package/lib/types/organizationSettings.types.d.ts +39 -0
  136. package/lib/util/aiSummary.d.ts +30 -0
  137. package/lib/util/aiSummary.spec.d.ts +1 -0
  138. package/lib/util/network.d.ts +35 -0
  139. package/lib/util/user.d.ts +18 -0
  140. package/lib/util/user.test.d.ts +1 -0
  141. package/package.json +1 -1
  142. package/types/openapi/models/Canvas.d.ts +1 -0
  143. package/types/openapi/models/CanvasCreate.d.ts +1 -0
  144. package/types/openapi/models/CanvasCreateRequest.d.ts +1 -0
  145. package/types/openapi/models/CanvasRecommendedFile.d.ts +1 -1
  146. package/types/openapi/models/CanvasRetrieve.d.ts +1 -0
  147. package/types/openapi/models/CanvasUpdate.d.ts +1 -0
  148. package/types/openapi/models/CanvasUpdateRequest.d.ts +1 -0
  149. package/types/openapi/models/DeletedCanvas.d.ts +1 -0
  150. package/types/openapi/models/DeletedEnvironment.d.ts +0 -1
  151. package/types/openapi/models/Environment.d.ts +0 -1
  152. package/types/openapi/models/EnvironmentRequest.d.ts +0 -1
  153. package/types/openapi/models/File.d.ts +3 -1
  154. package/types/openapi/models/FileRetrieve.d.ts +2 -0
  155. package/types/openapi/models/PatchedCanvasUpdateRequest.d.ts +1 -0
  156. package/types/openapi/models/PatchedEnvironmentRequest.d.ts +0 -1
  157. package/types/openapi/models/SharedLink.d.ts +6 -0
  158. package/types/openapi/models/SharedLinkCreateRequest.d.ts +5 -0
@@ -0,0 +1,122 @@
1
+ import { CanvasRetrieve } from '../../../types/openapi';
2
+ /**
3
+ * PIT-7488 block 3 — turning an existing pitchdeck into a master.
4
+ *
5
+ * The deck is DUPLICATED, never mutated: the rep keeps the deck they were presenting, and a new
6
+ * `is_master` copy appears on the master tab.
7
+ *
8
+ * **The promoter owns the master, always — so the create payload must OMIT `owned_by_id`**
9
+ * (PIT-8362; the payload itself is `buildMasterFromCanvasPayload`, beside its block-4 mirror in
10
+ * `createFromMaster.use`). Django declares that field
11
+ * `default=CreateOnlyDefault(CurrentUserDefault())`, so leaving it out is precisely what assigns
12
+ * the caller; sending anything is a transfer, which `CanvasOwnedByFieldValidator` 400s for anyone
13
+ * but an org/instance admin.
14
+ *
15
+ * This reverses block 3's original rule, so read the history before "fixing" it back. That rule
16
+ * kept the SOURCE deck's owner, on the reasoning that a master should stay attributed to whoever
17
+ * built the deck. Vontobel's validation rejected it: "My Master Pitchdecks" is a personal,
18
+ * RESTRICTED, owner-scoped tab that the promote flow navigates to on success, so a master owned by
19
+ * someone else lands in a tab it does not belong in — invisible to a rep (`filter_by_member_access`
20
+ * is `owned_by=me OR public`), and attributed to a stranger for an admin, who sees the whole
21
+ * instance anyway.
22
+ */
23
+ /**
24
+ * Context keys that must NOT survive onto a master.
25
+ *
26
+ * A master is a reusable *source*, so anything baked into its context propagates to every deck
27
+ * built from it later — `{{user.name}}` would render whoever ran "Use as master" rather than the
28
+ * rep actually presenting. That is the wrong-identity-on-a-copy defect class, one step upstream, and it is the
29
+ * same reasoning that keeps the master download path from PATCHing `context`.
30
+ *
31
+ * This is a DENYLIST on purpose. `pitcher_canvas.context` is a free-form client-written
32
+ * JSONField that also carries customer-specific keys, so an allowlist would silently drop those,
33
+ * and would drop any config key added later — which is exactly how PIT-7473 broke the pitchdeck
34
+ * wizard. Failing this way round means a *new* identity key leaks until it is listed here, which
35
+ * shows up as a visibly wrong name on a deck and is a one-line fix.
36
+ */
37
+ export declare const MASTER_CONTEXT_IDENTITY_KEYS: readonly ["user", "today", "Account", "salesforce_data", "Meeting", "pitcher_data", "analytics", "account", "meeting", "SelectedAccount"];
38
+ /**
39
+ * Top-level context key FAMILIES that are identity, matched by prefix rather than by name.
40
+ *
41
+ * `ctx_overwrite_<slideIndex>` is written by the `react-salesforce-admin` populator
42
+ * (`public/populator.html:509-525`) and holds BOTH a `pitcher_data` and a `salesforce_data` copy of
43
+ * a matched customer record, scoped to one slide — the same two namespaces
44
+ * `MASTER_CONTEXT_IDENTITY_KEYS` already strips at the top level, one nesting deeper and therefore
45
+ * invisible to a literal-key `omit`. A master promoted from a rep's deck carried the promoter's
46
+ * customer (client name, ids, figures) onto every deck built from it, per slide (PIT-8399 review).
47
+ *
48
+ * The key count is unbounded (one per matched slide) and the names embed a component id, so this
49
+ * cannot be expressed as literals — hence a prefix list.
50
+ *
51
+ * **Not to be confused with `context.wizard.overwrite_<sectionListId>_<n>`**, which is the WIZARD's
52
+ * positional slide override (`buildStepUpdate`) and is curation a master must keep. The two are
53
+ * cleanly separable: the populator's lives at the top level, the wizard's inside `wizard`.
54
+ */
55
+ export declare const MASTER_CONTEXT_IDENTITY_KEY_PREFIXES: readonly ["ctx_overwrite_"];
56
+ /** Drops every top-level key matching one of the identity prefixes above. Non-mutating. */
57
+ export declare function withoutPrefixedIdentityKeys(context: Record<string, unknown>): Record<string, unknown>;
58
+ /**
59
+ * Whether a context carries a wizard artifact the restore could actually rebuild POINTS from.
60
+ *
61
+ * Mirrors the two — and only two — skeleton sources of the app's restore walk: the enrichment's
62
+ * per-point spans (`react_wizard.points`) and the vanilla group selections
63
+ * (`group_selections_<sectionListId>`). BOTH must be non-empty arrays: `for (const sel of
64
+ * selections)` and the enrichment loop each build zero skeletons from `[]`, so a present-but-empty
65
+ * key describes nothing. Checking only the selections KEY made this looser than the app's
66
+ * `fromArtifact` (which uses `selections.length > 0`) — and on the duplicate path, which has no
67
+ * second gate, looser means unguarded. Everything else under `wizard` is answers, cover picks or
68
+ * admin config: the live repro deck carries `selected_assets`, `selected_asset_url`, `selected_file`
69
+ * and `title`, and the populator reads a `wizard.dataIndexMap` — none of which can rebuild a point.
70
+ *
71
+ * So `!!context.wizard` is NOT the same question, and the difference bites hardest in
72
+ * `buildDuplicateContext`: its marker selects `react_saved`, which resolves to the EDIT flow, whose
73
+ * restore is deliberately ungated on the app's own `fromArtifact` check (a vanilla deck legitimately
74
+ * restores by attribution). A master whose `wizard` held only cover picks therefore opened with an
75
+ * agenda rebuilt by attribution — the PIT-7488 QA Q9 outcome — with nothing downstream to catch it
76
+ * (peer review F2).
77
+ *
78
+ * Deliberately WEAKER than the app's `fromArtifact`, which also requires the enrichment spans to
79
+ * partition the node's ref list. The host has no refs to hand here, so it answers "are there
80
+ * skeleton sources at all"; the app makes the precise call. That is the two-gate design, and it is
81
+ * why the two predicates are allowed to differ.
82
+ */
83
+ export declare function hasRestorableArtifact(context?: Record<string, unknown> | null): boolean;
84
+ /** Suffix appended to the source deck's name to seed the dialog. Matches the prototype. */
85
+ export declare const MASTER_NAME_SUFFIX = "(master)";
86
+ /**
87
+ * Strips the identity above out of `context.wizard`, leaving the curation intact.
88
+ *
89
+ * Non-mutating — `omit` returns a new object at every level this touches, so the source master's
90
+ * own context is never altered. A `wizard` (or a `react_wizard`) left with nothing in it is
91
+ * dropped rather than kept as `{}`, the same rule `withoutPitcherKeys` follows for
92
+ * `context.pitcher`. A context carrying no `wizard` at all is returned untouched, which is what
93
+ * makes this safe to compose onto every master-context builder.
94
+ *
95
+ * Deliberately does NOT touch `react_wizard.points` / `version`: `restoreAgenda` validates the
96
+ * enrichment by checking that its per-point `slide_count`s partition the node's ref list exactly,
97
+ * so pruning identity here cannot invalidate the artifact the agenda is rebuilt from.
98
+ */
99
+ export declare function withoutWizardIdentity(context: Record<string, unknown>): Record<string, unknown>;
100
+ /**
101
+ * The context to store on the new master: everything the source deck carried, minus identity.
102
+ *
103
+ * Identity is pruned at all THREE places it hides — the top-level keys above, the prefixed
104
+ * `ctx_overwrite_*` families (`withoutPrefixedIdentityKeys`), and the wizard artifact's own
105
+ * (`withoutWizardIdentity`). A master promoted from a deck the rep had run the
106
+ * wizard on carried the promoter's customer in `wizard.subtitle`, which deck templates render on
107
+ * the cover slide, so the top-level pass alone was not enough (PIT-8399).
108
+ *
109
+ * Deliberately NOT gated on `copy_context_to_canvas`. That flag exists because copying context
110
+ * wholesale was risky, and the risk was the identity keys stripped here — gating on it would
111
+ * hand flag-off instances a master with no `section_list_config`, reintroducing PIT-7473 for
112
+ * every deck built from it.
113
+ *
114
+ * Returns `undefined` rather than `{}` when nothing survives, so the create payload omits the
115
+ * field instead of writing an empty object over the server's default.
116
+ */
117
+ export declare function buildMasterContext(context?: CanvasRetrieve['context'] | null): Record<string, unknown> | undefined;
118
+ /**
119
+ * Seeds the dialog's name field. The rep can overwrite it; the suffix only exists so the master
120
+ * is distinguishable from the deck it came from in a list sorted by name.
121
+ */
122
+ export declare function defaultMasterNameFor(sourceName?: string | null): string;
@@ -0,0 +1,50 @@
1
+ import { CanvasCreateRequest, CanvasRetrieve } from '../../../types/openapi';
2
+ /**
3
+ * PIT-7488 — creating a master FROM AN ADMIN TEMPLATE.
4
+ *
5
+ * The fourth and last of the master copy paths, and the one that was missing: block 3 is
6
+ * deck -> master (`buildMasterContext`), block 4 is master -> deck (`buildContextFromMaster`),
7
+ * block 5 is master -> shared copy (next-core's `buildSharedCopyContext`), and this is
8
+ * template -> master.
9
+ *
10
+ * It exists because **Django does not clone a template server-side.** `POST /canvases` stores
11
+ * `template_id` as a plain FK and nothing else, so every create path clones client-side —
12
+ * `canvas.create.ts` for pitchdecks, `buildCreateFromMasterPayload` for decks from masters. The
13
+ * master tab was the one path that never did, so a master built from a template was created
14
+ * EMPTY: no `content` means no `SectionList`/`ContentList` nodes, and
15
+ * `useCanvasCompletionWizard.isCompletionWizardEnabled` is `wizardSteps.length > 0`, so the
16
+ * pitchdeck wizard could never run on it either. One missing clone, two reported symptoms.
17
+ *
18
+ * Not built on `slotty-ui-ng`'s shared `createCanvas` util on purpose: that util assigns
19
+ * `content`/`theme`/`context` AFTER spreading the caller's payload, so a sanitized master context
20
+ * cannot be passed in — and what it writes instead is wrong in both flag states (with
21
+ * `copy_context_to_canvas` on it copies the template context wholesale, identity and completed
22
+ * wizard state included; with it off it writes `{}`, losing `section_list_config`). It also
23
+ * prompts for an account and merges CRM data into the context on orgs with
24
+ * `require_account_on_canvas_creation`, which no master may carry.
25
+ */
26
+ /** The narrow slice of a fetched template this needs — request it as `fields=content,theme,context`. */
27
+ export interface MasterTemplateSource extends Pick<CanvasRetrieve, 'content' | 'theme' | 'context'> {
28
+ }
29
+ /** The create-payload fields to spread over the master's own invariants. */
30
+ export interface MasterFromTemplatePayload extends Pick<CanvasCreateRequest, 'content' | 'theme' | 'context'> {
31
+ }
32
+ /**
33
+ * Builds the `content`/`theme`/`context` a master should inherit from the template it was created
34
+ * from. Pure, non-mutating, and **deliberately ungated**.
35
+ *
36
+ * Not gated on `copy_context_to_canvas` for the same reason `buildMasterContext` is not: that flag
37
+ * exists because copying context wholesale was risky, and the risk *is* the identity keys stripped
38
+ * here. Gating on it would hand flag-off instances a master with no `section_list_config`, which is
39
+ * PIT-7473 reintroduced for every deck later built from that master.
40
+ *
41
+ * `metadata` is deliberately NOT copied. Nothing the wizard reads lives there, and a template's
42
+ * metadata carries its own bookkeeping — the async-download record (`job_id`, `pdf_url`, `pptx_url`,
43
+ * `conversion_date`) and `frozen_until`, which would make a brand-new master born read-only and
44
+ * offering a download of the TEMPLATE. Having none is the truthful state for a new master.
45
+ *
46
+ * Every field is omitted rather than emitted as `undefined`/`{}` when there is nothing to carry, so
47
+ * the no-template case ("New master pitchdeck") posts byte-identical to what it posts today instead
48
+ * of writing empty objects over the server's defaults.
49
+ */
50
+ export declare function buildMasterFromTemplatePayload(template?: MasterTemplateSource | null): MasterFromTemplatePayload;
@@ -4,6 +4,209 @@ export type FreezeStatus = 'active' | 'expired' | null;
4
4
  export declare function getFreezeStatus(canvas: Pick<CanvasRetrieve, 'metadata'>): FreezeStatus;
5
5
  export declare const SYSTEM_EXCLUDED_TAGS: readonly ["home", "share", "sharebox"];
6
6
  export declare function hasHidingTag(tags?: string[], dynamicTags?: string[]): boolean;
7
+ export declare function isTemplateHiddenFromReps(canvas: Pick<CanvasRetrieve, 'tags' | 'template'>, rendererExcludedTags?: string[]): boolean;
8
+ /**
9
+ * PIT-7488 — which canvas list `CSavedCanvasesManagement` is rendering.
10
+ *
11
+ * Everything the variant changes lives in the pure resolvers below rather than inline in the
12
+ * SFC, because three of them guard state that is SHARED between simultaneously-reachable
13
+ * instances of the component (localStorage / sessionStorage), where a wrong answer shows up as
14
+ * the other tab misbehaving and is invisible in normal single-tab use.
15
+ */
16
+ export type CanvasesManagementVariant = 'pitchdecks' | 'masters';
17
+ export declare function isMastersVariant(variant?: CanvasesManagementVariant): boolean;
18
+ /**
19
+ * Smart folders are a pitchdeck-only view. `isSmartFoldersView` is a `useLocalStorage`, shared
20
+ * across every instance of the component, so without the variant guard a rep who switched the
21
+ * Pitchdecks tab to smart folders would find the master tab rendering `SmartFolders` — which
22
+ * lists ordinary pitchdecks. Masters aren't foldered, so they have no smart-folder equivalent.
23
+ */
24
+ export declare function resolveCanvasesView(opts: {
25
+ isMasters: boolean;
26
+ smartFoldersEnabled?: boolean;
27
+ isSmartFoldersView?: boolean;
28
+ }): 'smartFolders' | 'normal';
29
+ /**
30
+ * The localStorage key `useTableColumnsSettings` persists show/hide/reorder under. Must differ
31
+ * per variant: a shared key lets the two tabs overwrite each other's layout, and writes the
32
+ * masters-only `shared_with` column into the pitchdeck tab's saved settings.
33
+ *
34
+ * The masters key is `ciq_master_canvases_management_table_columns_settings`. It was renamed off
35
+ * `…master_pitchdecks…` with the rest of the feature, which resets any column layout a tester had
36
+ * already saved on the master tab — once, and only for that tab.
37
+ */
38
+ export declare function resolveColumnSettingsKey(isMasters: boolean): string;
39
+ /**
40
+ * Which `canvas_manager_table_columns` key to read LD column visibility from. Masters get their
41
+ * own so ops can configure the two lists independently — `getVisibleColumns` degrades to "show
42
+ * every column" when the key is absent, whereas reusing `canvases` would mean hiding a column on
43
+ * the Pitchdecks tab silently hid it here too.
44
+ *
45
+ * The masters key is now `master_canvases`: ops must rename it inside the
46
+ * `canvas_manager_table_columns` LD value, and until they do the helper degrades to "show every
47
+ * column" rather than failing closed.
48
+ */
49
+ export declare function resolveColumnVisibilityView(isMasters: boolean): 'canvases' | 'master_canvases';
50
+ /**
51
+ * PIT-8360 QA — the copy that must NAME a master instead of saying "canvas".
52
+ *
53
+ * QA read the delete and unfreeze confirmations on the masters tab as belonging to an ordinary
54
+ * pitchdeck, because every sentence in them says "canvas". Instances rename that word through
55
+ * `translation_overrides` (a whole-word replace, so Vontobel's "canvas" -> "PitchDeck" makes them
56
+ * read "this PitchDeck"), which means the fix is NOT a per-instance label change: the source
57
+ * string has to carry the qualifier so the same override yields "master PitchDeck". This is also
58
+ * why the master strings say "master canvas" rather than "master pitchdeck" — the override only
59
+ * fires on the word it knows.
60
+ *
61
+ * Two shapes were rejected, and both failures are worth keeping written down:
62
+ *
63
+ * 1. An `{entity}` placeholder in the shared sentences. The pitchdeck tab uses the same strings in
64
+ * 14 locales, where a swapped-in noun would have to agree in article and gender.
65
+ * 2. A `resolveKey(copy, isMasters)` table returning the i18n key. **`vue-i18n-extract` runs with
66
+ * `--remove` in CI** (`scripts/lib-extract-translations.js`, and slotty's `extract:translations`)
67
+ * and finds keys by scanning source for literal translation calls — a computed key is
68
+ * invisible to it, so it deleted the master keys AND the pitchdeck keys whose literals the
69
+ * table had replaced. Every i18n key must appear spelled out as the argument of a translation
70
+ * call at its own call site; that is why the master copy is selected with a ternary over two
71
+ * whole calls rather than by picking a key. `resolveBulkEntityType` below is fine because it
72
+ * names an ENTITY, not a key — its `canvasUI.common.masterCanvas` literal lives in
73
+ * `getCanvasTypeTranslation`. Mind this when writing about i18n in a comment, too: a
74
+ * call-shaped example inside the scan glob is harvested as a real key.
75
+ */
76
+ /**
77
+ * The noun the BULK dialogs put in front of the rep ("delete the 2 selected …").
78
+ *
79
+ * Only the two bulk dialogs the masters tab actually offers take this — delete and manage
80
+ * attributes. The tag dialogs are hidden there (`moreActions.addTags: !isMasters`) and keep the
81
+ * plain `CanvasType`, because their value is also sent to the instance-tags endpoint as
82
+ * `canvas_type`, where `'master-canvas'` is not a thing.
83
+ */
84
+ export declare function resolveBulkEntityType(isMasters: boolean): 'canvas' | 'master-canvas';
85
+ /**
86
+ * Account scoping for the fetch. Never applies to masters: they are account-less server-side
87
+ * (`resolve_account` nulls it on write), so an `account__id` filter matches nothing and empties
88
+ * the whole list. The selected account comes from localStorage and therefore survives across
89
+ * tabs — so this fires on the master tab even when no account was ever picked there.
90
+ */
91
+ export declare function resolveAccountFilterId(opts: {
92
+ isMasters: boolean;
93
+ accountVisibilityEnabled?: boolean;
94
+ selectedAccountId?: string | null;
95
+ }): string | undefined;
96
+ /** Masters have no account, so the column would render a dash on every row. */
97
+ export declare function shouldShowAccountColumn(opts: {
98
+ isMasters: boolean;
99
+ isCRM?: boolean;
100
+ }): boolean;
101
+ /**
102
+ * Masters always show Owner: block 5 lets colleagues share a master, so the list stops being
103
+ * "only mine" and the owner becomes what distinguishes rows. On the pitchdeck tab it stays
104
+ * admin-gated exactly as before.
105
+ */
106
+ export declare function shouldShowOwnerColumn(opts: {
107
+ isMasters: boolean;
108
+ isAnyTypeOfAdmin?: boolean;
109
+ accountVisibilityEnabled?: boolean;
110
+ }): boolean;
111
+ /**
112
+ * Whether the Documents column shows (PIT-8360).
113
+ *
114
+ * Pitchdecks only. It shipped on the MASTER tab, where the signed-off prototype never put it — the
115
+ * prototype's "Document download" column belongs to the pitchdecks tab. Nothing is lost by
116
+ * removing it from the masters list: a master's rendered documents are still reachable from its row
117
+ * actions (Download PDF / PPTX / Regenerate), which read the same server-side state the column did.
118
+ *
119
+ * The `enable_scale_content` term is not belt-and-braces. That flag selects which conversion path
120
+ * runs for a DECK, and only the pdftopptx path it enables ever writes the `pdf_url`/`pptx_url`
121
+ * metadata this column reads — so with it off every row would render a dash under a header
122
+ * promising documents. Hidden beats uniformly empty.
123
+ *
124
+ * The downloader term follows how `shared_with` gates on its fetcher: a host that supplies none
125
+ * would otherwise get a column whose PDF/PPTX buttons render and then do nothing — the silent-no-op
126
+ * failure this file's `template`-column comment records as a reported QA bug.
127
+ *
128
+ * Gated here rather than through the LD column config because `getVisibleColumns` degrades to
129
+ * "show every column" when an instance configures no entry for the view, so the config cannot
130
+ * express "never on this tab".
131
+ */
132
+ export declare function shouldShowDocumentsColumn(opts: {
133
+ isMasters: boolean;
134
+ scaleContentEnabled?: boolean;
135
+ /** The host callback behind the column's click; without it the buttons are inert. */
136
+ hasDocumentDownloader?: boolean;
137
+ }): boolean;
138
+ /**
139
+ * Whether duplicating should prompt for an account first.
140
+ *
141
+ * Never for masters. Not merely because the value would be redundant (the server nulls it) — the
142
+ * master tab passes `accounts: []`, so the modal would open with an empty list, the rep could
143
+ * select nothing, and the duplicate would silently abort with no toast and no error.
144
+ */
145
+ export declare function shouldRequireAccountOnDuplicate(opts: {
146
+ isMasters: boolean;
147
+ isCRM?: boolean;
148
+ requireAccountOnCanvasCreation?: boolean;
149
+ }): boolean;
150
+ /**
151
+ * PIT-7488 block 4 — inputs shared by the two places the create-from-master flow can be started.
152
+ *
153
+ * The host capabilities are part of the gate on purpose: the flow needs a way to LIST masters (for
154
+ * the picker, and to resolve a preselected id to a label) and a way to create an ORDINARY deck
155
+ * (the masters tab's own `creator` makes masters). A flag turned on without them renders an entry
156
+ * that cannot work, which reads as a broken feature rather than an unconfigured one.
157
+ *
158
+ * `isCanvasCreationDisabled` matters because this creates a canvas — the same permission bypass
159
+ * CodeRabbit caught on block 3's "Use as master", where a rep without `canvas.create` could make
160
+ * one anyway.
161
+ */
162
+ interface CreateFromMasterCapability {
163
+ masterCanvasesEnabled?: boolean;
164
+ hasMasterFetcher?: boolean;
165
+ hasCanvasFromMasterCreator?: boolean;
166
+ isCanvasCreationDisabled?: boolean;
167
+ }
168
+ /** Enables the master row's "Use to create pitchdeck" button (rendered disabled until block 4). */
169
+ export declare function canUseMasterToCreateCanvas(opts: CreateFromMasterCapability): boolean;
170
+ /**
171
+ * Whether NEW becomes a dropdown offering "From my master pitchdeck".
172
+ *
173
+ * The ONLY difference from `canUseMasterToCreateCanvas` is the variant term, and it is not
174
+ * cosmetic: `CSavedCanvasesManagementToolbar` renders for BOTH variants, so without the guard the
175
+ * master tab's own NEW grows an entry that builds a deck from a master while standing in the master
176
+ * list — the same shared-surface trap as the smart-folders view and the column-settings key.
177
+ */
178
+ export declare function shouldOfferCreateFromMaster(opts: CreateFromMasterCapability & {
179
+ isMasters: boolean;
180
+ }): boolean;
181
+ /**
182
+ * PIT-8398 — apply a known field delta to one loaded row, instead of refetching the page to
183
+ * discover what the caller just wrote.
184
+ *
185
+ * Two properties this relies on, both load-bearing:
186
+ *
187
+ * 1. **Immutable replacement**, because this is a pure function — it must not mutate the array
188
+ * the caller handed it, which is also what makes it testable in isolation. Note this is NOT
189
+ * a reactivity requirement: `CTable` renders each cell from `row.original`, so Vue's deep
190
+ * proxy tracks a nested write and an in-place `rows[i].metadata = …` re-renders too
191
+ * (measured, not assumed). Replacement is preferred anyway — it matches the three existing
192
+ * row-write patterns in the consuming component (`updateProperty`, `refreshCanvasMetadata`,
193
+ * `startAsyncDownload`) and it does not depend on the row being a reactive proxy at all,
194
+ * which a plain snapshot passed through `deepToRaw` would not be.
195
+ * 2. **Spread onto the existing row, never replace it.** A PATCH response carries only the
196
+ * canvas fields; it does not carry the list-only ones the row already holds (`indicators`
197
+ * from the list serializer, the account name injected by `enrichCanvasesWithAccountNames`).
198
+ * Overwriting the row with a response would silently drop them — the trap `updateProperty`
199
+ * works around by re-attaching `indicators` by hand.
200
+ *
201
+ * `patched` is false when the id is not on the current page, so a caller can fall back to a
202
+ * full `refetch()` rather than assume the UI caught up.
203
+ */
204
+ export declare function applyRowPatch<T extends {
205
+ id: string;
206
+ }>(rows: T[], id: T['id'], patch: Partial<T>): {
207
+ rows: T[];
208
+ patched: boolean;
209
+ };
7
210
  export declare function useCSavedCanvasesManagement(): {
8
211
  statusOptions: {
9
212
  label: string;
@@ -13,3 +216,4 @@ export declare function useCSavedCanvasesManagement(): {
13
216
  [key: string]: any;
14
217
  }>[];
15
218
  };
219
+ export {};
@@ -0,0 +1,111 @@
1
+ import { MasterDocumentsState } from '../masterCanvases/masterCanvasDocuments.use';
2
+ /**
3
+ * PIT-8360 — the Documents column on the PITCHDECK tab.
4
+ *
5
+ * The column shipped on the master tab, which the signed-off prototype never had: its
6
+ * "Document download" column sits on the pitchdecks tab. Moving it there means feeding the SAME
7
+ * cell from a different artifact store, because the two tabs' documents come from different
8
+ * pipelines and only one of them is server-orchestrated:
9
+ *
10
+ * - a MASTER's artifacts live in `core_master_canvas_documents`, rendered server-side by
11
+ * next-core, and the bulk read is also the scheduler;
12
+ * - a DECK's artifacts live in its own `metadata` (`pdf_url` / `pptx_url` / `conversion_date` /
13
+ * `job_id`), written by the pdftopptx callback server when a rep asks for a download.
14
+ *
15
+ * So this is an adapter, not a second fetch: everything it needs is already on the row the list
16
+ * fetched. That is the whole reason the column could move without touching the backend — and why
17
+ * relaxing next-core's `c.is_master = true` filters was not necessary. It also means the pitchdeck
18
+ * column adds no requests and schedules no renders, which matters: reps hold far more decks than
19
+ * masters, so scheduling one render per listed row would have multiplied Gotenberg load.
20
+ *
21
+ * Kept free of Vue so the mapping is testable on its own, like its master-side counterpart.
22
+ */
23
+ /**
24
+ * What `getAsyncDownloadState` in `CSavedCanvasesManagement` returns.
25
+ *
26
+ * Declared here rather than exported from the component: it is a local `const` inside a
27
+ * 2000-line SFC, and the call site is what structurally checks the two against each other, so a
28
+ * drift shows up as a type error there. `undefined` is part of the contract — that function
29
+ * returns it outright when `enable_scale_content` is off.
30
+ */
31
+ export interface SavedCanvasDownloadNotStarted {
32
+ status: 'not_started';
33
+ }
34
+ export interface SavedCanvasDownloadInProgress {
35
+ status: 'in_progress';
36
+ jobId?: string;
37
+ /** `metadata.conversion_date` verbatim — when the job was queued. See the staleness rule below. */
38
+ conversionDate?: string | null;
39
+ /**
40
+ * The rep started this download in THIS session, so the component is already polling it and it is
41
+ * live by construction. Exempt from the staleness rule, and legitimately stampless.
42
+ */
43
+ startedThisSession?: boolean;
44
+ }
45
+ export interface SavedCanvasDownloadCompleted {
46
+ status: 'completed';
47
+ pdfUrl?: string;
48
+ pptxUrl?: string;
49
+ jobId?: string;
50
+ /** The presigned artifact is past the instance's `async_download_expiration_hours` window. */
51
+ isExpired?: boolean;
52
+ /**
53
+ * `metadata.conversion_date` verbatim. Needed here because `isExpired` alone cannot be trusted —
54
+ * see the age guards in `toDocumentsState`.
55
+ */
56
+ conversionDate?: string | null;
57
+ }
58
+ /**
59
+ * A `type` because it is a union, which an interface cannot express; the object shapes above are
60
+ * interfaces per the repo convention.
61
+ */
62
+ export type SavedCanvasAsyncDownloadState = SavedCanvasDownloadNotStarted | SavedCanvasDownloadInProgress | SavedCanvasDownloadCompleted;
63
+ /**
64
+ * Maps a deck's async-download state onto the shape `CMasterCanvasesDocumentsCell` renders.
65
+ *
66
+ * `null` means "no documents", which the cell draws as a dash. Three states reach it:
67
+ *
68
+ * - the pipeline is off (`undefined`), so no deck can have artifacts;
69
+ * - nobody has downloaded this deck yet;
70
+ * - the artifacts have EXPIRED. Returning the URLs anyway would hand the rep two buttons
71
+ * pointing at objects that are gone — the actions menu already refuses to offer them
72
+ * (`!props.isExpired` gates its PDF/PPTX entries) and offers Regenerate instead, so a dash here
73
+ * keeps the two surfaces telling the same story.
74
+ *
75
+ * Note what is deliberately NOT mapped:
76
+ *
77
+ * - `is_stale` is always false. Staleness is a master concept — the server re-renders a master
78
+ * whose slides have moved on, and the cell keeps the old links plus a quiet refresh spinner. A
79
+ * deck's artifact is never refreshed behind the rep's back; it expires instead.
80
+ * - there is no `failed`. `getAsyncDownloadState` never reports one, so `canRetryDocuments` stays
81
+ * false and the cell renders no Retry button — which is correct, because re-running a deck
82
+ * conversion is the actions menu's Download entry, not this cell's job.
83
+ * - `rendered_at` and `error` stay null: the deck pipeline records neither, and inventing values
84
+ * would claim knowledge the cell would then display.
85
+ */
86
+ export declare function toDocumentsState(asyncState: SavedCanvasAsyncDownloadState | undefined | null): MasterDocumentsState | null;
87
+ /**
88
+ * The predicate behind `openableUrl`, exported because the row's Download actions need the same
89
+ * answer: they build their own anchor instead of going through the host's opener, so without this
90
+ * they are the only artifact surface with no scheme check on them at all.
91
+ */
92
+ export declare function isOpenableDocumentUrl(url: string | null | undefined): url is string;
93
+ /**
94
+ * Whether the cell should offer a download for a deck that has no artifact yet (PIT-8360 follow-up).
95
+ *
96
+ * The column started as a mirror of existing artifacts, so a deck nobody had downloaded showed a
97
+ * dash — which reads as "no documents available" when the truth is "nobody has asked yet". The
98
+ * developer's call: a READY deck always offers PDF and PPTX, and the click generates them.
99
+ *
100
+ * Gated on Ready (`is_draft === false`) because that is the signal the rep uses to mean "this deck
101
+ * is finished". A draft still keeps its Download action in the row menu, so nothing is lost — the
102
+ * column simply does not invite a render of something still being written.
103
+ *
104
+ * `isDraft` is optional and a missing value is treated as NOT ready: a partially-fetched row must
105
+ * not invite a Gotenberg render on a deck whose state we do not actually know.
106
+ */
107
+ export declare function shouldOfferDocumentDownload(opts: {
108
+ isDraft?: boolean;
109
+ /** Present when the artifacts already exist — then the cell shows real links, not an offer. */
110
+ hasDocuments?: boolean;
111
+ }): boolean;
@@ -65,6 +65,7 @@ export default function useSmartFolders(emit?: (event: 'open', ...args: any[]) =
65
65
  is_template?: boolean | undefined;
66
66
  is_section?: boolean | undefined;
67
67
  is_block?: boolean | undefined;
68
+ is_master?: boolean | undefined;
68
69
  is_editable?: boolean | undefined;
69
70
  is_default?: boolean | undefined;
70
71
  metadata?: any;
@@ -150,6 +151,7 @@ export default function useSmartFolders(emit?: (event: 'open', ...args: any[]) =
150
151
  is_template?: boolean | undefined;
151
152
  is_section?: boolean | undefined;
152
153
  is_block?: boolean | undefined;
154
+ is_master?: boolean | undefined;
153
155
  is_editable?: boolean | undefined;
154
156
  is_default?: boolean | undefined;
155
157
  metadata?: any;
@@ -215,6 +217,7 @@ export default function useSmartFolders(emit?: (event: 'open', ...args: any[]) =
215
217
  is_template?: boolean | undefined;
216
218
  is_section?: boolean | undefined;
217
219
  is_block?: boolean | undefined;
220
+ is_master?: boolean | undefined;
218
221
  is_editable?: boolean | undefined;
219
222
  is_default?: boolean | undefined;
220
223
  metadata?: any;
@@ -281,6 +284,7 @@ export default function useSmartFolders(emit?: (event: 'open', ...args: any[]) =
281
284
  is_template?: boolean | undefined;
282
285
  is_section?: boolean | undefined;
283
286
  is_block?: boolean | undefined;
287
+ is_master?: boolean | undefined;
284
288
  is_editable?: boolean | undefined;
285
289
  is_default?: boolean | undefined;
286
290
  metadata?: any;
@@ -7,5 +7,5 @@ import { AppFile } from '../types/app';
7
7
  */
8
8
  export declare function useCourseOnlyApps(): {
9
9
  allowCourseOnlyApps: boolean;
10
- isAppAllowed: (app: AppFile) => boolean;
10
+ isAppAllowedInHost: (app: AppFile) => boolean;
11
11
  };
@@ -1,7 +1,7 @@
1
- import { default as PSPDFKitType, ServerConfiguration } from 'pspdfkit';
1
+ import { default as PSPDFKitType, Configuration } from '@nutrient-sdk/viewer';
2
2
  declare function annotationsInterpolation({ PSPDFKit, config, data, }: {
3
3
  PSPDFKit: typeof PSPDFKitType;
4
- config: ServerConfiguration;
4
+ config: Configuration;
5
5
  data: Record<string, string>;
6
6
  }): Promise<void>;
7
7
  export default function usePdfInterpolation(strategy?: 'annotations' | 'text'): typeof annotationsInterpolation;
@@ -9,7 +9,7 @@ export type InactiveEventPayload = {
9
9
  file_id?: string;
10
10
  [key: string]: any;
11
11
  };
12
- export default function (track: (eventName: string, payload: any) => void, pitcherApi?: ReturnType<typeof usePitcherApi>, flushTrack?: (eventName: string, payload: any) => void): {
12
+ export default function (track: (eventName: string, payload: any) => void, pitcherApi?: ReturnType<typeof usePitcherApi>, flushTrack?: (eventName: string, payload: any) => void, heartbeatIntervalMs?: number): {
13
13
  registerInactiveEvent: ({ id, payload, enterEvent, exitEvent, type, }: {
14
14
  id: string;
15
15
  payload: InactiveEventPayload | ((type?: EventLifecycle) => InactiveEventPayload);
@@ -10,6 +10,7 @@ export declare const CDP_EVENT_TYPE: {
10
10
  readonly appExited: "App Exited";
11
11
  readonly canvasEntered: "Canvas Entered";
12
12
  readonly canvasExited: "Canvas Exited";
13
+ readonly canvasHeartbeat: "Canvas Heartbeat";
13
14
  readonly wizardEntered: "Wizard Entered";
14
15
  readonly wizardExited: "Wizard Exited";
15
16
  readonly canvasShared: "Canvas Shared";
@@ -50,6 +51,7 @@ export declare const PLATFORM_TYPE: {
50
51
  readonly ios: "ios";
51
52
  readonly android: "android";
52
53
  readonly windows: "windows";
54
+ readonly macos: "macos";
53
55
  };
54
56
  export declare const EMBED_TYPE: {
55
57
  readonly standalone: "standalone";