@plaudit/gutenberg-api-extensions 2.79.0 → 2.80.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/dist/blocks/MoveError.js +10 -0
- package/dist/blocks/MoveError.js.map +1 -0
- package/{build → dist}/blocks/PathError.js +7 -3
- package/dist/blocks/PathError.js.map +1 -0
- package/{build → dist}/blocks/SNPFlexibleItemsListComponent.d.ts +1 -1
- package/dist/blocks/SNPFlexibleItemsListComponent.js +18 -0
- package/dist/blocks/SNPFlexibleItemsListComponent.js.map +1 -0
- package/{build → dist}/blocks/SNPGroupComponent.d.ts +2 -2
- package/dist/blocks/SNPGroupComponent.js +20 -0
- package/dist/blocks/SNPGroupComponent.js.map +1 -0
- package/{build → dist}/blocks/SNPListComponent.d.ts +1 -1
- package/dist/blocks/SNPListComponent.js +18 -0
- package/dist/blocks/SNPListComponent.js.map +1 -0
- package/dist/blocks/SNPTreeContext.js +14 -0
- package/dist/blocks/SNPTreeContext.js.map +1 -0
- package/dist/blocks/basic-custom-block-bindings-support.js +157 -0
- package/dist/blocks/basic-custom-block-bindings-support.js.map +1 -0
- package/dist/blocks/common-native-property-constructors.d.ts +13 -0
- package/{build → dist}/blocks/common-native-property-constructors.js +105 -151
- package/dist/blocks/common-native-property-constructors.js.map +1 -0
- package/{build → dist}/blocks/conditions.js +12 -7
- package/dist/blocks/conditions.js.map +1 -0
- package/dist/blocks/csnp-api.d.ts +166 -0
- package/dist/blocks/csnp-api.js +74 -0
- package/dist/blocks/csnp-api.js.map +1 -0
- package/{build → dist}/blocks/data-controller-manager.js +4 -1
- package/dist/blocks/data-controller-manager.js.map +1 -0
- package/{build → dist}/blocks/data-controller.js +74 -70
- package/dist/blocks/data-controller.js.map +1 -0
- package/{build → dist}/blocks/hooks/built-in-suspendable-option-protocols/select.js +14 -11
- package/dist/blocks/hooks/built-in-suspendable-option-protocols/select.js.map +1 -0
- package/{build → dist}/blocks/hooks/built-in-suspendable-option-protocols/settings.js +9 -6
- package/dist/blocks/hooks/built-in-suspendable-option-protocols/settings.js.map +1 -0
- package/{build → dist}/blocks/hooks/useSuspendableOptions.d.ts +1 -1
- package/{build → dist}/blocks/hooks/useSuspendableOptions.js +30 -23
- package/dist/blocks/hooks/useSuspendableOptions.js.map +1 -0
- package/dist/blocks/index.js +35 -0
- package/dist/blocks/index.js.map +1 -0
- package/{build → dist}/blocks/layered-styles-api.d.ts +2 -2
- package/{build → dist}/blocks/layered-styles-api.js +10 -6
- package/dist/blocks/layered-styles-api.js.map +1 -0
- package/{build → dist}/blocks/layered-styles-impl.js +14 -9
- package/dist/blocks/layered-styles-impl.js.map +1 -0
- package/{build → dist}/blocks/layout/LaidOutProperty.d.ts +1 -2
- package/dist/blocks/layout/LaidOutProperty.js +47 -0
- package/dist/blocks/layout/LaidOutProperty.js.map +1 -0
- package/dist/blocks/layout/LaidOutPropertyRow.js +15 -0
- package/dist/blocks/layout/LaidOutPropertyRow.js.map +1 -0
- package/{build → dist}/blocks/layout/NodeContext.d.ts +2 -2
- package/dist/blocks/layout/NodeContext.js +44 -0
- package/dist/blocks/layout/NodeContext.js.map +1 -0
- package/dist/blocks/layout/PanelRoot.js +29 -0
- package/dist/blocks/layout/PanelRoot.js.map +1 -0
- package/{build → dist}/blocks/layout/TabsRoot.js +16 -13
- package/dist/blocks/layout/TabsRoot.js.map +1 -0
- package/dist/blocks/layout/ToolsPanelContext.js +23 -0
- package/dist/blocks/layout/ToolsPanelContext.js.map +1 -0
- package/dist/blocks/shared-exportable-types.js +3 -0
- package/dist/blocks/shared-internal-types.js +3 -0
- package/{build → dist}/blocks/simple-block.d.ts +1 -1
- package/dist/blocks/simple-block.js +45 -0
- package/dist/blocks/simple-block.js.map +1 -0
- package/{build → dist}/blocks/simple-native-property-api.d.ts +1 -1
- package/{build → dist}/blocks/simple-native-property-api.js +16 -10
- package/dist/blocks/simple-native-property-api.js.map +1 -0
- package/{build → dist}/blocks/simple-native-property-impl.js +60 -55
- package/dist/blocks/simple-native-property-impl.js.map +1 -0
- package/{build → dist}/blocks/simple-native-property-internal-shared.js +6 -2
- package/dist/blocks/simple-native-property-internal-shared.js.map +1 -0
- package/{build → dist}/blocks/snp-api.d.ts +1 -0
- package/dist/blocks/snp-api.js +7 -0
- package/dist/blocks/snp-api.js.map +1 -0
- package/{build → dist}/blocks/snp-data-store.js +8 -4
- package/dist/blocks/snp-data-store.js.map +1 -0
- package/{build → dist}/blocks/utilities.d.ts +1 -1
- package/dist/blocks/utilities.js +79 -0
- package/dist/blocks/utilities.js.map +1 -0
- package/{build → dist}/controls/AsynchronousFormTokenField.d.ts +1 -1
- package/dist/controls/AsynchronousFormTokenField.js +36 -0
- package/dist/controls/AsynchronousFormTokenField.js.map +1 -0
- package/{build → dist}/controls/BaseSortableItemsControl.d.ts +3 -3
- package/dist/controls/BaseSortableItemsControl.js +25 -0
- package/dist/controls/BaseSortableItemsControl.js.map +1 -0
- package/{build → dist}/controls/ExtendedFormTokenField.d.ts +3 -3
- package/dist/controls/ExtendedFormTokenField.js +64 -0
- package/dist/controls/ExtendedFormTokenField.js.map +1 -0
- package/dist/controls/ExtendedPostPicker.js +28 -0
- package/dist/controls/ExtendedPostPicker.js.map +1 -0
- package/dist/controls/ExtendedRadioControl.d.ts +12 -0
- package/dist/controls/ExtendedRadioControl.js +33 -0
- package/dist/controls/ExtendedRadioControl.js.map +1 -0
- package/{build → dist}/controls/ExtendedTaxonomyPicker.d.ts +1 -1
- package/dist/controls/ExtendedTaxonomyPicker.js +71 -0
- package/dist/controls/ExtendedTaxonomyPicker.js.map +1 -0
- package/{build → dist}/controls/ExtendedTermPicker.d.ts +1 -1
- package/dist/controls/ExtendedTermPicker.js +33 -0
- package/dist/controls/ExtendedTermPicker.js.map +1 -0
- package/dist/controls/ExtendedTextareaControl.d.ts +12 -0
- package/{build → dist}/controls/ExtendedTextareaControl.js +15 -12
- package/dist/controls/ExtendedTextareaControl.js.map +1 -0
- package/dist/controls/ExtendedUserPicker.js +28 -0
- package/dist/controls/ExtendedUserPicker.js.map +1 -0
- package/{build → dist}/controls/FullSizeToggleControl.d.ts +6 -4
- package/dist/controls/FullSizeToggleControl.js +110 -0
- package/dist/controls/FullSizeToggleControl.js.map +1 -0
- package/{build → dist}/controls/ImageControl.d.ts +1 -1
- package/dist/controls/ImageControl.js +81 -0
- package/dist/controls/ImageControl.js.map +1 -0
- package/{build → dist}/controls/InspectorPanel.d.ts +4 -3
- package/dist/controls/InspectorPanel.js +29 -0
- package/dist/controls/InspectorPanel.js.map +1 -0
- package/{build → dist}/controls/LazySuggestionsComboboxControl.d.ts +5 -1
- package/dist/controls/LazySuggestionsComboboxControl.js +32 -0
- package/dist/controls/LazySuggestionsComboboxControl.js.map +1 -0
- package/{build → dist}/controls/MultiSelectControl.d.ts +1 -1
- package/dist/controls/MultiSelectControl.js +33 -0
- package/dist/controls/MultiSelectControl.js.map +1 -0
- package/{build → dist}/controls/PickOne.d.ts +1 -1
- package/dist/controls/PickOne.js +54 -0
- package/dist/controls/PickOne.js.map +1 -0
- package/{build → dist}/controls/PromisableComponent.d.ts +2 -2
- package/{build → dist}/controls/PromisableComponent.js +14 -11
- package/dist/controls/PromisableComponent.js.map +1 -0
- package/{build → dist}/controls/ProperLinkControl.d.ts +1 -1
- package/dist/controls/ProperLinkControl.js +59 -0
- package/dist/controls/ProperLinkControl.js.map +1 -0
- package/dist/controls/SimpleToggle.js +11 -0
- package/dist/controls/SimpleToggle.js.map +1 -0
- package/dist/controls/SortableFlexibleItemsControl.js +18 -0
- package/dist/controls/SortableFlexibleItemsControl.js.map +1 -0
- package/dist/controls/SortableItemsControl.js +15 -0
- package/dist/controls/SortableItemsControl.js.map +1 -0
- package/{build → dist}/controls/basicNumericallyIdedItemPicker.d.ts +1 -1
- package/dist/controls/basicNumericallyIdedItemPicker.js +37 -0
- package/dist/controls/basicNumericallyIdedItemPicker.js.map +1 -0
- package/{build → dist}/controls/hooks/useImprovedTokenManager.d.ts +7 -5
- package/{build → dist}/controls/hooks/useImprovedTokenManager.js +21 -15
- package/dist/controls/hooks/useImprovedTokenManager.js.map +1 -0
- package/{build → dist}/controls/hooks/useMultiSingleConversionLayer.d.ts +1 -1
- package/dist/controls/hooks/useMultiSingleConversionLayer.js +14 -0
- package/dist/controls/hooks/useMultiSingleConversionLayer.js.map +1 -0
- package/dist/controls/hooks/useNonRenderingCounter.js +9 -0
- package/dist/controls/hooks/useNonRenderingCounter.js.map +1 -0
- package/{build → dist}/controls/hooks/useOutputMemoizingFilter.js +7 -4
- package/dist/controls/hooks/useOutputMemoizingFilter.js.map +1 -0
- package/{build → dist}/controls/hooks/useSortableItemsModel.js +14 -11
- package/dist/controls/hooks/useSortableItemsModel.js.map +1 -0
- package/{build → dist}/controls/hooks/useSuggestions.js +16 -13
- package/dist/controls/hooks/useSuggestions.js.map +1 -0
- package/{build → dist}/controls/hooks/useTokenManager.d.ts +5 -3
- package/{build → dist}/controls/hooks/useTokenManager.js +37 -34
- package/dist/controls/hooks/useTokenManager.js.map +1 -0
- package/dist/controls/index.js +41 -0
- package/dist/controls/index.js.map +1 -0
- package/{build → dist}/controls/shared.js +18 -8
- package/dist/controls/shared.js.map +1 -0
- package/dist/controls/types.js +3 -0
- package/dist/editor/post-featured-image.js +125 -0
- package/dist/editor/post-featured-image.js.map +1 -0
- package/dist/editor/simple-gutenberg-endpoints-api.js +26 -0
- package/dist/editor/simple-gutenberg-endpoints-api.js.map +1 -0
- package/{build → dist}/editor/simple-gutenberg-endpoints-impl.js +24 -17
- package/dist/editor/simple-gutenberg-endpoints-impl.js.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.js +27 -0
- package/dist/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.js.map +1 -0
- package/{build → dist}/lib/gutenberg-api-extensions-state/general-logic.js +12 -8
- package/dist/lib/gutenberg-api-extensions-state/general-logic.js.map +1 -0
- package/{build → dist}/lib/gutenberg-api-extensions-state/layered-block-styles-logic.js +10 -6
- package/dist/lib/gutenberg-api-extensions-state/layered-block-styles-logic.js.map +1 -0
- package/{build → dist}/lib/gutenberg-api-extensions-state/snp-logic.js +33 -26
- package/dist/lib/gutenberg-api-extensions-state/snp-logic.js.map +1 -0
- package/{build → dist}/lib/gutenberg-api-extensions-state.d.ts +2 -2
- package/dist/lib/gutenberg-api-extensions-state.js +52 -0
- package/dist/lib/gutenberg-api-extensions-state.js.map +1 -0
- package/{build → dist}/lib/helpers.d.ts +3 -3
- package/{build → dist}/lib/helpers.js +13 -6
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/plaudit-icons/column-1.js +6 -0
- package/dist/lib/plaudit-icons/column-1.js.map +1 -0
- package/dist/lib/plaudit-icons/column-2.js +6 -0
- package/dist/lib/plaudit-icons/column-2.js.map +1 -0
- package/dist/lib/plaudit-icons/column-3.js +6 -0
- package/dist/lib/plaudit-icons/column-3.js.map +1 -0
- package/dist/lib/plaudit-icons/placement-center.js +6 -0
- package/dist/lib/plaudit-icons/placement-center.js.map +1 -0
- package/dist/lib/plaudit-icons/placement-end.js +6 -0
- package/dist/lib/plaudit-icons/placement-end.js.map +1 -0
- package/dist/lib/plaudit-icons/placement-start.js +6 -0
- package/dist/lib/plaudit-icons/placement-start.js.map +1 -0
- package/dist/lib/plaudit-icons/placement-stretch.js +6 -0
- package/dist/lib/plaudit-icons/placement-stretch.js.map +1 -0
- package/dist/lib/plaudit-icons/plaudit-icon.js +6 -0
- package/dist/lib/plaudit-icons/plaudit-icon.js.map +1 -0
- package/dist/lib/plaudit-icons/reusable-block-marker.js +6 -0
- package/{build → dist}/lib/plaudit-icons/reusable-block-marker.js.map +1 -1
- package/dist/lib/plaudit-icons.js +29 -0
- package/dist/lib/plaudit-icons.js.map +1 -0
- package/{build → dist}/lib/suspense/promise-handlers.js +16 -7
- package/dist/lib/suspense/promise-handlers.js.map +1 -0
- package/{build → dist}/lib/suspense.d.ts +2 -2
- package/dist/lib/suspense.js +31 -0
- package/dist/lib/suspense.js.map +1 -0
- package/{build → dist}/lib/useful-types.d.ts +4 -1
- package/dist/lib/useful-types.js +11 -0
- package/dist/lib/useful-types.js.map +1 -0
- package/package.json +22 -30
- package/src/blocks/MoveError.ts +7 -0
- package/src/blocks/PathError.ts +18 -0
- package/src/blocks/SNPFlexibleItemsListComponent.tsx +30 -0
- package/src/blocks/SNPGroupComponent.tsx +38 -0
- package/src/blocks/SNPListComponent.tsx +25 -0
- package/src/blocks/SNPTreeContext.tsx +13 -0
- package/src/blocks/basic-custom-block-bindings-support.tsx +243 -0
- package/src/blocks/common-native-property-constructors.tsx +877 -0
- package/src/blocks/conditions.ts +260 -0
- package/src/blocks/csnp-api.ts +214 -0
- package/src/blocks/data-controller-manager.ts +50 -0
- package/src/blocks/data-controller.ts +736 -0
- package/src/blocks/hooks/built-in-suspendable-option-protocols/select.ts +51 -0
- package/src/blocks/hooks/built-in-suspendable-option-protocols/settings.ts +70 -0
- package/src/blocks/hooks/useSuspendableOptions.ts +123 -0
- package/src/blocks/index.ts +20 -0
- package/src/blocks/layered-styles-api.ts +142 -0
- package/src/blocks/layered-styles-impl.ts +94 -0
- package/src/blocks/layout/LaidOutProperty.tsx +72 -0
- package/src/blocks/layout/LaidOutPropertyRow.tsx +22 -0
- package/src/blocks/layout/NodeContext.tsx +54 -0
- package/src/blocks/layout/PanelRoot.tsx +33 -0
- package/src/blocks/layout/TabsRoot.tsx +56 -0
- package/src/blocks/layout/ToolsPanelContext.tsx +22 -0
- package/src/blocks/shared-exportable-types.ts +6 -0
- package/src/blocks/shared-internal-types.ts +18 -0
- package/src/blocks/simple-block.tsx +74 -0
- package/src/blocks/simple-native-property-api.ts +170 -0
- package/src/blocks/simple-native-property-impl.tsx +329 -0
- package/src/blocks/simple-native-property-internal-shared.ts +46 -0
- package/src/blocks/snp-api.ts +5 -0
- package/src/blocks/snp-data-store.ts +66 -0
- package/src/blocks/utilities.ts +80 -0
- package/src/controls/AsynchronousFormTokenField.tsx +85 -0
- package/src/controls/BaseSortableItemsControl.tsx +84 -0
- package/src/controls/ExtendedFormTokenField.tsx +121 -0
- package/src/controls/ExtendedPostPicker.ts +57 -0
- package/src/controls/ExtendedRadioControl.tsx +107 -0
- package/src/controls/ExtendedTaxonomyPicker.tsx +100 -0
- package/src/controls/ExtendedTermPicker.tsx +62 -0
- package/src/controls/ExtendedTextareaControl.tsx +65 -0
- package/src/controls/ExtendedUserPicker.ts +56 -0
- package/src/controls/FullSizeToggleControl.tsx +94 -0
- package/src/controls/ImageControl.tsx +143 -0
- package/src/controls/InspectorPanel.tsx +37 -0
- package/src/controls/LazySuggestionsComboboxControl.tsx +62 -0
- package/src/controls/MultiSelectControl.tsx +59 -0
- package/src/controls/PickOne.tsx +84 -0
- package/src/controls/PromisableComponent.tsx +56 -0
- package/src/controls/ProperLinkControl.tsx +93 -0
- package/src/controls/SimpleToggle.tsx +9 -0
- package/src/controls/SortableFlexibleItemsControl.tsx +35 -0
- package/src/controls/SortableItemsControl.tsx +18 -0
- package/src/controls/basicNumericallyIdedItemPicker.tsx +76 -0
- package/src/controls/hooks/useImprovedTokenManager.ts +157 -0
- package/src/controls/hooks/useMultiSingleConversionLayer.ts +17 -0
- package/src/controls/hooks/useNonRenderingCounter.ts +6 -0
- package/src/controls/hooks/useOutputMemoizingFilter.ts +16 -0
- package/src/controls/hooks/useSortableItemsModel.ts +196 -0
- package/src/controls/hooks/useSuggestions.ts +91 -0
- package/src/controls/hooks/useTokenManager.ts +177 -0
- package/{build/controls/index.js → src/controls/index.ts} +3 -2
- package/src/controls/shared.ts +50 -0
- package/src/controls/types.ts +18 -0
- package/src/editor/post-featured-image.tsx +161 -0
- package/src/editor/simple-gutenberg-endpoints-api.ts +31 -0
- package/src/editor/simple-gutenberg-endpoints-impl.ts +119 -0
- package/src/index.ts +32 -0
- package/src/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.ts +34 -0
- package/src/lib/gutenberg-api-extensions-state/general-logic.ts +41 -0
- package/src/lib/gutenberg-api-extensions-state/layered-block-styles-logic.ts +42 -0
- package/src/lib/gutenberg-api-extensions-state/snp-logic.ts +240 -0
- package/src/lib/gutenberg-api-extensions-state.ts +69 -0
- package/src/lib/helpers.ts +114 -0
- package/src/lib/plaudit-icons/column-1.tsx +6 -0
- package/src/lib/plaudit-icons/column-2.tsx +6 -0
- package/src/lib/plaudit-icons/column-3.tsx +6 -0
- package/src/lib/plaudit-icons/placement-center.tsx +3 -0
- package/src/lib/plaudit-icons/placement-end.tsx +3 -0
- package/src/lib/plaudit-icons/placement-start.tsx +3 -0
- package/src/lib/plaudit-icons/placement-stretch.tsx +3 -0
- package/src/lib/plaudit-icons/plaudit-icon.tsx +4 -0
- package/src/lib/plaudit-icons/reusable-block-marker.tsx +3 -0
- package/{build/lib/plaudit-icons.js → src/lib/plaudit-icons.ts} +1 -1
- package/src/lib/suspense/promise-handlers.ts +72 -0
- package/src/lib/suspense.tsx +18 -0
- package/src/lib/useful-types.ts +65 -0
- package/build/blocks/MoveError.js +0 -6
- package/build/blocks/MoveError.js.map +0 -1
- package/build/blocks/PathError.js.map +0 -1
- package/build/blocks/SNPFlexibleItemsListComponent.js +0 -15
- package/build/blocks/SNPFlexibleItemsListComponent.js.map +0 -1
- package/build/blocks/SNPGroupComponent.js +0 -17
- package/build/blocks/SNPGroupComponent.js.map +0 -1
- package/build/blocks/SNPListComponent.js +0 -15
- package/build/blocks/SNPListComponent.js.map +0 -1
- package/build/blocks/SNPTreeContext.js +0 -10
- package/build/blocks/SNPTreeContext.js.map +0 -1
- package/build/blocks/basic-custom-block-bindings-support.js +0 -150
- package/build/blocks/basic-custom-block-bindings-support.js.map +0 -1
- package/build/blocks/common-native-property-constructors.d.ts +0 -208
- package/build/blocks/common-native-property-constructors.js.map +0 -1
- package/build/blocks/conditions.js.map +0 -1
- package/build/blocks/data-controller-manager.js.map +0 -1
- package/build/blocks/data-controller.js.map +0 -1
- package/build/blocks/hooks/built-in-suspendable-option-protocols/select.js.map +0 -1
- package/build/blocks/hooks/built-in-suspendable-option-protocols/settings.js.map +0 -1
- package/build/blocks/hooks/useSuspendableOptions.js.map +0 -1
- package/build/blocks/index.js +0 -15
- package/build/blocks/index.js.map +0 -1
- package/build/blocks/layered-styles-api.js.map +0 -1
- package/build/blocks/layered-styles-impl.js.map +0 -1
- package/build/blocks/layout/LaidOutProperty.js +0 -44
- package/build/blocks/layout/LaidOutProperty.js.map +0 -1
- package/build/blocks/layout/LaidOutPropertyRow.js +0 -12
- package/build/blocks/layout/LaidOutPropertyRow.js.map +0 -1
- package/build/blocks/layout/NodeContext.js +0 -37
- package/build/blocks/layout/NodeContext.js.map +0 -1
- package/build/blocks/layout/PanelRoot.js +0 -26
- package/build/blocks/layout/PanelRoot.js.map +0 -1
- package/build/blocks/layout/TabsRoot.js.map +0 -1
- package/build/blocks/layout/ToolsPanelContext.js +0 -18
- package/build/blocks/layout/ToolsPanelContext.js.map +0 -1
- package/build/blocks/shared-exportable-types.js +0 -2
- package/build/blocks/shared-internal-types.js +0 -2
- package/build/blocks/simple-block.js +0 -41
- package/build/blocks/simple-block.js.map +0 -1
- package/build/blocks/simple-native-property-api.js.map +0 -1
- package/build/blocks/simple-native-property-impl.js.map +0 -1
- package/build/blocks/simple-native-property-internal-shared.js.map +0 -1
- package/build/blocks/snp-api.js +0 -2
- package/build/blocks/snp-api.js.map +0 -1
- package/build/blocks/snp-data-store.js.map +0 -1
- package/build/blocks/utilities.js +0 -67
- package/build/blocks/utilities.js.map +0 -1
- package/build/controls/AsynchronousFormTokenField.js +0 -32
- package/build/controls/AsynchronousFormTokenField.js.map +0 -1
- package/build/controls/BaseSortableItemsControl.js +0 -22
- package/build/controls/BaseSortableItemsControl.js.map +0 -1
- package/build/controls/ExtendedFormTokenField.js +0 -58
- package/build/controls/ExtendedFormTokenField.js.map +0 -1
- package/build/controls/ExtendedPostPicker.js +0 -22
- package/build/controls/ExtendedPostPicker.js.map +0 -1
- package/build/controls/ExtendedRadioControl.d.ts +0 -10
- package/build/controls/ExtendedRadioControl.js +0 -30
- package/build/controls/ExtendedRadioControl.js.map +0 -1
- package/build/controls/ExtendedTaxonomyPicker.js +0 -68
- package/build/controls/ExtendedTaxonomyPicker.js.map +0 -1
- package/build/controls/ExtendedTermPicker.js +0 -27
- package/build/controls/ExtendedTermPicker.js.map +0 -1
- package/build/controls/ExtendedTextareaControl.d.ts +0 -14
- package/build/controls/ExtendedTextareaControl.js.map +0 -1
- package/build/controls/ExtendedUserPicker.js +0 -22
- package/build/controls/ExtendedUserPicker.js.map +0 -1
- package/build/controls/FullSizeToggleControl.js +0 -70
- package/build/controls/FullSizeToggleControl.js.map +0 -1
- package/build/controls/ImageControl.js +0 -76
- package/build/controls/ImageControl.js.map +0 -1
- package/build/controls/InspectorPanel.js +0 -26
- package/build/controls/InspectorPanel.js.map +0 -1
- package/build/controls/LazySuggestionsComboboxControl.js +0 -29
- package/build/controls/LazySuggestionsComboboxControl.js.map +0 -1
- package/build/controls/MultiSelectControl.js +0 -30
- package/build/controls/MultiSelectControl.js.map +0 -1
- package/build/controls/PickOne.js +0 -48
- package/build/controls/PickOne.js.map +0 -1
- package/build/controls/PromisableComponent.js.map +0 -1
- package/build/controls/ProperLinkControl.js +0 -56
- package/build/controls/ProperLinkControl.js.map +0 -1
- package/build/controls/SimpleToggle.js +0 -8
- package/build/controls/SimpleToggle.js.map +0 -1
- package/build/controls/SortableFlexibleItemsControl.js +0 -15
- package/build/controls/SortableFlexibleItemsControl.js.map +0 -1
- package/build/controls/SortableItemsControl.js +0 -12
- package/build/controls/SortableItemsControl.js.map +0 -1
- package/build/controls/basicNumericallyIdedItemPicker.js +0 -34
- package/build/controls/basicNumericallyIdedItemPicker.js.map +0 -1
- package/build/controls/hooks/useImprovedTokenManager.js.map +0 -1
- package/build/controls/hooks/useMultiSingleConversionLayer.js +0 -11
- package/build/controls/hooks/useMultiSingleConversionLayer.js.map +0 -1
- package/build/controls/hooks/useNonRenderingCounter.js +0 -6
- package/build/controls/hooks/useNonRenderingCounter.js.map +0 -1
- package/build/controls/hooks/useOutputMemoizingFilter.js.map +0 -1
- package/build/controls/hooks/useSortableItemsModel.js.map +0 -1
- package/build/controls/hooks/useSuggestions.js.map +0 -1
- package/build/controls/hooks/useTokenManager.js.map +0 -1
- package/build/controls/index.js.map +0 -1
- package/build/controls/shared.js.map +0 -1
- package/build/controls/types.js +0 -2
- package/build/editor/post-featured-image.js +0 -122
- package/build/editor/post-featured-image.js.map +0 -1
- package/build/editor/simple-gutenberg-endpoints-api.js +0 -22
- package/build/editor/simple-gutenberg-endpoints-api.js.map +0 -1
- package/build/editor/simple-gutenberg-endpoints-impl.js.map +0 -1
- package/build/index.js +0 -22
- package/build/index.js.map +0 -1
- package/build/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.js +0 -23
- package/build/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.js.map +0 -1
- package/build/lib/gutenberg-api-extensions-state/general-logic.js.map +0 -1
- package/build/lib/gutenberg-api-extensions-state/layered-block-styles-logic.js.map +0 -1
- package/build/lib/gutenberg-api-extensions-state/snp-logic.js.map +0 -1
- package/build/lib/gutenberg-api-extensions-state.js +0 -48
- package/build/lib/gutenberg-api-extensions-state.js.map +0 -1
- package/build/lib/helpers.js.map +0 -1
- package/build/lib/plaudit-icons/column-1.js +0 -3
- package/build/lib/plaudit-icons/column-1.js.map +0 -1
- package/build/lib/plaudit-icons/column-2.js +0 -3
- package/build/lib/plaudit-icons/column-2.js.map +0 -1
- package/build/lib/plaudit-icons/column-3.js +0 -3
- package/build/lib/plaudit-icons/column-3.js.map +0 -1
- package/build/lib/plaudit-icons/placement-center.js +0 -3
- package/build/lib/plaudit-icons/placement-center.js.map +0 -1
- package/build/lib/plaudit-icons/placement-end.js +0 -3
- package/build/lib/plaudit-icons/placement-end.js.map +0 -1
- package/build/lib/plaudit-icons/placement-start.js +0 -3
- package/build/lib/plaudit-icons/placement-start.js.map +0 -1
- package/build/lib/plaudit-icons/placement-stretch.js +0 -3
- package/build/lib/plaudit-icons/placement-stretch.js.map +0 -1
- package/build/lib/plaudit-icons/plaudit-icon.js +0 -3
- package/build/lib/plaudit-icons/plaudit-icon.js.map +0 -1
- package/build/lib/plaudit-icons/reusable-block-marker.js +0 -3
- package/build/lib/plaudit-icons.js.map +0 -1
- package/build/lib/suspense/promise-handlers.js.map +0 -1
- package/build/lib/suspense.js +0 -14
- package/build/lib/suspense.js.map +0 -1
- package/build/lib/useful-types.js +0 -7
- package/build/lib/useful-types.js.map +0 -1
- /package/{build → dist}/blocks/MoveError.d.ts +0 -0
- /package/{build → dist}/blocks/PathError.d.ts +0 -0
- /package/{build → dist}/blocks/SNPTreeContext.d.ts +0 -0
- /package/{build → dist}/blocks/basic-custom-block-bindings-support.d.ts +0 -0
- /package/{build → dist}/blocks/conditions.d.ts +0 -0
- /package/{build → dist}/blocks/data-controller-manager.d.ts +0 -0
- /package/{build → dist}/blocks/data-controller.d.ts +0 -0
- /package/{build → dist}/blocks/hooks/built-in-suspendable-option-protocols/select.d.ts +0 -0
- /package/{build → dist}/blocks/hooks/built-in-suspendable-option-protocols/settings.d.ts +0 -0
- /package/{build → dist}/blocks/index.d.ts +0 -0
- /package/{build → dist}/blocks/layered-styles-impl.d.ts +0 -0
- /package/{build → dist}/blocks/layout/LaidOutPropertyRow.d.ts +0 -0
- /package/{build → dist}/blocks/layout/PanelRoot.d.ts +0 -0
- /package/{build → dist}/blocks/layout/TabsRoot.d.ts +0 -0
- /package/{build → dist}/blocks/layout/ToolsPanelContext.d.ts +0 -0
- /package/{build → dist}/blocks/shared-exportable-types.d.ts +0 -0
- /package/{build → dist}/blocks/shared-exportable-types.js.map +0 -0
- /package/{build → dist}/blocks/shared-internal-types.d.ts +0 -0
- /package/{build → dist}/blocks/shared-internal-types.js.map +0 -0
- /package/{build → dist}/blocks/simple-native-property-impl.d.ts +0 -0
- /package/{build → dist}/blocks/simple-native-property-internal-shared.d.ts +0 -0
- /package/{build → dist}/blocks/snp-data-store.d.ts +0 -0
- /package/{build → dist}/controls/ExtendedPostPicker.d.ts +0 -0
- /package/{build → dist}/controls/ExtendedUserPicker.d.ts +0 -0
- /package/{build → dist}/controls/SimpleToggle.d.ts +0 -0
- /package/{build → dist}/controls/SortableFlexibleItemsControl.d.ts +0 -0
- /package/{build → dist}/controls/SortableItemsControl.d.ts +0 -0
- /package/{build → dist}/controls/hooks/useNonRenderingCounter.d.ts +0 -0
- /package/{build → dist}/controls/hooks/useOutputMemoizingFilter.d.ts +0 -0
- /package/{build → dist}/controls/hooks/useSortableItemsModel.d.ts +0 -0
- /package/{build → dist}/controls/hooks/useSuggestions.d.ts +0 -0
- /package/{build → dist}/controls/index.d.ts +0 -0
- /package/{build → dist}/controls/shared.d.ts +0 -0
- /package/{build → dist}/controls/types.d.ts +0 -0
- /package/{build → dist}/controls/types.js.map +0 -0
- /package/{build → dist}/editor/post-featured-image.d.ts +0 -0
- /package/{build → dist}/editor/simple-gutenberg-endpoints-api.d.ts +0 -0
- /package/{build → dist}/editor/simple-gutenberg-endpoints-impl.d.ts +0 -0
- /package/{build → dist}/index.d.ts +0 -0
- /package/{build → dist}/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.d.ts +0 -0
- /package/{build → dist}/lib/gutenberg-api-extensions-state/general-logic.d.ts +0 -0
- /package/{build → dist}/lib/gutenberg-api-extensions-state/layered-block-styles-logic.d.ts +0 -0
- /package/{build → dist}/lib/gutenberg-api-extensions-state/snp-logic.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/column-1.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/column-2.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/column-3.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/placement-center.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/placement-end.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/placement-start.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/placement-stretch.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/plaudit-icon.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons/reusable-block-marker.d.ts +0 -0
- /package/{build → dist}/lib/plaudit-icons.d.ts +0 -0
- /package/{build → dist}/lib/suspense/promise-handlers.d.ts +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {produce} from "immer";
|
|
2
|
+
|
|
3
|
+
import {clone} from "../helpers";
|
|
4
|
+
import type {BlockName, RegisterBlockAttrs} from "../useful-types";
|
|
5
|
+
|
|
6
|
+
export type GeneralLogicActions = {type: 'RECORD_BASELINE_BLOCK_ATTRS', attrs: RegisterBlockAttrs<Record<string, any>>}|{type: "SET_FEATURE_PROP", feature: string, prop: string, value: any};
|
|
7
|
+
export type GeneralLogicState = {
|
|
8
|
+
baselineBlockAttrs: {[blockName in BlockName]?: RegisterBlockAttrs<Record<string, any>>},
|
|
9
|
+
features: {[name in string]?: {[prop in string]: any}}
|
|
10
|
+
};
|
|
11
|
+
export function generalLogic(state: GeneralLogicState, action: GeneralLogicActions): typeof state {
|
|
12
|
+
if (action.type === "RECORD_BASELINE_BLOCK_ATTRS") {
|
|
13
|
+
return produce(state, (draft: typeof state) => {
|
|
14
|
+
if (!(action.attrs.name in draft.baselineBlockAttrs)) {
|
|
15
|
+
draft.baselineBlockAttrs[action.attrs.name] = clone(action.attrs);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
} else if (action.type === "SET_FEATURE_PROP") {
|
|
19
|
+
return produce(state, (draft: typeof state) => {
|
|
20
|
+
(draft.features[action.feature] ?? (draft.features[action.feature] = {}))[action.prop] = action.value;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return state;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const generalLogicActions = {
|
|
27
|
+
recordBaselineBlockAttrs(attrs: RegisterBlockAttrs<Record<string, any>>): GeneralLogicActions {
|
|
28
|
+
return {type: "RECORD_BASELINE_BLOCK_ATTRS", attrs};
|
|
29
|
+
},
|
|
30
|
+
setFeatureProp(feature: string, prop: string, value: any): GeneralLogicActions {
|
|
31
|
+
return {type: "SET_FEATURE_PROP", feature, prop, value};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const generalLogicSelectors = {
|
|
35
|
+
baselineBlockAttrs(state: GeneralLogicState, blockName: BlockName) {
|
|
36
|
+
return state.baselineBlockAttrs[blockName];
|
|
37
|
+
},
|
|
38
|
+
featureProp(state: GeneralLogicState, feature: string, prop: string) {
|
|
39
|
+
return state.features[feature]?.[prop];
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {produce} from "immer";
|
|
2
|
+
|
|
3
|
+
import type {PDSimpleNativeProperty} from "../../blocks";
|
|
4
|
+
import type {NamedBlockAction} from "../gutenberg-api-extensions-state";
|
|
5
|
+
import type {BlockName, WordPressMetaActions} from "../useful-types";
|
|
6
|
+
|
|
7
|
+
export type LayeredBlockStylesLogicActions =
|
|
8
|
+
NamedBlockAction<'ADD_LAYERED_BLOCK_STYLES', {properties: PDSimpleNativeProperty[]}>|
|
|
9
|
+
NamedBlockAction<'SET_LAYERED_BLOCK_STYLES', {properties: {[name in string]: PDSimpleNativeProperty}}>;
|
|
10
|
+
export type LayeredBlockStylesLogicState = {
|
|
11
|
+
layeredBlockStyles: {[blockName in BlockName]?: {[name in string]: PDSimpleNativeProperty}}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const layeredBlockStylesLogicActions = {
|
|
15
|
+
addLayeredBlockStyles(blockName: BlockName, properties: PDSimpleNativeProperty[]) {
|
|
16
|
+
return {type: 'ADD_LAYERED_BLOCK_STYLES', blockName, properties};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const layeredBlockStylesLogicSelectors = {
|
|
20
|
+
blockStylesLayer(state: LayeredBlockStylesLogicState, blockName: BlockName, layerName: string) {
|
|
21
|
+
return state.layeredBlockStyles[blockName]?.[layerName];
|
|
22
|
+
},
|
|
23
|
+
blockStylesLayers(state: LayeredBlockStylesLogicState, blockName: BlockName) {
|
|
24
|
+
return state.layeredBlockStyles[blockName];
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export function layeredBlockStylesLogic(state: LayeredBlockStylesLogicState, action: LayeredBlockStylesLogicActions|WordPressMetaActions): typeof state {
|
|
29
|
+
if (action.type === "ADD_LAYERED_BLOCK_STYLES") {
|
|
30
|
+
return produce(state, (draft: typeof state) => {
|
|
31
|
+
const blockLayeredStyles = draft.layeredBlockStyles[action.blockName] ?? (draft.layeredBlockStyles[action.blockName] = {});
|
|
32
|
+
for (const layer of action.properties) {
|
|
33
|
+
blockLayeredStyles[layer.name] = layer;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
} else if (action.type === "SET_LAYERED_BLOCK_STYLES") {
|
|
37
|
+
return produce(state, (draft: typeof state) => {
|
|
38
|
+
draft.layeredBlockStyles[action.blockName] = action.properties;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return state;
|
|
42
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import {getBlockType} from "@wordpress/blocks";
|
|
2
|
+
import {dispatch} from "@wordpress/data";
|
|
3
|
+
|
|
4
|
+
import {produce} from "immer";
|
|
5
|
+
|
|
6
|
+
import type {LaidOutProperties, PropertiesParameter, SimpleNativePanel, SimpleNativeTab} from "../../blocks";
|
|
7
|
+
import {hydrateSimpleNativeProperty, OutsideHydrationInfo} from "../../blocks/common-native-property-constructors";
|
|
8
|
+
import type {
|
|
9
|
+
ExtraPropTransformsConfig,
|
|
10
|
+
HydratedInspectorPanelGroupedTabs,
|
|
11
|
+
HydratedSimpleNativePanel,
|
|
12
|
+
HydratedSimpleNativeTabItem, PerBlockExtraPropTransforms,
|
|
13
|
+
PreppedSimpleNativePanelsAndTabs
|
|
14
|
+
} from "../../blocks/simple-native-property-internal-shared";
|
|
15
|
+
import {BareProperties, NamedBlockAction, store} from "../gutenberg-api-extensions-state";
|
|
16
|
+
import {BlockName, isBlockJsonNativePropsConfig, RegisterBlockAttrs, WordPressMetaActions} from "../useful-types";
|
|
17
|
+
|
|
18
|
+
export type SNPLogicState = {
|
|
19
|
+
desiccatedProperties: {[blockName in BlockName]?: Array<SimpleNativePanel|SimpleNativeTab>},
|
|
20
|
+
preppedProperties: {[blockName in BlockName]?: PreppedSimpleNativePanelsAndTabs|false},
|
|
21
|
+
extraPropTransforms: {[blockName in BlockName]?: ExtraPropTransformsConfig},
|
|
22
|
+
computedExtraPropTransforms: {[blockName in BlockName]?: PerBlockExtraPropTransforms|false},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type SNPLogicActions = {type: 'ADD_PROPERTIES', blockName: BlockName|BlockName[], properties: BareProperties}|
|
|
26
|
+
NamedBlockAction<'SET_PREPPED_PROPERTIES', {properties: PreppedSimpleNativePanelsAndTabs|false}>|
|
|
27
|
+
NamedBlockAction<'ADD_OR_UPDATE_EXTRA_PROP_TRANSFORM', {propPath: string, extraPropTransform: ExtraPropTransformsConfig[string]}>|
|
|
28
|
+
NamedBlockAction<'SET_EXTRA_PROP_TRANSFORMS', {extraPropTransforms: ExtraPropTransformsConfig}>|
|
|
29
|
+
NamedBlockAction<'SET_COMPUTED_EXTRA_PROP_TRANSFORMS', {computedExtraPropTransforms: PerBlockExtraPropTransforms|false|undefined}>;
|
|
30
|
+
|
|
31
|
+
export const snpLogicActions = {
|
|
32
|
+
addProperties(blockName: BlockName|BlockName[], properties: BareProperties): SNPLogicActions {
|
|
33
|
+
return {type: 'ADD_PROPERTIES', blockName, properties};
|
|
34
|
+
},
|
|
35
|
+
addOrUpdateExtraPropTransform(blockName: BlockName, propPath: string, extraPropTransform: ExtraPropTransformsConfig[string]): SNPLogicActions {
|
|
36
|
+
return {type: 'ADD_OR_UPDATE_EXTRA_PROP_TRANSFORM', blockName, propPath, extraPropTransform};
|
|
37
|
+
},
|
|
38
|
+
setComputedExtraPropTransforms(blockName: BlockName, computedExtraPropTransforms: PerBlockExtraPropTransforms|false): SNPLogicActions {
|
|
39
|
+
return {type: 'SET_COMPUTED_EXTRA_PROP_TRANSFORMS', blockName, computedExtraPropTransforms};
|
|
40
|
+
},
|
|
41
|
+
setPreppedProperties(blockName: BlockName, properties: PreppedSimpleNativePanelsAndTabs|false): SNPLogicActions {
|
|
42
|
+
return {type: 'SET_PREPPED_PROPERTIES', blockName, properties};
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export const snpLogicSelectors = {
|
|
46
|
+
desiccatedProperties(state: SNPLogicState, blockName: BlockName) {
|
|
47
|
+
return state.desiccatedProperties[blockName];
|
|
48
|
+
},
|
|
49
|
+
preppedProperties(state: SNPLogicState, blockName: BlockName) {
|
|
50
|
+
let res = state.preppedProperties[blockName];
|
|
51
|
+
if (res === undefined) {
|
|
52
|
+
res = prepSimpleNativePanelsAndTabs(blockName, state.desiccatedProperties[blockName]);
|
|
53
|
+
dispatch(store).setPreppedProperties(blockName, res);
|
|
54
|
+
}
|
|
55
|
+
return res;
|
|
56
|
+
},
|
|
57
|
+
extraPropTransforms(state: SNPLogicState, blockName: BlockName) {
|
|
58
|
+
return state.extraPropTransforms[blockName];
|
|
59
|
+
},
|
|
60
|
+
computedExtraPropTransforms(state: SNPLogicState, blockName: BlockName) {
|
|
61
|
+
let res = state.computedExtraPropTransforms[blockName];
|
|
62
|
+
if (res === undefined) {
|
|
63
|
+
res = computeExtraPropTransforms(getBlockType(blockName) as RegisterBlockAttrs, state.extraPropTransforms[blockName]);
|
|
64
|
+
dispatch(store).setComputedExtraPropTransforms(blockName, res);
|
|
65
|
+
}
|
|
66
|
+
return res;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export function snpLogic(state: SNPLogicState, action: SNPLogicActions|WordPressMetaActions) {
|
|
71
|
+
switch (action.type) {
|
|
72
|
+
case "ADD_PROPERTIES":
|
|
73
|
+
return produce(state, (draft: typeof state) => {
|
|
74
|
+
for (const bn of Array.isArray(action.blockName) ? action.blockName : [action.blockName]) {
|
|
75
|
+
addProperties(bn, action.properties, draft.desiccatedProperties);
|
|
76
|
+
draft.preppedProperties[bn] = undefined;
|
|
77
|
+
draft.extraPropTransforms[bn] = undefined;
|
|
78
|
+
draft.computedExtraPropTransforms[bn] = undefined;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
case "ADD_OR_UPDATE_EXTRA_PROP_TRANSFORM":
|
|
82
|
+
return produce(state, (draft: typeof state) => {
|
|
83
|
+
const blockTransforms = draft.extraPropTransforms[action.blockName] ?? (draft.extraPropTransforms[action.blockName] = {});
|
|
84
|
+
if (blockTransforms[action.propPath]) {
|
|
85
|
+
blockTransforms[action.propPath]!.styleProperty = action.extraPropTransform.styleProperty;
|
|
86
|
+
} else {
|
|
87
|
+
blockTransforms[action.propPath] = action.extraPropTransform;
|
|
88
|
+
}
|
|
89
|
+
draft.computedExtraPropTransforms[action.blockName] = undefined;
|
|
90
|
+
});
|
|
91
|
+
case "SET_PREPPED_PROPERTIES":
|
|
92
|
+
return produce(state, (draft: typeof state) => {
|
|
93
|
+
draft.preppedProperties[action.blockName] = action.properties;
|
|
94
|
+
});
|
|
95
|
+
case "SET_EXTRA_PROP_TRANSFORMS":
|
|
96
|
+
return produce(state, (draft: typeof state) => {
|
|
97
|
+
draft.extraPropTransforms[action.blockName] = action.extraPropTransforms;
|
|
98
|
+
});
|
|
99
|
+
case "SET_COMPUTED_EXTRA_PROP_TRANSFORMS":
|
|
100
|
+
return produce(state, (draft: typeof state) => {
|
|
101
|
+
draft.computedExtraPropTransforms[action.blockName] = action.computedExtraPropTransforms;
|
|
102
|
+
});
|
|
103
|
+
default:
|
|
104
|
+
return state;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function addProperties(block: BlockName, properties: PropertiesParameter, simpleNativePanelsAndTabs: SNPLogicState['desiccatedProperties']) {
|
|
109
|
+
const panels = (simpleNativePanelsAndTabs[block] ?? (simpleNativePanelsAndTabs[block] = []));
|
|
110
|
+
if ('title' in properties) {
|
|
111
|
+
panels.push(properties);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
let rawProperties: LaidOutProperties = [];
|
|
115
|
+
for (const prop of properties) {
|
|
116
|
+
if ('title' in prop) {
|
|
117
|
+
if (rawProperties.length) {
|
|
118
|
+
panels.push({
|
|
119
|
+
title: "",
|
|
120
|
+
properties: rawProperties
|
|
121
|
+
});
|
|
122
|
+
rawProperties = [];
|
|
123
|
+
}
|
|
124
|
+
panels.push(prop);
|
|
125
|
+
} else {
|
|
126
|
+
rawProperties.push(prop);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (rawProperties.length) {
|
|
130
|
+
panels.push({
|
|
131
|
+
title: "",
|
|
132
|
+
properties: rawProperties
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function normalizeTabItems(
|
|
138
|
+
items: SimpleNativeTab['items'], outsideHydrationInfo: OutsideHydrationInfo
|
|
139
|
+
): HydratedSimpleNativeTabItem[] {
|
|
140
|
+
let bareProperties: HydratedSimpleNativePanel['properties'] = [];
|
|
141
|
+
const normalizedItems: HydratedSimpleNativeTabItem[] = [];
|
|
142
|
+
for (const item of items) {
|
|
143
|
+
if (Array.isArray(item)) {
|
|
144
|
+
bareProperties.push(item.map(prp => hydrateSimpleNativeProperty(prp, "", outsideHydrationInfo, [])));
|
|
145
|
+
} else if ('title' in item && 'properties' in item) {
|
|
146
|
+
if (bareProperties.length) {
|
|
147
|
+
normalizedItems.push({title: "", properties: bareProperties, initialOpen: true});
|
|
148
|
+
bareProperties = [];
|
|
149
|
+
}
|
|
150
|
+
normalizedItems.push(hydrateSimpleNativePanel(item, outsideHydrationInfo));
|
|
151
|
+
} else {
|
|
152
|
+
bareProperties.push(hydrateSimpleNativeProperty(item, "", outsideHydrationInfo, []));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (bareProperties.length) {
|
|
156
|
+
normalizedItems.push({title: "", properties: bareProperties, initialOpen: true});
|
|
157
|
+
}
|
|
158
|
+
return normalizedItems;
|
|
159
|
+
}
|
|
160
|
+
function hydrateSimpleNativePanel(panel: SimpleNativePanel, outsideHydrationInfo: OutsideHydrationInfo): HydratedSimpleNativePanel {
|
|
161
|
+
return {
|
|
162
|
+
...panel, properties: panel.properties.map(prop => Array.isArray(prop)
|
|
163
|
+
? prop.map(prp => hydrateSimpleNativeProperty(prp, "", outsideHydrationInfo, []))
|
|
164
|
+
: hydrateSimpleNativeProperty(prop, "", outsideHydrationInfo, []))
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* This performs the one-time prep for rendering the registered SNP panels and tabs for a Block.
|
|
170
|
+
*
|
|
171
|
+
* @param block the name of the block to prep
|
|
172
|
+
* @param items the properties sourced from the datastore
|
|
173
|
+
* @returns either false or an object with at least one declared panel or tab.
|
|
174
|
+
* This guarantee is made in order to avoid having to perform more convoluted checks in the render methods
|
|
175
|
+
*/
|
|
176
|
+
export function prepSimpleNativePanelsAndTabs(block: BlockName, items: Array<SimpleNativePanel|SimpleNativeTab>|undefined): PreppedSimpleNativePanelsAndTabs|false {
|
|
177
|
+
if (items === undefined) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const ungroupedTabs: SimpleNativeTab[] = [];
|
|
182
|
+
const panels: SimpleNativePanel[] = [];
|
|
183
|
+
for (const item of items) {
|
|
184
|
+
const isTab = 'items' in item;
|
|
185
|
+
if (item.group === 'layered-styles') {
|
|
186
|
+
const props = (isTab
|
|
187
|
+
? item.items.flatMap(propsOrPanel => 'title' in propsOrPanel ? propsOrPanel.properties : propsOrPanel)
|
|
188
|
+
: item.properties).flat();
|
|
189
|
+
|
|
190
|
+
dispatch(store).addLayeredBlockStyles(block, props);
|
|
191
|
+
}
|
|
192
|
+
if (isTab) {
|
|
193
|
+
ungroupedTabs.push(item);
|
|
194
|
+
} else {
|
|
195
|
+
panels.push(item);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (!panels.length && !ungroupedTabs.length) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
let panelOrTabKeyIndex = 0;
|
|
204
|
+
const groupedTabs: HydratedInspectorPanelGroupedTabs = {};
|
|
205
|
+
for (const tab of ungroupedTabs) {
|
|
206
|
+
const tabGroupName = tab.group ?? 'default';
|
|
207
|
+
const groupedTabsForName = (groupedTabs[tabGroupName] ?? (groupedTabs[tabGroupName] = [`${block}-${panelOrTabKeyIndex++}`, {}]))[1];
|
|
208
|
+
// If a tab with that title already exists, we append its properties to the existing ones
|
|
209
|
+
const existingGroupedTabsForName = groupedTabsForName[tab.title];
|
|
210
|
+
groupedTabsForName[tab.title] = {
|
|
211
|
+
title: tab.title, group: tabGroupName,
|
|
212
|
+
items: existingGroupedTabsForName
|
|
213
|
+
? [...existingGroupedTabsForName.items, ...normalizeTabItems(tab.items, {forLayeredStyles: tab.group === "layered-styles", blockName: block})]
|
|
214
|
+
: normalizeTabItems(tab.items, {forLayeredStyles: tab.group === "layered-styles", blockName: block})
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return {
|
|
219
|
+
// Because JavaScript's Array sorting methods are stable, we can just sort once at the end
|
|
220
|
+
panels: panels
|
|
221
|
+
.map(panel => hydrateSimpleNativePanel(panel, {forLayeredStyles: panel.group === "layered-styles", blockName: block}))
|
|
222
|
+
.sort(({position: aPosition = 10}, {position: bPosition = 10}) => aPosition - bPosition)
|
|
223
|
+
.map(panel => [`${block}-${panelOrTabKeyIndex++}`, panel]),
|
|
224
|
+
// We sort tab groups by name in order to force SNP styles to be added after layered-styles
|
|
225
|
+
// We don't need to check for equality in the group comparator because Object-keys are guaranteed to be distinct
|
|
226
|
+
tabs: Object.fromEntries(Object.entries(groupedTabs)
|
|
227
|
+
.sort(([aName], [bName]) => aName > bName ? 1 : -1))
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export function computeExtraPropTransforms(blockType: RegisterBlockAttrs, extraPropTransforms: ExtraPropTransformsConfig|undefined): PerBlockExtraPropTransforms|false {
|
|
232
|
+
if (extraPropTransforms === undefined) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
const rawTransforms = Object.entries(extraPropTransforms);
|
|
236
|
+
const transforms = rawTransforms.length
|
|
237
|
+
? rawTransforms.map<PerBlockExtraPropTransforms['transforms'][number]>(transform => [transform[0].split(".") as [string, ...string[]], transform[1]])
|
|
238
|
+
: false;
|
|
239
|
+
return transforms ? {transforms, appliesInEditor: !isBlockJsonNativePropsConfig(blockType.plaudit)} : false;
|
|
240
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {combineReducers, createReduxStore, register} from "@wordpress/data";
|
|
2
|
+
|
|
3
|
+
import type {LaidOutProperties, SimpleNativePanel, SimpleNativeTab} from "../blocks";
|
|
4
|
+
import {
|
|
5
|
+
customBlockBindingsSupportLogic, customBlockBindingsSupportLogicActions, CustomBlockBindingsSupportLogicActions, customBlockBindingsSupportLogicSelectors,
|
|
6
|
+
CustomBlockBindingsSupportLogicState
|
|
7
|
+
} from "./gutenberg-api-extensions-state/custom-block-bindings-support-logic";
|
|
8
|
+
import {generalLogic, generalLogicActions, GeneralLogicActions, generalLogicSelectors, GeneralLogicState} from "./gutenberg-api-extensions-state/general-logic";
|
|
9
|
+
import {
|
|
10
|
+
layeredBlockStylesLogic, layeredBlockStylesLogicActions, LayeredBlockStylesLogicActions, layeredBlockStylesLogicSelectors, LayeredBlockStylesLogicState
|
|
11
|
+
} from "./gutenberg-api-extensions-state/layered-block-styles-logic";
|
|
12
|
+
import {snpLogic, snpLogicActions, SNPLogicActions, snpLogicSelectors, SNPLogicState} from "./gutenberg-api-extensions-state/snp-logic";
|
|
13
|
+
import {combineSelectors, withExposedWordpressMetadata} from "./helpers";
|
|
14
|
+
import type {BlockName} from "./useful-types";
|
|
15
|
+
|
|
16
|
+
export type State = {
|
|
17
|
+
customBlockBindingsSupportLogic: CustomBlockBindingsSupportLogicState,
|
|
18
|
+
layeredBlockStylesLogic: LayeredBlockStylesLogicState,
|
|
19
|
+
snpLogic: SNPLogicState,
|
|
20
|
+
generalLogic: GeneralLogicState
|
|
21
|
+
};
|
|
22
|
+
export type BareProperties = SimpleNativePanel|SimpleNativeTab|Array<LaidOutProperties[number]|SimpleNativePanel|SimpleNativeTab>;
|
|
23
|
+
export type NamedBlockAction<A extends string, P = {}> = {type: A, blockName: BlockName}&P;
|
|
24
|
+
|
|
25
|
+
const DEFAULT_STATE: State = {
|
|
26
|
+
customBlockBindingsSupportLogic: {
|
|
27
|
+
customBlockBindingsSupport: {}
|
|
28
|
+
},
|
|
29
|
+
layeredBlockStylesLogic: {
|
|
30
|
+
layeredBlockStyles: {}
|
|
31
|
+
},
|
|
32
|
+
snpLogic: {
|
|
33
|
+
desiccatedProperties: {},
|
|
34
|
+
preppedProperties: {},
|
|
35
|
+
extraPropTransforms: {},
|
|
36
|
+
computedExtraPropTransforms: {}
|
|
37
|
+
},
|
|
38
|
+
generalLogic: {
|
|
39
|
+
baselineBlockAttrs: {}, features: {}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
type ReducerActions = CustomBlockBindingsSupportLogicActions|LayeredBlockStylesLogicActions|SNPLogicActions|GeneralLogicActions;
|
|
44
|
+
|
|
45
|
+
export const store = createReduxStore('plaudit/gutenberg-api-extensions', withExposedWordpressMetadata({
|
|
46
|
+
initialState: DEFAULT_STATE,
|
|
47
|
+
reducer: combineReducers({
|
|
48
|
+
customBlockBindingsSupportLogic,
|
|
49
|
+
layeredBlockStylesLogic,
|
|
50
|
+
snpLogic,
|
|
51
|
+
generalLogic
|
|
52
|
+
}),
|
|
53
|
+
actions: {
|
|
54
|
+
...customBlockBindingsSupportLogicActions,
|
|
55
|
+
...layeredBlockStylesLogicActions,
|
|
56
|
+
...snpLogicActions,
|
|
57
|
+
...generalLogicActions
|
|
58
|
+
},
|
|
59
|
+
selectors: combineSelectors({
|
|
60
|
+
customBlockBindingsSupportLogic: customBlockBindingsSupportLogicSelectors,
|
|
61
|
+
layeredBlockStylesLogic: layeredBlockStylesLogicSelectors,
|
|
62
|
+
snpLogic: snpLogicSelectors,
|
|
63
|
+
generalLogic: generalLogicSelectors
|
|
64
|
+
})
|
|
65
|
+
}));
|
|
66
|
+
|
|
67
|
+
export function registerStore() {
|
|
68
|
+
register(store);
|
|
69
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import {resolveSelect, type select} from "@wordpress/data";
|
|
2
|
+
import type {ActionCreator, ReduxStoreConfig} from "@wordpress/data/types";
|
|
3
|
+
import type * as MetaActions from "@wordpress/data/redux-store/metadata/actions";
|
|
4
|
+
import type * as MetaSelectors from "@wordpress/data/redux-store/metadata/selectors";
|
|
5
|
+
|
|
6
|
+
import type {store as apiStore} from "./gutenberg-api-extensions-state";
|
|
7
|
+
import type {store as endpointsStore} from "../editor/simple-gutenberg-endpoints-impl";
|
|
8
|
+
import type {PromisifyFunctionReturns, SubsequentArgsOfFunc} from "./useful-types";
|
|
9
|
+
|
|
10
|
+
export function clone<T>(value: T): T {
|
|
11
|
+
if (value === null || value === undefined) {
|
|
12
|
+
return value;
|
|
13
|
+
} else if (Array.isArray(value)) {
|
|
14
|
+
return value.map(v => clone(v)) as T;
|
|
15
|
+
}
|
|
16
|
+
return typeof value === 'object' ? Object.fromEntries(Object.entries(value).map(([k, v]) => [k, clone(v)])) as T : value;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type Mapping<K> = K extends 'plaudit/gutenberg-api-extensions'|(typeof apiStore)
|
|
20
|
+
? PromisifyFunctionReturns<ReturnType<typeof select<typeof apiStore>>>
|
|
21
|
+
: K extends 'plaudit/simple-gutenberg-apis'|(typeof endpointsStore)
|
|
22
|
+
? PromisifyFunctionReturns<ReturnType<typeof select<typeof endpointsStore>>>
|
|
23
|
+
: never;
|
|
24
|
+
export const fixedResolveSelect:
|
|
25
|
+
(<K extends 'plaudit/gutenberg-api-extensions'|(typeof apiStore)|'plaudit/simple-gutenberg-apis'|(typeof endpointsStore)>(key: K) => Mapping<K>) = resolveSelect;
|
|
26
|
+
|
|
27
|
+
// This is madness. I do not know why it works, only that it does.
|
|
28
|
+
type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends ((x: infer I) => void) ? I : never;
|
|
29
|
+
|
|
30
|
+
// This forcibly overwrites the selectors' expected states to be the root state
|
|
31
|
+
type SelectorsForT<S, ST> = S extends {[SELECTOR in string]: (state: any, ...args: any[]) => any}
|
|
32
|
+
? {[SL in keyof S]: (state: ST, ...args: SubsequentArgsOfFunc<S[SL]>) => ReturnType<S[SL]>}
|
|
33
|
+
: never;
|
|
34
|
+
|
|
35
|
+
// This unifies the partial states declared via SelectorArgs into the full state
|
|
36
|
+
type StateFromSelectorsArg<S extends SelectorsArg<any>> = {[K in keyof S]: Parameters<S[K][keyof S[K]]>[0]};
|
|
37
|
+
|
|
38
|
+
// This handles the, "normalize state and flatten" step
|
|
39
|
+
type CombinedSelectors<S extends SelectorsArg<any>> = UnionToIntersection<{[K in keyof S]: SelectorsForT<S[K], StateFromSelectorsArg<S>>}[keyof S]>;
|
|
40
|
+
|
|
41
|
+
// Defines the shape of the argument in such a way that its shape can be derived from the state and vice versa
|
|
42
|
+
type SelectorsArg<S extends {}> = {[K in keyof S]: {[SELECTOR in string]: (state: S[K], ...args: any[]) => any}};
|
|
43
|
+
|
|
44
|
+
export function combineSelectors<S extends SelectorsArg<any>>(selectors: S) {
|
|
45
|
+
return Object.fromEntries((Object.entries(selectors) as [keyof S, S[keyof S]][]).flatMap(sel => {
|
|
46
|
+
const key = sel[0];
|
|
47
|
+
return (Object.entries(sel[1])).map(nestedSel => {
|
|
48
|
+
return [nestedSel[0], (state: StateFromSelectorsArg<S>, ...args: SubsequentArgsOfFunc<typeof nestedSel[1]>) => {
|
|
49
|
+
return nestedSel[1](state[key], ...args);
|
|
50
|
+
}];
|
|
51
|
+
});
|
|
52
|
+
})) as CombinedSelectors<typeof selectors>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function withExposedWordpressMetadata<
|
|
56
|
+
State, Actions extends Record<Exclude<string, keyof typeof MetaActions>, ActionCreator>, Selectors extends Omit<Selectors, keyof typeof MetaSelectors>
|
|
57
|
+
>(
|
|
58
|
+
options: ReduxStoreConfig<State, Actions, Selectors>
|
|
59
|
+
): Omit<typeof options, 'actions'|'selectors'>&{actions: (typeof MetaActions)&(typeof options)['actions'], selectors: (typeof MetaSelectors)&(typeof options)['selectors']} {
|
|
60
|
+
return options as any;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class TemporalLRUCache<K, V extends NonNullable<any>|undefined> {
|
|
64
|
+
private readonly cache: Map<K, [V, number]> = new Map();
|
|
65
|
+
private timeout?: ReturnType<Window['setTimeout']>;
|
|
66
|
+
|
|
67
|
+
public constructor(
|
|
68
|
+
private readonly capacity: number,
|
|
69
|
+
private readonly minDroppableAccessTime = 10_000
|
|
70
|
+
) {}
|
|
71
|
+
|
|
72
|
+
get(key: K) {
|
|
73
|
+
const val = this.cache.get(key);
|
|
74
|
+
if (val !== undefined) {
|
|
75
|
+
val[1] = Date.now();
|
|
76
|
+
return val[0];
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
set(key: K, value: V) {
|
|
82
|
+
this.cache.set(key, [value, Date.now()]);
|
|
83
|
+
if (this.cache.size >= this.capacity && this.timeout === undefined) {
|
|
84
|
+
this.beginTimeout();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
has(key: K) {
|
|
89
|
+
return this.cache.has(key);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
cancelTimeout() {
|
|
93
|
+
if (this.timeout !== undefined) {
|
|
94
|
+
window.clearTimeout(this.timeout);
|
|
95
|
+
this.timeout = undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
private beginTimeout() {
|
|
99
|
+
this.timeout = window.setTimeout(() => {
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
const droppableItems = [...this.cache.entries()]
|
|
102
|
+
.filter(([_, v]) => now - v[1] >= this.minDroppableAccessTime)
|
|
103
|
+
.sort(([_a, [_a0, mraA]], [_b, [_b0, mraB]]) => mraA - mraB)
|
|
104
|
+
.slice(0, this.cache.size - this.capacity);
|
|
105
|
+
for (const [key] of droppableItems) {
|
|
106
|
+
this.cache.delete(key);
|
|
107
|
+
}
|
|
108
|
+
this.timeout = undefined;
|
|
109
|
+
if (this.cache.size > this.capacity) {
|
|
110
|
+
this.beginTimeout();
|
|
111
|
+
}
|
|
112
|
+
}, this.minDroppableAccessTime);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const iconColumn3 = <svg width={34} height={24} viewBox="0 0 34 24">
|
|
2
|
+
<path
|
|
3
|
+
d="M34 2c0-1.1-.9-2-2-2H2C.9 0 0 .9 0 2v20c0 1.1.9 2 2 2h30c1.1 0 2-.9 2-2V2zM21.5 22h-9V2h9v20zm2 0V2H32v20h-8.5zm-13 0H2V2h8.5v20z"
|
|
4
|
+
fillRule="evenodd" clipRule="evenodd"
|
|
5
|
+
/>
|
|
6
|
+
</svg>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export const plauditIcon = <svg width={24} height={24} viewBox="0 0 139 157.6">
|
|
2
|
+
<path fill="#d20000"
|
|
3
|
+
d="M83.3 39.1L101.6 9c2-3.2.9-7.1-2.4-8.5s-6.9.4-7.9 4l-9.7 33.9c-1.1 3.6-.3 4 1.7.7zm-43.9 19L9 40.5c-3.3-1.9-7.1-.7-8.5 2.6s.5 6.8 4.2 7.8l34.1 8.9c3.7 1 4 .2.6-1.7zm16.3-19c2 3.2 2.7 2.9 1.7-.7L47.6 4.5C46.5.8 43-1 39.7.5S35.3 5.8 37.3 9l18.4 30.1zm82.8 4c-1.4-3.3-5.2-4.5-8.5-2.6L99.5 58.1c-3.3 1.9-3 2.7.7 1.7l34.1-8.9c3.7-1 5.6-4.5 4.2-7.8zM88.8 57.7c-10.6-18.3-28-18.3-38.7 0l-38.7 66.6c-10.6 18.3-1.9 33.3 19.3 33.3h77.4c21.3 0 30-15 19.3-33.3L88.8 57.7zm-19.3 1c7.1 0 12.8 5.8 12.7 12.9s-5.8 12.8-12.9 12.7c-7 0-12.7-5.8-12.8-12.8.1-7.1 5.8-12.9 13-12.8zm32 91.2h-64c-17.6 0-24.8-8.1-16-18l32-35.9c8.8-9.9 23.2-9.9 32 0l32 35.9c8.8 9.9 1.6 17.9-16 18z" />
|
|
4
|
+
</svg>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export const reusableBlockMarker = <svg viewBox="0 0 24 24">
|
|
2
|
+
<path d="M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-1 1.4l-5.6 5.6c-.1.1-.3.1-.4 0l-5.6-5.6c-.1-.1-.1-.3 0-.4l5.6-5.6s.1-.1.2-.1.1 0 .2.1l5.6 5.6c.1.1.1.3 0 .4zm-16.6-.4L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z" />
|
|
3
|
+
</svg>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// =============================================
|
|
2
2
|
// Allows sharing of assets in block configurations
|
|
3
3
|
// =============================================
|
|
4
|
+
|
|
4
5
|
export * from './plaudit-icons/column-1';
|
|
5
6
|
export * from './plaudit-icons/column-2';
|
|
6
7
|
export * from './plaudit-icons/column-3';
|
|
@@ -10,4 +11,3 @@ export * from './plaudit-icons/placement-end';
|
|
|
10
11
|
export * from './plaudit-icons/placement-stretch';
|
|
11
12
|
export * from './plaudit-icons/plaudit-icon';
|
|
12
13
|
export * from './plaudit-icons/reusable-block-marker';
|
|
13
|
-
//# sourceMappingURL=plaudit-icons.js.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
type WrappedPromiseEnhancements<T> = {value: T, status: 'fulfilled'}|{reason: unknown, status: 'rejected'};
|
|
2
|
+
export type WrappedPromise<T> = Promise<T>&({status: 'pending'}|WrappedPromiseEnhancements<T>);
|
|
3
|
+
export type PartiallyWrappedPromise<T> = Promise<T>&({status?: 'pending'}|WrappedPromiseEnhancements<T>);
|
|
4
|
+
export function isWrappedPromise<T>(promise: Promise<T>): promise is WrappedPromise<T> {
|
|
5
|
+
return 'status' in promise
|
|
6
|
+
&& (promise.status === 'pending' || (promise.status === 'fulfilled' && 'value' in promise) || (promise.status === 'rejected' && 'reason' in promise));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function use<T>(promise: PartiallyWrappedPromise<T>): T {
|
|
10
|
+
switch (promise.status) {
|
|
11
|
+
case "pending":
|
|
12
|
+
throw promise;
|
|
13
|
+
case "fulfilled":
|
|
14
|
+
return promise.value;
|
|
15
|
+
case "rejected":
|
|
16
|
+
throw promise.reason;
|
|
17
|
+
default:
|
|
18
|
+
return use(actuallyWrapPromise(promise));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function useImmediately<T>(promise: PartiallyWrappedPromise<T>): T|undefined {
|
|
23
|
+
switch (promise.status) {
|
|
24
|
+
case "pending":
|
|
25
|
+
return undefined;
|
|
26
|
+
case "fulfilled":
|
|
27
|
+
return promise.value;
|
|
28
|
+
case "rejected":
|
|
29
|
+
throw promise.reason;
|
|
30
|
+
default:
|
|
31
|
+
return useImmediately(actuallyWrapPromise(promise));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function useToPromise<T>(promise: PartiallyWrappedPromise<T>): Promise<T> {
|
|
36
|
+
switch (promise.status) {
|
|
37
|
+
case "pending":
|
|
38
|
+
throw promise;
|
|
39
|
+
case "fulfilled":
|
|
40
|
+
return Promise.resolve(promise.value);
|
|
41
|
+
case "rejected":
|
|
42
|
+
throw promise.reason;
|
|
43
|
+
default:
|
|
44
|
+
return useToPromise(actuallyWrapPromise(promise));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function wrapPromise<T>(promise: PartiallyWrappedPromise<T>): WrappedPromise<T> {
|
|
49
|
+
return isWrappedPromise(promise) ? promise : actuallyWrapPromise(promise);
|
|
50
|
+
}
|
|
51
|
+
function actuallyWrapPromise<T>(promise: PartiallyWrappedPromise<T>): WrappedPromise<T> {
|
|
52
|
+
promise.status = 'pending';
|
|
53
|
+
promise.then(
|
|
54
|
+
value => {
|
|
55
|
+
(promise as PartiallyWrappedPromise<T>).status = 'fulfilled';
|
|
56
|
+
(promise as any).value = value;
|
|
57
|
+
},
|
|
58
|
+
reason => {
|
|
59
|
+
(promise as PartiallyWrappedPromise<T>).status = 'rejected';
|
|
60
|
+
(promise as any).reason = reason;
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
return promise as WrappedPromise<T>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function getPromiseState(promise: PartiallyWrappedPromise<any>) {
|
|
67
|
+
return wrapPromise(promise).status;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function isPromise<T>(value: any): value is Promise<T> {
|
|
71
|
+
return typeof value === 'object' && !!value && ('then' in value) && typeof value['then'] === 'function';
|
|
72
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {Spinner} from "@wordpress/components";
|
|
2
|
+
|
|
3
|
+
import {InspectorPanel} from "../controls";
|
|
4
|
+
|
|
5
|
+
export * from "./suspense/promise-handlers";
|
|
6
|
+
|
|
7
|
+
import {type ReactNode, Suspense, type SuspenseProps} from "react";
|
|
8
|
+
|
|
9
|
+
type OptionallySuspensefulProps = Omit<SuspenseProps, 'children'>&{children: ReactNode|(() => ReactNode), hasSuspensefulOptions: (() => boolean)|boolean};
|
|
10
|
+
export function OptionallySuspenseful({children: Children, hasSuspensefulOptions, ...props}: OptionallySuspensefulProps) {
|
|
11
|
+
if (typeof hasSuspensefulOptions === 'function' ? hasSuspensefulOptions() : hasSuspensefulOptions) {
|
|
12
|
+
return <Suspense fallback={<InspectorPanel opened initialOpen><Spinner/> Loading options</InspectorPanel>} {...props}>{
|
|
13
|
+
typeof Children === 'function' ? <Children/> : Children
|
|
14
|
+
}</Suspense>;
|
|
15
|
+
} else {
|
|
16
|
+
return typeof Children === 'function' ? <Children/> : Children;
|
|
17
|
+
}
|
|
18
|
+
}
|