@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 @@
|
|
|
1
|
+
{"version":3,"file":"isSerializedLegacyElement.d.ts","sourceRoot":"","sources":["../../../data/isSerializedLegacyElement.ts"],"names":[],"mappings":"AAaA,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjE;AASD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK/G"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 an entry is a serialized legacy UI element - an object that names its type in `_derivedTypeId`.
|
|
5
|
+
*
|
|
6
|
+
* The original `ItemsControl.Items` and `TreeTable.Columns` held UI elements, not data. Scene does not
|
|
7
|
+
* read those shapes and has no runtime adapter for them: the controls recognize them only to refuse them
|
|
8
|
+
* visibly, instead of listing the element's fields as if they were rows. Converting them is the migration
|
|
9
|
+
* tool's job, which maps each element to a canonical slot (see the package documentation).
|
|
10
|
+
*
|
|
11
|
+
* @param entry An entry of `items` or `columns`.
|
|
12
|
+
*/ function isSerializedLegacyElement(entry) {
|
|
13
|
+
return typeof entry === 'object' && entry !== null && !Array.isArray(entry) && typeof entry._derivedTypeId === 'string';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The message for entries that were refused, or `undefined` when there were none.
|
|
17
|
+
*
|
|
18
|
+
* @param entries The authored entries.
|
|
19
|
+
* @param property The property they came from.
|
|
20
|
+
* @param guidance What the author should do instead, finishing the sentence "Author them ..." or similar.
|
|
21
|
+
*/ function legacyElementMessage(entries, property, guidance) {
|
|
22
|
+
const refused = entries.filter(isSerializedLegacyElement).length;
|
|
23
|
+
return refused === 0 ? undefined : `${refused} entr${refused === 1 ? 'y' : 'ies'} of ${property} ${refused === 1 ? 'is a' : 'are'} serialized legacy UI element${refused === 1 ? '' : 's'}, which this control does not read. ${guidance}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { isSerializedLegacyElement, legacyElementMessage };
|
|
27
|
+
//# sourceMappingURL=isSerializedLegacyElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isSerializedLegacyElement.js","sources":["../../../data/isSerializedLegacyElement.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 * Whether an entry is a serialized legacy UI element - an object that names its type in `_derivedTypeId`.\n *\n * The original `ItemsControl.Items` and `TreeTable.Columns` held UI elements, not data. Scene does not\n * read those shapes and has no runtime adapter for them: the controls recognize them only to refuse them\n * visibly, instead of listing the element's fields as if they were rows. Converting them is the migration\n * tool's job, which maps each element to a canonical slot (see the package documentation).\n *\n * @param entry An entry of `items` or `columns`.\n */\nexport function isSerializedLegacyElement(entry: unknown): boolean {\n return typeof entry === 'object' && entry !== null && !Array.isArray(entry) && typeof (entry as { _derivedTypeId?: unknown })._derivedTypeId === 'string';\n}\n\n/**\n * The message for entries that were refused, or `undefined` when there were none.\n *\n * @param entries The authored entries.\n * @param property The property they came from.\n * @param guidance What the author should do instead, finishing the sentence \"Author them ...\" or similar.\n */\nexport function legacyElementMessage(entries: unknown[], property: string, guidance: string): string | undefined {\n const refused = entries.filter(isSerializedLegacyElement).length;\n return refused === 0\n ? undefined\n : `${refused} entr${refused === 1 ? 'y' : 'ies'} of ${property} ${refused === 1 ? 'is a' : 'are'} serialized legacy UI element${refused === 1 ? '' : 's'}, which this control does not read. ${guidance}`;\n}\n"],"names":["isSerializedLegacyElement","entry","Array","isArray","_derivedTypeId","legacyElementMessage","entries","property","guidance","refused","filter","length","undefined"],"mappings":"AAAA;AACA;AAEA;;;;;;;;;IAUO,SAASA,yBAAAA,CAA0BC,KAAc,EAAA;AACpD,IAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,QAAQ,CAACC,KAAAA,CAAMC,OAAO,CAACF,KAAAA,CAAAA,IAAU,OAAO,KAACA,CAAuCG,cAAc,KAAK,QAAA;AACrJ;AAEA;;;;;;AAMC,IACM,SAASC,oBAAAA,CAAqBC,OAAkB,EAAEC,QAAgB,EAAEC,QAAgB,EAAA;AACvF,IAAA,MAAMC,OAAAA,GAAUH,OAAAA,CAAQI,MAAM,CAACV,2BAA2BW,MAAM;AAChE,IAAA,OAAOF,OAAAA,KAAY,CAAA,GACbG,SAAAA,GACA,CAAA,EAAGH,OAAAA,CAAQ,KAAK,EAAEA,OAAAA,KAAY,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,IAAI,EAAEF,QAAAA,CAAS,CAAC,EAAEE,OAAAA,KAAY,CAAA,GAAI,MAAA,GAAS,KAAA,CAAM,6BAA6B,EAAEA,OAAAA,KAAY,CAAA,GAAI,EAAA,GAAK,GAAA,CAAI,oCAAoC,EAAED,QAAAA,CAAAA,CAAU;AACjN;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readableValue.d.ts","sourceRoot":"","sources":["../../../data/readableValue.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CAe/D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
/** Nested deeper than this is shown as an ellipsis, so a cyclic or enormous value cannot flood the page. */ const maximumDepth = 3;
|
|
4
|
+
/**
|
|
5
|
+
* Writes any authored value as text a person can read.
|
|
6
|
+
*
|
|
7
|
+
* Scalars are shown as they are. An array is its readable entries joined by commas, and an object is
|
|
8
|
+
* `name: value` pairs joined by semicolons - never `[object Object]`, and never a raw JSON document. `null`
|
|
9
|
+
* and `undefined` are empty.
|
|
10
|
+
*
|
|
11
|
+
* @param value The authored value.
|
|
12
|
+
* @param depth How deep the value is nested already; callers leave it out.
|
|
13
|
+
*/ function readableValue(value, depth = 0) {
|
|
14
|
+
if (value === undefined || value === null) return '';
|
|
15
|
+
if (typeof value === 'string') return value;
|
|
16
|
+
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return String(value);
|
|
17
|
+
if (depth >= maximumDepth) return '…';
|
|
18
|
+
if (Array.isArray(value)) return value.map((entry)=>readableValue(entry, depth + 1)).filter((text)=>text !== '').join(', ');
|
|
19
|
+
if (typeof value === 'object') {
|
|
20
|
+
return Object.entries(value).map(([name, entry])=>[
|
|
21
|
+
name,
|
|
22
|
+
readableValue(entry, depth + 1)
|
|
23
|
+
]).filter(([, text])=>text !== '').map(([name, text])=>`${name}: ${text}`).join('; ');
|
|
24
|
+
}
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { readableValue };
|
|
29
|
+
//# sourceMappingURL=readableValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readableValue.js","sources":["../../../data/readableValue.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/** Nested deeper than this is shown as an ellipsis, so a cyclic or enormous value cannot flood the page. */\nconst maximumDepth = 3;\n\n/**\n * Writes any authored value as text a person can read.\n *\n * Scalars are shown as they are. An array is its readable entries joined by commas, and an object is\n * `name: value` pairs joined by semicolons - never `[object Object]`, and never a raw JSON document. `null`\n * and `undefined` are empty.\n *\n * @param value The authored value.\n * @param depth How deep the value is nested already; callers leave it out.\n */\nexport function readableValue(value: unknown, depth = 0): string {\n if (value === undefined || value === null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return String(value);\n if (depth >= maximumDepth) return '…';\n if (Array.isArray(value)) return value.map(entry => readableValue(entry, depth + 1)).filter(text => text !== '').join(', ');\n if (typeof value === 'object') {\n return Object.entries(value)\n .map(([name, entry]) => [name, readableValue(entry, depth + 1)])\n .filter(([, text]) => text !== '')\n .map(([name, text]) => `${name}: ${text}`)\n .join('; ');\n }\n\n return '';\n}\n"],"names":["maximumDepth","readableValue","value","depth","undefined","String","Array","isArray","map","entry","filter","text","join","Object","entries","name"],"mappings":"AAAA;AACA;AAEA,6GACA,MAAMA,YAAAA,GAAe,CAAA;AAErB;;;;;;;;;AASC,IACM,SAASC,aAAAA,CAAcC,KAAc,EAAEC,QAAQ,CAAC,EAAA;AACnD,IAAA,IAAID,KAAAA,KAAUE,SAAAA,IAAaF,KAAAA,KAAU,IAAA,EAAM,OAAO,EAAA;IAClD,IAAI,OAAOA,KAAAA,KAAU,QAAA,EAAU,OAAOA,KAAAA;IACtC,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAY,OAAOA,KAAAA,KAAU,aAAa,OAAOA,KAAAA,KAAU,QAAA,EAAU,OAAOG,MAAAA,CAAOH,KAAAA,CAAAA;IACxG,IAAIC,KAAAA,IAASH,cAAc,OAAO,GAAA;IAClC,IAAIM,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,EAAQ,OAAOA,KAAAA,CAAMM,GAAG,CAACC,CAAAA,KAAAA,GAASR,cAAcQ,KAAAA,EAAON,KAAAA,GAAQ,IAAIO,MAAM,CAACC,CAAAA,IAAAA,GAAQA,IAAAA,KAAS,EAAA,CAAA,CAAIC,IAAI,CAAC,IAAA,CAAA;IACtH,IAAI,OAAOV,UAAU,QAAA,EAAU;QAC3B,OAAOW,MAAAA,CAAOC,OAAO,CAACZ,KAAAA,CAAAA,CACjBM,GAAG,CAAC,CAAC,CAACO,IAAAA,EAAMN,KAAAA,CAAM,GAAK;AAACM,gBAAAA,IAAAA;AAAMd,gBAAAA,aAAAA,CAAcQ,OAAON,KAAAA,GAAQ,CAAA;aAAG,CAAA,CAC9DO,MAAM,CAAC,CAAC,GAAGC,KAAK,GAAKA,IAAAA,KAAS,EAAA,CAAA,CAC9BH,GAAG,CAAC,CAAC,CAACO,IAAAA,EAAMJ,IAAAA,CAAK,GAAK,CAAA,EAAGI,IAAAA,CAAK,EAAE,EAAEJ,IAAAA,CAAAA,CAAM,CAAA,CACxCC,IAAI,CAAC,IAAA,CAAA;AACd,IAAA;IAEA,OAAO,EAAA;AACX;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectionKeysOf.d.ts","sourceRoot":"","sources":["../../../data/selectionKeysOf.ts"],"names":[],"mappings":"AA6BA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAU3D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 keys of one node, whichever of the shapes a selection may use. */ function keyOf(value) {
|
|
4
|
+
if (typeof value === 'string' && value !== '') return value;
|
|
5
|
+
return typeof value === 'number' && Number.isFinite(value) ? String(value) : undefined;
|
|
6
|
+
}
|
|
7
|
+
function nodeKeyOf(value) {
|
|
8
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) return keyOf(value);
|
|
9
|
+
return keyOf(value.key);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Reads the keys an authored `selection` selects.
|
|
13
|
+
*
|
|
14
|
+
* Every shape a legacy document may hold is accepted, and none is rewritten:
|
|
15
|
+
* - one key, string or number (`'b'`, `6`);
|
|
16
|
+
* - an array mixing keys and `{ key }` objects (`['a', 6, { key: 'c' }]`);
|
|
17
|
+
* - one `{ key }` object;
|
|
18
|
+
* - PrimeReact's key map (`{ b: { checked: true, partialChecked: false } }`), whose `checked` entries are
|
|
19
|
+
* selected. A `partialChecked` entry is derived state, not a selection, so it is ignored: the control
|
|
20
|
+
* computes it from the selected descendants.
|
|
21
|
+
*
|
|
22
|
+
* Numeric keys are matched as the strings the tree builds from them.
|
|
23
|
+
*
|
|
24
|
+
* @param value The authored selection.
|
|
25
|
+
*/ function selectionKeysOf(value) {
|
|
26
|
+
if (Array.isArray(value)) return new Set(value.flatMap((entry)=>nodeKeyOf(entry) ?? []));
|
|
27
|
+
const single = nodeKeyOf(value);
|
|
28
|
+
if (single !== undefined) return new Set([
|
|
29
|
+
single
|
|
30
|
+
]);
|
|
31
|
+
if (typeof value === 'object' && value !== null && keyOf(value.key) === undefined) {
|
|
32
|
+
return new Set(Object.entries(value).filter(([, state])=>state?.checked === true).map(([key])=>key));
|
|
33
|
+
}
|
|
34
|
+
return new Set();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { selectionKeysOf };
|
|
38
|
+
//# sourceMappingURL=selectionKeysOf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectionKeysOf.js","sources":["../../../data/selectionKeysOf.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 keys of one node, whichever of the shapes a selection may use. */\nfunction keyOf(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 nodeKeyOf(value: unknown): string | undefined {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return keyOf(value);\n return keyOf((value as { key?: unknown }).key);\n}\n\n/**\n * Reads the keys an authored `selection` selects.\n *\n * Every shape a legacy document may hold is accepted, and none is rewritten:\n * - one key, string or number (`'b'`, `6`);\n * - an array mixing keys and `{ key }` objects (`['a', 6, { key: 'c' }]`);\n * - one `{ key }` object;\n * - PrimeReact's key map (`{ b: { checked: true, partialChecked: false } }`), whose `checked` entries are\n * selected. A `partialChecked` entry is derived state, not a selection, so it is ignored: the control\n * computes it from the selected descendants.\n *\n * Numeric keys are matched as the strings the tree builds from them.\n *\n * @param value The authored selection.\n */\nexport function selectionKeysOf(value: unknown): Set<string> {\n if (Array.isArray(value)) return new Set(value.flatMap(entry => nodeKeyOf(entry) ?? []));\n const single = nodeKeyOf(value);\n if (single !== undefined) return new Set([single]);\n\n if (typeof value === 'object' && value !== null && keyOf((value as { key?: unknown }).key) === undefined) {\n return new Set(Object.entries(value).filter(([, state]) => (state as { checked?: unknown } | null)?.checked === true).map(([key]) => key));\n }\n\n return new Set();\n}\n"],"names":["keyOf","value","Number","isFinite","String","undefined","nodeKeyOf","Array","isArray","key","selectionKeysOf","Set","flatMap","entry","single","Object","entries","filter","state","checked","map"],"mappings":"AAAA;AACA;AAEA,0EACA,SAASA,KAAAA,CAAMC,KAAc,EAAA;AACzB,IAAA,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAI,OAAOA,KAAAA;IACtD,OAAO,OAAOA,UAAU,QAAA,IAAYC,MAAAA,CAAOC,QAAQ,CAACF,KAAAA,CAAAA,GAASG,OAAOH,KAAAA,CAAAA,GAASI,SAAAA;AACjF;AAEA,SAASC,UAAUL,KAAc,EAAA;IAC7B,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,IAAQM,MAAMC,OAAO,CAACP,KAAAA,CAAAA,EAAQ,OAAOD,KAAAA,CAAMC,KAAAA,CAAAA;IACtF,OAAOD,KAAAA,CAAM,KAACC,CAA4BQ,GAAG,CAAA;AACjD;AAEA;;;;;;;;;;;;;;IAeO,SAASC,eAAAA,CAAgBT,KAAc,EAAA;AAC1C,IAAA,IAAIM,KAAAA,CAAMC,OAAO,CAACP,KAAAA,CAAAA,EAAQ,OAAO,IAAIU,GAAAA,CAAIV,KAAAA,CAAMW,OAAO,CAACC,CAAAA,KAAAA,GAASP,SAAAA,CAAUO,UAAU,EAAE,CAAA,CAAA;AACtF,IAAA,MAAMC,SAASR,SAAAA,CAAUL,KAAAA,CAAAA;AACzB,IAAA,IAAIa,MAAAA,KAAWT,SAAAA,EAAW,OAAO,IAAIM,GAAAA,CAAI;AAACG,QAAAA;AAAO,KAAA,CAAA;IAEjD,IAAI,OAAOb,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,IAAQD,MAAM,KAACC,CAA4BQ,GAAG,CAAA,KAAMJ,SAAAA,EAAW;QACtG,OAAO,IAAIM,IAAII,MAAAA,CAAOC,OAAO,CAACf,KAAAA,CAAAA,CAAOgB,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAMA,OAAwCC,OAAAA,KAAY,IAAA,CAAA,CAAMC,GAAG,CAAC,CAAC,CAACX,GAAAA,CAAI,GAAKA,GAAAA,CAAAA,CAAAA;AACzI,IAAA;AAEA,IAAA,OAAO,IAAIE,GAAAA,EAAAA;AACf;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TreeNode } from '../TreeNode';
|
|
2
|
+
import { TreeTableRow } from './TreeTableRow';
|
|
3
|
+
export declare function visibleRows(nodes: TreeNode[], expanded: ReadonlySet<string>, depth?: number, parentKey?: string): TreeTableRow[];
|
|
4
|
+
export declare function expandedKeysOf(nodes: TreeNode[]): string[];
|
|
5
|
+
export declare function nodeLabel(node: TreeNode): string;
|
|
6
|
+
//# sourceMappingURL=treeTableRows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeTableRows.d.ts","sourceRoot":"","sources":["../../../data/treeTableRows.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQ9C,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,SAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAM3H;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAK1D;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
* Flattens the nodes into the rows that are visible: a node's children follow it only while it is expanded.
|
|
5
|
+
*
|
|
6
|
+
* @param nodes The sibling nodes to flatten.
|
|
7
|
+
* @param expanded The keys of the expanded nodes.
|
|
8
|
+
*/ function visibleRows(nodes, expanded, depth = 0, parentKey) {
|
|
9
|
+
return nodes.flatMap((node, index)=>{
|
|
10
|
+
const key = node.key ?? '';
|
|
11
|
+
const row = {
|
|
12
|
+
node,
|
|
13
|
+
key,
|
|
14
|
+
depth,
|
|
15
|
+
parentKey,
|
|
16
|
+
position: index + 1,
|
|
17
|
+
siblings: nodes.length
|
|
18
|
+
};
|
|
19
|
+
return [
|
|
20
|
+
row,
|
|
21
|
+
...node.children !== undefined && expanded.has(key) ? visibleRows(node.children, expanded, depth + 1, key) : []
|
|
22
|
+
];
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** The keys of the nodes authored as expanded, at any depth, in tree order. */ function expandedKeysOf(nodes) {
|
|
26
|
+
return nodes.flatMap((node)=>[
|
|
27
|
+
...node.expanded === true && node.key !== undefined ? [
|
|
28
|
+
node.key
|
|
29
|
+
] : [],
|
|
30
|
+
...expandedKeysOf(node.children ?? [])
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
/** A node's own text for naming it: its label, else its key. */ function nodeLabel(node) {
|
|
34
|
+
return node.label ?? node.key ?? '';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { expandedKeysOf, nodeLabel, visibleRows };
|
|
38
|
+
//# sourceMappingURL=treeTableRows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeTableRows.js","sources":["../../../data/treeTableRows.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 { TreeTableRow } from './TreeTableRow';\n\n/**\n * Flattens the nodes into the rows that are visible: a node's children follow it only while it is expanded.\n *\n * @param nodes The sibling nodes to flatten.\n * @param expanded The keys of the expanded nodes.\n */\nexport function visibleRows(nodes: TreeNode[], expanded: ReadonlySet<string>, depth = 0, parentKey?: string): TreeTableRow[] {\n return nodes.flatMap((node, index) => {\n const key = node.key ?? '';\n const row: TreeTableRow = { node, key, depth, parentKey, position: index + 1, siblings: nodes.length };\n return [row, ...(node.children !== undefined && expanded.has(key) ? visibleRows(node.children, expanded, depth + 1, key) : [])];\n });\n}\n\n/** The keys of the nodes authored as expanded, at any depth, in tree order. */\nexport function expandedKeysOf(nodes: TreeNode[]): string[] {\n return nodes.flatMap(node => [\n ...(node.expanded === true && node.key !== undefined ? [node.key] : []),\n ...expandedKeysOf(node.children ?? []),\n ]);\n}\n\n/** A node's own text for naming it: its label, else its key. */\nexport function nodeLabel(node: TreeNode): string {\n return node.label ?? node.key ?? '';\n}\n"],"names":["visibleRows","nodes","expanded","depth","parentKey","flatMap","node","index","key","row","position","siblings","length","children","undefined","has","expandedKeysOf","nodeLabel","label"],"mappings":"AAAA;AACA;AAKA;;;;;IAMO,SAASA,WAAAA,CAAYC,KAAiB,EAAEC,QAA6B,EAAEC,KAAAA,GAAQ,CAAC,EAAEC,SAAkB,EAAA;AACvG,IAAA,OAAOH,KAAAA,CAAMI,OAAO,CAAC,CAACC,IAAAA,EAAMC,KAAAA,GAAAA;QACxB,MAAMC,GAAAA,GAAMF,IAAAA,CAAKE,GAAG,IAAI,EAAA;AACxB,QAAA,MAAMC,GAAAA,GAAoB;AAAEH,YAAAA,IAAAA;AAAME,YAAAA,GAAAA;AAAKL,YAAAA,KAAAA;AAAOC,YAAAA,SAAAA;AAAWM,YAAAA,QAAAA,EAAUH,KAAAA,GAAQ,CAAA;AAAGI,YAAAA,QAAAA,EAAUV,MAAMW;AAAO,SAAA;QACrG,OAAO;AAACH,YAAAA,GAAAA;AAASH,YAAAA,GAAAA,IAAAA,CAAKO,QAAQ,KAAKC,SAAAA,IAAaZ,QAAAA,CAASa,GAAG,CAACP,GAAAA,CAAAA,GAAOR,WAAAA,CAAYM,IAAAA,CAAKO,QAAQ,EAAEX,QAAAA,EAAUC,KAAAA,GAAQ,CAAA,EAAGK,OAAO;AAAI,SAAA;AACnI,IAAA,CAAA,CAAA;AACJ;AAEA,gFACO,SAASQ,cAAAA,CAAef,KAAiB,EAAA;AAC5C,IAAA,OAAOA,KAAAA,CAAMI,OAAO,CAACC,CAAAA,IAAAA,GAAQ;AACrBA,YAAAA,GAAAA,IAAAA,CAAKJ,QAAQ,KAAK,IAAA,IAAQI,IAAAA,CAAKE,GAAG,KAAKM,SAAAA,GAAY;AAACR,gBAAAA,IAAAA,CAAKE;AAAI,aAAA,GAAG,EAAE;eACnEQ,cAAAA,CAAeV,IAAAA,CAAKO,QAAQ,IAAI,EAAE;AACxC,SAAA,CAAA;AACL;AAEA,iEACO,SAASI,SAAAA,CAAUX,IAAc,EAAA;AACpC,IAAA,OAAOA,IAAAA,CAAKY,KAAK,IAAIZ,IAAAA,CAAKE,GAAG,IAAI,EAAA;AACrC;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIncrementalLoad.d.ts","sourceRoot":"","sources":["../../../data/useIncrementalLoad.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAE5B,MAAM,EAAE,MAAM,CAAC;IAGf,QAAQ,IAAI,IAAI,CAAC;CACpB;AAaD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,eAAe,CAUnG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
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
|
+
* Tracks how many entries of a list are loaded, a chunk at a time.
|
|
7
|
+
*
|
|
8
|
+
* The count follows the authored properties: it starts over at one chunk when the chunk size changes or when
|
|
9
|
+
* `resetKey` does, so a document edit that replaces the items does not leave the old count behind. Pass a
|
|
10
|
+
* structurally stable `resetKey` (see `useStructuralValue`), or every render would reset it.
|
|
11
|
+
*
|
|
12
|
+
* @param total The number of entries there are.
|
|
13
|
+
* @param chunk The number of entries per load.
|
|
14
|
+
* @param resetKey Changes when the entries are replaced.
|
|
15
|
+
*/ function useIncrementalLoad(total, chunk, resetKey) {
|
|
16
|
+
const [state, setState] = useState({
|
|
17
|
+
resetKey,
|
|
18
|
+
chunk,
|
|
19
|
+
loaded: chunk
|
|
20
|
+
});
|
|
21
|
+
let loaded = state.loaded;
|
|
22
|
+
if (state.resetKey !== resetKey || state.chunk !== chunk) {
|
|
23
|
+
setState({
|
|
24
|
+
resetKey,
|
|
25
|
+
chunk,
|
|
26
|
+
loaded: chunk
|
|
27
|
+
});
|
|
28
|
+
loaded = chunk;
|
|
29
|
+
}
|
|
30
|
+
const loadMore = useCallback(()=>setState((current)=>({
|
|
31
|
+
...current,
|
|
32
|
+
loaded: Math.min(current.loaded + chunk, total)
|
|
33
|
+
})), [
|
|
34
|
+
chunk,
|
|
35
|
+
total
|
|
36
|
+
]);
|
|
37
|
+
return {
|
|
38
|
+
loaded: Math.min(loaded, total),
|
|
39
|
+
loadMore
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { useIncrementalLoad };
|
|
44
|
+
//# sourceMappingURL=useIncrementalLoad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIncrementalLoad.js","sources":["../../../data/useIncrementalLoad.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 { useCallback, useState } from 'react';\n\n/** How much of a list is loaded and how to load more. */\nexport interface IncrementalLoad {\n /** The number of entries loaded, never more than the total. */\n loaded: number;\n\n /** Loads the next chunk. */\n loadMore(): void;\n}\n\n/**\n * Tracks how many entries of a list are loaded, a chunk at a time.\n *\n * The count follows the authored properties: it starts over at one chunk when the chunk size changes or when\n * `resetKey` does, so a document edit that replaces the items does not leave the old count behind. Pass a\n * structurally stable `resetKey` (see `useStructuralValue`), or every render would reset it.\n *\n * @param total The number of entries there are.\n * @param chunk The number of entries per load.\n * @param resetKey Changes when the entries are replaced.\n */\nexport function useIncrementalLoad(total: number, chunk: number, resetKey: unknown): IncrementalLoad {\n const [state, setState] = useState({ resetKey, chunk, loaded: chunk });\n let loaded = state.loaded;\n if (state.resetKey !== resetKey || state.chunk !== chunk) {\n setState({ resetKey, chunk, loaded: chunk });\n loaded = chunk;\n }\n\n const loadMore = useCallback(() => setState(current => ({ ...current, loaded: Math.min(current.loaded + chunk, total) })), [chunk, total]);\n return { loaded: Math.min(loaded, total), loadMore };\n}\n"],"names":["useIncrementalLoad","total","chunk","resetKey","state","setState","useState","loaded","loadMore","useCallback","current","Math","min"],"mappings":";;AAAA;AACA;AAaA;;;;;;;;;;AAUC,IACM,SAASA,kBAAAA,CAAmBC,KAAa,EAAEC,KAAa,EAAEC,QAAiB,EAAA;AAC9E,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,QAAAA,CAAS;AAAEH,QAAAA,QAAAA;AAAUD,QAAAA,KAAAA;QAAOK,MAAAA,EAAQL;AAAM,KAAA,CAAA;IACpE,IAAIK,MAAAA,GAASH,MAAMG,MAAM;AACzB,IAAA,IAAIH,MAAMD,QAAQ,KAAKA,YAAYC,KAAAA,CAAMF,KAAK,KAAKA,KAAAA,EAAO;QACtDG,QAAAA,CAAS;AAAEF,YAAAA,QAAAA;AAAUD,YAAAA,KAAAA;YAAOK,MAAAA,EAAQL;AAAM,SAAA,CAAA;QAC1CK,MAAAA,GAASL,KAAAA;AACb,IAAA;AAEA,IAAA,MAAMM,WAAWC,WAAAA,CAAY,IAAMJ,QAAAA,CAASK,CAAAA,WAAY;AAAE,gBAAA,GAAGA,OAAO;AAAEH,gBAAAA,MAAAA,EAAQI,KAAKC,GAAG,CAACF,OAAAA,CAAQH,MAAM,GAAGL,KAAAA,EAAOD,KAAAA;AAAO,aAAA,CAAA,CAAA,EAAK;AAACC,QAAAA,KAAAA;AAAOD,QAAAA;AAAM,KAAA,CAAA;IACzI,OAAO;QAAEM,MAAAA,EAAQI,IAAAA,CAAKC,GAAG,CAACL,MAAAA,EAAQN,KAAAA,CAAAA;AAAQO,QAAAA;AAAS,KAAA;AACvD;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoadOnReach.d.ts","sourceRoot":"","sources":["../../../data/useLoadOnReach.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAgB7C,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAWjL"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
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
|
+
* Calls `onReach` while the sentinel is visible, which is what scrolling to the end of a list means.
|
|
7
|
+
*
|
|
8
|
+
* The observer is rebuilt whenever `revision` changes, so a sentinel that is still visible after a chunk was
|
|
9
|
+
* loaded loads the next one, until the viewport is filled or the list ends. `root` is the element that
|
|
10
|
+
* scrolls for an inline list; `null` observes the page's own viewport. Where there is no
|
|
11
|
+
* `IntersectionObserver` nothing is observed and the list's own button remains the way to load more.
|
|
12
|
+
*
|
|
13
|
+
* @param sentinel The element placed after the last loaded entry.
|
|
14
|
+
* @param root The scrolling container, or `null` for the page.
|
|
15
|
+
* @param active Whether reaching the end should load anything.
|
|
16
|
+
* @param revision A value that changes each time the list changed.
|
|
17
|
+
* @param onReach Loads the next chunk.
|
|
18
|
+
*/ function useLoadOnReach(sentinel, root, active, revision, onReach) {
|
|
19
|
+
useEffect(()=>{
|
|
20
|
+
const target = sentinel.current;
|
|
21
|
+
if (!active || target === null || typeof IntersectionObserver === 'undefined') return undefined;
|
|
22
|
+
const observer = new IntersectionObserver((entries)=>{
|
|
23
|
+
if (entries.some((entry)=>entry.isIntersecting)) onReach();
|
|
24
|
+
}, {
|
|
25
|
+
root: root?.current ?? null,
|
|
26
|
+
rootMargin: '0px 0px 48px 0px'
|
|
27
|
+
});
|
|
28
|
+
observer.observe(target);
|
|
29
|
+
return ()=>observer.disconnect();
|
|
30
|
+
}, [
|
|
31
|
+
sentinel,
|
|
32
|
+
root,
|
|
33
|
+
active,
|
|
34
|
+
revision,
|
|
35
|
+
onReach
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { useLoadOnReach };
|
|
40
|
+
//# sourceMappingURL=useLoadOnReach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoadOnReach.js","sources":["../../../data/useLoadOnReach.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 { RefObject, useEffect } from 'react';\n\n/**\n * Calls `onReach` while the sentinel is visible, which is what scrolling to the end of a list means.\n *\n * The observer is rebuilt whenever `revision` changes, so a sentinel that is still visible after a chunk was\n * loaded loads the next one, until the viewport is filled or the list ends. `root` is the element that\n * scrolls for an inline list; `null` observes the page's own viewport. Where there is no\n * `IntersectionObserver` nothing is observed and the list's own button remains the way to load more.\n *\n * @param sentinel The element placed after the last loaded entry.\n * @param root The scrolling container, or `null` for the page.\n * @param active Whether reaching the end should load anything.\n * @param revision A value that changes each time the list changed.\n * @param onReach Loads the next chunk.\n */\nexport function useLoadOnReach(sentinel: RefObject<HTMLElement | null>, root: RefObject<HTMLElement | null> | null, active: boolean, revision: unknown, onReach: () => void): void {\n useEffect(() => {\n const target = sentinel.current;\n if (!active || target === null || typeof IntersectionObserver === 'undefined') return undefined;\n\n const observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) onReach();\n }, { root: root?.current ?? null, rootMargin: '0px 0px 48px 0px' });\n observer.observe(target);\n return () => observer.disconnect();\n }, [sentinel, root, active, revision, onReach]);\n}\n"],"names":["useLoadOnReach","sentinel","root","active","revision","onReach","useEffect","target","current","IntersectionObserver","undefined","observer","entries","some","entry","isIntersecting","rootMargin","observe","disconnect"],"mappings":";;AAAA;AACA;AAIA;;;;;;;;;;;;;IAcO,SAASA,cAAAA,CAAeC,QAAuC,EAAEC,IAA0C,EAAEC,MAAe,EAAEC,QAAiB,EAAEC,OAAmB,EAAA;IACvKC,SAAAA,CAAU,IAAA;QACN,MAAMC,MAAAA,GAASN,SAASO,OAAO;AAC/B,QAAA,IAAI,CAACL,MAAAA,IAAUI,MAAAA,KAAW,QAAQ,OAAOE,oBAAAA,KAAyB,aAAa,OAAOC,SAAAA;QAEtF,MAAMC,QAAAA,GAAW,IAAIF,oBAAAA,CAAqBG,CAAAA,OAAAA,GAAAA;AACtC,YAAA,IAAIA,QAAQC,IAAI,CAACC,CAAAA,KAAAA,GAASA,KAAAA,CAAMC,cAAc,CAAA,EAAGV,OAAAA,EAAAA;QACrD,CAAA,EAAG;AAAEH,YAAAA,IAAAA,EAAMA,MAAMM,OAAAA,IAAW,IAAA;YAAMQ,UAAAA,EAAY;AAAmB,SAAA,CAAA;AACjEL,QAAAA,QAAAA,CAASM,OAAO,CAACV,MAAAA,CAAAA;QACjB,OAAO,IAAMI,SAASO,UAAU,EAAA;IACpC,CAAA,EAAG;AAACjB,QAAAA,QAAAA;AAAUC,QAAAA,IAAAA;AAAMC,QAAAA,MAAAA;AAAQC,QAAAA,QAAAA;AAAUC,QAAAA;AAAQ,KAAA,CAAA;AAClD;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { KeyboardEvent } from 'react';
|
|
2
|
+
import { TreeTableRow } from './TreeTableRow';
|
|
3
|
+
export interface TreeGridNavigationOptions {
|
|
4
|
+
rows: TreeTableRow[];
|
|
5
|
+
expanded: ReadonlySet<string>;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
toggle(key: string): void;
|
|
8
|
+
select(row: TreeTableRow): void;
|
|
9
|
+
}
|
|
10
|
+
export interface TreeGridNavigation {
|
|
11
|
+
tabStopKey: string | undefined;
|
|
12
|
+
register(key: string, element: HTMLElement | null): void;
|
|
13
|
+
activate(key: string): void;
|
|
14
|
+
onKeyDown(row: TreeTableRow, event: KeyboardEvent<HTMLElement>): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function useTreeGridNavigation({ rows, expanded, enabled, toggle, select }: TreeGridNavigationOptions): TreeGridNavigation;
|
|
17
|
+
//# sourceMappingURL=useTreeGridNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeGridNavigation.d.ts","sourceRoot":"","sources":["../../../data/useTreeGridNavigation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAiC,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,yBAAyB;IACtC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAGD,MAAM,WAAW,kBAAkB;IAE/B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAG/B,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAGzD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACzE;AASD,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,yBAAyB,GAAG,kBAAkB,CA2ChI"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { useState, useRef, useCallback } from 'react';
|
|
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
|
+
* The keyboard model of an ARIA tree grid, with a roving tab index.
|
|
7
|
+
*
|
|
8
|
+
* Up and Down move between visible rows, Home and End to the first and last, Right expands a collapsed row or
|
|
9
|
+
* enters its first child, Left collapses an expanded row or goes to its parent, and Space or Enter selects.
|
|
10
|
+
* Keys pressed on a control inside the row (its expand button or checkbox) are left to that control.
|
|
11
|
+
*/ function useTreeGridNavigation({ rows, expanded, enabled, toggle, select }) {
|
|
12
|
+
const [activeKey, setActiveKey] = useState(undefined);
|
|
13
|
+
const elements = useRef(new Map());
|
|
14
|
+
const tabStopKey = rows.some((row)=>row.key === activeKey) ? activeKey : rows[0]?.key;
|
|
15
|
+
const register = useCallback((key, element)=>{
|
|
16
|
+
if (element === null) elements.current.delete(key);
|
|
17
|
+
else elements.current.set(key, element);
|
|
18
|
+
}, []);
|
|
19
|
+
const moveTo = (row)=>{
|
|
20
|
+
if (row === undefined) return;
|
|
21
|
+
setActiveKey(row.key);
|
|
22
|
+
elements.current.get(row.key)?.focus();
|
|
23
|
+
};
|
|
24
|
+
const onKeyDown = (row, event)=>{
|
|
25
|
+
if (event.target !== event.currentTarget) return;
|
|
26
|
+
const index = rows.indexOf(row);
|
|
27
|
+
const hasChildren = (row.node.children?.length ?? 0) > 0;
|
|
28
|
+
const handled = (action)=>{
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
action();
|
|
31
|
+
};
|
|
32
|
+
switch(event.key){
|
|
33
|
+
case 'ArrowDown':
|
|
34
|
+
handled(()=>moveTo(rows[index + 1]));
|
|
35
|
+
break;
|
|
36
|
+
case 'ArrowUp':
|
|
37
|
+
handled(()=>moveTo(rows[index - 1]));
|
|
38
|
+
break;
|
|
39
|
+
case 'Home':
|
|
40
|
+
handled(()=>moveTo(rows[0]));
|
|
41
|
+
break;
|
|
42
|
+
case 'End':
|
|
43
|
+
handled(()=>moveTo(rows[rows.length - 1]));
|
|
44
|
+
break;
|
|
45
|
+
case 'ArrowRight':
|
|
46
|
+
if (hasChildren) handled(()=>{
|
|
47
|
+
if (!expanded.has(row.key)) {
|
|
48
|
+
if (enabled) toggle(row.key);
|
|
49
|
+
} else moveTo(rows[index + 1]);
|
|
50
|
+
});
|
|
51
|
+
break;
|
|
52
|
+
case 'ArrowLeft':
|
|
53
|
+
if (hasChildren && expanded.has(row.key)) handled(()=>{
|
|
54
|
+
if (enabled) toggle(row.key);
|
|
55
|
+
});
|
|
56
|
+
else if (row.parentKey !== undefined) handled(()=>moveTo(rows.find((candidate)=>candidate.key === row.parentKey)));
|
|
57
|
+
break;
|
|
58
|
+
case ' ':
|
|
59
|
+
case 'Enter':
|
|
60
|
+
handled(()=>select(row));
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
tabStopKey,
|
|
66
|
+
register,
|
|
67
|
+
activate: setActiveKey,
|
|
68
|
+
onKeyDown
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { useTreeGridNavigation };
|
|
73
|
+
//# sourceMappingURL=useTreeGridNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeGridNavigation.js","sources":["../../../data/useTreeGridNavigation.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 { KeyboardEvent, useCallback, useRef, useState } from 'react';\nimport { TreeTableRow } from './TreeTableRow';\n\n/** What the keyboard navigation of a tree grid needs from the control. */\nexport interface TreeGridNavigationOptions {\n rows: TreeTableRow[];\n expanded: ReadonlySet<string>;\n enabled: boolean;\n toggle(key: string): void;\n select(row: TreeTableRow): void;\n}\n\n/** The wiring a tree grid applies to its rows. */\nexport interface TreeGridNavigation {\n /** The one row that is in the tab order (roving tabindex). */\n tabStopKey: string | undefined;\n\n /** Gives the navigation the element of a row, so it can move focus there. */\n register(key: string, element: HTMLElement | null): void;\n\n /** Makes a row the tab stop, as a click does. */\n activate(key: string): void;\n\n /** The key handler of a row. */\n onKeyDown(row: TreeTableRow, event: KeyboardEvent<HTMLElement>): void;\n}\n\n/**\n * The keyboard model of an ARIA tree grid, with a roving tab index.\n *\n * Up and Down move between visible rows, Home and End to the first and last, Right expands a collapsed row or\n * enters its first child, Left collapses an expanded row or goes to its parent, and Space or Enter selects.\n * Keys pressed on a control inside the row (its expand button or checkbox) are left to that control.\n */\nexport function useTreeGridNavigation({ rows, expanded, enabled, toggle, select }: TreeGridNavigationOptions): TreeGridNavigation {\n const [activeKey, setActiveKey] = useState<string | undefined>(undefined);\n const elements = useRef(new Map<string, HTMLElement>());\n const tabStopKey = rows.some(row => row.key === activeKey) ? activeKey : rows[0]?.key;\n\n const register = useCallback((key: string, element: HTMLElement | null) => {\n if (element === null) elements.current.delete(key); else elements.current.set(key, element);\n }, []);\n\n const moveTo = (row: TreeTableRow | undefined) => {\n if (row === undefined) return;\n setActiveKey(row.key);\n elements.current.get(row.key)?.focus();\n };\n\n const onKeyDown = (row: TreeTableRow, event: KeyboardEvent<HTMLElement>) => {\n if (event.target !== event.currentTarget) return;\n const index = rows.indexOf(row);\n const hasChildren = (row.node.children?.length ?? 0) > 0;\n const handled = (action: () => void) => { event.preventDefault(); action(); };\n\n switch (event.key) {\n case 'ArrowDown': handled(() => moveTo(rows[index + 1])); break;\n case 'ArrowUp': handled(() => moveTo(rows[index - 1])); break;\n case 'Home': handled(() => moveTo(rows[0])); break;\n case 'End': handled(() => moveTo(rows[rows.length - 1])); break;\n case 'ArrowRight':\n if (hasChildren) handled(() => { if (!expanded.has(row.key)) { if (enabled) toggle(row.key); } else moveTo(rows[index + 1]); });\n break;\n case 'ArrowLeft':\n if (hasChildren && expanded.has(row.key)) handled(() => { if (enabled) toggle(row.key); });\n else if (row.parentKey !== undefined) handled(() => moveTo(rows.find(candidate => candidate.key === row.parentKey)));\n break;\n case ' ':\n case 'Enter':\n handled(() => select(row));\n break;\n default:\n break;\n }\n };\n\n return { tabStopKey, register, activate: setActiveKey, onKeyDown };\n}\n"],"names":["useTreeGridNavigation","rows","expanded","enabled","toggle","select","activeKey","setActiveKey","useState","undefined","elements","useRef","Map","tabStopKey","some","row","key","register","useCallback","element","current","delete","set","moveTo","get","focus","onKeyDown","event","target","currentTarget","index","indexOf","hasChildren","node","children","length","handled","action","preventDefault","has","parentKey","find","candidate","activate"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrimeEditor.d.ts","sourceRoot":"","sources":["../../../editor/PrimeEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAwB/D,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,wBAAwB,+BAsD9E"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useContext, useRef, useState, useEffect, useMemo } from 'react';
|
|
3
|
+
import { stringProperty, booleanProperty } from '../properties.js';
|
|
4
|
+
import { QuillLoaderContext } from './QuillLoaderContext.js';
|
|
5
|
+
import { htmlToPlainText } from './htmlToPlainText.js';
|
|
6
|
+
import { renderSafeNodes } from './renderSafeNodes.js';
|
|
7
|
+
import { sanitizeHtml } from './sanitizeHtml.js';
|
|
8
|
+
import { useQuillEditor } from './useQuillEditor.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The `PrimeReact:editor` rich-text control.
|
|
12
|
+
*
|
|
13
|
+
* Authored HTML is untrusted data and is never injected as markup. Everywhere it is shown it first goes
|
|
14
|
+
* through an allowlist (see {@link sanitizeHtml}): into Quill as a Delta, or into the read-only view as React
|
|
15
|
+
* elements. Where there is no DOM - server rendering, and the first client render so hydration matches - it is
|
|
16
|
+
* shown as plain text. `element.properties.value` itself is never changed.
|
|
17
|
+
*
|
|
18
|
+
* Editing needs Quill, which this package does not import. A host provides it with `QuillLoaderProvider`
|
|
19
|
+
* (the loader `loadQuill` lives in the `@cratis/scene.primereact/quill` entry point). Without a loader, or if
|
|
20
|
+
* loading fails, the content stays visible read-only and a status says why; the control never pretends to be
|
|
21
|
+
* editable.
|
|
22
|
+
*
|
|
23
|
+
* `readOnly: true` and `isEnabled: false` both stop editing. Edits are runtime state: `interactions.onChange`
|
|
24
|
+
* is called when the user edits, but the new HTML is not written back to the document or a binding.
|
|
25
|
+
*/ function PrimeEditor({ element, interactions }) {
|
|
26
|
+
const loader = useContext(QuillLoaderContext);
|
|
27
|
+
const host = useRef(null);
|
|
28
|
+
const interactionReference = useRef(interactions);
|
|
29
|
+
interactionReference.current = interactions;
|
|
30
|
+
const [mounted, setMounted] = useState(false);
|
|
31
|
+
const html = stringProperty(element, 'value', '');
|
|
32
|
+
const readOnly = booleanProperty(element, 'readOnly', false);
|
|
33
|
+
const editable = !readOnly && element.isEnabled;
|
|
34
|
+
const ariaLabel = stringProperty(element, 'ariaLabel', 'Rich text editor');
|
|
35
|
+
useEffect(()=>setMounted(true), []);
|
|
36
|
+
const editor = useQuillEditor({
|
|
37
|
+
loader,
|
|
38
|
+
host,
|
|
39
|
+
html,
|
|
40
|
+
showHeader: booleanProperty(element, 'showHeader', true),
|
|
41
|
+
editable,
|
|
42
|
+
placeholder: stringProperty(element, 'placeholder'),
|
|
43
|
+
ariaLabel,
|
|
44
|
+
onUserChange: ()=>interactionReference.current?.onChange?.()
|
|
45
|
+
});
|
|
46
|
+
const readOnlyView = useMemo(()=>{
|
|
47
|
+
if (!mounted || typeof DOMParser === 'undefined') return htmlToPlainText(html);
|
|
48
|
+
return renderSafeNodes(sanitizeHtml(html));
|
|
49
|
+
}, [
|
|
50
|
+
mounted,
|
|
51
|
+
html
|
|
52
|
+
]);
|
|
53
|
+
const status = !editor.ready ? undefined : editable ? `${editor.characters} characters` : readOnly ? 'Read only' : 'Disabled';
|
|
54
|
+
return /*#__PURE__*/ jsxs("section", {
|
|
55
|
+
"data-scene-id": element.id,
|
|
56
|
+
"data-scene-component": "editor",
|
|
57
|
+
onClick: interactions?.onClick,
|
|
58
|
+
onDoubleClick: interactions?.onDoubleClick,
|
|
59
|
+
children: [
|
|
60
|
+
/*#__PURE__*/ jsx("div", {
|
|
61
|
+
ref: host
|
|
62
|
+
}),
|
|
63
|
+
!editor.ready && /*#__PURE__*/ jsx("div", {
|
|
64
|
+
role: "textbox",
|
|
65
|
+
tabIndex: 0,
|
|
66
|
+
"aria-multiline": "true",
|
|
67
|
+
"aria-readonly": "true",
|
|
68
|
+
"aria-label": ariaLabel,
|
|
69
|
+
"data-scene-part": "read-only-content",
|
|
70
|
+
style: typeof readOnlyView === 'string' ? {
|
|
71
|
+
whiteSpace: 'pre-wrap'
|
|
72
|
+
} : undefined,
|
|
73
|
+
children: readOnlyView
|
|
74
|
+
}, typeof readOnlyView),
|
|
75
|
+
editor.failure !== undefined && /*#__PURE__*/ jsx("p", {
|
|
76
|
+
role: "alert",
|
|
77
|
+
"data-scene-state": "unavailable",
|
|
78
|
+
children: `Rich-text editing could not be loaded: ${editor.failure}`
|
|
79
|
+
}),
|
|
80
|
+
!editor.ready && editor.failure === undefined && loader === undefined && /*#__PURE__*/ jsx("p", {
|
|
81
|
+
role: "status",
|
|
82
|
+
"data-scene-state": "read-only",
|
|
83
|
+
children: "Rich-text editing is not available in this application. The content is shown read-only."
|
|
84
|
+
}),
|
|
85
|
+
status !== undefined && /*#__PURE__*/ jsx("output", {
|
|
86
|
+
"aria-live": "polite",
|
|
87
|
+
children: status
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { PrimeEditor };
|
|
94
|
+
//# sourceMappingURL=PrimeEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrimeEditor.js","sources":["../../../editor/PrimeEditor.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 { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { booleanProperty, stringProperty } from '../properties';\nimport { QuillLoaderContext } from './QuillLoaderContext';\nimport { htmlToPlainText } from './htmlToPlainText';\nimport { renderSafeNodes } from './renderSafeNodes';\nimport { sanitizeHtml } from './sanitizeHtml';\nimport { useQuillEditor } from './useQuillEditor';\n\n/**\n * The `PrimeReact:editor` rich-text control.\n *\n * Authored HTML is untrusted data and is never injected as markup. Everywhere it is shown it first goes\n * through an allowlist (see {@link sanitizeHtml}): into Quill as a Delta, or into the read-only view as React\n * elements. Where there is no DOM - server rendering, and the first client render so hydration matches - it is\n * shown as plain text. `element.properties.value` itself is never changed.\n *\n * Editing needs Quill, which this package does not import. A host provides it with `QuillLoaderProvider`\n * (the loader `loadQuill` lives in the `@cratis/scene.primereact/quill` entry point). Without a loader, or if\n * loading fails, the content stays visible read-only and a status says why; the control never pretends to be\n * editable.\n *\n * `readOnly: true` and `isEnabled: false` both stop editing. Edits are runtime state: `interactions.onChange`\n * is called when the user edits, but the new HTML is not written back to the document or a binding.\n */\nexport function PrimeEditor({ element, interactions }: RegisteredComponentProps) {\n const loader = useContext(QuillLoaderContext);\n const host = useRef<HTMLDivElement>(null);\n const interactionReference = useRef(interactions);\n interactionReference.current = interactions;\n const [mounted, setMounted] = useState(false);\n const html = stringProperty(element, 'value', '');\n const readOnly = booleanProperty(element, 'readOnly', false);\n const editable = !readOnly && element.isEnabled;\n const ariaLabel = stringProperty(element, 'ariaLabel', 'Rich text editor');\n\n useEffect(() => setMounted(true), []);\n\n const editor = useQuillEditor({\n loader,\n host,\n html,\n showHeader: booleanProperty(element, 'showHeader', true),\n editable,\n placeholder: stringProperty(element, 'placeholder'),\n ariaLabel,\n onUserChange: () => interactionReference.current?.onChange?.(),\n });\n\n const readOnlyView = useMemo(() => {\n if (!mounted || typeof DOMParser === 'undefined') return htmlToPlainText(html);\n return renderSafeNodes(sanitizeHtml(html));\n }, [mounted, html]);\n\n const status = !editor.ready ? undefined : editable ? `${editor.characters} characters` : readOnly ? 'Read only' : 'Disabled';\n\n return (\n <section data-scene-id={element.id} data-scene-component='editor' onClick={interactions?.onClick} onDoubleClick={interactions?.onDoubleClick}>\n <div ref={host} />\n {!editor.ready && (\n <div\n key={typeof readOnlyView}\n role='textbox'\n tabIndex={0}\n aria-multiline='true'\n aria-readonly='true'\n aria-label={ariaLabel}\n data-scene-part='read-only-content'\n style={typeof readOnlyView === 'string' ? { whiteSpace: 'pre-wrap' } : undefined}>\n {readOnlyView}\n </div>\n )}\n {editor.failure !== undefined && <p role='alert' data-scene-state='unavailable'>{`Rich-text editing could not be loaded: ${editor.failure}`}</p>}\n {!editor.ready && editor.failure === undefined && loader === undefined && (\n <p role='status' data-scene-state='read-only'>Rich-text editing is not available in this application. The content is shown read-only.</p>\n )}\n {status !== undefined && <output aria-live='polite'>{status}</output>}\n </section>\n );\n}\n"],"names":["PrimeEditor","element","interactions","loader","useContext","QuillLoaderContext","host","useRef","interactionReference","current","mounted","setMounted","useState","html","stringProperty","readOnly","booleanProperty","editable","isEnabled","ariaLabel","useEffect","editor","useQuillEditor","showHeader","placeholder","onUserChange","onChange","readOnlyView","useMemo","DOMParser","htmlToPlainText","renderSafeNodes","sanitizeHtml","status","ready","undefined","characters","_jsxs","section","data-scene-id","id","data-scene-component","onClick","onDoubleClick","_jsx","div","ref","role","tabIndex","aria-multiline","aria-readonly","aria-label","data-scene-part","style","whiteSpace","failure","p","data-scene-state","output","aria-live"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuillConstructor.d.ts","sourceRoot":"","sources":["../../../editor/QuillConstructor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,MAAM,gBAAgB,GAAG,KAAK,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,KAAK,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuillConstructor.js","sourceRoot":"","sources":["../../../editor/QuillConstructor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { QuillLoader } from './QuillLoader';
|
|
3
|
+
export interface QuillEditorOptions {
|
|
4
|
+
loader: QuillLoader | undefined;
|
|
5
|
+
host: RefObject<HTMLElement | null>;
|
|
6
|
+
html: string;
|
|
7
|
+
showHeader: boolean;
|
|
8
|
+
editable: boolean;
|
|
9
|
+
placeholder: string | undefined;
|
|
10
|
+
ariaLabel: string;
|
|
11
|
+
onUserChange(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=QuillEditorOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuillEditorOptions.d.ts","sourceRoot":"","sources":["../../../editor/QuillEditorOptions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,WAAW,kBAAkB;IAE/B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAGhC,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAGpC,IAAI,EAAE,MAAM,CAAC;IAGb,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,EAAE,OAAO,CAAC;IAElB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY,IAAI,IAAI,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuillEditorOptions.js","sourceRoot":"","sources":["../../../editor/QuillEditorOptions.ts"],"names":[],"mappings":""}
|