@pitcher/canvas-ui 2026.1.7-084725-beta → 2026.1.7-91220

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 (52) hide show
  1. package/canvas-ui.css +18 -18
  2. package/canvas-ui.js +1181 -293
  3. package/canvas-ui.js.map +1 -1
  4. package/lib/api/events/events.helpers.d.ts +14 -2
  5. package/lib/apps/browser/components/Content/ActionsToolbar/ActionsToolbar.vue.d.ts +12 -3
  6. package/lib/apps/canvas-builder/components/ui/DataCharts/types.d.ts +1 -0
  7. package/lib/apps/canvas-builder/composables/useCanvas.d.ts +5 -0
  8. package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +2 -2
  9. package/lib/apps/content-selector/components/Content/AllContent/List/FoldersFilesList.vue.d.ts +12 -3
  10. package/lib/components/CSearchFilters/CSearchFilters.vue.d.ts +4 -1
  11. package/lib/components/assignedCanvases/CAssignedCanvasesManagement.vue.d.ts +20 -4
  12. package/lib/components/assignedCanvases/CAssignedCanvasesManagementToolbar.vue.d.ts +4 -1
  13. package/lib/components/canvas-blocks/CBlockManagement.vue.d.ts +16 -4
  14. package/lib/components/canvas-blocks/CBlockManagementToolbar.vue.d.ts +4 -1
  15. package/lib/components/canvas-templates/CTemplateManagement.vue.d.ts +40 -10
  16. package/lib/components/canvas-templates/CTemplateManagementToolbar.vue.d.ts +16 -4
  17. package/lib/components/savedCanvases/CSavedCanvasesManagement.vue.d.ts +16 -4
  18. package/lib/components/savedCanvases/CSavedCanvasesManagementToolbar.vue.d.ts +4 -1
  19. package/lib/components/sections/CSectionManagement.vue.d.ts +16 -4
  20. package/lib/components/sections/CSectionManagementToolbar.vue.d.ts +4 -1
  21. package/lib/components/themes/CThemeManagement.vue.d.ts +16 -4
  22. package/lib/components/themes/CThemeManagementToolbar.vue.d.ts +4 -1
  23. package/lib/composables/useCanvasStandardFilters.d.ts +17 -2
  24. package/lib/composables/useSmartStore.d.ts +25 -0
  25. package/lib/main.lib.d.ts +2 -0
  26. package/lib/sdk/api/HighLevelApi.d.ts +4 -0
  27. package/lib/sdk/api/modules/query.d.ts +77 -1
  28. package/lib/sdk/api/modules/ui/content.ui.d.ts +22 -1
  29. package/lib/sdk/api/modules/ui/index.d.ts +2 -0
  30. package/lib/sdk/api/modules/ui/types.ui.d.ts +12 -0
  31. package/lib/sdk/main.d.ts +18 -0
  32. package/lib/sdk/payload.types.d.ts +57 -0
  33. package/lib/types/app.d.ts +1 -1
  34. package/lib/types/instanceSettings.types.d.ts +1 -0
  35. package/lib/types/sfdc.d.ts +5 -0
  36. package/lib/util/smart-store.util.d.ts +40 -0
  37. package/lib/util/smart-store.util.spec.d.ts +1 -0
  38. package/locale/de.json +1 -0
  39. package/locale/el.json +1 -0
  40. package/locale/en.json +1 -0
  41. package/locale/es.json +1 -0
  42. package/locale/fr.json +1 -0
  43. package/locale/it.json +1 -0
  44. package/locale/ja.json +1 -0
  45. package/locale/nl.json +1 -0
  46. package/locale/pl.json +1 -0
  47. package/locale/pt-br.json +1 -0
  48. package/locale/pt.json +1 -0
  49. package/locale/th.json +1 -0
  50. package/locale/tr.json +1 -0
  51. package/locale/zh.json +1 -0
  52. package/package.json +1 -1
@@ -1,4 +1,9 @@
1
+ import { ComputedRef, Ref } from 'vue';
1
2
  import { MetadataTemplateFieldTypeEnum } from '../../types/openapi';
3
+ export interface TemplateOption {
4
+ label: string;
5
+ value: string;
6
+ }
2
7
  export interface CanvasStandardFiltersOptions {
3
8
  /**
4
9
  * Include the "Tags" filter (default: true)
@@ -12,6 +17,10 @@ export interface CanvasStandardFiltersOptions {
12
17
  * Include the "Template Used" filter (only for saved canvases)
13
18
  */
14
19
  includeTemplateFilter?: boolean;
20
+ /**
21
+ * Template options for the dropdown filter
22
+ */
23
+ templateOptions?: Ref<TemplateOption[]> | ComputedRef<TemplateOption[]>;
15
24
  /**
16
25
  * Include the "Owner" filter
17
26
  */
@@ -27,9 +36,15 @@ export interface CanvasStandardFiltersOptions {
27
36
  * @returns Array of filter component configurations
28
37
  */
29
38
  export declare function useCanvasStandardFilters(options?: CanvasStandardFiltersOptions): {
30
- filterComponents: import('vue').ComputedRef<{
39
+ filterComponents: ComputedRef<({
40
+ type: MetadataTemplateFieldTypeEnum;
41
+ name: string;
42
+ label: string;
43
+ options?: undefined;
44
+ } | {
31
45
  type: MetadataTemplateFieldTypeEnum;
32
46
  name: string;
33
47
  label: string;
34
- }[]>;
48
+ options: TemplateOption[];
49
+ })[]>;
35
50
  };
@@ -0,0 +1,25 @@
1
+ import { Ref } from 'vue';
2
+ import { PitcherEnv } from '../sdk/interfaces';
3
+ /**
4
+ * Composable for SmartStore availability checks
5
+ *
6
+ * SmartStore is Salesforce Mobile SDK's local database for offline data access on iOS.
7
+ * It requires both iOS mode and the enable_sfdc_sync instance setting to be enabled.
8
+ *
9
+ * @param env - Optional reactive environment object from app store (avoids redundant API calls)
10
+ *
11
+ * @example
12
+ * // With app store env (recommended - avoids API calls)
13
+ * const appStore = useAppStore()
14
+ * const { shouldUseSmartStore } = useSmartStore(appStore.env)
15
+ * const enabled = shouldUseSmartStore.value
16
+ *
17
+ * @example
18
+ * // Without env (for canvas-ui internal usage)
19
+ * const { generateTempSalesforceId } = useSmartStore()
20
+ * const tempId = generateTempSalesforceId('00U')
21
+ */
22
+ export declare function useSmartStore(env?: Ref<PitcherEnv | null> | PitcherEnv | null): {
23
+ shouldUseSmartStore: import('vue').ComputedRef<boolean>;
24
+ generateTempSalesforceId: (objectPrefix: string) => string;
25
+ };
package/lib/main.lib.d.ts CHANGED
@@ -137,6 +137,7 @@ export * as agendaSelector from './apps/agenda-selector/export';
137
137
  export { default as useTheme } from './composables/useTheme';
138
138
  export { default as useThemeVars } from './composables/useThemeVars';
139
139
  export { default as useBindValidation } from './composables/useBindValidation';
140
+ export { useSmartStore } from './composables/useSmartStore';
140
141
  export { default as useFileDisplayHelpers } from './composables/useFileDisplayHelpers';
141
142
  export { default as useFolderNameDescription } from './composables/useFolderNameDescription';
142
143
  export { default as useCanvasOverlay } from './composables/useCanvasOverlay';
@@ -196,6 +197,7 @@ export * from './util/storage.util';
196
197
  export * from './util/handlebars';
197
198
  export * from './apps/collection-selector/utils/content-selector-adapter.util';
198
199
  export * from './util/soql.util.ts';
200
+ export * from './util/smart-store.util';
199
201
  export * from './util/app.util';
200
202
  export * from './utils/iframeInitialize';
201
203
  export * from './sdk/main';
@@ -233,11 +233,15 @@ export declare function createHighLevelApi(options?: ApiOptions): {
233
233
  }): Promise<void>;
234
234
  query(payload: import('../payload.types').QueryPayload): Promise<any>;
235
235
  crmQuery(payload: import('../payload.types').CRMQueryPayload): Promise<any>;
236
+ crmQueryAdaptive(payload: import('../payload.types').CRMQueryPayload): Promise<any>;
236
237
  crmSmartQuery(payload: import('../payload.types').CRMQueryPayload): Promise<Array<any>>;
237
238
  crmSmartObjectMetadata(payload: import('../payload.types').CRMSmartObjectMetadataPayload): Promise<any>;
238
239
  crmSmartUpsertObjects(payload: import('../payload.types').UpsertCRMObjectsPayload): Promise<any>;
239
240
  crmSmartObjectValidationRules(payload: import('../payload.types').CRMSmartObjectValidationRulesPayload): Promise<any>;
240
241
  crmSmartDeleteObjects(payload: import('../payload.types').CRMSmartDeleteObjectsPayload): Promise<any>;
242
+ crmCreate(payload: import('../payload.types').CRMCreatePayload): Promise<any>;
243
+ crmUpsert(payload: import('../payload.types').CRMUpsertPayload): Promise<any>;
244
+ crmDescribe(payload: import('../payload.types').CRMDescribePayload): Promise<any>;
241
245
  getFolders(payload: import('../payload.types').FolderListRequest): Promise<import('../../main.lib').PaginatedFolderList>;
242
246
  getFolder(payload?: {
243
247
  id: import('../../main.lib').FolderRetrieve["id"];
@@ -1,6 +1,22 @@
1
- import { QueryPayload, CRMQueryPayload, UpsertCRMObjectsPayload, CRMSmartObjectValidationRulesPayload, CRMSmartObjectMetadataPayload, CRMSmartDeleteObjectsPayload } from '../../payload.types';
1
+ import { QueryPayload, CRMQueryPayload, UpsertCRMObjectsPayload, CRMSmartObjectValidationRulesPayload, CRMSmartObjectMetadataPayload, CRMSmartDeleteObjectsPayload, CRMCreatePayload, CRMUpsertPayload, CRMDescribePayload } from '../../payload.types';
2
2
  export declare function query(payload: QueryPayload): Promise<any>;
3
3
  export declare function crmQuery(payload: CRMQueryPayload): Promise<any>;
4
+ /**
5
+ * Executes a CRM query with automatic iOS/SmartStore adaptation.
6
+ *
7
+ * On iOS devices with the 'enable_sfdc_sync' instance setting enabled,
8
+ * this function automatically converts SOQL queries to SmartStore Smart SQL format
9
+ * and uses the local SmartStore for offline data access.
10
+ * On other platforms or when the setting is disabled, it uses the standard CRM query API.
11
+ *
12
+ * @param {CRMQueryPayload} payload - The query payload containing the SOQL query string.
13
+ * @returns {Promise<any>} - Promise resolving with query results.
14
+ *
15
+ * @example
16
+ * // Works on all platforms - automatically adapts for iOS with enable_sfdc_sync instance setting
17
+ * const result = await crmQueryAdaptive({ query: 'SELECT Id, Name FROM Account WHERE Active = true' })
18
+ */
19
+ export declare function crmQueryAdaptive(payload: CRMQueryPayload): Promise<any>;
4
20
  /**
5
21
  * Executes a SmartStore query against local CRM data (iOS only).
6
22
  * Uses Salesforce Mobile SDK SmartStore query syntax.
@@ -113,3 +129,63 @@ export declare function crmSmartObjectValidationRules(payload: CRMSmartObjectVal
113
129
  * })
114
130
  */
115
131
  export declare function crmSmartDeleteObjects(payload: CRMSmartDeleteObjectsPayload): Promise<any>;
132
+ /**
133
+ * Creates new records in CRM (Web only).
134
+ * Uses Salesforce REST API to create records.
135
+ *
136
+ * @param {CRMCreatePayload} payload - The create payload containing sobject type and records.
137
+ * @returns {Promise<any>} - Promise resolving with the result of the create operation.
138
+ * @throws {Error} - Throws an error if the payload is invalid.
139
+ *
140
+ * @example
141
+ * // Web only method to create CRM records.
142
+ * api.crmCreate({
143
+ * sobject: 'Order__c',
144
+ * records: [
145
+ * { Account__c: '001xx000003DGbQAAW', Order_Date__c: '2024-01-15' },
146
+ * { Account__c: '001xx000003DGbRABW', Order_Date__c: '2024-01-16' }
147
+ * ]
148
+ * })
149
+ */
150
+ export declare function crmCreate(payload: CRMCreatePayload): Promise<any>;
151
+ /**
152
+ * Upserts records in CRM (Web only).
153
+ * Uses Salesforce REST API to insert or update records based on external ID.
154
+ * If a record with matching external ID exists, it will be updated; otherwise, a new record is created.
155
+ *
156
+ * @param {CRMUpsertPayload} payload - The upsert payload containing sobject type, records, and external ID field.
157
+ * @returns {Promise<any>} - Promise resolving with the result of the upsert operation.
158
+ * @throws {Error} - Throws an error if the payload is invalid.
159
+ *
160
+ * @example
161
+ * // Web only method to upsert CRM records.
162
+ * api.crmUpsert({
163
+ * sobject: 'Order__c',
164
+ * records: [
165
+ * { External_Id__c: 'ORD-001', Account__c: '001xx000003DGbQAAW', Status__c: 'Submitted' },
166
+ * { External_Id__c: 'ORD-002', Account__c: '001xx000003DGbRABW', Status__c: 'Draft' }
167
+ * ],
168
+ * external_id_field: 'External_Id__c'
169
+ * })
170
+ */
171
+ export declare function crmUpsert(payload: CRMUpsertPayload): Promise<any>;
172
+ /**
173
+ * Retrieves metadata/describe for a CRM object (Web only).
174
+ * Uses Salesforce REST API to fetch object metadata including fields and picklist values.
175
+ *
176
+ * @param {CRMDescribePayload} payload - The describe payload containing the sobject name.
177
+ * @returns {Promise<any>} - Promise resolving with the object metadata including fields and picklist values.
178
+ * @throws {Error} - Throws an error if the payload is invalid.
179
+ *
180
+ * @example
181
+ * // Web only method to get CRM object metadata.
182
+ * api.crmDescribe({ sobject: 'Account' })
183
+ * .then(metadata => {
184
+ * // Access fields
185
+ * console.log(metadata.fields)
186
+ * // Access picklist values for a specific field
187
+ * const industryField = metadata.fields.find(f => f.name === 'Industry')
188
+ * console.log(industryField.picklistValues)
189
+ * })
190
+ */
191
+ export declare function crmDescribe(payload: CRMDescribePayload): Promise<any>;
@@ -1,4 +1,4 @@
1
- import { UiSelectAgendaRequest, UiSelectAgendaResponse, UiSelectCollectionPlayerRequest, UiSelectCollectionPlayerResponse, UiSelectContentRequest, UiSelectContentResponse, UiOpenRequest, UiToastRequest, UiPreselectSfdcMeetingIdRequest, UiPreselectSfdcMeetingIdResponse } from './types.ui';
1
+ import { UiSelectAgendaRequest, UiSelectAgendaResponse, UiSelectCollectionPlayerRequest, UiSelectCollectionPlayerResponse, UiSelectContentRequest, UiSelectContentResponse, UiOpenRequest, UiToastRequest, UiPreselectSfdcMeetingIdRequest, UiPreselectSfdcMeetingIdResponse, UiOpenGlobalPopupResponse } from './types.ui';
2
2
  /**
3
3
  * @hidden
4
4
  * @deprecated
@@ -84,3 +84,24 @@ export declare function selectCollectionContent(payload?: UiSelectCollectionPlay
84
84
  * ```
85
85
  */
86
86
  export declare function selectAgendaContent(payload?: UiSelectAgendaRequest): Promise<UiSelectAgendaResponse>;
87
+ /**
88
+ * Opens a global popup app by name.
89
+ *
90
+ * @example
91
+ * const api = useApi()
92
+ * api.openGlobalPopup('my-popup-app')
93
+ * api.openGlobalPopup('my-popup-app', { customData: 'value' })
94
+ *
95
+ * @param appName - The name of the app to open (must have app_type: 'ui-global-popup')
96
+ * @param extraContext - Extra context to pass to the app
97
+ * @returns Promise with the result of the operation
98
+ */
99
+ export declare function openGlobalPopup(appName: string, extraContext?: Record<string, any>): Promise<UiOpenGlobalPopupResponse>;
100
+ /**
101
+ * Closes the currently open global popup app.
102
+ *
103
+ * @example
104
+ * const api = useApi()
105
+ * api.closeGlobalPopup()
106
+ */
107
+ export declare function closeGlobalPopup(): Promise<void>;
@@ -155,6 +155,8 @@ declare const _default: {
155
155
  preselectSfdcMeetingId(payload: import('./types.ui').UiPreselectSfdcMeetingIdRequest): Promise<import('./types.ui').UiPreselectSfdcMeetingIdResponse>;
156
156
  selectCollectionContent(payload?: import('./types.ui').UiSelectCollectionPlayerRequest): Promise<import('./types.ui').UiSelectCollectionPlayerResponse>;
157
157
  selectAgendaContent(payload?: import('./types.ui').UiSelectAgendaRequest): Promise<import('./types.ui').UiSelectAgendaResponse>;
158
+ openGlobalPopup(appName: string, extraContext?: Record<string, any>): Promise<import('./types.ui').UiOpenGlobalPopupResponse>;
159
+ closeGlobalPopup(): Promise<void>;
158
160
  on: typeof on;
159
161
  onMeetingCanceled: typeof onMeetingCanceled;
160
162
  onCanvasUpdated: typeof onCanvasUpdated;
@@ -43,6 +43,8 @@ export declare const UI_API_METHOD_TYPES: {
43
43
  readonly UI_APP_RESIZE: "ui_app_resize";
44
44
  readonly UI_CLOSE_CANVAS_SECTION_EXECUTION: "ui_close_canvas_section_execution";
45
45
  readonly UI_CLOSE_CANVAS_DRAWER: "ui_close_canvas_drawer";
46
+ readonly UI_OPEN_GLOBAL_POPUP: "ui_open_global_popup";
47
+ readonly UI_CLOSE_GLOBAL_POPUP: "ui_close_global_popup";
46
48
  };
47
49
  export declare const UI_MESSAGE_TYPES: {
48
50
  readonly UI_MEETING_CANCELED: "ui_meeting_canceled";
@@ -319,3 +321,13 @@ export type UiPromptPiaResponseStreamedPayload = {
319
321
  /** Current chunk of the response */
320
322
  chunk: string;
321
323
  };
324
+ export interface UiOpenGlobalPopupRequest {
325
+ /** Name of the app to open */
326
+ app_name: string;
327
+ /** Extra context to pass to the app */
328
+ extra_context?: Record<string, any>;
329
+ }
330
+ export interface UiOpenGlobalPopupResponse {
331
+ /** Whether the popup was successfully opened */
332
+ success: boolean;
333
+ }
package/lib/sdk/main.d.ts CHANGED
@@ -67,6 +67,8 @@ export declare function useUi(): {
67
67
  preselectSfdcMeetingId(payload: import('./api/modules/ui/types.ui').UiPreselectSfdcMeetingIdRequest): Promise<import('./api/modules/ui/types.ui').UiPreselectSfdcMeetingIdResponse>;
68
68
  selectCollectionContent(payload?: import('./api/modules/ui/types.ui').UiSelectCollectionPlayerRequest): Promise<import('./api/modules/ui/types.ui').UiSelectCollectionPlayerResponse>;
69
69
  selectAgendaContent(payload?: import('./api/modules/ui/types.ui').UiSelectAgendaRequest): Promise<import('./api/modules/ui/types.ui').UiSelectAgendaResponse>;
70
+ openGlobalPopup(appName: string, extraContext?: Record<string, any>): Promise<import('./api/modules/ui/types.ui').UiOpenGlobalPopupResponse>;
71
+ closeGlobalPopup(): Promise<void>;
70
72
  on: <T extends keyof import('./api/modules/ui/types.ui').UiMessagePayloads>(type: T, handler: (data: import('./api/modules/ui/types.ui').UiMessagePayloads[T]) => Promise<void>) => Promise<() => void>;
71
73
  onMeetingCanceled: (handler: (data: import('./api/modules/ui/types.ui').UiMeetingCanceledPayload) => Promise<void>) => Promise<() => void>;
72
74
  onCanvasUpdated: (handler: (data: import('./api/modules/ui/types.ui').UiCanvasUpdatedPayload) => Promise<void>) => Promise<() => void>;
@@ -302,11 +304,15 @@ export declare function useApi(options?: ApiOptions): {
302
304
  }): Promise<void>;
303
305
  query(payload: import('./payload.types').QueryPayload): Promise<any>;
304
306
  crmQuery(payload: import('./payload.types').CRMQueryPayload): Promise<any>;
307
+ crmQueryAdaptive(payload: import('./payload.types').CRMQueryPayload): Promise<any>;
305
308
  crmSmartQuery(payload: import('./payload.types').CRMQueryPayload): Promise<Array<any>>;
306
309
  crmSmartObjectMetadata(payload: import('./payload.types').CRMSmartObjectMetadataPayload): Promise<any>;
307
310
  crmSmartUpsertObjects(payload: import('./payload.types').UpsertCRMObjectsPayload): Promise<any>;
308
311
  crmSmartObjectValidationRules(payload: import('./payload.types').CRMSmartObjectValidationRulesPayload): Promise<any>;
309
312
  crmSmartDeleteObjects(payload: import('./payload.types').CRMSmartDeleteObjectsPayload): Promise<any>;
313
+ crmCreate(payload: import('./payload.types').CRMCreatePayload): Promise<any>;
314
+ crmUpsert(payload: import('./payload.types').CRMUpsertPayload): Promise<any>;
315
+ crmDescribe(payload: import('./payload.types').CRMDescribePayload): Promise<any>;
310
316
  getFolders(payload: import('./payload.types').FolderListRequest): Promise<import('../main.lib').PaginatedFolderList>;
311
317
  getFolder(payload?: {
312
318
  id: import('../main.lib').FolderRetrieve["id"];
@@ -452,6 +458,8 @@ export declare function useApi(options?: ApiOptions): {
452
458
  preselectSfdcMeetingId(payload: import('./api/modules/ui/types.ui').UiPreselectSfdcMeetingIdRequest): Promise<import('./api/modules/ui/types.ui').UiPreselectSfdcMeetingIdResponse>;
453
459
  selectCollectionContent(payload?: import('./api/modules/ui/types.ui').UiSelectCollectionPlayerRequest): Promise<import('./api/modules/ui/types.ui').UiSelectCollectionPlayerResponse>;
454
460
  selectAgendaContent(payload?: import('./api/modules/ui/types.ui').UiSelectAgendaRequest): Promise<import('./api/modules/ui/types.ui').UiSelectAgendaResponse>;
461
+ openGlobalPopup(appName: string, extraContext?: Record<string, any>): Promise<import('./api/modules/ui/types.ui').UiOpenGlobalPopupResponse>;
462
+ closeGlobalPopup(): Promise<void>;
455
463
  on: <T extends keyof import('./api/modules/ui/types.ui').UiMessagePayloads>(type: T, handler: (data: import('./api/modules/ui/types.ui').UiMessagePayloads[T]) => Promise<void>) => Promise<() => void>;
456
464
  onMeetingCanceled: (handler: (data: import('./api/modules/ui/types.ui').UiMeetingCanceledPayload) => Promise<void>) => Promise<() => void>;
457
465
  onCanvasUpdated: (handler: (data: import('./api/modules/ui/types.ui').UiCanvasUpdatedPayload) => Promise<void>) => Promise<() => void>;
@@ -583,11 +591,15 @@ export declare function useApi(options?: ApiOptions): {
583
591
  }): Promise<void>;
584
592
  query(payload: import('./payload.types').QueryPayload): Promise<any>;
585
593
  crmQuery(payload: import('./payload.types').CRMQueryPayload): Promise<any>;
594
+ crmQueryAdaptive(payload: import('./payload.types').CRMQueryPayload): Promise<any>;
586
595
  crmSmartQuery(payload: import('./payload.types').CRMQueryPayload): Promise<Array<any>>;
587
596
  crmSmartObjectMetadata(payload: import('./payload.types').CRMSmartObjectMetadataPayload): Promise<any>;
588
597
  crmSmartUpsertObjects(payload: import('./payload.types').UpsertCRMObjectsPayload): Promise<any>;
589
598
  crmSmartObjectValidationRules(payload: import('./payload.types').CRMSmartObjectValidationRulesPayload): Promise<any>;
590
599
  crmSmartDeleteObjects(payload: import('./payload.types').CRMSmartDeleteObjectsPayload): Promise<any>;
600
+ crmCreate(payload: import('./payload.types').CRMCreatePayload): Promise<any>;
601
+ crmUpsert(payload: import('./payload.types').CRMUpsertPayload): Promise<any>;
602
+ crmDescribe(payload: import('./payload.types').CRMDescribePayload): Promise<any>;
591
603
  getFolders(payload: import('./payload.types').FolderListRequest): Promise<import('../main.lib').PaginatedFolderList>;
592
604
  getFolder(payload?: {
593
605
  id: import('../main.lib').FolderRetrieve["id"];
@@ -682,6 +694,8 @@ export declare function useApi(options?: ApiOptions): {
682
694
  preselectSfdcMeetingId(payload: import('./api/modules/ui/types.ui').UiPreselectSfdcMeetingIdRequest): Promise<import('./api/modules/ui/types.ui').UiPreselectSfdcMeetingIdResponse>;
683
695
  selectCollectionContent(payload?: import('./api/modules/ui/types.ui').UiSelectCollectionPlayerRequest): Promise<import('./api/modules/ui/types.ui').UiSelectCollectionPlayerResponse>;
684
696
  selectAgendaContent(payload?: import('./api/modules/ui/types.ui').UiSelectAgendaRequest): Promise<import('./api/modules/ui/types.ui').UiSelectAgendaResponse>;
697
+ openGlobalPopup(appName: string, extraContext?: Record<string, any>): Promise<import('./api/modules/ui/types.ui').UiOpenGlobalPopupResponse>;
698
+ closeGlobalPopup(): Promise<void>;
685
699
  on: <T extends keyof import('./api/modules/ui/types.ui').UiMessagePayloads>(type: T, handler: (data: import('./api/modules/ui/types.ui').UiMessagePayloads[T]) => Promise<void>) => Promise<() => void>;
686
700
  onMeetingCanceled: (handler: (data: import('./api/modules/ui/types.ui').UiMeetingCanceledPayload) => Promise<void>) => Promise<() => void>;
687
701
  onCanvasUpdated: (handler: (data: import('./api/modules/ui/types.ui').UiCanvasUpdatedPayload) => Promise<void>) => Promise<() => void>;
@@ -800,11 +814,15 @@ export declare function useApi(options?: ApiOptions): {
800
814
  }): Promise<ArrayBuffer>;
801
815
  query(payload: import('./payload.types').QueryPayload): Promise<any>;
802
816
  crmQuery(payload: import('./payload.types').CRMQueryPayload): Promise<any>;
817
+ crmQueryAdaptive(payload: import('./payload.types').CRMQueryPayload): Promise<any>;
803
818
  crmSmartQuery(payload: import('./payload.types').CRMQueryPayload): Promise<Array<any>>;
804
819
  crmSmartObjectMetadata(payload: import('./payload.types').CRMSmartObjectMetadataPayload): Promise<any>;
805
820
  crmSmartUpsertObjects(payload: import('./payload.types').UpsertCRMObjectsPayload): Promise<any>;
806
821
  crmSmartObjectValidationRules(payload: import('./payload.types').CRMSmartObjectValidationRulesPayload): Promise<any>;
807
822
  crmSmartDeleteObjects(payload: import('./payload.types').CRMSmartDeleteObjectsPayload): Promise<any>;
823
+ crmCreate(payload: import('./payload.types').CRMCreatePayload): Promise<any>;
824
+ crmUpsert(payload: import('./payload.types').CRMUpsertPayload): Promise<any>;
825
+ crmDescribe(payload: import('./payload.types').CRMDescribePayload): Promise<any>;
808
826
  getFolders(payload: import('./payload.types').FolderListRequest): Promise<import('../main.lib').PaginatedFolderList>;
809
827
  getFolder(payload?: {
810
828
  id: import('../main.lib').FolderRetrieve["id"];
@@ -361,3 +361,60 @@ export interface CRMSmartDeleteObjectsPayload {
361
361
  */
362
362
  objects: CRMDeleteObject[];
363
363
  }
364
+ /**
365
+ * Payload for creating CRM records (Web only).
366
+ * Uses Salesforce REST API to create records.
367
+ */
368
+ export interface CRMCreatePayload {
369
+ /**
370
+ * The Salesforce object type (e.g., 'Account', 'Contact', 'Order__c').
371
+ */
372
+ sobject: string;
373
+ /**
374
+ * Array of records to create. Each record is a key-value map of field names to values.
375
+ * Field names should use Salesforce API names (e.g., 'Account__c', 'Order_Date__c').
376
+ */
377
+ records: Array<Record<string, unknown>>;
378
+ /**
379
+ * Optional name of the CRM service to use.
380
+ */
381
+ service?: CRMServiceType;
382
+ }
383
+ /**
384
+ * Payload for upserting CRM records (Web only).
385
+ * Uses Salesforce REST API to insert or update records based on external ID.
386
+ */
387
+ export interface CRMUpsertPayload {
388
+ /**
389
+ * The Salesforce object type (e.g., 'Account', 'Contact', 'Order__c').
390
+ */
391
+ sobject: string;
392
+ /**
393
+ * Array of records to upsert. Each record is a key-value map of field names to values.
394
+ * Field names should use Salesforce API names (e.g., 'Account__c', 'Order_Date__c').
395
+ */
396
+ records: Array<Record<string, unknown>>;
397
+ /**
398
+ * The external ID field used to match existing records for update.
399
+ * If a record with matching external ID exists, it will be updated; otherwise, a new record is created.
400
+ */
401
+ external_id_field: string;
402
+ /**
403
+ * Optional name of the CRM service to use.
404
+ */
405
+ service?: CRMServiceType;
406
+ }
407
+ /**
408
+ * Payload for retrieving CRM object metadata/describe (Web only).
409
+ * Uses Salesforce REST API to fetch object metadata including fields and picklist values.
410
+ */
411
+ export interface CRMDescribePayload {
412
+ /**
413
+ * The Salesforce object type to describe (e.g., 'Account', 'Contact', 'Opportunity').
414
+ */
415
+ sobject: string;
416
+ /**
417
+ * Optional name of the CRM service to use.
418
+ */
419
+ service?: CRMServiceType;
420
+ }
@@ -89,7 +89,7 @@ export type AppJson = {
89
89
  description?: string;
90
90
  authors?: string[];
91
91
  module: Record<EmbedLocation, Module>;
92
- app_type?: 'canvas-popup' | 'section-selector' | 'sharebox';
92
+ app_type?: 'canvas-popup' | 'section-selector' | 'sharebox' | 'ui-global-popup';
93
93
  app_options?: AppTypeJsonOptions;
94
94
  order_override?: number;
95
95
  has_multiple_routes?: boolean;
@@ -60,6 +60,7 @@ export type InstanceSettings = OrganizationSettings & {
60
60
  enable_multipeer_connectivity?: boolean;
61
61
  enable_syncbox?: boolean;
62
62
  enable_sync_file_filtering?: boolean;
63
+ enable_sfdc_sync?: boolean;
63
64
  time_format?: string;
64
65
  date_format?: string;
65
66
  is_file_expiration_mandatory?: boolean;
@@ -59,6 +59,7 @@ export type SfEvent = {
59
59
  Type?: string;
60
60
  EventWhoIds?: string[];
61
61
  IsAllDayEvent?: boolean;
62
+ is_executed_condition?: string;
62
63
  };
63
64
  export type SfEventExtended = SfEvent & {
64
65
  contactName?: string;
@@ -106,6 +107,10 @@ export interface SfContactBasic {
106
107
  type: string;
107
108
  url: string;
108
109
  };
110
+ callId?: string;
111
+ PersonAccountId?: string;
112
+ AccountName?: string;
113
+ Account?: any;
109
114
  }
110
115
  export type EventsSfList = {
111
116
  done?: boolean;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * SmartStore Smart SQL Query Utilities
3
+ *
4
+ * This module provides utilities for converting SOQL queries to SmartStore Smart SQL format
5
+ * for offline data access on iOS devices using Salesforce Mobile SDK.
6
+ */
7
+ /**
8
+ * Comprehensive SOQL to SmartStore Smart Query converter
9
+ *
10
+ * Converts standard SOQL queries to SmartStore Smart SQL format for offline use on iOS.
11
+ * Handles SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, LIMIT, OFFSET,
12
+ * aggregate functions, and relationship fields.
13
+ *
14
+ * SmartStore stores denormalized data, so relationship fields are accessed directly
15
+ * within the soup using the full relationship path (e.g., Child_Account_vod__r.Name).
16
+ *
17
+ * @param soqlQuery - The SOQL query string to convert
18
+ * @returns The converted SmartStore Smart SQL query string
19
+ *
20
+ * @example
21
+ * // Simple query
22
+ * convertSoqlToSmartQuery('SELECT Id, Name FROM Account WHERE Active = true')
23
+ * // Returns: SELECT {Account:Id}, {Account:Name} FROM {Account} WHERE {Account:Active} = true
24
+ *
25
+ * @example
26
+ * // With relationship fields (denormalized access - no joins needed)
27
+ * convertSoqlToSmartQuery('SELECT Id, Child_Account_vod__r.Name FROM Child_Account_vod__c')
28
+ * // Returns: SELECT {Child_Account_vod__c:Id}, {Child_Account_vod__c:Child_Account_vod__r.Name} FROM {Child_Account_vod__c}
29
+ *
30
+ * @example
31
+ * // With aggregate functions
32
+ * convertSoqlToSmartQuery('SELECT COUNT(Id), Industry FROM Account GROUP BY Industry')
33
+ * // Returns: SELECT COUNT({Account:Id}), {Account:Industry} FROM {Account} GROUP BY {Account:Industry}
34
+ *
35
+ * @example
36
+ * // With ORDER BY and LIMIT
37
+ * convertSoqlToSmartQuery('SELECT Id, Name FROM Contact ORDER BY LastName ASC, FirstName DESC LIMIT 100')
38
+ * // Returns: SELECT {Contact:Id}, {Contact:Name} FROM {Contact} ORDER BY {Contact:LastName} ASC, {Contact:FirstName} DESC LIMIT 100
39
+ */
40
+ export declare function convertSoqlToSmartQuery(soqlQuery: string): string;
@@ -0,0 +1 @@
1
+ export {};
package/locale/de.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": null,
416
416
  "products": null,
417
+ "productTemplates": null,
417
418
  "saved": null,
418
419
  "templates": null
419
420
  },
package/locale/el.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Μπλοκ",
416
416
  "products": "Προϊόντα",
417
+ "productTemplates": "Πρότυπα προϊόντων",
417
418
  "saved": "Αποθηκευμένα",
418
419
  "templates": "Πρότυπα"
419
420
  },
package/locale/en.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Blocks",
416
416
  "products": "Products",
417
+ "productTemplates": "Product Templates",
417
418
  "saved": "Saved",
418
419
  "templates": "Templates"
419
420
  },
package/locale/es.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Bloques",
416
416
  "products": "Productos",
417
+ "productTemplates": "Plantillas de productos",
417
418
  "saved": "Guardados",
418
419
  "templates": "Plantillas"
419
420
  },
package/locale/fr.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Blocs",
416
416
  "products": "Produits",
417
+ "productTemplates": "Modèles de produits",
417
418
  "saved": "Sauvegardés",
418
419
  "templates": "Modèles"
419
420
  },
package/locale/it.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Blocchi",
416
416
  "products": "Prodotti",
417
+ "productTemplates": "Modelli di prodotti",
417
418
  "saved": "Salvati",
418
419
  "templates": "Modelli"
419
420
  },
package/locale/ja.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "ブロック",
416
416
  "products": "プロダクト",
417
+ "productTemplates": "プロダクトテンプレート",
417
418
  "saved": "保存済み",
418
419
  "templates": "テンプレート"
419
420
  },
package/locale/nl.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Blocks",
416
416
  "products": "Products",
417
+ "productTemplates": "Product Templates",
417
418
  "saved": "Saved",
418
419
  "templates": "Templates"
419
420
  },
package/locale/pl.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": null,
416
416
  "products": null,
417
+ "productTemplates": null,
417
418
  "saved": null,
418
419
  "templates": null
419
420
  },
package/locale/pt-br.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Bloco",
416
416
  "products": "Produtos",
417
+ "productTemplates": "Modelos de produtos",
417
418
  "saved": "Saved",
418
419
  "templates": "Modelos"
419
420
  },
package/locale/pt.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "Blocks",
416
416
  "products": "Products",
417
+ "productTemplates": "Product Templates",
417
418
  "saved": "Saved",
418
419
  "templates": "Templates"
419
420
  },
package/locale/th.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "บล็อก",
416
416
  "products": "ผลิตภัณฑ์",
417
+ "productTemplates": "ส่วนประกอบผลิตภัณฑ์",
417
418
  "saved": "บันทึกแล้ว",
418
419
  "templates": "เทมเพลต"
419
420
  },
package/locale/tr.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": null,
416
416
  "products": null,
417
+ "productTemplates": null,
417
418
  "saved": null,
418
419
  "templates": null
419
420
  },
package/locale/zh.json CHANGED
@@ -414,6 +414,7 @@
414
414
  "canvasFilters": {
415
415
  "blocks": "模块",
416
416
  "products": "产品",
417
+ "productTemplates": "产品模板",
417
418
  "saved": "已保存",
418
419
  "templates": "模板"
419
420
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pitcher/canvas-ui",
3
- "version": "2026.1.7-084725-beta",
3
+ "version": "2026.1.7-91220",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"