@osdk/react-components 0.26.0 → 0.27.0-main-3c39c107baa40833fcc79d0d913fb4a468a6bd06
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/AGENTS.md +27 -19
- package/CHANGELOG.md +10 -0
- package/README.md +1 -0
- package/build/browser/cbac-picker/CbacBanner.js +42 -0
- package/build/browser/cbac-picker/CbacBanner.js.map +1 -0
- package/build/browser/cbac-picker/CbacBannerPopover.js +83 -0
- package/build/browser/cbac-picker/CbacBannerPopover.js.map +1 -0
- package/build/browser/cbac-picker/CbacPicker.js +69 -0
- package/build/browser/cbac-picker/CbacPicker.js.map +1 -0
- package/build/browser/cbac-picker/CbacPickerDialog.js +81 -0
- package/build/browser/cbac-picker/CbacPickerDialog.js.map +1 -0
- package/build/browser/cbac-picker/base/BaseCbacBanner.js +64 -0
- package/build/browser/cbac-picker/base/BaseCbacBanner.js.map +1 -0
- package/build/browser/cbac-picker/base/BaseCbacBanner.module.css +74 -0
- package/build/browser/cbac-picker/base/BaseCbacBanner.module.css.js +9 -0
- package/build/browser/cbac-picker/base/BaseCbacBannerPopover.js +168 -0
- package/build/browser/cbac-picker/base/BaseCbacBannerPopover.js.map +1 -0
- package/build/browser/cbac-picker/base/BaseCbacBannerPopover.module.css +193 -0
- package/build/browser/cbac-picker/base/BaseCbacBannerPopover.module.css.js +30 -0
- package/build/browser/cbac-picker/base/BaseCbacPicker.js +74 -0
- package/build/browser/cbac-picker/base/BaseCbacPicker.js.map +1 -0
- package/build/browser/cbac-picker/base/BaseCbacPicker.module.css +47 -0
- package/build/browser/cbac-picker/base/BaseCbacPicker.module.css.js +9 -0
- package/build/browser/cbac-picker/base/BaseCbacPickerDialog.js +51 -0
- package/build/browser/cbac-picker/base/BaseCbacPickerDialog.js.map +1 -0
- package/build/browser/cbac-picker/base/CategoryMarkingGroup.js +91 -0
- package/build/browser/cbac-picker/base/CategoryMarkingGroup.js.map +1 -0
- package/build/browser/cbac-picker/base/CategoryMarkingGroup.module.css +69 -0
- package/build/browser/cbac-picker/base/CategoryMarkingGroup.module.css.js +12 -0
- package/build/browser/cbac-picker/base/CbacPickerDialogFooter.js +43 -0
- package/build/browser/cbac-picker/base/CbacPickerDialogFooter.js.map +1 -0
- package/build/browser/cbac-picker/base/CbacPickerDialogFooter.module.css +19 -0
- package/build/browser/cbac-picker/base/CbacPickerDialogFooter.module.css.js +6 -0
- package/build/browser/cbac-picker/base/InfoBanner.js +32 -0
- package/build/browser/cbac-picker/base/InfoBanner.js.map +1 -0
- package/build/browser/cbac-picker/base/InfoBanner.module.css +30 -0
- package/build/browser/cbac-picker/base/InfoBanner.module.css.js +7 -0
- package/build/browser/cbac-picker/base/MarkingButton.js +83 -0
- package/build/browser/cbac-picker/base/MarkingButton.js.map +1 -0
- package/build/browser/cbac-picker/base/MarkingButton.module.css +104 -0
- package/build/browser/cbac-picker/base/MarkingButton.module.css.js +14 -0
- package/build/browser/cbac-picker/base/MaxClassificationField.js +42 -0
- package/build/browser/cbac-picker/base/MaxClassificationField.js.map +1 -0
- package/build/browser/cbac-picker/base/MaxClassificationField.module.css +39 -0
- package/build/browser/cbac-picker/base/MaxClassificationField.module.css.js +9 -0
- package/build/browser/cbac-picker/base/OverflowButton.js +51 -0
- package/build/browser/cbac-picker/base/OverflowButton.js.map +1 -0
- package/build/browser/cbac-picker/base/OverflowButton.module.css +57 -0
- package/build/browser/cbac-picker/base/OverflowButton.module.css.js +8 -0
- package/build/browser/cbac-picker/base/OverflowItem.js +64 -0
- package/build/browser/cbac-picker/base/OverflowItem.js.map +1 -0
- package/build/browser/cbac-picker/base/OverflowItem.module.css +75 -0
- package/build/browser/cbac-picker/base/OverflowItem.module.css.js +11 -0
- package/build/browser/cbac-picker/base/ValidationWarning.js +44 -0
- package/build/browser/cbac-picker/base/ValidationWarning.js.map +1 -0
- package/build/browser/cbac-picker/base/ValidationWarning.module.css +71 -0
- package/build/browser/cbac-picker/base/ValidationWarning.module.css.js +12 -0
- package/build/browser/cbac-picker/base/selectionStateHelpers.js +35 -0
- package/build/browser/cbac-picker/base/selectionStateHelpers.js.map +1 -0
- package/build/browser/cbac-picker/types.js +2 -0
- package/build/browser/cbac-picker/types.js.map +1 -0
- package/build/browser/cbac-picker/useCbacPickerState.js +104 -0
- package/build/browser/cbac-picker/useCbacPickerState.js.map +1 -0
- package/build/browser/cbac-picker/useCbacSelection.js +52 -0
- package/build/browser/cbac-picker/useCbacSelection.js.map +1 -0
- package/build/browser/cbac-picker/useConstraintCallout.js +42 -0
- package/build/browser/cbac-picker/useConstraintCallout.js.map +1 -0
- package/build/browser/cbac-picker/utils/cbacPickerUtils.js +60 -0
- package/build/browser/cbac-picker/utils/cbacPickerUtils.js.map +1 -0
- package/build/browser/cbac-picker/utils/errorMessages.js +78 -0
- package/build/browser/cbac-picker/utils/errorMessages.js.map +1 -0
- package/build/browser/cbac-picker/utils/selectionLogic.js +91 -0
- package/build/browser/cbac-picker/utils/selectionLogic.js.map +1 -0
- package/build/browser/cbac-picker/utils/validationMessages.js +34 -0
- package/build/browser/cbac-picker/utils/validationMessages.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +2 -5
- package/build/browser/public/experimental/cbac-picker.js +36 -0
- package/build/browser/public/experimental/cbac-picker.js.map +1 -0
- package/build/browser/public/experimental.js +1 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/styles.css +815 -7
- package/build/browser/tokens/component-tokens/filter-list.css +2 -2
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-OZ3OGPEA.cjs → chunk-53T3H77X.cjs} +4 -4
- package/build/cjs/{chunk-OZ3OGPEA.cjs.map → chunk-53T3H77X.cjs.map} +1 -1
- package/build/cjs/chunk-57BIF23Z.cjs +11 -0
- package/build/cjs/{chunk-JPVZGQXS.cjs.map → chunk-57BIF23Z.cjs.map} +1 -1
- package/build/cjs/{chunk-3FFHTVG7.cjs → chunk-H2CKWHIK.cjs} +6 -6
- package/build/cjs/{chunk-3FFHTVG7.cjs.map → chunk-H2CKWHIK.cjs.map} +1 -1
- package/build/cjs/{chunk-UTB55N5Y.cjs → chunk-IOEFNU2L.cjs} +3 -3
- package/build/cjs/chunk-IOEFNU2L.cjs.map +1 -0
- package/build/cjs/chunk-JMSXOH46.cjs +11 -0
- package/build/cjs/{chunk-W6C6UWUN.cjs.map → chunk-JMSXOH46.cjs.map} +1 -1
- package/build/cjs/{chunk-IFOPHNX3.cjs → chunk-K23T6HK7.cjs} +8 -8
- package/build/cjs/{chunk-IFOPHNX3.cjs.map → chunk-K23T6HK7.cjs.map} +1 -1
- package/build/cjs/chunk-MPFJIBNU.cjs +11 -0
- package/build/cjs/{chunk-GKWXRVFO.cjs.map → chunk-MPFJIBNU.cjs.map} +1 -1
- package/build/cjs/chunk-MZW2H2KM.cjs +11 -0
- package/build/cjs/{chunk-UJXNFENA.cjs.map → chunk-MZW2H2KM.cjs.map} +1 -1
- package/build/cjs/chunk-O5D7OJYY.cjs +11 -0
- package/build/cjs/{chunk-YLYICFCA.cjs.map → chunk-O5D7OJYY.cjs.map} +1 -1
- package/build/cjs/{chunk-3VL5YVFA.cjs → chunk-OJ4X5364.cjs} +4 -4
- package/build/cjs/{chunk-3VL5YVFA.cjs.map → chunk-OJ4X5364.cjs.map} +1 -1
- package/build/cjs/chunk-OLIJICA5.cjs +1190 -0
- package/build/cjs/chunk-OLIJICA5.cjs.map +1 -0
- package/build/cjs/chunk-VFRZREZV.cjs +4 -0
- package/build/cjs/chunk-VFRZREZV.cjs.map +1 -0
- package/build/cjs/{chunk-RDILWZTC.cjs → chunk-WGJETQAS.cjs} +6 -6
- package/build/cjs/{chunk-RDILWZTC.cjs.map → chunk-WGJETQAS.cjs.map} +1 -1
- package/build/cjs/{chunk-DY6YZDDT.cjs → chunk-XCABG3EW.cjs} +4 -4
- package/build/cjs/{chunk-DY6YZDDT.cjs.map → chunk-XCABG3EW.cjs.map} +1 -1
- package/build/cjs/{chunk-Y4OUZFGE.cjs → chunk-YBDVNB3B.cjs} +4 -4
- package/build/cjs/{chunk-Y4OUZFGE.cjs.map → chunk-YBDVNB3B.cjs.map} +1 -1
- package/build/cjs/public/experimental/action-form.cjs +6 -6
- package/build/cjs/public/experimental/cbac-picker.cjs +60 -0
- package/build/cjs/public/experimental/cbac-picker.cjs.map +1 -0
- package/build/cjs/public/experimental/cbac-picker.css +731 -0
- package/build/cjs/public/experimental/cbac-picker.css.map +1 -0
- package/build/cjs/public/experimental/cbac-picker.d.cts +122 -0
- package/build/cjs/public/experimental/document-viewer.cjs +6 -6
- package/build/cjs/public/experimental/email-viewer.cjs +3 -3
- package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
- package/build/cjs/public/experimental/filter-list.cjs +16 -16
- package/build/cjs/public/experimental/filter-list.css +2 -5
- package/build/cjs/public/experimental/filter-list.css.map +1 -1
- package/build/cjs/public/experimental/image-viewer.cjs +3 -3
- package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
- package/build/cjs/public/experimental/object-table.cjs +12 -12
- package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
- package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
- package/build/cjs/public/experimental/video-viewer.cjs +3 -3
- package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
- package/build/cjs/public/experimental.cjs +151 -105
- package/build/cjs/public/experimental.css +612 -76
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +1 -0
- package/build/cjs/public/primitives.cjs +2 -1
- package/build/esm/cbac-picker/CbacBanner.js +42 -0
- package/build/esm/cbac-picker/CbacBanner.js.map +1 -0
- package/build/esm/cbac-picker/CbacBannerPopover.js +83 -0
- package/build/esm/cbac-picker/CbacBannerPopover.js.map +1 -0
- package/build/esm/cbac-picker/CbacPicker.js +69 -0
- package/build/esm/cbac-picker/CbacPicker.js.map +1 -0
- package/build/esm/cbac-picker/CbacPickerDialog.js +81 -0
- package/build/esm/cbac-picker/CbacPickerDialog.js.map +1 -0
- package/build/esm/cbac-picker/base/BaseCbacBanner.js +64 -0
- package/build/esm/cbac-picker/base/BaseCbacBanner.js.map +1 -0
- package/build/esm/cbac-picker/base/BaseCbacBanner.module.css +74 -0
- package/build/esm/cbac-picker/base/BaseCbacBannerPopover.js +168 -0
- package/build/esm/cbac-picker/base/BaseCbacBannerPopover.js.map +1 -0
- package/build/esm/cbac-picker/base/BaseCbacBannerPopover.module.css +193 -0
- package/build/esm/cbac-picker/base/BaseCbacPicker.js +74 -0
- package/build/esm/cbac-picker/base/BaseCbacPicker.js.map +1 -0
- package/build/esm/cbac-picker/base/BaseCbacPicker.module.css +47 -0
- package/build/esm/cbac-picker/base/BaseCbacPickerDialog.js +51 -0
- package/build/esm/cbac-picker/base/BaseCbacPickerDialog.js.map +1 -0
- package/build/esm/cbac-picker/base/CategoryMarkingGroup.js +91 -0
- package/build/esm/cbac-picker/base/CategoryMarkingGroup.js.map +1 -0
- package/build/esm/cbac-picker/base/CategoryMarkingGroup.module.css +69 -0
- package/build/esm/cbac-picker/base/CbacPickerDialogFooter.js +43 -0
- package/build/esm/cbac-picker/base/CbacPickerDialogFooter.js.map +1 -0
- package/build/esm/cbac-picker/base/CbacPickerDialogFooter.module.css +19 -0
- package/build/esm/cbac-picker/base/InfoBanner.js +32 -0
- package/build/esm/cbac-picker/base/InfoBanner.js.map +1 -0
- package/build/esm/cbac-picker/base/InfoBanner.module.css +30 -0
- package/build/esm/cbac-picker/base/MarkingButton.js +83 -0
- package/build/esm/cbac-picker/base/MarkingButton.js.map +1 -0
- package/build/esm/cbac-picker/base/MarkingButton.module.css +104 -0
- package/build/esm/cbac-picker/base/MaxClassificationField.js +42 -0
- package/build/esm/cbac-picker/base/MaxClassificationField.js.map +1 -0
- package/build/esm/cbac-picker/base/MaxClassificationField.module.css +39 -0
- package/build/esm/cbac-picker/base/OverflowButton.js +51 -0
- package/build/esm/cbac-picker/base/OverflowButton.js.map +1 -0
- package/build/esm/cbac-picker/base/OverflowButton.module.css +57 -0
- package/build/esm/cbac-picker/base/OverflowItem.js +64 -0
- package/build/esm/cbac-picker/base/OverflowItem.js.map +1 -0
- package/build/esm/cbac-picker/base/OverflowItem.module.css +75 -0
- package/build/esm/cbac-picker/base/ValidationWarning.js +44 -0
- package/build/esm/cbac-picker/base/ValidationWarning.js.map +1 -0
- package/build/esm/cbac-picker/base/ValidationWarning.module.css +71 -0
- package/build/esm/cbac-picker/base/selectionStateHelpers.js +35 -0
- package/build/esm/cbac-picker/base/selectionStateHelpers.js.map +1 -0
- package/build/esm/cbac-picker/types.js +2 -0
- package/build/esm/cbac-picker/types.js.map +1 -0
- package/build/esm/cbac-picker/useCbacPickerState.js +104 -0
- package/build/esm/cbac-picker/useCbacPickerState.js.map +1 -0
- package/build/esm/cbac-picker/useCbacSelection.js +52 -0
- package/build/esm/cbac-picker/useCbacSelection.js.map +1 -0
- package/build/esm/cbac-picker/useConstraintCallout.js +42 -0
- package/build/esm/cbac-picker/useConstraintCallout.js.map +1 -0
- package/build/esm/cbac-picker/utils/cbacPickerUtils.js +60 -0
- package/build/esm/cbac-picker/utils/cbacPickerUtils.js.map +1 -0
- package/build/esm/cbac-picker/utils/errorMessages.js +78 -0
- package/build/esm/cbac-picker/utils/errorMessages.js.map +1 -0
- package/build/esm/cbac-picker/utils/selectionLogic.js +91 -0
- package/build/esm/cbac-picker/utils/selectionLogic.js.map +1 -0
- package/build/esm/cbac-picker/utils/validationMessages.js +34 -0
- package/build/esm/cbac-picker/utils/validationMessages.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +2 -5
- package/build/esm/public/experimental/cbac-picker.js +36 -0
- package/build/esm/public/experimental/cbac-picker.js.map +1 -0
- package/build/esm/public/experimental.js +1 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/esm/tokens/component-tokens/filter-list.css +2 -2
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/cbac-picker/CbacBanner.d.ts +8 -0
- package/build/types/cbac-picker/CbacBanner.d.ts.map +1 -0
- package/build/types/cbac-picker/CbacBannerPopover.d.ts +9 -0
- package/build/types/cbac-picker/CbacBannerPopover.d.ts.map +1 -0
- package/build/types/cbac-picker/CbacPicker.d.ts +10 -0
- package/build/types/cbac-picker/CbacPicker.d.ts.map +1 -0
- package/build/types/cbac-picker/CbacPickerDialog.d.ts +10 -0
- package/build/types/cbac-picker/CbacPickerDialog.d.ts.map +1 -0
- package/build/types/cbac-picker/base/BaseCbacBanner.d.ts +10 -0
- package/build/types/cbac-picker/base/BaseCbacBanner.d.ts.map +1 -0
- package/build/types/cbac-picker/base/BaseCbacBannerPopover.d.ts +18 -0
- package/build/types/cbac-picker/base/BaseCbacBannerPopover.d.ts.map +1 -0
- package/build/types/cbac-picker/base/BaseCbacPicker.d.ts +18 -0
- package/build/types/cbac-picker/base/BaseCbacPicker.d.ts.map +1 -0
- package/build/types/cbac-picker/base/BaseCbacPickerDialog.d.ts +11 -0
- package/build/types/cbac-picker/base/BaseCbacPickerDialog.d.ts.map +1 -0
- package/build/types/cbac-picker/base/CategoryMarkingGroup.d.ts +15 -0
- package/build/types/cbac-picker/base/CategoryMarkingGroup.d.ts.map +1 -0
- package/build/types/cbac-picker/base/CbacPickerDialogFooter.d.ts +8 -0
- package/build/types/cbac-picker/base/CbacPickerDialogFooter.d.ts.map +1 -0
- package/build/types/cbac-picker/base/InfoBanner.d.ts +6 -0
- package/build/types/cbac-picker/base/InfoBanner.d.ts.map +1 -0
- package/build/types/cbac-picker/base/MarkingButton.d.ts +11 -0
- package/build/types/cbac-picker/base/MarkingButton.d.ts.map +1 -0
- package/build/types/cbac-picker/base/MaxClassificationField.d.ts +9 -0
- package/build/types/cbac-picker/base/MaxClassificationField.d.ts.map +1 -0
- package/build/types/cbac-picker/base/OverflowButton.d.ts +14 -0
- package/build/types/cbac-picker/base/OverflowButton.d.ts.map +1 -0
- package/build/types/cbac-picker/base/OverflowItem.d.ts +11 -0
- package/build/types/cbac-picker/base/OverflowItem.d.ts.map +1 -0
- package/build/types/cbac-picker/base/ValidationWarning.d.ts +7 -0
- package/build/types/cbac-picker/base/ValidationWarning.d.ts.map +1 -0
- package/build/types/cbac-picker/base/selectionStateHelpers.d.ts +5 -0
- package/build/types/cbac-picker/base/selectionStateHelpers.d.ts.map +1 -0
- package/build/types/cbac-picker/types.d.ts +32 -0
- package/build/types/cbac-picker/types.d.ts.map +1 -0
- package/build/types/cbac-picker/useCbacPickerState.d.ts +14 -0
- package/build/types/cbac-picker/useCbacPickerState.d.ts.map +1 -0
- package/build/types/cbac-picker/useCbacSelection.d.ts +11 -0
- package/build/types/cbac-picker/useCbacSelection.d.ts.map +1 -0
- package/build/types/cbac-picker/useConstraintCallout.d.ts +3 -0
- package/build/types/cbac-picker/useConstraintCallout.d.ts.map +1 -0
- package/build/types/cbac-picker/utils/cbacPickerUtils.d.ts +22 -0
- package/build/types/cbac-picker/utils/cbacPickerUtils.d.ts.map +1 -0
- package/build/types/cbac-picker/utils/errorMessages.d.ts +5 -0
- package/build/types/cbac-picker/utils/errorMessages.d.ts.map +1 -0
- package/build/types/cbac-picker/utils/selectionLogic.d.ts +4 -0
- package/build/types/cbac-picker/utils/selectionLogic.d.ts.map +1 -0
- package/build/types/cbac-picker/utils/validationMessages.d.ts +9 -0
- package/build/types/cbac-picker/utils/validationMessages.d.ts.map +1 -0
- package/build/types/public/experimental/cbac-picker.d.ts +12 -0
- package/build/types/public/experimental/cbac-picker.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +1 -0
- package/build/types/public/experimental.d.ts.map +1 -1
- package/docs/CbacPicker.md +495 -0
- package/package.json +11 -2
- package/build/cjs/chunk-GKWXRVFO.cjs +0 -11
- package/build/cjs/chunk-JPVZGQXS.cjs +0 -11
- package/build/cjs/chunk-UJXNFENA.cjs +0 -11
- package/build/cjs/chunk-UTB55N5Y.cjs.map +0 -1
- package/build/cjs/chunk-W6C6UWUN.cjs +0 -11
- package/build/cjs/chunk-YLYICFCA.cjs +0 -11
package/AGENTS.md
CHANGED
|
@@ -51,25 +51,32 @@ Components are imported from their individual entry points under `@osdk/react-co
|
|
|
51
51
|
- `@osdk/react-components/experimental/video-viewer` — VideoViewer, BaseVideoViewer
|
|
52
52
|
- `@osdk/react-components/experimental/xml-viewer` — XmlViewer, BaseXmlViewer
|
|
53
53
|
|
|
54
|
-
| Component
|
|
55
|
-
|
|
|
56
|
-
| **ObjectTable**
|
|
57
|
-
| **BaseTable**
|
|
58
|
-
| **FilterList**
|
|
59
|
-
| **BaseFilterList**
|
|
60
|
-
| **ActionForm**
|
|
61
|
-
| **BaseForm**
|
|
62
|
-
| **ColumnConfigDialog**
|
|
63
|
-
| **PdfViewer**
|
|
64
|
-
| **BasePdfViewer**
|
|
65
|
-
| **TiffRenderer**
|
|
66
|
-
| **MarkdownRenderer**
|
|
67
|
-
| **DocumentViewer**
|
|
68
|
-
| **EmailViewer**
|
|
69
|
-
| **ExcelViewer**
|
|
70
|
-
| **ImageViewer**
|
|
71
|
-
| **VideoViewer**
|
|
72
|
-
| **XmlViewer**
|
|
54
|
+
| Component | Description |
|
|
55
|
+
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| **ObjectTable** | Table for displaying OSDK object sets with sorting, filtering, inline editing, column pinning/resizing, row selection, and infinite scroll. |
|
|
57
|
+
| **BaseTable** | OSDK-agnostic base table — use when building custom data fetching on top of the table UI. |
|
|
58
|
+
| **FilterList** | Aggregation-based filter UI for object sets with draggable reordering. |
|
|
59
|
+
| **BaseFilterList** | OSDK-agnostic base filter list — use for custom filter implementations. |
|
|
60
|
+
| **ActionForm** | Form for applying OSDK actions with generated or custom field definitions. |
|
|
61
|
+
| **BaseForm** | OSDK-agnostic base action form — use when supplying explicit field content and submit handling. |
|
|
62
|
+
| **ColumnConfigDialog** | Dialog for managing column visibility and drag-and-drop reordering. |
|
|
63
|
+
| **PdfViewer** | PDF viewer for OSDK Media objects with toolbar, search, annotations, sidebar (thumbnails/outline), highlight mode, and form fields. |
|
|
64
|
+
| **BasePdfViewer** | OSDK-agnostic base PDF viewer — accepts a URL or ArrayBuffer directly. Use when building custom data fetching on top of the viewer UI. |
|
|
65
|
+
| **TiffRenderer** | TIFF image renderer — accepts a `Uint8Array` and renders onto a canvas with size validation and error handling. |
|
|
66
|
+
| **MarkdownRenderer** | Markdown renderer that accepts a markdown string and renders it with styled headings, code blocks, tables, and links. |
|
|
67
|
+
| **DocumentViewer** | Unified media viewer that auto-detects file type (PDF, TIFF, image, video, Excel, email, markdown, XML) and renders the appropriate viewer. |
|
|
68
|
+
| **EmailViewer** | Email viewer — parses and renders `.eml` files with headers, HTML body (sandboxed iframe), and plain text fallback. |
|
|
69
|
+
| **ExcelViewer** | Excel viewer — parses and renders `.xlsx` spreadsheets with sheet tabs and column/row headers. |
|
|
70
|
+
| **ImageViewer** | Image viewer — renders images (PNG, JPEG, GIF, SVG, WebP, BMP) with object-fit contain. |
|
|
71
|
+
| **VideoViewer** | Video viewer — renders video with native browser controls. |
|
|
72
|
+
| **XmlViewer** | XML viewer — renders XML content with syntax preservation. |
|
|
73
|
+
| **CbacPicker** | Picker for classification-based access control (CBAC) markings — disjunctive/conjunctive categories, restriction enforcement, banner. |
|
|
74
|
+
| **CbacPickerDialog** | Dialog wrapper for `CbacPicker` with confirm/cancel actions and validation. |
|
|
75
|
+
| **CbacBanner** | OSDK-aware classification banner that resolves a marking-set into a colored banner. |
|
|
76
|
+
| **BaseCbacPicker** | OSDK-agnostic base CBAC picker — use when building custom data fetching on top of the picker UI. |
|
|
77
|
+
| **BaseCbacBanner** | OSDK-agnostic classification banner display with customizable colors and text. |
|
|
78
|
+
| **BaseCbacPickerDialog** | OSDK-agnostic dialog wrapper for `BaseCbacPicker`. |
|
|
79
|
+
| **MaxClassificationField** | Field that lets users constrain the maximum classification allowed for a marking selection. |
|
|
73
80
|
|
|
74
81
|
## Documentation
|
|
75
82
|
|
|
@@ -82,3 +89,4 @@ Before using any component, read the relevant doc from this package:
|
|
|
82
89
|
- **TiffRenderer**: Read [docs/TiffViewer.md](./docs/TiffViewer.md) for props and usage
|
|
83
90
|
- **MarkdownRenderer**: Read [docs/MarkdownRenderer.md](./docs/MarkdownRenderer.md) for props, examples, and theming
|
|
84
91
|
- **FilterList**: Read [docs/FilterList.md](./docs/FilterList.md) for props, examples, and usage
|
|
92
|
+
- **CbacPicker**: Read [docs/CbacPicker.md](./docs/CbacPicker.md) for props, examples, base components, and troubleshooting
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @osdk/react-components
|
|
2
2
|
|
|
3
|
+
## 0.27.0-main-3c39c107baa40833fcc79d0d913fb4a468a6bd06
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3c39c10: Merge `@osdk/cbac-components` into `@osdk/react-components`. The CBAC picker (`CbacPicker`, `CbacPickerDialog`, `CbacBanner`, `BaseCbacPicker`, `BaseCbacBanner`, `BaseCbacPickerDialog`, `MaxClassificationField`, and selection-logic utilities) is now exported from `@osdk/react-components/experimental/cbac-picker`. The legacy `@osdk/cbac-components` package remains in the repository for reference but is no longer the source of truth.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 820bc7b: Fix listogram bar border-radius distortion and use theme-aware background token
|
|
12
|
+
|
|
3
13
|
## 0.26.0
|
|
4
14
|
|
|
5
15
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -137,6 +137,7 @@ The components that this package will provide are:
|
|
|
137
137
|
| `ImageViewer` | Renders images (PNG, JPEG, GIF, SVG, WebP, BMP) | [Guide](https://github.com/palantir/osdk-ts/blob/main/packages/react-components/docs/ImageViewer.md) |
|
|
138
138
|
| `VideoViewer` | Renders video with native browser controls | [Guide](https://github.com/palantir/osdk-ts/blob/main/packages/react-components/docs/VideoViewer.md) |
|
|
139
139
|
| `XmlViewer` | Renders XML content with syntax preservation | [Guide](https://github.com/palantir/osdk-ts/blob/main/packages/react-components/docs/XmlViewer.md) |
|
|
140
|
+
| `CbacPicker` | Picker for classification-based access control (CBAC) markings with banner display | [Guide](https://github.com/palantir/osdk-ts/blob/main/packages/react-components/docs/CbacPicker.md) |
|
|
140
141
|
|
|
141
142
|
## Component Architecture
|
|
142
143
|
|
|
@@ -0,0 +1,42 @@
|
|
|
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 { BaseCbacBanner } from "./base/BaseCbacBanner.js";
|
|
20
|
+
import { resolveBannerDisplay } from "./utils/cbacPickerUtils.js";
|
|
21
|
+
export function CbacBanner({
|
|
22
|
+
markingIds,
|
|
23
|
+
onClick,
|
|
24
|
+
onDismiss,
|
|
25
|
+
className
|
|
26
|
+
}) {
|
|
27
|
+
const {
|
|
28
|
+
banner
|
|
29
|
+
} = useCbacBanner({
|
|
30
|
+
markingIds
|
|
31
|
+
});
|
|
32
|
+
const resolved = resolveBannerDisplay(banner);
|
|
33
|
+
return /*#__PURE__*/React.createElement(BaseCbacBanner, {
|
|
34
|
+
classificationString: resolved.classificationString,
|
|
35
|
+
textColor: resolved.textColor,
|
|
36
|
+
backgroundColors: resolved.backgroundColors,
|
|
37
|
+
onClick: onClick,
|
|
38
|
+
onDismiss: onDismiss,
|
|
39
|
+
className: className
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=CbacBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CbacBanner.js","names":["useCbacBanner","React","BaseCbacBanner","resolveBannerDisplay","CbacBanner","markingIds","onClick","onDismiss","className","banner","resolved","createElement","classificationString","textColor","backgroundColors"],"sources":["CbacBanner.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\";\nimport { BaseCbacBanner } from \"./base/BaseCbacBanner.js\";\nimport { resolveBannerDisplay } from \"./utils/cbacPickerUtils.js\";\n\nexport interface CbacBannerProps {\n markingIds: string[];\n onClick?: () => void;\n onDismiss?: () => void;\n className?: string;\n}\n\nexport function CbacBanner({\n markingIds,\n onClick,\n onDismiss,\n className,\n}: CbacBannerProps): React.ReactElement {\n const { banner } = useCbacBanner({ markingIds });\n const resolved = resolveBannerDisplay(banner);\n\n return (\n <BaseCbacBanner\n classificationString={resolved.classificationString}\n textColor={resolved.textColor}\n backgroundColors={resolved.backgroundColors}\n onClick={onClick}\n onDismiss={onDismiss}\n className={className}\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;AACzB,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,oBAAoB,QAAQ,4BAA4B;AASjE,OAAO,SAASC,UAAUA,CAAC;EACzBC,UAAU;EACVC,OAAO;EACPC,SAAS;EACTC;AACe,CAAC,EAAsB;EACtC,MAAM;IAAEC;EAAO,CAAC,GAAGT,aAAa,CAAC;IAAEK;EAAW,CAAC,CAAC;EAChD,MAAMK,QAAQ,GAAGP,oBAAoB,CAACM,MAAM,CAAC;EAE7C,oBACER,KAAA,CAAAU,aAAA,CAACT,cAAc;IACbU,oBAAoB,EAAEF,QAAQ,CAACE,oBAAqB;IACpDC,SAAS,EAAEH,QAAQ,CAACG,SAAU;IAC9BC,gBAAgB,EAAEJ,QAAQ,CAACI,gBAAiB;IAC5CR,OAAO,EAAEA,OAAQ;IACjBC,SAAS,EAAEA,SAAU;IACrBC,SAAS,EAAEA;EAAU,CACtB,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
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, useMarkingCategories, useMarkings } from "@osdk/react/platform-apis";
|
|
18
|
+
import React from "react";
|
|
19
|
+
import { BaseCbacBannerPopover } from "./base/BaseCbacBannerPopover.js";
|
|
20
|
+
import { CbacPickerDialog } from "./CbacPickerDialog.js";
|
|
21
|
+
import { groupMarkingsByCategory, resolveBannerDisplay } from "./utils/cbacPickerUtils.js";
|
|
22
|
+
export function CbacBannerPopover({
|
|
23
|
+
markingIds,
|
|
24
|
+
onChange,
|
|
25
|
+
maxClassificationConstraint,
|
|
26
|
+
className
|
|
27
|
+
}) {
|
|
28
|
+
const {
|
|
29
|
+
banner,
|
|
30
|
+
isLoading: bannerLoading,
|
|
31
|
+
error: bannerError,
|
|
32
|
+
refetch: refetchBanner
|
|
33
|
+
} = useCbacBanner({
|
|
34
|
+
markingIds
|
|
35
|
+
});
|
|
36
|
+
const {
|
|
37
|
+
categories,
|
|
38
|
+
isLoading: categoriesLoading,
|
|
39
|
+
error: categoriesError,
|
|
40
|
+
refetch: refetchCategories
|
|
41
|
+
} = useMarkingCategories();
|
|
42
|
+
const {
|
|
43
|
+
markings,
|
|
44
|
+
isLoading: markingsLoading,
|
|
45
|
+
error: markingsError,
|
|
46
|
+
refetch: refetchMarkings
|
|
47
|
+
} = useMarkings();
|
|
48
|
+
const [isDialogOpen, setIsDialogOpen] = React.useState(false);
|
|
49
|
+
const handleRetry = React.useCallback(() => {
|
|
50
|
+
refetchBanner();
|
|
51
|
+
refetchCategories();
|
|
52
|
+
refetchMarkings();
|
|
53
|
+
}, [refetchBanner, refetchCategories, refetchMarkings]);
|
|
54
|
+
const appliedMarkings = React.useMemo(() => groupMarkingsByCategory(markingIds, categories, markings), [markingIds, categories, markings]);
|
|
55
|
+
const resolved = resolveBannerDisplay(banner);
|
|
56
|
+
const description = markingIds.length === 0 ? "This data has no classification restrictions." : `This data is classified as: ${resolved.classificationString}`;
|
|
57
|
+
const handleEditClick = React.useCallback(() => {
|
|
58
|
+
setIsDialogOpen(true);
|
|
59
|
+
}, []);
|
|
60
|
+
const handleConfirm = React.useCallback(newMarkingIds => {
|
|
61
|
+
onChange(newMarkingIds);
|
|
62
|
+
setIsDialogOpen(false);
|
|
63
|
+
}, [onChange]);
|
|
64
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BaseCbacBannerPopover, {
|
|
65
|
+
classificationString: resolved.classificationString,
|
|
66
|
+
textColor: resolved.textColor,
|
|
67
|
+
backgroundColors: resolved.backgroundColors,
|
|
68
|
+
appliedMarkings: appliedMarkings,
|
|
69
|
+
onEditClick: handleEditClick,
|
|
70
|
+
description: description,
|
|
71
|
+
isLoading: bannerLoading || categoriesLoading || markingsLoading,
|
|
72
|
+
error: bannerError ?? categoriesError ?? markingsError,
|
|
73
|
+
onRetry: handleRetry,
|
|
74
|
+
className: className
|
|
75
|
+
}), isDialogOpen && /*#__PURE__*/React.createElement(CbacPickerDialog, {
|
|
76
|
+
isOpen: isDialogOpen,
|
|
77
|
+
onOpenChange: setIsDialogOpen,
|
|
78
|
+
onConfirm: handleConfirm,
|
|
79
|
+
initialMarkingIds: markingIds,
|
|
80
|
+
maxClassificationConstraint: maxClassificationConstraint
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=CbacBannerPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CbacBannerPopover.js","names":["useCbacBanner","useMarkingCategories","useMarkings","React","BaseCbacBannerPopover","CbacPickerDialog","groupMarkingsByCategory","resolveBannerDisplay","CbacBannerPopover","markingIds","onChange","maxClassificationConstraint","className","banner","isLoading","bannerLoading","error","bannerError","refetch","refetchBanner","categories","categoriesLoading","categoriesError","refetchCategories","markings","markingsLoading","markingsError","refetchMarkings","isDialogOpen","setIsDialogOpen","useState","handleRetry","useCallback","appliedMarkings","useMemo","resolved","description","length","classificationString","handleEditClick","handleConfirm","newMarkingIds","createElement","Fragment","textColor","backgroundColors","onEditClick","onRetry","isOpen","onOpenChange","onConfirm","initialMarkingIds"],"sources":["CbacBannerPopover.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 {\n useCbacBanner,\n useMarkingCategories,\n useMarkings,\n} from \"@osdk/react/platform-apis\";\nimport React from \"react\";\nimport { BaseCbacBannerPopover } from \"./base/BaseCbacBannerPopover.js\";\nimport { CbacPickerDialog } from \"./CbacPickerDialog.js\";\nimport type { MaxClassificationConstraint } from \"./types.js\";\nimport {\n groupMarkingsByCategory,\n resolveBannerDisplay,\n} from \"./utils/cbacPickerUtils.js\";\n\nexport interface CbacBannerPopoverProps {\n markingIds: string[];\n onChange: (markingIds: string[]) => void;\n maxClassificationConstraint?: MaxClassificationConstraint;\n className?: string;\n}\n\nexport function CbacBannerPopover({\n markingIds,\n onChange,\n maxClassificationConstraint,\n className,\n}: CbacBannerPopoverProps): React.ReactElement {\n const {\n banner,\n isLoading: bannerLoading,\n error: bannerError,\n refetch: refetchBanner,\n } = useCbacBanner({ markingIds });\n const {\n categories,\n isLoading: categoriesLoading,\n error: categoriesError,\n refetch: refetchCategories,\n } = useMarkingCategories();\n const {\n markings,\n isLoading: markingsLoading,\n error: markingsError,\n refetch: refetchMarkings,\n } = useMarkings();\n\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n\n const isLoading = bannerLoading || categoriesLoading || markingsLoading;\n\n const error = bannerError ?? categoriesError ?? markingsError;\n\n const handleRetry = React.useCallback(() => {\n refetchBanner();\n refetchCategories();\n refetchMarkings();\n }, [refetchBanner, refetchCategories, refetchMarkings]);\n\n const appliedMarkings = React.useMemo(\n () => groupMarkingsByCategory(markingIds, categories, markings),\n [markingIds, categories, markings],\n );\n\n const resolved = resolveBannerDisplay(banner);\n\n const description = markingIds.length === 0\n ? \"This data has no classification restrictions.\"\n : `This data is classified as: ${resolved.classificationString}`;\n\n const handleEditClick = React.useCallback(() => {\n setIsDialogOpen(true);\n }, []);\n\n const handleConfirm = React.useCallback((newMarkingIds: string[]) => {\n onChange(newMarkingIds);\n setIsDialogOpen(false);\n }, [onChange]);\n\n return (\n <>\n <BaseCbacBannerPopover\n classificationString={resolved.classificationString}\n textColor={resolved.textColor}\n backgroundColors={resolved.backgroundColors}\n appliedMarkings={appliedMarkings}\n onEditClick={handleEditClick}\n description={description}\n isLoading={isLoading}\n error={error}\n onRetry={handleRetry}\n className={className}\n />\n {isDialogOpen && (\n <CbacPickerDialog\n isOpen={isDialogOpen}\n onOpenChange={setIsDialogOpen}\n onConfirm={handleConfirm}\n initialMarkingIds={markingIds}\n maxClassificationConstraint={maxClassificationConstraint}\n />\n )}\n </>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,aAAa,EACbC,oBAAoB,EACpBC,WAAW,QACN,2BAA2B;AAClC,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,qBAAqB,QAAQ,iCAAiC;AACvE,SAASC,gBAAgB,QAAQ,uBAAuB;AAExD,SACEC,uBAAuB,EACvBC,oBAAoB,QACf,4BAA4B;AASnC,OAAO,SAASC,iBAAiBA,CAAC;EAChCC,UAAU;EACVC,QAAQ;EACRC,2BAA2B;EAC3BC;AACsB,CAAC,EAAsB;EAC7C,MAAM;IACJC,MAAM;IACNC,SAAS,EAAEC,aAAa;IACxBC,KAAK,EAAEC,WAAW;IAClBC,OAAO,EAAEC;EACX,CAAC,GAAGnB,aAAa,CAAC;IAAES;EAAW,CAAC,CAAC;EACjC,MAAM;IACJW,UAAU;IACVN,SAAS,EAAEO,iBAAiB;IAC5BL,KAAK,EAAEM,eAAe;IACtBJ,OAAO,EAAEK;EACX,CAAC,GAAGtB,oBAAoB,CAAC,CAAC;EAC1B,MAAM;IACJuB,QAAQ;IACRV,SAAS,EAAEW,eAAe;IAC1BT,KAAK,EAAEU,aAAa;IACpBR,OAAO,EAAES;EACX,CAAC,GAAGzB,WAAW,CAAC,CAAC;EAEjB,MAAM,CAAC0B,YAAY,EAAEC,eAAe,CAAC,GAAG1B,KAAK,CAAC2B,QAAQ,CAAC,KAAK,CAAC;EAM7D,MAAMC,WAAW,GAAG5B,KAAK,CAAC6B,WAAW,CAAC,MAAM;IAC1Cb,aAAa,CAAC,CAAC;IACfI,iBAAiB,CAAC,CAAC;IACnBI,eAAe,CAAC,CAAC;EACnB,CAAC,EAAE,CAACR,aAAa,EAAEI,iBAAiB,EAAEI,eAAe,CAAC,CAAC;EAEvD,MAAMM,eAAe,GAAG9B,KAAK,CAAC+B,OAAO,CACnC,MAAM5B,uBAAuB,CAACG,UAAU,EAAEW,UAAU,EAAEI,QAAQ,CAAC,EAC/D,CAACf,UAAU,EAAEW,UAAU,EAAEI,QAAQ,CACnC,CAAC;EAED,MAAMW,QAAQ,GAAG5B,oBAAoB,CAACM,MAAM,CAAC;EAE7C,MAAMuB,WAAW,GAAG3B,UAAU,CAAC4B,MAAM,KAAK,CAAC,GACvC,+CAA+C,GAC/C,+BAA+BF,QAAQ,CAACG,oBAAoB,EAAE;EAElE,MAAMC,eAAe,GAAGpC,KAAK,CAAC6B,WAAW,CAAC,MAAM;IAC9CH,eAAe,CAAC,IAAI,CAAC;EACvB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMW,aAAa,GAAGrC,KAAK,CAAC6B,WAAW,CAAES,aAAuB,IAAK;IACnE/B,QAAQ,CAAC+B,aAAa,CAAC;IACvBZ,eAAe,CAAC,KAAK,CAAC;EACxB,CAAC,EAAE,CAACnB,QAAQ,CAAC,CAAC;EAEd,oBACEP,KAAA,CAAAuC,aAAA,CAAAvC,KAAA,CAAAwC,QAAA,qBACExC,KAAA,CAAAuC,aAAA,CAACtC,qBAAqB;IACpBkC,oBAAoB,EAAEH,QAAQ,CAACG,oBAAqB;IACpDM,SAAS,EAAET,QAAQ,CAACS,SAAU;IAC9BC,gBAAgB,EAAEV,QAAQ,CAACU,gBAAiB;IAC5CZ,eAAe,EAAEA,eAAgB;IACjCa,WAAW,EAAEP,eAAgB;IAC7BH,WAAW,EAAEA,WAAY;IACzBtB,SAAS,EAvCGC,aAAa,IAAIM,iBAAiB,IAAII,eAuC7B;IACrBT,KAAK,EAtCGC,WAAW,IAAIK,eAAe,IAAII,aAsC7B;IACbqB,OAAO,EAAEhB,WAAY;IACrBnB,SAAS,EAAEA;EAAU,CACtB,CAAC,EACDgB,YAAY,iBACXzB,KAAA,CAAAuC,aAAA,CAACrC,gBAAgB;IACf2C,MAAM,EAAEpB,YAAa;IACrBqB,YAAY,EAAEpB,eAAgB;IAC9BqB,SAAS,EAAEV,aAAc;IACzBW,iBAAiB,EAAE1C,UAAW;IAC9BE,2BAA2B,EAAEA;EAA4B,CAC1D,CAEH,CAAC;AAEP","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
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 React from "react";
|
|
18
|
+
import { BaseCbacPicker } from "./base/BaseCbacPicker.js";
|
|
19
|
+
import { useCbacSelection } from "./useCbacSelection.js";
|
|
20
|
+
import { useConstraintCallout } from "./useConstraintCallout.js";
|
|
21
|
+
import { EMPTY_ARRAY } from "./utils/cbacPickerUtils.js";
|
|
22
|
+
import { toggleMarking } from "./utils/selectionLogic.js";
|
|
23
|
+
export function CbacPicker({
|
|
24
|
+
initialMarkingIds,
|
|
25
|
+
onChange,
|
|
26
|
+
maxClassificationConstraint,
|
|
27
|
+
readOnly,
|
|
28
|
+
className
|
|
29
|
+
}) {
|
|
30
|
+
const {
|
|
31
|
+
selectedIdsRef,
|
|
32
|
+
setSelectedIds,
|
|
33
|
+
categoryGroups,
|
|
34
|
+
markingStates,
|
|
35
|
+
banner,
|
|
36
|
+
requiredMarkingGroups,
|
|
37
|
+
isValid,
|
|
38
|
+
isLoading,
|
|
39
|
+
error
|
|
40
|
+
} = useCbacSelection(initialMarkingIds);
|
|
41
|
+
const handleMarkingToggle = React.useCallback(markingId => {
|
|
42
|
+
if (readOnly) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const newSelection = toggleMarking(markingId, selectedIdsRef.current, categoryGroups);
|
|
46
|
+
setSelectedIds(newSelection);
|
|
47
|
+
onChange(newSelection);
|
|
48
|
+
}, [readOnly, categoryGroups, onChange]);
|
|
49
|
+
const handleDismiss = React.useCallback(() => {
|
|
50
|
+
setSelectedIds(EMPTY_ARRAY);
|
|
51
|
+
onChange(EMPTY_ARRAY);
|
|
52
|
+
}, [onChange]);
|
|
53
|
+
const constraintCallout = useConstraintCallout(maxClassificationConstraint);
|
|
54
|
+
return /*#__PURE__*/React.createElement(BaseCbacPicker, {
|
|
55
|
+
categories: categoryGroups,
|
|
56
|
+
markingStates: markingStates,
|
|
57
|
+
banner: banner,
|
|
58
|
+
onMarkingToggle: handleMarkingToggle,
|
|
59
|
+
onDismissBanner: handleDismiss,
|
|
60
|
+
requiredMarkingGroups: requiredMarkingGroups,
|
|
61
|
+
isValid: isValid,
|
|
62
|
+
readOnly: readOnly,
|
|
63
|
+
isLoading: isLoading,
|
|
64
|
+
error: error,
|
|
65
|
+
validationCallouts: constraintCallout,
|
|
66
|
+
className: className
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=CbacPicker.js.map
|
|
@@ -0,0 +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\";\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 initialMarkingIds?: string[];\n onChange: (markingIds: string[]) => void;\n maxClassificationConstraint?: MaxClassificationConstraint;\n readOnly?: boolean;\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;AACzB,SAASC,cAAc,QAAQ,0BAA0B;AAEzD,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,oBAAoB,QAAQ,2BAA2B;AAChE,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,aAAa,QAAQ,2BAA2B;AAUzD,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":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 React from "react";
|
|
18
|
+
import { BaseCbacPickerDialog } from "./base/BaseCbacPickerDialog.js";
|
|
19
|
+
import { useCbacSelection } from "./useCbacSelection.js";
|
|
20
|
+
import { useConstraintCallout } from "./useConstraintCallout.js";
|
|
21
|
+
import { getSubmitDisabledReason } from "./utils/validationMessages.js";
|
|
22
|
+
export function CbacPickerDialog({
|
|
23
|
+
isOpen,
|
|
24
|
+
onOpenChange,
|
|
25
|
+
onConfirm,
|
|
26
|
+
initialMarkingIds,
|
|
27
|
+
maxClassificationConstraint
|
|
28
|
+
}) {
|
|
29
|
+
const {
|
|
30
|
+
selectedIds,
|
|
31
|
+
categoryGroups,
|
|
32
|
+
markingStates,
|
|
33
|
+
banner,
|
|
34
|
+
requiredMarkingGroups,
|
|
35
|
+
isValid,
|
|
36
|
+
userSatisfiesMarkings,
|
|
37
|
+
disallowedMarkingIds,
|
|
38
|
+
isLoading,
|
|
39
|
+
error,
|
|
40
|
+
toggle,
|
|
41
|
+
dismiss,
|
|
42
|
+
reset
|
|
43
|
+
} = useCbacSelection(initialMarkingIds);
|
|
44
|
+
|
|
45
|
+
// Parent controls dialog close on confirm (e.g. to show a loading state)
|
|
46
|
+
const handleConfirm = React.useCallback(() => {
|
|
47
|
+
onConfirm(selectedIds);
|
|
48
|
+
}, [onConfirm, selectedIds]);
|
|
49
|
+
const handleCancel = React.useCallback(() => {
|
|
50
|
+
reset();
|
|
51
|
+
onOpenChange(false);
|
|
52
|
+
}, [reset, onOpenChange]);
|
|
53
|
+
const hasInitialMarkings = initialMarkingIds !== undefined && initialMarkingIds.length > 0;
|
|
54
|
+
const submitDisabledReason = React.useMemo(() => getSubmitDisabledReason({
|
|
55
|
+
isValid,
|
|
56
|
+
requiredMarkingGroups,
|
|
57
|
+
selectedIds,
|
|
58
|
+
disallowedMarkingIds,
|
|
59
|
+
userSatisfiesMarkings
|
|
60
|
+
}), [isValid, requiredMarkingGroups, selectedIds, disallowedMarkingIds, userSatisfiesMarkings]);
|
|
61
|
+
const constraintCallout = useConstraintCallout(maxClassificationConstraint);
|
|
62
|
+
return /*#__PURE__*/React.createElement(BaseCbacPickerDialog, {
|
|
63
|
+
isOpen: isOpen,
|
|
64
|
+
onOpenChange: onOpenChange,
|
|
65
|
+
onConfirm: handleConfirm,
|
|
66
|
+
onCancel: handleCancel,
|
|
67
|
+
title: hasInitialMarkings ? "Edit classification" : "Add classification",
|
|
68
|
+
categories: categoryGroups,
|
|
69
|
+
markingStates: markingStates,
|
|
70
|
+
banner: banner,
|
|
71
|
+
onMarkingToggle: toggle,
|
|
72
|
+
onDismissBanner: dismiss,
|
|
73
|
+
requiredMarkingGroups: requiredMarkingGroups,
|
|
74
|
+
isValid: isValid,
|
|
75
|
+
submitDisabledReason: submitDisabledReason,
|
|
76
|
+
validationCallouts: constraintCallout,
|
|
77
|
+
isLoading: isLoading,
|
|
78
|
+
error: error
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=CbacPickerDialog.js.map
|
|
@@ -0,0 +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\";\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 = initialMarkingIds !== undefined\n && 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;AACzB,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,GAAGlB,iBAAiB,KAAKmB,SAAS,IACrDnB,iBAAiB,CAACoB,MAAM,GAAG,CAAC;EAEjC,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":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
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 { Button } from "@base-ui/react/button";
|
|
18
|
+
import { Cross } from "@blueprintjs/icons";
|
|
19
|
+
import classnames from "classnames";
|
|
20
|
+
import React from "react";
|
|
21
|
+
import { backgroundFromColors } from "../utils/cbacPickerUtils.js";
|
|
22
|
+
import styles from "./BaseCbacBanner.module.css.js";
|
|
23
|
+
export function BaseCbacBanner({
|
|
24
|
+
classificationString,
|
|
25
|
+
textColor,
|
|
26
|
+
backgroundColors,
|
|
27
|
+
onClick,
|
|
28
|
+
onDismiss,
|
|
29
|
+
className
|
|
30
|
+
}) {
|
|
31
|
+
const bannerStyle = React.useMemo(() => ({
|
|
32
|
+
"--osdk-cbac-banner-bg": backgroundFromColors(backgroundColors),
|
|
33
|
+
"--osdk-cbac-banner-color": textColor
|
|
34
|
+
}), [textColor, backgroundColors]);
|
|
35
|
+
const handleDismiss = React.useCallback(e => {
|
|
36
|
+
e.stopPropagation();
|
|
37
|
+
onDismiss?.();
|
|
38
|
+
}, [onDismiss]);
|
|
39
|
+
const dismissButton = onDismiss != null ? /*#__PURE__*/React.createElement(Button, {
|
|
40
|
+
className: styles.dismissButton,
|
|
41
|
+
onClick: handleDismiss,
|
|
42
|
+
"aria-label": "Clear classification"
|
|
43
|
+
}, /*#__PURE__*/React.createElement(Cross, {
|
|
44
|
+
size: 12,
|
|
45
|
+
color: "currentColor"
|
|
46
|
+
})) : null;
|
|
47
|
+
if (onClick != null) {
|
|
48
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
49
|
+
className: classnames(styles.bannerRow, className),
|
|
50
|
+
style: bannerStyle
|
|
51
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
52
|
+
className: classnames(styles.banner, styles.clickable),
|
|
53
|
+
onClick: onClick,
|
|
54
|
+
"aria-label": "Edit classification"
|
|
55
|
+
}, classificationString), dismissButton);
|
|
56
|
+
}
|
|
57
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
58
|
+
className: classnames(styles.bannerRow, className),
|
|
59
|
+
style: bannerStyle
|
|
60
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
61
|
+
className: styles.banner
|
|
62
|
+
}, classificationString), dismissButton);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=BaseCbacBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseCbacBanner.js","names":["Button","Cross","classnames","React","backgroundFromColors","styles","BaseCbacBanner","classificationString","textColor","backgroundColors","onClick","onDismiss","className","bannerStyle","useMemo","handleDismiss","useCallback","e","stopPropagation","dismissButton","createElement","size","color","bannerRow","style","banner","clickable"],"sources":["BaseCbacBanner.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 { Button } from \"@base-ui/react/button\";\nimport { Cross } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport React from \"react\";\nimport { backgroundFromColors } from \"../utils/cbacPickerUtils.js\";\nimport styles from \"./BaseCbacBanner.module.css\";\n\nexport interface BaseCbacBannerProps {\n classificationString: string;\n textColor: string;\n backgroundColors: string[];\n onClick?: () => void;\n onDismiss?: () => void;\n className?: string;\n}\n\nexport function BaseCbacBanner({\n classificationString,\n textColor,\n backgroundColors,\n onClick,\n onDismiss,\n className,\n}: BaseCbacBannerProps): React.ReactElement {\n const bannerStyle = React.useMemo((): React.CSSProperties => ({\n \"--osdk-cbac-banner-bg\": backgroundFromColors(backgroundColors),\n \"--osdk-cbac-banner-color\": textColor,\n } as React.CSSProperties), [textColor, backgroundColors]);\n\n const handleDismiss = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDismiss?.();\n },\n [onDismiss],\n );\n\n const dismissButton = onDismiss != null\n ? (\n <Button\n className={styles.dismissButton}\n onClick={handleDismiss}\n aria-label=\"Clear classification\"\n >\n <Cross size={12} color=\"currentColor\" />\n </Button>\n )\n : null;\n\n if (onClick != null) {\n return (\n <div\n className={classnames(styles.bannerRow, className)}\n style={bannerStyle}\n >\n <Button\n className={classnames(styles.banner, styles.clickable)}\n onClick={onClick}\n aria-label=\"Edit classification\"\n >\n {classificationString}\n </Button>\n {dismissButton}\n </div>\n );\n }\n\n return (\n <div\n className={classnames(styles.bannerRow, className)}\n style={bannerStyle}\n >\n <span className={styles.banner}>\n {classificationString}\n </span>\n {dismissButton}\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,KAAK,QAAQ,oBAAoB;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,oBAAoB,QAAQ,6BAA6B;AAClE,OAAOC,MAAM,MAAM,6BAA6B;AAWhD,OAAO,SAASC,cAAcA,CAAC;EAC7BC,oBAAoB;EACpBC,SAAS;EACTC,gBAAgB;EAChBC,OAAO;EACPC,SAAS;EACTC;AACmB,CAAC,EAAsB;EAC1C,MAAMC,WAAW,GAAGV,KAAK,CAACW,OAAO,CAAC,OAA4B;IAC5D,uBAAuB,EAAEV,oBAAoB,CAACK,gBAAgB,CAAC;IAC/D,0BAA0B,EAAED;EAC9B,CAAC,CAAwB,EAAE,CAACA,SAAS,EAAEC,gBAAgB,CAAC,CAAC;EAEzD,MAAMM,aAAa,GAAGZ,KAAK,CAACa,WAAW,CACpCC,CAAmB,IAAK;IACvBA,CAAC,CAACC,eAAe,CAAC,CAAC;IACnBP,SAAS,GAAG,CAAC;EACf,CAAC,EACD,CAACA,SAAS,CACZ,CAAC;EAED,MAAMQ,aAAa,GAAGR,SAAS,IAAI,IAAI,gBAEnCR,KAAA,CAAAiB,aAAA,CAACpB,MAAM;IACLY,SAAS,EAAEP,MAAM,CAACc,aAAc;IAChCT,OAAO,EAAEK,aAAc;IACvB,cAAW;EAAsB,gBAEjCZ,KAAA,CAAAiB,aAAA,CAACnB,KAAK;IAACoB,IAAI,EAAE,EAAG;IAACC,KAAK,EAAC;EAAc,CAAE,CACjC,CAAC,GAET,IAAI;EAER,IAAIZ,OAAO,IAAI,IAAI,EAAE;IACnB,oBACEP,KAAA,CAAAiB,aAAA;MACER,SAAS,EAAEV,UAAU,CAACG,MAAM,CAACkB,SAAS,EAAEX,SAAS,CAAE;MACnDY,KAAK,EAAEX;IAAY,gBAEnBV,KAAA,CAAAiB,aAAA,CAACpB,MAAM;MACLY,SAAS,EAAEV,UAAU,CAACG,MAAM,CAACoB,MAAM,EAAEpB,MAAM,CAACqB,SAAS,CAAE;MACvDhB,OAAO,EAAEA,OAAQ;MACjB,cAAW;IAAqB,GAE/BH,oBACK,CAAC,EACRY,aACE,CAAC;EAEV;EAEA,oBACEhB,KAAA,CAAAiB,aAAA;IACER,SAAS,EAAEV,UAAU,CAACG,MAAM,CAACkB,SAAS,EAAEX,SAAS,CAAE;IACnDY,KAAK,EAAEX;EAAY,gBAEnBV,KAAA,CAAAiB,aAAA;IAAMR,SAAS,EAAEP,MAAM,CAACoB;EAAO,GAC5BlB,oBACG,CAAC,EACNY,aACE,CAAC;AAEV","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
.bannerRow {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
border-radius: var(--osdk-cbac-banner-border-radius);
|
|
21
|
+
width: 100%;
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
background: var(--osdk-cbac-banner-bg);
|
|
24
|
+
color: var(--osdk-cbac-banner-color);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.banner {
|
|
28
|
+
flex: 1;
|
|
29
|
+
padding: var(--osdk-cbac-banner-padding);
|
|
30
|
+
font-size: var(--osdk-cbac-banner-font-size);
|
|
31
|
+
font-weight: var(--osdk-cbac-banner-font-weight);
|
|
32
|
+
text-align: var(--osdk-cbac-banner-text-align);
|
|
33
|
+
font-family: inherit;
|
|
34
|
+
border: none;
|
|
35
|
+
background: transparent;
|
|
36
|
+
color: inherit;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.clickable {
|
|
40
|
+
cursor: pointer;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.clickable:focus-visible {
|
|
44
|
+
outline: var(--osdk-focus-outline);
|
|
45
|
+
outline-offset: var(--osdk-focus-visible-outline-offset);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.clickable:hover {
|
|
49
|
+
filter: brightness(0.9);
|
|
50
|
+
text-decoration: underline;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.dismissButton {
|
|
54
|
+
display: flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
padding: calc(var(--osdk-surface-spacing) * 1);
|
|
58
|
+
margin-right: calc(var(--osdk-surface-spacing) * 1);
|
|
59
|
+
background: transparent;
|
|
60
|
+
border: none;
|
|
61
|
+
color: inherit;
|
|
62
|
+
cursor: pointer;
|
|
63
|
+
border-radius: var(--osdk-surface-border-radius);
|
|
64
|
+
flex-shrink: 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.dismissButton:hover {
|
|
68
|
+
filter: brightness(0.8);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.dismissButton:focus-visible {
|
|
72
|
+
outline: var(--osdk-focus-outline);
|
|
73
|
+
outline-offset: var(--osdk-focus-visible-outline-offset);
|
|
74
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// CSS Module proxy for BaseCbacBanner.module.css
|
|
2
|
+
const styles = {
|
|
3
|
+
"bannerRow": "BaseCbacBanner-module__bannerRow___oxu42hEl",
|
|
4
|
+
"banner": "BaseCbacBanner-module__banner___IjvLA5g7",
|
|
5
|
+
"clickable": "BaseCbacBanner-module__clickable___EhVZQgrU",
|
|
6
|
+
"dismissButton": "BaseCbacBanner-module__dismissButton___pEhcnzSL"
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default styles;
|