@procore/data-table 14.27.0 → 14.28.0-cdn.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Change Log
2
2
 
3
+ ## 15.0.0-cdn.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3f72970: Add placeholder implementation for MultiSelectCellRenderer component
8
+ - 8baa7c3: Update I18nprovider and DataTable to have the option to pull translations from the CDN
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [8baa7c3]
13
+ - @procore/core-react@12.21.0-cdn.0
14
+
15
+ ## 14.27.1
16
+
17
+ ### Patch Changes
18
+
19
+ - 03fe679: Fix layout issue in RowActionsCellStyles when closing side panel
20
+
3
21
  ## 14.27.0
4
22
 
5
23
  ### Minor Changes
@@ -12,6 +12,7 @@ var labsFinancialsUtils = require('@procore/labs-financials-utils');
12
12
  var styled4 = require('styled-components');
13
13
  var format = require('@procore/labs-financials-utils/dist/format');
14
14
  var ulid$1 = require('ulid');
15
+ var cdnTranslations = require('@procore/cdn-translations');
15
16
  var toastAlert = require('@procore/toast-alert');
16
17
  var ReactDOM = require('react-dom');
17
18
  var server = require('react-dom/server');
@@ -56336,9 +56337,7 @@ var css6 = `.ag-theme-alpine.ag-theme-alpine div.ag-cell[col-id=rowActions] {
56336
56337
  }
56337
56338
  .ag-theme-alpine.ag-theme-alpine .ag-cell[col-id=rowActions-pinned] {
56338
56339
  background: "transparent";
56339
- left: calc(var(--viewport-width) - var(--rowActions-width)) !important;
56340
56340
  padding: 2px 8px !important;
56341
- position: sticky;
56342
56341
  }`;
56343
56342
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css6));
56344
56343
 
@@ -57939,7 +57938,8 @@ function getId2(func, option) {
57939
57938
  return (func == null ? void 0 : func(option)) ?? (option == null ? void 0 : option.id) ?? option;
57940
57939
  }
57941
57940
  var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) => {
57942
- var _a, _b;
57941
+ var _a, _b, _c, _d;
57942
+ const I18n = coreReact.useI18nContext();
57943
57943
  const ref = React80__default.default.useRef();
57944
57944
  React80__default.default.useLayoutEffect(() => {
57945
57945
  var _a2, _b2;
@@ -57948,12 +57948,19 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57948
57948
  if (value === void 0 || value === null) {
57949
57949
  return null;
57950
57950
  }
57951
+ const options = getValue(
57952
+ (_a = columnDefinition.cellRendererParams) == null ? void 0 : _a.getValue,
57953
+ value,
57954
+ emptyArray
57955
+ );
57956
+ const enablePlaceholder = (((_b = columnDefinition.cellRendererParams) == null ? void 0 : _b.enablePlaceholder) && columnDefinition.editable) ?? false;
57957
+ const placeholder = ((_c = columnDefinition.cellRendererParams) == null ? void 0 : _c.placeholder) ?? I18n.t("dataTable.cells.multiSelectCell.placeholder");
57951
57958
  return /* @__PURE__ */ React80__default.default.createElement(
57952
57959
  coreReact.Typography,
57953
57960
  {
57954
57961
  as: "ol",
57955
57962
  ...getCellValueTypographyProps(
57956
- (_a = columnDefinition.cellRendererParams) == null ? void 0 : _a.typographyProps
57963
+ (_d = columnDefinition.cellRendererParams) == null ? void 0 : _d.typographyProps
57957
57964
  ),
57958
57965
  className: cx16("inlineListItems", "truncatingText", {
57959
57966
  "truncatingText--md": rowHeight === rowSize.md,
@@ -57961,29 +57968,19 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57961
57968
  }),
57962
57969
  ref
57963
57970
  },
57964
- getValue(
57965
- (_b = columnDefinition.cellRendererParams) == null ? void 0 : _b.getValue,
57966
- value,
57967
- emptyArray
57968
- ).map((option, idx, arr) => {
57969
- var _a2, _b2, _c;
57970
- return /* @__PURE__ */ React80__default.default.createElement(
57971
- React80__default.default.Fragment,
57972
- {
57973
- key: (
57974
- // eslint-disable-next-line react/no-array-index-key
57975
- `${getLabel2(
57976
- (_a2 = columnDefinition.cellRendererParams) == null ? void 0 : _a2.getLabel,
57977
- option
57978
- )}_${getId2(
57979
- (_b2 = columnDefinition.cellRendererParams) == null ? void 0 : _b2.getId,
57980
- option
57981
- )}_idx_${idx}`
57982
- )
57983
- },
57984
- /* @__PURE__ */ React80__default.default.createElement("li", null, getLabel2((_c = columnDefinition.cellRendererParams) == null ? void 0 : _c.getLabel, option), idx !== arr.length - 1 ? commaToken : null)
57971
+ options.length ? options.map((option, idx, arr) => {
57972
+ var _a2, _b2;
57973
+ const label = getLabel2(
57974
+ (_a2 = columnDefinition.cellRendererParams) == null ? void 0 : _a2.getLabel,
57975
+ option
57985
57976
  );
57986
- })
57977
+ const optionId = getId2(
57978
+ (_b2 = columnDefinition.cellRendererParams) == null ? void 0 : _b2.getId,
57979
+ option
57980
+ );
57981
+ const key = `${label}_${optionId}_idx_${idx}`;
57982
+ return /* @__PURE__ */ React80__default.default.createElement(React80__default.default.Fragment, { key }, /* @__PURE__ */ React80__default.default.createElement("li", null, label, idx !== arr.length - 1 ? commaToken : null));
57983
+ }) : enablePlaceholder ? /* @__PURE__ */ React80__default.default.createElement("li", { style: { color: coreReact.colors.gray45 } }, placeholder) : null
57987
57984
  );
57988
57985
  };
57989
57986
  var MultiSelectCellRenderer = withDataTableRenderer(
@@ -80059,17 +80056,17 @@ var Shape = class _Shape extends Node2 {
80059
80056
  let linearGradientMatch;
80060
80057
  if ((fill === null || fill === void 0 ? void 0 : fill.startsWith("linear-gradient")) && (linearGradientMatch = LINEAR_GRADIENT_REGEXP.exec(fill))) {
80061
80058
  const angle = parseFloat(linearGradientMatch[1]);
80062
- const colors8 = [];
80059
+ const colors9 = [];
80063
80060
  const colorsPart = linearGradientMatch[2];
80064
80061
  const colorRegex = /(#[0-9a-f]+)|(rgba?\(.+?\))|([a-z]+)/gi;
80065
80062
  let c;
80066
80063
  while (c = colorRegex.exec(colorsPart)) {
80067
- colors8.push(c[0]);
80064
+ colors9.push(c[0]);
80068
80065
  }
80069
80066
  this.gradient = new LinearGradient();
80070
80067
  this.gradient.angle = angle;
80071
- this.gradient.stops = colors8.map((color, index) => {
80072
- const offset4 = index / (colors8.length - 1);
80068
+ this.gradient.stops = colors9.map((color, index) => {
80069
+ const offset4 = index / (colors9.length - 1);
80073
80070
  return { offset: offset4, color };
80074
80071
  });
80075
80072
  } else {
@@ -106414,6 +106411,9 @@ var en_default = {
106414
106411
  selectCell: {
106415
106412
  placeholder: "Select {{label}}"
106416
106413
  },
106414
+ multiSelectCell: {
106415
+ placeholder: "Select Values"
106416
+ },
106417
106417
  booleanCell: {
106418
106418
  options: {
106419
106419
  yes: "Yes",
@@ -107718,6 +107718,9 @@ var pseudo_default = {
107718
107718
  selectCell: {
107719
107719
  placeholder: "[\u015E\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 {{\u0140\u0227\u0180\u1E17\u0140}}}}}]"
107720
107720
  },
107721
+ multiSelectCell: {
107722
+ placeholder: "[\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 \u1E7C\u0227\u0140\u016D\u1E17\u015F\u015F\u015F]"
107723
+ },
107721
107724
  booleanCell: {
107722
107725
  options: {
107723
107726
  yes: "[\u1E8E\u1E17\u015F]",
@@ -109229,7 +109232,8 @@ var DataTable = ({
109229
109232
  showExpandCollapseAllToggle,
109230
109233
  translations: translations2 = {},
109231
109234
  enableCellTextSelection,
109232
- localStoragePersistenceKey
109235
+ localStoragePersistenceKey,
109236
+ enableCDN
109233
109237
  }) => {
109234
109238
  const initialTableConfig = localStoragePersistenceKey && webSdkStorage.storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
109235
109239
  const onServerSideDataRequestRef = React80__default.default.useRef(onServerSideDataRequest);
@@ -109241,14 +109245,29 @@ var DataTable = ({
109241
109245
  );
109242
109246
  const contextPanel = useContextPanel();
109243
109247
  const clientI18n = coreReact.useI18nContext();
109248
+ const isCDNEnabled = enableCDN ?? (clientI18n == null ? void 0 : clientI18n.enableCDN) ?? false;
109249
+ const cdnTranslations$1 = cdnTranslations.useRequestTranslations(
109250
+ {
109251
+ locale: clientI18n.locale,
109252
+ type: "file",
109253
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
109254
+ },
109255
+ { en: translations.en },
109256
+ {
109257
+ translations,
109258
+ enableCDN: isCDNEnabled
109259
+ }
109260
+ );
109244
109261
  const internalI18n = coreReact.useI18n({
109245
- ...clientI18n,
109262
+ locale: clientI18n.locale,
109246
109263
  translations: ramda.mergeDeepLeft(
109247
109264
  ramda.mergeDeepLeft(clientI18n.translations, {
109248
109265
  [clientI18n.locale]: translations2
109249
109266
  }),
109250
- translations
109251
- )
109267
+ cdnTranslations$1.translations
109268
+ ),
109269
+ requestedTranslations: cdnTranslations$1,
109270
+ enableCDN: isCDNEnabled
109252
109271
  });
109253
109272
  const rowSelectionRef = React80__default.default.useRef({
109254
109273
  affectedRows: {},
@@ -112484,7 +112503,8 @@ var ClientSideDataTable = ({
112484
112503
  onTableConfigChange,
112485
112504
  translations: translations2 = {},
112486
112505
  enableCellTextSelection,
112487
- localStoragePersistenceKey
112506
+ localStoragePersistenceKey,
112507
+ enableCDN
112488
112508
  }) => {
112489
112509
  return /* @__PURE__ */ React80__default.default.createElement(
112490
112510
  DataTable,
@@ -112502,7 +112522,8 @@ var ClientSideDataTable = ({
112502
112522
  translations: translations2,
112503
112523
  localStoragePersistenceKey,
112504
112524
  customBulkEditorFields,
112505
- enableCellTextSelection
112525
+ enableCellTextSelection,
112526
+ enableCDN
112506
112527
  },
112507
112528
  children
112508
112529
  );
@@ -116963,7 +116984,8 @@ var ServerSideDataTable = ({
116963
116984
  enableCellTextSelection,
116964
116985
  showExpandCollapseAllToggle,
116965
116986
  translations: translations2 = {},
116966
- localStoragePersistenceKey
116987
+ localStoragePersistenceKey,
116988
+ enableCDN
116967
116989
  }) => {
116968
116990
  return /* @__PURE__ */ React80__default.default.createElement(
116969
116991
  DataTable,
@@ -116982,7 +117004,8 @@ var ServerSideDataTable = ({
116982
117004
  translations: translations2,
116983
117005
  customBulkEditorFields,
116984
117006
  enableCellTextSelection,
116985
- localStoragePersistenceKey
117007
+ localStoragePersistenceKey,
117008
+ enableCDN
116986
117009
  },
116987
117010
  children
116988
117011
  );
@@ -316,6 +316,8 @@ interface MultiSelectCellRendererParams<TValue, OptionValue> {
316
316
  getLabel?: (cellValue: OptionValue) => string;
317
317
  getValue?: (cellValue: TValue) => OptionValue[];
318
318
  typographyProps?: TypographyProps;
319
+ placeholder?: string;
320
+ enablePlaceholder?: boolean;
319
321
  }
320
322
  type OnSearchParams$1 = {
321
323
  data: MultiSelectCellEditorProps['data'];
@@ -1146,6 +1148,7 @@ interface DataTableProps {
1146
1148
  showExpandCollapseAllToggle?: boolean;
1147
1149
  translations?: DataTableTranslations;
1148
1150
  enableCellTextSelection?: boolean;
1151
+ enableCDN?: boolean;
1149
1152
  }
1150
1153
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1151
1154
  }
@@ -1435,7 +1438,7 @@ interface BulkActionProps {
1435
1438
  style?: React__default.CSSProperties;
1436
1439
  }
1437
1440
 
1438
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1441
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1439
1442
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1440
1443
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1441
1444
  ConfigPanelButton: React__default.FC<{}>;
@@ -1472,7 +1475,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1472
1475
 
1473
1476
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1474
1477
 
1475
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1478
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1476
1479
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1477
1480
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1478
1481
  ConfigPanelButton: React__default.FC<{}>;
@@ -316,6 +316,8 @@ interface MultiSelectCellRendererParams<TValue, OptionValue> {
316
316
  getLabel?: (cellValue: OptionValue) => string;
317
317
  getValue?: (cellValue: TValue) => OptionValue[];
318
318
  typographyProps?: TypographyProps;
319
+ placeholder?: string;
320
+ enablePlaceholder?: boolean;
319
321
  }
320
322
  type OnSearchParams$1 = {
321
323
  data: MultiSelectCellEditorProps['data'];
@@ -1146,6 +1148,7 @@ interface DataTableProps {
1146
1148
  showExpandCollapseAllToggle?: boolean;
1147
1149
  translations?: DataTableTranslations;
1148
1150
  enableCellTextSelection?: boolean;
1151
+ enableCDN?: boolean;
1149
1152
  }
1150
1153
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1151
1154
  }
@@ -1435,7 +1438,7 @@ interface BulkActionProps {
1435
1438
  style?: React__default.CSSProperties;
1436
1439
  }
1437
1440
 
1438
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1441
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1439
1442
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1440
1443
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1441
1444
  ConfigPanelButton: React__default.FC<{}>;
@@ -1472,7 +1475,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1472
1475
 
1473
1476
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1474
1477
 
1475
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1478
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1476
1479
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1477
1480
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1478
1481
  ConfigPanelButton: React__default.FC<{}>;
@@ -10,6 +10,7 @@ import { formatNumber, formatCurrency, formatPercentage } from '@procore/labs-fi
10
10
  import styled4, { css as css$1 } from 'styled-components';
11
11
  import { format } from '@procore/labs-financials-utils/dist/format';
12
12
  import { detectPrng, factory } from 'ulid';
13
+ import { useRequestTranslations } from '@procore/cdn-translations';
13
14
  import { useToastAlertContext, ToastAlertProvider } from '@procore/toast-alert';
14
15
  import ReactDOM, { createPortal } from 'react-dom';
15
16
  import { renderToString, renderToStaticMarkup } from 'react-dom/server';
@@ -56323,9 +56324,7 @@ var css6 = `.ag-theme-alpine.ag-theme-alpine div.ag-cell[col-id=rowActions] {
56323
56324
  }
56324
56325
  .ag-theme-alpine.ag-theme-alpine .ag-cell[col-id=rowActions-pinned] {
56325
56326
  background: "transparent";
56326
- left: calc(var(--viewport-width) - var(--rowActions-width)) !important;
56327
56327
  padding: 2px 8px !important;
56328
- position: sticky;
56329
56328
  }`;
56330
56329
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css6));
56331
56330
 
@@ -57926,7 +57925,8 @@ function getId2(func, option) {
57926
57925
  return (func == null ? void 0 : func(option)) ?? (option == null ? void 0 : option.id) ?? option;
57927
57926
  }
57928
57927
  var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) => {
57929
- var _a, _b;
57928
+ var _a, _b, _c, _d;
57929
+ const I18n = useI18nContext();
57930
57930
  const ref = React80.useRef();
57931
57931
  React80.useLayoutEffect(() => {
57932
57932
  var _a2, _b2;
@@ -57935,12 +57935,19 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57935
57935
  if (value === void 0 || value === null) {
57936
57936
  return null;
57937
57937
  }
57938
+ const options = getValue(
57939
+ (_a = columnDefinition.cellRendererParams) == null ? void 0 : _a.getValue,
57940
+ value,
57941
+ emptyArray
57942
+ );
57943
+ const enablePlaceholder = (((_b = columnDefinition.cellRendererParams) == null ? void 0 : _b.enablePlaceholder) && columnDefinition.editable) ?? false;
57944
+ const placeholder = ((_c = columnDefinition.cellRendererParams) == null ? void 0 : _c.placeholder) ?? I18n.t("dataTable.cells.multiSelectCell.placeholder");
57938
57945
  return /* @__PURE__ */ React80.createElement(
57939
57946
  Typography,
57940
57947
  {
57941
57948
  as: "ol",
57942
57949
  ...getCellValueTypographyProps(
57943
- (_a = columnDefinition.cellRendererParams) == null ? void 0 : _a.typographyProps
57950
+ (_d = columnDefinition.cellRendererParams) == null ? void 0 : _d.typographyProps
57944
57951
  ),
57945
57952
  className: cx16("inlineListItems", "truncatingText", {
57946
57953
  "truncatingText--md": rowHeight === rowSize.md,
@@ -57948,29 +57955,19 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57948
57955
  }),
57949
57956
  ref
57950
57957
  },
57951
- getValue(
57952
- (_b = columnDefinition.cellRendererParams) == null ? void 0 : _b.getValue,
57953
- value,
57954
- emptyArray
57955
- ).map((option, idx, arr) => {
57956
- var _a2, _b2, _c;
57957
- return /* @__PURE__ */ React80.createElement(
57958
- React80.Fragment,
57959
- {
57960
- key: (
57961
- // eslint-disable-next-line react/no-array-index-key
57962
- `${getLabel2(
57963
- (_a2 = columnDefinition.cellRendererParams) == null ? void 0 : _a2.getLabel,
57964
- option
57965
- )}_${getId2(
57966
- (_b2 = columnDefinition.cellRendererParams) == null ? void 0 : _b2.getId,
57967
- option
57968
- )}_idx_${idx}`
57969
- )
57970
- },
57971
- /* @__PURE__ */ React80.createElement("li", null, getLabel2((_c = columnDefinition.cellRendererParams) == null ? void 0 : _c.getLabel, option), idx !== arr.length - 1 ? commaToken : null)
57958
+ options.length ? options.map((option, idx, arr) => {
57959
+ var _a2, _b2;
57960
+ const label = getLabel2(
57961
+ (_a2 = columnDefinition.cellRendererParams) == null ? void 0 : _a2.getLabel,
57962
+ option
57972
57963
  );
57973
- })
57964
+ const optionId = getId2(
57965
+ (_b2 = columnDefinition.cellRendererParams) == null ? void 0 : _b2.getId,
57966
+ option
57967
+ );
57968
+ const key = `${label}_${optionId}_idx_${idx}`;
57969
+ return /* @__PURE__ */ React80.createElement(React80.Fragment, { key }, /* @__PURE__ */ React80.createElement("li", null, label, idx !== arr.length - 1 ? commaToken : null));
57970
+ }) : enablePlaceholder ? /* @__PURE__ */ React80.createElement("li", { style: { color: colors.gray45 } }, placeholder) : null
57974
57971
  );
57975
57972
  };
57976
57973
  var MultiSelectCellRenderer = withDataTableRenderer(
@@ -80046,17 +80043,17 @@ var Shape = class _Shape extends Node2 {
80046
80043
  let linearGradientMatch;
80047
80044
  if ((fill === null || fill === void 0 ? void 0 : fill.startsWith("linear-gradient")) && (linearGradientMatch = LINEAR_GRADIENT_REGEXP.exec(fill))) {
80048
80045
  const angle = parseFloat(linearGradientMatch[1]);
80049
- const colors8 = [];
80046
+ const colors9 = [];
80050
80047
  const colorsPart = linearGradientMatch[2];
80051
80048
  const colorRegex = /(#[0-9a-f]+)|(rgba?\(.+?\))|([a-z]+)/gi;
80052
80049
  let c;
80053
80050
  while (c = colorRegex.exec(colorsPart)) {
80054
- colors8.push(c[0]);
80051
+ colors9.push(c[0]);
80055
80052
  }
80056
80053
  this.gradient = new LinearGradient();
80057
80054
  this.gradient.angle = angle;
80058
- this.gradient.stops = colors8.map((color, index) => {
80059
- const offset4 = index / (colors8.length - 1);
80055
+ this.gradient.stops = colors9.map((color, index) => {
80056
+ const offset4 = index / (colors9.length - 1);
80060
80057
  return { offset: offset4, color };
80061
80058
  });
80062
80059
  } else {
@@ -106401,6 +106398,9 @@ var en_default = {
106401
106398
  selectCell: {
106402
106399
  placeholder: "Select {{label}}"
106403
106400
  },
106401
+ multiSelectCell: {
106402
+ placeholder: "Select Values"
106403
+ },
106404
106404
  booleanCell: {
106405
106405
  options: {
106406
106406
  yes: "Yes",
@@ -107705,6 +107705,9 @@ var pseudo_default = {
107705
107705
  selectCell: {
107706
107706
  placeholder: "[\u015E\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 {{\u0140\u0227\u0180\u1E17\u0140}}}}}]"
107707
107707
  },
107708
+ multiSelectCell: {
107709
+ placeholder: "[\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 \u1E7C\u0227\u0140\u016D\u1E17\u015F\u015F\u015F]"
107710
+ },
107708
107711
  booleanCell: {
107709
107712
  options: {
107710
107713
  yes: "[\u1E8E\u1E17\u015F]",
@@ -109216,7 +109219,8 @@ var DataTable = ({
109216
109219
  showExpandCollapseAllToggle,
109217
109220
  translations: translations2 = {},
109218
109221
  enableCellTextSelection,
109219
- localStoragePersistenceKey
109222
+ localStoragePersistenceKey,
109223
+ enableCDN
109220
109224
  }) => {
109221
109225
  const initialTableConfig = localStoragePersistenceKey && storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
109222
109226
  const onServerSideDataRequestRef = React80.useRef(onServerSideDataRequest);
@@ -109228,14 +109232,29 @@ var DataTable = ({
109228
109232
  );
109229
109233
  const contextPanel = useContextPanel();
109230
109234
  const clientI18n = useI18nContext();
109235
+ const isCDNEnabled = enableCDN ?? (clientI18n == null ? void 0 : clientI18n.enableCDN) ?? false;
109236
+ const cdnTranslations = useRequestTranslations(
109237
+ {
109238
+ locale: clientI18n.locale,
109239
+ type: "file",
109240
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
109241
+ },
109242
+ { en: translations.en },
109243
+ {
109244
+ translations,
109245
+ enableCDN: isCDNEnabled
109246
+ }
109247
+ );
109231
109248
  const internalI18n = useI18n({
109232
- ...clientI18n,
109249
+ locale: clientI18n.locale,
109233
109250
  translations: mergeDeepLeft(
109234
109251
  mergeDeepLeft(clientI18n.translations, {
109235
109252
  [clientI18n.locale]: translations2
109236
109253
  }),
109237
- translations
109238
- )
109254
+ cdnTranslations.translations
109255
+ ),
109256
+ requestedTranslations: cdnTranslations,
109257
+ enableCDN: isCDNEnabled
109239
109258
  });
109240
109259
  const rowSelectionRef = React80.useRef({
109241
109260
  affectedRows: {},
@@ -112471,7 +112490,8 @@ var ClientSideDataTable = ({
112471
112490
  onTableConfigChange,
112472
112491
  translations: translations2 = {},
112473
112492
  enableCellTextSelection,
112474
- localStoragePersistenceKey
112493
+ localStoragePersistenceKey,
112494
+ enableCDN
112475
112495
  }) => {
112476
112496
  return /* @__PURE__ */ React80.createElement(
112477
112497
  DataTable,
@@ -112489,7 +112509,8 @@ var ClientSideDataTable = ({
112489
112509
  translations: translations2,
112490
112510
  localStoragePersistenceKey,
112491
112511
  customBulkEditorFields,
112492
- enableCellTextSelection
112512
+ enableCellTextSelection,
112513
+ enableCDN
112493
112514
  },
112494
112515
  children
112495
112516
  );
@@ -116950,7 +116971,8 @@ var ServerSideDataTable = ({
116950
116971
  enableCellTextSelection,
116951
116972
  showExpandCollapseAllToggle,
116952
116973
  translations: translations2 = {},
116953
- localStoragePersistenceKey
116974
+ localStoragePersistenceKey,
116975
+ enableCDN
116954
116976
  }) => {
116955
116977
  return /* @__PURE__ */ React80.createElement(
116956
116978
  DataTable,
@@ -116969,7 +116991,8 @@ var ServerSideDataTable = ({
116969
116991
  translations: translations2,
116970
116992
  customBulkEditorFields,
116971
116993
  enableCellTextSelection,
116972
- localStoragePersistenceKey
116994
+ localStoragePersistenceKey,
116995
+ enableCDN
116973
116996
  },
116974
116997
  children
116975
116998
  );
@@ -12,6 +12,7 @@ var labsFinancialsUtils = require('@procore/labs-financials-utils');
12
12
  var styled4 = require('styled-components');
13
13
  var format = require('@procore/labs-financials-utils/dist/format');
14
14
  var ulid$1 = require('ulid');
15
+ var cdnTranslations = require('@procore/cdn-translations');
15
16
  var toastAlert = require('@procore/toast-alert');
16
17
  var ReactDOM = require('react-dom');
17
18
  var server = require('react-dom/server');
@@ -56248,9 +56249,7 @@ var css6 = `.ag-theme-alpine.ag-theme-alpine div.ag-cell[col-id=rowActions] {
56248
56249
  }
56249
56250
  .ag-theme-alpine.ag-theme-alpine .ag-cell[col-id=rowActions-pinned] {
56250
56251
  background: "transparent";
56251
- left: calc(var(--viewport-width) - var(--rowActions-width)) !important;
56252
56252
  padding: 2px 8px !important;
56253
- position: sticky;
56254
56253
  }`;
56255
56254
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css6));
56256
56255
 
@@ -57827,6 +57826,7 @@ function getId2(func, option) {
57827
57826
  return func?.(option) ?? option?.id ?? option;
57828
57827
  }
57829
57828
  var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) => {
57829
+ const I18n = coreReact.useI18nContext();
57830
57830
  const ref = React80__default.default.useRef();
57831
57831
  React80__default.default.useLayoutEffect(() => {
57832
57832
  ref?.current?.setAttribute("title", ref?.current?.innerText);
@@ -57834,6 +57834,13 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57834
57834
  if (value === void 0 || value === null) {
57835
57835
  return null;
57836
57836
  }
57837
+ const options = getValue(
57838
+ columnDefinition.cellRendererParams?.getValue,
57839
+ value,
57840
+ emptyArray
57841
+ );
57842
+ const enablePlaceholder = (columnDefinition.cellRendererParams?.enablePlaceholder && columnDefinition.editable) ?? false;
57843
+ const placeholder = columnDefinition.cellRendererParams?.placeholder ?? I18n.t("dataTable.cells.multiSelectCell.placeholder");
57837
57844
  return /* @__PURE__ */ React80__default.default.createElement(
57838
57845
  coreReact.Typography,
57839
57846
  {
@@ -57847,26 +57854,18 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57847
57854
  }),
57848
57855
  ref
57849
57856
  },
57850
- getValue(
57851
- columnDefinition.cellRendererParams?.getValue,
57852
- value,
57853
- emptyArray
57854
- ).map((option, idx, arr) => /* @__PURE__ */ React80__default.default.createElement(
57855
- React80__default.default.Fragment,
57856
- {
57857
- key: (
57858
- // eslint-disable-next-line react/no-array-index-key
57859
- `${getLabel2(
57860
- columnDefinition.cellRendererParams?.getLabel,
57861
- option
57862
- )}_${getId2(
57863
- columnDefinition.cellRendererParams?.getId,
57864
- option
57865
- )}_idx_${idx}`
57866
- )
57867
- },
57868
- /* @__PURE__ */ React80__default.default.createElement("li", null, getLabel2(columnDefinition.cellRendererParams?.getLabel, option), idx !== arr.length - 1 ? commaToken : null)
57869
- ))
57857
+ options.length ? options.map((option, idx, arr) => {
57858
+ const label = getLabel2(
57859
+ columnDefinition.cellRendererParams?.getLabel,
57860
+ option
57861
+ );
57862
+ const optionId = getId2(
57863
+ columnDefinition.cellRendererParams?.getId,
57864
+ option
57865
+ );
57866
+ const key = `${label}_${optionId}_idx_${idx}`;
57867
+ return /* @__PURE__ */ React80__default.default.createElement(React80__default.default.Fragment, { key }, /* @__PURE__ */ React80__default.default.createElement("li", null, label, idx !== arr.length - 1 ? commaToken : null));
57868
+ }) : enablePlaceholder ? /* @__PURE__ */ React80__default.default.createElement("li", { style: { color: coreReact.colors.gray45 } }, placeholder) : null
57870
57869
  );
57871
57870
  };
57872
57871
  var MultiSelectCellRenderer = withDataTableRenderer(
@@ -79926,17 +79925,17 @@ var Shape = class _Shape extends Node2 {
79926
79925
  let linearGradientMatch;
79927
79926
  if ((fill === null || fill === void 0 ? void 0 : fill.startsWith("linear-gradient")) && (linearGradientMatch = LINEAR_GRADIENT_REGEXP.exec(fill))) {
79928
79927
  const angle = parseFloat(linearGradientMatch[1]);
79929
- const colors8 = [];
79928
+ const colors9 = [];
79930
79929
  const colorsPart = linearGradientMatch[2];
79931
79930
  const colorRegex = /(#[0-9a-f]+)|(rgba?\(.+?\))|([a-z]+)/gi;
79932
79931
  let c;
79933
79932
  while (c = colorRegex.exec(colorsPart)) {
79934
- colors8.push(c[0]);
79933
+ colors9.push(c[0]);
79935
79934
  }
79936
79935
  this.gradient = new LinearGradient();
79937
79936
  this.gradient.angle = angle;
79938
- this.gradient.stops = colors8.map((color, index) => {
79939
- const offset4 = index / (colors8.length - 1);
79937
+ this.gradient.stops = colors9.map((color, index) => {
79938
+ const offset4 = index / (colors9.length - 1);
79940
79939
  return { offset: offset4, color };
79941
79940
  });
79942
79941
  } else {
@@ -106246,6 +106245,9 @@ var en_default = {
106246
106245
  selectCell: {
106247
106246
  placeholder: "Select {{label}}"
106248
106247
  },
106248
+ multiSelectCell: {
106249
+ placeholder: "Select Values"
106250
+ },
106249
106251
  booleanCell: {
106250
106252
  options: {
106251
106253
  yes: "Yes",
@@ -107550,6 +107552,9 @@ var pseudo_default = {
107550
107552
  selectCell: {
107551
107553
  placeholder: "[\u015E\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 {{\u0140\u0227\u0180\u1E17\u0140}}}}}]"
107552
107554
  },
107555
+ multiSelectCell: {
107556
+ placeholder: "[\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 \u1E7C\u0227\u0140\u016D\u1E17\u015F\u015F\u015F]"
107557
+ },
107553
107558
  booleanCell: {
107554
107559
  options: {
107555
107560
  yes: "[\u1E8E\u1E17\u015F]",
@@ -109047,7 +109052,8 @@ var DataTable = ({
109047
109052
  showExpandCollapseAllToggle,
109048
109053
  translations: translations2 = {},
109049
109054
  enableCellTextSelection,
109050
- localStoragePersistenceKey
109055
+ localStoragePersistenceKey,
109056
+ enableCDN
109051
109057
  }) => {
109052
109058
  const initialTableConfig = localStoragePersistenceKey && webSdkStorage.storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
109053
109059
  const onServerSideDataRequestRef = React80__default.default.useRef(onServerSideDataRequest);
@@ -109059,14 +109065,29 @@ var DataTable = ({
109059
109065
  );
109060
109066
  const contextPanel = useContextPanel();
109061
109067
  const clientI18n = coreReact.useI18nContext();
109068
+ const isCDNEnabled = enableCDN ?? clientI18n?.enableCDN ?? false;
109069
+ const cdnTranslations$1 = cdnTranslations.useRequestTranslations(
109070
+ {
109071
+ locale: clientI18n.locale,
109072
+ type: "file",
109073
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
109074
+ },
109075
+ { en: translations.en },
109076
+ {
109077
+ translations,
109078
+ enableCDN: isCDNEnabled
109079
+ }
109080
+ );
109062
109081
  const internalI18n = coreReact.useI18n({
109063
- ...clientI18n,
109082
+ locale: clientI18n.locale,
109064
109083
  translations: ramda.mergeDeepLeft(
109065
109084
  ramda.mergeDeepLeft(clientI18n.translations, {
109066
109085
  [clientI18n.locale]: translations2
109067
109086
  }),
109068
- translations
109069
- )
109087
+ cdnTranslations$1.translations
109088
+ ),
109089
+ requestedTranslations: cdnTranslations$1,
109090
+ enableCDN: isCDNEnabled
109070
109091
  });
109071
109092
  const rowSelectionRef = React80__default.default.useRef({
109072
109093
  affectedRows: {},
@@ -112220,7 +112241,8 @@ var ClientSideDataTable = ({
112220
112241
  onTableConfigChange,
112221
112242
  translations: translations2 = {},
112222
112243
  enableCellTextSelection,
112223
- localStoragePersistenceKey
112244
+ localStoragePersistenceKey,
112245
+ enableCDN
112224
112246
  }) => {
112225
112247
  return /* @__PURE__ */ React80__default.default.createElement(
112226
112248
  DataTable,
@@ -112238,7 +112260,8 @@ var ClientSideDataTable = ({
112238
112260
  translations: translations2,
112239
112261
  localStoragePersistenceKey,
112240
112262
  customBulkEditorFields,
112241
- enableCellTextSelection
112263
+ enableCellTextSelection,
112264
+ enableCDN
112242
112265
  },
112243
112266
  children
112244
112267
  );
@@ -116698,7 +116721,8 @@ var ServerSideDataTable = ({
116698
116721
  enableCellTextSelection,
116699
116722
  showExpandCollapseAllToggle,
116700
116723
  translations: translations2 = {},
116701
- localStoragePersistenceKey
116724
+ localStoragePersistenceKey,
116725
+ enableCDN
116702
116726
  }) => {
116703
116727
  return /* @__PURE__ */ React80__default.default.createElement(
116704
116728
  DataTable,
@@ -116717,7 +116741,8 @@ var ServerSideDataTable = ({
116717
116741
  translations: translations2,
116718
116742
  customBulkEditorFields,
116719
116743
  enableCellTextSelection,
116720
- localStoragePersistenceKey
116744
+ localStoragePersistenceKey,
116745
+ enableCDN
116721
116746
  },
116722
116747
  children
116723
116748
  );
@@ -316,6 +316,8 @@ interface MultiSelectCellRendererParams<TValue, OptionValue> {
316
316
  getLabel?: (cellValue: OptionValue) => string;
317
317
  getValue?: (cellValue: TValue) => OptionValue[];
318
318
  typographyProps?: TypographyProps;
319
+ placeholder?: string;
320
+ enablePlaceholder?: boolean;
319
321
  }
320
322
  type OnSearchParams$1 = {
321
323
  data: MultiSelectCellEditorProps['data'];
@@ -1146,6 +1148,7 @@ interface DataTableProps {
1146
1148
  showExpandCollapseAllToggle?: boolean;
1147
1149
  translations?: DataTableTranslations;
1148
1150
  enableCellTextSelection?: boolean;
1151
+ enableCDN?: boolean;
1149
1152
  }
1150
1153
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1151
1154
  }
@@ -1435,7 +1438,7 @@ interface BulkActionProps {
1435
1438
  style?: React__default.CSSProperties;
1436
1439
  }
1437
1440
 
1438
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1441
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1439
1442
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1440
1443
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1441
1444
  ConfigPanelButton: React__default.FC<{}>;
@@ -1472,7 +1475,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1472
1475
 
1473
1476
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1474
1477
 
1475
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1478
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1476
1479
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1477
1480
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1478
1481
  ConfigPanelButton: React__default.FC<{}>;
@@ -316,6 +316,8 @@ interface MultiSelectCellRendererParams<TValue, OptionValue> {
316
316
  getLabel?: (cellValue: OptionValue) => string;
317
317
  getValue?: (cellValue: TValue) => OptionValue[];
318
318
  typographyProps?: TypographyProps;
319
+ placeholder?: string;
320
+ enablePlaceholder?: boolean;
319
321
  }
320
322
  type OnSearchParams$1 = {
321
323
  data: MultiSelectCellEditorProps['data'];
@@ -1146,6 +1148,7 @@ interface DataTableProps {
1146
1148
  showExpandCollapseAllToggle?: boolean;
1147
1149
  translations?: DataTableTranslations;
1148
1150
  enableCellTextSelection?: boolean;
1151
+ enableCDN?: boolean;
1149
1152
  }
1150
1153
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1151
1154
  }
@@ -1435,7 +1438,7 @@ interface BulkActionProps {
1435
1438
  style?: React__default.CSSProperties;
1436
1439
  }
1437
1440
 
1438
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1441
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1439
1442
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1440
1443
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1441
1444
  ConfigPanelButton: React__default.FC<{}>;
@@ -1472,7 +1475,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1472
1475
 
1473
1476
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1474
1477
 
1475
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1478
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1476
1479
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1477
1480
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1478
1481
  ConfigPanelButton: React__default.FC<{}>;
@@ -10,6 +10,7 @@ import { formatNumber, formatCurrency, formatPercentage } from '@procore/labs-fi
10
10
  import styled4, { css as css$1 } from 'styled-components';
11
11
  import { format } from '@procore/labs-financials-utils/dist/format';
12
12
  import { detectPrng, factory } from 'ulid';
13
+ import { useRequestTranslations } from '@procore/cdn-translations';
13
14
  import { useToastAlertContext, ToastAlertProvider } from '@procore/toast-alert';
14
15
  import ReactDOM, { createPortal } from 'react-dom';
15
16
  import { renderToString, renderToStaticMarkup } from 'react-dom/server';
@@ -56235,9 +56236,7 @@ var css6 = `.ag-theme-alpine.ag-theme-alpine div.ag-cell[col-id=rowActions] {
56235
56236
  }
56236
56237
  .ag-theme-alpine.ag-theme-alpine .ag-cell[col-id=rowActions-pinned] {
56237
56238
  background: "transparent";
56238
- left: calc(var(--viewport-width) - var(--rowActions-width)) !important;
56239
56239
  padding: 2px 8px !important;
56240
- position: sticky;
56241
56240
  }`;
56242
56241
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css6));
56243
56242
 
@@ -57814,6 +57813,7 @@ function getId2(func, option) {
57814
57813
  return func?.(option) ?? option?.id ?? option;
57815
57814
  }
57816
57815
  var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) => {
57816
+ const I18n = useI18nContext();
57817
57817
  const ref = React80.useRef();
57818
57818
  React80.useLayoutEffect(() => {
57819
57819
  ref?.current?.setAttribute("title", ref?.current?.innerText);
@@ -57821,6 +57821,13 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57821
57821
  if (value === void 0 || value === null) {
57822
57822
  return null;
57823
57823
  }
57824
+ const options = getValue(
57825
+ columnDefinition.cellRendererParams?.getValue,
57826
+ value,
57827
+ emptyArray
57828
+ );
57829
+ const enablePlaceholder = (columnDefinition.cellRendererParams?.enablePlaceholder && columnDefinition.editable) ?? false;
57830
+ const placeholder = columnDefinition.cellRendererParams?.placeholder ?? I18n.t("dataTable.cells.multiSelectCell.placeholder");
57824
57831
  return /* @__PURE__ */ React80.createElement(
57825
57832
  Typography,
57826
57833
  {
@@ -57834,26 +57841,18 @@ var InternalMultiSelectCellRenderer = ({ columnDefinition, rowHeight, value }) =
57834
57841
  }),
57835
57842
  ref
57836
57843
  },
57837
- getValue(
57838
- columnDefinition.cellRendererParams?.getValue,
57839
- value,
57840
- emptyArray
57841
- ).map((option, idx, arr) => /* @__PURE__ */ React80.createElement(
57842
- React80.Fragment,
57843
- {
57844
- key: (
57845
- // eslint-disable-next-line react/no-array-index-key
57846
- `${getLabel2(
57847
- columnDefinition.cellRendererParams?.getLabel,
57848
- option
57849
- )}_${getId2(
57850
- columnDefinition.cellRendererParams?.getId,
57851
- option
57852
- )}_idx_${idx}`
57853
- )
57854
- },
57855
- /* @__PURE__ */ React80.createElement("li", null, getLabel2(columnDefinition.cellRendererParams?.getLabel, option), idx !== arr.length - 1 ? commaToken : null)
57856
- ))
57844
+ options.length ? options.map((option, idx, arr) => {
57845
+ const label = getLabel2(
57846
+ columnDefinition.cellRendererParams?.getLabel,
57847
+ option
57848
+ );
57849
+ const optionId = getId2(
57850
+ columnDefinition.cellRendererParams?.getId,
57851
+ option
57852
+ );
57853
+ const key = `${label}_${optionId}_idx_${idx}`;
57854
+ return /* @__PURE__ */ React80.createElement(React80.Fragment, { key }, /* @__PURE__ */ React80.createElement("li", null, label, idx !== arr.length - 1 ? commaToken : null));
57855
+ }) : enablePlaceholder ? /* @__PURE__ */ React80.createElement("li", { style: { color: colors.gray45 } }, placeholder) : null
57857
57856
  );
57858
57857
  };
57859
57858
  var MultiSelectCellRenderer = withDataTableRenderer(
@@ -79913,17 +79912,17 @@ var Shape = class _Shape extends Node2 {
79913
79912
  let linearGradientMatch;
79914
79913
  if ((fill === null || fill === void 0 ? void 0 : fill.startsWith("linear-gradient")) && (linearGradientMatch = LINEAR_GRADIENT_REGEXP.exec(fill))) {
79915
79914
  const angle = parseFloat(linearGradientMatch[1]);
79916
- const colors8 = [];
79915
+ const colors9 = [];
79917
79916
  const colorsPart = linearGradientMatch[2];
79918
79917
  const colorRegex = /(#[0-9a-f]+)|(rgba?\(.+?\))|([a-z]+)/gi;
79919
79918
  let c;
79920
79919
  while (c = colorRegex.exec(colorsPart)) {
79921
- colors8.push(c[0]);
79920
+ colors9.push(c[0]);
79922
79921
  }
79923
79922
  this.gradient = new LinearGradient();
79924
79923
  this.gradient.angle = angle;
79925
- this.gradient.stops = colors8.map((color, index) => {
79926
- const offset4 = index / (colors8.length - 1);
79924
+ this.gradient.stops = colors9.map((color, index) => {
79925
+ const offset4 = index / (colors9.length - 1);
79927
79926
  return { offset: offset4, color };
79928
79927
  });
79929
79928
  } else {
@@ -106233,6 +106232,9 @@ var en_default = {
106233
106232
  selectCell: {
106234
106233
  placeholder: "Select {{label}}"
106235
106234
  },
106235
+ multiSelectCell: {
106236
+ placeholder: "Select Values"
106237
+ },
106236
106238
  booleanCell: {
106237
106239
  options: {
106238
106240
  yes: "Yes",
@@ -107537,6 +107539,9 @@ var pseudo_default = {
107537
107539
  selectCell: {
107538
107540
  placeholder: "[\u015E\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 {{\u0140\u0227\u0180\u1E17\u0140}}}}}]"
107539
107541
  },
107542
+ multiSelectCell: {
107543
+ placeholder: "[\u015E\u015E\u015E\u1E17\u0140\u1E17\u0188\u0167 \xB7 \u1E7C\u0227\u0140\u016D\u1E17\u015F\u015F\u015F]"
107544
+ },
107540
107545
  booleanCell: {
107541
107546
  options: {
107542
107547
  yes: "[\u1E8E\u1E17\u015F]",
@@ -109034,7 +109039,8 @@ var DataTable = ({
109034
109039
  showExpandCollapseAllToggle,
109035
109040
  translations: translations2 = {},
109036
109041
  enableCellTextSelection,
109037
- localStoragePersistenceKey
109042
+ localStoragePersistenceKey,
109043
+ enableCDN
109038
109044
  }) => {
109039
109045
  const initialTableConfig = localStoragePersistenceKey && storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
109040
109046
  const onServerSideDataRequestRef = React80.useRef(onServerSideDataRequest);
@@ -109046,14 +109052,29 @@ var DataTable = ({
109046
109052
  );
109047
109053
  const contextPanel = useContextPanel();
109048
109054
  const clientI18n = useI18nContext();
109055
+ const isCDNEnabled = enableCDN ?? clientI18n?.enableCDN ?? false;
109056
+ const cdnTranslations = useRequestTranslations(
109057
+ {
109058
+ locale: clientI18n.locale,
109059
+ type: "file",
109060
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
109061
+ },
109062
+ { en: translations.en },
109063
+ {
109064
+ translations,
109065
+ enableCDN: isCDNEnabled
109066
+ }
109067
+ );
109049
109068
  const internalI18n = useI18n({
109050
- ...clientI18n,
109069
+ locale: clientI18n.locale,
109051
109070
  translations: mergeDeepLeft(
109052
109071
  mergeDeepLeft(clientI18n.translations, {
109053
109072
  [clientI18n.locale]: translations2
109054
109073
  }),
109055
- translations
109056
- )
109074
+ cdnTranslations.translations
109075
+ ),
109076
+ requestedTranslations: cdnTranslations,
109077
+ enableCDN: isCDNEnabled
109057
109078
  });
109058
109079
  const rowSelectionRef = React80.useRef({
109059
109080
  affectedRows: {},
@@ -112207,7 +112228,8 @@ var ClientSideDataTable = ({
112207
112228
  onTableConfigChange,
112208
112229
  translations: translations2 = {},
112209
112230
  enableCellTextSelection,
112210
- localStoragePersistenceKey
112231
+ localStoragePersistenceKey,
112232
+ enableCDN
112211
112233
  }) => {
112212
112234
  return /* @__PURE__ */ React80.createElement(
112213
112235
  DataTable,
@@ -112225,7 +112247,8 @@ var ClientSideDataTable = ({
112225
112247
  translations: translations2,
112226
112248
  localStoragePersistenceKey,
112227
112249
  customBulkEditorFields,
112228
- enableCellTextSelection
112250
+ enableCellTextSelection,
112251
+ enableCDN
112229
112252
  },
112230
112253
  children
112231
112254
  );
@@ -116685,7 +116708,8 @@ var ServerSideDataTable = ({
116685
116708
  enableCellTextSelection,
116686
116709
  showExpandCollapseAllToggle,
116687
116710
  translations: translations2 = {},
116688
- localStoragePersistenceKey
116711
+ localStoragePersistenceKey,
116712
+ enableCDN
116689
116713
  }) => {
116690
116714
  return /* @__PURE__ */ React80.createElement(
116691
116715
  DataTable,
@@ -116704,7 +116728,8 @@ var ServerSideDataTable = ({
116704
116728
  translations: translations2,
116705
116729
  customBulkEditorFields,
116706
116730
  enableCellTextSelection,
116707
- localStoragePersistenceKey
116731
+ localStoragePersistenceKey,
116732
+ enableCDN
116708
116733
  },
116709
116734
  children
116710
116735
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "14.27.0",
3
+ "version": "14.28.0-cdn.0",
4
4
  "description": "Complex data grid built on top of ag-grid, with DST components and styles.",
5
5
  "type": "module",
6
6
  "main": "dist/legacy/index.cjs",
@@ -79,6 +79,7 @@
79
79
  "styled-components": ">= 5.1.1 < 6"
80
80
  },
81
81
  "dependencies": {
82
+ "@procore/cdn-translations": "0.0.5",
82
83
  "@procore/error-pages": "0.2.1",
83
84
  "@procore/labs-datetime-select": "0.1.1",
84
85
  "@procore/labs-group-by-select": "4.0.0",
@@ -111,9 +112,9 @@
111
112
  "@dotenvx/dotenvx": "1.6.4",
112
113
  "@ngneat/falso": "6.4.0",
113
114
  "@procore/core-css": "10.17.0",
114
- "@procore/core-icons": "12.4.0",
115
+ "@procore/core-icons": "12.6.0",
115
116
  "@procore/core-prettier": "10.2.0",
116
- "@procore/core-react": "12.20.2",
117
+ "@procore/core-react": "12.21.0-cdn.0",
117
118
  "@procore/eslint-config": "10.0.0",
118
119
  "@procore/globalization-toolkit": "3.1.0",
119
120
  "@procore/labs-financials-utils": "4.3.1",