1 Commits

Author SHA1 Message Date
Axel Wretman
360cdc46f2 Added Contribution markdown file and a section in the readme. 2025-09-09 15:06:23 +02:00
12 changed files with 72 additions and 23 deletions

36
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,36 @@
# Contributing to OpenNoodl
Thank you for your interest in contributing! Heres how you can help:
## How to Contribute
1. **Fork the repository** and create your feature branch:
```bash
git checkout -b feature/my-feature
```
2. **Make your changes** and ensure your code follows the existing style and conventions.
3. **Test your changes** locally.
4. **Commit your changes** with a clear message:
```bash
git commit -am 'Add new feature'
```
5. **Push to your branch**:
```bash
git push origin feature/my-feature
```
6. **Open a pull request** on GitHub. Describe your changes and the motivation behind them.
## Guidelines
- The branch name should be descriptive of the feature or fix. Either `feature/<my-feature>` or `fix/<my-fix>` prefixes are recommended. Also including an issue number can be helpful.
- Follow the coding style used in the project.
- Write clear, concise commit messages.
- Add tests for new features or bug fixes when possible.
- Document any new functionality.
## Need Help?
- Join our [community](https://the-low-code-foundation.fibery.io/invite/5NtlTThnCPh2vaAk)
- Open an issue for questions or suggestions.
Thank you for helping improve OpenNoodl!

View File

@@ -40,6 +40,21 @@ If you prefer self-hosting or a local backend, while still taking advantage of t
See the original Noodl documentation below See the original Noodl documentation below
# Contribution
We welcome contributions to OpenNoodl! To contribute:
1. **Fork the repository** and create your feature branch (`git checkout -b feature/my-feature`).
2. **Make your changes** and follow the existing code style.
3. **Test your changes** locally.
4. **Commit your changes** (`git commit -am 'Add new feature'`).
5. **Push to your branch** (`git push origin feature/my-feature`).
6. **Open a pull request** describing your changes.
See [CONTRIBUTING.md](CONTRIBUTING.md) for details and our code of conduct.
If you have questions, join our [community](https://the-low-code-foundation.fibery.io/invite/5NtlTThnCPh2vaAk) or open an issue.
# Noodl # Noodl
[Noodl](https://noodl.net) is a low-code platform where designers and developers build custom applications and experiences. Designed as a visual programming environment, it aims to expedite your development process. It promotes the swift and efficient creation of applications, requiring minimal coding knowledge. [Noodl](https://noodl.net) is a low-code platform where designers and developers build custom applications and experiences. Designed as a visual programming environment, it aims to expedite your development process. It promotes the swift and efficient creation of applications, requiring minimal coding knowledge.

View File

@@ -113,7 +113,7 @@ export function Checkbox({
</div> </div>
)} )}
{children && <div className={css['ChildContainer']}>{cloneElement(children, { isChecked })}</div>} {children && <div className={css['ChildContainer']}>{cloneElement(children as TSFixme, { isChecked })}</div>}
{label && <InputLabelSection label={label} />} {label && <InputLabelSection label={label} />}
</label> </label>
); );

View File

@@ -100,7 +100,7 @@ export function MenuDialog({
{item.label} {item.label}
</Label> </Label>
</div> </div>
{item.component && cloneElement(item.component(() => onClose()))} {item.component && cloneElement(item.component(() => onClose()) as TSFixme)}
<div className={css['EndSlot']}> <div className={css['EndSlot']}>
{item.endSlot && typeof item.endSlot === 'string' && <Text>{item.endSlot}</Text>} {item.endSlot && typeof item.endSlot === 'string' && <Text>{item.endSlot}</Text>}
{item.endSlot && typeof item.endSlot !== 'string' && item.endSlot} {item.endSlot && typeof item.endSlot !== 'string' && item.endSlot}

View File

@@ -10,7 +10,7 @@ export enum PropertyPanelIconRadioSize {
Default = 'default', Default = 'default',
Large = 'large' Large = 'large'
} }
export interface PropertyPanelIconRadioProperties { interface PropertyPanelIconRadioProperties {
name: string; name: string;
options: { options: {
icon: SingleSlot; icon: SingleSlot;

View File

@@ -2,15 +2,15 @@ import classNames from 'classnames';
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
import { PropertyPanelBaseInputProps } from '@noodl-core-ui/components/property-panel/PropertyPanelBaseInput'; import { PropertyPanelBaseInputProps } from '@noodl-core-ui/components/property-panel/PropertyPanelBaseInput';
import { PropertyPanelButton, PropertyPanelButtonProps } from '@noodl-core-ui/components/property-panel/PropertyPanelButton'; import { PropertyPanelButton } from '@noodl-core-ui/components/property-panel/PropertyPanelButton';
import { PropertyPanelCheckbox } from '@noodl-core-ui/components/property-panel/PropertyPanelCheckbox'; import { PropertyPanelCheckbox } from '@noodl-core-ui/components/property-panel/PropertyPanelCheckbox';
import { PropertyPanelIconRadioInput, PropertyPanelIconRadioProperties } from '@noodl-core-ui/components/property-panel/PropertyPanelIconRadioInput'; import { PropertyPanelIconRadioInput } from '@noodl-core-ui/components/property-panel/PropertyPanelIconRadioInput';
import { PropertyPanelLengthUnitInput } from '@noodl-core-ui/components/property-panel/PropertyPanelLengthUnitInput'; import { PropertyPanelLengthUnitInput } from '@noodl-core-ui/components/property-panel/PropertyPanelLengthUnitInput';
import { PropertyPanelNumberInput } from '@noodl-core-ui/components/property-panel/PropertyPanelNumberInput'; import { PropertyPanelNumberInput } from '@noodl-core-ui/components/property-panel/PropertyPanelNumberInput';
import { PropertyPanelSelectInput, PropertyPanelSelectProperties } from '@noodl-core-ui/components/property-panel/PropertyPanelSelectInput'; import { PropertyPanelSelectInput } from '@noodl-core-ui/components/property-panel/PropertyPanelSelectInput';
import { PropertyPanelSliderInput, PropertyPanelSliderInputProps } from '@noodl-core-ui/components/property-panel/PropertyPanelSliderInput'; import { PropertyPanelSliderInput } from '@noodl-core-ui/components/property-panel/PropertyPanelSliderInput';
import { PropertyPanelTextInput } from '@noodl-core-ui/components/property-panel/PropertyPanelTextInput'; import { PropertyPanelTextInput } from '@noodl-core-ui/components/property-panel/PropertyPanelTextInput';
import { PropertyPanelTextRadioInput, PropertyPanelTextRadioProperties } from '@noodl-core-ui/components/property-panel/PropertyPanelTextRadioInput'; import { PropertyPanelTextRadioInput } from '@noodl-core-ui/components/property-panel/PropertyPanelTextRadioInput';
import { Slot } from '@noodl-core-ui/types/global'; import { Slot } from '@noodl-core-ui/types/global';
import css from './PropertyPanelInput.module.scss'; import css from './PropertyPanelInput.module.scss';
@@ -31,13 +31,10 @@ export enum PropertyPanelInputType {
// SizeMode = 'size-mode', // SizeMode = 'size-mode',
} }
export type PropertyPanelProps = undefined |PropertyPanelIconRadioProperties | PropertyPanelButtonProps["properties"]
| PropertyPanelSliderInputProps ["properties"] | PropertyPanelSelectProperties | PropertyPanelTextRadioProperties
export interface PropertyPanelInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> { export interface PropertyPanelInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> {
label: string; label: string;
inputType: PropertyPanelInputType; inputType: PropertyPanelInputType;
properties: PropertyPanelProps; properties: TSFixme;
} }
export function PropertyPanelInput({ export function PropertyPanelInput({

View File

@@ -15,6 +15,7 @@ import { normalizeAlphanumericString } from '../../../utils/normalizeAlphanumeri
import css from './PropertyPanelLengthUnitInput.module.scss'; import css from './PropertyPanelLengthUnitInput.module.scss';
export interface PropertyPanelLengthUnitInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> { export interface PropertyPanelLengthUnitInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> {
properties?: TSFixme;
hasSmallText?: boolean; hasSmallText?: boolean;
} }

View File

@@ -7,6 +7,10 @@ import {
import { extractNumber } from '../../../utils/extractNumber'; import { extractNumber } from '../../../utils/extractNumber';
export interface PropertyPanelNumberInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> {
properties?: TSFixme;
}
export function PropertyPanelNumberInput({ export function PropertyPanelNumberInput({
value, value,
isChanged, isChanged,
@@ -15,7 +19,7 @@ export function PropertyPanelNumberInput({
onFocus, onFocus,
onBlur, onBlur,
onKeyDown onKeyDown
}: PropertyPanelBaseInputProps) { }: PropertyPanelNumberInputProps) {
// TODO: This component doesnt handle the value types correct // TODO: This component doesnt handle the value types correct
const [displayedInputValue, setDisplayedInputValue] = useState(value?.toString() || ''); const [displayedInputValue, setDisplayedInputValue] = useState(value?.toString() || '');

View File

@@ -6,7 +6,7 @@ import {
} from '@noodl-core-ui/components/property-panel/PropertyPanelBaseInput'; } from '@noodl-core-ui/components/property-panel/PropertyPanelBaseInput';
export interface PropertyPanelPasswordInputProps extends Omit<PropertyPanelBaseInputProps<string>, 'type'> { export interface PropertyPanelPasswordInputProps extends Omit<PropertyPanelBaseInputProps<string>, 'type'> {
value: string; properties?: TSFixme;
} }
export function PropertyPanelPasswordInput({ export function PropertyPanelPasswordInput({

View File

@@ -9,11 +9,7 @@ import { linearMap } from '../../../utils/linearMap';
import css from './PropertyPanelSliderInput.module.scss'; import css from './PropertyPanelSliderInput.module.scss';
export interface PropertyPanelSliderInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> { export interface PropertyPanelSliderInputProps extends Omit<PropertyPanelBaseInputProps, 'type'> {
properties: { properties: TSFixme;
min: number | string;
max: number | string;
step: number | string;
};
} }
export function PropertyPanelSliderInput({ export function PropertyPanelSliderInput({

View File

@@ -6,7 +6,7 @@ import {
} from '@noodl-core-ui/components/property-panel/PropertyPanelBaseInput'; } from '@noodl-core-ui/components/property-panel/PropertyPanelBaseInput';
export interface PropertyPanelTextInputProps extends Omit<PropertyPanelBaseInputProps<string>, 'type'> { export interface PropertyPanelTextInputProps extends Omit<PropertyPanelBaseInputProps<string>, 'type'> {
value: string; properties?: TSFixme;
} }
export function PropertyPanelTextInput({ export function PropertyPanelTextInput({

View File

@@ -5,7 +5,7 @@ import { PropertyPanelBaseInputProps } from '@noodl-core-ui/components/property-
import css from './PropertyPanelTextRadioInput.module.scss'; import css from './PropertyPanelTextRadioInput.module.scss';
export interface PropertyPanelTextRadioProperties { interface PropertyPanelTextRadioProperties {
name: string; name: string;
options: { options: {
label: string; label: string;