Skip to content

En: Shesha width handling#4534

Merged
AlexStepantsov merged 212 commits intomainfrom
form-component-width/3557
Mar 10, 2026
Merged

En: Shesha width handling#4534
AlexStepantsov merged 212 commits intomainfrom
form-component-width/3557

Conversation

@czwe-01
Copy link
Copy Markdown
Collaborator

@czwe-01 czwe-01 commented Feb 20, 2026

Shesha Width Properties Affecting the wrong width #3557

Summary by CodeRabbit

This PR resolves three critical rendering issues in the designer:

  1. Component Width Double-Application
    When a component's width was set to 50% in the designer, it would incorrectly render at 25% due to cascading style application. The wrapper element received a 50% width allocation, and the component itself also inherited 50% width from allStyles, resulting in a compounded calculation (50% × 50% = 25%).
  2. Form Item Width Calculation
    Form items displayed incorrect total widths because label dimensions were not accounted for in the width calculations.
  3. Viewport Unit Conversion in Designer Mode
    Viewport width (vw) units were not being converted to canvas-relative values within the designer environment. Consequently, components styled with 100vw would overflow beyond the canvas boundaries, as the calculation did not account for the screen space occupied by side panels.
  • New Features

    • Per-form-item margin control and richer styling options across form components
    • Consolidated thumbnail/appearance settings for file/attachment components
    • Conic gradient option for background styling
    • Device/designer-aware sizing and layout for form designer components
    • Custom actions added to form toolbar
  • Style

    • More consistent full-width/full-height rendering across inputs, panels and components
    • Responsive panel, sidebar and collapsible sizing improvements
    • Standardized spacing, padding and form-item classes
  • Bug Fixes

    • Improved dimension/zoom handling and layout/position accuracy in designer and runtime views

czwe-01 and others added 5 commits March 9, 2026 11:10
…idth

Thulasizwe/en/form components width
- Removed unnecessary newline at the end of the file in ConfigurableItemAutocompleteComponent.
- Cleaned up whitespace in the Factory function of RadioComponent for improved readability.
- Updated the index in the add method for RichTextEditorComponent to ensure correct style migration.
…idth

Thulasizwe/en/form components width
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
shesha-reactjs/src/designer-components/radio/radio.tsx (1)

41-44: ⚠️ Potential issue | 🟡 Minor

Replace any type with proper event type.

The any type on line 41 violates the coding guideline to eliminate any and use explicit type checking. Use the appropriate Radio event type.

Proposed fix
-          const onChangeInternal = (e: any): void => {
-            if (e.target) customEvents.onChange({ ...e, currentTarget: { value: e.target.value } });
+          const onChangeInternal = (e: RadioChangeEvent): void => {
+            if (e.target) customEvents.onChange({ ...e, currentTarget: { value: e.target.value } });

Note: RadioChangeEvent is already imported by RadioGroup from antd/lib/radio. You may need to add this import at the top of the file:

import type { RadioChangeEvent } from 'antd/lib/radio';

As per coding guidelines: "Eliminate the any type; use unknown type instead for values with unknown types, forcing explicit type checking."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shesha-reactjs/src/designer-components/radio/radio.tsx` around lines 41 - 44,
The onChangeInternal handler currently uses the any type; change its parameter
type to the proper radio event type (RadioChangeEvent) and add the corresponding
import (import type { RadioChangeEvent } from 'antd/lib/radio') at the top of
the file; update the signature of onChangeInternal(e: RadioChangeEvent): void
and keep the existing calls to customEvents.onChange({ ...e, currentTarget: {
value: e.target.value } }) and if (typeof onChange === 'function') onChange(e)
so the event is strongly typed for onChangeInternal, customEvents.onChange and
onChange usages.
♻️ Duplicate comments (2)
shesha-reactjs/src/designer-components/_settings/styles/styles.ts (1)

40-44: ⚠️ Potential issue | 🟠 Major

Use a descendant selector for the Form.Item tooltip icon.

Ant Design renders the tooltip icon inside the <label> content, not as an adjacent sibling of the label element, so +.ant-form-item-tooltip will never match here. Switch this to a descendant selector such as & .ant-form-item-tooltip. (codefactor.io)

♻️ Suggested fix
-            +.ant-form-item-tooltip {
+            & .ant-form-item-tooltip {
             align-self: end !important;
             position: relative;
             top: 4px;
             }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shesha-reactjs/src/designer-components/_settings/styles/styles.ts` around
lines 40 - 44, The selector ".ant-form-item-tooltip" is currently written as an
adjacent sibling selector "+.ant-form-item-tooltip" which never matches because
Ant Design places the tooltip icon inside the label; update the selector in
styles.ts to use a descendant selector (e.g., replace "+.ant-form-item-tooltip"
with "& .ant-form-item-tooltip") so the rule targets the tooltip rendered inside
Form.Item label content; locate the rule block that currently contains
"+.ant-form-item-tooltip" and change it to the descendant form to fix the
styling.
shesha-reactjs/src/designer-components/richTextEditor/index.tsx (1)

74-74: ⚠️ Potential issue | 🟡 Minor

rerenderKey still ignores autofocus changes.

Line 74 repeats model?.placeholder, so toggling autofocus does not remount the editor even though autofocus is part of the computed config on Line 67. Use the resolved autofocus value as the second key fragment.

🐛 Proposed fix
-    const rerenderKey = `${model?.placeholder || ''}-${model?.placeholder || false}`;
+    const rerenderKey = `${model?.placeholder ?? ''}-${formMode === 'designer' ? false : model?.autofocus ?? false}`;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx` at line 74,
The rerenderKey currently duplicates model?.placeholder and therefore ignores
autofocus changes; update the rerenderKey construction (the variable named
rerenderKey) to use the resolved autofocus value (the computed autofocus/config
value used when building the editor config) as the second fragment instead of
repeating model?.placeholder so toggling autofocus will remount the editor.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@shesha-reactjs/src/designer-components/container/containerComponent.tsx`:
- Around line 83-88: The useMemo creating wrapperStyle references wrapperStyles
but does not include it in the dependency array, causing stale closures when
wrapperStyles changes; update the dependency list for that useMemo (the
wrapperStyle variable) to include wrapperStyles so the memo recomputes when
wrapperStyles updates (keep other dependencies: model, formData, globalState)
and ensure any helper calls like getLayoutStyle remain covered by those
dependencies.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx`:
- Around line 34-54: The Factory is still passing model dimensions into Jodit
via the config (the spread of ...(!model.autoHeight && { height, minHeight,
maxHeight }) and ...(!model.autoWidth && { width, minWidth, maxWidth })), which
re-applies sizing in designer mode; update the Factory logic inside the config
builder to detect designer mode (use formMode === 'designer' or
preserveDimensionsInDesigner flag) and when in designer mode do not forward the
model width/height/min/max values into the config—instead ensure the editor is
allowed to fill the wrapper (e.g., omit those spreads or set width/height to
'100%' only for designer mode) so sizing is controlled solely by
ConfigurableFormItem.

In `@shesha-reactjs/src/utils/style.ts`:
- Around line 25-34: The executed script result (executedValue returned from
executeScriptSync) is being cast to string|number|null|undefined before calling
parseDimension, which bypasses runtime validation; add a type guard to check
executedValue is a primitive string/number/null/undefined (or other allowed
shape) before recursing into parseDimension (and return null or throw/log if
it’s an unexpected type). Specifically update the block that calls
executeScriptSync to validate executedValue’s runtime type (using typeof checks
or an isAllowedResult helper) and only call parseDimension(executedValue,
context) when the guard passes; otherwise handle the invalid result
(console.error/process appropriate fallback) to avoid unsafe casting.

---

Outside diff comments:
In `@shesha-reactjs/src/designer-components/radio/radio.tsx`:
- Around line 41-44: The onChangeInternal handler currently uses the any type;
change its parameter type to the proper radio event type (RadioChangeEvent) and
add the corresponding import (import type { RadioChangeEvent } from
'antd/lib/radio') at the top of the file; update the signature of
onChangeInternal(e: RadioChangeEvent): void and keep the existing calls to
customEvents.onChange({ ...e, currentTarget: { value: e.target.value } }) and if
(typeof onChange === 'function') onChange(e) so the event is strongly typed for
onChangeInternal, customEvents.onChange and onChange usages.

---

Duplicate comments:
In `@shesha-reactjs/src/designer-components/_settings/styles/styles.ts`:
- Around line 40-44: The selector ".ant-form-item-tooltip" is currently written
as an adjacent sibling selector "+.ant-form-item-tooltip" which never matches
because Ant Design places the tooltip icon inside the label; update the selector
in styles.ts to use a descendant selector (e.g., replace
"+.ant-form-item-tooltip" with "& .ant-form-item-tooltip") so the rule targets
the tooltip rendered inside Form.Item label content; locate the rule block that
currently contains "+.ant-form-item-tooltip" and change it to the descendant
form to fix the styling.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx`:
- Line 74: The rerenderKey currently duplicates model?.placeholder and therefore
ignores autofocus changes; update the rerenderKey construction (the variable
named rerenderKey) to use the resolved autofocus value (the computed
autofocus/config value used when building the editor config) as the second
fragment instead of repeating model?.placeholder so toggling autofocus will
remount the editor.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 89cfe801-96ce-4774-878a-4f16b5c786a5

📥 Commits

Reviewing files that changed from the base of the PR and between 9fdf7d7 and e5577b5.

📒 Files selected for processing (7)
  • shesha-reactjs/src/components/formDesigner/components/styles.ts
  • shesha-reactjs/src/designer-components/_settings/styles/styles.ts
  • shesha-reactjs/src/designer-components/configurableItemAutocomplete/index.tsx
  • shesha-reactjs/src/designer-components/container/containerComponent.tsx
  • shesha-reactjs/src/designer-components/radio/radio.tsx
  • shesha-reactjs/src/designer-components/richTextEditor/index.tsx
  • shesha-reactjs/src/utils/style.ts

czwe-01 and others added 6 commits March 9, 2026 11:59
- Introduced a new styles file for the ImageField component to manage styles more effectively.
- Replaced inline styles with class-based styles for the image wrapper, improving maintainability and readability.
- Updated the component to utilize the new styles, ensuring consistent layout and design.
- Moved height and width styling logic into the RichTextEditor component for better encapsulation.
- Enhanced readability by restructuring the component's props for styling.
- Ensured consistent application of dimensions based on model properties.
- Added a type guard function to validate dimension input types, ensuring they are string, number, null, or undefined.
- Updated the dimension parsing logic to include validation of executed script results, improving error handling and robustness.
- Changed margin-bottom to margin in GlobalSheshaStyles for consistent spacing.
- Restructured the RichTextEditorComponent's return statement for improved readability and clarity in JSX formatting.
- Enhanced error logging in the style utility to include a trailing comma for better debugging.
… component

- Updated the button margin from 'auto 0px' to '5px 0px' for better spacing consistency within the MultiColorInput component.
…idth

Thulasizwe/en/form components width
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
shesha-reactjs/src/designer-components/radio/radio.tsx (1)

35-52: ⚠️ Potential issue | 🟡 Minor

Import RadioChangeEvent and replace any with the concrete type.

Line 40: onChangeInternal receives a radio change event from AntD's Radio.Group. AntD exports RadioChangeEvent as the concrete type for this handler. Import it from 'antd' and use it instead of any:

import { RadioChangeEvent } from 'antd';

const onChangeInternal = (e: RadioChangeEvent): void => {
  if (e.target) customEvents.onChange({ ...e, currentTarget: { value: e.target.value } });
  if (typeof onChange === 'function') onChange(e);
};
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shesha-reactjs/src/designer-components/radio/radio.tsx` around lines 35 - 52,
The onChangeInternal handler in the Factory component uses a loose any type;
import Ant Design's RadioChangeEvent from 'antd' and replace the any with
RadioChangeEvent for the onChangeInternal parameter, updating the function
signature in Factory (onChangeInternal) and adding the import at the top of the
file so the event is strongly typed when calling customEvents.onChange and
onChange.
♻️ Duplicate comments (2)
shesha-reactjs/src/designer-components/configurableItemAutocomplete/index.tsx (1)

33-35: ⚠️ Potential issue | 🟡 Minor

Remove the any escape hatch here.

Line 34 bypasses type checking on the filter payload. Use a precise partial/narrow filter type for this object instead of as any, so the call to evaluateDynamicFilters stays type-safe.

As per coding guidelines, "Eliminate the any type; use unknown type instead for values with unknown types, forcing explicit type checking."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@shesha-reactjs/src/designer-components/configurableItemAutocomplete/index.tsx`
around lines 33 - 35, The call to evaluateDynamicFilters currently uses an
unsafe cast (`as any`) for the filter payload; replace it with a properly typed
object (e.g., a Partial or narrowed type representing the filter expression)
instead of `any`. Create or import the exact filter-expression type used by
evaluateDynamicFilters (or declare a local interface like
DynamicFilterExpression), then construct the payload as that typed shape (or use
`unknown` and perform explicit runtime checks/conversion before passing) and
pass [{ expression: filter }] typed accordingly; reference
evaluateDynamicFilters and the local filter variable when updating the call
site.
shesha-reactjs/src/designer-components/richTextEditor/index.tsx (1)

72-72: ⚠️ Potential issue | 🟡 Minor

Fix the copy/paste bug in rerenderKey.

Line 72 uses model?.placeholder twice, so the key never changes for the second condition it is supposed to track. If autofocus is the intended remount trigger, this should use that field instead.

🐛 Proposed fix
-    const rerenderKey = `${model?.placeholder || ''}-${model?.placeholder || false}`;
+    const rerenderKey = `${model?.placeholder || ''}-${model?.autofocus || false}`;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx` at line 72,
The rerenderKey is incorrectly using model?.placeholder twice so it doesn't
change when autofocus toggles; update the key construction (the rerenderKey
variable) to use model?.autofocus (or its string/coerced value) for the second
segment instead of the duplicate model?.placeholder so the component remounts
when autofocus changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@shesha-reactjs/src/components/mainLayout/styles/indexStyles.ts`:
- Around line 38-50: The current max-height set by
sheshaStyles.pageHeadingHeight is preventing the .sha-paging-height rule from
expanding to 46px; update the styles so .sha-paging-height also overrides
max-height (e.g., set max-height: 46px !important) and ensure the selector (the
.sha-paging-height block in indexStyles.ts) has equal or greater specificity
than the existing max-height rule so its height: 46px can take effect.
- Around line 4-6: The file defines duplicated theme constants (shaBorder,
shaPageHeadingHeight, layoutHeaderHeight) that mirror sheshaStyles.border,
sheshaStyles.pageHeadingHeight, and sheshaStyles.layoutHeaderHeight; remove
these duplicate constants and update any local usages in this module to
reference the canonical sheshaStyles properties (sheshaStyles.border,
sheshaStyles.pageHeadingHeight, sheshaStyles.layoutHeaderHeight) so the
component reads from the shared theme only.
- Around line 59-75: Remove the dead legacy Ant Design 4 selector block
targeting .${(p) => p.theme.prefixCls}-select-dropdown--multiple -> .${(p) =>
p.theme.prefixCls}-select-dropdown-menu -> .${(p) =>
p.theme.prefixCls}-select-dropdown-menu-item and its selected-rule (the entire
nested rule that hides .${(p) =>
p.theme.prefixCls}-select-dropdown-menu-item-selected); leave the remaining Ant
Design 5 selector block that targets .${(p) =>
p.theme.prefixCls}-select-dropdown -> .${(p) => p.theme.prefixCls}-select-item
-> .${(p) => p.theme.prefixCls}-select-item-option-selected intact.

In
`@shesha-reactjs/src/designer-components/configurableItemAutocomplete/index.tsx`:
- Around line 61-63: The JSON.parse call on the string branch can throw for
malformed input; wrap the parse in a try/catch inside the code that returns
parsed value so that if JSON.parse(expression) throws you return undefined
instead of bubbling the error. Concretely, in the expression handling (the
ternary that currently does typeof (expression) === 'string' ?
JSON.parse(expression) : expression) change the string branch to attempt
JSON.parse(expression) in a try/catch and return undefined on catch; keep the
non-string branch returning expression unchanged.
- Around line 28-29: The async memo callback that computes evaluatedFilter reads
propertyMetadataAccessor (from useNestedPropertyMetadatAccessor) but the
dependency array passed to useAsyncDeepCompareMemo omits it; update the
dependencies for useAsyncDeepCompareMemo to include propertyMetadataAccessor so
evaluatedFilter is recomputed when model.entityType/metadata changes (ensure
propertyMetadataAccessor is the same reference returned by
useNestedPropertyMetadatAccessor).

In `@shesha-reactjs/src/designer-components/image/styles.ts`:
- Around line 4-8: The wrapper CSS in imageWrapper should not hard-code
width:100%; remove the width rule from the cx(...) in styles.ts and instead let
the FormItem/applying code (the ImageComponent factory that builds finalStyles)
apply the configured dimensions to the wrapper; ensure ImageField continues to
forward dimensions to the inner <Image> but the inner image uses width: '100%'
and height: '100%' so it fills the wrapper. Update imageWrapper (remove
width:100%), confirm ImageComponent (finalStyles) places configured width/height
on the wrapper, and verify ImageField/<Image> uses 100% sizing to avoid double
percentage application and mispositioned absolute buttons.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx`:
- Around line 43-68: The Jodit config currently built in
useDeepCompareMemoKeepReference (PartialRichTextEditorConfig) omits explicit
dimension fields so Jodit ignores wrapper CSS; update the config creation in
index.tsx to copy relevant size properties from getStyle(model?.style, formData)
(or directly from model) into config.width, config.height, config.minWidth,
config.maxWidth, config.minHeight and config.maxHeight so the editor receives
explicit dimensions (leave the existing style prop for wrapper CSS but ensure
these six properties are set on the config object returned by the memoized
function).

In `@shesha-reactjs/src/utils/style.ts`:
- Around line 27-56: parseDimension currently handles IPropertySetting only when
_mode === 'code' and falls through to return null for objects with _mode ===
'value'; modify parseDimension to detect objects where value._mode === 'value'
and value._value is defined, then recursively call parseDimension(value._value,
context) before the final string check so the underlying dimension is extracted;
keep existing code paths (number, code execution via executeScriptSync, and
validation via isValidDimensionResult) intact and ensure the new branch runs
prior to the final typeof value !== 'string' return.

---

Outside diff comments:
In `@shesha-reactjs/src/designer-components/radio/radio.tsx`:
- Around line 35-52: The onChangeInternal handler in the Factory component uses
a loose any type; import Ant Design's RadioChangeEvent from 'antd' and replace
the any with RadioChangeEvent for the onChangeInternal parameter, updating the
function signature in Factory (onChangeInternal) and adding the import at the
top of the file so the event is strongly typed when calling
customEvents.onChange and onChange.

---

Duplicate comments:
In
`@shesha-reactjs/src/designer-components/configurableItemAutocomplete/index.tsx`:
- Around line 33-35: The call to evaluateDynamicFilters currently uses an unsafe
cast (`as any`) for the filter payload; replace it with a properly typed object
(e.g., a Partial or narrowed type representing the filter expression) instead of
`any`. Create or import the exact filter-expression type used by
evaluateDynamicFilters (or declare a local interface like
DynamicFilterExpression), then construct the payload as that typed shape (or use
`unknown` and perform explicit runtime checks/conversion before passing) and
pass [{ expression: filter }] typed accordingly; reference
evaluateDynamicFilters and the local filter variable when updating the call
site.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx`:
- Line 72: The rerenderKey is incorrectly using model?.placeholder twice so it
doesn't change when autofocus toggles; update the key construction (the
rerenderKey variable) to use model?.autofocus (or its string/coerced value) for
the second segment instead of the duplicate model?.placeholder so the component
remounts when autofocus changes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5efd37c7-ea21-4074-8ed6-19c7d537601a

📥 Commits

Reviewing files that changed from the base of the PR and between e5577b5 and 53190eb.

📒 Files selected for processing (8)
  • shesha-reactjs/src/components/mainLayout/styles/indexStyles.ts
  • shesha-reactjs/src/designer-components/configurableItemAutocomplete/index.tsx
  • shesha-reactjs/src/designer-components/image/image.tsx
  • shesha-reactjs/src/designer-components/image/styles.ts
  • shesha-reactjs/src/designer-components/multiColorInput/index.tsx
  • shesha-reactjs/src/designer-components/radio/radio.tsx
  • shesha-reactjs/src/designer-components/richTextEditor/index.tsx
  • shesha-reactjs/src/utils/style.ts

Lihlu and others added 3 commits March 9, 2026 14:12
…tyle utility

- Added conditional height and width properties in RichTextEditorComponent based on model settings for better layout control.
- Improved dimension parsing logic in style utility to handle IPropertySetting objects with a '_mode' of 'value', enhancing flexibility in dimension handling.
…idth

refactor: enhance dimension handling in RichTextEditorComponent style utility
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
shesha-reactjs/src/designer-components/richTextEditor/index.tsx (1)

74-74: ⚠️ Potential issue | 🟡 Minor

Use the intended second rerender discriminator.

rerenderKey concatenates model?.placeholder twice, so the second segment never changes independently. That makes the key ineffective for the second remount condition and still looks like a copy/paste error.

♻️ Proposed fix
-    const rerenderKey = `${model?.placeholder || ''}-${model?.placeholder || false}`;
+    const rerenderKey = `${model?.placeholder || ''}-${model?.autofocus || false}`;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx` at line 74,
The rerenderKey currently duplicates model?.placeholder twice; change the second
segment to the intended independent discriminator (use model?.readOnly here) so
the key becomes `${model?.placeholder || ''}-${model?.readOnly || false}`
(ensure the second segment is a boolean or stable string to force remount when
readOnly changes).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@shesha-reactjs/src/utils/style.ts`:
- Around line 56-59: The `_mode === 'value'` branch currently calls
parseDimension(value._value, context) without validating that value._value is a
valid dimension result; mirror the `_mode === 'code'` flow by extracting and
validating the underlying value with isValidDimensionResult before passing it to
parseDimension. Concretely: in the same block that checks value?._mode ===
'value', assign const executedValue = value._value (or similar), run
isValidDimensionResult(executedValue) and only call
parseDimension(executedValue, context) when that guard passes; use the same
type-guard pattern used in the `_mode === 'code'` branch to preserve type safety
around IPropertySetting and avoid casting.

---

Duplicate comments:
In `@shesha-reactjs/src/designer-components/richTextEditor/index.tsx`:
- Line 74: The rerenderKey currently duplicates model?.placeholder twice; change
the second segment to the intended independent discriminator (use
model?.readOnly here) so the key becomes `${model?.placeholder ||
''}-${model?.readOnly || false}` (ensure the second segment is a boolean or
stable string to force remount when readOnly changes).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2d451db7-8ff8-40d7-b97e-70434ababcdf

📥 Commits

Reviewing files that changed from the base of the PR and between 53190eb and e5ca9f9.

📒 Files selected for processing (2)
  • shesha-reactjs/src/designer-components/richTextEditor/index.tsx
  • shesha-reactjs/src/utils/style.ts

czwe-01 and others added 10 commits March 9, 2026 14:48
- Added validation for _value in IPropertySetting to ensure it is a valid dimension type before parsing, improving error handling and robustness in dimension processing.
…idth

refactor: validate dimension values in style utility
fix: update style for login and reset-password forms
- Deleted the AGENTS.md file, which contained the AI coding agent guide and project documentation for the Shesha ReactJS project. This change helps streamline the repository by removing outdated or unnecessary documentation.
…idth

chore: remove AGENTS.md file from the repository
@AlexStepantsov AlexStepantsov merged commit 7097309 into main Mar 10, 2026
2 checks passed
@czwe-01 czwe-01 deleted the form-component-width/3557 branch March 16, 2026 12:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants