@osdk/react-components 0.42.0 → 0.42.1-main-c2df0ff9bca538cb5747ee367d134cca9d658f9a

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 (83) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/browser/cbac-picker/CbacPicker.js +4 -2
  3. package/build/browser/cbac-picker/CbacPicker.js.map +1 -1
  4. package/build/browser/cbac-picker/CbacPickerDialog.js +4 -2
  5. package/build/browser/cbac-picker/CbacPickerDialog.js.map +1 -1
  6. package/build/browser/cbac-picker/ConstraintCallout.js +41 -0
  7. package/build/browser/cbac-picker/ConstraintCallout.js.map +1 -0
  8. package/build/browser/filter-list/base/inputs/ListogramInput.js +16 -10
  9. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  10. package/build/browser/util/UserAgent.js +1 -1
  11. package/build/browser/util/UserAgent.js.map +1 -1
  12. package/build/cjs/chunk-2JPNALYV.cjs +11 -0
  13. package/build/cjs/{chunk-EBETL5JH.cjs.map → chunk-2JPNALYV.cjs.map} +1 -1
  14. package/build/cjs/{chunk-LBKU7GZF.cjs → chunk-32KJZGKR.cjs} +4 -4
  15. package/build/cjs/{chunk-LBKU7GZF.cjs.map → chunk-32KJZGKR.cjs.map} +1 -1
  16. package/build/cjs/{chunk-624IRN3R.cjs → chunk-6JACTAMD.cjs} +4 -4
  17. package/build/cjs/{chunk-624IRN3R.cjs.map → chunk-6JACTAMD.cjs.map} +1 -1
  18. package/build/cjs/{chunk-3KJOYT3V.cjs → chunk-BLJ6HPHM.cjs} +4 -4
  19. package/build/cjs/{chunk-3KJOYT3V.cjs.map → chunk-BLJ6HPHM.cjs.map} +1 -1
  20. package/build/cjs/chunk-FTPTRIBH.cjs +11 -0
  21. package/build/cjs/{chunk-FG2HAGFV.cjs.map → chunk-FTPTRIBH.cjs.map} +1 -1
  22. package/build/cjs/{chunk-R4FYBJIX.cjs → chunk-JLT2TBVX.cjs} +54 -55
  23. package/build/cjs/chunk-JLT2TBVX.cjs.map +1 -0
  24. package/build/cjs/chunk-N3PKYGVC.cjs +11 -0
  25. package/build/cjs/{chunk-LVMML6YM.cjs.map → chunk-N3PKYGVC.cjs.map} +1 -1
  26. package/build/cjs/chunk-O3IOQ5DD.cjs +11 -0
  27. package/build/cjs/{chunk-CSJSSIXY.cjs.map → chunk-O3IOQ5DD.cjs.map} +1 -1
  28. package/build/cjs/{chunk-KN2J2YUI.cjs → chunk-QQXJJB2X.cjs} +4 -4
  29. package/build/cjs/{chunk-KN2J2YUI.cjs.map → chunk-QQXJJB2X.cjs.map} +1 -1
  30. package/build/cjs/chunk-QU5Y4VUK.cjs +11 -0
  31. package/build/cjs/{chunk-INWJQEGM.cjs.map → chunk-QU5Y4VUK.cjs.map} +1 -1
  32. package/build/cjs/{chunk-2XHTCEJ5.cjs → chunk-R2VFII6J.cjs} +13 -14
  33. package/build/cjs/chunk-R2VFII6J.cjs.map +1 -0
  34. package/build/cjs/{chunk-BS33YD7D.cjs → chunk-RW5LET2I.cjs} +3 -3
  35. package/build/cjs/chunk-RW5LET2I.cjs.map +1 -0
  36. package/build/cjs/{chunk-S4RAHNE4.cjs → chunk-TRZCCBEK.cjs} +4 -4
  37. package/build/cjs/{chunk-S4RAHNE4.cjs.map → chunk-TRZCCBEK.cjs.map} +1 -1
  38. package/build/cjs/{chunk-4GV4VKZC.cjs → chunk-WNS5EDUR.cjs} +4 -4
  39. package/build/cjs/{chunk-4GV4VKZC.cjs.map → chunk-WNS5EDUR.cjs.map} +1 -1
  40. package/build/cjs/public/experimental/action-form.cjs +4 -4
  41. package/build/cjs/public/experimental/cbac-picker.cjs +11 -11
  42. package/build/cjs/public/experimental/document-viewer.cjs +4 -4
  43. package/build/cjs/public/experimental/email-viewer.cjs +3 -3
  44. package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
  45. package/build/cjs/public/experimental/filter-list.cjs +15 -15
  46. package/build/cjs/public/experimental/image-viewer.cjs +3 -3
  47. package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
  48. package/build/cjs/public/experimental/object-table.cjs +21 -21
  49. package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
  50. package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
  51. package/build/cjs/public/experimental/video-viewer.cjs +3 -3
  52. package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
  53. package/build/cjs/public/experimental.cjs +71 -71
  54. package/build/esm/cbac-picker/CbacPicker.js +4 -2
  55. package/build/esm/cbac-picker/CbacPicker.js.map +1 -1
  56. package/build/esm/cbac-picker/CbacPickerDialog.js +4 -2
  57. package/build/esm/cbac-picker/CbacPickerDialog.js.map +1 -1
  58. package/build/esm/cbac-picker/ConstraintCallout.js +41 -0
  59. package/build/esm/cbac-picker/ConstraintCallout.js.map +1 -0
  60. package/build/esm/filter-list/base/inputs/ListogramInput.js +16 -10
  61. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  62. package/build/esm/util/UserAgent.js +1 -1
  63. package/build/esm/util/UserAgent.js.map +1 -1
  64. package/build/types/cbac-picker/CbacPicker.d.ts.map +1 -1
  65. package/build/types/cbac-picker/CbacPickerDialog.d.ts.map +1 -1
  66. package/build/types/cbac-picker/ConstraintCallout.d.ts +10 -0
  67. package/build/types/cbac-picker/ConstraintCallout.d.ts.map +1 -0
  68. package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
  69. package/package.json +4 -4
  70. package/build/browser/cbac-picker/useConstraintCallout.js +0 -42
  71. package/build/browser/cbac-picker/useConstraintCallout.js.map +0 -1
  72. package/build/cjs/chunk-2XHTCEJ5.cjs.map +0 -1
  73. package/build/cjs/chunk-BS33YD7D.cjs.map +0 -1
  74. package/build/cjs/chunk-CSJSSIXY.cjs +0 -11
  75. package/build/cjs/chunk-EBETL5JH.cjs +0 -11
  76. package/build/cjs/chunk-FG2HAGFV.cjs +0 -11
  77. package/build/cjs/chunk-INWJQEGM.cjs +0 -11
  78. package/build/cjs/chunk-LVMML6YM.cjs +0 -11
  79. package/build/cjs/chunk-R4FYBJIX.cjs.map +0 -1
  80. package/build/esm/cbac-picker/useConstraintCallout.js +0 -42
  81. package/build/esm/cbac-picker/useConstraintCallout.js.map +0 -1
  82. package/build/types/cbac-picker/useConstraintCallout.d.ts +0 -3
  83. package/build/types/cbac-picker/useConstraintCallout.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @osdk/react-components
2
2
 
3
+ ## 0.42.1-main-c2df0ff9bca538cb5747ee367d134cca9d658f9a
4
+
5
+ ### Patch Changes
6
+
7
+ - c2df0ff: Refactor the CBAC picker's max-classification callout from a hook that returned JSX (`useConstraintCallout`) into a `ConstraintCallout` component. Internal cleanup with no change to the public API or behavior.
8
+ - 5e9775e: Stop listogram filter rows reordering when a checkbox is toggled; render values in natural count/value order and append below-fold selections at the tail in the collapsed view.
9
+
3
10
  ## 0.42.0
4
11
 
5
12
  ### Minor Changes
@@ -16,8 +16,8 @@
16
16
 
17
17
  import React from "react";
18
18
  import { BaseCbacPicker } from "./base/BaseCbacPicker.js";
19
+ import { ConstraintCallout } from "./ConstraintCallout.js";
19
20
  import { useCbacSelection } from "./useCbacSelection.js";
20
- import { useConstraintCallout } from "./useConstraintCallout.js";
21
21
  import { EMPTY_ARRAY } from "./utils/cbacPickerUtils.js";
22
22
  import { toggleMarking } from "./utils/selectionLogic.js";
23
23
  export function CbacPicker({
@@ -50,7 +50,9 @@ export function CbacPicker({
50
50
  setSelectedIds(EMPTY_ARRAY);
51
51
  onChange(EMPTY_ARRAY);
52
52
  }, [onChange]);
53
- const constraintCallout = useConstraintCallout(maxClassificationConstraint);
53
+ const constraintCallout = React.useMemo(() => maxClassificationConstraint != null ? /*#__PURE__*/React.createElement(ConstraintCallout, {
54
+ constraint: maxClassificationConstraint
55
+ }) : undefined, [maxClassificationConstraint]);
54
56
  return /*#__PURE__*/React.createElement(BaseCbacPicker, {
55
57
  categories: categoryGroups,
56
58
  markingStates: markingStates,
@@ -1 +1 @@
1
- {"version":3,"file":"CbacPicker.js","names":["React","BaseCbacPicker","useCbacSelection","useConstraintCallout","EMPTY_ARRAY","toggleMarking","CbacPicker","initialMarkingIds","onChange","maxClassificationConstraint","readOnly","className","selectedIdsRef","setSelectedIds","categoryGroups","markingStates","banner","requiredMarkingGroups","isValid","isLoading","error","handleMarkingToggle","useCallback","markingId","newSelection","current","handleDismiss","constraintCallout","createElement","categories","onMarkingToggle","onDismissBanner","validationCallouts"],"sources":["CbacPicker.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\n\nimport { BaseCbacPicker } from \"./base/BaseCbacPicker.js\";\nimport type { MaxClassificationConstraint } from \"./types.js\";\nimport { useCbacSelection } from \"./useCbacSelection.js\";\nimport { useConstraintCallout } from \"./useConstraintCallout.js\";\nimport { EMPTY_ARRAY } from \"./utils/cbacPickerUtils.js\";\nimport { toggleMarking } from \"./utils/selectionLogic.js\";\n\nexport interface CbacPickerProps {\n /**\n * Initial set of selected marking IDs.\n *\n * @default []\n */\n initialMarkingIds?: string[];\n\n /**\n * Called when the selection changes.\n *\n * @param markingIds The currently selected marking IDs\n */\n onChange: (markingIds: string[]) => void;\n\n /**\n * Optional constraint capping the maximum classification a user may select.\n * When set, the picker surfaces a callout if the selection exceeds it.\n */\n maxClassificationConstraint?: MaxClassificationConstraint;\n\n /**\n * Disables marking toggle interactions.\n *\n * @default false\n */\n readOnly?: boolean;\n\n /**\n * CSS class for the picker container.\n */\n className?: string;\n}\n\nexport function CbacPicker({\n initialMarkingIds,\n onChange,\n maxClassificationConstraint,\n readOnly,\n className,\n}: CbacPickerProps): React.ReactElement {\n const {\n selectedIdsRef,\n setSelectedIds,\n categoryGroups,\n markingStates,\n banner,\n requiredMarkingGroups,\n isValid,\n isLoading,\n error,\n } = useCbacSelection(initialMarkingIds);\n\n const handleMarkingToggle = React.useCallback(\n (markingId: string) => {\n if (readOnly) {\n return;\n }\n const newSelection = toggleMarking(\n markingId,\n selectedIdsRef.current,\n categoryGroups\n );\n setSelectedIds(newSelection);\n onChange(newSelection);\n },\n [readOnly, categoryGroups, onChange]\n );\n\n const handleDismiss = React.useCallback(() => {\n setSelectedIds(EMPTY_ARRAY);\n onChange(EMPTY_ARRAY);\n }, [onChange]);\n\n const constraintCallout = useConstraintCallout(maxClassificationConstraint);\n\n return (\n <BaseCbacPicker\n categories={categoryGroups}\n markingStates={markingStates}\n banner={banner}\n onMarkingToggle={handleMarkingToggle}\n onDismissBanner={handleDismiss}\n requiredMarkingGroups={requiredMarkingGroups}\n isValid={isValid}\n readOnly={readOnly}\n isLoading={isLoading}\n error={error}\n validationCallouts={constraintCallout}\n className={className}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,cAAc,QAAQ,0BAA0B;AAEzD,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,oBAAoB,QAAQ,2BAA2B;AAChE,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,aAAa,QAAQ,2BAA2B;AAoCzD,OAAO,SAASC,UAAUA,CAAC;EACzBC,iBAAiB;EACjBC,QAAQ;EACRC,2BAA2B;EAC3BC,QAAQ;EACRC;AACe,CAAC,EAAsB;EACtC,MAAM;IACJC,cAAc;IACdC,cAAc;IACdC,cAAc;IACdC,aAAa;IACbC,MAAM;IACNC,qBAAqB;IACrBC,OAAO;IACPC,SAAS;IACTC;EACF,CAAC,GAAGlB,gBAAgB,CAACK,iBAAiB,CAAC;EAEvC,MAAMc,mBAAmB,GAAGrB,KAAK,CAACsB,WAAW,CAC1CC,SAAiB,IAAK;IACrB,IAAIb,QAAQ,EAAE;MACZ;IACF;IACA,MAAMc,YAAY,GAAGnB,aAAa,CAChCkB,SAAS,EACTX,cAAc,CAACa,OAAO,EACtBX,cACF,CAAC;IACDD,cAAc,CAACW,YAAY,CAAC;IAC5BhB,QAAQ,CAACgB,YAAY,CAAC;EACxB,CAAC,EACD,CAACd,QAAQ,EAAEI,cAAc,EAAEN,QAAQ,CACrC,CAAC;EAED,MAAMkB,aAAa,GAAG1B,KAAK,CAACsB,WAAW,CAAC,MAAM;IAC5CT,cAAc,CAACT,WAAW,CAAC;IAC3BI,QAAQ,CAACJ,WAAW,CAAC;EACvB,CAAC,EAAE,CAACI,QAAQ,CAAC,CAAC;EAEd,MAAMmB,iBAAiB,GAAGxB,oBAAoB,CAACM,2BAA2B,CAAC;EAE3E,oBACET,KAAA,CAAA4B,aAAA,CAAC3B,cAAc;IACb4B,UAAU,EAAEf,cAAe;IAC3BC,aAAa,EAAEA,aAAc;IAC7BC,MAAM,EAAEA,MAAO;IACfc,eAAe,EAAET,mBAAoB;IACrCU,eAAe,EAAEL,aAAc;IAC/BT,qBAAqB,EAAEA,qBAAsB;IAC7CC,OAAO,EAAEA,OAAQ;IACjBR,QAAQ,EAAEA,QAAS;IACnBS,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbY,kBAAkB,EAAEL,iBAAkB;IACtChB,SAAS,EAAEA;EAAU,CACtB,CAAC;AAEN","ignoreList":[]}
1
+ {"version":3,"file":"CbacPicker.js","names":["React","BaseCbacPicker","ConstraintCallout","useCbacSelection","EMPTY_ARRAY","toggleMarking","CbacPicker","initialMarkingIds","onChange","maxClassificationConstraint","readOnly","className","selectedIdsRef","setSelectedIds","categoryGroups","markingStates","banner","requiredMarkingGroups","isValid","isLoading","error","handleMarkingToggle","useCallback","markingId","newSelection","current","handleDismiss","constraintCallout","useMemo","createElement","constraint","undefined","categories","onMarkingToggle","onDismissBanner","validationCallouts"],"sources":["CbacPicker.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\n\nimport { BaseCbacPicker } from \"./base/BaseCbacPicker.js\";\nimport { ConstraintCallout } from \"./ConstraintCallout.js\";\nimport type { MaxClassificationConstraint } from \"./types.js\";\nimport { useCbacSelection } from \"./useCbacSelection.js\";\nimport { EMPTY_ARRAY } from \"./utils/cbacPickerUtils.js\";\nimport { toggleMarking } from \"./utils/selectionLogic.js\";\n\nexport interface CbacPickerProps {\n /**\n * Initial set of selected marking IDs.\n *\n * @default []\n */\n initialMarkingIds?: string[];\n\n /**\n * Called when the selection changes.\n *\n * @param markingIds The currently selected marking IDs\n */\n onChange: (markingIds: string[]) => void;\n\n /**\n * Optional constraint capping the maximum classification a user may select.\n * When set, the picker surfaces a callout if the selection exceeds it.\n */\n maxClassificationConstraint?: MaxClassificationConstraint;\n\n /**\n * Disables marking toggle interactions.\n *\n * @default false\n */\n readOnly?: boolean;\n\n /**\n * CSS class for the picker container.\n */\n className?: string;\n}\n\nexport function CbacPicker({\n initialMarkingIds,\n onChange,\n maxClassificationConstraint,\n readOnly,\n className,\n}: CbacPickerProps): React.ReactElement {\n const {\n selectedIdsRef,\n setSelectedIds,\n categoryGroups,\n markingStates,\n banner,\n requiredMarkingGroups,\n isValid,\n isLoading,\n error,\n } = useCbacSelection(initialMarkingIds);\n\n const handleMarkingToggle = React.useCallback(\n (markingId: string) => {\n if (readOnly) {\n return;\n }\n const newSelection = toggleMarking(\n markingId,\n selectedIdsRef.current,\n categoryGroups\n );\n setSelectedIds(newSelection);\n onChange(newSelection);\n },\n [readOnly, categoryGroups, onChange]\n );\n\n const handleDismiss = React.useCallback(() => {\n setSelectedIds(EMPTY_ARRAY);\n onChange(EMPTY_ARRAY);\n }, [onChange]);\n\n const constraintCallout = React.useMemo(\n () =>\n maxClassificationConstraint != null ? (\n <ConstraintCallout constraint={maxClassificationConstraint} />\n ) : undefined,\n [maxClassificationConstraint]\n );\n\n return (\n <BaseCbacPicker\n categories={categoryGroups}\n markingStates={markingStates}\n banner={banner}\n onMarkingToggle={handleMarkingToggle}\n onDismissBanner={handleDismiss}\n requiredMarkingGroups={requiredMarkingGroups}\n isValid={isValid}\n readOnly={readOnly}\n isLoading={isLoading}\n error={error}\n validationCallouts={constraintCallout}\n className={className}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,aAAa,QAAQ,2BAA2B;AAoCzD,OAAO,SAASC,UAAUA,CAAC;EACzBC,iBAAiB;EACjBC,QAAQ;EACRC,2BAA2B;EAC3BC,QAAQ;EACRC;AACe,CAAC,EAAsB;EACtC,MAAM;IACJC,cAAc;IACdC,cAAc;IACdC,cAAc;IACdC,aAAa;IACbC,MAAM;IACNC,qBAAqB;IACrBC,OAAO;IACPC,SAAS;IACTC;EACF,CAAC,GAAGjB,gBAAgB,CAACI,iBAAiB,CAAC;EAEvC,MAAMc,mBAAmB,GAAGrB,KAAK,CAACsB,WAAW,CAC1CC,SAAiB,IAAK;IACrB,IAAIb,QAAQ,EAAE;MACZ;IACF;IACA,MAAMc,YAAY,GAAGnB,aAAa,CAChCkB,SAAS,EACTX,cAAc,CAACa,OAAO,EACtBX,cACF,CAAC;IACDD,cAAc,CAACW,YAAY,CAAC;IAC5BhB,QAAQ,CAACgB,YAAY,CAAC;EACxB,CAAC,EACD,CAACd,QAAQ,EAAEI,cAAc,EAAEN,QAAQ,CACrC,CAAC;EAED,MAAMkB,aAAa,GAAG1B,KAAK,CAACsB,WAAW,CAAC,MAAM;IAC5CT,cAAc,CAACT,WAAW,CAAC;IAC3BI,QAAQ,CAACJ,WAAW,CAAC;EACvB,CAAC,EAAE,CAACI,QAAQ,CAAC,CAAC;EAEd,MAAMmB,iBAAiB,GAAG3B,KAAK,CAAC4B,OAAO,CACrC,MACEnB,2BAA2B,IAAI,IAAI,gBACjCT,KAAA,CAAA6B,aAAA,CAAC3B,iBAAiB;IAAC4B,UAAU,EAAErB;EAA4B,CAAE,CAAC,GAC5DsB,SAAS,EACf,CAACtB,2BAA2B,CAC9B,CAAC;EAED,oBACET,KAAA,CAAA6B,aAAA,CAAC5B,cAAc;IACb+B,UAAU,EAAElB,cAAe;IAC3BC,aAAa,EAAEA,aAAc;IAC7BC,MAAM,EAAEA,MAAO;IACfiB,eAAe,EAAEZ,mBAAoB;IACrCa,eAAe,EAAER,aAAc;IAC/BT,qBAAqB,EAAEA,qBAAsB;IAC7CC,OAAO,EAAEA,OAAQ;IACjBR,QAAQ,EAAEA,QAAS;IACnBS,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbe,kBAAkB,EAAER,iBAAkB;IACtChB,SAAS,EAAEA;EAAU,CACtB,CAAC;AAEN","ignoreList":[]}
@@ -16,8 +16,8 @@
16
16
 
17
17
  import React from "react";
18
18
  import { BaseCbacPickerDialog } from "./base/BaseCbacPickerDialog.js";
19
+ import { ConstraintCallout } from "./ConstraintCallout.js";
19
20
  import { useCbacSelection } from "./useCbacSelection.js";
20
- import { useConstraintCallout } from "./useConstraintCallout.js";
21
21
  import { getSubmitDisabledReason } from "./utils/validationMessages.js";
22
22
  export function CbacPickerDialog({
23
23
  isOpen,
@@ -58,7 +58,9 @@ export function CbacPickerDialog({
58
58
  disallowedMarkingIds,
59
59
  userSatisfiesMarkings
60
60
  }), [isValid, requiredMarkingGroups, selectedIds, disallowedMarkingIds, userSatisfiesMarkings]);
61
- const constraintCallout = useConstraintCallout(maxClassificationConstraint);
61
+ const constraintCallout = React.useMemo(() => maxClassificationConstraint != null ? /*#__PURE__*/React.createElement(ConstraintCallout, {
62
+ constraint: maxClassificationConstraint
63
+ }) : undefined, [maxClassificationConstraint]);
62
64
  return /*#__PURE__*/React.createElement(BaseCbacPickerDialog, {
63
65
  isOpen: isOpen,
64
66
  onOpenChange: onOpenChange,
@@ -1 +1 @@
1
- {"version":3,"file":"CbacPickerDialog.js","names":["React","BaseCbacPickerDialog","useCbacSelection","useConstraintCallout","getSubmitDisabledReason","CbacPickerDialog","isOpen","onOpenChange","onConfirm","initialMarkingIds","maxClassificationConstraint","selectedIds","categoryGroups","markingStates","banner","requiredMarkingGroups","isValid","userSatisfiesMarkings","disallowedMarkingIds","isLoading","error","toggle","dismiss","reset","handleConfirm","useCallback","handleCancel","hasInitialMarkings","undefined","length","submitDisabledReason","useMemo","constraintCallout","createElement","onCancel","title","categories","onMarkingToggle","onDismissBanner","validationCallouts"],"sources":["CbacPickerDialog.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\n\nimport { BaseCbacPickerDialog } from \"./base/BaseCbacPickerDialog.js\";\nimport type { MaxClassificationConstraint } from \"./types.js\";\nimport { useCbacSelection } from \"./useCbacSelection.js\";\nimport { useConstraintCallout } from \"./useConstraintCallout.js\";\nimport { getSubmitDisabledReason } from \"./utils/validationMessages.js\";\n\nexport interface CbacPickerDialogProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (markingIds: string[]) => void;\n initialMarkingIds?: string[];\n maxClassificationConstraint?: MaxClassificationConstraint;\n}\n\nexport function CbacPickerDialog({\n isOpen,\n onOpenChange,\n onConfirm,\n initialMarkingIds,\n maxClassificationConstraint,\n}: CbacPickerDialogProps): React.ReactElement {\n const {\n selectedIds,\n categoryGroups,\n markingStates,\n banner,\n requiredMarkingGroups,\n isValid,\n userSatisfiesMarkings,\n disallowedMarkingIds,\n isLoading,\n error,\n toggle,\n dismiss,\n reset,\n } = useCbacSelection(initialMarkingIds);\n\n // Parent controls dialog close on confirm (e.g. to show a loading state)\n const handleConfirm = React.useCallback(() => {\n onConfirm(selectedIds);\n }, [onConfirm, selectedIds]);\n\n const handleCancel = React.useCallback(() => {\n reset();\n onOpenChange(false);\n }, [reset, onOpenChange]);\n\n const hasInitialMarkings =\n initialMarkingIds !== undefined && initialMarkingIds.length > 0;\n\n const submitDisabledReason = React.useMemo(\n () =>\n getSubmitDisabledReason({\n isValid,\n requiredMarkingGroups,\n selectedIds,\n disallowedMarkingIds,\n userSatisfiesMarkings,\n }),\n [\n isValid,\n requiredMarkingGroups,\n selectedIds,\n disallowedMarkingIds,\n userSatisfiesMarkings,\n ]\n );\n\n const constraintCallout = useConstraintCallout(maxClassificationConstraint);\n\n return (\n <BaseCbacPickerDialog\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n title={hasInitialMarkings ? \"Edit classification\" : \"Add classification\"}\n categories={categoryGroups}\n markingStates={markingStates}\n banner={banner}\n onMarkingToggle={toggle}\n onDismissBanner={dismiss}\n requiredMarkingGroups={requiredMarkingGroups}\n isValid={isValid}\n submitDisabledReason={submitDisabledReason}\n validationCallouts={constraintCallout}\n isLoading={isLoading}\n error={error}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,oBAAoB,QAAQ,gCAAgC;AAErE,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,oBAAoB,QAAQ,2BAA2B;AAChE,SAASC,uBAAuB,QAAQ,+BAA+B;AAUvE,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,MAAM;EACNC,YAAY;EACZC,SAAS;EACTC,iBAAiB;EACjBC;AACqB,CAAC,EAAsB;EAC5C,MAAM;IACJC,WAAW;IACXC,cAAc;IACdC,aAAa;IACbC,MAAM;IACNC,qBAAqB;IACrBC,OAAO;IACPC,qBAAqB;IACrBC,oBAAoB;IACpBC,SAAS;IACTC,KAAK;IACLC,MAAM;IACNC,OAAO;IACPC;EACF,CAAC,GAAGrB,gBAAgB,CAACO,iBAAiB,CAAC;;EAEvC;EACA,MAAMe,aAAa,GAAGxB,KAAK,CAACyB,WAAW,CAAC,MAAM;IAC5CjB,SAAS,CAACG,WAAW,CAAC;EACxB,CAAC,EAAE,CAACH,SAAS,EAAEG,WAAW,CAAC,CAAC;EAE5B,MAAMe,YAAY,GAAG1B,KAAK,CAACyB,WAAW,CAAC,MAAM;IAC3CF,KAAK,CAAC,CAAC;IACPhB,YAAY,CAAC,KAAK,CAAC;EACrB,CAAC,EAAE,CAACgB,KAAK,EAAEhB,YAAY,CAAC,CAAC;EAEzB,MAAMoB,kBAAkB,GACtBlB,iBAAiB,KAAKmB,SAAS,IAAInB,iBAAiB,CAACoB,MAAM,GAAG,CAAC;EAEjE,MAAMC,oBAAoB,GAAG9B,KAAK,CAAC+B,OAAO,CACxC,MACE3B,uBAAuB,CAAC;IACtBY,OAAO;IACPD,qBAAqB;IACrBJ,WAAW;IACXO,oBAAoB;IACpBD;EACF,CAAC,CAAC,EACJ,CACED,OAAO,EACPD,qBAAqB,EACrBJ,WAAW,EACXO,oBAAoB,EACpBD,qBAAqB,CAEzB,CAAC;EAED,MAAMe,iBAAiB,GAAG7B,oBAAoB,CAACO,2BAA2B,CAAC;EAE3E,oBACEV,KAAA,CAAAiC,aAAA,CAAChC,oBAAoB;IACnBK,MAAM,EAAEA,MAAO;IACfC,YAAY,EAAEA,YAAa;IAC3BC,SAAS,EAAEgB,aAAc;IACzBU,QAAQ,EAAER,YAAa;IACvBS,KAAK,EAAER,kBAAkB,GAAG,qBAAqB,GAAG,oBAAqB;IACzES,UAAU,EAAExB,cAAe;IAC3BC,aAAa,EAAEA,aAAc;IAC7BC,MAAM,EAAEA,MAAO;IACfuB,eAAe,EAAEhB,MAAO;IACxBiB,eAAe,EAAEhB,OAAQ;IACzBP,qBAAqB,EAAEA,qBAAsB;IAC7CC,OAAO,EAAEA,OAAQ;IACjBc,oBAAoB,EAAEA,oBAAqB;IAC3CS,kBAAkB,EAAEP,iBAAkB;IACtCb,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN","ignoreList":[]}
1
+ {"version":3,"file":"CbacPickerDialog.js","names":["React","BaseCbacPickerDialog","ConstraintCallout","useCbacSelection","getSubmitDisabledReason","CbacPickerDialog","isOpen","onOpenChange","onConfirm","initialMarkingIds","maxClassificationConstraint","selectedIds","categoryGroups","markingStates","banner","requiredMarkingGroups","isValid","userSatisfiesMarkings","disallowedMarkingIds","isLoading","error","toggle","dismiss","reset","handleConfirm","useCallback","handleCancel","hasInitialMarkings","undefined","length","submitDisabledReason","useMemo","constraintCallout","createElement","constraint","onCancel","title","categories","onMarkingToggle","onDismissBanner","validationCallouts"],"sources":["CbacPickerDialog.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\n\nimport { BaseCbacPickerDialog } from \"./base/BaseCbacPickerDialog.js\";\nimport { ConstraintCallout } from \"./ConstraintCallout.js\";\nimport type { MaxClassificationConstraint } from \"./types.js\";\nimport { useCbacSelection } from \"./useCbacSelection.js\";\nimport { getSubmitDisabledReason } from \"./utils/validationMessages.js\";\n\nexport interface CbacPickerDialogProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (markingIds: string[]) => void;\n initialMarkingIds?: string[];\n maxClassificationConstraint?: MaxClassificationConstraint;\n}\n\nexport function CbacPickerDialog({\n isOpen,\n onOpenChange,\n onConfirm,\n initialMarkingIds,\n maxClassificationConstraint,\n}: CbacPickerDialogProps): React.ReactElement {\n const {\n selectedIds,\n categoryGroups,\n markingStates,\n banner,\n requiredMarkingGroups,\n isValid,\n userSatisfiesMarkings,\n disallowedMarkingIds,\n isLoading,\n error,\n toggle,\n dismiss,\n reset,\n } = useCbacSelection(initialMarkingIds);\n\n // Parent controls dialog close on confirm (e.g. to show a loading state)\n const handleConfirm = React.useCallback(() => {\n onConfirm(selectedIds);\n }, [onConfirm, selectedIds]);\n\n const handleCancel = React.useCallback(() => {\n reset();\n onOpenChange(false);\n }, [reset, onOpenChange]);\n\n const hasInitialMarkings =\n initialMarkingIds !== undefined && initialMarkingIds.length > 0;\n\n const submitDisabledReason = React.useMemo(\n () =>\n getSubmitDisabledReason({\n isValid,\n requiredMarkingGroups,\n selectedIds,\n disallowedMarkingIds,\n userSatisfiesMarkings,\n }),\n [\n isValid,\n requiredMarkingGroups,\n selectedIds,\n disallowedMarkingIds,\n userSatisfiesMarkings,\n ]\n );\n\n const constraintCallout = React.useMemo(\n () =>\n maxClassificationConstraint != null ? (\n <ConstraintCallout constraint={maxClassificationConstraint} />\n ) : undefined,\n [maxClassificationConstraint]\n );\n\n return (\n <BaseCbacPickerDialog\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n title={hasInitialMarkings ? \"Edit classification\" : \"Add classification\"}\n categories={categoryGroups}\n markingStates={markingStates}\n banner={banner}\n onMarkingToggle={toggle}\n onDismissBanner={dismiss}\n requiredMarkingGroups={requiredMarkingGroups}\n isValid={isValid}\n submitDisabledReason={submitDisabledReason}\n validationCallouts={constraintCallout}\n isLoading={isLoading}\n error={error}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,oBAAoB,QAAQ,gCAAgC;AACrE,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,uBAAuB,QAAQ,+BAA+B;AAUvE,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,MAAM;EACNC,YAAY;EACZC,SAAS;EACTC,iBAAiB;EACjBC;AACqB,CAAC,EAAsB;EAC5C,MAAM;IACJC,WAAW;IACXC,cAAc;IACdC,aAAa;IACbC,MAAM;IACNC,qBAAqB;IACrBC,OAAO;IACPC,qBAAqB;IACrBC,oBAAoB;IACpBC,SAAS;IACTC,KAAK;IACLC,MAAM;IACNC,OAAO;IACPC;EACF,CAAC,GAAGpB,gBAAgB,CAACM,iBAAiB,CAAC;;EAEvC;EACA,MAAMe,aAAa,GAAGxB,KAAK,CAACyB,WAAW,CAAC,MAAM;IAC5CjB,SAAS,CAACG,WAAW,CAAC;EACxB,CAAC,EAAE,CAACH,SAAS,EAAEG,WAAW,CAAC,CAAC;EAE5B,MAAMe,YAAY,GAAG1B,KAAK,CAACyB,WAAW,CAAC,MAAM;IAC3CF,KAAK,CAAC,CAAC;IACPhB,YAAY,CAAC,KAAK,CAAC;EACrB,CAAC,EAAE,CAACgB,KAAK,EAAEhB,YAAY,CAAC,CAAC;EAEzB,MAAMoB,kBAAkB,GACtBlB,iBAAiB,KAAKmB,SAAS,IAAInB,iBAAiB,CAACoB,MAAM,GAAG,CAAC;EAEjE,MAAMC,oBAAoB,GAAG9B,KAAK,CAAC+B,OAAO,CACxC,MACE3B,uBAAuB,CAAC;IACtBY,OAAO;IACPD,qBAAqB;IACrBJ,WAAW;IACXO,oBAAoB;IACpBD;EACF,CAAC,CAAC,EACJ,CACED,OAAO,EACPD,qBAAqB,EACrBJ,WAAW,EACXO,oBAAoB,EACpBD,qBAAqB,CAEzB,CAAC;EAED,MAAMe,iBAAiB,GAAGhC,KAAK,CAAC+B,OAAO,CACrC,MACErB,2BAA2B,IAAI,IAAI,gBACjCV,KAAA,CAAAiC,aAAA,CAAC/B,iBAAiB;IAACgC,UAAU,EAAExB;EAA4B,CAAE,CAAC,GAC5DkB,SAAS,EACf,CAAClB,2BAA2B,CAC9B,CAAC;EAED,oBACEV,KAAA,CAAAiC,aAAA,CAAChC,oBAAoB;IACnBK,MAAM,EAAEA,MAAO;IACfC,YAAY,EAAEA,YAAa;IAC3BC,SAAS,EAAEgB,aAAc;IACzBW,QAAQ,EAAET,YAAa;IACvBU,KAAK,EAAET,kBAAkB,GAAG,qBAAqB,GAAG,oBAAqB;IACzEU,UAAU,EAAEzB,cAAe;IAC3BC,aAAa,EAAEA,aAAc;IAC7BC,MAAM,EAAEA,MAAO;IACfwB,eAAe,EAAEjB,MAAO;IACxBkB,eAAe,EAAEjB,OAAQ;IACzBP,qBAAqB,EAAEA,qBAAsB;IAC7CC,OAAO,EAAEA,OAAQ;IACjBc,oBAAoB,EAAEA,oBAAqB;IAC3CU,kBAAkB,EAAER,iBAAkB;IACtCb,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { useCbacBanner } from "@osdk/react/platform-apis";
18
+ import React from "react";
19
+ import { MaxClassificationField } from "./base/MaxClassificationField.js";
20
+ import { resolveBannerDisplay } from "./utils/cbacPickerUtils.js";
21
+ /**
22
+ * Fetches banner display data for a max-classification constraint and renders
23
+ * the "Maximum allowed classification" callout.
24
+ */
25
+ export function ConstraintCallout({
26
+ constraint
27
+ }) {
28
+ const {
29
+ banner
30
+ } = useCbacBanner({
31
+ markingIds: constraint.markingIds
32
+ });
33
+ const resolved = resolveBannerDisplay(banner);
34
+ return /*#__PURE__*/React.createElement(MaxClassificationField, {
35
+ classificationString: constraint.bannerClassificationString,
36
+ textColor: resolved.textColor,
37
+ backgroundColors: resolved.backgroundColors,
38
+ helperText: constraint.helperText
39
+ });
40
+ }
41
+ //# sourceMappingURL=ConstraintCallout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConstraintCallout.js","names":["useCbacBanner","React","MaxClassificationField","resolveBannerDisplay","ConstraintCallout","constraint","banner","markingIds","resolved","createElement","classificationString","bannerClassificationString","textColor","backgroundColors","helperText"],"sources":["ConstraintCallout.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCbacBanner } from \"@osdk/react/platform-apis\";\nimport React from \"react\";\n\nimport { MaxClassificationField } from \"./base/MaxClassificationField.js\";\nimport type { MaxClassificationConstraint } from \"./types.js\";\nimport { resolveBannerDisplay } from \"./utils/cbacPickerUtils.js\";\n\nexport interface ConstraintCalloutProps {\n constraint: MaxClassificationConstraint;\n}\n\n/**\n * Fetches banner display data for a max-classification constraint and renders\n * the \"Maximum allowed classification\" callout.\n */\nexport function ConstraintCallout({\n constraint,\n}: ConstraintCalloutProps): React.ReactElement {\n const { banner } = useCbacBanner({ markingIds: constraint.markingIds });\n const resolved = resolveBannerDisplay(banner);\n\n return (\n <MaxClassificationField\n classificationString={constraint.bannerClassificationString}\n textColor={resolved.textColor}\n backgroundColors={resolved.backgroundColors}\n helperText={constraint.helperText}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,QAAQ,2BAA2B;AACzD,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,sBAAsB,QAAQ,kCAAkC;AAEzE,SAASC,oBAAoB,QAAQ,4BAA4B;AAMjE;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAC;EAChCC;AACsB,CAAC,EAAsB;EAC7C,MAAM;IAAEC;EAAO,CAAC,GAAGN,aAAa,CAAC;IAAEO,UAAU,EAAEF,UAAU,CAACE;EAAW,CAAC,CAAC;EACvE,MAAMC,QAAQ,GAAGL,oBAAoB,CAACG,MAAM,CAAC;EAE7C,oBACEL,KAAA,CAAAQ,aAAA,CAACP,sBAAsB;IACrBQ,oBAAoB,EAAEL,UAAU,CAACM,0BAA2B;IAC5DC,SAAS,EAAEJ,QAAQ,CAACI,SAAU;IAC9BC,gBAAgB,EAAEL,QAAQ,CAACK,gBAAiB;IAC5CC,UAAU,EAAET,UAAU,CAACS;EAAW,CACnC,CAAC;AAEN","ignoreList":[]}
@@ -62,16 +62,22 @@ function ListogramInputInner({
62
62
  }
63
63
  return stableValues;
64
64
  }, [stableValues, searchQuery, renderValue]);
65
- const sortedValues = useMemo(() => {
66
- const selected = filteredValues.filter(v => selectedSet.has(v.value));
67
- const unselected = filteredValues.filter(v => !selectedSet.has(v.value));
68
- return [...selected, ...unselected];
69
- }, [filteredValues, selectedSet]);
65
+
66
+ // Render in natural count/value order regardless of selection — toggling a
67
+ // checkbox must never reorder rows. In the collapsed view we still keep
68
+ // below-fold selected values visible by appending them at the tail (matching
69
+ // Foundry Workshop's listogram), without hoisting them or displacing the
70
+ // head. Unchecking a below-fold row drops it from the tail; "View all"
71
+ // reveals it again.
70
72
  const displayValues = useMemo(() => {
71
- if (isExpanded || !maxVisibleItems) return sortedValues;
72
- return sortedValues.slice(0, maxVisibleItems);
73
- }, [sortedValues, maxVisibleItems, isExpanded]);
74
- const hasMore = maxVisibleItems != null && sortedValues.length > maxVisibleItems;
73
+ if (isExpanded || maxVisibleItems == null) return filteredValues;
74
+ const head = filteredValues.slice(0, maxVisibleItems);
75
+ const belowFoldSelected = filteredValues.slice(maxVisibleItems).filter(({
76
+ value
77
+ }) => selectedSet.has(value));
78
+ return [...head, ...belowFoldSelected];
79
+ }, [filteredValues, maxVisibleItems, isExpanded, selectedSet]);
80
+ const hasMore = maxVisibleItems != null && filteredValues.length > maxVisibleItems;
75
81
  return /*#__PURE__*/React.createElement("div", {
76
82
  className: classnames(styles.listogram, className),
77
83
  style: style,
@@ -135,7 +141,7 @@ function ListogramInputInner({
135
141
  // eslint-disable-next-line react/jsx-no-bind
136
142
  ,
137
143
  onClick: () => setIsExpanded(true)
138
- }, "View all (", sortedValues.length, ")")));
144
+ }, "View all (", filteredValues.length, ")")));
139
145
  }
140
146
  export const ListogramInput = /*#__PURE__*/memo(ListogramInputInner);
141
147
  //# sourceMappingURL=ListogramInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","Checkbox","filterValuesBySearch","isNoValue","formatCompactCount","ListogramSkeleton","OptionLabel","useStableData","styles","sharedStyles","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","showCount","isExcluding","showFilteredOutValues","className","style","maxVisibleItems","searchQuery","renderValue","isExpanded","setIsExpanded","stableValues","selectedSet","Set","toggleValue","value","has","filter","v","filteredValues","rendered","sortedValues","selected","unselected","displayValues","slice","hasMore","length","createElement","listogram","errorMessage","message","emptyMessage","container","map","count","percentage","perRowColor","isEmpty","isFilteredOut","key","row","undefined","onClick","checkbox","e","stopPropagation","checked","onCheckedChange","label","noValueLabel","title","toLocaleString","bar","barFill","type","viewAllButton","ListogramInput"],"sources":["ListogramInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\n\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch, isNoValue } from \"../../utils/filterValues.js\";\nimport { formatCompactCount } from \"./formatCompactCount.js\";\nimport { ListogramSkeleton } from \"./ListogramSkeleton.js\";\nimport { OptionLabel } from \"./OptionLabel.js\";\nimport { useStableData } from \"./useStableData.js\";\n\nimport styles from \"./ListogramInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\nexport type ListogramDisplayMode = \"full\" | \"count\" | \"minimal\";\n\ninterface ListogramInputProps {\n values: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n colorMap?: Record<string, string>;\n displayMode?: ListogramDisplayMode;\n showCount?: boolean;\n isExcluding?: boolean;\n showFilteredOutValues?: boolean;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n searchQuery?: string;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction ListogramInputInner({\n values,\n maxCount,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n displayMode = \"full\",\n showCount = true,\n isExcluding,\n showFilteredOutValues = true,\n className,\n style,\n maxVisibleItems,\n searchQuery,\n renderValue,\n}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const stableValues = useStableData(values, isLoading);\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange]\n );\n\n const filteredValues = useMemo(() => {\n if (searchQuery) {\n return filterValuesBySearch(stableValues, searchQuery, (v) => {\n const rendered = renderValue?.(v.value);\n return typeof rendered === \"string\" ? rendered : v.value;\n });\n }\n return stableValues;\n }, [stableValues, searchQuery, renderValue]);\n\n const sortedValues = useMemo(() => {\n const selected = filteredValues.filter((v) => selectedSet.has(v.value));\n const unselected = filteredValues.filter((v) => !selectedSet.has(v.value));\n return [...selected, ...unselected];\n }, [filteredValues, selectedSet]);\n\n const displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return sortedValues;\n return sortedValues.slice(0, maxVisibleItems);\n }, [sortedValues, maxVisibleItems, isExpanded]);\n\n const hasMore =\n maxVisibleItems != null && sortedValues.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading && filteredValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && filteredValues.length === 0 && isLoading && (\n <ListogramSkeleton />\n )}\n {!error && filteredValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>No values available</div>\n )}\n\n {filteredValues.length > 0 && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n const perRowColor = colorMap?.[value];\n const isEmpty = isNoValue(value) || value === \"\";\n\n const isFilteredOut =\n showFilteredOutValues && count === 0 && !selectedSet.has(value);\n return (\n <Button\n key={value}\n className={styles.row}\n data-empty={isEmpty || undefined}\n data-filtered-out={isFilteredOut || undefined}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => toggleValue(value)}\n aria-pressed={selectedSet.has(value)}\n style={\n perRowColor || percentage > 0\n ? ({\n \"--osdk-filter-listogram-bar-fill-scale\":\n percentage / 100,\n ...(perRowColor\n ? {\n \"--osdk-filter-listogram-row-bar-color\":\n perRowColor,\n }\n : undefined),\n } as React.CSSProperties)\n : undefined\n }\n >\n <span\n className={styles.checkbox}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selectedSet.has(value)}\n // eslint-disable-next-line react/jsx-no-bind\n onCheckedChange={() => toggleValue(value)}\n isExcluding={isExcluding}\n />\n </span>\n <span\n className={styles.label}\n data-excluding={\n (isExcluding && selectedSet.has(value)) || undefined\n }\n >\n <OptionLabel\n value={value}\n renderValue={renderValue}\n className={styles.noValueLabel}\n />\n </span>\n {showCount && displayMode !== \"minimal\" && (\n <span className={styles.count} title={count.toLocaleString()}>\n {formatCompactCount(count)}\n </span>\n )}\n {displayMode === \"full\" && (\n <span className={styles.bar}>\n <span className={styles.barFill} />\n </span>\n )}\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.viewAllButton}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => setIsExpanded(true)}\n >\n View all ({sortedValues.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner\n) as typeof ListogramInputInner;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","Checkbox","filterValuesBySearch","isNoValue","formatCompactCount","ListogramSkeleton","OptionLabel","useStableData","styles","sharedStyles","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","showCount","isExcluding","showFilteredOutValues","className","style","maxVisibleItems","searchQuery","renderValue","isExpanded","setIsExpanded","stableValues","selectedSet","Set","toggleValue","value","has","filter","v","filteredValues","rendered","displayValues","head","slice","belowFoldSelected","hasMore","length","createElement","listogram","errorMessage","message","emptyMessage","container","map","count","percentage","perRowColor","isEmpty","isFilteredOut","key","row","undefined","onClick","checkbox","e","stopPropagation","checked","onCheckedChange","label","noValueLabel","title","toLocaleString","bar","barFill","type","viewAllButton","ListogramInput"],"sources":["ListogramInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\n\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch, isNoValue } from \"../../utils/filterValues.js\";\nimport { formatCompactCount } from \"./formatCompactCount.js\";\nimport { ListogramSkeleton } from \"./ListogramSkeleton.js\";\nimport { OptionLabel } from \"./OptionLabel.js\";\nimport { useStableData } from \"./useStableData.js\";\n\nimport styles from \"./ListogramInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\nexport type ListogramDisplayMode = \"full\" | \"count\" | \"minimal\";\n\ninterface ListogramInputProps {\n values: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n colorMap?: Record<string, string>;\n displayMode?: ListogramDisplayMode;\n showCount?: boolean;\n isExcluding?: boolean;\n showFilteredOutValues?: boolean;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n searchQuery?: string;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction ListogramInputInner({\n values,\n maxCount,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n displayMode = \"full\",\n showCount = true,\n isExcluding,\n showFilteredOutValues = true,\n className,\n style,\n maxVisibleItems,\n searchQuery,\n renderValue,\n}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const stableValues = useStableData(values, isLoading);\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange]\n );\n\n const filteredValues = useMemo(() => {\n if (searchQuery) {\n return filterValuesBySearch(stableValues, searchQuery, (v) => {\n const rendered = renderValue?.(v.value);\n return typeof rendered === \"string\" ? rendered : v.value;\n });\n }\n return stableValues;\n }, [stableValues, searchQuery, renderValue]);\n\n // Render in natural count/value order regardless of selection — toggling a\n // checkbox must never reorder rows. In the collapsed view we still keep\n // below-fold selected values visible by appending them at the tail (matching\n // Foundry Workshop's listogram), without hoisting them or displacing the\n // head. Unchecking a below-fold row drops it from the tail; \"View all\"\n // reveals it again.\n const displayValues = useMemo(() => {\n if (isExpanded || maxVisibleItems == null) return filteredValues;\n const head = filteredValues.slice(0, maxVisibleItems);\n const belowFoldSelected = filteredValues\n .slice(maxVisibleItems)\n .filter(({ value }) => selectedSet.has(value));\n return [...head, ...belowFoldSelected];\n }, [filteredValues, maxVisibleItems, isExpanded, selectedSet]);\n\n const hasMore =\n maxVisibleItems != null && filteredValues.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading && filteredValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && filteredValues.length === 0 && isLoading && (\n <ListogramSkeleton />\n )}\n {!error && filteredValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>No values available</div>\n )}\n\n {filteredValues.length > 0 && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n const perRowColor = colorMap?.[value];\n const isEmpty = isNoValue(value) || value === \"\";\n\n const isFilteredOut =\n showFilteredOutValues && count === 0 && !selectedSet.has(value);\n return (\n <Button\n key={value}\n className={styles.row}\n data-empty={isEmpty || undefined}\n data-filtered-out={isFilteredOut || undefined}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => toggleValue(value)}\n aria-pressed={selectedSet.has(value)}\n style={\n perRowColor || percentage > 0\n ? ({\n \"--osdk-filter-listogram-bar-fill-scale\":\n percentage / 100,\n ...(perRowColor\n ? {\n \"--osdk-filter-listogram-row-bar-color\":\n perRowColor,\n }\n : undefined),\n } as React.CSSProperties)\n : undefined\n }\n >\n <span\n className={styles.checkbox}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selectedSet.has(value)}\n // eslint-disable-next-line react/jsx-no-bind\n onCheckedChange={() => toggleValue(value)}\n isExcluding={isExcluding}\n />\n </span>\n <span\n className={styles.label}\n data-excluding={\n (isExcluding && selectedSet.has(value)) || undefined\n }\n >\n <OptionLabel\n value={value}\n renderValue={renderValue}\n className={styles.noValueLabel}\n />\n </span>\n {showCount && displayMode !== \"minimal\" && (\n <span className={styles.count} title={count.toLocaleString()}>\n {formatCompactCount(count)}\n </span>\n )}\n {displayMode === \"full\" && (\n <span className={styles.bar}>\n <span className={styles.barFill} />\n </span>\n )}\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.viewAllButton}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => setIsExpanded(true)}\n >\n View all ({filteredValues.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner\n) as typeof ListogramInputInner;\n"],"mappings":"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","ignoreList":[]}
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- const PACKAGE_USER_AGENT = `osdk-react-components/${"0.42.0"}`;
17
+ const PACKAGE_USER_AGENT = `osdk-react-components/${"0.42.1-main-c2df0ff9bca538cb5747ee367d134cca9d658f9a"}`;
18
18
  export function componentUserAgent(componentName) {
19
19
  return `${PACKAGE_USER_AGENT}/${componentName}`;
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GAAG,mCAAsD;AAEjF,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
1
+ {"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GAAG,iFAAsD;AAEjF,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ var chunkOISZU73V_cjs = require('./chunk-OISZU73V.cjs');
4
+ var chunkRW5LET2I_cjs = require('./chunk-RW5LET2I.cjs');
5
+
6
+ // src/public/experimental/email-viewer.ts
7
+ var EmailViewer2 = chunkRW5LET2I_cjs.withOsdkMetrics(chunkOISZU73V_cjs.EmailViewer, "EmailViewer");
8
+
9
+ exports.EmailViewer = EmailViewer2;
10
+ //# sourceMappingURL=chunk-2JPNALYV.cjs.map
11
+ //# sourceMappingURL=chunk-2JPNALYV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/public/experimental/email-viewer.ts"],"names":["EmailViewer","withOsdkMetrics"],"mappings":";;;;;;AAqBO,IAAMA,YAAAA,GAAcC,iCAAA,CAAgBD,6BAAA,EAAc,aAAa","file":"chunk-EBETL5JH.cjs","sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// BaseEmailViewer\nexport { BaseEmailViewer } from \"../../email-viewer/BaseEmailViewer.js\";\n// EmailViewer (Media wrapper)\nimport { EmailViewer as _EmailViewer } from \"../../email-viewer/EmailViewer.js\";\nimport { withOsdkMetrics } from \"../../util/withOsdkMetrics.js\";\nexport const EmailViewer = withOsdkMetrics(_EmailViewer, \"EmailViewer\");"]}
1
+ {"version":3,"sources":["../../src/public/experimental/email-viewer.ts"],"names":["EmailViewer","withOsdkMetrics"],"mappings":";;;;;;AAqBO,IAAMA,YAAAA,GAAcC,iCAAA,CAAgBD,6BAAA,EAAc,aAAa","file":"chunk-2JPNALYV.cjs","sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// BaseEmailViewer\nexport { BaseEmailViewer } from \"../../email-viewer/BaseEmailViewer.js\";\n// EmailViewer (Media wrapper)\nimport { EmailViewer as _EmailViewer } from \"../../email-viewer/EmailViewer.js\";\nimport { withOsdkMetrics } from \"../../util/withOsdkMetrics.js\";\nexport const EmailViewer = withOsdkMetrics(_EmailViewer, \"EmailViewer\");"]}
@@ -10,7 +10,7 @@ var chunkDWNKXV5E_cjs = require('./chunk-DWNKXV5E.cjs');
10
10
  var chunkHNBSGCSZ_cjs = require('./chunk-HNBSGCSZ.cjs');
11
11
  var chunk7LXS66DW_cjs = require('./chunk-7LXS66DW.cjs');
12
12
  var chunkQP2LHBCZ_cjs = require('./chunk-QP2LHBCZ.cjs');
13
- var chunkBS33YD7D_cjs = require('./chunk-BS33YD7D.cjs');
13
+ var chunkRW5LET2I_cjs = require('./chunk-RW5LET2I.cjs');
14
14
  var reactTable = require('@tanstack/react-table');
15
15
  var React17 = require('react');
16
16
  var react = require('@osdk/react');
@@ -3340,7 +3340,7 @@ function ObjectTable({
3340
3340
  }
3341
3341
 
3342
3342
  // src/public/experimental/object-table.ts
3343
- var ObjectTable2 = chunkBS33YD7D_cjs.withOsdkMetrics(ObjectTable, "ObjectTable");
3343
+ var ObjectTable2 = chunkRW5LET2I_cjs.withOsdkMetrics(ObjectTable, "ObjectTable");
3344
3344
 
3345
3345
  exports.BaseTable = BaseTable;
3346
3346
  exports.ColumnConfigDialog = ColumnConfigDialog;
@@ -3361,5 +3361,5 @@ exports.useObjectTableSnapshot = useObjectTableSnapshot;
3361
3361
  exports.useRowSelection = useRowSelection;
3362
3362
  exports.useSelectionColumn = useSelectionColumn;
3363
3363
  exports.useTableSorting = useTableSorting;
3364
- //# sourceMappingURL=chunk-LBKU7GZF.cjs.map
3365
- //# sourceMappingURL=chunk-LBKU7GZF.cjs.map
3364
+ //# sourceMappingURL=chunk-32KJZGKR.cjs.map
3365
+ //# sourceMappingURL=chunk-32KJZGKR.cjs.map