diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks.js b/packages/plugins/blocks/blocks-loaders/src/blocks.js
index f58c1358f..38c1ad444 100644
--- a/packages/plugins/blocks/blocks-loaders/src/blocks.js
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks.js
@@ -15,6 +15,7 @@
*/
export { default as IconSpinner } from './blocks/IconSpinner/IconSpinner.js';
+export { default as ProgressBar } from './blocks/ProgressBar/ProgressBar.js';
export { default as Skeleton } from './blocks/Skeleton/Skeleton.js';
export { default as SkeletonAvatar } from './blocks/SkeletonAvatar/SkeletonAvatar.js';
export { default as SkeletonButton } from './blocks/SkeletonButton/SkeletonButton.js';
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/ProgressBar.js b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/ProgressBar.js
new file mode 100644
index 000000000..91a9b6a3e
--- /dev/null
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/ProgressBar.js
@@ -0,0 +1,62 @@
+/*
+ Copyright 2020-2021 Lowdefy, Inc
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import React, { forwardRef } from 'react';
+import { blockDefaultProps } from '@lowdefy/block-utils';
+
+const ProgressBar = ({ blockId, methods, style, properties, content }) => {
+ const {
+ progress = 30,
+ height = 3,
+ // color = 'red', // TODO: get primary from theme ??
+ transitionTime = 1000,
+ // loaderSpeed = 500,
+ // waitingTime = 1000,
+ shadow = true,
+ } = properties;
+
+ return (
+ <>
+
+ {content.content && content.content()}
+ >
+ );
+};
+
+ProgressBar.defaultProps = blockDefaultProps;
+ProgressBar.meta = {
+ category: 'container',
+ loading: false,
+ icons: [],
+ styles: ['blocks/ProgressBar/style.less'],
+};
+
+export default forwardRef(ProgressBar);
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/ProgressBar.test.js b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/ProgressBar.test.js
new file mode 100644
index 000000000..8e858fb21
--- /dev/null
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/ProgressBar.test.js
@@ -0,0 +1,30 @@
+/*
+ Copyright 2020-2021 Lowdefy, Inc
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import { runBlockSchemaTests, runRenderTests } from '@lowdefy/block-dev';
+
+import Block from './ProgressBar.js';
+import examples from './examples.yaml';
+import schema from './schema.json';
+
+const testConfig = {
+ validation: true,
+ required: true,
+ values: [],
+};
+
+runRenderTests({ Block, examples, schema, testConfig });
+runBlockSchemaTests({ examples, schema });
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/__snapshots__/Skeleton.test.js.snap b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/__snapshots__/Skeleton.test.js.snap
new file mode 100644
index 000000000..9f1d3bb97
--- /dev/null
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/__snapshots__/Skeleton.test.js.snap
@@ -0,0 +1,55 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Render default - value[0] 1`] = `
+
+`;
+
+exports[`Render required = true default - value[0] 1`] = `
+
+`;
+
+exports[`Render required = true sizedefault - value[0] 1`] = `
+
+`;
+
+exports[`Render required = true sizesmall - value[0] 1`] = `
+
+`;
+
+exports[`Render sizedefault - value[0] 1`] = `
+
+`;
+
+exports[`Render sizesmall - value[0] 1`] = `
+
+`;
+
+exports[`Test Schema default 1`] = `true`;
+
+exports[`Test Schema default 2`] = `null`;
+
+exports[`Test Schema sizedefault 1`] = `true`;
+
+exports[`Test Schema sizedefault 2`] = `null`;
+
+exports[`Test Schema sizesmall 1`] = `true`;
+
+exports[`Test Schema sizesmall 2`] = `null`;
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/examples.yaml b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/examples.yaml
new file mode 100644
index 000000000..22d3ea2a0
--- /dev/null
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/examples.yaml
@@ -0,0 +1,16 @@
+# Copyright 2020-2021 Lowdefy, Inc
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- id: default
+ type: ProgressBar
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/schema.json b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/schema.json
new file mode 100644
index 000000000..03424fa0b
--- /dev/null
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/schema.json
@@ -0,0 +1,29 @@
+{
+ "type": "object",
+ "properties": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "style": {
+ "type": "object",
+ "description": "Css style object to apply to the skeleton.",
+ "docs": {
+ "displayType": "yaml"
+ }
+ },
+ "height": {
+ "type": ["number", "string"],
+ "description": "Height of the skeleton."
+ },
+ "width": {
+ "type": ["number", "string"],
+ "description": "Width of the skeleton."
+ }
+ }
+ },
+ "events": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {}
+ }
+}
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/style.less b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/style.less
new file mode 100644
index 000000000..29b389d0b
--- /dev/null
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/ProgressBar/style.less
@@ -0,0 +1,43 @@
+/*
+ Copyright 2020-2021 Lowdefy, Inc
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+.progress-bar-loader {
+ height: 100%;
+ width: var(--progress); // initial 0%
+ background: @primary-color; // TODO: test if this works
+ transition: var(--transition);
+ opacity: var(--opacity);
+}
+
+.progress-bar-container {
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: var(--height);
+ z-index: 99999999999;
+ width: 100%;
+}
+
+.progress-bar-shadow {
+ box-shadow: 0 0 10px @primary-color, 0 0 10px @primary-color;
+ width: 20px;
+ opacity: 1;
+ position: absolute;
+ height: 100%;
+ transition: var(--transition);
+ transform: rotate(3deg) translate(0px, -4px);
+ left: calc(var(--progress) - 20px); // initial -10rem
+}
diff --git a/packages/plugins/blocks/blocks-loaders/src/blocks/Spinner/style.less b/packages/plugins/blocks/blocks-loaders/src/blocks/Spinner/style.less
index 01babdd96..92ce21bc4 100644
--- a/packages/plugins/blocks/blocks-loaders/src/blocks/Spinner/style.less
+++ b/packages/plugins/blocks/blocks-loaders/src/blocks/Spinner/style.less
@@ -13,5 +13,3 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
-
-@import '../LogoSpinner/style.less';