@cratis/scene.primereact 4.5.0 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/preview.tsx +8 -1
- package/EnumerationResolution.ts +7 -0
- package/README.md +42 -10
- package/chart/ChartGallery.stories.tsx +63 -0
- package/chart/ChartType.ts +14 -0
- package/chart/ChartTypeResolution.ts +14 -0
- package/chart/PrimeChart.tsx +62 -0
- package/chart/chartHasData.ts +22 -0
- package/chart/chartTypeChoices.ts +32 -0
- package/chart/index.ts +7 -0
- package/chart/resolveChartType.ts +61 -0
- package/chart/useChart.ts +61 -0
- package/data/DataGallery.stories.tsx +6 -0
- package/data/DataScrollerRow.tsx +35 -0
- package/data/PrimeDataScroller.tsx +84 -0
- package/data/PrimeTreeTable.tsx +145 -0
- package/data/TreeTableCheckState.ts +9 -0
- package/data/TreeTableRow.ts +22 -0
- package/data/TreeTableRowView.tsx +86 -0
- package/data/TreeTableSelectionMode.ts +10 -0
- package/data/checkboxSelection.ts +92 -0
- package/data/index.ts +4 -0
- package/data/isSerializedLegacyElement.ts +30 -0
- package/data/readableValue.ts +32 -0
- package/data/selectionKeysOf.ts +40 -0
- package/data/treeTableRows.ts +32 -0
- package/data/useIncrementalLoad.ts +36 -0
- package/data/useLoadOnReach.ts +31 -0
- package/data/useTreeGridNavigation.ts +81 -0
- package/dist/cjs/chart/ChartType.js +18 -0
- package/dist/cjs/chart/ChartType.js.map +1 -0
- package/dist/cjs/chart/PrimeChart.js +92 -0
- package/dist/cjs/chart/PrimeChart.js.map +1 -0
- package/dist/cjs/chart/chartHasData.js +24 -0
- package/dist/cjs/chart/chartHasData.js.map +1 -0
- package/dist/cjs/chart/chartTypeChoices.js +43 -0
- package/dist/cjs/chart/chartTypeChoices.js.map +1 -0
- package/dist/cjs/chart/resolveChartType.js +69 -0
- package/dist/cjs/chart/resolveChartType.js.map +1 -0
- package/dist/cjs/chart/useChart.js +62 -0
- package/dist/cjs/chart/useChart.js.map +1 -0
- package/dist/cjs/data/DataScrollerRow.js +50 -0
- package/dist/cjs/data/DataScrollerRow.js.map +1 -0
- package/dist/cjs/data/PrimeDataScroller.js +120 -0
- package/dist/cjs/data/PrimeDataScroller.js.map +1 -0
- package/dist/cjs/data/PrimeTreeTable.js +217 -0
- package/dist/cjs/data/PrimeTreeTable.js.map +1 -0
- package/dist/cjs/data/TreeTableCheckState.js +13 -0
- package/dist/cjs/data/TreeTableCheckState.js.map +1 -0
- package/dist/cjs/data/TreeTableRowView.js +76 -0
- package/dist/cjs/data/TreeTableRowView.js.map +1 -0
- package/dist/cjs/data/TreeTableSelectionMode.js +14 -0
- package/dist/cjs/data/TreeTableSelectionMode.js.map +1 -0
- package/dist/cjs/data/checkboxSelection.js +88 -0
- package/dist/cjs/data/checkboxSelection.js.map +1 -0
- package/dist/cjs/data/isSerializedLegacyElement.js +30 -0
- package/dist/cjs/data/isSerializedLegacyElement.js.map +1 -0
- package/dist/cjs/data/readableValue.js +31 -0
- package/dist/cjs/data/readableValue.js.map +1 -0
- package/dist/cjs/data/selectionKeysOf.js +40 -0
- package/dist/cjs/data/selectionKeysOf.js.map +1 -0
- package/dist/cjs/data/treeTableRows.js +42 -0
- package/dist/cjs/data/treeTableRows.js.map +1 -0
- package/dist/cjs/data/useIncrementalLoad.js +46 -0
- package/dist/cjs/data/useIncrementalLoad.js.map +1 -0
- package/dist/cjs/data/useLoadOnReach.js +42 -0
- package/dist/cjs/data/useLoadOnReach.js.map +1 -0
- package/dist/cjs/data/useTreeGridNavigation.js +75 -0
- package/dist/cjs/data/useTreeGridNavigation.js.map +1 -0
- package/dist/cjs/editor/PrimeEditor.js +96 -0
- package/dist/cjs/editor/PrimeEditor.js.map +1 -0
- package/dist/cjs/editor/QuillLoaderContext.js +10 -0
- package/dist/cjs/editor/QuillLoaderContext.js.map +1 -0
- package/dist/cjs/editor/QuillLoaderProvider.js +21 -0
- package/dist/cjs/editor/QuillLoaderProvider.js.map +1 -0
- package/dist/cjs/editor/applyHtml.js +25 -0
- package/dist/cjs/editor/applyHtml.js.map +1 -0
- package/dist/cjs/editor/characterCount.js +10 -0
- package/dist/cjs/editor/characterCount.js.map +1 -0
- package/dist/cjs/editor/htmlToPlainText.js +101 -0
- package/dist/cjs/editor/htmlToPlainText.js.map +1 -0
- package/dist/cjs/editor/renderSafeNodes.js +35 -0
- package/dist/cjs/editor/renderSafeNodes.js.map +1 -0
- package/dist/cjs/editor/safeUrls.js +44 -0
- package/dist/cjs/editor/safeUrls.js.map +1 -0
- package/dist/cjs/editor/sanitizeHtml.js +140 -0
- package/dist/cjs/editor/sanitizeHtml.js.map +1 -0
- package/dist/cjs/editor/serializeSafeNodes.js +33 -0
- package/dist/cjs/editor/serializeSafeNodes.js.map +1 -0
- package/dist/cjs/editor/toolbarLayout.js +35 -0
- package/dist/cjs/editor/toolbarLayout.js.map +1 -0
- package/dist/cjs/editor/useQuillEditor.js +137 -0
- package/dist/cjs/editor/useQuillEditor.js.map +1 -0
- package/dist/cjs/file/FileUploadContext.js +13 -0
- package/dist/cjs/file/FileUploadContext.js.map +1 -0
- package/dist/cjs/file/FileUploadHandlerProvider.js +25 -0
- package/dist/cjs/file/FileUploadHandlerProvider.js.map +1 -0
- package/dist/cjs/file/FileUploadMode.js +13 -0
- package/dist/cjs/file/FileUploadMode.js.map +1 -0
- package/dist/cjs/file/PrimeFileUpload.js +161 -0
- package/dist/cjs/file/PrimeFileUpload.js.map +1 -0
- package/dist/cjs/file/postFiles.js +31 -0
- package/dist/cjs/file/postFiles.js.map +1 -0
- package/dist/cjs/file/resolveUploadTarget.js +68 -0
- package/dist/cjs/file/resolveUploadTarget.js.map +1 -0
- package/dist/cjs/file/useUploadSession.js +62 -0
- package/dist/cjs/file/useUploadSession.js.map +1 -0
- package/dist/cjs/form/MultiStateGlyph.js +59 -0
- package/dist/cjs/form/MultiStateGlyph.js.map +1 -0
- package/dist/cjs/form/PrimeMultiStateCheckbox.js +123 -0
- package/dist/cjs/form/PrimeMultiStateCheckbox.js.map +1 -0
- package/dist/cjs/form/multiStateOptions.js +77 -0
- package/dist/cjs/form/multiStateOptions.js.map +1 -0
- package/dist/cjs/form/multiStateStates.js +32 -0
- package/dist/cjs/form/multiStateStates.js.map +1 -0
- package/dist/cjs/form/useMultiStateSelection.js +51 -0
- package/dist/cjs/form/useMultiStateSelection.js.map +1 -0
- package/dist/cjs/index.js +44 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legacyEnumerationChoices.js +39 -0
- package/dist/cjs/legacyEnumerationChoices.js.map +1 -0
- package/dist/cjs/loadQuill/index.js +22 -0
- package/dist/cjs/loadQuill/index.js.map +1 -0
- package/dist/cjs/primeReactComponents.js +15 -0
- package/dist/cjs/primeReactComponents.js.map +1 -1
- package/dist/cjs/primeReactDescriptors.js +400 -0
- package/dist/cjs/primeReactDescriptors.js.map +1 -0
- package/dist/cjs/primeReactPackage.js +8 -0
- package/dist/cjs/primeReactPackage.js.map +1 -1
- package/dist/cjs/properties.js +11 -0
- package/dist/cjs/properties.js.map +1 -1
- package/dist/cjs/resolveEnumeration.js +55 -0
- package/dist/cjs/resolveEnumeration.js.map +1 -0
- package/dist/cjs/structurallyEqual.js +27 -0
- package/dist/cjs/structurallyEqual.js.map +1 -0
- package/dist/cjs/treeNodes.js +42 -7
- package/dist/cjs/treeNodes.js.map +1 -1
- package/dist/cjs/useResettingState.js +47 -0
- package/dist/cjs/useResettingState.js.map +1 -0
- package/dist/cjs/useStructuralValue.js +20 -0
- package/dist/cjs/useStructuralValue.js.map +1 -0
- package/dist/esm/EnumerationResolution.d.ts +9 -0
- package/dist/esm/EnumerationResolution.d.ts.map +1 -0
- package/dist/esm/EnumerationResolution.js +2 -0
- package/dist/esm/EnumerationResolution.js.map +1 -0
- package/dist/esm/chart/ChartGallery.stories.d.ts +14 -0
- package/dist/esm/chart/ChartGallery.stories.d.ts.map +1 -0
- package/dist/esm/chart/ChartGallery.stories.js +47 -0
- package/dist/esm/chart/ChartGallery.stories.js.map +1 -0
- package/dist/esm/chart/ChartType.d.ts +11 -0
- package/dist/esm/chart/ChartType.d.ts.map +1 -0
- package/dist/esm/chart/ChartType.js +16 -0
- package/dist/esm/chart/ChartType.js.map +1 -0
- package/dist/esm/chart/ChartTypeResolution.d.ts +10 -0
- package/dist/esm/chart/ChartTypeResolution.d.ts.map +1 -0
- package/dist/esm/chart/ChartTypeResolution.js +2 -0
- package/dist/esm/chart/ChartTypeResolution.js.map +1 -0
- package/dist/esm/chart/PrimeChart.d.ts +3 -0
- package/dist/esm/chart/PrimeChart.d.ts.map +1 -0
- package/dist/esm/chart/PrimeChart.js +90 -0
- package/dist/esm/chart/PrimeChart.js.map +1 -0
- package/dist/esm/chart/chartHasData.d.ts +2 -0
- package/dist/esm/chart/chartHasData.d.ts.map +1 -0
- package/dist/esm/chart/chartHasData.js +22 -0
- package/dist/esm/chart/chartHasData.js.map +1 -0
- package/dist/esm/chart/chartTypeChoices.d.ts +3 -0
- package/dist/esm/chart/chartTypeChoices.d.ts.map +1 -0
- package/dist/esm/chart/chartTypeChoices.js +41 -0
- package/dist/esm/chart/chartTypeChoices.js.map +1 -0
- package/dist/esm/chart/index.d.ts +5 -0
- package/dist/esm/chart/index.d.ts.map +1 -0
- package/dist/esm/chart/index.js +5 -0
- package/dist/esm/chart/index.js.map +1 -0
- package/dist/esm/chart/resolveChartType.d.ts +6 -0
- package/dist/esm/chart/resolveChartType.d.ts.map +1 -0
- package/dist/esm/chart/resolveChartType.js +66 -0
- package/dist/esm/chart/resolveChartType.js.map +1 -0
- package/dist/esm/chart/useChart.d.ts +4 -0
- package/dist/esm/chart/useChart.d.ts.map +1 -0
- package/dist/esm/chart/useChart.js +60 -0
- package/dist/esm/chart/useChart.js.map +1 -0
- package/dist/esm/data/DataGallery.stories.d.ts.map +1 -1
- package/dist/esm/data/DataGallery.stories.js +6 -0
- package/dist/esm/data/DataGallery.stories.js.map +1 -1
- package/dist/esm/data/DataScrollerRow.d.ts +4 -0
- package/dist/esm/data/DataScrollerRow.d.ts.map +1 -0
- package/dist/esm/data/DataScrollerRow.js +48 -0
- package/dist/esm/data/DataScrollerRow.js.map +1 -0
- package/dist/esm/data/PrimeDataScroller.d.ts +3 -0
- package/dist/esm/data/PrimeDataScroller.d.ts.map +1 -0
- package/dist/esm/data/PrimeDataScroller.js +118 -0
- package/dist/esm/data/PrimeDataScroller.js.map +1 -0
- package/dist/esm/data/PrimeTreeTable.d.ts +3 -0
- package/dist/esm/data/PrimeTreeTable.d.ts.map +1 -0
- package/dist/esm/data/PrimeTreeTable.js +215 -0
- package/dist/esm/data/PrimeTreeTable.js.map +1 -0
- package/dist/esm/data/TreeTableCheckState.d.ts +6 -0
- package/dist/esm/data/TreeTableCheckState.d.ts.map +1 -0
- package/dist/esm/data/TreeTableCheckState.js +11 -0
- package/dist/esm/data/TreeTableCheckState.js.map +1 -0
- package/dist/esm/data/TreeTableRow.d.ts +10 -0
- package/dist/esm/data/TreeTableRow.d.ts.map +1 -0
- package/dist/esm/data/TreeTableRow.js +2 -0
- package/dist/esm/data/TreeTableRow.js.map +1 -0
- package/dist/esm/data/TreeTableRowView.d.ts +21 -0
- package/dist/esm/data/TreeTableRowView.d.ts.map +1 -0
- package/dist/esm/data/TreeTableRowView.js +74 -0
- package/dist/esm/data/TreeTableRowView.js.map +1 -0
- package/dist/esm/data/TreeTableSelectionMode.d.ts +7 -0
- package/dist/esm/data/TreeTableSelectionMode.d.ts.map +1 -0
- package/dist/esm/data/TreeTableSelectionMode.js +12 -0
- package/dist/esm/data/TreeTableSelectionMode.js.map +1 -0
- package/dist/esm/data/checkboxSelection.d.ts +9 -0
- package/dist/esm/data/checkboxSelection.d.ts.map +1 -0
- package/dist/esm/data/checkboxSelection.js +85 -0
- package/dist/esm/data/checkboxSelection.js.map +1 -0
- package/dist/esm/data/index.d.ts +4 -0
- package/dist/esm/data/index.d.ts.map +1 -1
- package/dist/esm/data/index.js +4 -0
- package/dist/esm/data/index.js.map +1 -1
- package/dist/esm/data/isSerializedLegacyElement.d.ts +3 -0
- package/dist/esm/data/isSerializedLegacyElement.d.ts.map +1 -0
- package/dist/esm/data/isSerializedLegacyElement.js +27 -0
- package/dist/esm/data/isSerializedLegacyElement.js.map +1 -0
- package/dist/esm/data/readableValue.d.ts +2 -0
- package/dist/esm/data/readableValue.d.ts.map +1 -0
- package/dist/esm/data/readableValue.js +29 -0
- package/dist/esm/data/readableValue.js.map +1 -0
- package/dist/esm/data/selectionKeysOf.d.ts +2 -0
- package/dist/esm/data/selectionKeysOf.d.ts.map +1 -0
- package/dist/esm/data/selectionKeysOf.js +38 -0
- package/dist/esm/data/selectionKeysOf.js.map +1 -0
- package/dist/esm/data/treeTableRows.d.ts +6 -0
- package/dist/esm/data/treeTableRows.d.ts.map +1 -0
- package/dist/esm/data/treeTableRows.js +38 -0
- package/dist/esm/data/treeTableRows.js.map +1 -0
- package/dist/esm/data/useIncrementalLoad.d.ts +6 -0
- package/dist/esm/data/useIncrementalLoad.d.ts.map +1 -0
- package/dist/esm/data/useIncrementalLoad.js +44 -0
- package/dist/esm/data/useIncrementalLoad.js.map +1 -0
- package/dist/esm/data/useLoadOnReach.d.ts +3 -0
- package/dist/esm/data/useLoadOnReach.d.ts.map +1 -0
- package/dist/esm/data/useLoadOnReach.js +40 -0
- package/dist/esm/data/useLoadOnReach.js.map +1 -0
- package/dist/esm/data/useTreeGridNavigation.d.ts +17 -0
- package/dist/esm/data/useTreeGridNavigation.d.ts.map +1 -0
- package/dist/esm/data/useTreeGridNavigation.js +73 -0
- package/dist/esm/data/useTreeGridNavigation.js.map +1 -0
- package/dist/esm/editor/PrimeEditor.d.ts +3 -0
- package/dist/esm/editor/PrimeEditor.d.ts.map +1 -0
- package/dist/esm/editor/PrimeEditor.js +94 -0
- package/dist/esm/editor/PrimeEditor.js.map +1 -0
- package/dist/esm/editor/QuillConstructor.d.ts +4 -0
- package/dist/esm/editor/QuillConstructor.d.ts.map +1 -0
- package/dist/esm/editor/QuillConstructor.js +2 -0
- package/dist/esm/editor/QuillConstructor.js.map +1 -0
- package/dist/esm/editor/QuillEditorOptions.d.ts +13 -0
- package/dist/esm/editor/QuillEditorOptions.d.ts.map +1 -0
- package/dist/esm/editor/QuillEditorOptions.js +2 -0
- package/dist/esm/editor/QuillEditorOptions.js.map +1 -0
- package/dist/esm/editor/QuillEditorState.d.ts +6 -0
- package/dist/esm/editor/QuillEditorState.d.ts.map +1 -0
- package/dist/esm/editor/QuillEditorState.js +2 -0
- package/dist/esm/editor/QuillEditorState.js.map +1 -0
- package/dist/esm/editor/QuillInstance.d.ts +16 -0
- package/dist/esm/editor/QuillInstance.d.ts.map +1 -0
- package/dist/esm/editor/QuillInstance.js +2 -0
- package/dist/esm/editor/QuillInstance.js.map +1 -0
- package/dist/esm/editor/QuillLoader.d.ts +5 -0
- package/dist/esm/editor/QuillLoader.d.ts.map +1 -0
- package/dist/esm/editor/QuillLoader.js +2 -0
- package/dist/esm/editor/QuillLoader.js.map +1 -0
- package/dist/esm/editor/QuillLoaderContext.d.ts +3 -0
- package/dist/esm/editor/QuillLoaderContext.d.ts.map +1 -0
- package/dist/esm/editor/QuillLoaderContext.js +8 -0
- package/dist/esm/editor/QuillLoaderContext.js.map +1 -0
- package/dist/esm/editor/QuillLoaderProvider.d.ts +8 -0
- package/dist/esm/editor/QuillLoaderProvider.d.ts.map +1 -0
- package/dist/esm/editor/QuillLoaderProvider.js +19 -0
- package/dist/esm/editor/QuillLoaderProvider.js.map +1 -0
- package/dist/esm/editor/QuillOptions.d.ts +9 -0
- package/dist/esm/editor/QuillOptions.d.ts.map +1 -0
- package/dist/esm/editor/QuillOptions.js +2 -0
- package/dist/esm/editor/QuillOptions.js.map +1 -0
- package/dist/esm/editor/SafeElement.d.ts +7 -0
- package/dist/esm/editor/SafeElement.d.ts.map +1 -0
- package/dist/esm/editor/SafeElement.js +2 -0
- package/dist/esm/editor/SafeElement.js.map +1 -0
- package/dist/esm/editor/SafeNode.d.ts +3 -0
- package/dist/esm/editor/SafeNode.d.ts.map +1 -0
- package/dist/esm/editor/SafeNode.js +2 -0
- package/dist/esm/editor/SafeNode.js.map +1 -0
- package/dist/esm/editor/applyHtml.d.ts +3 -0
- package/dist/esm/editor/applyHtml.d.ts.map +1 -0
- package/dist/esm/editor/applyHtml.js +23 -0
- package/dist/esm/editor/applyHtml.js.map +1 -0
- package/dist/esm/editor/characterCount.d.ts +3 -0
- package/dist/esm/editor/characterCount.d.ts.map +1 -0
- package/dist/esm/editor/characterCount.js +8 -0
- package/dist/esm/editor/characterCount.js.map +1 -0
- package/dist/esm/editor/htmlToPlainText.d.ts +2 -0
- package/dist/esm/editor/htmlToPlainText.d.ts.map +1 -0
- package/dist/esm/editor/htmlToPlainText.js +99 -0
- package/dist/esm/editor/htmlToPlainText.js.map +1 -0
- package/dist/esm/editor/index.d.ts +14 -0
- package/dist/esm/editor/index.d.ts.map +1 -0
- package/dist/esm/editor/index.js +14 -0
- package/dist/esm/editor/index.js.map +1 -0
- package/dist/esm/editor/renderSafeNodes.d.ts +4 -0
- package/dist/esm/editor/renderSafeNodes.d.ts.map +1 -0
- package/dist/esm/editor/renderSafeNodes.js +33 -0
- package/dist/esm/editor/renderSafeNodes.js.map +1 -0
- package/dist/esm/editor/safeUrls.d.ts +3 -0
- package/dist/esm/editor/safeUrls.d.ts.map +1 -0
- package/dist/esm/editor/safeUrls.js +41 -0
- package/dist/esm/editor/safeUrls.js.map +1 -0
- package/dist/esm/editor/sanitizeHtml.d.ts +3 -0
- package/dist/esm/editor/sanitizeHtml.d.ts.map +1 -0
- package/dist/esm/editor/sanitizeHtml.js +138 -0
- package/dist/esm/editor/sanitizeHtml.js.map +1 -0
- package/dist/esm/editor/serializeSafeNodes.d.ts +3 -0
- package/dist/esm/editor/serializeSafeNodes.d.ts.map +1 -0
- package/dist/esm/editor/serializeSafeNodes.js +31 -0
- package/dist/esm/editor/serializeSafeNodes.js.map +1 -0
- package/dist/esm/editor/toolbarLayout.d.ts +2 -0
- package/dist/esm/editor/toolbarLayout.d.ts.map +1 -0
- package/dist/esm/editor/toolbarLayout.js +33 -0
- package/dist/esm/editor/toolbarLayout.js.map +1 -0
- package/dist/esm/editor/useQuillEditor.d.ts +4 -0
- package/dist/esm/editor/useQuillEditor.d.ts.map +1 -0
- package/dist/esm/editor/useQuillEditor.js +135 -0
- package/dist/esm/editor/useQuillEditor.js.map +1 -0
- package/dist/esm/file/FileGallery.stories.d.ts +19 -0
- package/dist/esm/file/FileGallery.stories.d.ts.map +1 -0
- package/dist/esm/file/FileGallery.stories.js +23 -0
- package/dist/esm/file/FileGallery.stories.js.map +1 -0
- package/dist/esm/file/FileUploadContext.d.ts +7 -0
- package/dist/esm/file/FileUploadContext.d.ts.map +1 -0
- package/dist/esm/file/FileUploadContext.js +11 -0
- package/dist/esm/file/FileUploadContext.js.map +1 -0
- package/dist/esm/file/FileUploadHandler.d.ts +4 -0
- package/dist/esm/file/FileUploadHandler.d.ts.map +1 -0
- package/dist/esm/file/FileUploadHandler.js +2 -0
- package/dist/esm/file/FileUploadHandler.js.map +1 -0
- package/dist/esm/file/FileUploadHandlerProvider.d.ts +9 -0
- package/dist/esm/file/FileUploadHandlerProvider.d.ts.map +1 -0
- package/dist/esm/file/FileUploadHandlerProvider.js +23 -0
- package/dist/esm/file/FileUploadHandlerProvider.js.map +1 -0
- package/dist/esm/file/FileUploadMode.d.ts +6 -0
- package/dist/esm/file/FileUploadMode.d.ts.map +1 -0
- package/dist/esm/file/FileUploadMode.js +11 -0
- package/dist/esm/file/FileUploadMode.js.map +1 -0
- package/dist/esm/file/PrimeFileUpload.d.ts +3 -0
- package/dist/esm/file/PrimeFileUpload.d.ts.map +1 -0
- package/dist/esm/file/PrimeFileUpload.js +159 -0
- package/dist/esm/file/PrimeFileUpload.js.map +1 -0
- package/dist/esm/file/UploadStatus.d.ts +5 -0
- package/dist/esm/file/UploadStatus.d.ts.map +1 -0
- package/dist/esm/file/UploadStatus.js +2 -0
- package/dist/esm/file/UploadStatus.js.map +1 -0
- package/dist/esm/file/UploadTarget.d.ts +8 -0
- package/dist/esm/file/UploadTarget.d.ts.map +1 -0
- package/dist/esm/file/UploadTarget.js +2 -0
- package/dist/esm/file/UploadTarget.js.map +1 -0
- package/dist/esm/file/index.d.ts +7 -0
- package/dist/esm/file/index.d.ts.map +1 -0
- package/dist/esm/file/index.js +7 -0
- package/dist/esm/file/index.js.map +1 -0
- package/dist/esm/file/postFiles.d.ts +2 -0
- package/dist/esm/file/postFiles.d.ts.map +1 -0
- package/dist/esm/file/postFiles.js +29 -0
- package/dist/esm/file/postFiles.js.map +1 -0
- package/dist/esm/file/resolveUploadTarget.d.ts +3 -0
- package/dist/esm/file/resolveUploadTarget.d.ts.map +1 -0
- package/dist/esm/file/resolveUploadTarget.js +66 -0
- package/dist/esm/file/resolveUploadTarget.js.map +1 -0
- package/dist/esm/file/useUploadSession.d.ts +10 -0
- package/dist/esm/file/useUploadSession.d.ts.map +1 -0
- package/dist/esm/file/useUploadSession.js +60 -0
- package/dist/esm/file/useUploadSession.js.map +1 -0
- package/dist/esm/form/FormGallery.stories.d.ts.map +1 -1
- package/dist/esm/form/FormGallery.stories.js +9 -0
- package/dist/esm/form/FormGallery.stories.js.map +1 -1
- package/dist/esm/form/MultiStateGlyph.d.ts +8 -0
- package/dist/esm/form/MultiStateGlyph.d.ts.map +1 -0
- package/dist/esm/form/MultiStateGlyph.js +57 -0
- package/dist/esm/form/MultiStateGlyph.js.map +1 -0
- package/dist/esm/form/MultiStateOption.d.ts +7 -0
- package/dist/esm/form/MultiStateOption.d.ts.map +1 -0
- package/dist/esm/form/MultiStateOption.js +2 -0
- package/dist/esm/form/MultiStateOption.js.map +1 -0
- package/dist/esm/form/PrimeMultiStateCheckbox.d.ts +3 -0
- package/dist/esm/form/PrimeMultiStateCheckbox.d.ts.map +1 -0
- package/dist/esm/form/PrimeMultiStateCheckbox.js +121 -0
- package/dist/esm/form/PrimeMultiStateCheckbox.js.map +1 -0
- package/dist/esm/form/index.d.ts +1 -0
- package/dist/esm/form/index.d.ts.map +1 -1
- package/dist/esm/form/index.js +1 -0
- package/dist/esm/form/index.js.map +1 -1
- package/dist/esm/form/multiStateOptions.d.ts +4 -0
- package/dist/esm/form/multiStateOptions.d.ts.map +1 -0
- package/dist/esm/form/multiStateOptions.js +75 -0
- package/dist/esm/form/multiStateOptions.js.map +1 -0
- package/dist/esm/form/multiStateStates.d.ts +4 -0
- package/dist/esm/form/multiStateStates.d.ts.map +1 -0
- package/dist/esm/form/multiStateStates.js +30 -0
- package/dist/esm/form/multiStateStates.js.map +1 -0
- package/dist/esm/form/useMultiStateSelection.d.ts +6 -0
- package/dist/esm/form/useMultiStateSelection.d.ts.map +1 -0
- package/dist/esm/form/useMultiStateSelection.js +49 -0
- package/dist/esm/form/useMultiStateSelection.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +22 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/legacyEnumerationChoices.d.ts +3 -0
- package/dist/esm/legacyEnumerationChoices.d.ts.map +1 -0
- package/dist/esm/legacyEnumerationChoices.js +37 -0
- package/dist/esm/legacyEnumerationChoices.js.map +1 -0
- package/dist/esm/loadQuill/index.d.ts +3 -0
- package/dist/esm/loadQuill/index.d.ts.map +1 -0
- package/dist/esm/loadQuill/index.js +20 -0
- package/dist/esm/loadQuill/index.js.map +1 -0
- package/dist/esm/primeReactComponents.d.ts.map +1 -1
- package/dist/esm/primeReactComponents.js +15 -0
- package/dist/esm/primeReactComponents.js.map +1 -1
- package/dist/esm/primeReactDescriptors.d.ts +3 -0
- package/dist/esm/primeReactDescriptors.d.ts.map +1 -0
- package/dist/esm/primeReactDescriptors.js +398 -0
- package/dist/esm/primeReactDescriptors.js.map +1 -0
- package/dist/esm/primeReactPackage.d.ts.map +1 -1
- package/dist/esm/primeReactPackage.js +8 -0
- package/dist/esm/primeReactPackage.js.map +1 -1
- package/dist/esm/properties.d.ts +1 -0
- package/dist/esm/properties.d.ts.map +1 -1
- package/dist/esm/properties.js +11 -1
- package/dist/esm/properties.js.map +1 -1
- package/dist/esm/resolveEnumeration.d.ts +3 -0
- package/dist/esm/resolveEnumeration.d.ts.map +1 -0
- package/dist/esm/resolveEnumeration.js +53 -0
- package/dist/esm/resolveEnumeration.js.map +1 -0
- package/dist/esm/structurallyEqual.d.ts +2 -0
- package/dist/esm/structurallyEqual.d.ts.map +1 -0
- package/dist/esm/structurallyEqual.js +25 -0
- package/dist/esm/structurallyEqual.js.map +1 -0
- package/dist/esm/treeNodes.d.ts +2 -1
- package/dist/esm/treeNodes.d.ts.map +1 -1
- package/dist/esm/treeNodes.js +42 -8
- package/dist/esm/treeNodes.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/useResettingState.d.ts +3 -0
- package/dist/esm/useResettingState.d.ts.map +1 -0
- package/dist/esm/useResettingState.js +45 -0
- package/dist/esm/useResettingState.js.map +1 -0
- package/dist/esm/useStructuralValue.d.ts +2 -0
- package/dist/esm/useStructuralValue.d.ts.map +1 -0
- package/dist/esm/useStructuralValue.js +18 -0
- package/dist/esm/useStructuralValue.js.map +1 -0
- package/editor/PrimeEditor.tsx +83 -0
- package/editor/QuillConstructor.ts +8 -0
- package/editor/QuillEditorOptions.ts +29 -0
- package/editor/QuillEditorState.ts +14 -0
- package/editor/QuillInstance.ts +27 -0
- package/editor/QuillLoader.ts +13 -0
- package/editor/QuillLoaderContext.ts +8 -0
- package/editor/QuillLoaderProvider.tsx +24 -0
- package/editor/QuillOptions.ts +10 -0
- package/editor/SafeElement.ts +15 -0
- package/editor/SafeNode.ts +7 -0
- package/editor/applyHtml.ts +21 -0
- package/editor/characterCount.ts +9 -0
- package/editor/htmlToPlainText.ts +74 -0
- package/editor/index.ts +16 -0
- package/editor/renderSafeNodes.tsx +26 -0
- package/editor/safeUrls.ts +43 -0
- package/editor/sanitizeHtml.ts +94 -0
- package/editor/serializeSafeNodes.ts +26 -0
- package/editor/toolbarLayout.ts +10 -0
- package/editor/useQuillEditor.ts +114 -0
- package/file/FileGallery.stories.tsx +32 -0
- package/file/FileUploadContext.ts +17 -0
- package/file/FileUploadHandler.ts +15 -0
- package/file/FileUploadHandlerProvider.tsx +33 -0
- package/file/FileUploadMode.ts +9 -0
- package/file/PrimeFileUpload.tsx +129 -0
- package/file/UploadStatus.ts +9 -0
- package/file/UploadTarget.ts +12 -0
- package/file/index.ts +9 -0
- package/file/postFiles.ts +23 -0
- package/file/resolveUploadTarget.ts +61 -0
- package/file/useUploadSession.ts +67 -0
- package/form/FormGallery.stories.tsx +9 -0
- package/form/MultiStateGlyph.tsx +55 -0
- package/form/MultiStateOption.ts +17 -0
- package/form/PrimeMultiStateCheckbox.tsx +101 -0
- package/form/index.ts +1 -0
- package/form/multiStateOptions.ts +78 -0
- package/form/multiStateStates.ts +23 -0
- package/form/useMultiStateSelection.ts +48 -0
- package/index.ts +4 -0
- package/legacyEnumerationChoices.ts +35 -0
- package/loadQuill/index.ts +21 -0
- package/package.json +27 -7
- package/primeReactComponents.ts +12 -0
- package/primeReactDescriptors.ts +111 -0
- package/primeReactPackage.ts +5 -3
- package/primeReactTheme.css +69 -0
- package/properties.ts +14 -0
- package/resolveEnumeration.ts +50 -0
- package/structurallyEqual.ts +29 -0
- package/treeNodes.ts +44 -6
- package/useResettingState.ts +34 -0
- package/useStructuralValue.ts +17 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { SceneIcon } from '@cratis/scene.react';
|
|
5
|
+
import { MultiStateOption } from './MultiStateOption';
|
|
6
|
+
|
|
7
|
+
export interface MultiStateGlyphProps {
|
|
8
|
+
/** The state being shown. */
|
|
9
|
+
state: MultiStateOption | undefined;
|
|
10
|
+
|
|
11
|
+
/** Whether the state is the empty (`null`) state, drawn as an empty box. */
|
|
12
|
+
isEmpty: boolean;
|
|
13
|
+
|
|
14
|
+
/** Whether the control is disabled or read only. */
|
|
15
|
+
isInactive: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The box a multi-state checkbox draws, themed with the PrimeReact checkbox tokens (`--p-checkbox-*`), so
|
|
20
|
+
* it follows the active Scene theme and looks like its sibling `checkbox`. It holds the state's icon - a
|
|
21
|
+
* PrimeIcons class or a qualified icon reference - or a check mark when the state has no icon of its own.
|
|
22
|
+
* An empty state draws only its own icon, if it has one. It is decorative: the state is announced through the control's text, not through this glyph.
|
|
23
|
+
*/
|
|
24
|
+
export function MultiStateGlyph({ state, isEmpty, isInactive }: MultiStateGlyphProps) {
|
|
25
|
+
const icon = state?.icon;
|
|
26
|
+
return (
|
|
27
|
+
<span
|
|
28
|
+
aria-hidden='true'
|
|
29
|
+
data-scene-part='glyph'
|
|
30
|
+
style={{
|
|
31
|
+
display: 'inline-flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0, boxSizing: 'border-box',
|
|
32
|
+
width: 'var(--p-checkbox-width, 1.125rem)', height: 'var(--p-checkbox-height, 1.125rem)',
|
|
33
|
+
borderRadius: 'var(--p-checkbox-border-radius, 4px)',
|
|
34
|
+
border: `1px solid ${isEmpty ? 'var(--p-checkbox-border-color, currentColor)' : 'var(--p-checkbox-checked-border-color, currentColor)'}`,
|
|
35
|
+
backgroundColor: isEmpty ? 'var(--p-checkbox-background, transparent)' : 'var(--p-checkbox-checked-background, currentColor)',
|
|
36
|
+
color: glyphColor(isEmpty, isInactive),
|
|
37
|
+
fontSize: 'var(--p-checkbox-icon-size, 0.75rem)',
|
|
38
|
+
}}>
|
|
39
|
+
{icon === undefined ? !isEmpty && <CheckMark /> : typeof icon === 'string' ? <i className={icon} /> : <SceneIcon reference={icon} size='var(--p-checkbox-icon-size, 0.75rem)' />}
|
|
40
|
+
</span>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function glyphColor(isEmpty: boolean, isInactive: boolean): string {
|
|
45
|
+
if (isInactive) return 'var(--p-checkbox-icon-disabled-color, currentColor)';
|
|
46
|
+
return isEmpty ? 'var(--p-checkbox-icon-color, currentColor)' : 'var(--p-checkbox-icon-checked-color, Canvas)';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function CheckMark() {
|
|
50
|
+
return (
|
|
51
|
+
<svg viewBox='0 0 12 12' width='1em' height='1em' fill='none' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round'>
|
|
52
|
+
<path d='M2 6.5 5 9.5 10 3' />
|
|
53
|
+
</svg>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { IconReference } from '@cratis/scene.model';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* One state a {@link PrimeMultiStateCheckbox} can cycle through.
|
|
8
|
+
*
|
|
9
|
+
* The `value` is exactly what the document authored - any JSON value, including `null`, numbers, booleans
|
|
10
|
+
* and objects. The `icon` is either a legacy PrimeIcons class name (`'pi pi-check'`) or a qualified
|
|
11
|
+
* {@link IconReference}.
|
|
12
|
+
*/
|
|
13
|
+
export interface MultiStateOption {
|
|
14
|
+
label: string;
|
|
15
|
+
value: unknown;
|
|
16
|
+
icon?: string | IconReference;
|
|
17
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { CSSProperties, useId, useState } from 'react';
|
|
5
|
+
import { isIconReference } from '@cratis/scene.model';
|
|
6
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
7
|
+
import { booleanProperty, stringProperty } from '../properties';
|
|
8
|
+
import { MultiStateGlyph } from './MultiStateGlyph';
|
|
9
|
+
import { multiStateOptions } from './multiStateOptions';
|
|
10
|
+
import { multiStateStates } from './multiStateStates';
|
|
11
|
+
import { useMultiStateSelection } from './useMultiStateSelection';
|
|
12
|
+
|
|
13
|
+
const visuallyHidden: CSSProperties = {
|
|
14
|
+
position: 'absolute', width: 1, height: 1, margin: -1, padding: 0, overflow: 'hidden', clip: 'rect(0 0 0 0)', whiteSpace: 'nowrap', border: 0,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The `PrimeReact:multiStateCheckbox` component.
|
|
19
|
+
*
|
|
20
|
+
* PrimeReact 11 removed MultiStateCheckbox, so Scene renders its original behavior with a native button.
|
|
21
|
+
* It cycles through the authored states in order, including the optional empty (`null`) state, and keeps
|
|
22
|
+
* option values and icons exactly as the element carries them. Each click moves one step; the position is
|
|
23
|
+
* an index, so duplicated or `null` option values do not make later states unreachable.
|
|
24
|
+
*
|
|
25
|
+
* Accessibility: a state cycle is not a true/false choice, so the control does not claim `checkbox`
|
|
26
|
+
* semantics (every non-empty state would announce as "checked"). It is a button whose name is the authored
|
|
27
|
+
* `ariaLabel`, whose description is the current state, and whose state changes are announced through a
|
|
28
|
+
* polite live region. `readOnly` keeps the control focusable and unchanged; `disabled` removes it from the
|
|
29
|
+
* tab order.
|
|
30
|
+
*
|
|
31
|
+
* The control follows the document: a changed `value` or `options` restarts the cycle from the new value,
|
|
32
|
+
* so an inspector edit is reflected immediately. It does not report its own selection to behaviors -
|
|
33
|
+
* Scene's interaction handlers carry no value.
|
|
34
|
+
*/
|
|
35
|
+
export function PrimeMultiStateCheckbox({ element, interactions }: RegisteredComponentProps) {
|
|
36
|
+
const stateId = useId();
|
|
37
|
+
const allowEmpty = booleanProperty(element, 'empty', true);
|
|
38
|
+
const emptyLabel = stringProperty(element, 'emptyLabel', 'No selection');
|
|
39
|
+
const emptyIcon = element.properties.emptyIcon;
|
|
40
|
+
const states = multiStateStates(
|
|
41
|
+
multiStateOptions(element, emptyLabel),
|
|
42
|
+
allowEmpty,
|
|
43
|
+
emptyLabel,
|
|
44
|
+
typeof emptyIcon === 'string' || isIconReference(emptyIcon) ? emptyIcon : undefined);
|
|
45
|
+
const authored = element.properties.value;
|
|
46
|
+
const { index, advance } = useMultiStateSelection(states, authored === undefined && allowEmpty ? null : authored);
|
|
47
|
+
const [focused, setFocused] = useState(false);
|
|
48
|
+
|
|
49
|
+
const selected = states[index];
|
|
50
|
+
const readOnly = booleanProperty(element, 'readOnly', false);
|
|
51
|
+
const disabled = !element.isEnabled || booleanProperty(element, 'disabled', false) || states.length === 0;
|
|
52
|
+
const ariaLabel = stringProperty(element, 'ariaLabel', element.name || 'Multi-state checkbox');
|
|
53
|
+
const stateText = selected?.label ?? stringProperty(element, 'placeholder', unmatchedText(states.length, authored, emptyLabel));
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<>
|
|
57
|
+
<button
|
|
58
|
+
type='button'
|
|
59
|
+
data-scene-id={element.id}
|
|
60
|
+
data-scene-component='multiStateCheckbox'
|
|
61
|
+
data-scene-state-index={index}
|
|
62
|
+
aria-label={ariaLabel}
|
|
63
|
+
aria-describedby={stateId}
|
|
64
|
+
aria-disabled={readOnly ? true : undefined}
|
|
65
|
+
disabled={disabled}
|
|
66
|
+
style={{
|
|
67
|
+
display: 'inline-flex', alignItems: 'center', gap: '0.5rem', padding: 0, border: 0, background: 'none', font: 'inherit',
|
|
68
|
+
color: 'inherit', cursor: disabled ? 'not-allowed' : readOnly ? 'default' : 'pointer', opacity: disabled ? 0.6 : 1,
|
|
69
|
+
outline: focused ? 'var(--p-focus-ring-width, 2px) var(--p-focus-ring-style, solid) var(--p-focus-ring-color, currentColor)' : 'none',
|
|
70
|
+
outlineOffset: 'var(--p-focus-ring-offset, 2px)',
|
|
71
|
+
}}
|
|
72
|
+
onFocus={(event) => setFocused(isFocusVisible(event.currentTarget))}
|
|
73
|
+
onBlur={() => setFocused(false)}
|
|
74
|
+
onClick={(event) => {
|
|
75
|
+
if (!readOnly) advance();
|
|
76
|
+
interactions?.onClick?.(event);
|
|
77
|
+
if (readOnly) return;
|
|
78
|
+
interactions?.onChange?.();
|
|
79
|
+
interactions?.onSelect?.();
|
|
80
|
+
}}
|
|
81
|
+
onDoubleClick={interactions?.onDoubleClick}>
|
|
82
|
+
<MultiStateGlyph state={selected} isEmpty={selected === undefined || selected.value === null} isInactive={disabled || readOnly} />
|
|
83
|
+
<span aria-hidden='true'>{stateText}</span>
|
|
84
|
+
</button>
|
|
85
|
+
<span id={stateId} role='status' style={visuallyHidden}>{stateText}</span>
|
|
86
|
+
</>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function unmatchedText(stateCount: number, authored: unknown, emptyLabel: string): string {
|
|
91
|
+
if (stateCount === 0) return 'No states';
|
|
92
|
+
return authored === undefined ? emptyLabel : 'No matching state';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function isFocusVisible(target: HTMLElement): boolean {
|
|
96
|
+
try {
|
|
97
|
+
return target.matches(':focus-visible');
|
|
98
|
+
} catch {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
}
|
package/form/index.ts
CHANGED
|
@@ -12,6 +12,7 @@ export * from './PrimeMultiSelect';
|
|
|
12
12
|
export * from './PrimeListBox';
|
|
13
13
|
export * from './PrimeSelectButton';
|
|
14
14
|
export * from './PrimeCheckbox';
|
|
15
|
+
export * from './PrimeMultiStateCheckbox';
|
|
15
16
|
export * from './PrimeRadioButton';
|
|
16
17
|
export * from './PrimeToggleSwitch';
|
|
17
18
|
export * from './PrimeSlider';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { SceneElement, isIconReference } from '@cratis/scene.model';
|
|
5
|
+
import { arrayProperty, stringProperty } from '../properties';
|
|
6
|
+
import { MultiStateOption } from './MultiStateOption';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Reads multi-state options without reshaping their values, dropping any of them, or changing their order.
|
|
10
|
+
*
|
|
11
|
+
* This follows the original PrimeReact control. An option that is a record gives its value through
|
|
12
|
+
* `optionValue` (default, and when that field is absent: its `value` field, and the whole option when it has none) and its label through
|
|
13
|
+
* `optionLabel` (default: its `label` field). Any other option - a string, number, boolean, `null` or an
|
|
14
|
+
* array - is its own value. A label that is not text is shown as its JSON, so a numeric or boolean label,
|
|
15
|
+
* or an option with no label at all, still produces a state the user can reach. A `null` value with no
|
|
16
|
+
* label of its own is labeled with `emptyLabel`.
|
|
17
|
+
*
|
|
18
|
+
* A state's icon is, in order: the option's own `icon`, then the entry of the element's `icons` that is
|
|
19
|
+
* aligned with the option (an array) or keyed by its value (an object). Either may be a PrimeIcons class
|
|
20
|
+
* name, kept for legacy documents, or a qualified {@link IconReference}.
|
|
21
|
+
*/
|
|
22
|
+
export function multiStateOptions(element: SceneElement, emptyLabel: string): MultiStateOption[] {
|
|
23
|
+
const labelPath = stringProperty(element, 'optionLabel');
|
|
24
|
+
const valuePath = stringProperty(element, 'optionValue');
|
|
25
|
+
const icons = element.properties.icons;
|
|
26
|
+
|
|
27
|
+
return arrayProperty(element, 'options').map((option, index) => {
|
|
28
|
+
const record = isRecord(option) ? option : undefined;
|
|
29
|
+
const value = record === undefined ? option : valueOf(record, valuePath);
|
|
30
|
+
const label = record === undefined ? undefined : resolvePath(record, labelPath ?? 'label');
|
|
31
|
+
const icon = toIcon(record?.icon) ?? iconAt(icons, value, index);
|
|
32
|
+
return { label: labelText(label, value, emptyLabel), value, ...(icon === undefined ? {} : { icon }) };
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function valueOf(record: Record<string, unknown>, valuePath: string | undefined): unknown {
|
|
37
|
+
const authored = valuePath === undefined ? undefined : resolvePath(record, valuePath);
|
|
38
|
+
if (authored !== undefined) return authored;
|
|
39
|
+
return record.value !== undefined ? record.value : record;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function resolvePath(record: Record<string, unknown>, path: string): unknown {
|
|
43
|
+
if (Object.hasOwn(record, path)) return record[path];
|
|
44
|
+
let current: unknown = record;
|
|
45
|
+
for (const segment of path.split('.')) {
|
|
46
|
+
if (!isRecord(current) || !Object.hasOwn(current, segment)) return undefined;
|
|
47
|
+
current = current[segment];
|
|
48
|
+
}
|
|
49
|
+
return current;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function labelText(label: unknown, value: unknown, emptyLabel: string): string {
|
|
53
|
+
if (typeof label === 'string' && label.length > 0) return label;
|
|
54
|
+
if (label !== undefined && label !== null && label !== '') return display(label);
|
|
55
|
+
return value === null ? emptyLabel : display(value);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function display(value: unknown): string {
|
|
59
|
+
const text = typeof value === 'string' ? value : JSON.stringify(value) ?? String(value);
|
|
60
|
+
return text === '' ? '""' : text;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function toIcon(candidate: unknown): MultiStateOption['icon'] {
|
|
64
|
+
if (typeof candidate === 'string' && candidate.length > 0) return candidate;
|
|
65
|
+
return isIconReference(candidate) ? candidate : undefined;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function iconAt(icons: unknown, value: unknown, index: number): MultiStateOption['icon'] {
|
|
69
|
+
if (Array.isArray(icons)) return toIcon(icons[index]);
|
|
70
|
+
if (!isRecord(icons)) return undefined;
|
|
71
|
+
|
|
72
|
+
const isKey = value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
|
|
73
|
+
return isKey ? toIcon(icons[String(value)]) : undefined;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
77
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
78
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { IconReference } from '@cratis/scene.model';
|
|
5
|
+
import { MultiStateOption } from './MultiStateOption';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Builds the ordered states a multi-state checkbox cycles through.
|
|
9
|
+
*
|
|
10
|
+
* With the empty state allowed, a state whose value is `null` comes first - unless an authored option
|
|
11
|
+
* already has the value `null`, in which case that option *is* the empty state and keeps its authored
|
|
12
|
+
* position, label and icon. Adding a second `null` state would leave two states with one value, and a
|
|
13
|
+
* control that finds its place by value could then never move past the first of them.
|
|
14
|
+
*
|
|
15
|
+
* @param options The authored options, in order.
|
|
16
|
+
* @param allowEmpty Whether a `null` state is available.
|
|
17
|
+
* @param emptyLabel The label of the synthesized empty state.
|
|
18
|
+
* @param emptyIcon The icon of the synthesized empty state.
|
|
19
|
+
*/
|
|
20
|
+
export function multiStateStates(options: MultiStateOption[], allowEmpty: boolean, emptyLabel: string, emptyIcon: string | IconReference | undefined): MultiStateOption[] {
|
|
21
|
+
if (!allowEmpty || options.some(option => option.value === null)) return options;
|
|
22
|
+
return [{ label: emptyLabel, value: null, ...(emptyIcon === undefined ? {} : { icon: emptyIcon }) }, ...options];
|
|
23
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { structurallyEqual } from '../structurallyEqual';
|
|
6
|
+
import { MultiStateOption } from './MultiStateOption';
|
|
7
|
+
|
|
8
|
+
interface Selection {
|
|
9
|
+
source: unknown;
|
|
10
|
+
values: unknown[];
|
|
11
|
+
index: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The state a multi-state checkbox is in, as an index into its states.
|
|
16
|
+
*
|
|
17
|
+
* The position is tracked by index, not recovered by looking the current value up: several states can
|
|
18
|
+
* share a value (a duplicated option), and a lookup by value always finds the first of them, which would
|
|
19
|
+
* make every later state unreachable. The index follows the cycle; the value is only used to find the
|
|
20
|
+
* starting position.
|
|
21
|
+
*
|
|
22
|
+
* The control is driven by the document as well as by the user. When the authored `value` or the states
|
|
23
|
+
* change in content - an edit in the inspector, a hydrated document - the selection starts again from the
|
|
24
|
+
* new value. A document clone with equal content changes nothing, so the user's position survives it.
|
|
25
|
+
*
|
|
26
|
+
* @param states The states, in cycle order.
|
|
27
|
+
* @param value The authored current value.
|
|
28
|
+
* @returns The selected index (`-1` when the value matches no state) and a function that moves to the next.
|
|
29
|
+
*/
|
|
30
|
+
export function useMultiStateSelection(states: MultiStateOption[], value: unknown): { index: number; advance(): number } {
|
|
31
|
+
const values = states.map(state => state.value);
|
|
32
|
+
const start = (): Selection => ({ source: value, values, index: values.findIndex(candidate => structurallyEqual(candidate, value)) });
|
|
33
|
+
const [selection, setSelection] = useState<Selection>(start);
|
|
34
|
+
|
|
35
|
+
let current = selection;
|
|
36
|
+
if (!structurallyEqual(selection.source, value) || !structurallyEqual(selection.values, values)) {
|
|
37
|
+
current = start();
|
|
38
|
+
setSelection(current);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const advance = () => {
|
|
42
|
+
const index = states.length === 0 ? -1 : (current.index + 1) % states.length;
|
|
43
|
+
setSelection({ ...current, index });
|
|
44
|
+
return index;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return { index: current.index, advance };
|
|
48
|
+
}
|
package/index.ts
CHANGED
|
@@ -10,6 +10,9 @@ export * from './menuItems';
|
|
|
10
10
|
export * from './treeNodes';
|
|
11
11
|
export * from './button';
|
|
12
12
|
export * from './form';
|
|
13
|
+
export * from './editor';
|
|
14
|
+
export * from './file';
|
|
15
|
+
export * from './chart';
|
|
13
16
|
export * from './data';
|
|
14
17
|
export * from './panel';
|
|
15
18
|
export * from './overlay';
|
|
@@ -20,4 +23,5 @@ export * from './misc';
|
|
|
20
23
|
export * from './screen';
|
|
21
24
|
export * from './theme';
|
|
22
25
|
export * from './primeReactComponents';
|
|
26
|
+
export * from './primeReactDescriptors';
|
|
23
27
|
export * from './primeReactPackage';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { PropertyChoice } from '@cratis/scene.model';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The choices for an enumeration property: the stable values new documents use, then the ordinals migrated
|
|
8
|
+
* documents carry, then the Pascal case member names a serialized .NET enum produces. These are the same forms
|
|
9
|
+
* the renderer accepts, so a stored value the control draws is never flagged invalid by descriptor validation.
|
|
10
|
+
*
|
|
11
|
+
* A migrated control stores the original numeric value. Offering those ordinals keeps the stored value valid
|
|
12
|
+
* against the descriptor (so an inspector shows it as the current choice) without rewriting it behind the
|
|
13
|
+
* author's back. The position of a member in `members` is its ordinal.
|
|
14
|
+
*
|
|
15
|
+
* @param members The enum object.
|
|
16
|
+
* @param labels The label of each member, by canonical value.
|
|
17
|
+
* @returns The canonical choices, then one legacy choice per ordinal, then one per Pascal case member name.
|
|
18
|
+
*/
|
|
19
|
+
export function legacyEnumerationChoices<TMember extends string>(members: Record<string, TMember>, labels: Record<TMember, string>): PropertyChoice[] {
|
|
20
|
+
const canonical = Object.values(members);
|
|
21
|
+
const names = Object.keys(members);
|
|
22
|
+
return [
|
|
23
|
+
...canonical.map(member => ({ value: member, label: labels[member] })),
|
|
24
|
+
...canonical.map((member, ordinal) => ({
|
|
25
|
+
value: ordinal,
|
|
26
|
+
label: `${labels[member]} (legacy ${ordinal})`,
|
|
27
|
+
description: `The ordinal ${ordinal} of the original enum, as stored by migrated documents.`,
|
|
28
|
+
})),
|
|
29
|
+
...names.map(name => ({
|
|
30
|
+
value: name,
|
|
31
|
+
label: `${labels[members[name]]} (legacy name ${name})`,
|
|
32
|
+
description: `The member name ${name} of the original enum, as a serialized enum stores it.`,
|
|
33
|
+
})),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import type { QuillLoader } from '../editor/QuillLoader';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The ready-made Quill loader: `() => import('quill')`.
|
|
8
|
+
*
|
|
9
|
+
* This entry point is the only place the package names `quill`, and it is separate from the package root on
|
|
10
|
+
* purpose. A host that renders editable rich text imports it, installs the `quill` peer dependency and
|
|
11
|
+
* Quill's stylesheet, and passes it to `QuillLoaderProvider`; every other host never resolves `quill`.
|
|
12
|
+
*
|
|
13
|
+
* ```tsx
|
|
14
|
+
* import 'quill/dist/quill.snow.css';
|
|
15
|
+
* import { QuillLoaderProvider } from '@cratis/scene.primereact';
|
|
16
|
+
* import { loadQuill } from '@cratis/scene.primereact/quill';
|
|
17
|
+
*
|
|
18
|
+
* <QuillLoaderProvider loader={loadQuill}>{screen}</QuillLoaderProvider>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const loadQuill: QuillLoader = () => import('quill') as unknown as ReturnType<QuillLoader>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cratis/scene.primereact",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.0",
|
|
4
4
|
"description": "The PrimeReact component package: maps Scene's abstract component names onto real PrimeReact components, and PrimeReact's free themes onto Scene themes.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cratis",
|
|
@@ -38,6 +38,11 @@
|
|
|
38
38
|
"require": "./dist/cjs/index.js",
|
|
39
39
|
"import": "./dist/esm/index.js"
|
|
40
40
|
},
|
|
41
|
+
"./quill": {
|
|
42
|
+
"types": "./dist/esm/loadQuill/index.d.ts",
|
|
43
|
+
"require": "./dist/cjs/loadQuill/index.js",
|
|
44
|
+
"import": "./dist/esm/loadQuill/index.js"
|
|
45
|
+
},
|
|
41
46
|
"./primeReactTheme.css": "./primeReactTheme.css"
|
|
42
47
|
},
|
|
43
48
|
"scripts": {
|
|
@@ -47,29 +52,34 @@
|
|
|
47
52
|
"lint": "yarn g:lint",
|
|
48
53
|
"lint:ci": "yarn g:lint:ci",
|
|
49
54
|
"test": "yarn g:test",
|
|
55
|
+
"test:browser": "yarn g:test --config ./vitest.browser.config.mts",
|
|
50
56
|
"ci": "yarn g:ci",
|
|
51
57
|
"up": "yarn g:up",
|
|
52
58
|
"dev": "storybook dev -p 6006",
|
|
53
59
|
"build-storybook": "storybook build"
|
|
54
60
|
},
|
|
55
61
|
"dependencies": {
|
|
56
|
-
"@cratis/scene.engine": "4.
|
|
57
|
-
"@cratis/scene.model": "4.
|
|
58
|
-
"@cratis/scene.react": "4.
|
|
62
|
+
"@cratis/scene.engine": "4.7.0",
|
|
63
|
+
"@cratis/scene.model": "4.7.0",
|
|
64
|
+
"@cratis/scene.react": "4.7.0",
|
|
59
65
|
"@primeuix/themes": "^3.0.1"
|
|
60
66
|
},
|
|
61
67
|
"devDependencies": {
|
|
62
|
-
"@cratis/scene.engine": "4.
|
|
63
|
-
"@cratis/scene.model": "4.
|
|
64
|
-
"@cratis/scene.react": "4.
|
|
68
|
+
"@cratis/scene.engine": "4.7.0",
|
|
69
|
+
"@cratis/scene.model": "4.7.0",
|
|
70
|
+
"@cratis/scene.react": "4.7.0",
|
|
65
71
|
"@primereact/core": "11.2.0",
|
|
66
72
|
"@primereact/headless": "11.2.0",
|
|
67
73
|
"@primereact/types": "11.2.0",
|
|
68
74
|
"@storybook/addon-links": "^10.6.1",
|
|
69
75
|
"@storybook/react": "^10.6.1",
|
|
70
76
|
"@storybook/react-vite": "^10.6.1",
|
|
77
|
+
"chart.js": "4.5.1",
|
|
78
|
+
"esbuild": "0.28.2",
|
|
79
|
+
"playwright-core": "1.63.0",
|
|
71
80
|
"primeicons": "8.0.2",
|
|
72
81
|
"primereact": "11.2.0",
|
|
82
|
+
"quill": "2.0.3",
|
|
73
83
|
"react": "^19.3.0",
|
|
74
84
|
"react-dom": "^19.3.0",
|
|
75
85
|
"storybook": "^10.6.1"
|
|
@@ -77,9 +87,19 @@
|
|
|
77
87
|
"peerDependencies": {
|
|
78
88
|
"@primereact/core": "^11.0.0",
|
|
79
89
|
"@primereact/headless": "^11.0.0",
|
|
90
|
+
"chart.js": "^4.5.1",
|
|
80
91
|
"primeicons": "^8.0.0",
|
|
81
92
|
"primereact": "^11.0.0",
|
|
93
|
+
"quill": "^2.0.3",
|
|
82
94
|
"react": "^19.0.0",
|
|
83
95
|
"react-dom": "^19.0.0"
|
|
96
|
+
},
|
|
97
|
+
"peerDependenciesMeta": {
|
|
98
|
+
"chart.js": {
|
|
99
|
+
"optional": true
|
|
100
|
+
},
|
|
101
|
+
"quill": {
|
|
102
|
+
"optional": true
|
|
103
|
+
}
|
|
84
104
|
}
|
|
85
105
|
}
|
package/primeReactComponents.ts
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
import { ComponentRegistry, componentRegistryKey } from '@cratis/scene.react';
|
|
5
5
|
import { PrimeButton, PrimeButtonGroup, PrimeSpeedDial, PrimeSplitButton } from './button';
|
|
6
|
+
import { PrimeChart } from './chart';
|
|
6
7
|
import {
|
|
7
8
|
PrimeColumn,
|
|
9
|
+
PrimeDataScroller,
|
|
8
10
|
PrimeDataTable,
|
|
9
11
|
PrimeDataView,
|
|
10
12
|
PrimeOrderList,
|
|
@@ -13,6 +15,7 @@ import {
|
|
|
13
15
|
PrimePickList,
|
|
14
16
|
PrimeTimeline,
|
|
15
17
|
PrimeTree,
|
|
18
|
+
PrimeTreeTable,
|
|
16
19
|
} from './data';
|
|
17
20
|
import {
|
|
18
21
|
PrimeAutoComplete,
|
|
@@ -33,10 +36,13 @@ import {
|
|
|
33
36
|
PrimeRadioButton,
|
|
34
37
|
PrimeRating,
|
|
35
38
|
PrimeSelectButton,
|
|
39
|
+
PrimeMultiStateCheckbox,
|
|
36
40
|
PrimeSlider,
|
|
37
41
|
PrimeToggleSwitch,
|
|
38
42
|
PrimeTreeSelect,
|
|
39
43
|
} from './form';
|
|
44
|
+
import { PrimeEditor } from './editor';
|
|
45
|
+
import { PrimeFileUpload } from './file';
|
|
40
46
|
import { PrimeCarousel, PrimeGalleria, PrimeImage } from './media';
|
|
41
47
|
import {
|
|
42
48
|
PrimeBreadcrumb,
|
|
@@ -108,6 +114,7 @@ export const primeReactComponents: ComponentRegistry = {
|
|
|
108
114
|
[componentRegistryKey('PrimeReact', 'listBox')]: PrimeListBox,
|
|
109
115
|
[componentRegistryKey('PrimeReact', 'selectButton')]: PrimeSelectButton,
|
|
110
116
|
[componentRegistryKey('PrimeReact', 'checkbox')]: PrimeCheckbox,
|
|
117
|
+
[componentRegistryKey('PrimeReact', 'multiStateCheckbox')]: PrimeMultiStateCheckbox,
|
|
111
118
|
[componentRegistryKey('PrimeReact', 'radioButton')]: PrimeRadioButton,
|
|
112
119
|
[componentRegistryKey('PrimeReact', 'toggleSwitch')]: PrimeToggleSwitch,
|
|
113
120
|
[componentRegistryKey('PrimeReact', 'slider')]: PrimeSlider,
|
|
@@ -118,6 +125,8 @@ export const primeReactComponents: ComponentRegistry = {
|
|
|
118
125
|
[componentRegistryKey('PrimeReact', 'chips')]: PrimeChips,
|
|
119
126
|
[componentRegistryKey('PrimeReact', 'autoComplete')]: PrimeAutoComplete,
|
|
120
127
|
[componentRegistryKey('PrimeReact', 'treeSelect')]: PrimeTreeSelect,
|
|
128
|
+
[componentRegistryKey('PrimeReact', 'editor')]: PrimeEditor,
|
|
129
|
+
[componentRegistryKey('PrimeReact', 'fileUpload')]: PrimeFileUpload,
|
|
121
130
|
|
|
122
131
|
[componentRegistryKey('PrimeReact', 'button')]: PrimeButton,
|
|
123
132
|
[componentRegistryKey('PrimeReact', 'splitButton')]: PrimeSplitButton,
|
|
@@ -128,12 +137,15 @@ export const primeReactComponents: ComponentRegistry = {
|
|
|
128
137
|
[componentRegistryKey('PrimeReact', 'table')]: PrimeDataTable,
|
|
129
138
|
[componentRegistryKey('PrimeReact', 'column')]: PrimeColumn,
|
|
130
139
|
[componentRegistryKey('PrimeReact', 'dataView')]: PrimeDataView,
|
|
140
|
+
[componentRegistryKey('PrimeReact', 'dataScroller')]: PrimeDataScroller,
|
|
131
141
|
[componentRegistryKey('PrimeReact', 'tree')]: PrimeTree,
|
|
142
|
+
[componentRegistryKey('PrimeReact', 'treeTable')]: PrimeTreeTable,
|
|
132
143
|
[componentRegistryKey('PrimeReact', 'timeline')]: PrimeTimeline,
|
|
133
144
|
[componentRegistryKey('PrimeReact', 'paginator')]: PrimePaginator,
|
|
134
145
|
[componentRegistryKey('PrimeReact', 'orderList')]: PrimeOrderList,
|
|
135
146
|
[componentRegistryKey('PrimeReact', 'pickList')]: PrimePickList,
|
|
136
147
|
[componentRegistryKey('PrimeReact', 'organizationChart')]: PrimeOrganizationChart,
|
|
148
|
+
[componentRegistryKey('PrimeReact', 'chart')]: PrimeChart,
|
|
137
149
|
|
|
138
150
|
[componentRegistryKey('PrimeReact', 'card')]: PrimeCard,
|
|
139
151
|
[componentRegistryKey('PrimeReact', 'panel')]: PrimePanel,
|