@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
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/**
|
|
6
|
+
* Resolves an authored value to a member of one of this package's string enums.
|
|
7
|
+
*
|
|
8
|
+
* Three forms are accepted, and the stored value is never rewritten:
|
|
9
|
+
* - the canonical string value the enum declares (`'checkbox'`), which new documents use;
|
|
10
|
+
* - the ordinal of the original .NET enum (`3`), which migrated documents carry. The ordinal is the member's
|
|
11
|
+
* position in declaration order, so that order is part of the stored-data contract and must not change;
|
|
12
|
+
* - the .NET member name in its original Pascal case (`'Checkbox'`), which a JSON serialization of that enum
|
|
13
|
+
* produces.
|
|
14
|
+
*
|
|
15
|
+
* An absent value is the one default. Anything else - an out-of-range or fractional ordinal, a numeric
|
|
16
|
+
* string, a differently cased name, `null` - resolves to a finding with a message, because the intended
|
|
17
|
+
* behavior cannot be known and a silent fallback hides a mistyped document.
|
|
18
|
+
*
|
|
19
|
+
* @param property The property name, used in the message.
|
|
20
|
+
* @param value The authored value.
|
|
21
|
+
* @param members The enum object.
|
|
22
|
+
* @param fallback The member an absent value means.
|
|
23
|
+
* @returns The resolved member, or the finding.
|
|
24
|
+
*/ function resolveEnumeration(property, value, members, fallback) {
|
|
25
|
+
if (value === undefined) return {
|
|
26
|
+
isValid: true,
|
|
27
|
+
value: fallback
|
|
28
|
+
};
|
|
29
|
+
const canonical = Object.values(members);
|
|
30
|
+
if (typeof value === 'number' && Number.isInteger(value) && value >= 0 && value < canonical.length) {
|
|
31
|
+
return {
|
|
32
|
+
isValid: true,
|
|
33
|
+
value: canonical[value]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (typeof value === 'string') {
|
|
37
|
+
if (canonical.includes(value)) return {
|
|
38
|
+
isValid: true,
|
|
39
|
+
value: value
|
|
40
|
+
};
|
|
41
|
+
if (Object.hasOwn(members, value)) return {
|
|
42
|
+
isValid: true,
|
|
43
|
+
value: members[value]
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const shown = typeof value === 'string' ? `'${value}'` : JSON.stringify(value) ?? String(value);
|
|
47
|
+
return {
|
|
48
|
+
isValid: false,
|
|
49
|
+
value,
|
|
50
|
+
message: `Unsupported ${property} ${shown}. Use one of ${canonical.join(', ')}, or a legacy ordinal from 0 to ${canonical.length - 1}.`
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
exports.resolveEnumeration = resolveEnumeration;
|
|
55
|
+
//# sourceMappingURL=resolveEnumeration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveEnumeration.js","sources":["../../resolveEnumeration.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { EnumerationResolution } from './EnumerationResolution';\n\n/**\n * Resolves an authored value to a member of one of this package's string enums.\n *\n * Three forms are accepted, and the stored value is never rewritten:\n * - the canonical string value the enum declares (`'checkbox'`), which new documents use;\n * - the ordinal of the original .NET enum (`3`), which migrated documents carry. The ordinal is the member's\n * position in declaration order, so that order is part of the stored-data contract and must not change;\n * - the .NET member name in its original Pascal case (`'Checkbox'`), which a JSON serialization of that enum\n * produces.\n *\n * An absent value is the one default. Anything else - an out-of-range or fractional ordinal, a numeric\n * string, a differently cased name, `null` - resolves to a finding with a message, because the intended\n * behavior cannot be known and a silent fallback hides a mistyped document.\n *\n * @param property The property name, used in the message.\n * @param value The authored value.\n * @param members The enum object.\n * @param fallback The member an absent value means.\n * @returns The resolved member, or the finding.\n */\nexport function resolveEnumeration<TMember extends string>(\n property: string,\n value: unknown,\n members: Record<string, TMember>,\n fallback: TMember\n): EnumerationResolution<TMember> {\n if (value === undefined) return { isValid: true, value: fallback };\n\n const canonical = Object.values(members);\n if (typeof value === 'number' && Number.isInteger(value) && value >= 0 && value < canonical.length) {\n return { isValid: true, value: canonical[value] };\n }\n\n if (typeof value === 'string') {\n if (canonical.includes(value as TMember)) return { isValid: true, value: value as TMember };\n if (Object.hasOwn(members, value)) return { isValid: true, value: members[value] };\n }\n\n const shown = typeof value === 'string' ? `'${value}'` : JSON.stringify(value) ?? String(value);\n return {\n isValid: false,\n value,\n message: `Unsupported ${property} ${shown}. Use one of ${canonical.join(', ')}, or a legacy ordinal from 0 to ${canonical.length - 1}.`,\n };\n}\n"],"names":["resolveEnumeration","property","value","members","fallback","undefined","isValid","canonical","Object","values","Number","isInteger","length","includes","hasOwn","shown","JSON","stringify","String","message","join"],"mappings":";;AAAA;AACA;AAIA;;;;;;;;;;;;;;;;;;;IAoBO,SAASA,kBAAAA,CACZC,QAAgB,EAChBC,KAAc,EACdC,OAAgC,EAChCC,QAAiB,EAAA;IAEjB,IAAIF,KAAAA,KAAUG,WAAW,OAAO;QAAEC,OAAAA,EAAS,IAAA;QAAMJ,KAAAA,EAAOE;AAAS,KAAA;IAEjE,MAAMG,SAAAA,GAAYC,MAAAA,CAAOC,MAAM,CAACN,OAAAA,CAAAA;AAChC,IAAA,IAAI,OAAOD,KAAAA,KAAU,QAAA,IAAYQ,MAAAA,CAAOC,SAAS,CAACT,KAAAA,CAAAA,IAAUA,KAAAA,IAAS,CAAA,IAAKA,KAAAA,GAAQK,SAAAA,CAAUK,MAAM,EAAE;QAChG,OAAO;YAAEN,OAAAA,EAAS,IAAA;YAAMJ,KAAAA,EAAOK,SAAS,CAACL,KAAAA;AAAO,SAAA;AACpD,IAAA;IAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC3B,QAAA,IAAIK,SAAAA,CAAUM,QAAQ,CAACX,KAAAA,CAAAA,EAAmB,OAAO;YAAEI,OAAAA,EAAS,IAAA;YAAMJ,KAAAA,EAAOA;AAAiB,SAAA;AAC1F,QAAA,IAAIM,MAAAA,CAAOM,MAAM,CAACX,OAAAA,EAASD,QAAQ,OAAO;YAAEI,OAAAA,EAAS,IAAA;YAAMJ,KAAAA,EAAOC,OAAO,CAACD,KAAAA;AAAO,SAAA;AACrF,IAAA;AAEA,IAAA,MAAMa,KAAAA,GAAQ,OAAOb,KAAAA,KAAU,QAAA,GAAW,CAAC,CAAC,EAAEA,KAAAA,CAAM,CAAC,CAAC,GAAGc,IAAAA,CAAKC,SAAS,CAACf,UAAUgB,MAAAA,CAAOhB,KAAAA,CAAAA;IACzF,OAAO;QACHI,OAAAA,EAAS,KAAA;AACTJ,QAAAA,KAAAA;QACAiB,OAAAA,EAAS,CAAC,YAAY,EAAElB,QAAAA,CAAS,CAAC,EAAEc,KAAAA,CAAM,aAAa,EAAER,SAAAA,CAAUa,IAAI,CAAC,IAAA,CAAA,CAAM,gCAAgC,EAAEb,SAAAA,CAAUK,MAAM,GAAG,CAAA,CAAE,CAAC;AAC1I,KAAA;AACJ;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/**
|
|
6
|
+
* Compares values that can survive a Scene document serialization round trip.
|
|
7
|
+
*
|
|
8
|
+
* Authored data (chart datasets, option values, current values) arrives as plain JSON. Every edit to a
|
|
9
|
+
* Scene document clones the whole document, so the same data gets a new object identity with no change in
|
|
10
|
+
* content; reference equality would treat each unrelated edit as a change. Primitives compare with
|
|
11
|
+
* `Object.is`, so `0` and `-0`, or `NaN` and `NaN`, are told apart exactly as `Object.is` does.
|
|
12
|
+
*/ function structurallyEqual(left, right) {
|
|
13
|
+
if (Object.is(left, right)) return true;
|
|
14
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
15
|
+
return Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((value, index)=>structurallyEqual(value, right[index]));
|
|
16
|
+
}
|
|
17
|
+
if (!isRecord(left) || !isRecord(right)) return false;
|
|
18
|
+
const leftKeys = Object.keys(left).sort();
|
|
19
|
+
const rightKeys = Object.keys(right).sort();
|
|
20
|
+
return leftKeys.length === rightKeys.length && leftKeys.every((key, index)=>key === rightKeys[index] && structurallyEqual(left[key], right[key]));
|
|
21
|
+
}
|
|
22
|
+
function isRecord(value) {
|
|
23
|
+
return value !== null && typeof value === 'object';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
exports.structurallyEqual = structurallyEqual;
|
|
27
|
+
//# sourceMappingURL=structurallyEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structurallyEqual.js","sources":["../../structurallyEqual.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/**\n * Compares values that can survive a Scene document serialization round trip.\n *\n * Authored data (chart datasets, option values, current values) arrives as plain JSON. Every edit to a\n * Scene document clones the whole document, so the same data gets a new object identity with no change in\n * content; reference equality would treat each unrelated edit as a change. Primitives compare with\n * `Object.is`, so `0` and `-0`, or `NaN` and `NaN`, are told apart exactly as `Object.is` does.\n */\nexport function structurallyEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) return true;\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left) && Array.isArray(right)\n && left.length === right.length\n && left.every((value, index) => structurallyEqual(value, right[index]));\n }\n\n if (!isRecord(left) || !isRecord(right)) return false;\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n return leftKeys.length === rightKeys.length\n && leftKeys.every((key, index) => key === rightKeys[index] && structurallyEqual(left[key], right[key]));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object';\n}\n"],"names":["structurallyEqual","left","right","Object","is","Array","isArray","length","every","value","index","isRecord","leftKeys","keys","sort","rightKeys","key"],"mappings":";;AAAA;AACA;AAEA;;;;;;;AAOC,IACM,SAASA,iBAAAA,CAAkBC,IAAa,EAAEC,KAAc,EAAA;AAC3D,IAAA,IAAIC,MAAAA,CAAOC,EAAE,CAACH,IAAAA,EAAMC,QAAQ,OAAO,IAAA;AACnC,IAAA,IAAIG,MAAMC,OAAO,CAACL,SAASI,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAAA,EAAQ;QAC7C,OAAOG,KAAAA,CAAMC,OAAO,CAACL,IAAAA,CAAAA,IAASI,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAAA,IACrCD,IAAAA,CAAKM,MAAM,KAAKL,KAAAA,CAAMK,MAAM,IAC5BN,IAAAA,CAAKO,KAAK,CAAC,CAACC,KAAAA,EAAOC,QAAUV,iBAAAA,CAAkBS,KAAAA,EAAOP,KAAK,CAACQ,KAAAA,CAAM,CAAA,CAAA;AAC7E,IAAA;AAEA,IAAA,IAAI,CAACC,QAAAA,CAASV,IAAAA,CAAAA,IAAS,CAACU,QAAAA,CAAST,QAAQ,OAAO,KAAA;AAChD,IAAA,MAAMU,QAAAA,GAAWT,MAAAA,CAAOU,IAAI,CAACZ,MAAMa,IAAI,EAAA;AACvC,IAAA,MAAMC,SAAAA,GAAYZ,MAAAA,CAAOU,IAAI,CAACX,OAAOY,IAAI,EAAA;IACzC,OAAOF,QAAAA,CAASL,MAAM,KAAKQ,SAAAA,CAAUR,MAAM,IACpCK,QAAAA,CAASJ,KAAK,CAAC,CAACQ,GAAAA,EAAKN,KAAAA,GAAUM,QAAQD,SAAS,CAACL,KAAAA,CAAM,IAAIV,iBAAAA,CAAkBC,IAAI,CAACe,GAAAA,CAAI,EAAEd,KAAK,CAACc,GAAAA,CAAI,CAAA,CAAA;AAC7G;AAEA,SAASL,SAASF,KAAc,EAAA;IAC5B,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA;AAC9C;;"}
|
package/dist/cjs/treeNodes.js
CHANGED
|
@@ -13,35 +13,69 @@ var properties = require('./properties.js');
|
|
|
13
13
|
* expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it
|
|
14
14
|
* unique and stable across re-renders without asking the author for anything.
|
|
15
15
|
*
|
|
16
|
+
* An authored key may be a string or a number (a numeric id is a natural key); it is kept as a string. Keys
|
|
17
|
+
* are unique across the whole tree: a node whose authored key was already taken by an earlier node falls back
|
|
18
|
+
* to its path key, so two nodes can never share expansion or selection.
|
|
19
|
+
*
|
|
20
|
+
* An entry that is a string, number or boolean is a leaf labeled with it. Anything else that is not a record
|
|
21
|
+
* (`null`, a nested array) cannot be a node and is skipped; see {@link countUnreadableEntries}.
|
|
22
|
+
*
|
|
16
23
|
* @param entries The raw entries to convert.
|
|
17
24
|
* @param parentKey The key of the node these entries belong to, used to build stable child keys.
|
|
25
|
+
* @param usedKeys The keys already given out in this tree, shared down the recursion.
|
|
18
26
|
* @returns The converted nodes, in order.
|
|
19
|
-
*/ function toTreeNodes(entries, parentKey = '') {
|
|
27
|
+
*/ function toTreeNodes(entries, parentKey = '', usedKeys = new Set()) {
|
|
20
28
|
const nodes = [];
|
|
21
29
|
entries.forEach((entry, index)=>{
|
|
22
30
|
const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;
|
|
23
|
-
if (typeof entry === 'string') {
|
|
31
|
+
if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') {
|
|
24
32
|
nodes.push({
|
|
25
|
-
key: path,
|
|
26
|
-
label: entry
|
|
33
|
+
key: uniqueKey(undefined, path, usedKeys),
|
|
34
|
+
label: String(entry)
|
|
27
35
|
});
|
|
28
36
|
return;
|
|
29
37
|
}
|
|
30
38
|
if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;
|
|
31
39
|
const record = entry;
|
|
32
40
|
const node = {
|
|
33
|
-
key:
|
|
41
|
+
key: uniqueKey(authoredKey(record.key), path, usedKeys)
|
|
34
42
|
};
|
|
35
43
|
if (typeof record.label === 'string') node.label = record.label;
|
|
36
44
|
if (typeof record.icon === 'string') node.icon = record.icon;
|
|
37
45
|
if (typeof record.className === 'string') node.className = record.className;
|
|
38
46
|
if (typeof record.leaf === 'boolean') node.leaf = record.leaf;
|
|
39
|
-
if (typeof record.
|
|
40
|
-
if (
|
|
47
|
+
if (typeof record.expanded === 'boolean') node.expanded = record.expanded;
|
|
48
|
+
if (typeof record.selectable === 'boolean') node.selectable = record.selectable;
|
|
49
|
+
if (record.data !== undefined && record.data !== null) node.data = record.data;
|
|
50
|
+
if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key, usedKeys);
|
|
41
51
|
nodes.push(node);
|
|
42
52
|
});
|
|
43
53
|
return nodes;
|
|
44
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Counts the entries `toTreeNodes` skips, so a control can say that some of its data was not shown instead
|
|
57
|
+
* of silently showing less.
|
|
58
|
+
*
|
|
59
|
+
* @param entries The raw entries.
|
|
60
|
+
* @returns How many entries, at any depth, were neither a scalar nor a record.
|
|
61
|
+
*/ function countUnreadableEntries(entries) {
|
|
62
|
+
return entries.reduce((count, entry)=>{
|
|
63
|
+
if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') return count;
|
|
64
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return count + 1;
|
|
65
|
+
const children = entry.children;
|
|
66
|
+
return count + (Array.isArray(children) ? countUnreadableEntries(children) : 0);
|
|
67
|
+
}, 0);
|
|
68
|
+
}
|
|
69
|
+
function authoredKey(value) {
|
|
70
|
+
if (typeof value === 'string' && value !== '') return value;
|
|
71
|
+
return typeof value === 'number' && Number.isFinite(value) ? String(value) : undefined;
|
|
72
|
+
}
|
|
73
|
+
function uniqueKey(authored, path, usedKeys) {
|
|
74
|
+
let key = authored !== undefined && !usedKeys.has(authored) ? authored : path;
|
|
75
|
+
while(usedKeys.has(key))key = `${key}~`;
|
|
76
|
+
usedKeys.add(key);
|
|
77
|
+
return key;
|
|
78
|
+
}
|
|
45
79
|
/**
|
|
46
80
|
* Reads a tree model off a Scene element's properties.
|
|
47
81
|
*
|
|
@@ -52,6 +86,7 @@ var properties = require('./properties.js');
|
|
|
52
86
|
return toTreeNodes(properties.arrayProperty(element, name));
|
|
53
87
|
}
|
|
54
88
|
|
|
89
|
+
exports.countUnreadableEntries = countUnreadableEntries;
|
|
55
90
|
exports.toTreeNodes = toTreeNodes;
|
|
56
91
|
exports.treeNodesProperty = treeNodesProperty;
|
|
57
92
|
//# sourceMappingURL=treeNodes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeNodes.js","sources":["../../treeNodes.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { TreeNode } from './TreeNode';\nimport { SceneElement } from '@cratis/scene.model';\nimport { arrayProperty } from './properties';\n\n/**\n * Turns raw authored entries into the `TreeNode` model PrimeReact's tree, tree table, tree select and\n * organization chart all share.\n *\n * A `key` is synthesized from the node's path when an author did not supply one. That is not cosmetic:\n * PrimeReact keys expansion, selection and virtual scrolling off `key`, so a tree of unkeyed nodes\n * expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it\n * unique and stable across re-renders without asking the author for anything.\n *\n * @param entries The raw entries to convert.\n * @param parentKey The key of the node these entries belong to, used to build stable child keys.\n * @returns The converted nodes, in order.\n */\nexport function toTreeNodes(entries: unknown[], parentKey = ''): TreeNode[] {\n const nodes: TreeNode[] = [];\n entries.forEach((entry, index) => {\n const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;\n if (typeof entry === 'string') {\n nodes.push({ key: path, label: entry });\n return;\n }\n\n if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;\n\n const record = entry as Record<string, unknown>;\n const node: TreeNode = { key:
|
|
1
|
+
{"version":3,"file":"treeNodes.js","sources":["../../treeNodes.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { TreeNode } from './TreeNode';\nimport { SceneElement } from '@cratis/scene.model';\nimport { arrayProperty } from './properties';\n\n/**\n * Turns raw authored entries into the `TreeNode` model PrimeReact's tree, tree table, tree select and\n * organization chart all share.\n *\n * A `key` is synthesized from the node's path when an author did not supply one. That is not cosmetic:\n * PrimeReact keys expansion, selection and virtual scrolling off `key`, so a tree of unkeyed nodes\n * expands the wrong rows the moment two siblings share a label. Deriving the key from the path makes it\n * unique and stable across re-renders without asking the author for anything.\n *\n * An authored key may be a string or a number (a numeric id is a natural key); it is kept as a string. Keys\n * are unique across the whole tree: a node whose authored key was already taken by an earlier node falls back\n * to its path key, so two nodes can never share expansion or selection.\n *\n * An entry that is a string, number or boolean is a leaf labeled with it. Anything else that is not a record\n * (`null`, a nested array) cannot be a node and is skipped; see {@link countUnreadableEntries}.\n *\n * @param entries The raw entries to convert.\n * @param parentKey The key of the node these entries belong to, used to build stable child keys.\n * @param usedKeys The keys already given out in this tree, shared down the recursion.\n * @returns The converted nodes, in order.\n */\nexport function toTreeNodes(entries: unknown[], parentKey = '', usedKeys: Set<string> = new Set()): TreeNode[] {\n const nodes: TreeNode[] = [];\n entries.forEach((entry, index) => {\n const path = parentKey === '' ? `${index}` : `${parentKey}-${index}`;\n if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') {\n nodes.push({ key: uniqueKey(undefined, path, usedKeys), label: String(entry) });\n return;\n }\n\n if (typeof entry !== 'object' || entry === undefined || entry === null || Array.isArray(entry)) return;\n\n const record = entry as Record<string, unknown>;\n const node: TreeNode = { key: uniqueKey(authoredKey(record.key), path, usedKeys) };\n if (typeof record.label === 'string') node.label = record.label;\n if (typeof record.icon === 'string') node.icon = record.icon;\n if (typeof record.className === 'string') node.className = record.className;\n if (typeof record.leaf === 'boolean') node.leaf = record.leaf;\n if (typeof record.expanded === 'boolean') node.expanded = record.expanded;\n if (typeof record.selectable === 'boolean') node.selectable = record.selectable;\n if (record.data !== undefined && record.data !== null) node.data = record.data;\n if (Array.isArray(record.children)) node.children = toTreeNodes(record.children, node.key as string, usedKeys);\n nodes.push(node);\n });\n\n return nodes;\n}\n\n/**\n * Counts the entries `toTreeNodes` skips, so a control can say that some of its data was not shown instead\n * of silently showing less.\n *\n * @param entries The raw entries.\n * @returns How many entries, at any depth, were neither a scalar nor a record.\n */\nexport function countUnreadableEntries(entries: unknown[]): number {\n return entries.reduce<number>((count, entry) => {\n if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean') return count;\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return count + 1;\n const children = (entry as { children?: unknown }).children;\n return count + (Array.isArray(children) ? countUnreadableEntries(children) : 0);\n }, 0);\n}\n\nfunction authoredKey(value: unknown): string | undefined {\n if (typeof value === 'string' && value !== '') return value;\n return typeof value === 'number' && Number.isFinite(value) ? String(value) : undefined;\n}\n\nfunction uniqueKey(authored: string | undefined, path: string, usedKeys: Set<string>): string {\n let key = authored !== undefined && !usedKeys.has(authored) ? authored : path;\n while (usedKeys.has(key)) key = `${key}~`;\n usedKeys.add(key);\n return key;\n}\n\n/**\n * Reads a tree model off a Scene element's properties.\n *\n * @param element The element whose properties to read.\n * @param name The property name holding the entries.\n * @returns The converted nodes, empty when the property is missing or is not an array.\n */\nexport function treeNodesProperty(element: SceneElement, name: string): TreeNode[] {\n return toTreeNodes(arrayProperty(element, name));\n}\n"],"names":["toTreeNodes","entries","parentKey","usedKeys","Set","nodes","forEach","entry","index","path","push","key","uniqueKey","undefined","label","String","Array","isArray","record","node","authoredKey","icon","className","leaf","expanded","selectable","data","children","countUnreadableEntries","reduce","count","value","Number","isFinite","authored","has","add","treeNodesProperty","element","name","arrayProperty"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var useStructuralValue = require('./useStructuralValue.js');
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
/**
|
|
9
|
+
* State that starts from authored data and starts over when that data really changes.
|
|
10
|
+
*
|
|
11
|
+
* A control's selection or expansion is runtime state the user changes, yet it is also authored on the
|
|
12
|
+
* element. Reading the authored value once (`useState(() => authored)`) ignores a later edit of the document;
|
|
13
|
+
* resetting on every render discards what the user did. This does neither: the state follows `source` when
|
|
14
|
+
* its content changes, compared structurally because every document edit clones the data, and is otherwise
|
|
15
|
+
* left alone - so an unrelated property edit does not undo the user's choice.
|
|
16
|
+
*
|
|
17
|
+
* @param source The authored data the state derives from.
|
|
18
|
+
* @param initial Derives the starting state from the authored data.
|
|
19
|
+
* @returns The state and its setter, like `useState`.
|
|
20
|
+
*/ function useResettingState(source, initial) {
|
|
21
|
+
const stable = useStructuralValue.useStructuralValue(source);
|
|
22
|
+
const [held, setHeld] = react.useState(()=>({
|
|
23
|
+
source: stable,
|
|
24
|
+
value: initial()
|
|
25
|
+
}));
|
|
26
|
+
let current = held;
|
|
27
|
+
if (held.source !== stable) {
|
|
28
|
+
current = {
|
|
29
|
+
source: stable,
|
|
30
|
+
value: initial()
|
|
31
|
+
};
|
|
32
|
+
setHeld(current);
|
|
33
|
+
}
|
|
34
|
+
const update = react.useCallback((action)=>{
|
|
35
|
+
setHeld((previous)=>({
|
|
36
|
+
source: previous.source,
|
|
37
|
+
value: typeof action === 'function' ? action(previous.value) : action
|
|
38
|
+
}));
|
|
39
|
+
}, []);
|
|
40
|
+
return [
|
|
41
|
+
current.value,
|
|
42
|
+
update
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
exports.useResettingState = useResettingState;
|
|
47
|
+
//# sourceMappingURL=useResettingState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResettingState.js","sources":["../../useResettingState.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Dispatch, SetStateAction, useCallback, useState } from 'react';\nimport { useStructuralValue } from './useStructuralValue';\n\n/**\n * State that starts from authored data and starts over when that data really changes.\n *\n * A control's selection or expansion is runtime state the user changes, yet it is also authored on the\n * element. Reading the authored value once (`useState(() => authored)`) ignores a later edit of the document;\n * resetting on every render discards what the user did. This does neither: the state follows `source` when\n * its content changes, compared structurally because every document edit clones the data, and is otherwise\n * left alone - so an unrelated property edit does not undo the user's choice.\n *\n * @param source The authored data the state derives from.\n * @param initial Derives the starting state from the authored data.\n * @returns The state and its setter, like `useState`.\n */\nexport function useResettingState<TState>(source: unknown, initial: () => TState): [TState, Dispatch<SetStateAction<TState>>] {\n const stable = useStructuralValue(source);\n const [held, setHeld] = useState(() => ({ source: stable, value: initial() }));\n let current = held;\n if (held.source !== stable) {\n current = { source: stable, value: initial() };\n setHeld(current);\n }\n\n const update = useCallback((action: SetStateAction<TState>) => {\n setHeld(previous => ({ source: previous.source, value: typeof action === 'function' ? (action as (state: TState) => TState)(previous.value) : action }));\n }, []);\n\n return [current.value, update];\n}\n"],"names":["useResettingState","source","initial","stable","useStructuralValue","held","setHeld","useState","value","current","update","useCallback","action","previous"],"mappings":";;;;;AAAA;AACA;AAKA;;;;;;;;;;;;AAYC,IACM,SAASA,iBAAAA,CAA0BC,MAAe,EAAEC,OAAqB,EAAA;AAC5E,IAAA,MAAMC,SAASC,qCAAAA,CAAmBH,MAAAA,CAAAA;AAClC,IAAA,MAAM,CAACI,IAAAA,EAAMC,OAAAA,CAAQ,GAAGC,cAAAA,CAAS,KAAO;YAAEN,MAAAA,EAAQE,MAAAA;YAAQK,KAAAA,EAAON,OAAAA;SAAU,CAAA,CAAA;AAC3E,IAAA,IAAIO,OAAAA,GAAUJ,IAAAA;IACd,IAAIA,IAAAA,CAAKJ,MAAM,KAAKE,MAAAA,EAAQ;QACxBM,OAAAA,GAAU;YAAER,MAAAA,EAAQE,MAAAA;YAAQK,KAAAA,EAAON,OAAAA;AAAU,SAAA;QAC7CI,OAAAA,CAAQG,OAAAA,CAAAA;AACZ,IAAA;IAEA,MAAMC,MAAAA,GAASC,kBAAY,CAACC,MAAAA,GAAAA;QACxBN,OAAAA,CAAQO,CAAAA,YAAa;AAAEZ,gBAAAA,MAAAA,EAAQY,SAASZ,MAAM;AAAEO,gBAAAA,KAAAA,EAAO,OAAOI,MAAAA,KAAW,UAAA,GAAa,MAACA,CAAqCC,QAAAA,CAASL,KAAK,CAAA,GAAII;aAAO,CAAA,CAAA;AACzJ,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,OAAO;AAACH,QAAAA,OAAAA,CAAQD,KAAK;AAAEE,QAAAA;AAAO,KAAA;AAClC;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var structurallyEqual = require('./structurallyEqual.js');
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
/**
|
|
9
|
+
* Returns the same reference for as long as the content of `value` is unchanged.
|
|
10
|
+
*
|
|
11
|
+
* Use it for authored data that feeds an effect dependency list: a cloned document gives that data a new
|
|
12
|
+
* identity on every unrelated edit, which would otherwise rerun the effect and rebuild whatever it owns.
|
|
13
|
+
*/ function useStructuralValue(value) {
|
|
14
|
+
const stable = react.useRef(value);
|
|
15
|
+
if (!structurallyEqual.structurallyEqual(stable.current, value)) stable.current = value;
|
|
16
|
+
return stable.current;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.useStructuralValue = useStructuralValue;
|
|
20
|
+
//# sourceMappingURL=useStructuralValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStructuralValue.js","sources":["../../useStructuralValue.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useRef } from 'react';\nimport { structurallyEqual } from './structurallyEqual';\n\n/**\n * Returns the same reference for as long as the content of `value` is unchanged.\n *\n * Use it for authored data that feeds an effect dependency list: a cloned document gives that data a new\n * identity on every unrelated edit, which would otherwise rerun the effect and rebuild whatever it owns.\n */\nexport function useStructuralValue<TValue>(value: TValue): TValue {\n const stable = useRef(value);\n if (!structurallyEqual(stable.current, value)) stable.current = value;\n return stable.current;\n}\n"],"names":["useStructuralValue","value","stable","useRef","structurallyEqual","current"],"mappings":";;;;;AAAA;AACA;AAKA;;;;;IAMO,SAASA,kBAAAA,CAA2BC,KAAa,EAAA;AACpD,IAAA,MAAMC,SAASC,YAAAA,CAAOF,KAAAA,CAAAA;IACtB,IAAI,CAACG,oCAAkBF,MAAAA,CAAOG,OAAO,EAAEJ,KAAAA,CAAAA,EAAQC,MAAAA,CAAOG,OAAO,GAAGJ,KAAAA;AAChE,IAAA,OAAOC,OAAOG,OAAO;AACzB;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnumerationResolution.d.ts","sourceRoot":"","sources":["../../EnumerationResolution.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,IAClD;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnumerationResolution.js","sourceRoot":"","sources":["../../EnumerationResolution.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { SceneElementView } from '@cratis/scene.react';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof SceneElementView;
|
|
6
|
+
tags: string[];
|
|
7
|
+
};
|
|
8
|
+
export default meta;
|
|
9
|
+
type Story = StoryObj<typeof meta>;
|
|
10
|
+
export declare const Bar: Story;
|
|
11
|
+
export declare const MigratedWithoutData: Story;
|
|
12
|
+
export declare const UnsupportedType: Story;
|
|
13
|
+
export declare const MigratedLegacyBar: Story;
|
|
14
|
+
//# sourceMappingURL=ChartGallery.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartGallery.stories.d.ts","sourceRoot":"","sources":["../../../chart/ChartGallery.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD,QAAA,MAAM,IAAI;;;;CAI+B,CAAC;eAE3B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAQnC,eAAO,MAAM,GAAG,EAAE,KAQjB,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,KAMjC,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SceneElementView } from '@cratis/scene.react';
|
|
2
|
+
import { primeReactComponents } from '../primeReactComponents';
|
|
3
|
+
import { sceneComponent } from '../storyElements';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'PrimeReact/Chart',
|
|
6
|
+
component: SceneElementView,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
const salesData = {
|
|
11
|
+
labels: ['January', 'February', 'March'],
|
|
12
|
+
datasets: [{ label: 'Sales', data: [12, 19, 8], backgroundColor: '#6366f1' }],
|
|
13
|
+
};
|
|
14
|
+
export const Bar = {
|
|
15
|
+
args: {
|
|
16
|
+
element: sceneComponent('sales', 'chart', {
|
|
17
|
+
type: 'bar', data: salesData, options: { maintainAspectRatio: false }, style: { height: 240 }, ariaLabel: 'Monthly sales',
|
|
18
|
+
}),
|
|
19
|
+
registry: primeReactComponents,
|
|
20
|
+
resolveBinding: () => undefined,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export const MigratedWithoutData = {
|
|
24
|
+
args: {
|
|
25
|
+
element: sceneComponent('legacy-empty', 'chart', { type: 0, style: { height: 72 }, ariaLabel: 'Migrated chart without data', legacyType: 'PrimeReact.Chart' }),
|
|
26
|
+
registry: primeReactComponents,
|
|
27
|
+
resolveBinding: () => undefined,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
export const UnsupportedType = {
|
|
31
|
+
args: {
|
|
32
|
+
element: sceneComponent('unsupported', 'chart', { type: 8, data: salesData }),
|
|
33
|
+
registry: primeReactComponents,
|
|
34
|
+
resolveBinding: () => undefined,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
export const MigratedLegacyBar = {
|
|
38
|
+
args: {
|
|
39
|
+
element: sceneComponent('legacy-sales', 'chart', {
|
|
40
|
+
type: 0, data: salesData, options: { maintainAspectRatio: false }, style: { height: 240 }, ariaLabel: 'Migrated monthly sales',
|
|
41
|
+
legacyType: 'PrimeReact.Chart', legacyExtras: { canvas: { x: 256, y: 184 } },
|
|
42
|
+
}),
|
|
43
|
+
registry: primeReactComponents,
|
|
44
|
+
resolveBinding: () => undefined,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=ChartGallery.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartGallery.stories.js","sourceRoot":"","sources":["../../../chart/ChartGallery.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,IAAI,GAAG;IACT,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,gBAAgB;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC;CACmB,CAAC;AAE1C,eAAe,IAAI,CAAC;AAKpB,MAAM,SAAS,GAAG;IACd,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;IACxC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAU;IACtB,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE;YACtC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe;SAC5H,CAAC;QACF,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC;AAGF,MAAM,CAAC,MAAM,mBAAmB,GAAU;IACtC,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QAC9J,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAU;IAClC,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7E,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC;AAGF,MAAM,CAAC,MAAM,iBAAiB,GAAU;IACpC,IAAI,EAAE;QACF,OAAO,EAAE,cAAc,CAAC,cAAc,EAAE,OAAO,EAAE;YAC7C,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,wBAAwB;YAC9H,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;SAC/E,CAAC;QACF,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;KAClC;CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartType.d.ts","sourceRoot":"","sources":["../../../chart/ChartType.ts"],"names":[],"mappings":"AAIA,oBAAY,SAAS;IACjB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;CACtB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
/** The canonical names of the Chart.js chart types Scene's `chart` component supports. */ var ChartType = /*#__PURE__*/ function(ChartType) {
|
|
4
|
+
ChartType["Bar"] = "bar";
|
|
5
|
+
ChartType["Line"] = "line";
|
|
6
|
+
ChartType["Pie"] = "pie";
|
|
7
|
+
ChartType["Doughnut"] = "doughnut";
|
|
8
|
+
ChartType["PolarArea"] = "polarArea";
|
|
9
|
+
ChartType["Radar"] = "radar";
|
|
10
|
+
ChartType["Bubble"] = "bubble";
|
|
11
|
+
ChartType["Scatter"] = "scatter";
|
|
12
|
+
return ChartType;
|
|
13
|
+
}({});
|
|
14
|
+
|
|
15
|
+
export { ChartType };
|
|
16
|
+
//# sourceMappingURL=ChartType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartType.js","sources":["../../../chart/ChartType.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** The canonical names of the Chart.js chart types Scene's `chart` component supports. */\nexport enum ChartType {\n Bar = 'bar',\n Line = 'line',\n Pie = 'pie',\n Doughnut = 'doughnut',\n PolarArea = 'polarArea',\n Radar = 'radar',\n Bubble = 'bubble',\n Scatter = 'scatter',\n}\n"],"names":["ChartType"],"mappings":"AAAA;AACA;AAEA,2FACO,IAAKA,SAAAA,iBAAAA,SAAAA,SAAAA,EAAAA;;;;;;;;;AAAAA,IAAAA,OAAAA,SAAAA;AASX,CAAA,CAAA,EAAA;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartTypeResolution.d.ts","sourceRoot":"","sources":["../../../chart/ChartTypeResolution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxC,MAAM,MAAM,mBAAmB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAClC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartTypeResolution.js","sourceRoot":"","sources":["../../../chart/ChartTypeResolution.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrimeChart.d.ts","sourceRoot":"","sources":["../../../chart/PrimeChart.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAuB/D,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAiC7E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useMemo } from 'react';
|
|
3
|
+
import { recordProperty, booleanProperty, stringProperty } from '../properties.js';
|
|
4
|
+
import { useStructuralValue } from '../useStructuralValue.js';
|
|
5
|
+
import { chartHasData } from './chartHasData.js';
|
|
6
|
+
import { resolveChartType } from './resolveChartType.js';
|
|
7
|
+
import { useChart } from './useChart.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The `PrimeReact:chart` component, rendered by Chart.js because PrimeReact 11 no longer ships its
|
|
11
|
+
* former Chart.js wrapper.
|
|
12
|
+
*
|
|
13
|
+
* Three states are explicit rather than a blank canvas: an unsupported `type` is reported (the right chart
|
|
14
|
+
* cannot be guessed), a chart with no data points shows its `emptyLabel` (data is never invented), and a
|
|
15
|
+
* chart Chart.js could not draw says why. Only a chart with data and a supported type reaches Chart.js.
|
|
16
|
+
*
|
|
17
|
+
* Chart.js is an optional peer dependency of this package: a host that renders charts must install
|
|
18
|
+
* `chart.js` itself. The chart rebuilds only when its resolved type, data or options change in content -
|
|
19
|
+
* every edit to a Scene document clones the whole document, and a clone with equal content is not a change.
|
|
20
|
+
*
|
|
21
|
+
* The chart fills the authored size: `maintainAspectRatio` defaults to `false` here (Chart.js defaults to
|
|
22
|
+
* `true`, which shrinks the chart inside its box) and an authored `options.maintainAspectRatio` wins. The
|
|
23
|
+
* `responsive` property is authoritative over `options.responsive` when both are set.
|
|
24
|
+
*/ function PrimeChart({ element, interactions }) {
|
|
25
|
+
const canvas = useRef(null);
|
|
26
|
+
const resolution = resolveChartType(element);
|
|
27
|
+
const data = useStructuralValue(recordProperty(element, 'data'));
|
|
28
|
+
const options = useStructuralValue(recordProperty(element, 'options'));
|
|
29
|
+
const style = recordProperty(element, 'style');
|
|
30
|
+
const responsive = booleanProperty(element, 'responsive', options?.responsive ?? true);
|
|
31
|
+
const ariaLabel = stringProperty(element, 'ariaLabel', element.name || 'Chart');
|
|
32
|
+
const emptyLabel = stringProperty(element, 'emptyLabel', 'No chart data');
|
|
33
|
+
const hasData = chartHasData(data);
|
|
34
|
+
const type = resolution.isValid ? resolution.type : undefined;
|
|
35
|
+
const enabled = type !== undefined && hasData;
|
|
36
|
+
const configuration = useMemo(()=>({
|
|
37
|
+
type,
|
|
38
|
+
data: data ?? {
|
|
39
|
+
datasets: []
|
|
40
|
+
},
|
|
41
|
+
options: {
|
|
42
|
+
maintainAspectRatio: false,
|
|
43
|
+
...options,
|
|
44
|
+
responsive
|
|
45
|
+
}
|
|
46
|
+
}), [
|
|
47
|
+
type,
|
|
48
|
+
data,
|
|
49
|
+
options,
|
|
50
|
+
responsive
|
|
51
|
+
]);
|
|
52
|
+
const failure = useChart(canvas, configuration, enabled);
|
|
53
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
54
|
+
"data-scene-id": element.id,
|
|
55
|
+
"data-scene-component": "chart",
|
|
56
|
+
style: {
|
|
57
|
+
position: 'relative',
|
|
58
|
+
width: element.size.width ?? '100%',
|
|
59
|
+
height: element.size.height ?? '100%',
|
|
60
|
+
...style
|
|
61
|
+
},
|
|
62
|
+
...interactions,
|
|
63
|
+
children: [
|
|
64
|
+
!resolution.isValid && /*#__PURE__*/ jsx("div", {
|
|
65
|
+
role: "alert",
|
|
66
|
+
"data-scene-state": "unsupported-type",
|
|
67
|
+
children: resolution.message
|
|
68
|
+
}),
|
|
69
|
+
resolution.isValid && !hasData && /*#__PURE__*/ jsx("div", {
|
|
70
|
+
role: "status",
|
|
71
|
+
"data-scene-state": "empty",
|
|
72
|
+
children: emptyLabel
|
|
73
|
+
}),
|
|
74
|
+
failure !== undefined && /*#__PURE__*/ jsx("div", {
|
|
75
|
+
role: "alert",
|
|
76
|
+
"data-scene-state": "unavailable",
|
|
77
|
+
children: `The chart could not be drawn: ${failure}`
|
|
78
|
+
}),
|
|
79
|
+
enabled && /*#__PURE__*/ jsx("canvas", {
|
|
80
|
+
ref: canvas,
|
|
81
|
+
role: "img",
|
|
82
|
+
"aria-label": ariaLabel,
|
|
83
|
+
hidden: failure !== undefined
|
|
84
|
+
})
|
|
85
|
+
]
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export { PrimeChart };
|
|
90
|
+
//# sourceMappingURL=PrimeChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrimeChart.js","sources":["../../../chart/PrimeChart.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { CSSProperties, useMemo, useRef } from 'react';\nimport type { ChartConfiguration, ChartData, ChartOptions } from 'chart.js';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { booleanProperty, recordProperty, stringProperty } from '../properties';\nimport { useStructuralValue } from '../useStructuralValue';\nimport { chartHasData } from './chartHasData';\nimport { resolveChartType } from './resolveChartType';\nimport { useChart } from './useChart';\n\n/**\n * The `PrimeReact:chart` component, rendered by Chart.js because PrimeReact 11 no longer ships its\n * former Chart.js wrapper.\n *\n * Three states are explicit rather than a blank canvas: an unsupported `type` is reported (the right chart\n * cannot be guessed), a chart with no data points shows its `emptyLabel` (data is never invented), and a\n * chart Chart.js could not draw says why. Only a chart with data and a supported type reaches Chart.js.\n *\n * Chart.js is an optional peer dependency of this package: a host that renders charts must install\n * `chart.js` itself. The chart rebuilds only when its resolved type, data or options change in content -\n * every edit to a Scene document clones the whole document, and a clone with equal content is not a change.\n *\n * The chart fills the authored size: `maintainAspectRatio` defaults to `false` here (Chart.js defaults to\n * `true`, which shrinks the chart inside its box) and an authored `options.maintainAspectRatio` wins. The\n * `responsive` property is authoritative over `options.responsive` when both are set.\n */\nexport function PrimeChart({ element, interactions }: RegisteredComponentProps) {\n const canvas = useRef<HTMLCanvasElement>(null);\n const resolution = resolveChartType(element);\n const data = useStructuralValue(recordProperty(element, 'data') as ChartData | undefined);\n const options = useStructuralValue(recordProperty(element, 'options') as ChartOptions | undefined);\n const style = recordProperty(element, 'style') as CSSProperties | undefined;\n const responsive = booleanProperty(element, 'responsive', options?.responsive ?? true);\n const ariaLabel = stringProperty(element, 'ariaLabel', element.name || 'Chart');\n const emptyLabel = stringProperty(element, 'emptyLabel', 'No chart data');\n const hasData = chartHasData(data);\n const type = resolution.isValid ? resolution.type : undefined;\n const enabled = type !== undefined && hasData;\n\n const configuration = useMemo(() => ({\n type,\n data: data ?? { datasets: [] },\n options: { maintainAspectRatio: false, ...options, responsive },\n }) as unknown as ChartConfiguration, [type, data, options, responsive]);\n\n const failure = useChart(canvas, configuration, enabled);\n\n return (\n <div\n data-scene-id={element.id}\n data-scene-component='chart'\n style={{ position: 'relative', width: element.size.width ?? '100%', height: element.size.height ?? '100%', ...style }}\n {...interactions}>\n {!resolution.isValid && <div role='alert' data-scene-state='unsupported-type'>{resolution.message}</div>}\n {resolution.isValid && !hasData && <div role='status' data-scene-state='empty'>{emptyLabel}</div>}\n {failure !== undefined && <div role='alert' data-scene-state='unavailable'>{`The chart could not be drawn: ${failure}`}</div>}\n {enabled && <canvas ref={canvas} role='img' aria-label={ariaLabel} hidden={failure !== undefined} />}\n </div>\n );\n}\n"],"names":["PrimeChart","element","interactions","canvas","useRef","resolution","resolveChartType","data","useStructuralValue","recordProperty","options","style","responsive","booleanProperty","ariaLabel","stringProperty","name","emptyLabel","hasData","chartHasData","type","isValid","undefined","enabled","configuration","useMemo","datasets","maintainAspectRatio","failure","useChart","_jsxs","div","data-scene-id","id","data-scene-component","position","width","size","height","_jsx","role","data-scene-state","message","ref","aria-label","hidden"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartHasData.d.ts","sourceRoot":"","sources":["../../../chart/chartHasData.ts"],"names":[],"mappings":"AAUA,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAWnD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
* Whether chart data holds at least one data point to draw.
|
|
5
|
+
*
|
|
6
|
+
* Datasets whose `data` is empty (or absent) draw nothing but axes, so the chart reports it instead.
|
|
7
|
+
* A dataset may also give its points as keyed records (Chart.js `parsing` over an object), which counts
|
|
8
|
+
* when it has any keys.
|
|
9
|
+
*/ function chartHasData(data) {
|
|
10
|
+
if (data === null || typeof data !== 'object') return false;
|
|
11
|
+
const datasets = data.datasets;
|
|
12
|
+
if (!Array.isArray(datasets)) return false;
|
|
13
|
+
return datasets.some((dataset)=>{
|
|
14
|
+
if (dataset === null || typeof dataset !== 'object') return false;
|
|
15
|
+
const points = dataset.data;
|
|
16
|
+
if (Array.isArray(points)) return points.length > 0;
|
|
17
|
+
return points !== null && typeof points === 'object' && Object.keys(points).length > 0;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { chartHasData };
|
|
22
|
+
//# sourceMappingURL=chartHasData.js.map
|