From 6baa3b4e89a612eaf683575ae60ff93f622b2703 Mon Sep 17 00:00:00 2001 From: Vero Date: Tue, 25 Feb 2025 14:24:13 +0100 Subject: [PATCH 1/8] Created progressIndicator rich component --- package-lock.json | 14 ++- public/rich-components/progressIndicator.svg | 32 ++++++ .../front-rich-components/index.ts | 1 + .../progressIndicator/index.ts | 1 + .../progressIndicator/progressIndicator.tsx | 103 ++++++++++++++++++ .../progressIndicator.utils.ts | 10 ++ src/core/model/index.ts | 4 +- .../canvas/model/inline-editable.model.ts | 3 + .../canvas/model/shape-other-props.utils.ts | 7 ++ src/pods/canvas/model/shape-size.mapper.ts | 2 + src/pods/canvas/shape-renderer/index.tsx | 3 + .../simple-rich-components/index.ts | 23 ++-- .../progressIndicator.renderer.tsx | 34 ++++++ .../rich-components-gallery-data/index.ts | 4 + .../components/icon-selector/modal/icons.ts | 12 +- 15 files changed, 229 insertions(+), 24 deletions(-) create mode 100644 public/rich-components/progressIndicator.svg create mode 100644 src/common/components/mock-components/front-rich-components/progressIndicator/index.ts create mode 100644 src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx create mode 100644 src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts create mode 100644 src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx diff --git a/package-lock.json b/package-lock.json index ad6019ab..c8a6ac69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4675,9 +4675,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -4685,6 +4685,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5943,10 +5944,11 @@ } }, "node_modules/vite": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", - "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", diff --git a/public/rich-components/progressIndicator.svg b/public/rich-components/progressIndicator.svg new file mode 100644 index 00000000..2ef07401 --- /dev/null +++ b/public/rich-components/progressIndicator.svg @@ -0,0 +1,32 @@ + + + + + + 83% + \ No newline at end of file diff --git a/src/common/components/mock-components/front-rich-components/index.ts b/src/common/components/mock-components/front-rich-components/index.ts index 6f4b6869..cb1f2f14 100644 --- a/src/common/components/mock-components/front-rich-components/index.ts +++ b/src/common/components/mock-components/front-rich-components/index.ts @@ -14,3 +14,4 @@ export * from './appBar'; export * from './buttonBar/buttonBar'; export * from './tabsbar'; export * from './audio-player'; +export * from './progressIndicator/progressIndicator'; diff --git a/src/common/components/mock-components/front-rich-components/progressIndicator/index.ts b/src/common/components/mock-components/front-rich-components/progressIndicator/index.ts new file mode 100644 index 00000000..7589c396 --- /dev/null +++ b/src/common/components/mock-components/front-rich-components/progressIndicator/index.ts @@ -0,0 +1 @@ +export * from './progressIndicator'; diff --git a/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx b/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx new file mode 100644 index 00000000..3147130b --- /dev/null +++ b/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx @@ -0,0 +1,103 @@ +import { Circle, Group, Path, Text } from 'react-konva'; +import { ShapeSizeRestrictions, ShapeType } from '@/core/model'; +import { forwardRef } from 'react'; +import { ShapeProps } from '../../shape.model'; +import { fitSizeToShapeSizeRestrictions } from '@/common/utils/shapes/shape-restrictions'; +import { getProgressIndicatorPartsText } from './progressIndicator.utils'; +import { useShapeProps } from '../../../shapes/use-shape-props.hook'; + +import { BASIC_SHAPE } from '@/common/components/mock-components/front-components/shape.const'; +import { useGroupShapeProps } from '../../mock-components.utils'; + +const progressIndicatorShapeSizeRestrictions: ShapeSizeRestrictions = { + minWidth: 70, + minHeight: 70, + maxWidth: -1, + maxHeight: -1, + defaultWidth: 150, + defaultHeight: 150, +}; + +export const getProgressIndicatorShapeSizeRestrictions = + (): ShapeSizeRestrictions => progressIndicatorShapeSizeRestrictions; + +const shapeType: ShapeType = 'progressIndicator'; + +export const ProgressIndicator = forwardRef((props, ref) => { + const { + x, + y, + width, + height, + id, + onSelected, + text, + otherProps, + ...shapeProps + } = props; + const restrictedSize = fitSizeToShapeSizeRestrictions( + progressIndicatorShapeSizeRestrictions, + width, + height + ); + + const { width: restrictedWidth, height: restrictedHeight } = restrictedSize; + const { progressIndicatorTitle } = getProgressIndicatorPartsText(text); + const { fontSize } = useShapeProps(otherProps, BASIC_SHAPE); + const commonGroupProps = useGroupShapeProps( + props, + restrictedSize, + shapeType, + ref + ); + const { stroke, fill, textColor } = useShapeProps(otherProps, BASIC_SHAPE); + + const progress = Number(progressIndicatorTitle || '83'); + const size = Math.min(restrictedWidth, restrictedHeight); + const strokeWidth = Math.min(restrictedWidth, restrictedHeight) / 10; + const radius = (size - strokeWidth) / 2; + const center = size / 2; + const angle = (progress / 100.01) * 360; + const fontSizeScaled = fontSize * (size / 80); + const arcPath = () => { + const startAngle = -90; + const endAngle = startAngle + angle; + const largeArcFlag = angle > 180 ? 1 : 0; + const startX = center + radius * Math.cos((Math.PI * startAngle) / 180); + const startY = center + radius * Math.sin((Math.PI * startAngle) / 180); + const endX = center + radius * Math.cos((Math.PI * endAngle) / 180); + const endY = center + radius * Math.sin((Math.PI * endAngle) / 180); + return `M ${startX} ${startY} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`; + }; + return ( + + {/* Background */} + + + {/* Moving Arc */} + + + {/* Percent */} + + + ); +}); diff --git a/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts b/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts new file mode 100644 index 00000000..31a3e161 --- /dev/null +++ b/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts @@ -0,0 +1,10 @@ +interface ProgressIndicatorPartsText { + progressIndicatorTitle: string; +} +export const getProgressIndicatorPartsText = ( + text: string +): ProgressIndicatorPartsText => { + let progressIndicatorTitle = text ? text.replace(/\r?\n|\r/g, '').trim() : ''; + + return { progressIndicatorTitle }; +}; diff --git a/src/core/model/index.ts b/src/core/model/index.ts index a9aa3d74..24d734b6 100644 --- a/src/core/model/index.ts +++ b/src/core/model/index.ts @@ -69,7 +69,8 @@ export type ShapeType = | 'tooltip' | 'slider' | 'link' - | 'richtext'; + | 'richtext' + | 'progressIndicator'; export const ShapeDisplayName: Record = { multiple: 'multiple', @@ -129,6 +130,7 @@ export const ShapeDisplayName: Record = { tooltip: 'Tooltip', slider: 'Slider', richtext: 'Rich Text', + progressIndicator: 'ProgressIndicator', }; export type EditType = 'input' | 'textarea' | 'imageupload'; diff --git a/src/pods/canvas/model/inline-editable.model.ts b/src/pods/canvas/model/inline-editable.model.ts index a4f0cef0..63a36c01 100644 --- a/src/pods/canvas/model/inline-editable.model.ts +++ b/src/pods/canvas/model/inline-editable.model.ts @@ -36,6 +36,7 @@ const inlineEditableShapes = new Set([ 'datepickerinput', 'browser', 'modalDialog', + 'progressIndicator', ]); // Check if a shape type allows inline editing @@ -106,6 +107,7 @@ const defaultTextValueMap: Partial> = { modal: 'Alert\nWarning: The action you are about to perform may affect existing data. Are you sure you want to proceed? Once confirmed, this action cannot be undone.\nConfirm,Cancel', appBar: 'AppBar', + progressIndicator: '83%', buttonBar: 'Button 1, Button 2, Button 3', tabsBar: 'Tab 1, Tab 2, Tab 3', link: 'Link', @@ -139,6 +141,7 @@ export const getShapeEditInlineType = ( case 'vertical-menu': case 'table': case 'modal': + case 'progressIndicator': case 'appBar': case 'tabsBar': case 'tooltip': diff --git a/src/pods/canvas/model/shape-other-props.utils.ts b/src/pods/canvas/model/shape-other-props.utils.ts index 09f1b56d..d23084ef 100644 --- a/src/pods/canvas/model/shape-other-props.utils.ts +++ b/src/pods/canvas/model/shape-other-props.utils.ts @@ -66,6 +66,13 @@ export const generateDefaultOtherProps = ( disabled: BASIC_SHAPE.DEFAULT_DISABLED, }; case 'modal': + case 'progressIndicator': + return { + backgroundColor: '#d3d3d3', + stroke: '#808080', + textColor: BASIC_SHAPE.DEFAULT_FILL_TEXT, + strokeStyle: [], + }; case 'buttonBar': return { stroke: BASIC_SHAPE.DEFAULT_STROKE_COLOR, diff --git a/src/pods/canvas/model/shape-size.mapper.ts b/src/pods/canvas/model/shape-size.mapper.ts index 583e7284..0c5a9a51 100644 --- a/src/pods/canvas/model/shape-size.mapper.ts +++ b/src/pods/canvas/model/shape-size.mapper.ts @@ -58,6 +58,7 @@ import { getTabsBarShapeSizeRestrictions, getVerticalMenuShapeSizeRestrictions, getVideoPlayerShapeSizeRestrictions, + getProgressIndicatorShapeSizeRestrictions, // other imports } from '@/common/components/mock-components/front-rich-components'; import { @@ -140,6 +141,7 @@ const shapeSizeMap: Record ShapeSizeRestrictions> = { tooltip: getTooltipShapeSizeRestrictions, slider: getSliderShapeSizeRestrictions, audioPlayer: getAudioPlayerShapeSizeRestrictions, + progressIndicator: getProgressIndicatorShapeSizeRestrictions, }; export default shapeSizeMap; diff --git a/src/pods/canvas/shape-renderer/index.tsx b/src/pods/canvas/shape-renderer/index.tsx index 1ee9a3d5..50369c60 100644 --- a/src/pods/canvas/shape-renderer/index.tsx +++ b/src/pods/canvas/shape-renderer/index.tsx @@ -41,6 +41,7 @@ import { renderModal, renderButtonBar, renderTabsBar, + renderProgressIndicator, } from './simple-rich-components'; import { renderDiamond, @@ -185,6 +186,8 @@ export const renderShapeComponent = ( return renderTooltip(shape, shapeRenderedProps); case 'slider': return renderSlider(shape, shapeRenderedProps); + case 'progressIndicator': + return renderProgressIndicator(shape, shapeRenderedProps); default: return renderNotFound(shape, shapeRenderedProps); } diff --git a/src/pods/canvas/shape-renderer/simple-rich-components/index.ts b/src/pods/canvas/shape-renderer/simple-rich-components/index.ts index 5690997e..1b861c18 100644 --- a/src/pods/canvas/shape-renderer/simple-rich-components/index.ts +++ b/src/pods/canvas/shape-renderer/simple-rich-components/index.ts @@ -1,16 +1,17 @@ -export * from './video-player.renderer'; export * from './accordion.renderer'; -export * from './pie-chart.renderer'; -export * from './horizontal-menu.renderer'; -export * from './map-chart.renderer'; -export * from './breadcrumb.renderer'; +export * from './appBar.renderer'; +export * from './audio-player.renderer'; export * from './bar-chart.renderer'; -export * from './line-chart.renderer'; -export * from './vertical-menu.renderer'; +export * from './breadcrumb.renderer'; +export * from './button-bar.renderer'; export * from './calendar.renderer'; -export * from './table.renderer'; +export * from './horizontal-menu.renderer'; +export * from './line-chart.renderer'; +export * from './map-chart.renderer'; export * from './modal.renderer'; -export * from './appBar.renderer'; -export * from './button-bar.renderer'; +export * from './pie-chart.renderer'; +export * from './progressIndicator.renderer'; +export * from './table.renderer'; export * from './tabsbar.renderer'; -export * from './audio-player.renderer'; +export * from './vertical-menu.renderer'; +export * from './video-player.renderer'; diff --git a/src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx b/src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx new file mode 100644 index 00000000..7655ea24 --- /dev/null +++ b/src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx @@ -0,0 +1,34 @@ +import { ProgressIndicator } from '@/common/components/mock-components/front-rich-components'; +import { ShapeRendererProps } from '../model'; +import { ShapeModel } from '@/core/model'; + +export const renderProgressIndicator = ( + shape: ShapeModel, + shapeRenderedProps: ShapeRendererProps +) => { + const { handleSelected, shapeRefs, handleDragEnd, handleTransform } = + shapeRenderedProps; + + return ( + + ); +}; diff --git a/src/pods/galleries/rich-components-gallery/rich-components-gallery-data/index.ts b/src/pods/galleries/rich-components-gallery/rich-components-gallery-data/index.ts index 983d76ae..1fb86166 100644 --- a/src/pods/galleries/rich-components-gallery/rich-components-gallery-data/index.ts +++ b/src/pods/galleries/rich-components-gallery/rich-components-gallery-data/index.ts @@ -15,6 +15,10 @@ export const mockRichComponentsCollection: ItemInfo[] = [ { thumbnailSrc: '/rich-components/line-chart.svg', type: 'linechart' }, { thumbnailSrc: '/rich-components/map.svg', type: 'map' }, { thumbnailSrc: '/rich-components/modal.svg', type: 'modal' }, + { + thumbnailSrc: '/rich-components/progressIndicator.svg', + type: 'progressIndicator', + }, { thumbnailSrc: '/rich-components/pie.svg', type: 'pie' }, { thumbnailSrc: '/rich-components/table.svg', type: 'table' }, { thumbnailSrc: '/rich-components/tabsbar.svg', type: 'tabsBar' }, diff --git a/src/pods/properties/components/icon-selector/modal/icons.ts b/src/pods/properties/components/icon-selector/modal/icons.ts index 4fee72bf..bee37374 100644 --- a/src/pods/properties/components/icon-selector/modal/icons.ts +++ b/src/pods/properties/components/icon-selector/modal/icons.ts @@ -1877,15 +1877,15 @@ export const iconCollection: IconInfo[] = [ categories: ['IT'], }, { - name: 'Spinner', - filename: 'spinner.svg', - searchTerms: ['spinner', 'loading', 'wait', 'progress'], + name: 'ProgressIndicator', + filename: 'progressIndicator.svg', + searchTerms: ['progressIndicator', 'loading', 'wait', 'progress'], categories: ['IT'], }, { - name: 'Spinner gap', - filename: 'spinnergap.svg', - searchTerms: ['spinner', 'loading', 'wait', 'progress'], + name: 'ProgressIndicator gap', + filename: 'progressIndicatorgap.svg', + searchTerms: ['progressIndicator', 'loading', 'wait', 'progress'], categories: ['IT'], }, { From bc3e618983b8756d5dd216e4dfde87377d0c0b88 Mon Sep 17 00:00:00 2001 From: Vero <110673488+vcamarzana@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:58:48 +0100 Subject: [PATCH 2/8] Fix duplicate 'richtext' at index.ts --- src/core/model/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/model/index.ts b/src/core/model/index.ts index 9a9f0c08..61fa099b 100644 --- a/src/core/model/index.ts +++ b/src/core/model/index.ts @@ -70,7 +70,6 @@ export type ShapeType = | 'tooltip' | 'slider' | 'link' - | 'richtext' | 'progressIndicator'; | 'cilinder' | 'videoconference' From bb22e2b5c6afd052dfb5c52b55ad1d1777e9315b Mon Sep 17 00:00:00 2001 From: Vero <110673488+vcamarzana@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:04:43 +0100 Subject: [PATCH 3/8] Update index.ts --- src/core/model/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/model/index.ts b/src/core/model/index.ts index 61fa099b..cc2e6440 100644 --- a/src/core/model/index.ts +++ b/src/core/model/index.ts @@ -70,7 +70,7 @@ export type ShapeType = | 'tooltip' | 'slider' | 'link' - | 'progressIndicator'; + | 'progressIndicator' | 'cilinder' | 'videoconference' | 'richtext'; From 8a450a4b22d34f4f08ba271828c4376a71174356 Mon Sep 17 00:00:00 2001 From: Vero Date: Thu, 27 Feb 2025 15:04:40 +0100 Subject: [PATCH 4/8] Applied PR feedback for Gauge component --- .../{progressIndicator.svg => gauge.svg} | 0 .../progressIndicator.tsx => gauge/gauge.tsx} | 31 ++++++++++++------- .../gauge/gauge.utils.ts | 8 +++++ .../front-rich-components/gauge/index.ts | 1 + .../front-rich-components/index.ts | 3 +- .../progressIndicator/index.ts | 1 - .../progressIndicator.utils.ts | 10 ------ src/core/model/index.ts | 7 ++--- .../canvas/model/inline-editable.model.ts | 6 ++-- .../canvas/model/shape-other-props.utils.ts | 3 +- src/pods/canvas/model/shape-size.mapper.ts | 4 +-- src/pods/canvas/shape-renderer/index.tsx | 7 +++-- ...icator.renderer.tsx => gauge.renderer.tsx} | 6 ++-- .../simple-rich-components/index.ts | 2 +- .../rich-components-gallery-data/index.ts | 4 +-- .../components/icon-selector/modal/icons.ts | 12 +++---- 16 files changed, 54 insertions(+), 51 deletions(-) rename public/rich-components/{progressIndicator.svg => gauge.svg} (100%) rename src/common/components/mock-components/front-rich-components/{progressIndicator/progressIndicator.tsx => gauge/gauge.tsx} (77%) create mode 100644 src/common/components/mock-components/front-rich-components/gauge/gauge.utils.ts create mode 100644 src/common/components/mock-components/front-rich-components/gauge/index.ts delete mode 100644 src/common/components/mock-components/front-rich-components/progressIndicator/index.ts delete mode 100644 src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts rename src/pods/canvas/shape-renderer/simple-rich-components/{progressIndicator.renderer.tsx => gauge.renderer.tsx} (83%) diff --git a/public/rich-components/progressIndicator.svg b/public/rich-components/gauge.svg similarity index 100% rename from public/rich-components/progressIndicator.svg rename to public/rich-components/gauge.svg diff --git a/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx b/src/common/components/mock-components/front-rich-components/gauge/gauge.tsx similarity index 77% rename from src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx rename to src/common/components/mock-components/front-rich-components/gauge/gauge.tsx index 3147130b..409144ba 100644 --- a/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.tsx +++ b/src/common/components/mock-components/front-rich-components/gauge/gauge.tsx @@ -3,13 +3,13 @@ import { ShapeSizeRestrictions, ShapeType } from '@/core/model'; import { forwardRef } from 'react'; import { ShapeProps } from '../../shape.model'; import { fitSizeToShapeSizeRestrictions } from '@/common/utils/shapes/shape-restrictions'; -import { getProgressIndicatorPartsText } from './progressIndicator.utils'; import { useShapeProps } from '../../../shapes/use-shape-props.hook'; import { BASIC_SHAPE } from '@/common/components/mock-components/front-components/shape.const'; import { useGroupShapeProps } from '../../mock-components.utils'; +import { getGaugePartsText } from './gauge.utils'; -const progressIndicatorShapeSizeRestrictions: ShapeSizeRestrictions = { +const gaugeShapeSizeRestrictions: ShapeSizeRestrictions = { minWidth: 70, minHeight: 70, maxWidth: -1, @@ -18,12 +18,12 @@ const progressIndicatorShapeSizeRestrictions: ShapeSizeRestrictions = { defaultHeight: 150, }; -export const getProgressIndicatorShapeSizeRestrictions = - (): ShapeSizeRestrictions => progressIndicatorShapeSizeRestrictions; +export const getGaugeShapeSizeRestrictions = (): ShapeSizeRestrictions => + gaugeShapeSizeRestrictions; -const shapeType: ShapeType = 'progressIndicator'; +const shapeType: ShapeType = 'gauge'; -export const ProgressIndicator = forwardRef((props, ref) => { +export const Gauge = forwardRef((props, ref) => { const { x, y, @@ -36,13 +36,13 @@ export const ProgressIndicator = forwardRef((props, ref) => { ...shapeProps } = props; const restrictedSize = fitSizeToShapeSizeRestrictions( - progressIndicatorShapeSizeRestrictions, + gaugeShapeSizeRestrictions, width, height ); const { width: restrictedWidth, height: restrictedHeight } = restrictedSize; - const { progressIndicatorTitle } = getProgressIndicatorPartsText(text); + const { gaugeValue } = getGaugePartsText(text); const { fontSize } = useShapeProps(otherProps, BASIC_SHAPE); const commonGroupProps = useGroupShapeProps( props, @@ -52,13 +52,19 @@ export const ProgressIndicator = forwardRef((props, ref) => { ); const { stroke, fill, textColor } = useShapeProps(otherProps, BASIC_SHAPE); - const progress = Number(progressIndicatorTitle || '83'); + const parsedValue = gaugeValue?.trim().endsWith('%') + ? gaugeValue.slice(0, -1) + : gaugeValue; + const progress = Number(parsedValue) || 10; + const showPercentage = gaugeValue?.trim().endsWith('%'); + const size = Math.min(restrictedWidth, restrictedHeight); const strokeWidth = Math.min(restrictedWidth, restrictedHeight) / 10; const radius = (size - strokeWidth) / 2; const center = size / 2; const angle = (progress / 100.01) * 360; const fontSizeScaled = fontSize * (size / 80); + console.log(radius, center, angle, fontSizeScaled); const arcPath = () => { const startAngle = -90; const endAngle = startAngle + angle; @@ -86,14 +92,15 @@ export const ProgressIndicator = forwardRef((props, ref) => { {/* Percent */} { + let gaugeValue = text ? text.replace(/\r?\n|\r/g, '').trim() : ''; + + return { gaugeValue }; +}; diff --git a/src/common/components/mock-components/front-rich-components/gauge/index.ts b/src/common/components/mock-components/front-rich-components/gauge/index.ts new file mode 100644 index 00000000..72f8d539 --- /dev/null +++ b/src/common/components/mock-components/front-rich-components/gauge/index.ts @@ -0,0 +1 @@ +export * from './gauge'; diff --git a/src/common/components/mock-components/front-rich-components/index.ts b/src/common/components/mock-components/front-rich-components/index.ts index 24cd8ddc..9c887086 100644 --- a/src/common/components/mock-components/front-rich-components/index.ts +++ b/src/common/components/mock-components/front-rich-components/index.ts @@ -14,7 +14,6 @@ export * from './appBar'; export * from './buttonBar/buttonBar'; export * from './tabsbar'; export * from './audio-player'; -export * from './progressIndicator/progressIndicator'; - export * from './videoconference'; export * from './togglelightdark-shape'; +export * from './gauge/gauge'; diff --git a/src/common/components/mock-components/front-rich-components/progressIndicator/index.ts b/src/common/components/mock-components/front-rich-components/progressIndicator/index.ts deleted file mode 100644 index 7589c396..00000000 --- a/src/common/components/mock-components/front-rich-components/progressIndicator/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './progressIndicator'; diff --git a/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts b/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts deleted file mode 100644 index 31a3e161..00000000 --- a/src/common/components/mock-components/front-rich-components/progressIndicator/progressIndicator.utils.ts +++ /dev/null @@ -1,10 +0,0 @@ -interface ProgressIndicatorPartsText { - progressIndicatorTitle: string; -} -export const getProgressIndicatorPartsText = ( - text: string -): ProgressIndicatorPartsText => { - let progressIndicatorTitle = text ? text.replace(/\r?\n|\r/g, '').trim() : ''; - - return { progressIndicatorTitle }; -}; diff --git a/src/core/model/index.ts b/src/core/model/index.ts index cc2e6440..d59ea42d 100644 --- a/src/core/model/index.ts +++ b/src/core/model/index.ts @@ -70,11 +70,10 @@ export type ShapeType = | 'tooltip' | 'slider' | 'link' - | 'progressIndicator' | 'cilinder' | 'videoconference' - | 'richtext'; - + | 'richtext' + | 'gauge'; export const ShapeDisplayName: Record = { multiple: 'multiple', @@ -135,9 +134,9 @@ export const ShapeDisplayName: Record = { tooltip: 'Tooltip', slider: 'Slider', richtext: 'Rich Text', - progressIndicator: 'ProgressIndicator', cilinder: 'Cilinder', videoconference: 'Videoconference', + gauge: 'Gauge', }; export type EditType = 'input' | 'textarea' | 'imageupload'; diff --git a/src/pods/canvas/model/inline-editable.model.ts b/src/pods/canvas/model/inline-editable.model.ts index 63a36c01..8facc991 100644 --- a/src/pods/canvas/model/inline-editable.model.ts +++ b/src/pods/canvas/model/inline-editable.model.ts @@ -36,7 +36,7 @@ const inlineEditableShapes = new Set([ 'datepickerinput', 'browser', 'modalDialog', - 'progressIndicator', + 'gauge', ]); // Check if a shape type allows inline editing @@ -107,7 +107,7 @@ const defaultTextValueMap: Partial> = { modal: 'Alert\nWarning: The action you are about to perform may affect existing data. Are you sure you want to proceed? Once confirmed, this action cannot be undone.\nConfirm,Cancel', appBar: 'AppBar', - progressIndicator: '83%', + gauge: '10%', buttonBar: 'Button 1, Button 2, Button 3', tabsBar: 'Tab 1, Tab 2, Tab 3', link: 'Link', @@ -141,7 +141,7 @@ export const getShapeEditInlineType = ( case 'vertical-menu': case 'table': case 'modal': - case 'progressIndicator': + case 'gauge': case 'appBar': case 'tabsBar': case 'tooltip': diff --git a/src/pods/canvas/model/shape-other-props.utils.ts b/src/pods/canvas/model/shape-other-props.utils.ts index c17b55ba..30652e32 100644 --- a/src/pods/canvas/model/shape-other-props.utils.ts +++ b/src/pods/canvas/model/shape-other-props.utils.ts @@ -67,12 +67,11 @@ export const generateDefaultOtherProps = ( disabled: BASIC_SHAPE.DEFAULT_DISABLED, }; case 'modal': - case 'progressIndicator': + case 'gauge': return { backgroundColor: '#d3d3d3', stroke: '#808080', textColor: BASIC_SHAPE.DEFAULT_FILL_TEXT, - strokeStyle: [], }; case 'buttonBar': return { diff --git a/src/pods/canvas/model/shape-size.mapper.ts b/src/pods/canvas/model/shape-size.mapper.ts index 08cd37ce..e723c809 100644 --- a/src/pods/canvas/model/shape-size.mapper.ts +++ b/src/pods/canvas/model/shape-size.mapper.ts @@ -60,8 +60,8 @@ import { getToggleLightDarkShapeSizeRestrictions, getVerticalMenuShapeSizeRestrictions, getVideoPlayerShapeSizeRestrictions, - getProgressIndicatorShapeSizeRestrictions, getVideoconferenceShapeSizeRestrictions, + getGaugeShapeSizeRestrictions, // other imports } from '@/common/components/mock-components/front-rich-components'; import { @@ -145,9 +145,9 @@ const shapeSizeMap: Record ShapeSizeRestrictions> = { tooltip: getTooltipShapeSizeRestrictions, slider: getSliderShapeSizeRestrictions, audioPlayer: getAudioPlayerShapeSizeRestrictions, - progressIndicator: getProgressIndicatorShapeSizeRestrictions, cilinder: getCilinderShapeSizeRestrictions, videoconference: getVideoconferenceShapeSizeRestrictions, + gauge: getGaugeShapeSizeRestrictions, }; export default shapeSizeMap; diff --git a/src/pods/canvas/shape-renderer/index.tsx b/src/pods/canvas/shape-renderer/index.tsx index 7de0ece7..e7713685 100644 --- a/src/pods/canvas/shape-renderer/index.tsx +++ b/src/pods/canvas/shape-renderer/index.tsx @@ -41,9 +41,9 @@ import { renderModal, renderButtonBar, renderTabsBar, - renderProgressIndicator, renderToggleLightDark, renderVideoconference, + renderGauge, } from './simple-rich-components'; import { renderDiamond, @@ -191,12 +191,13 @@ export const renderShapeComponent = ( return renderTooltip(shape, shapeRenderedProps); case 'slider': return renderSlider(shape, shapeRenderedProps); - case 'progressIndicator': - return renderProgressIndicator(shape, shapeRenderedProps); case 'cilinder': return renderCilinder(shape, shapeRenderedProps); case 'videoconference': return renderVideoconference(shape, shapeRenderedProps); + case 'gauge': + return renderGauge(shape, shapeRenderedProps); + default: return renderNotFound(shape, shapeRenderedProps); } diff --git a/src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx b/src/pods/canvas/shape-renderer/simple-rich-components/gauge.renderer.tsx similarity index 83% rename from src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx rename to src/pods/canvas/shape-renderer/simple-rich-components/gauge.renderer.tsx index 7655ea24..07412cfb 100644 --- a/src/pods/canvas/shape-renderer/simple-rich-components/progressIndicator.renderer.tsx +++ b/src/pods/canvas/shape-renderer/simple-rich-components/gauge.renderer.tsx @@ -1,8 +1,8 @@ -import { ProgressIndicator } from '@/common/components/mock-components/front-rich-components'; +import { Gauge } from '@/common/components/mock-components/front-rich-components'; import { ShapeRendererProps } from '../model'; import { ShapeModel } from '@/core/model'; -export const renderProgressIndicator = ( +export const renderGauge = ( shape: ShapeModel, shapeRenderedProps: ShapeRendererProps ) => { @@ -10,7 +10,7 @@ export const renderProgressIndicator = ( shapeRenderedProps; return ( - Date: Thu, 27 Feb 2025 16:34:06 +0100 Subject: [PATCH 5/8] Update gauge.svg --- public/rich-components/gauge.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/rich-components/gauge.svg b/public/rich-components/gauge.svg index 2ef07401..56bcdaae 100644 --- a/public/rich-components/gauge.svg +++ b/public/rich-components/gauge.svg @@ -16,7 +16,7 @@ stroke="#808080" stroke-width="10" stroke-dasharray="283" - stroke-dashoffset="48" + stroke-dashoffset="255" transform="rotate(-90 50 50)" /> @@ -28,5 +28,5 @@ font-size="24" font-family="Arial, sans-serif" font-weight="bold" - >83% - \ No newline at end of file + >10% + From 2da2c748446d1a17d412d027e49bf09ffb770758 Mon Sep 17 00:00:00 2001 From: Omar Lorenzo Date: Fri, 28 Feb 2025 11:47:23 +0000 Subject: [PATCH 6/8] Added Omar Lorenzo as member --- public/assets/omar-lorenzo.jpeg | Bin 0 -> 16532 bytes src/pods/about/members.ts | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 public/assets/omar-lorenzo.jpeg diff --git a/public/assets/omar-lorenzo.jpeg b/public/assets/omar-lorenzo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e6390ea40aebf5acd625e2d638901a4b80ccb1e5 GIT binary patch literal 16532 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 literal 0 HcmV?d00001 diff --git a/src/pods/about/members.ts b/src/pods/about/members.ts index 12f03175..9a21397b 100644 --- a/src/pods/about/members.ts +++ b/src/pods/about/members.ts @@ -167,4 +167,11 @@ export const memberList: Member[] = [ urlLinkedin: 'https://www.linkedin.com/in/brauliodiez/', image: './assets/braulio-diez.jpeg', }, + { + id: '22', + name: 'Omar', + surname: 'Lorenzo', + urlLinkedin: 'https://www.linkedin.com/in/omar-lorenzo-montelongo/', + image: './assets/omar-lorenzo.jpeg', + }, ]; From 966ac1b9b8e5e83e65cf86d85b8709de8c04f72b Mon Sep 17 00:00:00 2001 From: Braulio Date: Fri, 28 Feb 2025 20:53:04 +0100 Subject: [PATCH 7/8] updates --- index.html | 1 - src/pods/about/about.pod.tsx | 3 +-- src/pods/about/members.ts | 18 +++++++++--------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index d8affb1c..74734100 100644 --- a/index.html +++ b/index.html @@ -335,7 +335,6 @@

Share your ideas as low-fidelity mocks in minutes, perfect for getting started.

-

Community preview

diff --git a/src/pods/about/about.pod.tsx b/src/pods/about/about.pod.tsx index e2504672..702d43aa 100644 --- a/src/pods/about/about.pod.tsx +++ b/src/pods/about/about.pod.tsx @@ -9,8 +9,7 @@ export const AboutPod = () => {

Quickmock

-

Version 0.0

-

Community preview

+

Version 1.0

); diff --git a/src/pods/about/members.ts b/src/pods/about/members.ts index 9a21397b..955dd70c 100644 --- a/src/pods/about/members.ts +++ b/src/pods/about/members.ts @@ -145,6 +145,13 @@ export const memberList: Member[] = [ }, { id: '19', + name: 'Omar', + surname: 'Lorenzo', + urlLinkedin: 'https://www.linkedin.com/in/omar-lorenzo-montelongo/', + image: './assets/omar-lorenzo.jpeg', + }, + { + id: '20', name: 'Gabriel', surname: 'Ionut', urlLinkedin: 'https://www.linkedin.com/in/gabriel-ionut-birsan-b14816307/', @@ -152,7 +159,7 @@ export const memberList: Member[] = [ }, { - id: '20', + id: '21', name: 'Antonio', surname: 'Contreras', urlLinkedin: @@ -161,17 +168,10 @@ export const memberList: Member[] = [ }, { - id: '21', + id: '22', name: 'Braulio', surname: 'Diez', urlLinkedin: 'https://www.linkedin.com/in/brauliodiez/', image: './assets/braulio-diez.jpeg', }, - { - id: '22', - name: 'Omar', - surname: 'Lorenzo', - urlLinkedin: 'https://www.linkedin.com/in/omar-lorenzo-montelongo/', - image: './assets/omar-lorenzo.jpeg', - }, ]; From 368b92db5680b25e44d5c97bd2f7c85070411acc Mon Sep 17 00:00:00 2001 From: Vero Date: Fri, 28 Feb 2025 22:38:31 +0100 Subject: [PATCH 8/8] Improved gauge component --- .../front-rich-components/gauge/gauge.tsx | 23 +++++++++---------- .../gauge/gauge.utils.ts | 12 +++++----- .../canvas/model/inline-editable.model.ts | 2 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/common/components/mock-components/front-rich-components/gauge/gauge.tsx b/src/common/components/mock-components/front-rich-components/gauge/gauge.tsx index 409144ba..056566ae 100644 --- a/src/common/components/mock-components/front-rich-components/gauge/gauge.tsx +++ b/src/common/components/mock-components/front-rich-components/gauge/gauge.tsx @@ -7,7 +7,10 @@ import { useShapeProps } from '../../../shapes/use-shape-props.hook'; import { BASIC_SHAPE } from '@/common/components/mock-components/front-components/shape.const'; import { useGroupShapeProps } from '../../mock-components.utils'; -import { getGaugePartsText } from './gauge.utils'; +import { + endsWhithPercentageSymbol, + extractNumbersAsTwoDigitString, +} from './gauge.utils'; const gaugeShapeSizeRestrictions: ShapeSizeRestrictions = { minWidth: 70, @@ -42,7 +45,6 @@ export const Gauge = forwardRef((props, ref) => { ); const { width: restrictedWidth, height: restrictedHeight } = restrictedSize; - const { gaugeValue } = getGaugePartsText(text); const { fontSize } = useShapeProps(otherProps, BASIC_SHAPE); const commonGroupProps = useGroupShapeProps( props, @@ -52,11 +54,12 @@ export const Gauge = forwardRef((props, ref) => { ); const { stroke, fill, textColor } = useShapeProps(otherProps, BASIC_SHAPE); - const parsedValue = gaugeValue?.trim().endsWith('%') - ? gaugeValue.slice(0, -1) - : gaugeValue; - const progress = Number(parsedValue) || 10; - const showPercentage = gaugeValue?.trim().endsWith('%'); + const numericPart = extractNumbersAsTwoDigitString(text); + + const progress = Number(numericPart); + const displayValue = endsWhithPercentageSymbol(text) + ? `${numericPart}%` + : numericPart; const size = Math.min(restrictedWidth, restrictedHeight); const strokeWidth = Math.min(restrictedWidth, restrictedHeight) / 10; @@ -64,7 +67,6 @@ export const Gauge = forwardRef((props, ref) => { const center = size / 2; const angle = (progress / 100.01) * 360; const fontSizeScaled = fontSize * (size / 80); - console.log(radius, center, angle, fontSizeScaled); const arcPath = () => { const startAngle = -90; const endAngle = startAngle + angle; @@ -95,15 +97,12 @@ export const Gauge = forwardRef((props, ref) => { x={center - 10 - radius / 2} y={center - fontSizeScaled / 2} width={center + 10} - text={(parsedValue || '10%') + (showPercentage ? '%' : '')} + text={displayValue} fontFamily="Arial, sans-serif" fontSize={fontSizeScaled} align="center" fill={textColor} fontStyle="bold" - letterSpacing={1} - wrap="none" - ellipsis={true} /> ); diff --git a/src/common/components/mock-components/front-rich-components/gauge/gauge.utils.ts b/src/common/components/mock-components/front-rich-components/gauge/gauge.utils.ts index 8c13f1e3..0d23307c 100644 --- a/src/common/components/mock-components/front-rich-components/gauge/gauge.utils.ts +++ b/src/common/components/mock-components/front-rich-components/gauge/gauge.utils.ts @@ -1,8 +1,8 @@ -interface GaugePartsText { - gaugeValue: string; -} -export const getGaugePartsText = (text: string): GaugePartsText => { - let gaugeValue = text ? text.replace(/\r?\n|\r/g, '').trim() : ''; +export const extractNumbersAsTwoDigitString = (text: string): string => { + const numbersAsString = text.replace(/\D/g, ''); + return numbersAsString === '100' ? '100' : numbersAsString.slice(0, 2) || '0'; +}; - return { gaugeValue }; +export const endsWhithPercentageSymbol = (text: string): boolean => { + return text.trim().endsWith('%'); }; diff --git a/src/pods/canvas/model/inline-editable.model.ts b/src/pods/canvas/model/inline-editable.model.ts index 1f867e6b..b08668c4 100644 --- a/src/pods/canvas/model/inline-editable.model.ts +++ b/src/pods/canvas/model/inline-editable.model.ts @@ -79,6 +79,7 @@ const shapeTypesWithDefaultText = new Set([ 'browser', 'modalDialog', 'loading-indicator', + 'gauge', ]); // Map of ShapeTypes to their default text values @@ -144,7 +145,6 @@ export const getShapeEditInlineType = ( case 'vertical-menu': case 'table': case 'modal': - case 'gauge': case 'appBar': case 'tabsBar': case 'tooltip':