@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
package/canvas-ui.js CHANGED
@@ -79751,6 +79751,7 @@ const _sfc_main$6C = /* @__PURE__ */ defineComponent({
79751
79751
  );
79752
79752
  const editingField = ref(null);
79753
79753
  const showTagsComponent = ref(!props.showKeepAsIsPlaceholder);
79754
+ const initialExpiresAtOption = ref(props.modelValue.expiresAtOption);
79754
79755
  const labels = {
79755
79756
  sharing: t("canvasUI.browserApp.uploadFilesModal.sharing.label"),
79756
79757
  tags: t("canvasUI.browserApp.uploadFilesModal.tags.label"),
@@ -79772,6 +79773,9 @@ const _sfc_main$6C = /* @__PURE__ */ defineComponent({
79772
79773
  { value: "expired" /* Expired */, label: t("canvasUI.browserApp.uploadFilesModal.expiresAt.options.expired") }
79773
79774
  ];
79774
79775
  if (isFileExpirationMandatory.value) {
79776
+ if (initialExpiresAtOption.value === "never" /* Never */ || initialExpiresAtOption.value === null || initialExpiresAtOption.value === void 0) {
79777
+ return allOptions;
79778
+ }
79775
79779
  return allOptions.filter((option) => option.value !== "never" /* Never */);
79776
79780
  }
79777
79781
  return allOptions;
@@ -87705,18 +87709,537 @@ function toast$2(payload) {
87705
87709
  return this.API.request("toast", payload);
87706
87710
  }
87707
87711
 
87712
+ const SQL_KEYWORDS = /* @__PURE__ */ new Set([
87713
+ "SELECT",
87714
+ "FROM",
87715
+ "WHERE",
87716
+ "AND",
87717
+ "OR",
87718
+ "NOT",
87719
+ "IN",
87720
+ "LIKE",
87721
+ "ORDER",
87722
+ "BY",
87723
+ "GROUP",
87724
+ "HAVING",
87725
+ "LIMIT",
87726
+ "OFFSET",
87727
+ "ASC",
87728
+ "DESC",
87729
+ "NULLS",
87730
+ "FIRST",
87731
+ "LAST",
87732
+ "NULL",
87733
+ "TRUE",
87734
+ "FALSE",
87735
+ "COUNT",
87736
+ "SUM",
87737
+ "AVG",
87738
+ "MIN",
87739
+ "MAX",
87740
+ "COUNT_DISTINCT",
87741
+ "CALENDAR_MONTH",
87742
+ "CALENDAR_QUARTER",
87743
+ "CALENDAR_YEAR",
87744
+ "DAY_IN_MONTH",
87745
+ "DAY_IN_WEEK",
87746
+ "DAY_IN_YEAR",
87747
+ "DAY_ONLY",
87748
+ "FISCAL_MONTH",
87749
+ "FISCAL_QUARTER",
87750
+ "FISCAL_YEAR",
87751
+ "HOUR_IN_DAY",
87752
+ "WEEK_IN_MONTH",
87753
+ "WEEK_IN_YEAR",
87754
+ "INCLUDES",
87755
+ "EXCLUDES",
87756
+ "ABOVE",
87757
+ "BELOW",
87758
+ "ABOVE_OR_BELOW",
87759
+ "AT",
87760
+ "TYPEOF",
87761
+ "WHEN",
87762
+ "THEN",
87763
+ "ELSE",
87764
+ "END",
87765
+ "USING",
87766
+ "SCOPE",
87767
+ "DATA",
87768
+ "CATEGORY",
87769
+ "ROLLUP",
87770
+ "CUBE",
87771
+ "FORMAT",
87772
+ "CONVERTCURRENCY",
87773
+ "TOLABEL",
87774
+ "DISTANCE",
87775
+ "GEOLOCATION"
87776
+ ]);
87777
+ const AGGREGATE_FUNCTIONS = ["COUNT", "SUM", "AVG", "MIN", "MAX", "COUNT_DISTINCT"];
87778
+ function isSqlKeyword(word) {
87779
+ return SQL_KEYWORDS.has(word.toUpperCase());
87780
+ }
87781
+ function isLiteralValue(value) {
87782
+ const trimmed = value.trim();
87783
+ if (trimmed.startsWith("'") && trimmed.endsWith("'") || trimmed.startsWith('"') && trimmed.endsWith('"')) {
87784
+ return true;
87785
+ }
87786
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
87787
+ return true;
87788
+ }
87789
+ if (/^(true|false)$/i.test(trimmed)) {
87790
+ return true;
87791
+ }
87792
+ if (/^null$/i.test(trimmed)) {
87793
+ return true;
87794
+ }
87795
+ if (/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?)?$/.test(trimmed)) {
87796
+ return true;
87797
+ }
87798
+ if (/^(TODAY|YESTERDAY|TOMORROW|LAST_WEEK|THIS_WEEK|NEXT_WEEK|LAST_MONTH|THIS_MONTH|NEXT_MONTH|LAST_90_DAYS|NEXT_90_DAYS|LAST_N_DAYS:\d+|NEXT_N_DAYS:\d+|LAST_N_WEEKS:\d+|NEXT_N_WEEKS:\d+|LAST_N_MONTHS:\d+|NEXT_N_MONTHS:\d+|LAST_N_QUARTERS:\d+|NEXT_N_QUARTERS:\d+|LAST_N_YEARS:\d+|NEXT_N_YEARS:\d+|THIS_QUARTER|LAST_QUARTER|NEXT_QUARTER|THIS_YEAR|LAST_YEAR|NEXT_YEAR|THIS_FISCAL_QUARTER|LAST_FISCAL_QUARTER|NEXT_FISCAL_QUARTER|THIS_FISCAL_YEAR|LAST_FISCAL_YEAR|NEXT_FISCAL_YEAR)$/i.test(
87799
+ trimmed
87800
+ )) {
87801
+ return true;
87802
+ }
87803
+ return false;
87804
+ }
87805
+ function isDateTimeLiteral(token) {
87806
+ return /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?)?$/.test(token);
87807
+ }
87808
+ function convertFieldToSmartStore(field, primaryObject, objectAliases) {
87809
+ const trimmed = field.trim();
87810
+ if (isSqlKeyword(trimmed) || isLiteralValue(trimmed)) {
87811
+ return trimmed;
87812
+ }
87813
+ if (trimmed === "__FIELDS_ALL_PLACEHOLDER__") {
87814
+ return `{${primaryObject}:_soup}`;
87815
+ }
87816
+ if (trimmed === "*") {
87817
+ return "*";
87818
+ }
87819
+ if (trimmed.startsWith("{") && trimmed.endsWith("}")) {
87820
+ return trimmed;
87821
+ }
87822
+ if (trimmed.includes(".")) {
87823
+ const parts = trimmed.split(".");
87824
+ const alias = parts[0];
87825
+ if (objectAliases.has(alias.toLowerCase()) && objectAliases.get(alias.toLowerCase()) === primaryObject) {
87826
+ const fieldPath = parts.slice(1).join(".");
87827
+ return `{${primaryObject}:${fieldPath}}`;
87828
+ }
87829
+ return `{${primaryObject}:${trimmed}}`;
87830
+ }
87831
+ return `{${primaryObject}:${trimmed}}`;
87832
+ }
87833
+ function convertAggregateFunction(expr, primaryObject, objectAliases) {
87834
+ for (const func of AGGREGATE_FUNCTIONS) {
87835
+ const regex = new RegExp(`\\b${func}\\s*\\(([^)]+)\\)`, "gi");
87836
+ expr = expr.replace(regex, (_match, innerField) => {
87837
+ const trimmedInner = innerField.trim();
87838
+ if (trimmedInner === "*") {
87839
+ return `${func}(*)`;
87840
+ }
87841
+ if (trimmedInner.toUpperCase().startsWith("DISTINCT ")) {
87842
+ const fieldPart = trimmedInner.substring(9).trim();
87843
+ const smartField2 = convertFieldToSmartStore(fieldPart, primaryObject, objectAliases);
87844
+ return `${func}(DISTINCT ${smartField2})`;
87845
+ }
87846
+ const smartField = convertFieldToSmartStore(trimmedInner, primaryObject, objectAliases);
87847
+ return `${func}(${smartField})`;
87848
+ });
87849
+ }
87850
+ return expr;
87851
+ }
87852
+ function parseSelectFields(selectClause) {
87853
+ const fields = [];
87854
+ let depth = 0;
87855
+ let currentField = "";
87856
+ for (let i = 0; i < selectClause.length; i++) {
87857
+ const char = selectClause[i];
87858
+ if (char === "(") {
87859
+ depth++;
87860
+ currentField += char;
87861
+ } else if (char === ")") {
87862
+ depth--;
87863
+ currentField += char;
87864
+ } else if (char === "," && depth === 0) {
87865
+ if (currentField.trim()) {
87866
+ fields.push(currentField.trim());
87867
+ }
87868
+ currentField = "";
87869
+ } else {
87870
+ currentField += char;
87871
+ }
87872
+ }
87873
+ if (currentField.trim()) {
87874
+ fields.push(currentField.trim());
87875
+ }
87876
+ return fields;
87877
+ }
87878
+ function convertSelectFields(fields, primaryObject, objectAliases) {
87879
+ return fields.map((field) => {
87880
+ const aliasMatch = field.match(/^(.+?)\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i);
87881
+ let expression = field;
87882
+ let alias = "";
87883
+ if (aliasMatch) {
87884
+ expression = aliasMatch[1].trim();
87885
+ alias = aliasMatch[2];
87886
+ }
87887
+ const hasAggregate = AGGREGATE_FUNCTIONS.some((func) => new RegExp(`\\b${func}\\s*\\(`, "i").test(expression));
87888
+ if (hasAggregate) {
87889
+ const converted2 = convertAggregateFunction(expression, primaryObject, objectAliases);
87890
+ return alias ? `${converted2} ${alias}` : converted2;
87891
+ }
87892
+ const converted = convertFieldToSmartStore(expression, primaryObject, objectAliases);
87893
+ return alias ? `${converted} ${alias}` : converted;
87894
+ });
87895
+ }
87896
+ function convertNullComparisons(clause) {
87897
+ let result = clause.replace(/\s*!=\s*null\b/gi, " IS NOT NULL");
87898
+ result = result.replace(/\s*<>\s*null\b/gi, " IS NOT NULL");
87899
+ result = result.replace(/\s*=\s*null\b/gi, " IS NULL");
87900
+ return result;
87901
+ }
87902
+ function convertWhereClause(whereClause, primaryObject, objectAliases) {
87903
+ let result = "";
87904
+ let i = 0;
87905
+ const len = whereClause.length;
87906
+ while (i < len) {
87907
+ const char = whereClause[i];
87908
+ if (/\s/.test(char)) {
87909
+ result += char;
87910
+ i++;
87911
+ continue;
87912
+ }
87913
+ if (char === "'" || char === '"') {
87914
+ const quote = char;
87915
+ result += char;
87916
+ i++;
87917
+ while (i < len && whereClause[i] !== quote) {
87918
+ if (whereClause[i] === "\\" && i + 1 < len) {
87919
+ result += whereClause[i] + whereClause[i + 1];
87920
+ i += 2;
87921
+ } else {
87922
+ result += whereClause[i];
87923
+ i++;
87924
+ }
87925
+ }
87926
+ if (i < len) {
87927
+ result += whereClause[i];
87928
+ i++;
87929
+ }
87930
+ continue;
87931
+ }
87932
+ if (/[()=<>!,]/.test(char)) {
87933
+ result += char;
87934
+ i++;
87935
+ if ((char === "!" || char === "<" || char === ">") && i < len && whereClause[i] === "=") {
87936
+ result += whereClause[i];
87937
+ i++;
87938
+ }
87939
+ continue;
87940
+ }
87941
+ if (/[a-zA-Z_]/.test(char)) {
87942
+ let identifier = "";
87943
+ while (i < len && /[a-zA-Z0-9_.]/.test(whereClause[i])) {
87944
+ identifier += whereClause[i];
87945
+ i++;
87946
+ }
87947
+ if (isSqlKeyword(identifier) || isLiteralValue(identifier)) {
87948
+ result += identifier;
87949
+ } else {
87950
+ result += convertFieldToSmartStore(identifier, primaryObject, objectAliases);
87951
+ }
87952
+ continue;
87953
+ }
87954
+ if (/[0-9-]/.test(char)) {
87955
+ let token = "";
87956
+ if (char === "-") {
87957
+ token += char;
87958
+ i++;
87959
+ }
87960
+ while (i < len && /[0-9.:\-TZ+]/.test(whereClause[i])) {
87961
+ token += whereClause[i];
87962
+ i++;
87963
+ }
87964
+ if (isDateTimeLiteral(token)) {
87965
+ result += `'${token}'`;
87966
+ } else {
87967
+ result += token;
87968
+ }
87969
+ continue;
87970
+ }
87971
+ result += char;
87972
+ i++;
87973
+ }
87974
+ result = convertNullComparisons(result);
87975
+ return result;
87976
+ }
87977
+ function parseOrderByClause(orderByClause) {
87978
+ const result = [];
87979
+ const parts = orderByClause.split(/,(?![^()]*\))/);
87980
+ for (const part of parts) {
87981
+ const trimmed = part.trim();
87982
+ if (!trimmed) continue;
87983
+ const match = trimmed.match(/^(.+?)\s*(ASC|DESC)?\s*(NULLS\s+(?:FIRST|LAST))?$/i);
87984
+ if (match) {
87985
+ const field = match[1].trim();
87986
+ let direction = match[2] ? match[2].toUpperCase() : "";
87987
+ if (match[3]) {
87988
+ direction += (direction ? " " : "") + match[3].toUpperCase();
87989
+ }
87990
+ result.push({ field, direction });
87991
+ } else {
87992
+ result.push({ field: trimmed, direction: "" });
87993
+ }
87994
+ }
87995
+ return result;
87996
+ }
87997
+ function convertOrderByFields(orderByParts, primaryObject, objectAliases) {
87998
+ return orderByParts.map(({ field, direction }) => {
87999
+ const hasAggregate = AGGREGATE_FUNCTIONS.some((func) => new RegExp(`\\b${func}\\s*\\(`, "i").test(field));
88000
+ let convertedField;
88001
+ if (hasAggregate) {
88002
+ convertedField = convertAggregateFunction(field, primaryObject, objectAliases);
88003
+ } else {
88004
+ convertedField = convertFieldToSmartStore(field, primaryObject, objectAliases);
88005
+ }
88006
+ return direction ? `${convertedField} ${direction}` : convertedField;
88007
+ });
88008
+ }
88009
+ function parseGroupByClause(groupByClause) {
88010
+ return groupByClause.split(/,(?![^()]*\))/).map((f) => f.trim()).filter(Boolean);
88011
+ }
88012
+ function convertGroupByFields(fields, primaryObject, objectAliases) {
88013
+ return fields.map((field) => {
88014
+ if (/^(ROLLUP|CUBE)\s*\(/i.test(field)) {
88015
+ return field.replace(/\(([^)]+)\)/g, (_match, inner) => {
88016
+ const innerFields = inner.split(",").map((f) => f.trim());
88017
+ const converted = innerFields.map((f) => convertFieldToSmartStore(f, primaryObject, objectAliases));
88018
+ return `(${converted.join(", ")})`;
88019
+ });
88020
+ }
88021
+ return convertFieldToSmartStore(field, primaryObject, objectAliases);
88022
+ });
88023
+ }
88024
+ function parseFromClause(fromClause) {
88025
+ const joins = [];
88026
+ const primaryMatch = fromClause.match(/^([A-Za-z0-9_]+)(?:\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*))?/i);
88027
+ if (!primaryMatch) {
88028
+ return { primary: "", joins };
88029
+ }
88030
+ const primary = primaryMatch[1];
88031
+ const alias = primaryMatch[2];
88032
+ const joinRegex = /(LEFT\s+OUTER\s+JOIN|LEFT\s+JOIN|INNER\s+JOIN|JOIN)\s+([A-Za-z0-9_]+)(?:\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*))?\s+ON\s+([^,]+?)(?=(?:LEFT|INNER|JOIN|$))/gi;
88033
+ let joinMatch;
88034
+ while ((joinMatch = joinRegex.exec(fromClause)) !== null) {
88035
+ joins.push({
88036
+ type: joinMatch[1].toUpperCase().replace(/\s+/g, " "),
88037
+ object: joinMatch[2],
88038
+ alias: joinMatch[3],
88039
+ on: joinMatch[4]?.trim()
88040
+ });
88041
+ }
88042
+ return { primary, alias, joins };
88043
+ }
88044
+ function convertSoqlToSmartQuery(soqlQuery) {
88045
+ if (!soqlQuery || typeof soqlQuery !== "string") {
88046
+ return "";
88047
+ }
88048
+ let normalizedQuery = soqlQuery.replace(/\s+/g, " ").trim();
88049
+ const fromMatch = normalizedQuery.match(
88050
+ /FROM\s+([\s\S]+?)(?=\s+WHERE\s+|\s+ORDER\s+BY\s+|\s+GROUP\s+BY\s+|\s+HAVING\s+|\s+LIMIT\s+|\s+OFFSET\s+|$)/i
88051
+ );
88052
+ if (!fromMatch) {
88053
+ return soqlQuery;
88054
+ }
88055
+ const fromParsed = parseFromClause(fromMatch[1].trim());
88056
+ const primaryObject = fromParsed.primary;
88057
+ if (!primaryObject) {
88058
+ return soqlQuery;
88059
+ }
88060
+ normalizedQuery = normalizedQuery.replace(
88061
+ /\bFIELDS\s*\(\s*(ALL|STANDARD|CUSTOM)\s*\)/gi,
88062
+ "__FIELDS_ALL_PLACEHOLDER__"
88063
+ );
88064
+ const selectMatch = normalizedQuery.match(/SELECT\s+([\s\S]+?)\s+FROM\s+/i);
88065
+ if (!selectMatch) {
88066
+ return soqlQuery;
88067
+ }
88068
+ const whereMatch = normalizedQuery.match(
88069
+ /WHERE\s+([\s\S]+?)(?=\s+ORDER\s+BY\s+|\s+GROUP\s+BY\s+|\s+HAVING\s+|\s+LIMIT\s+|\s+OFFSET\s+|$)/i
88070
+ );
88071
+ const groupByMatch = normalizedQuery.match(
88072
+ /GROUP\s+BY\s+([\s\S]+?)(?=\s+HAVING\s+|\s+ORDER\s+BY\s+|\s+LIMIT\s+|\s+OFFSET\s+|$)/i
88073
+ );
88074
+ const havingMatch = normalizedQuery.match(/HAVING\s+([\s\S]+?)(?=\s+ORDER\s+BY\s+|\s+LIMIT\s+|\s+OFFSET\s+|$)/i);
88075
+ const orderByMatch = normalizedQuery.match(/ORDER\s+BY\s+([\s\S]+?)(?=\s+LIMIT\s+|\s+OFFSET\s+|$)/i);
88076
+ const limitMatch = normalizedQuery.match(/LIMIT\s+(\d+)/i);
88077
+ const offsetMatch = normalizedQuery.match(/OFFSET\s+(\d+)/i);
88078
+ const objectAliases = /* @__PURE__ */ new Map();
88079
+ if (fromParsed.alias) {
88080
+ objectAliases.set(fromParsed.alias.toLowerCase(), primaryObject);
88081
+ }
88082
+ objectAliases.set(primaryObject.toLowerCase(), primaryObject);
88083
+ const parts = [];
88084
+ const selectFields = parseSelectFields(selectMatch[1].trim());
88085
+ const smartSelectFields = convertSelectFields(selectFields, primaryObject, objectAliases);
88086
+ parts.push(`SELECT ${smartSelectFields.join(", ")}`);
88087
+ parts.push(`FROM {${primaryObject}}`);
88088
+ const whereConditions = [];
88089
+ if (whereMatch) {
88090
+ const smartWhere = convertWhereClause(whereMatch[1].trim(), primaryObject, objectAliases);
88091
+ whereConditions.push(smartWhere);
88092
+ }
88093
+ if (whereConditions.length > 0) {
88094
+ parts.push(`WHERE ${whereConditions.join(" AND ")}`);
88095
+ }
88096
+ if (groupByMatch) {
88097
+ const groupByFields = parseGroupByClause(groupByMatch[1].trim());
88098
+ const smartGroupBy = convertGroupByFields(groupByFields, primaryObject, objectAliases);
88099
+ parts.push(`GROUP BY ${smartGroupBy.join(", ")}`);
88100
+ }
88101
+ if (havingMatch) {
88102
+ const smartHaving = convertWhereClause(havingMatch[1].trim(), primaryObject, objectAliases);
88103
+ parts.push(`HAVING ${smartHaving}`);
88104
+ }
88105
+ if (orderByMatch) {
88106
+ const orderByParts = parseOrderByClause(orderByMatch[1].trim());
88107
+ const smartOrderBy = convertOrderByFields(orderByParts, primaryObject, objectAliases);
88108
+ parts.push(`ORDER BY ${smartOrderBy.join(", ")}`);
88109
+ }
88110
+ if (limitMatch) {
88111
+ parts.push(`LIMIT ${limitMatch[1]}`);
88112
+ }
88113
+ if (offsetMatch) {
88114
+ parts.push(`OFFSET ${offsetMatch[1]}`);
88115
+ }
88116
+ return parts.join(" ");
88117
+ }
88118
+
87708
88119
  function query(payload) {
87709
88120
  return highLevelApi.API.request("query", payload);
87710
88121
  }
87711
88122
  function crmQuery(payload) {
87712
88123
  return highLevelApi.API.request("crm_query", payload);
87713
88124
  }
88125
+ function extractFieldsFromSoql(soqlQuery) {
88126
+ const selectMatch = soqlQuery.match(/SELECT\s+([\s\S]+?)\s+FROM\s+/i);
88127
+ if (!selectMatch) return [];
88128
+ const selectClause = selectMatch[1];
88129
+ const fields = [];
88130
+ let depth = 0;
88131
+ let currentField = "";
88132
+ for (let i = 0; i < selectClause.length; i++) {
88133
+ const char = selectClause[i];
88134
+ if (char === "(") {
88135
+ depth++;
88136
+ currentField += char;
88137
+ } else if (char === ")") {
88138
+ depth--;
88139
+ currentField += char;
88140
+ } else if (char === "," && depth === 0) {
88141
+ if (currentField.trim()) {
88142
+ fields.push(currentField.trim());
88143
+ }
88144
+ currentField = "";
88145
+ } else {
88146
+ currentField += char;
88147
+ }
88148
+ }
88149
+ if (currentField.trim()) {
88150
+ fields.push(currentField.trim());
88151
+ }
88152
+ return fields.map((field) => {
88153
+ const aliasMatch = field.match(/^(.+?)\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i);
88154
+ const fieldExpr = aliasMatch ? aliasMatch[1].trim() : field.trim();
88155
+ return fieldExpr;
88156
+ });
88157
+ }
88158
+ function extractObjectFromSoql(soqlQuery) {
88159
+ const fromMatch = soqlQuery.match(/FROM\s+([A-Za-z0-9_]+)/i);
88160
+ return fromMatch ? fromMatch[1] : "";
88161
+ }
88162
+ function setNestedProperty(obj, path, value) {
88163
+ const parts = path.split(".");
88164
+ if (parts.length === 1) {
88165
+ obj[path] = value;
88166
+ return;
88167
+ }
88168
+ let current = obj;
88169
+ for (let i = 0; i < parts.length - 1; i++) {
88170
+ const part = parts[i];
88171
+ if (!current[part] || typeof current[part] !== "object") {
88172
+ current[part] = {};
88173
+ }
88174
+ current = current[part];
88175
+ }
88176
+ current[parts[parts.length - 1]] = value;
88177
+ }
88178
+ function isAllFieldsSelector(field) {
88179
+ const trimmed = field.trim();
88180
+ return trimmed === "*" || /^FIELDS\s*\(\s*(ALL|STANDARD|CUSTOM)\s*\)$/i.test(trimmed);
88181
+ }
88182
+ function transformSmartStoreResults(smartStoreResults, fields, objectName) {
88183
+ if (!smartStoreResults || !Array.isArray(smartStoreResults)) {
88184
+ return [];
88185
+ }
88186
+ return smartStoreResults.map((row) => {
88187
+ const record = {};
88188
+ fields.forEach((field, index) => {
88189
+ if (index < row.length) {
88190
+ const value = row[index];
88191
+ if (isAllFieldsSelector(field)) {
88192
+ if (value && typeof value === "object" && !Array.isArray(value)) {
88193
+ Object.assign(record, value);
88194
+ }
88195
+ } else {
88196
+ setNestedProperty(record, field, value);
88197
+ }
88198
+ }
88199
+ });
88200
+ const recordId = record["Id"] || record["id"] || "";
88201
+ record["attributes"] = {
88202
+ type: objectName,
88203
+ url: recordId ? `/services/data/v57.0/sobjects/${objectName}/${recordId}` : ""
88204
+ };
88205
+ return record;
88206
+ });
88207
+ }
88208
+ async function crmQueryAdaptive(payload) {
88209
+ const query2 = payload.query;
88210
+ if (!query2 || typeof query2 !== "string") {
88211
+ return Promise.reject(new Error("Query is required and must be a string"));
88212
+ }
88213
+ let useSmartStore = false;
88214
+ try {
88215
+ const env = await highLevelApi.API.request("get_env");
88216
+ const isIos = env?.mode === "IOS";
88217
+ const isSfdcSyncEnabled = env?.pitcher?.instance?.settings?.enable_sfdc_sync === true;
88218
+ useSmartStore = isIos && isSfdcSyncEnabled;
88219
+ } catch {
88220
+ useSmartStore = false;
88221
+ }
88222
+ console.log(`crmQueryAdaptive called with the query: `, query2);
88223
+ if (useSmartStore) {
88224
+ const fields = extractFieldsFromSoql(query2);
88225
+ const objectName = extractObjectFromSoql(query2);
88226
+ const smartQuery = convertSoqlToSmartQuery(query2);
88227
+ console.log(`Smart Query: `, smartQuery);
88228
+ const smartStoreResults = await crmSmartQuery({ query: smartQuery });
88229
+ const records = transformSmartStoreResults(smartStoreResults, fields, objectName);
88230
+ return {
88231
+ records,
88232
+ totalSize: records.length
88233
+ };
88234
+ }
88235
+ return crmQuery(payload);
88236
+ }
87714
88237
  function crmSmartQuery(payload) {
87715
88238
  const query2 = payload.query;
87716
88239
  if (!query2 || typeof query2 !== "string") {
87717
88240
  return Promise.reject(new Error("Query is required and must be a string"));
87718
88241
  }
87719
- const smartStorePattern = /\{[^}]+:[^}]+\}/;
88242
+ const smartStorePattern = /\{[^}]+:[^}]+}/;
87720
88243
  if (!smartStorePattern.test(query2.trim())) {
87721
88244
  return Promise.reject(
87722
88245
  new Error(
@@ -87773,7 +88296,14 @@ function crmSmartUpsertObjects(payload) {
87773
88296
  }
87774
88297
  }
87775
88298
  }
87776
- return highLevelApi.API.request("crm_smart_upsert_objects", payload);
88299
+ console.log("[crmSmartUpsertObjects] Request payload:", JSON.stringify(payload, null, 2));
88300
+ return highLevelApi.API.request("crm_smart_upsert_objects", payload).then((result) => {
88301
+ console.log("[crmSmartUpsertObjects] Success:", result);
88302
+ return result;
88303
+ }).catch((error) => {
88304
+ console.error("[crmSmartUpsertObjects] Error:", error);
88305
+ throw error;
88306
+ });
87777
88307
  }
87778
88308
  function crmSmartObjectValidationRules(payload) {
87779
88309
  if (!payload) {
@@ -87813,7 +88343,66 @@ function crmSmartDeleteObjects(payload) {
87813
88343
  }
87814
88344
  }
87815
88345
  }
87816
- return highLevelApi.API.request("crm_smart_delete_objects", payload);
88346
+ console.log("[crmSmartDeleteObjects] Request payload:", JSON.stringify(payload, null, 2));
88347
+ return highLevelApi.API.request("crm_smart_delete_objects", payload).then((result) => {
88348
+ console.log("[crmSmartDeleteObjects] Success:", result);
88349
+ return result;
88350
+ }).catch((error) => {
88351
+ console.error("[crmSmartDeleteObjects] Error:", error);
88352
+ throw error;
88353
+ });
88354
+ }
88355
+ function crmCreate(payload) {
88356
+ if (!payload) {
88357
+ return Promise.reject(new Error("Payload is required"));
88358
+ }
88359
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
88360
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
88361
+ }
88362
+ if (!payload.records || !Array.isArray(payload.records) || payload.records.length === 0) {
88363
+ return Promise.reject(new Error("records is required and must be a non-empty array"));
88364
+ }
88365
+ for (let i = 0; i < payload.records.length; i++) {
88366
+ const record = payload.records[i];
88367
+ if (!record || typeof record !== "object" || Array.isArray(record)) {
88368
+ return Promise.reject(
88369
+ new Error(`records contains invalid element at index ${i}. All records must be valid objects.`)
88370
+ );
88371
+ }
88372
+ }
88373
+ return highLevelApi.API.request("crm_create", payload);
88374
+ }
88375
+ function crmUpsert(payload) {
88376
+ if (!payload) {
88377
+ return Promise.reject(new Error("Payload is required"));
88378
+ }
88379
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
88380
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
88381
+ }
88382
+ if (!payload.records || !Array.isArray(payload.records) || payload.records.length === 0) {
88383
+ return Promise.reject(new Error("records is required and must be a non-empty array"));
88384
+ }
88385
+ if (!payload.external_id_field || typeof payload.external_id_field !== "string" || payload.external_id_field.trim() === "") {
88386
+ return Promise.reject(new Error("external_id_field is required and must be a non-empty string"));
88387
+ }
88388
+ for (let i = 0; i < payload.records.length; i++) {
88389
+ const record = payload.records[i];
88390
+ if (!record || typeof record !== "object" || Array.isArray(record)) {
88391
+ return Promise.reject(
88392
+ new Error(`records contains invalid element at index ${i}. All records must be valid objects.`)
88393
+ );
88394
+ }
88395
+ }
88396
+ return highLevelApi.API.request("crm_upsert", payload);
88397
+ }
88398
+ function crmDescribe(payload) {
88399
+ if (!payload) {
88400
+ return Promise.reject(new Error("Payload is required"));
88401
+ }
88402
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
88403
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
88404
+ }
88405
+ return highLevelApi.API.request("crm_describe", payload);
87817
88406
  }
87818
88407
 
87819
88408
  function getFolders(payload) {
@@ -87911,12 +88500,16 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
87911
88500
  createFavorite,
87912
88501
  createFile,
87913
88502
  createFolder,
88503
+ crmCreate,
88504
+ crmDescribe,
87914
88505
  crmQuery,
88506
+ crmQueryAdaptive,
87915
88507
  crmSmartDeleteObjects,
87916
88508
  crmSmartObjectMetadata,
87917
88509
  crmSmartObjectValidationRules,
87918
88510
  crmSmartQuery,
87919
88511
  crmSmartUpsertObjects,
88512
+ crmUpsert,
87920
88513
  deleteCanvas,
87921
88514
  deleteEvent,
87922
88515
  deleteFavorite,
@@ -88505,6 +89098,15 @@ function getTopPitcherWindow(current = window) {
88505
89098
  }
88506
89099
 
88507
89100
  const TRUNCATE_LENGTH_TRIGGER = 10;
89101
+ const RAW_PAYLOAD_METHODS = [
89102
+ "crm_create",
89103
+ "crm_upsert",
89104
+ "crm_smart_query",
89105
+ "crm_smart_object_metadata",
89106
+ "crm_smart_object_validation_rules",
89107
+ "crm_smart_upsert_objects",
89108
+ "crm_smart_delete_objects"
89109
+ ];
88508
89110
  function updateOnlineHandlersEnv(env) {
88509
89111
  env && setEnv(env);
88510
89112
  }
@@ -88570,7 +89172,8 @@ class LowLevelApi extends EventEmitter {
88570
89172
  throw new Error("unsupported response status");
88571
89173
  }
88572
89174
  };
88573
- const payload = cloneDeep(snakeCaseKeys(body));
89175
+ const shouldSkipSnakeCase = RAW_PAYLOAD_METHODS.includes(type);
89176
+ const payload = shouldSkipSnakeCase ? cloneDeep(body) : cloneDeep(snakeCaseKeys(body));
88574
89177
  this.callbacks[id] = {
88575
89178
  dispatched_at: Date.now(),
88576
89179
  type,
@@ -88783,7 +89386,9 @@ const UI_API_METHOD_TYPES = {
88783
89386
  UI_APP_LOADED: "ui_app_loaded",
88784
89387
  UI_APP_RESIZE: "ui_app_resize",
88785
89388
  UI_CLOSE_CANVAS_SECTION_EXECUTION: "ui_close_canvas_section_execution",
88786
- UI_CLOSE_CANVAS_DRAWER: "ui_close_canvas_drawer"
89389
+ UI_CLOSE_CANVAS_DRAWER: "ui_close_canvas_drawer",
89390
+ UI_OPEN_GLOBAL_POPUP: "ui_open_global_popup",
89391
+ UI_CLOSE_GLOBAL_POPUP: "ui_close_global_popup"
88787
89392
  };
88788
89393
  const UI_MESSAGE_TYPES = {
88789
89394
  UI_MEETING_CANCELED: "ui_meeting_canceled",
@@ -88835,10 +89440,25 @@ async function selectAgendaContent$1(payload = {}) {
88835
89440
  const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_SELECT_AGENDA_CONTENT, payload);
88836
89441
  return response.data;
88837
89442
  }
89443
+ async function openGlobalPopup(appName, extraContext) {
89444
+ const pr = await usePostRobot();
89445
+ const payload = {
89446
+ app_name: appName,
89447
+ extra_context: extraContext
89448
+ };
89449
+ const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_OPEN_GLOBAL_POPUP, payload);
89450
+ return response.data;
89451
+ }
89452
+ async function closeGlobalPopup() {
89453
+ const pr = await usePostRobot();
89454
+ await pr.send(window.parent, UI_API_METHOD_TYPES.UI_CLOSE_GLOBAL_POPUP, {});
89455
+ }
88838
89456
 
88839
89457
  const contentUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
88840
89458
  __proto__: null,
89459
+ closeGlobalPopup,
88841
89460
  open: open$1,
89461
+ openGlobalPopup,
88842
89462
  preselectSfdcMeetingId,
88843
89463
  selectAgendaContent: selectAgendaContent$1,
88844
89464
  selectCollectionContent: selectCollectionContent$1,
@@ -94612,7 +95232,7 @@ const _hoisted_14$h = {
94612
95232
  class: "flex items-center ml-2"
94613
95233
  };
94614
95234
  const _hoisted_15$f = {
94615
- key: 0,
95235
+ key: 2,
94616
95236
  class: "flex items-center ml-2"
94617
95237
  };
94618
95238
  const _hoisted_16$e = { class: "flex flex-col w-full flex-1 min-h-0" };
@@ -94647,67 +95267,75 @@ const _hoisted_30$4 = {
94647
95267
  };
94648
95268
  const _hoisted_31$4 = { class: "w-full px-0" };
94649
95269
  const _hoisted_32$4 = {
95270
+ key: 0,
95271
+ class: "flex flex-col items-center justify-center text-center p-8 gap-4"
95272
+ };
95273
+ const _hoisted_33$4 = {
94650
95274
  key: 0,
94651
95275
  class: "mb-0"
94652
95276
  };
94653
- const _hoisted_33$4 = { class: "flex items-center px-0 pt-2 pb-1" };
94654
- const _hoisted_34$4 = { class: "text-m font-semibold text-gray-900" };
94655
- const _hoisted_35$4 = { class: "ml-2 text-sm text-gray-500" };
94656
- const _hoisted_36$4 = ["data-result-selected", "onClick"];
94657
- const _hoisted_37$4 = {
95277
+ const _hoisted_34$4 = { class: "flex items-center px-0 pt-2 pb-1" };
95278
+ const _hoisted_35$4 = { class: "text-m font-semibold text-gray-900" };
95279
+ const _hoisted_36$4 = { class: "ml-2 text-sm text-gray-500" };
95280
+ const _hoisted_37$4 = ["data-result-selected", "onClick"];
95281
+ const _hoisted_38$4 = {
94658
95282
  key: 1,
94659
95283
  class: "w-18 h-14 border-rounded-1 mr-4 flex-shrink-0 bg-gray-200 flex items-center justify-center"
94660
95284
  };
94661
- const _hoisted_38$4 = { class: "flex-1 min-w-0" };
94662
- const _hoisted_39$4 = { class: "text-sm font-bold text-gray-900 truncate mb-1" };
94663
- const _hoisted_40$4 = ["innerHTML"];
94664
- const _hoisted_41$4 = { class: "text-xs text-gray-500" };
94665
- const _hoisted_42$4 = { class: "text-xs text-gray-400" };
94666
- const _hoisted_43$4 = {
95285
+ const _hoisted_39$4 = { class: "flex-1 min-w-0" };
95286
+ const _hoisted_40$4 = { class: "text-sm font-bold text-gray-900 truncate mb-1" };
95287
+ const _hoisted_41$4 = ["innerHTML"];
95288
+ const _hoisted_42$4 = { class: "text-xs text-gray-500" };
95289
+ const _hoisted_43$4 = { class: "text-xs text-gray-400" };
95290
+ const _hoisted_44$4 = {
94667
95291
  key: 0,
94668
95292
  class: "px-0 py-0"
94669
95293
  };
94670
- const _hoisted_44$4 = { key: 1 };
94671
- const _hoisted_45$4 = { class: "flex items-center px-0 pt-2 pb-1" };
94672
- const _hoisted_46$4 = { class: "text-m font-semibold text-gray-900" };
94673
- const _hoisted_47$4 = { class: "ml-2 text-sm text-gray-500" };
94674
- const _hoisted_48$4 = ["data-result-selected", "onClick"];
94675
- const _hoisted_49$4 = { class: "w-18 h-14 border-rounded-1 mr-4 flex-shrink-0 bg-gray-200 flex items-center justify-center" };
94676
- const _hoisted_50$4 = { class: "flex-1 min-w-0" };
94677
- const _hoisted_51$3 = { class: "text-sm font-bold text-gray-900 truncate mb-1" };
94678
- const _hoisted_52$3 = { class: "text-xs text-gray-500" };
94679
- const _hoisted_53$3 = { class: "text-xs text-gray-400" };
94680
- const _hoisted_54$2 = {
95294
+ const _hoisted_45$4 = { key: 1 };
95295
+ const _hoisted_46$4 = { class: "flex items-center px-0 pt-2 pb-1" };
95296
+ const _hoisted_47$4 = { class: "text-m font-semibold text-gray-900" };
95297
+ const _hoisted_48$4 = { class: "ml-2 text-sm text-gray-500" };
95298
+ const _hoisted_49$4 = ["data-result-selected", "onClick"];
95299
+ const _hoisted_50$4 = { class: "w-18 h-14 border-rounded-1 mr-4 flex-shrink-0 bg-gray-200 flex items-center justify-center" };
95300
+ const _hoisted_51$3 = { class: "flex-1 min-w-0" };
95301
+ const _hoisted_52$3 = { class: "text-sm font-bold text-gray-900 truncate mb-1" };
95302
+ const _hoisted_53$3 = { class: "text-xs text-gray-500" };
95303
+ const _hoisted_54$2 = { class: "text-xs text-gray-400" };
95304
+ const _hoisted_55$2 = {
94681
95305
  key: 0,
94682
95306
  class: "px-0 py-0"
94683
95307
  };
94684
- const _hoisted_55$2 = {
94685
- key: 0,
95308
+ const _hoisted_56$2 = {
95309
+ key: 2,
94686
95310
  class: "flex flex-col items-center justify-center text-center p-8 gap-4"
94687
95311
  };
94688
- const _hoisted_56$2 = {
95312
+ const _hoisted_57$2 = {
94689
95313
  key: 2,
94690
95314
  class: "flex-1 overflow-y-auto bg-white w-full"
94691
95315
  };
94692
- const _hoisted_57$2 = { class: "w-full px-0" };
94693
- const _hoisted_58$2 = { class: "flex items-center px-0 pt-2 pb-1" };
94694
- const _hoisted_59$2 = { class: "text-m font-semibold text-gray-900" };
94695
- const _hoisted_60$2 = { class: "ml-2 text-sm text-gray-500" };
94696
- const _hoisted_61$2 = ["data-result-selected", "onClick"];
94697
- const _hoisted_62$2 = {
95316
+ const _hoisted_58$2 = { class: "w-full px-0" };
95317
+ const _hoisted_59$2 = {
95318
+ key: 0,
95319
+ class: "flex flex-col items-center justify-center text-center p-8 gap-4"
95320
+ };
95321
+ const _hoisted_60$2 = { class: "flex items-center px-0 pt-2 pb-1" };
95322
+ const _hoisted_61$2 = { class: "text-m font-semibold text-gray-900" };
95323
+ const _hoisted_62$2 = { class: "ml-2 text-sm text-gray-500" };
95324
+ const _hoisted_63$2 = ["data-result-selected", "onClick"];
95325
+ const _hoisted_64$2 = {
94698
95326
  key: 1,
94699
95327
  class: "w-18 h-14 border-rounded-1 mr-4 flex-shrink-0 bg-gray-200 flex items-center justify-center"
94700
95328
  };
94701
- const _hoisted_63$2 = { class: "flex-1 min-w-0" };
94702
- const _hoisted_64$2 = { class: "text-sm font-bold text-gray-900 truncate mb-1" };
94703
- const _hoisted_65$2 = ["innerHTML"];
94704
- const _hoisted_66$2 = { class: "text-xs text-gray-500" };
94705
- const _hoisted_67$2 = { class: "text-xs text-gray-400" };
94706
- const _hoisted_68$2 = {
95329
+ const _hoisted_65$2 = { class: "flex-1 min-w-0" };
95330
+ const _hoisted_66$2 = { class: "text-sm font-bold text-gray-900 truncate mb-1" };
95331
+ const _hoisted_67$2 = ["innerHTML"];
95332
+ const _hoisted_68$2 = { class: "text-xs text-gray-500" };
95333
+ const _hoisted_69$1 = { class: "text-xs text-gray-400" };
95334
+ const _hoisted_70$1 = {
94707
95335
  key: 0,
94708
95336
  class: "flex flex-col items-center justify-center text-center p-8 gap-4"
94709
95337
  };
94710
- const _hoisted_69$1 = {
95338
+ const _hoisted_71$1 = {
94711
95339
  key: 0,
94712
95340
  class: "flex flex-wrap line-height-6 pt-4 pb-2 px-6 border-t border-gray-200 gap-y-4 gap-x-4"
94713
95341
  };
@@ -94737,13 +95365,13 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
94737
95365
  const fileTypeOptions = [
94738
95366
  { label: "Folder", value: "folder" },
94739
95367
  { label: "PDF", value: "pdf" },
94740
- { label: "Image", value: "image" },
94741
- { label: "Audio", value: "audio" },
94742
- { label: "Video", value: "video" },
94743
95368
  { label: "Document", value: "document" },
94744
95369
  { label: "Presentation", value: "presentation" },
94745
95370
  { label: "Spreadsheet", value: "spreadsheet" },
94746
- { label: "Font", value: "font" },
95371
+ { label: "Image", value: "image" },
95372
+ { label: "Video", value: "video" },
95373
+ { label: "Audio", value: "audio" },
95374
+ { label: "AR", value: "ar" },
94747
95375
  { label: "Web", value: "web" }
94748
95376
  ];
94749
95377
  const hasActiveFilters = computed(() => selectedFileTypes.value.length > 0 || selectedCanvasFilters.value.length > 0);
@@ -94752,12 +95380,19 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
94752
95380
  selectedCanvasFilters.value = [];
94753
95381
  debouncedFilterSearch();
94754
95382
  };
94755
- const handleEverywhereClick = () => {
95383
+ const handleEverywhereClick = async () => {
94756
95384
  selectedFileTypes.value = [];
94757
95385
  selectedCanvasFilters.value = [];
94758
95386
  searchType.value = null;
94759
95387
  if (searchQuery.value.trim()) {
94760
- performSearch(searchQuery.value);
95388
+ try {
95389
+ skipNextSuggestionFetch.value = true;
95390
+ await performSearch(searchQuery.value);
95391
+ } catch (error) {
95392
+ console.error("[handleEverywhereClick] Search failed:", error);
95393
+ } finally {
95394
+ skipNextSuggestionFetch.value = false;
95395
+ }
94761
95396
  }
94762
95397
  };
94763
95398
  const recentSearches = ref([]);
@@ -94807,6 +95442,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
94807
95442
  {
94808
95443
  thumbnailsOnly: true,
94809
95444
  fileIds,
95445
+ instanceId: props.instanceId,
94810
95446
  isAdminApp: props.isAdmin === true
94811
95447
  }
94812
95448
  );
@@ -94996,8 +95632,12 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
94996
95632
  isSearching.value = true;
94997
95633
  hasSearchCompleted.value = false;
94998
95634
  searchError.value = null;
95635
+ const shouldSkipSuggestionFetch = skipNextSuggestionFetch.value;
95636
+ if (shouldSkipSuggestionFetch) {
95637
+ skipNextSuggestionFetch.value = false;
95638
+ }
94999
95639
  try {
95000
- const ALLOWED_CANVAS_TYPES = ["saved_canvas", "template", "section", "block"];
95640
+ const ALLOWED_CANVAS_TYPES = ["saved_canvas", "template", "product_template", "section", "block"];
95001
95641
  const ALLOWED_FILE_TYPES = [
95002
95642
  "folder",
95003
95643
  "pdf",
@@ -95005,11 +95645,9 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95005
95645
  "audio",
95006
95646
  "video",
95007
95647
  "document",
95008
- "docx",
95009
- "pptx",
95010
95648
  "presentation",
95011
95649
  "spreadsheet",
95012
- "font",
95650
+ "ar",
95013
95651
  "web"
95014
95652
  ];
95015
95653
  const validCanvasFilters = selectedCanvasFilters.value.filter((f) => ALLOWED_CANVAS_TYPES.includes(f));
@@ -95042,10 +95680,16 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95042
95680
  canvas: canvasFilters,
95043
95681
  content: contentFilters
95044
95682
  });
95683
+ if (query.trim() !== searchQuery.value.trim()) {
95684
+ return;
95685
+ }
95045
95686
  contentResults.value = results.content?.hits || [];
95046
95687
  canvasResults.value = results.canvas?.hits || [];
95047
95688
  selectedResultIndex.value = -1;
95048
95689
  searchError.value = null;
95690
+ if (query.trim().length >= 2 && !shouldSkipSuggestionFetch) {
95691
+ fetchQuerySuggestions(query.trim());
95692
+ }
95049
95693
  const totalResults = contentResults.value.length + canvasResults.value.length;
95050
95694
  trackAlgoliaSearchPerformed(query.trim(), totalResults);
95051
95695
  if (totalResults === 0) {
@@ -95082,11 +95726,18 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95082
95726
  const debouncedFilterSearch = () => {
95083
95727
  if (filterChangeTimer) clearTimeout(filterChangeTimer);
95084
95728
  if (searchTimer) clearTimeout(searchTimer);
95085
- filterChangeTimer = setTimeout(() => {
95729
+ filterChangeTimer = setTimeout(async () => {
95086
95730
  if (searchQuery.value.trim() && !showRecentView.value) {
95087
- performSearch(searchQuery.value);
95731
+ try {
95732
+ skipNextSuggestionFetch.value = true;
95733
+ await performSearch(searchQuery.value);
95734
+ } catch (error) {
95735
+ console.error("[debouncedFilterSearch] Search failed:", error);
95736
+ } finally {
95737
+ skipNextSuggestionFetch.value = false;
95738
+ }
95088
95739
  }
95089
- }, 300);
95740
+ }, 500);
95090
95741
  };
95091
95742
  const handleSearchInput = (query) => {
95092
95743
  const validatedQuery = validateSearchInput(query);
@@ -95094,20 +95745,14 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95094
95745
  if (validatedQuery.trim()) {
95095
95746
  showRecentView.value = false;
95096
95747
  hasSearchCompleted.value = false;
95097
- if (validatedQuery.trim().length >= 2) {
95098
- if (skipNextSuggestionFetch.value) {
95099
- skipNextSuggestionFetch.value = false;
95100
- } else {
95101
- fetchQuerySuggestions(validatedQuery);
95102
- }
95103
- } else {
95748
+ if (validatedQuery.trim().length < 2) {
95104
95749
  querySuggestions.value = [];
95105
95750
  selectedSuggestionIndex.value = -1;
95106
95751
  }
95107
95752
  if (searchTimer) clearTimeout(searchTimer);
95108
95753
  searchTimer = setTimeout(() => {
95109
95754
  performSearch(validatedQuery);
95110
- }, 300);
95755
+ }, 500);
95111
95756
  if (saveSearchTimer) clearTimeout(saveSearchTimer);
95112
95757
  saveSearchTimer = setTimeout(() => {
95113
95758
  saveSearchTerm(validatedQuery);
@@ -95145,6 +95790,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95145
95790
  return;
95146
95791
  }
95147
95792
  try {
95793
+ skipNextSuggestionFetch.value = true;
95148
95794
  searchQuery.value = validatedSearchTerm;
95149
95795
  showRecentView.value = false;
95150
95796
  querySuggestions.value = [];
@@ -95152,6 +95798,8 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95152
95798
  await performSearch(validatedSearchTerm);
95153
95799
  } catch (error) {
95154
95800
  console.error("[handleRecentSearchClick] Search failed:", error);
95801
+ } finally {
95802
+ skipNextSuggestionFetch.value = false;
95155
95803
  }
95156
95804
  };
95157
95805
  const handleSuggestionClick = async (suggestion) => {
@@ -95221,6 +95869,8 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95221
95869
  return t("canvasUI.CAlgoliaSearch.canvasFilters.saved");
95222
95870
  case "template":
95223
95871
  return t("canvasUI.CAlgoliaSearch.canvasFilters.templates");
95872
+ case "product_template":
95873
+ return t("canvasUI.CAlgoliaSearch.canvasFilters.productTemplates");
95224
95874
  case "section":
95225
95875
  return t("canvasUI.CAlgoliaSearch.canvasFilters.products");
95226
95876
  case "block":
@@ -95370,6 +96020,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95370
96020
  {
95371
96021
  thumbnailsOnly: true,
95372
96022
  fileIds: [item.id],
96023
+ instanceId: props.instanceId,
95373
96024
  isAdminApp: props.isAdmin === true
95374
96025
  }
95375
96026
  );
@@ -95442,7 +96093,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95442
96093
  show: "",
95443
96094
  verticalAlignment: "top",
95444
96095
  "z-index": _ctx.zIndex,
95445
- "onUpdate:show": _cache[15] || (_cache[15] = ($event) => emit("toggleSearch", $event))
96096
+ "onUpdate:show": _cache[16] || (_cache[16] = ($event) => emit("toggleSearch", $event))
95446
96097
  }, {
95447
96098
  default: withCtx(() => [
95448
96099
  createElementVNode("div", {
@@ -95451,7 +96102,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95451
96102
  }, [
95452
96103
  createElementVNode("div", _hoisted_1$4w, [
95453
96104
  createElementVNode("div", _hoisted_2$3j, [
95454
- _cache[16] || (_cache[16] = createElementVNode("div", { class: "absolute left-2.5 top-1/2 transform -translate-y-1/2 z-10" }, [
96105
+ _cache[17] || (_cache[17] = createElementVNode("div", { class: "absolute left-2.5 top-1/2 transform -translate-y-1/2 z-10" }, [
95455
96106
  createElementVNode("i", { class: "c-icon far fa-search text-gray-400 text-l" })
95456
96107
  ], -1)),
95457
96108
  withDirectives(createElementVNode("input", {
@@ -95595,7 +96246,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95595
96246
  (openBlock(), createElementBlock(Fragment, null, renderList(fileTypeOptions, (option) => {
95596
96247
  return createElementVNode("div", {
95597
96248
  key: option.value,
95598
- class: "w-full h-8 flex items-center"
96249
+ class: "w-full h-7 flex items-center"
95599
96250
  }, [
95600
96251
  createVNode(unref(NCheckbox), {
95601
96252
  checked: selectedFileTypes.value.includes(option.value),
@@ -95632,14 +96283,15 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95632
96283
  _: 1
95633
96284
  }, 8, ["show"]),
95634
96285
  hasActiveFilters.value ? (openBlock(), createElementBlock("div", _hoisted_14$h, [
95635
- _cache[17] || (_cache[17] = createElementVNode("div", { class: "h-6 w-px bg-gray-300 mx-2" }, null, -1)),
96286
+ _cache[18] || (_cache[18] = createElementVNode("div", { class: "h-6 w-px bg-gray-300 mx-2" }, null, -1)),
95636
96287
  createElementVNode("span", {
95637
96288
  class: "text-sm text-gray-600 hover:text-gray-800 font-normal cursor-pointer",
95638
96289
  onClick: clearAllFilters
95639
96290
  }, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.filters.clear")), 1)
95640
96291
  ])) : createCommentVNode("", true)
95641
96292
  ], 64)) : searchType.value === "canvases" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
95642
- createVNode(unref(NTag), {
96293
+ !_ctx.isAdmin ? (openBlock(), createBlock(unref(NTag), {
96294
+ key: 0,
95643
96295
  class: "select-none cursor-pointer",
95644
96296
  style: normalizeStyle({
95645
96297
  "--n-color": selectedCanvasFilters.value.includes("saved_canvas") ? "var(--p-primary5)" : "var(--p-primary6)",
@@ -95655,7 +96307,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95655
96307
  createElementVNode("span", null, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.canvasFilters.saved")), 1)
95656
96308
  ]),
95657
96309
  _: 1
95658
- }, 8, ["style"]),
96310
+ }, 8, ["style"])) : createCommentVNode("", true),
95659
96311
  createVNode(unref(NTag), {
95660
96312
  class: "select-none cursor-pointer",
95661
96313
  style: normalizeStyle({
@@ -95673,6 +96325,24 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95673
96325
  ]),
95674
96326
  _: 1
95675
96327
  }, 8, ["style"]),
96328
+ _ctx.isAdmin ? (openBlock(), createBlock(unref(NTag), {
96329
+ key: 1,
96330
+ class: "select-none cursor-pointer",
96331
+ style: normalizeStyle({
96332
+ "--n-color": selectedCanvasFilters.value.includes("product_template") ? "var(--p-primary5)" : "var(--p-primary6)",
96333
+ "--n-border": "1px solid var(--p-primary5)",
96334
+ "--n-height": "28px"
96335
+ }),
96336
+ themeOverrides: {
96337
+ borderRadius: "4px"
96338
+ },
96339
+ onClick: _cache[11] || (_cache[11] = ($event) => toggleCanvasFilter("product_template"))
96340
+ }, {
96341
+ default: withCtx(() => [
96342
+ createElementVNode("span", null, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.canvasFilters.productTemplates")), 1)
96343
+ ]),
96344
+ _: 1
96345
+ }, 8, ["style"])) : createCommentVNode("", true),
95676
96346
  createVNode(unref(NTag), {
95677
96347
  class: "select-none cursor-pointer",
95678
96348
  style: normalizeStyle({
@@ -95683,7 +96353,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95683
96353
  themeOverrides: {
95684
96354
  borderRadius: "4px"
95685
96355
  },
95686
- onClick: _cache[11] || (_cache[11] = ($event) => toggleCanvasFilter("section"))
96356
+ onClick: _cache[12] || (_cache[12] = ($event) => toggleCanvasFilter("section"))
95687
96357
  }, {
95688
96358
  default: withCtx(() => [
95689
96359
  createElementVNode("span", null, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.canvasFilters.products")), 1)
@@ -95700,7 +96370,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95700
96370
  themeOverrides: {
95701
96371
  borderRadius: "4px"
95702
96372
  },
95703
- onClick: _cache[12] || (_cache[12] = ($event) => toggleCanvasFilter("block"))
96373
+ onClick: _cache[13] || (_cache[13] = ($event) => toggleCanvasFilter("block"))
95704
96374
  }, {
95705
96375
  default: withCtx(() => [
95706
96376
  createElementVNode("span", null, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.canvasFilters.blocks")), 1)
@@ -95708,7 +96378,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95708
96378
  _: 1
95709
96379
  }, 8, ["style"]),
95710
96380
  selectedCanvasFilters.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_15$f, [
95711
- _cache[18] || (_cache[18] = createElementVNode("div", { class: "h-6 w-px bg-gray-300 mx-2" }, null, -1)),
96381
+ _cache[19] || (_cache[19] = createElementVNode("div", { class: "h-6 w-px bg-gray-300 mx-2" }, null, -1)),
95712
96382
  createElementVNode("span", {
95713
96383
  class: "text-sm text-gray-600 hover:text-gray-800 font-normal cursor-pointer",
95714
96384
  onClick: clearCanvasFilters
@@ -95738,7 +96408,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95738
96408
  }), 128))
95739
96409
  ]),
95740
96410
  recentlyOpenedDocs.value.length > 0 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
95741
- _cache[19] || (_cache[19] = createElementVNode("hr", { class: "border-0 h-px bg-gray-200 mt-2 mb-3 w-full" }, null, -1)),
96411
+ _cache[20] || (_cache[20] = createElementVNode("hr", { class: "border-0 h-px bg-gray-200 mt-2 mb-3 w-full" }, null, -1)),
95742
96412
  createElementVNode("div", _hoisted_21$7, [
95743
96413
  createElementVNode("span", _hoisted_22$5, toDisplayString(unref(t)("canvasUI.components.fileViewer.recentlyOpened")), 1)
95744
96414
  ]),
@@ -95794,30 +96464,185 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95794
96464
  ], 64)) : createCommentVNode("", true)
95795
96465
  ])) : !searchType.value ? (openBlock(), createElementBlock("div", _hoisted_30$4, [
95796
96466
  createElementVNode("div", _hoisted_31$4, [
95797
- filteredContentFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_32$4, [
95798
- createElementVNode("div", _hoisted_33$4, [
96467
+ isSearching.value ? (openBlock(), createElementBlock("div", _hoisted_32$4, [
96468
+ createVNode(CIcon, {
96469
+ class: "animate-spin text-6xl",
96470
+ color: "var(--p-primary)",
96471
+ icon: "spinner"
96472
+ })
96473
+ ])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
96474
+ filteredContentFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_33$4, [
96475
+ createElementVNode("div", _hoisted_34$4, [
96476
+ createVNode(CIcon, {
96477
+ class: "mr-2",
96478
+ color: "var(--p-text2)",
96479
+ icon: "folder",
96480
+ size: "16"
96481
+ }),
96482
+ createElementVNode("span", _hoisted_35$4, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.sections.content")), 1),
96483
+ createElementVNode("span", _hoisted_36$4, "(" + toDisplayString(filteredContentFiles.value.length) + ")", 1)
96484
+ ]),
96485
+ createElementVNode("div", null, [
96486
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filteredContentFiles.value.slice(0, 5), (item) => {
96487
+ return openBlock(), createElementBlock("div", {
96488
+ key: item.id,
96489
+ class: normalizeClass([
96490
+ "flex items-center px-0 cursor-pointer border-b border-gray-100 w-full",
96491
+ _ctx.isAdmin ? "py-3" : "py-0",
96492
+ isResultSelected(item) ? "bg-primary6" : "hover:bg-primary5"
96493
+ ]),
96494
+ "data-result-selected": isResultSelected(item),
96495
+ onClick: ($event) => handleResultClick(item, item.type === "folder" ? "folder" : "file")
96496
+ }, [
96497
+ item.type === "file" ? (openBlock(), createBlock(_sfc_main$6K, {
96498
+ key: 0,
96499
+ class: "w-18 h-14 border-rounded-1 overflow-hidden flex-shrink-0 mr-4",
96500
+ cover: "",
96501
+ "file-data": item,
96502
+ "object-fit": "cover",
96503
+ src: item.picture_url || "",
96504
+ width: "72"
96505
+ }, null, 8, ["file-data", "src"])) : (openBlock(), createElementBlock("div", _hoisted_38$4, [
96506
+ createVNode(CIcon, {
96507
+ color: "var(--p-text2)",
96508
+ icon: "folder",
96509
+ size: "32"
96510
+ })
96511
+ ])),
96512
+ createElementVNode("div", _hoisted_39$4, [
96513
+ createElementVNode("h3", _hoisted_40$4, toDisplayString(item.name), 1),
96514
+ item.type === "file" && getSnippet(item) ? (openBlock(), createElementBlock("p", {
96515
+ key: 0,
96516
+ class: "text-xs text-gray-600 mb-1",
96517
+ innerHTML: getSnippet(item)
96518
+ }, null, 8, _hoisted_41$4)) : createCommentVNode("", true),
96519
+ createElementVNode("p", _hoisted_42$4, toDisplayString(item.type === "folder" ? "Folder" : item.file_category || item.content_type || "File"), 1)
96520
+ ]),
96521
+ createElementVNode("div", _hoisted_43$4, toDisplayString(item.type === "folder" ? item.parent_folder?.name || "" : item.folder?.name || ""), 1)
96522
+ ], 10, _hoisted_37$4);
96523
+ }), 128))
96524
+ ]),
96525
+ filteredContentFiles.value.length > 5 ? (openBlock(), createElementBlock("div", _hoisted_44$4, [
96526
+ createElementVNode("span", {
96527
+ class: "text-sm text-gray-600 hover:text-gray-800 font-bold flex items-center cursor-pointer",
96528
+ onClick: _cache[14] || (_cache[14] = ($event) => searchType.value = "content")
96529
+ }, [
96530
+ createTextVNode(toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.actions.viewAll")) + " ", 1),
96531
+ createVNode(CIcon, {
96532
+ class: "ml-1",
96533
+ icon: "chevron-right",
96534
+ size: "12"
96535
+ })
96536
+ ])
96537
+ ])) : createCommentVNode("", true)
96538
+ ])) : createCommentVNode("", true),
96539
+ filteredCanvasFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_45$4, [
96540
+ createElementVNode("div", _hoisted_46$4, [
96541
+ createVNode(CIcon, {
96542
+ class: "mr-2",
96543
+ color: "var(--p-text2)",
96544
+ icon: "presentation",
96545
+ size: "16"
96546
+ }),
96547
+ createElementVNode("span", _hoisted_47$4, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.sections.pitchDecks")), 1),
96548
+ createElementVNode("span", _hoisted_48$4, "(" + toDisplayString(filteredCanvasFiles.value.length) + ")", 1)
96549
+ ]),
96550
+ createElementVNode("div", null, [
96551
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filteredCanvasFiles.value.slice(0, 5), (item) => {
96552
+ return openBlock(), createElementBlock("div", {
96553
+ key: item.id,
96554
+ class: normalizeClass([
96555
+ "flex items-center px-0 cursor-pointer border-b border-gray-100 w-full",
96556
+ _ctx.isAdmin ? "py-3" : "py-0",
96557
+ isResultSelected(item) ? "bg-primary6" : "hover:bg-primary5"
96558
+ ]),
96559
+ "data-result-selected": isResultSelected(item),
96560
+ onClick: ($event) => handleResultClick(item, "canvas")
96561
+ }, [
96562
+ createElementVNode("div", _hoisted_50$4, [
96563
+ createVNode(CIcon, {
96564
+ color: "var(--p-text2)",
96565
+ icon: "presentation",
96566
+ size: "32"
96567
+ })
96568
+ ]),
96569
+ createElementVNode("div", _hoisted_51$3, [
96570
+ createElementVNode("h3", _hoisted_52$3, toDisplayString(item.name), 1),
96571
+ createElementVNode("p", _hoisted_53$3, toDisplayString(formatCanvasType(item.content_type)), 1)
96572
+ ]),
96573
+ createElementVNode("div", _hoisted_54$2, toDisplayString(item.folder?.name || ""), 1)
96574
+ ], 10, _hoisted_49$4);
96575
+ }), 128))
96576
+ ]),
96577
+ filteredCanvasFiles.value.length > 5 ? (openBlock(), createElementBlock("div", _hoisted_55$2, [
96578
+ createElementVNode("span", {
96579
+ class: "text-sm text-gray-600 hover:text-gray-800 font-bold flex items-center cursor-pointer",
96580
+ onClick: _cache[15] || (_cache[15] = ($event) => searchType.value = "canvases")
96581
+ }, [
96582
+ createTextVNode(toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.actions.viewAll")) + " ", 1),
96583
+ createVNode(CIcon, {
96584
+ class: "ml-1",
96585
+ icon: "chevron-right",
96586
+ size: "12"
96587
+ })
96588
+ ])
96589
+ ])) : createCommentVNode("", true)
96590
+ ])) : createCommentVNode("", true),
96591
+ searchError.value || shouldShowNoResults.value ? (openBlock(), createElementBlock("div", _hoisted_56$2, [
95799
96592
  createVNode(CIcon, {
96593
+ class: "text-6xl",
96594
+ color: searchError.value ? "var(--p-error)" : "var(--p-text3)",
96595
+ "fa-type": "fal",
96596
+ icon: searchError.value ? "exclamation-triangle" : "radar"
96597
+ }, null, 8, ["color", "icon"]),
96598
+ createElementVNode("p", {
96599
+ class: normalizeClass(searchError.value ? "text-error font-semibold" : "text-text2")
96600
+ }, toDisplayString(searchError.value || unref(t)("canvasUI.CGlobalSearch.noResults")), 3)
96601
+ ])) : createCommentVNode("", true)
96602
+ ], 64))
96603
+ ])
96604
+ ])) : (openBlock(), createElementBlock("div", _hoisted_57$2, [
96605
+ createElementVNode("div", _hoisted_58$2, [
96606
+ isSearching.value ? (openBlock(), createElementBlock("div", _hoisted_59$2, [
96607
+ createVNode(CIcon, {
96608
+ class: "animate-spin text-6xl",
96609
+ color: "var(--p-primary)",
96610
+ icon: "spinner"
96611
+ })
96612
+ ])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
96613
+ createElementVNode("div", _hoisted_60$2, [
96614
+ searchType.value === "content" ? (openBlock(), createBlock(CIcon, {
96615
+ key: 0,
95800
96616
  class: "mr-2",
95801
96617
  color: "var(--p-text2)",
95802
96618
  icon: "folder",
95803
96619
  size: "16"
95804
- }),
95805
- createElementVNode("span", _hoisted_34$4, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.sections.content")), 1),
95806
- createElementVNode("span", _hoisted_35$4, "(" + toDisplayString(filteredContentFiles.value.length) + ")", 1)
96620
+ })) : (openBlock(), createBlock(CIcon, {
96621
+ key: 1,
96622
+ class: "mr-2",
96623
+ color: "var(--p-text2)",
96624
+ icon: "presentation",
96625
+ size: "16"
96626
+ })),
96627
+ createElementVNode("span", _hoisted_61$2, toDisplayString(searchType.value === "content" ? unref(t)("canvasUI.CAlgoliaSearch.sections.content") : unref(t)("canvasUI.CAlgoliaSearch.sections.pitchDecks")), 1),
96628
+ createElementVNode("span", _hoisted_62$2, " (" + toDisplayString(searchType.value === "content" ? filteredContentFiles.value.length : filteredCanvasFiles.value.length) + ") ", 1)
95807
96629
  ]),
95808
96630
  createElementVNode("div", null, [
95809
- (openBlock(true), createElementBlock(Fragment, null, renderList(filteredContentFiles.value.slice(0, 5), (item) => {
96631
+ (openBlock(true), createElementBlock(Fragment, null, renderList(searchType.value === "content" ? filteredContentFiles.value : filteredCanvasFiles.value, (item) => {
95810
96632
  return openBlock(), createElementBlock("div", {
95811
96633
  key: item.id,
95812
96634
  class: normalizeClass([
95813
96635
  "flex items-center px-0 cursor-pointer border-b border-gray-100 w-full",
95814
96636
  _ctx.isAdmin ? "py-3" : "py-0",
95815
- isResultSelected(item) ? "bg-primary6" : "hover:bg-primary5"
96637
+ isResultSelected(item) ? "bg-gray-100" : "hover:bg-gray-50"
95816
96638
  ]),
95817
96639
  "data-result-selected": isResultSelected(item),
95818
- onClick: ($event) => handleResultClick(item, item.type === "folder" ? "folder" : "file")
96640
+ onClick: ($event) => handleResultClick(
96641
+ item,
96642
+ searchType.value === "content" ? item.type === "folder" ? "folder" : "file" : "canvas"
96643
+ )
95819
96644
  }, [
95820
- item.type === "file" ? (openBlock(), createBlock(_sfc_main$6K, {
96645
+ searchType.value === "content" && item.type === "file" ? (openBlock(), createBlock(_sfc_main$6K, {
95821
96646
  key: 0,
95822
96647
  class: "w-18 h-14 border-rounded-1 overflow-hidden flex-shrink-0 mr-4",
95823
96648
  cover: "",
@@ -95825,187 +96650,48 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
95825
96650
  "object-fit": "cover",
95826
96651
  src: item.picture_url || "",
95827
96652
  width: "72"
95828
- }, null, 8, ["file-data", "src"])) : (openBlock(), createElementBlock("div", _hoisted_37$4, [
95829
- createVNode(CIcon, {
96653
+ }, null, 8, ["file-data", "src"])) : (openBlock(), createElementBlock("div", _hoisted_64$2, [
96654
+ searchType.value === "content" ? (openBlock(), createBlock(CIcon, {
96655
+ key: 0,
95830
96656
  color: "var(--p-text2)",
95831
96657
  icon: "folder",
95832
96658
  size: "32"
95833
- })
96659
+ })) : (openBlock(), createBlock(CIcon, {
96660
+ key: 1,
96661
+ color: "var(--p-text2)",
96662
+ icon: "presentation",
96663
+ size: "32"
96664
+ }))
95834
96665
  ])),
95835
- createElementVNode("div", _hoisted_38$4, [
95836
- createElementVNode("h3", _hoisted_39$4, toDisplayString(item.name), 1),
95837
- item.type === "file" && getSnippet(item) ? (openBlock(), createElementBlock("p", {
96666
+ createElementVNode("div", _hoisted_65$2, [
96667
+ createElementVNode("h3", _hoisted_66$2, toDisplayString(item.name), 1),
96668
+ searchType.value === "content" && item.type === "file" && getSnippet(item) ? (openBlock(), createElementBlock("p", {
95838
96669
  key: 0,
95839
96670
  class: "text-xs text-gray-600 mb-1",
95840
96671
  innerHTML: getSnippet(item)
95841
- }, null, 8, _hoisted_40$4)) : createCommentVNode("", true),
95842
- createElementVNode("p", _hoisted_41$4, toDisplayString(item.type === "folder" ? "Folder" : item.file_category || item.content_type || "File"), 1)
96672
+ }, null, 8, _hoisted_67$2)) : createCommentVNode("", true),
96673
+ createElementVNode("p", _hoisted_68$2, toDisplayString(searchType.value === "content" ? item.type === "folder" ? "Folder" : item.file_category || item.content_type || "File" : formatCanvasType(item.content_type)), 1)
95843
96674
  ]),
95844
- createElementVNode("div", _hoisted_42$4, toDisplayString(item.type === "folder" ? item.parent_folder?.name || "" : item.folder?.name || ""), 1)
95845
- ], 10, _hoisted_36$4);
96675
+ createElementVNode("div", _hoisted_69$1, toDisplayString(searchType.value === "content" && item.type === "folder" ? item.parent_folder?.name || "" : item.folder?.name || ""), 1)
96676
+ ], 10, _hoisted_63$2);
95846
96677
  }), 128))
95847
96678
  ]),
95848
- filteredContentFiles.value.length > 5 ? (openBlock(), createElementBlock("div", _hoisted_43$4, [
95849
- createElementVNode("span", {
95850
- class: "text-sm text-gray-600 hover:text-gray-800 font-bold flex items-center cursor-pointer",
95851
- onClick: _cache[13] || (_cache[13] = ($event) => searchType.value = "content")
95852
- }, [
95853
- createTextVNode(toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.actions.viewAll")) + " ", 1),
95854
- createVNode(CIcon, {
95855
- class: "ml-1",
95856
- icon: "chevron-right",
95857
- size: "12"
95858
- })
95859
- ])
95860
- ])) : createCommentVNode("", true)
95861
- ])) : createCommentVNode("", true),
95862
- filteredCanvasFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_44$4, [
95863
- createElementVNode("div", _hoisted_45$4, [
96679
+ searchError.value || shouldShowNoResults.value ? (openBlock(), createElementBlock("div", _hoisted_70$1, [
95864
96680
  createVNode(CIcon, {
95865
- class: "mr-2",
95866
- color: "var(--p-text2)",
95867
- icon: "presentation",
95868
- size: "16"
95869
- }),
95870
- createElementVNode("span", _hoisted_46$4, toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.sections.pitchDecks")), 1),
95871
- createElementVNode("span", _hoisted_47$4, "(" + toDisplayString(filteredCanvasFiles.value.length) + ")", 1)
95872
- ]),
95873
- createElementVNode("div", null, [
95874
- (openBlock(true), createElementBlock(Fragment, null, renderList(filteredCanvasFiles.value.slice(0, 5), (item) => {
95875
- return openBlock(), createElementBlock("div", {
95876
- key: item.id,
95877
- class: normalizeClass([
95878
- "flex items-center px-0 cursor-pointer border-b border-gray-100 w-full",
95879
- _ctx.isAdmin ? "py-3" : "py-0",
95880
- isResultSelected(item) ? "bg-primary6" : "hover:bg-primary5"
95881
- ]),
95882
- "data-result-selected": isResultSelected(item),
95883
- onClick: ($event) => handleResultClick(item, "canvas")
95884
- }, [
95885
- createElementVNode("div", _hoisted_49$4, [
95886
- createVNode(CIcon, {
95887
- color: "var(--p-text2)",
95888
- icon: "presentation",
95889
- size: "32"
95890
- })
95891
- ]),
95892
- createElementVNode("div", _hoisted_50$4, [
95893
- createElementVNode("h3", _hoisted_51$3, toDisplayString(item.name), 1),
95894
- createElementVNode("p", _hoisted_52$3, toDisplayString(formatCanvasType(item.content_type)), 1)
95895
- ]),
95896
- createElementVNode("div", _hoisted_53$3, toDisplayString(item.folder?.name || ""), 1)
95897
- ], 10, _hoisted_48$4);
95898
- }), 128))
95899
- ]),
95900
- filteredCanvasFiles.value.length > 5 ? (openBlock(), createElementBlock("div", _hoisted_54$2, [
95901
- createElementVNode("span", {
95902
- class: "text-sm text-gray-600 hover:text-gray-800 font-bold flex items-center cursor-pointer",
95903
- onClick: _cache[14] || (_cache[14] = ($event) => searchType.value = "canvases")
95904
- }, [
95905
- createTextVNode(toDisplayString(unref(t)("canvasUI.CAlgoliaSearch.actions.viewAll")) + " ", 1),
95906
- createVNode(CIcon, {
95907
- class: "ml-1",
95908
- icon: "chevron-right",
95909
- size: "12"
95910
- })
95911
- ])
96681
+ class: "text-6xl",
96682
+ color: searchError.value ? "var(--p-error)" : "var(--p-text3)",
96683
+ "fa-type": "fal",
96684
+ icon: searchError.value ? "exclamation-triangle" : "radar"
96685
+ }, null, 8, ["color", "icon"]),
96686
+ createElementVNode("p", {
96687
+ class: normalizeClass(searchError.value ? "text-error font-semibold" : "text-text2")
96688
+ }, toDisplayString(searchError.value || unref(t)("canvasUI.CGlobalSearch.noResults")), 3)
95912
96689
  ])) : createCommentVNode("", true)
95913
- ])) : createCommentVNode("", true)
95914
- ]),
95915
- searchError.value || shouldShowNoResults.value ? (openBlock(), createElementBlock("div", _hoisted_55$2, [
95916
- createVNode(CIcon, {
95917
- class: "text-6xl",
95918
- color: searchError.value ? "var(--p-error)" : "var(--p-text3)",
95919
- "fa-type": "fal",
95920
- icon: searchError.value ? "exclamation-triangle" : "radar"
95921
- }, null, 8, ["color", "icon"]),
95922
- createElementVNode("p", {
95923
- class: normalizeClass(searchError.value ? "text-error font-semibold" : "text-text2")
95924
- }, toDisplayString(searchError.value || unref(t)("canvasUI.CGlobalSearch.noResults")), 3)
95925
- ])) : createCommentVNode("", true)
95926
- ])) : (openBlock(), createElementBlock("div", _hoisted_56$2, [
95927
- createElementVNode("div", _hoisted_57$2, [
95928
- createElementVNode("div", _hoisted_58$2, [
95929
- searchType.value === "content" ? (openBlock(), createBlock(CIcon, {
95930
- key: 0,
95931
- class: "mr-2",
95932
- color: "var(--p-text2)",
95933
- icon: "folder",
95934
- size: "16"
95935
- })) : (openBlock(), createBlock(CIcon, {
95936
- key: 1,
95937
- class: "mr-2",
95938
- color: "var(--p-text2)",
95939
- icon: "presentation",
95940
- size: "16"
95941
- })),
95942
- createElementVNode("span", _hoisted_59$2, toDisplayString(searchType.value === "content" ? unref(t)("canvasUI.CAlgoliaSearch.sections.content") : unref(t)("canvasUI.CAlgoliaSearch.sections.pitchDecks")), 1),
95943
- createElementVNode("span", _hoisted_60$2, " (" + toDisplayString(searchType.value === "content" ? filteredContentFiles.value.length : filteredCanvasFiles.value.length) + ") ", 1)
95944
- ]),
95945
- createElementVNode("div", null, [
95946
- (openBlock(true), createElementBlock(Fragment, null, renderList(searchType.value === "content" ? filteredContentFiles.value : filteredCanvasFiles.value, (item) => {
95947
- return openBlock(), createElementBlock("div", {
95948
- key: item.id,
95949
- class: normalizeClass([
95950
- "flex items-center px-0 cursor-pointer border-b border-gray-100 w-full",
95951
- _ctx.isAdmin ? "py-3" : "py-0",
95952
- isResultSelected(item) ? "bg-gray-100" : "hover:bg-gray-50"
95953
- ]),
95954
- "data-result-selected": isResultSelected(item),
95955
- onClick: ($event) => handleResultClick(
95956
- item,
95957
- searchType.value === "content" ? item.type === "folder" ? "folder" : "file" : "canvas"
95958
- )
95959
- }, [
95960
- searchType.value === "content" && item.type === "file" ? (openBlock(), createBlock(_sfc_main$6K, {
95961
- key: 0,
95962
- class: "w-18 h-14 border-rounded-1 overflow-hidden flex-shrink-0 mr-4",
95963
- cover: "",
95964
- "file-data": item,
95965
- "object-fit": "cover",
95966
- src: item.picture_url || "",
95967
- width: "72"
95968
- }, null, 8, ["file-data", "src"])) : (openBlock(), createElementBlock("div", _hoisted_62$2, [
95969
- searchType.value === "content" ? (openBlock(), createBlock(CIcon, {
95970
- key: 0,
95971
- color: "var(--p-text2)",
95972
- icon: "folder",
95973
- size: "32"
95974
- })) : (openBlock(), createBlock(CIcon, {
95975
- key: 1,
95976
- color: "var(--p-text2)",
95977
- icon: "presentation",
95978
- size: "32"
95979
- }))
95980
- ])),
95981
- createElementVNode("div", _hoisted_63$2, [
95982
- createElementVNode("h3", _hoisted_64$2, toDisplayString(item.name), 1),
95983
- searchType.value === "content" && item.type === "file" && getSnippet(item) ? (openBlock(), createElementBlock("p", {
95984
- key: 0,
95985
- class: "text-xs text-gray-600 mb-1",
95986
- innerHTML: getSnippet(item)
95987
- }, null, 8, _hoisted_65$2)) : createCommentVNode("", true),
95988
- createElementVNode("p", _hoisted_66$2, toDisplayString(searchType.value === "content" ? item.type === "folder" ? "Folder" : item.file_category || item.content_type || "File" : formatCanvasType(item.content_type)), 1)
95989
- ]),
95990
- createElementVNode("div", _hoisted_67$2, toDisplayString(searchType.value === "content" && item.type === "folder" ? item.parent_folder?.name || "" : item.folder?.name || ""), 1)
95991
- ], 10, _hoisted_61$2);
95992
- }), 128))
95993
- ]),
95994
- searchError.value || shouldShowNoResults.value ? (openBlock(), createElementBlock("div", _hoisted_68$2, [
95995
- createVNode(CIcon, {
95996
- class: "text-6xl",
95997
- color: searchError.value ? "var(--p-error)" : "var(--p-text3)",
95998
- "fa-type": "fal",
95999
- icon: searchError.value ? "exclamation-triangle" : "radar"
96000
- }, null, 8, ["color", "icon"]),
96001
- createElementVNode("p", {
96002
- class: normalizeClass(searchError.value ? "text-error font-semibold" : "text-text2")
96003
- }, toDisplayString(searchError.value || unref(t)("canvasUI.CGlobalSearch.noResults")), 3)
96004
- ])) : createCommentVNode("", true)
96690
+ ], 64))
96005
96691
  ])
96006
96692
  ]))
96007
96693
  ]),
96008
- !showRecentView.value ? (openBlock(), createElementBlock("div", _hoisted_69$1, [
96694
+ !showRecentView.value ? (openBlock(), createElementBlock("div", _hoisted_71$1, [
96009
96695
  createVNode(CShortcut, null, {
96010
96696
  default: withCtx(() => [
96011
96697
  createVNode(CShortcutIcon, { icon: "arrow-up" }),
@@ -96047,7 +96733,7 @@ const _sfc_main$5K = /* @__PURE__ */ defineComponent({
96047
96733
  }
96048
96734
  });
96049
96735
 
96050
- const CAlgoliaSearch = /* @__PURE__ */ _export_sfc(_sfc_main$5K, [["__scopeId", "data-v-338ca99c"]]);
96736
+ const CAlgoliaSearch = /* @__PURE__ */ _export_sfc(_sfc_main$5K, [["__scopeId", "data-v-052f4440"]]);
96051
96737
 
96052
96738
  const BulletListExtended = BulletList.extend({
96053
96739
  addOptions() {
@@ -110348,6 +111034,7 @@ function useCanvasStandardFilters(options = {}) {
110348
111034
  includeTagsFilter = true,
110349
111035
  includeDraftFilter = true,
110350
111036
  includeTemplateFilter = false,
111037
+ templateOptions,
110351
111038
  includeOwnerFilter = false,
110352
111039
  ownerLabel
110353
111040
  } = options;
@@ -110376,9 +111063,10 @@ function useCanvasStandardFilters(options = {}) {
110376
111063
  }
110377
111064
  if (includeTemplateFilter) {
110378
111065
  components.push({
110379
- type: MetadataTemplateFieldTypeEnum.TEXT,
110380
- name: "template__name__icontains",
110381
- label: t("canvasUI.composables.useCanvasStandardFilters.templateUsed")
111066
+ type: MetadataTemplateFieldTypeEnum.SELECT,
111067
+ name: "template__id",
111068
+ label: t("canvasUI.composables.useCanvasStandardFilters.templateUsed"),
111069
+ options: templateOptions?.value ?? []
110382
111070
  });
110383
111071
  }
110384
111072
  return components;
@@ -117598,6 +118286,7 @@ const _sfc_main$4q = /*@__PURE__*/defineComponent({
117598
118286
  const fetchedData = ref([]);
117599
118287
  const isLoading = ref(false);
117600
118288
  const accessibleTemplateIds = ref(new Set());
118289
+ const availableTemplates = ref([]);
117601
118290
  const isCheckingTemplateAccess = ref(false);
117602
118291
  const isBulkDeleting = ref(false);
117603
118292
  const isBulkUpdating = ref(false);
@@ -117673,11 +118362,32 @@ const _sfc_main$4q = /*@__PURE__*/defineComponent({
117673
118362
  return systemTags.includes(lowerTag);
117674
118363
  }) ?? false;
117675
118364
  }
118365
+ const templateOptions = computed(() => availableTemplates.value.map(t => ({
118366
+ label: t.name,
118367
+ value: t.id
118368
+ })).sort((a, b) => a.label.localeCompare(b.label)));
118369
+ async function fetchTemplates() {
118370
+ try {
118371
+ const {
118372
+ results
118373
+ } = await props.fetcher({
118374
+ is_template: true,
118375
+ is_section: false,
118376
+ page: 1,
118377
+ page_size: 1000,
118378
+ fields: 'id,name'
118379
+ });
118380
+ availableTemplates.value = results;
118381
+ } catch (e) {
118382
+ console.error('Failed to fetch templates for filter:', e);
118383
+ }
118384
+ }
117676
118385
  const {
117677
118386
  filterComponents: dataFilterComponents
117678
118387
  } = useCanvasStandardFilters({
117679
118388
  includeTemplateFilter: true,
117680
- includeOwnerFilter: props.isAnyTypeOfAdmin ?? false
118389
+ includeOwnerFilter: props.isAnyTypeOfAdmin ?? false,
118390
+ templateOptions
117681
118391
  });
117682
118392
  const {
117683
118393
  height: canvasManagementToolbarHeight
@@ -118433,6 +119143,7 @@ const _sfc_main$4q = /*@__PURE__*/defineComponent({
118433
119143
  onMounted(async () => {
118434
119144
  try {
118435
119145
  isLoading.value = true;
119146
+ fetchTemplates();
118436
119147
  await fetch(fetchingParams.value);
118437
119148
  } catch (e) {
118438
119149
  console.error(e);
@@ -118607,6 +119318,9 @@ const _sfc_main$4o = /*@__PURE__*/defineComponent({
118607
119318
  fetcher: {
118608
119319
  type: Function
118609
119320
  },
119321
+ templatesFetcher: {
119322
+ type: Function
119323
+ },
118610
119324
  byIdFetcher: {
118611
119325
  type: Function
118612
119326
  },
@@ -118652,21 +119366,43 @@ const _sfc_main$4o = /*@__PURE__*/defineComponent({
118652
119366
  const tableRef = ref(null);
118653
119367
  const toolbarWrapper = ref(null);
118654
119368
  const launchDarkly = inject('launchDarkly', computed(() => ({})));
119369
+ const isLoading = ref(false);
119370
+ const fetchedData = ref([]);
119371
+ const totalCount = ref(0);
119372
+ const availableTemplates = ref([]);
119373
+ const templateOptions = computed(() => availableTemplates.value.map(t => ({
119374
+ label: t.name,
119375
+ value: t.id
119376
+ })).sort((a, b) => a.label.localeCompare(b.label)));
119377
+ async function fetchTemplates() {
119378
+ if (!props.templatesFetcher) return;
119379
+ try {
119380
+ const {
119381
+ results
119382
+ } = await props.templatesFetcher({
119383
+ is_template: true,
119384
+ is_section: false,
119385
+ page: 1,
119386
+ page_size: 1000,
119387
+ fields: 'id,name'
119388
+ });
119389
+ availableTemplates.value = results;
119390
+ } catch (e) {
119391
+ console.error('Failed to fetch templates for filter:', e);
119392
+ }
119393
+ }
118655
119394
  const {
118656
119395
  filterComponents: dataFilterComponents
118657
119396
  } = useCanvasStandardFilters({
118658
119397
  includeTemplateFilter: true,
118659
119398
  includeOwnerFilter: true,
118660
- // Include owner filter for assigned canvases
118661
119399
  includeTagsFilter: true,
118662
- includeDraftFilter: true
119400
+ includeDraftFilter: true,
119401
+ templateOptions
118663
119402
  });
118664
119403
  const {
118665
119404
  height: canvasManagementToolbarHeight
118666
119405
  } = useElementSize(toolbarWrapper);
118667
- const isLoading = ref(false);
118668
- const fetchedData = ref([]);
118669
- const totalCount = ref(0);
118670
119406
  const {
118671
119407
  search,
118672
119408
  pageSize,
@@ -118913,6 +119649,7 @@ const _sfc_main$4o = /*@__PURE__*/defineComponent({
118913
119649
  onMounted(async () => {
118914
119650
  try {
118915
119651
  isLoading.value = true;
119652
+ fetchTemplates();
118916
119653
  await fetch(fetchingParams.value);
118917
119654
  } catch (e) {
118918
119655
  console.error(e);
@@ -118966,7 +119703,7 @@ const _sfc_main$4o = /*@__PURE__*/defineComponent({
118966
119703
  }
118967
119704
  });
118968
119705
 
118969
- const CAssignedCanvasesManagement = /* @__PURE__ */ _export_sfc(_sfc_main$4o, [["__scopeId", "data-v-f6151990"]]);
119706
+ const CAssignedCanvasesManagement = /* @__PURE__ */ _export_sfc(_sfc_main$4o, [["__scopeId", "data-v-df004301"]]);
118970
119707
 
118971
119708
  const _hoisted_1$3v = { class: "w-fit flex items-center justify-center text-truncate rd uppercase c-table-select" };
118972
119709
  const __default__ = {
@@ -130912,24 +131649,21 @@ const displayIntegerWithMunit = (number, decimals = 2) => {
130912
131649
  return `${b.toFixed(decimals)}B`;
130913
131650
  };
130914
131651
  const convertSecondsToMinutes = (number) => {
130915
- if (number <= 0) return "0 sec";
130916
- if (number < 1) return "<1 sec";
130917
131652
  const units = [
130918
- [60 * 60 * 24, "day"],
130919
- [60 * 60, "h"],
131653
+ [1, "sec"],
130920
131654
  [60, "min"],
130921
- [1, "sec"]
131655
+ [60 * 60, "h"],
131656
+ [60 * 60 * 24, "day"]
130922
131657
  ];
130923
- const parts = [];
130924
- let remaining = number;
130925
- for (const [divisor, label] of units) {
130926
- if (remaining >= divisor) {
130927
- const val = Math.floor(remaining / divisor);
130928
- parts.push(`${val} ${label}`);
130929
- remaining = remaining % divisor;
131658
+ let bestUnit = units[0];
131659
+ for (const unit of units) {
131660
+ if (number >= unit[0]) {
131661
+ bestUnit = unit;
130930
131662
  }
130931
131663
  }
130932
- return parts.slice(0, 2).join(" ");
131664
+ const [divisor, label] = bestUnit;
131665
+ const val = Math.floor(number / Number(divisor));
131666
+ return `${val} ${label}`;
130933
131667
  };
130934
131668
  const getNumberWithRegex = (string) => {
130935
131669
  return string?.replace(/\D+/g, "");
@@ -141742,7 +142476,10 @@ const _hoisted_94 = { class: "flex flex-col gap-2" };
141742
142476
  const _hoisted_95 = { class: "flex items-center gap-2" };
141743
142477
  const _hoisted_96 = { class: "text-sm" };
141744
142478
  const _hoisted_97 = { class: "text-sm" };
141745
- const _hoisted_98 = { class: "flex items-center gap-2" };
142479
+ const _hoisted_98 = {
142480
+ key: 0,
142481
+ class: "flex items-center gap-2"
142482
+ };
141746
142483
  const _hoisted_99 = { class: "text-sm" };
141747
142484
  const _hoisted_100 = { class: "mb-4" };
141748
142485
  const _hoisted_101 = { class: "block mb-2" };
@@ -141768,7 +142505,9 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
141768
142505
  const props = __props;
141769
142506
  const { t } = useI18n();
141770
142507
  const themeVars = useThemeVars();
141771
- const { setComponentEditMode, updateNodeDataById } = useCanvas$1();
142508
+ const { mode, setComponentEditMode, updateNodeDataById } = useCanvas$1();
142509
+ const isAdminMode = computed(() => mode.value === CanvasBuilderMode.ADMIN);
142510
+ const confirmation = useConfirmation();
141772
142511
  const { crmShape } = useCrmShape();
141773
142512
  const { palette } = useCanvasTheme$1();
141774
142513
  let seriesIdCounter = 0;
@@ -141856,7 +142595,9 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
141856
142595
  });
141857
142596
  const chartType = computed(() => seriesList.value[0]?.chartType ?? "bar");
141858
142597
  const primaryChartType = computed(() => seriesList.value[0]?.chartType ?? "bar");
141859
- const backgroundColor = props.data?.data?.datasets?.[0]?.background_color;
142598
+ const savedColorScheme = props.data?.color_scheme;
142599
+ const datasets = props.data?.data?.datasets;
142600
+ const backgroundColor = savedColorScheme ?? (datasets && datasets.length > 1 ? datasets.map((ds) => ds.background_color).filter(Boolean) : datasets?.[0]?.background_color);
141860
142601
  const colorSchemeType = ref(props.data?.color_scheme_type ?? "theme");
141861
142602
  const chartColors = ref([]);
141862
142603
  const displayColors = computed(() => {
@@ -141891,7 +142632,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
141891
142632
  const percentDisplay = ref(props.data?.percent_display ?? false);
141892
142633
  const enableFullscreenBtn = ref(props.data?.view_controls?.enable_fullscreen_btn ?? false);
141893
142634
  const enableChartTypeSwitcher = ref(props.data?.view_controls?.enable_chart_type_switcher ?? false);
141894
- const enableDataEntry = ref(props.data?.view_controls?.enable_data_entry ?? false);
142635
+ const enableDataEntry = ref(props.data?.view_controls?.enable_data_entry !== false);
141895
142636
  const chartHeight = ref(props.data?.chart_height ?? 800);
141896
142637
  const chartWidth = ref(props.data?.chart_width ?? 100);
141897
142638
  const legendPositionOptions = [
@@ -142408,7 +143149,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142408
143149
  return chartColors.value;
142409
143150
  }
142410
143151
  function createChartConfig() {
142411
- const datasets = [];
143152
+ const datasets2 = [];
142412
143153
  let allLabels = [];
142413
143154
  const colorsForStorage = getSeriesColors(true);
142414
143155
  const isSingleSeries = seriesList.value.length === 1;
@@ -142453,7 +143194,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142453
143194
  if (processedData.labels.length > allLabels.length) {
142454
143195
  allLabels = processedData.labels;
142455
143196
  }
142456
- datasets.push(datasetOptions);
143197
+ datasets2.push(datasetOptions);
142457
143198
  });
142458
143199
  const primaryType = seriesList.value[0].chartType;
142459
143200
  let actualPrimaryType = primaryType;
@@ -142492,6 +143233,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142492
143233
  const config = {
142493
143234
  type: actualPrimaryType,
142494
143235
  color_scheme_type: colorSchemeType.value,
143236
+ color_scheme: colorsForStorage,
142495
143237
  percent_display: percentDisplay.value,
142496
143238
  chart_height: chartHeight.value,
142497
143239
  chart_width: chartWidth.value,
@@ -142502,7 +143244,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142502
143244
  },
142503
143245
  data: {
142504
143246
  labels: allLabels,
142505
- datasets
143247
+ datasets: datasets2
142506
143248
  },
142507
143249
  options: {
142508
143250
  responsive: true,
@@ -142550,6 +143292,22 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142550
143292
  return config;
142551
143293
  }
142552
143294
  function onCancel() {
143295
+ if (isDirty.value) {
143296
+ confirmation.warning({
143297
+ title: t("canvasUI.canvasBuilder.confirmationOnUnsavedChanges.title"),
143298
+ content: t("canvasUI.canvasBuilder.confirmationOnUnsavedChanges.content"),
143299
+ confirmText: t("canvasUI.canvasBuilder.confirmationOnUnsavedChanges.confirm"),
143300
+ exitText: t("canvasUI.canvasBuilder.confirmationOnUnsavedChanges.exit"),
143301
+ hasExit: true,
143302
+ onConfirm: () => {
143303
+ onSave();
143304
+ },
143305
+ onExit: () => {
143306
+ setComponentEditMode(false);
143307
+ }
143308
+ });
143309
+ return;
143310
+ }
142553
143311
  setComponentEditMode(false);
142554
143312
  }
142555
143313
  function onSave() {
@@ -142558,6 +143316,10 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142558
143316
  setComponentEditMode(false);
142559
143317
  }
142560
143318
  const previewData = ref({});
143319
+ const isDirty = ref(false);
143320
+ function markDirty() {
143321
+ isDirty.value = true;
143322
+ }
142561
143323
  function updatePreview() {
142562
143324
  const config = createChartConfig();
142563
143325
  previewData.value = {
@@ -142579,6 +143341,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142579
143341
  enableChartTypeSwitcher.value = false;
142580
143342
  }
142581
143343
  });
143344
+ let isInitialized = false;
142582
143345
  watch(
142583
143346
  [
142584
143347
  seriesList,
@@ -142600,17 +143363,23 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142600
143363
  ],
142601
143364
  () => {
142602
143365
  updatePreview();
143366
+ if (isInitialized) {
143367
+ markDirty();
143368
+ }
142603
143369
  },
142604
143370
  { deep: true }
142605
143371
  );
142606
143372
  onMounted(() => {
142607
143373
  updatePreview();
143374
+ nextTick(() => {
143375
+ isInitialized = true;
143376
+ });
142608
143377
  });
142609
143378
  return (_ctx, _cache) => {
142610
143379
  return openBlock(), createBlock(unref(NModal), {
142611
143380
  bordered: false,
142612
143381
  class: "cb-data-charts-settings",
142613
- onEsc: () => unref(setComponentEditMode)(false),
143382
+ onEsc: onCancel,
142614
143383
  preset: "card",
142615
143384
  show: true,
142616
143385
  size: "huge",
@@ -142622,7 +143391,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
142622
143391
  "--n-padding-left": "16px"
142623
143392
  }]),
142624
143393
  title: unref(t)("canvasUI.canvasBuilder.dataCharts.editDataChartsComponent"),
142625
- onClose: _cache[16] || (_cache[16] = ($event) => unref(setComponentEditMode)(false))
143394
+ onClose: onCancel
142626
143395
  }, {
142627
143396
  footer: withCtx(() => [
142628
143397
  createElementVNode("div", _hoisted_110, [
@@ -143262,13 +144031,13 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
143262
144031
  ]),
143263
144032
  _: 1
143264
144033
  }, 8, ["disabled"]),
143265
- createElementVNode("div", _hoisted_98, [
144034
+ isAdminMode.value ? (openBlock(), createElementBlock("div", _hoisted_98, [
143266
144035
  createVNode(unref(NSwitch), {
143267
144036
  value: enableDataEntry.value,
143268
144037
  "onUpdate:value": _cache[13] || (_cache[13] = ($event) => enableDataEntry.value = $event)
143269
144038
  }, null, 8, ["value"]),
143270
144039
  createElementVNode("span", _hoisted_99, toDisplayString(unref(t)("canvasUI.canvasBuilder.dataCharts.enableDataEntry")), 1)
143271
- ])
144040
+ ])) : createCommentVNode("", true)
143272
144041
  ])
143273
144042
  ]),
143274
144043
  createElementVNode("div", _hoisted_100, [
@@ -143284,7 +144053,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
143284
144053
  min: 100,
143285
144054
  step: 10
143286
144055
  }, {
143287
- suffix: withCtx(() => _cache[17] || (_cache[17] = [
144056
+ suffix: withCtx(() => _cache[16] || (_cache[16] = [
143288
144057
  createTextVNode("px")
143289
144058
  ])),
143290
144059
  _: 1
@@ -143300,7 +144069,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
143300
144069
  min: 10,
143301
144070
  step: 5
143302
144071
  }, {
143303
- suffix: withCtx(() => _cache[18] || (_cache[18] = [
144072
+ suffix: withCtx(() => _cache[17] || (_cache[17] = [
143304
144073
  createTextVNode("%")
143305
144074
  ])),
143306
144075
  _: 1
@@ -143335,7 +144104,7 @@ const _sfc_main$2E = /* @__PURE__ */ defineComponent({
143335
144104
  }, 8, ["style"])
143336
144105
  ]),
143337
144106
  _: 1
143338
- }, 8, ["onEsc", "title"]);
144107
+ }, 8, ["title"]);
143339
144108
  };
143340
144109
  }
143341
144110
  });
@@ -143383,7 +144152,7 @@ const _sfc_main$2D = /* @__PURE__ */ defineComponent({
143383
144152
  if (mode.value === CanvasBuilderMode.ADMIN) {
143384
144153
  return true;
143385
144154
  }
143386
- return props.data?.view_controls?.enable_data_entry ?? false;
144155
+ return props.data?.view_controls?.enable_data_entry !== false;
143387
144156
  });
143388
144157
  onMounted(() => {
143389
144158
  if (justAddedComponentId.value === props.id) {
@@ -180947,6 +181716,33 @@ function useTheme() {
180947
181716
  };
180948
181717
  }
180949
181718
 
181719
+ function useSmartStore(env) {
181720
+ const shouldUseSmartStore = computed(() => {
181721
+ try {
181722
+ const envValue = unref(env);
181723
+ if (!envValue) {
181724
+ return false;
181725
+ }
181726
+ const isIos = envValue?.mode === "IOS";
181727
+ const isSfdcSyncEnabled = envValue?.pitcher?.instance?.settings?.enable_sfdc_sync === true;
181728
+ return isIos && isSfdcSyncEnabled;
181729
+ } catch (error) {
181730
+ console.error("[useSmartStore] Error checking SmartStore availability:", error);
181731
+ return false;
181732
+ }
181733
+ });
181734
+ const generateTempSalesforceId = (objectPrefix) => {
181735
+ const timestamp = Date.now().toString(36);
181736
+ const randomStr = Math.random().toString(36).substring(2, 11);
181737
+ const uniqueId = (timestamp + randomStr).substring(0, 14 - objectPrefix.length);
181738
+ return "PIT_" + objectPrefix + uniqueId.padEnd(14 - objectPrefix.length, "0");
181739
+ };
181740
+ return {
181741
+ shouldUseSmartStore,
181742
+ generateTempSalesforceId
181743
+ };
181744
+ }
181745
+
180950
181746
  const initialCanvas = ref(void 0);
180951
181747
  const useCanvasOverlay = () => {
180952
181748
  const openCanvasOverlay = ({ id, fullscreen, edit_mode, component_id, section_id, position }) => {
@@ -182676,11 +183472,103 @@ const useCanvasById = (id) => {
182676
183472
  });
182677
183473
  };
182678
183474
 
182679
- function getEventColor(pEvent, sfEvent) {
183475
+ function extractFieldNamesFromCondition(condition2) {
183476
+ if (!condition2) return [];
183477
+ const stringLiteralPattern2 = /(["'])(?:(?=(\\?))\2.)*?\1/g;
183478
+ const conditionWithoutStrings2 = condition2.replace(stringLiteralPattern2, "");
183479
+ const fieldPattern2 = /\b([A-Za-z][A-Za-z0-9_]*(?:\.[A-Za-z][A-Za-z0-9_]*)?(?:__[cr])?)\b/g;
183480
+ const matches = conditionWithoutStrings2.match(fieldPattern2) || [];
183481
+ const soqlKeywords2 = /* @__PURE__ */ new Set([
183482
+ "AND",
183483
+ "OR",
183484
+ "NOT",
183485
+ "IN",
183486
+ "LIKE",
183487
+ "NULL",
183488
+ "TRUE",
183489
+ "FALSE",
183490
+ "true",
183491
+ "false",
183492
+ "null",
183493
+ "and",
183494
+ "or",
183495
+ "not",
183496
+ "in",
183497
+ "like"
183498
+ ]);
183499
+ return [...new Set(matches.filter((field) => !soqlKeywords2.has(field)))];
183500
+ }
183501
+ function evaluateIsExecutedCondition(condition, event) {
183502
+ if (!condition) return false;
183503
+ try {
183504
+ let jsCondition = condition.replace(/<>/g, "!==").replace(/!=/g, "!==").replace(/([^!<>=])\s*=\s*([^=])/g, "$1 === $2").replace(/\bNULL\b/gi, "null").replace(/\bTRUE\b/gi, "true").replace(/\bFALSE\b/gi, "false").replace(/\bAND\b/gi, "&&").replace(/\bOR\b/gi, "||").replace(/\bNOT\b/gi, "!");
183505
+ const fieldNames = extractFieldNamesFromCondition(condition);
183506
+ fieldNames.forEach((fieldName) => {
183507
+ const fieldValue = event[fieldName];
183508
+ const jsValue = fieldValue === null || fieldValue === void 0 ? "null" : JSON.stringify(fieldValue);
183509
+ const fieldRegex = new RegExp(`\\b${fieldName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "g");
183510
+ jsCondition = jsCondition.replace(fieldRegex, jsValue);
183511
+ });
183512
+ jsCondition = jsCondition.replace(
183513
+ /(["'])((?:[^"\\]|\\.)*)\1\s*(===|!==)\s*(["'])((?:[^"\\]|\\.)*)\4/g,
183514
+ (match, leftQuote, leftValue, operator, rightQuote, rightValue) => {
183515
+ return `"${leftValue}".toLowerCase() ${operator} "${rightValue}".toLowerCase()`;
183516
+ }
183517
+ );
183518
+ return eval(jsCondition) === true;
183519
+ } catch (error) {
183520
+ console.error("Error evaluating is_executed_condition:", error, { condition, event });
183521
+ return false;
183522
+ }
183523
+ }
183524
+ function evaluateIsExecutedForPascalCaseEvent(condition, event) {
183525
+ if (!condition) return false;
183526
+ try {
183527
+ let jsCondition = condition.replace(/<>/g, "!==").replace(/!=/g, "!==").replace(/([^!<>=])\s*=\s*([^=])/g, "$1 === $2").replace(/\bNULL\b/gi, "null").replace(/\bTRUE\b/gi, "true").replace(/\bFALSE\b/gi, "false").replace(/\bAND\b/gi, "&&").replace(/\bOR\b/gi, "||").replace(/\bNOT\b/gi, "!");
183528
+ const fieldPattern = /\b([A-Za-z][A-Za-z0-9_]*(?:\.[A-Za-z][A-Za-z0-9_]*)?(?:__[cr])?)\b/g;
183529
+ const stringLiteralPattern = /(["'])(?:(?=(\\?))\2.)*?\1/g;
183530
+ const conditionWithoutStrings = condition.replace(stringLiteralPattern, "");
183531
+ const fieldMatches = conditionWithoutStrings.match(fieldPattern) || [];
183532
+ const soqlKeywords = /* @__PURE__ */ new Set(["and", "or", "not", "null", "true", "false", "in", "like"]);
183533
+ const fieldNames = [...new Set(fieldMatches.filter((field) => !soqlKeywords.has(field.toLowerCase())))];
183534
+ fieldNames.forEach((fieldName) => {
183535
+ const pascalCaseFieldName = titleCase(fieldName).replace(/ /g, "");
183536
+ let fieldValue = event[pascalCaseFieldName];
183537
+ if (fieldValue === void 0) {
183538
+ fieldValue = event[fieldName];
183539
+ }
183540
+ if (fieldValue === void 0) {
183541
+ fieldValue = event[fieldName.toLowerCase()];
183542
+ }
183543
+ const jsValue = fieldValue === null || fieldValue === void 0 ? "null" : JSON.stringify(fieldValue);
183544
+ const fieldRegex = new RegExp(`\\b${fieldName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "g");
183545
+ jsCondition = jsCondition.replace(fieldRegex, jsValue);
183546
+ });
183547
+ jsCondition = jsCondition.replace(
183548
+ /(["'])((?:[^"\\]|\\.)*)\1\s*(===|!==)\s*(["'])((?:[^"\\]|\\.)*)\4/g,
183549
+ (match, leftQuote, leftValue, operator, rightQuote, rightValue) => {
183550
+ return `"${leftValue}".toLowerCase() ${operator} "${rightValue}".toLowerCase()`;
183551
+ }
183552
+ );
183553
+ return eval(jsCondition) === true;
183554
+ } catch (error) {
183555
+ console.error("Error evaluating is_executed_condition:", error, {
183556
+ condition,
183557
+ event
183558
+ });
183559
+ return false;
183560
+ }
183561
+ }
183562
+ function getEventColor(sfEvent) {
182680
183563
  if (!sfEvent.WhatCount && !sfEvent.WhoCount) return SfEventColors.TIME_OFF_TERRITORY;
182681
- else if (pEvent?.status === EventStatusEnum.EXECUTED) return SfEventColors.SUBMITTED;
183564
+ let isSubmitted = false;
183565
+ if (sfEvent.is_executed_condition) {
183566
+ isSubmitted = evaluateIsExecutedCondition(sfEvent.is_executed_condition, sfEvent);
183567
+ } else {
183568
+ isSubmitted = false;
183569
+ }
183570
+ if (isSubmitted) return SfEventColors.SUBMITTED;
182682
183571
  else if (isAfter$1(/* @__PURE__ */ new Date(), new Date(sfEvent.EndDateTime))) return SfEventColors.PAST;
182683
- else if (!pEvent) return SfEventColors.PLANNED_NO_PITCHER_EVENT;
182684
183572
  else return SfEventColors.PLANNED;
182685
183573
  }
182686
183574
  const minFutureDate = (date = /* @__PURE__ */ new Date()) => add(date, { minutes: MIN_DIFFERENCE_IN_MINUTES });
@@ -183208,5 +184096,5 @@ const localeNames = {
183208
184096
  };
183209
184097
  const localeDropdownOptions = supportedLocales.map((locale) => ({ key: locale, name: localeNames[locale] }));
183210
184098
 
183211
- export { ADMIN_API_METHOD_TYPES, ADMIN_API_TYPES, ADMIN_MESSAGE, ADMIN_MESSAGE_TYPES, APPS_DB, AccessTypeEnum, App$3 as AgendaSelectorApp, AppTypeEnum, _sfc_main as AssetsManagerApp, App$1 as Browser, BulkUpdateMetadataOperationEnum, BulkUpdateTagsOperationEnum, CALL_STORAGE_KEY, CANVASES, CANVAS_HOOKS, CANVAS_TYPOGRAPHY_CSS_PROPERTIES, CANVAS_TYPOGRAPHY_PRESETS, CAlgoliaSearch, CAssignedCanvasesManagement, _sfc_main$4p as CAssignedCanvasesManagementToolbar, _sfc_main$6s as CAvatar, _sfc_main$4O as CBlockManagement, CButton, _sfc_main$5f as CCanvasDeleteDialogContent, _sfc_main$5g as CCanvasMetadataFilters, CCanvasSelector, _sfc_main$6V as CCard, CCarousel, _sfc_main$3G as CCatalogIqSwitcher, _sfc_main$6U as CCheckbox, _sfc_main$3A as CChip, CCollapse, _sfc_main$6R as CCollapseItem, _sfc_main$6r as CCollapseTransition, NColorPicker as CColorPicker, CComponentListItem, CConfigEditor, NConfigProvider as CConfigProvider, _sfc_main$6h as CConfirmationAction, CConfirmationContent, CConfirmationHeader, CConfirmationModal, CContactSelector, CContactSelectorSelected, _sfc_main$68 as CContentError, _sfc_main$65 as CCreateCanvasModal, _sfc_main$64 as CCreateTemplateSectionBlockModal, _sfc_main$5V as CCreateThemeModal, CDP_EVENT_TYPE, CDataTable, NDatePicker as CDatePicker, CDateRangeFilter, CDetailPageSectionButtons, NDialogProvider as CDialogProvider, _sfc_main$6P as CDivider, _sfc_main$6O as CDrawer, _sfc_main$6N as CDrawerContent, _sfc_main$6M as CDropdown, _sfc_main$6p as CEmpty, _sfc_main$4m as CEntitySelector, _sfc_main$6L as CErrorFullScreen, _sfc_main$6n as CFeedback, _sfc_main$3o as CFileAccessManagement, _sfc_main$6C as CFileAttributes, _sfc_main$3p as CFilePanel, _sfc_main$6I as CFileThumbnail, CFileViewer, CFilesAccessInfo, _sfc_main$3$ as CFilesAccessManage, _sfc_main$3I as CFilesFolderDeleteDialogContent, NForm as CForm, NFormItem as CFormItem, NFormItemCol as CFormItemCol, NFormItemGridItem as CFormItemGi, NFormItemGridItem as CFormItemGridItem, FormItemRow as CFormItemRow, _sfc_main$4h as CFullScreenLoader, NGridItem as CGi, CGlobalLoader, _sfc_main$5O as CGlobalSearch, GlobalStyle as CGlobalStyle, NGrid as CGrid, NGridItem as CGridItem, CGroupsAccessInfo, NH1 as CH1, NH2 as CH2, NH3 as CH3, NH4 as CH4, NH5 as CH5, NH6 as CH6, _sfc_main$6m as CHelpText, CIcon, _sfc_main$6K as CImage, _sfc_main$4W as CInfoBadge, _sfc_main$6B as CInput, NInputNumber as CInputNumber, _sfc_main$3y as CKnockNotificationsAppWrapper, CLIENT_TYPE, NLayout as CLayout, NLayoutContent as CLayoutContent, LayoutFooter as CLayoutFooter, LayoutHeader as CLayoutHeader, LayoutSider as CLayoutSider, _sfc_main$4X as CList, NMessageProvider as CMessageProvider, _sfc_main$5L as CMetaDataBadge, _sfc_main$6A as CModal, CMonacoEditor, CMovableWidget, CMultiSelect, NNotificationProvider as CNotificationProvider, NPagination as CPagination, _sfc_main$6l as CPillSelect, _sfc_main$6z as CPopover, _sfc_main$6J as CProcessingOverlay, NProgress as CProgress, _sfc_main$5s as CRichTextEditor, _sfc_main$4q as CSavedCanvasesManagement, CSearch, _sfc_main$6x as CSearchOnClick, CSearchOnClickWithSuggestions, CSecondaryNav, _sfc_main$4R as CSectionManagement, CSelect, CSelectFilter, _sfc_main$3x as CSettingsEditor, CShortcut, CSingleSelect, NSkeleton as CSkeleton, _sfc_main$3C as CSlideViewer, NSpace as CSpace, _sfc_main$6q as CSpin, _sfc_main$6o as CSwitch, CTable, _sfc_main$5c as CTableInput, CTableMore, CTableSelect, CTableTag, _sfc_main$6F as CTag, CTags, CTemplateAccessInfo, _sfc_main$3_ as CTemplateAccessManage, _sfc_main$4G as CTemplateManagement, text as CText, _sfc_main$6v as CThemeEditor, _sfc_main$4B as CThemeManagement, _sfc_main$5l as CToastProvider, CToolbar, _sfc_main$6t as CTooltip, CUpsertFolderModal, _sfc_main$5p as CUserAvatar, CUserMenu, CUsersAccessInfo, CUsersGroupsAccessManage, _sfc_main$5m as CVirtualTable, _sfc_main$48 as CWarningAlert, CallState, CanvasActions, _sfc_main$15 as CanvasBuilderApp, CanvasBuilderMode, CanvasExcludedComponentTypesEnum, CanvasHistoryAction, App as CanvasSelector, CanvasStatus, CanvasThemeStatus, CanvasesViewsTypes, CollaborationRoleEnum, CollectionPlayerApp, App$4 as CollectionSelectorApp, ComponentIcon, ComponentTypes, ContactSelectorQuickFilterType, ContentGridLayoutTypes, ContentSelector, CoreFolderEntityType, DATE_TIME_FORMAT, DEFAULT_ADMIN_TABLE_HEIGHT, DEFAULT_ADMIN_TABLE_WITH_PAGINATION_HEIGHT, DEFAULT_GLOBAL_COMPONENT_SPACING, DEFAULT_GLOBAL_COMPONENT_SPACING_INTERVAL, DEFAULT_ITEMS_PER_PAGE, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PEER_CONNECTIVITY_VERSION, DEFAULT_PITCHER_SETTINGS, DSR_API_METHOD_TYPES, DSR_API_TYPES, DSR_MESSAGE, DSR_MESSAGE_TYPES, DSR_TYPE, DefaultExpiresAtEnum, DownloadTypeEnum, EMBED_TYPE, EventAction, EventExternalObjectContentTypeEnum, EventStatusEnum, FileContentTypeEnum, FileStatusEnum, FileTypeEnum, GlobalSearchResultType, GridLayoutTypes, HIDE_IF_EMPTY_COMPONENT_ID_TAG_PREFIX, HIDE_IF_EMPTY_COMPONENT_TRACKING_ID_TAG_PREFIX, HIDE_TAGS_WITH_PREFIX, HtmlLayoutTypes, IFRAME_ACTION_TYPES, IFRAME_DATA_MESSAGE, INITIAL_CALL_STATE, IS_DEV_ORG, IS_LOCALHOST, InstanceMembershipRoleEnum, InstanceMembershipUserStatusEnum, InvitationStatusEnum, LanguageEnum, LinkAlignmentTypes, LinkAnchorTypes, LinkPreviewTypes, MAX_LUMINANCE_FOR_LIGHT_TEXT, MAX_UPLOAD_SIZE, MIN_DIFFERENCE_IN_MINUTES, MetadataTemplateFieldTypeEnum, MultimediaHorizontalAlignmentOptions, NON_MEMBER_ROLES, NotesApp, OperatorEnum, PAPER_SIZE_PRESETS, PEER_CONNECTIVITY_EVENT, PEER_CONNECTIVITY_HANDLER_MATCH_ALL, PITCHER_EVENT, PITCHER_SETTINGS_KEY, PLATFORM_TYPE, PRINT_SCALE_FACTOR, PeerConnectivityActions, PitcherBroadcastedEventName, PitcherEventName, PitcherExternalEventName, PitcherMessageType, PitcherResponseStatus, PostAction, App$2 as PptConversionSelectorApp, REQUEST_DEFAULT_CANCEL_TIMEOUT, SEARCH_DEBOUNCE_TIME, SUPPORTED_FONT_EXTENSIONS, SUPPORTED_FONT_TYPES, SUPPORTED_IMAGE_EXTENSIONS, SUPPORTED_IMAGE_TYPES, SUPPORTED_UPLOAD_FILE_EXTENSIONS, SUPPORTED_VIDEO_EXTENSIONS, SUPPORTED_VIDEO_TYPES, SfEventColors, SfEventColorsLight, StorageRegionEnum, TRACKING_EVENTS_STORAGE_KEY, UI_API_METHOD_TYPES, UI_MESSAGE, UI_MESSAGE_TYPES, UI_NATIVE_MESSAGE_TYPES, UserRoleEnum, ViewCompactItemType, addCanvasComponent, _export as agendaSelector, appRequiresCrm, applyCanvasThemeAssetsToNode, applyFont, applyToTreeBy, autofocus as autofocusDirective, camelCaseKeys, canvasUiUnoPreset, clearLocalStorageIfNeeded, ClickOutsideDirective as clickOutsideDirective, collectAllNodesByCondition, _export$3 as collectionPlayer, _export$2 as collectionSelector, componentIconType, computeLocalStorageBytes, convertSecondsToMinutes, convertToPixels, convertToSosl, createNodeId, createPitcherSettings, dayjs, deepDiff, deepToRaw, derivePatchRequestFields, determineUserRole, discardSectionComponentOverride, displayBytesWithMUnit, displayIntegerWithMunit, doesLocalOverrideExist, doesNotHaveAnyModuleOrHookSpecified, downloadFile, draggable as draggableDirective, elementMounted as elementMountedDirective, escapeSoqlString, evaluateAccessor, executeWithDoublingTime, exitFullscreen, fallbackLocale, fetchAll, fetchAllWithOffset, fetchFirstChunkAndRemainingAsync, filterSidebarApps, filterTreeBy, findAllEmbeddableTypesInCanvasContent, findAllEmbeddableTypesInSectionsContent, findEmbeddableInCanvasContent, findEmbeddableInSectionsContent, findNodeInTreeByCondition, findNodeInTreeById, findNodeInTreeByType, findParentByNodeId, formatDate, formatDateDetailed, formatDateTime, formatDateTimeAgo, formatDayMonthBasedOnBrowserLang, formatDimensionForGotenberg, generateAIThumbnailUrl, getAllPages, getAppConfigFromAppSource, getAvailableApis, getComponentDescription, getComponentKeywords, getComponentTitle, getContrastTextColor, getDefinedProps, getEventColor, getExcessItemsIndexes, getFontAwesomeIconNameAndType, getImageSize, getLocalOverrideUrl, getLuminance, getNextPageParam, getNodeDisplayNameByComponentType, getNumberWithRegex, getPageQuantity, getPageRange, getPreviewUrl, getRoleIcon, getSectionGlobalComponentSpacing, handleThemeAssetComparison, hasAppTypeDefined, highLevelApi, indirectEval, insertItemSorted, isAfter, isBefore, isBeforeMinDate, isCanvasDrawerApp, isCanvasSectionExecution, isEmbeddableWithZeroHeight, isFileViewerReplacement, isFirefox, isFullscreen, isHeadlessOrNotAvailableApp, isImageAccessible, isIosDevice, isMac, isMobile, isModifierClick, isNonMemberRole, isOriginValid, isPastMaxDate, isPitcherOrIosDevice, isPitcherWkWebView, isPostcallApp, isQueryParamTruthy, isSafari, isSafariOnIosDevice, isSameOrAfter, isSameOrBefore, isTextComponentEmpty, isTheUiItself, isTouchScreen, isValidHex, isWindows, lightThemeOverrides, loadCustomHelpersFromApps, loadRemoteScriptWithCtx, loadScript, loadScriptStyle, loadStyle, localeDropdownOptions, localeNames, locales, minFutureDate, minPastDate, moveNodeTo, msToSeconds, navigateTo, normalizeFilterParams, normalizeNetworkFilterParams, openUsdz, parseCollectionPlayerSlidesToContentSelector, parseContentSelectorToCollectionPlayerSlides, parseFileToCollectionPlayer, parsePdfFileToCollectionPlayer, parsePptxFileToCollectionPlayer, pascalCaseKeys, _export$1 as pptConversionSelector, processCanvasForSectionThemeOverride, regenerateTreeIds, registerCustomHelper, registerCustomHelpers, registerPeerConnectivityHandler, renderTemplate, replaceThemePresetsWithInlineStyles, replaceTranslationMessagesWithOverrides, requestFullscreen, requestStream, scrollCanvasToTop, scrollToComponentById, secondsToHumanReadable, sendPeerConnectivityEvent, setDateTime, shouldDisplayPlaceholderComponent, shouldOpenInCollectionPlayerViewer, shouldShowEmbeddable, shouldShowInSidebar, skipElementsInTree, snakeCaseKeys, someNodeInTree, sortCollectionByString, splitUserName, stringToHslColor, supportedLocales, tapDirective, titleCase, toggleFullscreen, tooltipDirective, transformFilesToCollectionPlayer, transformFilesToContentGrid, updateFirstContentGridWithShareboxItems, urlSafeFetchInChunks, useAdmin, useAdminAndDsrState, useApi, useAppsDb, useBindValidation, useBroadcastRouteChange, useCanvasById, useCanvasLocks, useCanvasOverlay, useCanvasVisibility, useCanvasesAsInfinity, useCollectionPlayerOverlay, useCommentTracking, useConfirmation, useCreateEvent, useDeleteEvent, useDsr, useFetchCanvases, useFetchEvents, useFetchUsers, useFileDisplayHelpers, useFolderNameDescription, useGlobalSearch, useInfiniteScroll, useLocation, useMetadataSearch, useMetadataTemplates, useNotesApp, useNotification, useOpenFileStack, usePitcherApi, usePolling, usePresentationHistory, useRecentFiles, useShareCanvas, useSharedCommentsStorage, useSuggestedTags, useTheme, useThemeVars, useToast, useUi, useUpdateEvent, useWindowEvents, vueQueryPluginOptions, wait, waitForIframeInitialize, waitForValue };
184099
+ export { ADMIN_API_METHOD_TYPES, ADMIN_API_TYPES, ADMIN_MESSAGE, ADMIN_MESSAGE_TYPES, APPS_DB, AccessTypeEnum, App$3 as AgendaSelectorApp, AppTypeEnum, _sfc_main as AssetsManagerApp, App$1 as Browser, BulkUpdateMetadataOperationEnum, BulkUpdateTagsOperationEnum, CALL_STORAGE_KEY, CANVASES, CANVAS_HOOKS, CANVAS_TYPOGRAPHY_CSS_PROPERTIES, CANVAS_TYPOGRAPHY_PRESETS, CAlgoliaSearch, CAssignedCanvasesManagement, _sfc_main$4p as CAssignedCanvasesManagementToolbar, _sfc_main$6s as CAvatar, _sfc_main$4O as CBlockManagement, CButton, _sfc_main$5f as CCanvasDeleteDialogContent, _sfc_main$5g as CCanvasMetadataFilters, CCanvasSelector, _sfc_main$6V as CCard, CCarousel, _sfc_main$3G as CCatalogIqSwitcher, _sfc_main$6U as CCheckbox, _sfc_main$3A as CChip, CCollapse, _sfc_main$6R as CCollapseItem, _sfc_main$6r as CCollapseTransition, NColorPicker as CColorPicker, CComponentListItem, CConfigEditor, NConfigProvider as CConfigProvider, _sfc_main$6h as CConfirmationAction, CConfirmationContent, CConfirmationHeader, CConfirmationModal, CContactSelector, CContactSelectorSelected, _sfc_main$68 as CContentError, _sfc_main$65 as CCreateCanvasModal, _sfc_main$64 as CCreateTemplateSectionBlockModal, _sfc_main$5V as CCreateThemeModal, CDP_EVENT_TYPE, CDataTable, NDatePicker as CDatePicker, CDateRangeFilter, CDetailPageSectionButtons, NDialogProvider as CDialogProvider, _sfc_main$6P as CDivider, _sfc_main$6O as CDrawer, _sfc_main$6N as CDrawerContent, _sfc_main$6M as CDropdown, _sfc_main$6p as CEmpty, _sfc_main$4m as CEntitySelector, _sfc_main$6L as CErrorFullScreen, _sfc_main$6n as CFeedback, _sfc_main$3o as CFileAccessManagement, _sfc_main$6C as CFileAttributes, _sfc_main$3p as CFilePanel, _sfc_main$6I as CFileThumbnail, CFileViewer, CFilesAccessInfo, _sfc_main$3$ as CFilesAccessManage, _sfc_main$3I as CFilesFolderDeleteDialogContent, NForm as CForm, NFormItem as CFormItem, NFormItemCol as CFormItemCol, NFormItemGridItem as CFormItemGi, NFormItemGridItem as CFormItemGridItem, FormItemRow as CFormItemRow, _sfc_main$4h as CFullScreenLoader, NGridItem as CGi, CGlobalLoader, _sfc_main$5O as CGlobalSearch, GlobalStyle as CGlobalStyle, NGrid as CGrid, NGridItem as CGridItem, CGroupsAccessInfo, NH1 as CH1, NH2 as CH2, NH3 as CH3, NH4 as CH4, NH5 as CH5, NH6 as CH6, _sfc_main$6m as CHelpText, CIcon, _sfc_main$6K as CImage, _sfc_main$4W as CInfoBadge, _sfc_main$6B as CInput, NInputNumber as CInputNumber, _sfc_main$3y as CKnockNotificationsAppWrapper, CLIENT_TYPE, NLayout as CLayout, NLayoutContent as CLayoutContent, LayoutFooter as CLayoutFooter, LayoutHeader as CLayoutHeader, LayoutSider as CLayoutSider, _sfc_main$4X as CList, NMessageProvider as CMessageProvider, _sfc_main$5L as CMetaDataBadge, _sfc_main$6A as CModal, CMonacoEditor, CMovableWidget, CMultiSelect, NNotificationProvider as CNotificationProvider, NPagination as CPagination, _sfc_main$6l as CPillSelect, _sfc_main$6z as CPopover, _sfc_main$6J as CProcessingOverlay, NProgress as CProgress, _sfc_main$5s as CRichTextEditor, _sfc_main$4q as CSavedCanvasesManagement, CSearch, _sfc_main$6x as CSearchOnClick, CSearchOnClickWithSuggestions, CSecondaryNav, _sfc_main$4R as CSectionManagement, CSelect, CSelectFilter, _sfc_main$3x as CSettingsEditor, CShortcut, CSingleSelect, NSkeleton as CSkeleton, _sfc_main$3C as CSlideViewer, NSpace as CSpace, _sfc_main$6q as CSpin, _sfc_main$6o as CSwitch, CTable, _sfc_main$5c as CTableInput, CTableMore, CTableSelect, CTableTag, _sfc_main$6F as CTag, CTags, CTemplateAccessInfo, _sfc_main$3_ as CTemplateAccessManage, _sfc_main$4G as CTemplateManagement, text as CText, _sfc_main$6v as CThemeEditor, _sfc_main$4B as CThemeManagement, _sfc_main$5l as CToastProvider, CToolbar, _sfc_main$6t as CTooltip, CUpsertFolderModal, _sfc_main$5p as CUserAvatar, CUserMenu, CUsersAccessInfo, CUsersGroupsAccessManage, _sfc_main$5m as CVirtualTable, _sfc_main$48 as CWarningAlert, CallState, CanvasActions, _sfc_main$15 as CanvasBuilderApp, CanvasBuilderMode, CanvasExcludedComponentTypesEnum, CanvasHistoryAction, App as CanvasSelector, CanvasStatus, CanvasThemeStatus, CanvasesViewsTypes, CollaborationRoleEnum, CollectionPlayerApp, App$4 as CollectionSelectorApp, ComponentIcon, ComponentTypes, ContactSelectorQuickFilterType, ContentGridLayoutTypes, ContentSelector, CoreFolderEntityType, DATE_TIME_FORMAT, DEFAULT_ADMIN_TABLE_HEIGHT, DEFAULT_ADMIN_TABLE_WITH_PAGINATION_HEIGHT, DEFAULT_GLOBAL_COMPONENT_SPACING, DEFAULT_GLOBAL_COMPONENT_SPACING_INTERVAL, DEFAULT_ITEMS_PER_PAGE, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PEER_CONNECTIVITY_VERSION, DEFAULT_PITCHER_SETTINGS, DSR_API_METHOD_TYPES, DSR_API_TYPES, DSR_MESSAGE, DSR_MESSAGE_TYPES, DSR_TYPE, DefaultExpiresAtEnum, DownloadTypeEnum, EMBED_TYPE, EventAction, EventExternalObjectContentTypeEnum, EventStatusEnum, FileContentTypeEnum, FileStatusEnum, FileTypeEnum, GlobalSearchResultType, GridLayoutTypes, HIDE_IF_EMPTY_COMPONENT_ID_TAG_PREFIX, HIDE_IF_EMPTY_COMPONENT_TRACKING_ID_TAG_PREFIX, HIDE_TAGS_WITH_PREFIX, HtmlLayoutTypes, IFRAME_ACTION_TYPES, IFRAME_DATA_MESSAGE, INITIAL_CALL_STATE, IS_DEV_ORG, IS_LOCALHOST, InstanceMembershipRoleEnum, InstanceMembershipUserStatusEnum, InvitationStatusEnum, LanguageEnum, LinkAlignmentTypes, LinkAnchorTypes, LinkPreviewTypes, MAX_LUMINANCE_FOR_LIGHT_TEXT, MAX_UPLOAD_SIZE, MIN_DIFFERENCE_IN_MINUTES, MetadataTemplateFieldTypeEnum, MultimediaHorizontalAlignmentOptions, NON_MEMBER_ROLES, NotesApp, OperatorEnum, PAPER_SIZE_PRESETS, PEER_CONNECTIVITY_EVENT, PEER_CONNECTIVITY_HANDLER_MATCH_ALL, PITCHER_EVENT, PITCHER_SETTINGS_KEY, PLATFORM_TYPE, PRINT_SCALE_FACTOR, PeerConnectivityActions, PitcherBroadcastedEventName, PitcherEventName, PitcherExternalEventName, PitcherMessageType, PitcherResponseStatus, PostAction, App$2 as PptConversionSelectorApp, REQUEST_DEFAULT_CANCEL_TIMEOUT, SEARCH_DEBOUNCE_TIME, SUPPORTED_FONT_EXTENSIONS, SUPPORTED_FONT_TYPES, SUPPORTED_IMAGE_EXTENSIONS, SUPPORTED_IMAGE_TYPES, SUPPORTED_UPLOAD_FILE_EXTENSIONS, SUPPORTED_VIDEO_EXTENSIONS, SUPPORTED_VIDEO_TYPES, SfEventColors, SfEventColorsLight, StorageRegionEnum, TRACKING_EVENTS_STORAGE_KEY, UI_API_METHOD_TYPES, UI_MESSAGE, UI_MESSAGE_TYPES, UI_NATIVE_MESSAGE_TYPES, UserRoleEnum, ViewCompactItemType, addCanvasComponent, _export as agendaSelector, appRequiresCrm, applyCanvasThemeAssetsToNode, applyFont, applyToTreeBy, autofocus as autofocusDirective, camelCaseKeys, canvasUiUnoPreset, clearLocalStorageIfNeeded, ClickOutsideDirective as clickOutsideDirective, collectAllNodesByCondition, _export$3 as collectionPlayer, _export$2 as collectionSelector, componentIconType, computeLocalStorageBytes, convertSecondsToMinutes, convertSoqlToSmartQuery, convertToPixels, convertToSosl, createNodeId, createPitcherSettings, dayjs, deepDiff, deepToRaw, derivePatchRequestFields, determineUserRole, discardSectionComponentOverride, displayBytesWithMUnit, displayIntegerWithMunit, doesLocalOverrideExist, doesNotHaveAnyModuleOrHookSpecified, downloadFile, draggable as draggableDirective, elementMounted as elementMountedDirective, escapeSoqlString, evaluateAccessor, evaluateIsExecutedCondition, evaluateIsExecutedForPascalCaseEvent, executeWithDoublingTime, exitFullscreen, extractFieldNamesFromCondition, fallbackLocale, fetchAll, fetchAllWithOffset, fetchFirstChunkAndRemainingAsync, filterSidebarApps, filterTreeBy, findAllEmbeddableTypesInCanvasContent, findAllEmbeddableTypesInSectionsContent, findEmbeddableInCanvasContent, findEmbeddableInSectionsContent, findNodeInTreeByCondition, findNodeInTreeById, findNodeInTreeByType, findParentByNodeId, formatDate, formatDateDetailed, formatDateTime, formatDateTimeAgo, formatDayMonthBasedOnBrowserLang, formatDimensionForGotenberg, generateAIThumbnailUrl, getAllPages, getAppConfigFromAppSource, getAvailableApis, getComponentDescription, getComponentKeywords, getComponentTitle, getContrastTextColor, getDefinedProps, getEventColor, getExcessItemsIndexes, getFontAwesomeIconNameAndType, getImageSize, getLocalOverrideUrl, getLuminance, getNextPageParam, getNodeDisplayNameByComponentType, getNumberWithRegex, getPageQuantity, getPageRange, getPreviewUrl, getRoleIcon, getSectionGlobalComponentSpacing, handleThemeAssetComparison, hasAppTypeDefined, highLevelApi, indirectEval, insertItemSorted, isAfter, isBefore, isBeforeMinDate, isCanvasDrawerApp, isCanvasSectionExecution, isEmbeddableWithZeroHeight, isFileViewerReplacement, isFirefox, isFullscreen, isHeadlessOrNotAvailableApp, isImageAccessible, isIosDevice, isMac, isMobile, isModifierClick, isNonMemberRole, isOriginValid, isPastMaxDate, isPitcherOrIosDevice, isPitcherWkWebView, isPostcallApp, isQueryParamTruthy, isSafari, isSafariOnIosDevice, isSameOrAfter, isSameOrBefore, isTextComponentEmpty, isTheUiItself, isTouchScreen, isValidHex, isWindows, lightThemeOverrides, loadCustomHelpersFromApps, loadRemoteScriptWithCtx, loadScript, loadScriptStyle, loadStyle, localeDropdownOptions, localeNames, locales, minFutureDate, minPastDate, moveNodeTo, msToSeconds, navigateTo, normalizeFilterParams, normalizeNetworkFilterParams, openUsdz, parseCollectionPlayerSlidesToContentSelector, parseContentSelectorToCollectionPlayerSlides, parseFileToCollectionPlayer, parsePdfFileToCollectionPlayer, parsePptxFileToCollectionPlayer, pascalCaseKeys, _export$1 as pptConversionSelector, processCanvasForSectionThemeOverride, regenerateTreeIds, registerCustomHelper, registerCustomHelpers, registerPeerConnectivityHandler, renderTemplate, replaceThemePresetsWithInlineStyles, replaceTranslationMessagesWithOverrides, requestFullscreen, requestStream, scrollCanvasToTop, scrollToComponentById, secondsToHumanReadable, sendPeerConnectivityEvent, setDateTime, shouldDisplayPlaceholderComponent, shouldOpenInCollectionPlayerViewer, shouldShowEmbeddable, shouldShowInSidebar, skipElementsInTree, snakeCaseKeys, someNodeInTree, sortCollectionByString, splitUserName, stringToHslColor, supportedLocales, tapDirective, titleCase, toggleFullscreen, tooltipDirective, transformFilesToCollectionPlayer, transformFilesToContentGrid, updateFirstContentGridWithShareboxItems, urlSafeFetchInChunks, useAdmin, useAdminAndDsrState, useApi, useAppsDb, useBindValidation, useBroadcastRouteChange, useCanvasById, useCanvasLocks, useCanvasOverlay, useCanvasVisibility, useCanvasesAsInfinity, useCollectionPlayerOverlay, useCommentTracking, useConfirmation, useCreateEvent, useDeleteEvent, useDsr, useFetchCanvases, useFetchEvents, useFetchUsers, useFileDisplayHelpers, useFolderNameDescription, useGlobalSearch, useInfiniteScroll, useLocation, useMetadataSearch, useMetadataTemplates, useNotesApp, useNotification, useOpenFileStack, usePitcherApi, usePolling, usePresentationHistory, useRecentFiles, useShareCanvas, useSharedCommentsStorage, useSmartStore, useSuggestedTags, useTheme, useThemeVars, useToast, useUi, useUpdateEvent, useWindowEvents, vueQueryPluginOptions, wait, waitForIframeInitialize, waitForValue };
183212
184100
  //# sourceMappingURL=canvas-ui.js.map