@pitcher/canvas-ui 2026.1.22-164323-beta → 2026.1.22-165049-beta

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 (38) hide show
  1. package/canvas-ui.css +21 -21
  2. package/canvas-ui.js +236 -60
  3. package/canvas-ui.js.map +1 -1
  4. package/lib/apps/agenda-selector/composables/move-item-modal.use.d.ts +4 -0
  5. package/lib/apps/browser/components/UploadFilesModal/UploadFilesModal.vue.d.ts +1 -0
  6. package/lib/apps/browser/stores/api.d.ts +9 -0
  7. package/lib/apps/browser/stores/upload.d.ts +4 -0
  8. package/lib/apps/canvas-builder/composables/useCanvas.d.ts +54 -0
  9. package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +12 -0
  10. package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +12 -0
  11. package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +2 -0
  12. package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +2 -0
  13. package/lib/apps/collection-selector/composables/move-slide-modal.use.d.ts +4 -0
  14. package/lib/apps/ppt-conversion-selector/composables/move-slide-modal.use.d.ts +2 -0
  15. package/lib/apps/ppt-conversion-selector/stores/app.store.d.ts +2 -0
  16. package/lib/components/CFileAttributes/CFileAttributes.vue.d.ts +7 -0
  17. package/lib/sdk/api/HighLevelApi.d.ts +0 -2
  18. package/lib/sdk/api/modules/query.d.ts +1 -44
  19. package/lib/sdk/main.d.ts +0 -6
  20. package/lib/sdk/payload.types.d.ts +0 -55
  21. package/lib/types/launchDarkly.types.d.ts +1 -1
  22. package/locale/de.json +4 -0
  23. package/locale/el.json +4 -0
  24. package/locale/en.json +4 -0
  25. package/locale/es.json +4 -0
  26. package/locale/fr.json +4 -0
  27. package/locale/it.json +4 -0
  28. package/locale/ja.json +4 -0
  29. package/locale/nl.json +4 -0
  30. package/locale/pl.json +4 -0
  31. package/locale/pt-br.json +4 -0
  32. package/locale/pt.json +4 -0
  33. package/locale/th.json +4 -0
  34. package/locale/tr.json +4 -0
  35. package/locale/zh.json +4 -0
  36. package/package.json +1 -1
  37. package/types/openapi/models/FilePermission.d.ts +1 -0
  38. package/types/openapi/models/FilePermissionRequest.d.ts +1 -0
package/canvas-ui.css CHANGED
@@ -1401,18 +1401,18 @@ to {
1401
1401
  height: 100px;
1402
1402
  background: var(--3ad38b36);
1403
1403
  }
1404
- .content-grid-file-item[data-v-2a28d327] {
1405
- color: 1px solid var(--216a78e5);
1404
+ .content-grid-file-item[data-v-660a5765] {
1405
+ color: 1px solid var(--3d45b92e);
1406
1406
  }
1407
- .content-grid-file-item__img[data-v-2a28d327] {
1408
- outline: 1px solid var(--0b2f6ba8);
1407
+ .content-grid-file-item__img[data-v-660a5765] {
1408
+ outline: 1px solid var(--3aa83df5);
1409
1409
  }
1410
- .description[data-v-2a28d327] {
1411
- color: var(--0be4a3ee);
1410
+ .description[data-v-660a5765] {
1411
+ color: var(--6b716cc5);
1412
1412
  }
1413
1413
  .dot-slider {
1414
1414
  .dot {
1415
- &[data-v-2a28d327] {
1415
+ &[data-v-660a5765] {
1416
1416
  border-radius: 50%;
1417
1417
  background-color: rgba(0, 0, 0, 0.3);
1418
1418
  border: 1px solid rgba(255, 255, 255, 0.6);
@@ -1420,10 +1420,10 @@ to {
1420
1420
  box-shadow 0.3s 0,
1421
1421
  background-color 0.3s 0;
1422
1422
  }
1423
- &.dot--active[data-v-2a28d327] {
1423
+ &.dot--active[data-v-660a5765] {
1424
1424
  height: 10px;
1425
1425
  width: 10px;
1426
- background-color: var(--31e8c16c);
1426
+ background-color: var(--d2ece33e);
1427
1427
  }
1428
1428
  }
1429
1429
  }
@@ -1432,15 +1432,15 @@ to {
1432
1432
  }
1433
1433
  .color-text[data-v-79d6b1bf] {
1434
1434
  color: var(--0a685aa6);
1435
- }.content-grid-raw__item[data-v-d0a87ee1] {
1436
- color: var(--e528c74e);
1437
- border: 1px solid var(--7182939f);
1435
+ }.content-grid-raw__item[data-v-a4be1f85] {
1436
+ color: var(--9e48fc38);
1437
+ border: 1px solid var(--2fc288ac);
1438
1438
  }
1439
- .content-grid-raw__item__img[data-v-d0a87ee1] {
1440
- outline: 1px solid var(--718293a0);
1439
+ .content-grid-raw__item__img[data-v-a4be1f85] {
1440
+ outline: 1px solid var(--2fc288aa);
1441
1441
  }
1442
- .content-grid-raw__item__hint[data-v-d0a87ee1] {
1443
- color: var(--2007eefa);
1442
+ .content-grid-raw__item__hint[data-v-a4be1f85] {
1443
+ color: var(--6a94bacf);
1444
1444
  }
1445
1445
  [data-v-440dbcdb] .content-grid-carousel__arrows {
1446
1446
  box-sizing: border-box;
@@ -1469,12 +1469,12 @@ to {
1469
1469
  [data-v-440dbcdb] .content-grid-carousel__button:hover {
1470
1470
  background-color: rgba(0, 0, 0, 0.1);
1471
1471
  }
1472
- .content-grid-list-item[data-v-1ade5c19] {
1472
+ .content-grid-list-item[data-v-f1296b1d] {
1473
1473
  cursor: pointer;
1474
1474
  transition: background-color 0.2s;
1475
1475
  }
1476
- .content-grid-list-item[data-v-1ade5c19]:hover {
1477
- background-color: var(--cd2efdac);
1476
+ .content-grid-list-item[data-v-f1296b1d]:hover {
1477
+ background-color: var(--3f0f3834);
1478
1478
  }
1479
1479
  .content-grid-list[data-v-f00de553] {
1480
1480
  max-height: 600px;
@@ -3072,8 +3072,8 @@ to {
3072
3072
  .panel[data-v-cde3ebee] {
3073
3073
  background-color: var(--5e24e1e8);
3074
3074
  }
3075
- .browser-list-item[data-v-8781de25] {
3076
- border-bottom: 1px solid var(--10ccf2df);
3075
+ .browser-list-item[data-v-f822adec] {
3076
+ border-bottom: 1px solid var(--7438e094);
3077
3077
  }.breadcrumb-area[data-v-41ca4793] .n-button {
3078
3078
  border: 1px solid var(--6b5e9219) !important;
3079
3079
  }
package/canvas-ui.js CHANGED
@@ -79760,6 +79760,12 @@ const _hoisted_3$2_ = {
79760
79760
  key: 1,
79761
79761
  class: "flex gap-4 w-full"
79762
79762
  };
79763
+ const _hoisted_4$2o = { class: "flex items-center gap-3" };
79764
+ const _hoisted_5$1$ = { class: "text-16px" };
79765
+ const _hoisted_6$1H = { class: "flex items-center gap-3" };
79766
+ const _hoisted_7$1h = { class: "text-16px" };
79767
+ const _hoisted_8$12 = { class: "flex items-center gap-3" };
79768
+ const _hoisted_9$S = { class: "text-16px" };
79763
79769
  const _sfc_main$6B = /* @__PURE__ */ defineComponent({
79764
79770
  __name: "CFileAttributes",
79765
79771
  props: {
@@ -79794,6 +79800,8 @@ const _sfc_main$6B = /* @__PURE__ */ defineComponent({
79794
79800
  const labels = {
79795
79801
  sharing: t("canvasUI.browserApp.uploadFilesModal.sharing.label"),
79796
79802
  divisible: t("canvasUI.browserApp.uploadFilesModal.divisible.label"),
79803
+ allowExternalSharing: t("canvasUI.files.sharing.allowExternalSharing"),
79804
+ allowPrint: t("canvasUI.files.sharing.allowPrint"),
79797
79805
  tags: t("canvasUI.browserApp.uploadFilesModal.tags.label"),
79798
79806
  expiresAtDateTime: t("canvasUI.browserApp.uploadFilesModal.expiresAt.label"),
79799
79807
  accessType: t("canvasUI.browserApp.uploadFilesModal.access.label")
@@ -79914,6 +79922,41 @@ const _sfc_main$6B = /* @__PURE__ */ defineComponent({
79914
79922
  form.value.permissions.can_be_divided = value;
79915
79923
  }
79916
79924
  });
79925
+ const sharingValueAsBoolean = computed({
79926
+ get: () => {
79927
+ return form.value.permissions?.can_share ?? true;
79928
+ },
79929
+ set: (value) => {
79930
+ if (!form.value.permissions) {
79931
+ form.value.permissions = {};
79932
+ }
79933
+ form.value.permissions.can_share = value;
79934
+ }
79935
+ });
79936
+ const printValueAsBoolean = computed({
79937
+ get: () => {
79938
+ return form.value.permissions?.can_print ?? true;
79939
+ },
79940
+ set: (value) => {
79941
+ form.value.permissions = form.value.permissions || {};
79942
+ form.value.permissions.can_print = value;
79943
+ form.value.metadata = form.value.metadata || {};
79944
+ form.value.metadata.pitcher = form.value.metadata.pitcher || {};
79945
+ form.value.metadata.pitcher.can_print = value;
79946
+ }
79947
+ });
79948
+ function onChangeSharingNew(value) {
79949
+ sharingValueAsBoolean.value = value;
79950
+ if (!value) {
79951
+ printValueAsBoolean.value = false;
79952
+ }
79953
+ }
79954
+ function onChangePrint(value) {
79955
+ printValueAsBoolean.value = value;
79956
+ if (!sharingValueAsBoolean.value) {
79957
+ printValueAsBoolean.value = false;
79958
+ }
79959
+ }
79917
79960
  function isEditingFieldOrNonEmpty(fieldName) {
79918
79961
  if (fieldName === "permissions") {
79919
79962
  return form.value.permissions?.can_share !== void 0 || editingField.value === fieldName;
@@ -80040,7 +80083,7 @@ const _sfc_main$6B = /* @__PURE__ */ defineComponent({
80040
80083
  ]),
80041
80084
  _: 1
80042
80085
  }, 8, ["label"]),
80043
- _ctx.showPermissionSettings ? (openBlock(), createBlock(unref(NFormItemGridItem), {
80086
+ _ctx.showPermissionSettings && !unref(launchDarkly).enable_file_sharing_print_permissions ? (openBlock(), createBlock(unref(NFormItemGridItem), {
80044
80087
  key: 0,
80045
80088
  label: labels.sharing
80046
80089
  }, {
@@ -80145,23 +80188,62 @@ const _sfc_main$6B = /* @__PURE__ */ defineComponent({
80145
80188
  })) : createCommentVNode("", true),
80146
80189
  _ctx.showPermissionSettings && unref(launchDarkly).enable_file_divisible_permission ? (openBlock(), createBlock(unref(NFormItemGridItem), {
80147
80190
  key: 3,
80148
- label: labels.divisible
80191
+ class: "mx-1",
80192
+ "show-label": false,
80193
+ span: 2
80149
80194
  }, {
80150
80195
  default: withCtx(() => [
80151
- _ctx.showKeepAsIsPlaceholder && !isEditingFieldOrNonEmpty("divisiblePermission") ? (openBlock(), createBlock(CInputPlaceholder, {
80152
- key: 0,
80153
- onClick: _cache[9] || (_cache[9] = ($event) => enableEditing("divisiblePermission", unref(MetadataTemplateFieldTypeEnum).SELECT))
80154
- })) : (openBlock(), createBlock(_sfc_main$6F, {
80155
- key: 1,
80156
- checked: divisibleValueAsBoolean.value,
80157
- class: "mx-1",
80158
- "data-field": "divisiblePermission",
80159
- onBlur: _cache[10] || (_cache[10] = ($event) => handleBlur("divisiblePermission")),
80160
- "onUpdate:checked": onChangeDivisible
80161
- }, null, 8, ["checked"]))
80196
+ createElementVNode("div", _hoisted_4$2o, [
80197
+ createVNode(_sfc_main$6F, {
80198
+ checked: divisibleValueAsBoolean.value,
80199
+ "data-field": "divisiblePermission",
80200
+ onBlur: _cache[9] || (_cache[9] = ($event) => handleBlur("divisiblePermission")),
80201
+ "onUpdate:checked": onChangeDivisible
80202
+ }, null, 8, ["checked"]),
80203
+ createElementVNode("span", _hoisted_5$1$, toDisplayString(labels.divisible), 1)
80204
+ ])
80162
80205
  ]),
80163
80206
  _: 1
80164
- }, 8, ["label"])) : createCommentVNode("", true)
80207
+ })) : createCommentVNode("", true),
80208
+ _ctx.showPermissionSettings && unref(launchDarkly).enable_file_sharing_print_permissions ? (openBlock(), createBlock(unref(NFormItemGridItem), {
80209
+ key: 4,
80210
+ class: "mx-1",
80211
+ "show-label": false,
80212
+ span: 2
80213
+ }, {
80214
+ default: withCtx(() => [
80215
+ createElementVNode("div", _hoisted_6$1H, [
80216
+ createVNode(_sfc_main$6F, {
80217
+ checked: sharingValueAsBoolean.value,
80218
+ "data-field": "sharingPermission",
80219
+ onBlur: _cache[10] || (_cache[10] = ($event) => handleBlur("sharingPermission")),
80220
+ "onUpdate:checked": onChangeSharingNew
80221
+ }, null, 8, ["checked"]),
80222
+ createElementVNode("span", _hoisted_7$1h, toDisplayString(labels.allowExternalSharing), 1)
80223
+ ])
80224
+ ]),
80225
+ _: 1
80226
+ })) : createCommentVNode("", true),
80227
+ _ctx.showPermissionSettings && unref(launchDarkly).enable_file_sharing_print_permissions ? (openBlock(), createBlock(unref(NFormItemGridItem), {
80228
+ key: 5,
80229
+ class: "mx-1",
80230
+ "show-label": false,
80231
+ span: 2
80232
+ }, {
80233
+ default: withCtx(() => [
80234
+ createElementVNode("div", _hoisted_8$12, [
80235
+ createVNode(_sfc_main$6F, {
80236
+ checked: printValueAsBoolean.value,
80237
+ "data-field": "printPermission",
80238
+ disabled: !sharingValueAsBoolean.value,
80239
+ onBlur: _cache[11] || (_cache[11] = ($event) => handleBlur("printPermission")),
80240
+ "onUpdate:checked": onChangePrint
80241
+ }, null, 8, ["checked", "disabled"]),
80242
+ createElementVNode("span", _hoisted_9$S, toDisplayString(labels.allowPrint), 1)
80243
+ ])
80244
+ ]),
80245
+ _: 1
80246
+ })) : createCommentVNode("", true)
80165
80247
  ]),
80166
80248
  _: 1
80167
80249
  })
@@ -88372,16 +88454,6 @@ function crmSmartObjectValidationRules(payload) {
88372
88454
  }
88373
88455
  return highLevelApi.API.request("crm_smart_object_validation_rules", payload);
88374
88456
  }
88375
- function crmSmartObjectLayout(payload) {
88376
- if (!payload) {
88377
- return Promise.reject(new Error("Payload is required"));
88378
- }
88379
- const objectName = payload.object;
88380
- if (!objectName || typeof objectName !== "string" || objectName.trim() === "") {
88381
- return Promise.reject(new Error("Object name is required and must be a non-empty string"));
88382
- }
88383
- return highLevelApi.API.request("crm_smart_object_layout", payload);
88384
- }
88385
88457
  function crmSmartDeleteObjects(payload) {
88386
88458
  if (!payload || !payload.objects || !Array.isArray(payload.objects)) {
88387
88459
  return Promise.reject(new Error("Payload must contain an array of objects"));
@@ -88471,15 +88543,6 @@ function crmDescribe(payload) {
88471
88543
  }
88472
88544
  return highLevelApi.API.request("crm_describe", payload);
88473
88545
  }
88474
- function crmLayout(payload) {
88475
- if (!payload) {
88476
- return Promise.reject(new Error("Payload is required"));
88477
- }
88478
- if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
88479
- return Promise.reject(new Error("sobject is required and must be a non-empty string"));
88480
- }
88481
- return highLevelApi.API.request("crm_layout", payload);
88482
- }
88483
88546
 
88484
88547
  function getFolders(payload) {
88485
88548
  return this.API.request("get_folders", payload);
@@ -88578,11 +88641,9 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
88578
88641
  createFolder,
88579
88642
  crmCreate,
88580
88643
  crmDescribe,
88581
- crmLayout,
88582
88644
  crmQuery,
88583
88645
  crmQueryAdaptive,
88584
88646
  crmSmartDeleteObjects,
88585
- crmSmartObjectLayout,
88586
88647
  crmSmartObjectMetadata,
88587
88648
  crmSmartObjectValidationRules,
88588
88649
  crmSmartQuery,
@@ -89179,12 +89240,9 @@ const TRUNCATE_LENGTH_TRIGGER = 10;
89179
89240
  const RAW_PAYLOAD_METHODS = [
89180
89241
  "crm_create",
89181
89242
  "crm_upsert",
89182
- "crm_describe",
89183
- "crm_layout",
89184
89243
  "crm_smart_query",
89185
89244
  "crm_smart_object_metadata",
89186
89245
  "crm_smart_object_validation_rules",
89187
- "crm_smart_object_layout",
89188
89246
  "crm_smart_upsert_objects",
89189
89247
  "crm_smart_delete_objects"
89190
89248
  ];
@@ -111340,8 +111398,15 @@ const _sfc_main$4T = /* @__PURE__ */ defineComponent({
111340
111398
  icon: "solid-share-from-square-slash",
111341
111399
  text: unref(t)("canvasUI.files.notShareable")
111342
111400
  }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
111343
- Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
111401
+ unref(launchDarkly).enable_file_sharing_print_permissions && _ctx.item?.permissions?.can_share !== false && _ctx.item?.permissions?.can_print === false ? (openBlock(), createBlock(_sfc_main$4W, {
111344
111402
  key: 2,
111403
+ "background-color": unref(themeVars).error2,
111404
+ color: unref(themeVars).error,
111405
+ icon: "print-slash",
111406
+ text: unref(t)("canvasUI.files.printingDisabled")
111407
+ }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
111408
+ Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
111409
+ key: 3,
111345
111410
  class: "gap-2 mr-2",
111346
111411
  engagement: unref(launchDarkly).show_popularity_icons ? unref(popularityDict)[_ctx.item.id]?.engagement : void 0,
111347
111412
  "is-recommended": !!unref(recommendedSectionIds).includes(_ctx.item.id?.toString()),
@@ -122502,6 +122567,15 @@ const _sfc_main$4e = /* @__PURE__ */ defineComponent({
122502
122567
  const isExpandFileDisabled = computed(() => {
122503
122568
  return props.isDisabled || appProps?.contentType.value === "file" || props.item.content_type !== "pdf" || launchDarkly.value.enable_file_divisible_permission && props.item.permissions?.can_be_divided === false;
122504
122569
  });
122570
+ const isPrintable = computed(() => {
122571
+ if (!launchDarkly.value.enable_file_sharing_print_permissions) {
122572
+ return true;
122573
+ }
122574
+ if (props.item?.permissions?.can_share === false) {
122575
+ return true;
122576
+ }
122577
+ return props.item?.permissions?.can_print !== false;
122578
+ });
122505
122579
  return (_ctx, _cache) => {
122506
122580
  const _directive_tooltip = resolveDirective("tooltip");
122507
122581
  return openBlock(), createElementBlock("div", {
@@ -122642,8 +122716,15 @@ const _sfc_main$4e = /* @__PURE__ */ defineComponent({
122642
122716
  icon: "solid-share-from-square-slash",
122643
122717
  text: unref(t)("canvasUI.files.notShareable")
122644
122718
  }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
122645
- Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
122719
+ !isPrintable.value ? (openBlock(), createBlock(_sfc_main$4W, {
122646
122720
  key: 2,
122721
+ "background-color": unref(themeVars).error2,
122722
+ color: unref(themeVars).error,
122723
+ icon: "print-slash",
122724
+ text: unref(t)("canvasUI.components.ContentGrid.printingDisabled")
122725
+ }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
122726
+ Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
122727
+ key: 3,
122647
122728
  class: "flex gap-2 mr-2",
122648
122729
  engagement: unref(launchDarkly).show_popularity_icons ? unref(popularityDict)[_ctx.data[_ctx.index].id]?.engagement : void 0,
122649
122730
  "is-recommended": !!unref(recommendedSectionIds).includes(_ctx.data[_ctx.index].id),
@@ -140998,10 +141079,10 @@ const _sfc_main$2O = /* @__PURE__ */ defineComponent({
140998
141079
  },
140999
141080
  setup(__props) {
141000
141081
  useCssVars((_ctx) => ({
141001
- "216a78e5": unref(themeVars).text,
141002
- "0b2f6ba8": unref(themeVars).primary6,
141003
- "0be4a3ee": unref(themeVars).text3,
141004
- "31e8c16c": unref(themeVars).primary
141082
+ "3d45b92e": unref(themeVars).text,
141083
+ "3aa83df5": unref(themeVars).primary6,
141084
+ "6b716cc5": unref(themeVars).text3,
141085
+ "d2ece33e": unref(themeVars).primary
141005
141086
  }));
141006
141087
  const props = __props;
141007
141088
  const launchDarkly = inject(
@@ -141009,7 +141090,7 @@ const _sfc_main$2O = /* @__PURE__ */ defineComponent({
141009
141090
  computed(() => ({}))
141010
141091
  );
141011
141092
  const { t } = useI18n();
141012
- const { mode, isEditMode, onDownloadFile, isDefaultDisplayMode, isAdmin, canvasMetadata } = useCanvas$1();
141093
+ const { mode, isEditMode, onDownloadFile, isDefaultDisplayMode, isAdmin, canvasMetadata, fileDataCache } = useCanvas$1();
141013
141094
  const { renderContentType, isFileExpired, isFileExpiring } = useFileDisplayHelpers();
141014
141095
  const { recommendedSectionIds } = useRecommendations();
141015
141096
  const { popularityDict } = useSectionPopularity(computed(() => ({})));
@@ -141017,6 +141098,19 @@ const _sfc_main$2O = /* @__PURE__ */ defineComponent({
141017
141098
  const vTooltip = tooltipDirective;
141018
141099
  const item = computed(() => props.item.type === "file" ? props.item : null);
141019
141100
  const isShareable = computed(() => item.value?.file.permissions?.can_share !== false);
141101
+ const isPrintable = computed(() => {
141102
+ if (!launchDarkly.value.enable_file_sharing_print_permissions) {
141103
+ return true;
141104
+ }
141105
+ if (!isShareable.value) {
141106
+ return true;
141107
+ }
141108
+ const file = fileDataCache.value.get(item.value?.file.id || "");
141109
+ if (file) {
141110
+ return file.permissions?.can_print !== false;
141111
+ }
141112
+ return item.value?.file.permissions?.can_print !== false;
141113
+ });
141020
141114
  const isAdvancedSharingEnabled = computed(() => !!launchDarkly.value?.use_advanced_sharing_modal);
141021
141115
  const canDownload = computed(() => {
141022
141116
  if (item.value?.file.permissions?.can_download === false) {
@@ -141211,6 +141305,15 @@ const _sfc_main$2O = /* @__PURE__ */ defineComponent({
141211
141305
  variation: "minimal"
141212
141306
  }, null, 8, ["background-color", "color"])), [
141213
141307
  [unref(vTooltip), unref(t)("canvasUI.components.ContentGrid.sharingDisabled")]
141308
+ ]) : createCommentVNode("", true),
141309
+ !isPrintable.value ? withDirectives((openBlock(), createBlock(_sfc_main$4W, {
141310
+ key: 4,
141311
+ "background-color": unref(themeVars).error2,
141312
+ color: unref(themeVars).error,
141313
+ icon: "print-slash",
141314
+ variation: "minimal"
141315
+ }, null, 8, ["background-color", "color"])), [
141316
+ [unref(vTooltip), unref(t)("canvasUI.components.ContentGrid.printingDisabled")]
141214
141317
  ]) : createCommentVNode("", true)
141215
141318
  ])
141216
141319
  ]),
@@ -141226,7 +141329,7 @@ const _sfc_main$2O = /* @__PURE__ */ defineComponent({
141226
141329
  }
141227
141330
  });
141228
141331
 
141229
- const ContentGridFileItem = /* @__PURE__ */ _export_sfc(_sfc_main$2O, [["__scopeId", "data-v-2a28d327"]]);
141332
+ const ContentGridFileItem = /* @__PURE__ */ _export_sfc(_sfc_main$2O, [["__scopeId", "data-v-660a5765"]]);
141230
141333
 
141231
141334
  const _hoisted_1$2a = { class: "flex items-center flex-col justify-center" };
141232
141335
  const _hoisted_2$1y = { class: "text-center font-400 text-truncate font-size-4 line-height-6 color-text font-normal" };
@@ -141286,10 +141389,10 @@ const _sfc_main$2M = /* @__PURE__ */ defineComponent({
141286
141389
  emits: ["deletedFileClicked"],
141287
141390
  setup(__props, { emit: __emit }) {
141288
141391
  useCssVars((_ctx) => ({
141289
- "e528c74e": unref(themeVars).text,
141290
- "7182939f": unref(themeVars).primary5,
141291
- "718293a0": unref(themeVars).primary6,
141292
- "2007eefa": unref(themeVars).text3
141392
+ "9e48fc38": unref(themeVars).text,
141393
+ "2fc288ac": unref(themeVars).primary5,
141394
+ "2fc288aa": unref(themeVars).primary6,
141395
+ "6a94bacf": unref(themeVars).text3
141293
141396
  }));
141294
141397
  const props = __props;
141295
141398
  const emit = __emit;
@@ -141305,6 +141408,15 @@ const _sfc_main$2M = /* @__PURE__ */ defineComponent({
141305
141408
  const isShareable = computed(() => {
141306
141409
  return props.item.file?.permissions?.can_share !== false;
141307
141410
  });
141411
+ const isPrintable = computed(() => {
141412
+ if (!launchDarkly.value.enable_file_sharing_print_permissions) {
141413
+ return true;
141414
+ }
141415
+ if (!isShareable.value) {
141416
+ return true;
141417
+ }
141418
+ return props.item.file?.permissions?.can_print !== false;
141419
+ });
141308
141420
  const canDownload = computed(() => {
141309
141421
  return mode.value === CanvasBuilderMode.SHARING && isDefaultDisplayMode.value && props.item.file?.permissions?.can_download !== false && canvasMetadata.value?.allow_download !== false;
141310
141422
  });
@@ -141378,6 +141490,15 @@ const _sfc_main$2M = /* @__PURE__ */ defineComponent({
141378
141490
  variation: "minimal"
141379
141491
  }, null, 8, ["background-color", "color"])), [
141380
141492
  [unref(vTooltip), unref(t)("canvasUI.components.ContentGrid.sharingDisabled")]
141493
+ ]) : createCommentVNode("", true),
141494
+ !isPrintable.value ? withDirectives((openBlock(), createBlock(_sfc_main$4W, {
141495
+ key: 1,
141496
+ "background-color": unref(themeVars).error2,
141497
+ color: unref(themeVars).error,
141498
+ icon: "print-slash",
141499
+ variation: "minimal"
141500
+ }, null, 8, ["background-color", "color"])), [
141501
+ [unref(vTooltip), unref(t)("canvasUI.components.ContentGrid.printingDisabled")]
141381
141502
  ]) : createCommentVNode("", true)
141382
141503
  ]),
141383
141504
  canDownload.value ? (openBlock(), createElementBlock("div", _hoisted_5$Q, [
@@ -141393,7 +141514,7 @@ const _sfc_main$2M = /* @__PURE__ */ defineComponent({
141393
141514
  }
141394
141515
  });
141395
141516
 
141396
- const ContentGridItem = /* @__PURE__ */ _export_sfc(_sfc_main$2M, [["__scopeId", "data-v-d0a87ee1"]]);
141517
+ const ContentGridItem = /* @__PURE__ */ _export_sfc(_sfc_main$2M, [["__scopeId", "data-v-a4be1f85"]]);
141397
141518
 
141398
141519
  const _hoisted_1$28 = ["onClick"];
141399
141520
  const _hoisted_2$1w = ["onClick"];
@@ -141540,7 +141661,7 @@ const _sfc_main$2K = /* @__PURE__ */ defineComponent({
141540
141661
  emits: ["deletedFileClicked"],
141541
141662
  setup(__props, { emit: __emit }) {
141542
141663
  useCssVars((_ctx) => ({
141543
- "cd2efdac": unref(themeVars).primary6
141664
+ "3f0f3834": unref(themeVars).primary6
141544
141665
  }));
141545
141666
  const { t } = useI18n();
141546
141667
  const vTooltip = tooltipDirective;
@@ -141664,6 +141785,15 @@ const _sfc_main$2K = /* @__PURE__ */ defineComponent({
141664
141785
  const expiresAt = computed(() => enrichedFile.value.expires_at || "");
141665
141786
  const isExpired = computed(() => isFileExpired(expiresAt.value));
141666
141787
  const isExpiring = computed(() => isFileExpiring(expiresAt.value));
141788
+ const isPrintable = computed(() => {
141789
+ if (!launchDarkly.value.enable_file_sharing_print_permissions) {
141790
+ return true;
141791
+ }
141792
+ if (enrichedFile.value?.permissions?.can_share === false) {
141793
+ return true;
141794
+ }
141795
+ return enrichedFile.value?.permissions?.can_print !== false;
141796
+ });
141667
141797
  const { hasValidThumbnail, handleImageError } = useImageAccessibility({
141668
141798
  thumbnailUrl,
141669
141799
  hasAIEnabled: computed(() => !!launchDarkly.value.enable_ai_generated_thumbnails),
@@ -141792,8 +141922,15 @@ const _sfc_main$2K = /* @__PURE__ */ defineComponent({
141792
141922
  icon: "solid-share-from-square-slash",
141793
141923
  text: unref(t)("canvasUI.files.notShareable")
141794
141924
  }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
141795
- Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
141925
+ !isPrintable.value ? (openBlock(), createBlock(_sfc_main$4W, {
141796
141926
  key: 3,
141927
+ "background-color": unref(themeVars).error2,
141928
+ color: unref(themeVars).error,
141929
+ icon: "print-slash",
141930
+ text: unref(t)("canvasUI.components.ContentGrid.printingDisabled")
141931
+ }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
141932
+ Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
141933
+ key: 4,
141797
141934
  class: "gap-2 mr-2",
141798
141935
  engagement: unref(launchDarkly).show_popularity_icons ? unref(popularityDict)[enrichedFile.value.id]?.engagement : void 0,
141799
141936
  "is-recommended": !!unref(recommendedSectionIds).includes(enrichedFile.value.id?.toString()),
@@ -141835,7 +141972,7 @@ const _sfc_main$2K = /* @__PURE__ */ defineComponent({
141835
141972
  }
141836
141973
  });
141837
141974
 
141838
- const ContentGridListItem = /* @__PURE__ */ _export_sfc(_sfc_main$2K, [["__scopeId", "data-v-1ade5c19"]]);
141975
+ const ContentGridListItem = /* @__PURE__ */ _export_sfc(_sfc_main$2K, [["__scopeId", "data-v-f1296b1d"]]);
141839
141976
 
141840
141977
  const _hoisted_1$26 = { class: "content-grid-list w-full rounded-2 flex bg-base p-4" };
141841
141978
  const _hoisted_2$1u = { class: "flex flex-col w-full" };
@@ -171825,6 +171962,22 @@ const _sfc_main$11 = /*@__PURE__*/defineComponent({
171825
171962
  };
171826
171963
  }
171827
171964
  });
171965
+ const isPrintable = computed(() => {
171966
+ if (!launchDarkly.value.enable_file_sharing_print_permissions) {
171967
+ return true;
171968
+ }
171969
+
171970
+ // If sharing is disabled, don't show print badge (sharing takes precedence)
171971
+ if (props.item.file?.permissions?.can_share === false) {
171972
+ return true;
171973
+ }
171974
+ const fileId = getFileId();
171975
+ const file = files.value?.[fileId];
171976
+ if (file) {
171977
+ return file.permissions?.can_print !== false;
171978
+ }
171979
+ return props.item.file?.permissions?.can_print !== false;
171980
+ });
171828
171981
  function handleActions(key) {
171829
171982
  switch (key) {
171830
171983
  case ReorderMenu$1.MoveUp:
@@ -171898,6 +172051,13 @@ const _sfc_main$11 = /*@__PURE__*/defineComponent({
171898
172051
  icon: "solid-share-from-square-slash",
171899
172052
  text: unref(t)('canvasUI.files.notShareable'),
171900
172053
  variation: "extended"
172054
+ }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true), !isPrintable.value ? (openBlock(), createBlock(_sfc_main$4W, {
172055
+ key: 1,
172056
+ "background-color": unref(themeVars).error2,
172057
+ color: unref(themeVars).error,
172058
+ icon: "print-slash",
172059
+ text: unref(t)('canvasUI.components.ContentGrid.printingDisabled'),
172060
+ variation: "extended"
171901
172061
  }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true), createVNode(_sfc_main$4U, {
171902
172062
  class: "flex gap-2 mr-2",
171903
172063
  engagement: unref(launchDarkly).show_popularity_icons ? unref(popularityDict)[unref(files)[getFileId()]?.id]?.engagement : undefined,
@@ -175402,7 +175562,7 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
175402
175562
  },
175403
175563
  setup(__props) {
175404
175564
  useCssVars((_ctx) => ({
175405
- "10ccf2df": unref(themeVars).primary6
175565
+ "7438e094": unref(themeVars).primary6
175406
175566
  }));
175407
175567
  const props = __props;
175408
175568
  const { t } = useI18n();
@@ -175627,8 +175787,15 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
175627
175787
  icon: "solid-share-from-square-slash",
175628
175788
  text: unref(t)("canvasUI.files.notShareable")
175629
175789
  }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
175630
- Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
175790
+ unref(launchDarkly).enable_file_sharing_print_permissions && _ctx.item?.permissions?.can_share !== false && _ctx.item?.permissions?.can_print === false ? (openBlock(), createBlock(_sfc_main$4W, {
175631
175791
  key: 2,
175792
+ "background-color": unref(themeVars).error2,
175793
+ color: unref(themeVars).error,
175794
+ icon: "print-slash",
175795
+ text: unref(t)("canvasUI.files.printingDisabled")
175796
+ }, null, 8, ["background-color", "color", "text"])) : createCommentVNode("", true),
175797
+ Object.keys(unref(popularityDict))?.length ? (openBlock(), createBlock(_sfc_main$4U, {
175798
+ key: 3,
175632
175799
  class: "gap-2 mr-2",
175633
175800
  engagement: unref(launchDarkly).show_popularity_icons ? unref(popularityDict)[_ctx.item.id]?.engagement : void 0,
175634
175801
  "is-recommended": !!unref(recommendedSectionIds).includes(_ctx.item.id?.toString()),
@@ -175649,7 +175816,7 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
175649
175816
  }
175650
175817
  });
175651
175818
 
175652
- const BrowserListItem = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["__scopeId", "data-v-8781de25"]]);
175819
+ const BrowserListItem = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["__scopeId", "data-v-f822adec"]]);
175653
175820
 
175654
175821
  const _sfc_main$C = /* @__PURE__ */ defineComponent({
175655
175822
  __name: "ContextMenuDropdown",
@@ -178465,14 +178632,19 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
178465
178632
  const fileInputRef = ref(null);
178466
178633
  const form = ref({
178467
178634
  permissions: {
178468
- can_share: true
178635
+ can_share: true,
178636
+ can_print: true
178469
178637
  },
178470
178638
  tags: [],
178471
178639
  expiresAtDateTime: pitcherSettings.value?.is_file_expiration_mandatory ? dayjs().add(7, "day").endOf("day").valueOf() : null,
178472
178640
  expiresAtOption: pitcherSettings.value?.is_file_expiration_mandatory ? "at" /* At */ : "never" /* Never */,
178473
178641
  accessType: appName.value === "admin" ? AccessTypeEnum.PUBLIC : AccessTypeEnum.RESTRICTED,
178474
178642
  collaborations: [],
178475
- metadata: {}
178643
+ metadata: {
178644
+ pitcher: {
178645
+ can_print: true
178646
+ }
178647
+ }
178476
178648
  });
178477
178649
  function onSelectFiles(selectedFiles) {
178478
178650
  uploadSelectedFiles.value = [...uploadSelectedFiles.value, ...selectedFiles];
@@ -178517,7 +178689,11 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
178517
178689
  });
178518
178690
  }
178519
178691
  const isPptxFile = getFileExtension(file) === "pptx";
178520
- const fileMetadata = { ...metadata.value };
178692
+ const fileMetadata = {
178693
+ ...metadata.value,
178694
+ ...form.value.metadata,
178695
+ pitcher: { ...metadata.value?.pitcher, ...form.value.metadata?.pitcher }
178696
+ };
178521
178697
  if (isPptxFile && shouldShowConvertPptxToHtml.value) {
178522
178698
  fileMetadata.convert_pptx_to_html = convertPptxToHtml.value;
178523
178699
  }