react-better-html 1.1.49 → 1.1.51

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.
@@ -1,6 +1,6 @@
1
1
  import { ComponentPropWithRef } from "../types/components";
2
2
  import { OmitProps } from "../types/app";
3
- type ChipProps = {
3
+ export type ChipProps = {
4
4
  text: string;
5
5
  /** @default theme.colors.textPrimary */
6
6
  color?: string;
@@ -1,5 +1,5 @@
1
1
  import { ComponentMarginProps } from "../types/components";
2
- type ColorThemeSwitchProps = {
2
+ export type ColorThemeSwitchProps = {
3
3
  withMoon?: boolean;
4
4
  className?: string;
5
5
  } & ComponentMarginProps;
@@ -5,11 +5,11 @@ type DividerProps = {
5
5
  /** @default border */
6
6
  backgroundColor?: string;
7
7
  } & ComponentMarginProps;
8
- type VerticalDividerProps = DividerProps & {
8
+ export type VerticalDividerProps = DividerProps & {
9
9
  /** @default "100%" */
10
10
  height?: number;
11
11
  };
12
- type HorizontalDividerProps = DividerProps & {
12
+ export type HorizontalDividerProps = DividerProps & {
13
13
  text?: string;
14
14
  /** @default textSecondary */
15
15
  textColor?: string;
@@ -9,7 +9,7 @@ export type DropdownOption<Value, Data = unknown> = {
9
9
  searchValues?: string[];
10
10
  data?: Data;
11
11
  };
12
- export type DropdownProps<Value, Data> = {
12
+ export type DropdownProps<Value, Data = unknown> = {
13
13
  label?: string;
14
14
  errorText?: string;
15
15
  infoText?: string;
@@ -2,7 +2,7 @@ import { ComponentMarginProps } from "../types/components";
2
2
  import { LoaderName } from "../types/loader";
3
3
  import { AnyOtherString, OmitProps } from "../types/app";
4
4
  import { useForm } from "../utils/hooks";
5
- type FormProps = {
5
+ export type FormProps = {
6
6
  form?: OmitProps<ReturnType<typeof useForm>, "focusField">;
7
7
  submitButtonText?: string;
8
8
  submitButtonLoaderName?: LoaderName | AnyOtherString;
@@ -1,7 +1,7 @@
1
1
  import { IconName } from "../types/icon";
2
2
  import { AnyOtherString } from "../types/app";
3
3
  import { ComponentMarginProps, ComponentPropWithRef } from "../types/components";
4
- type FormRowProps = {
4
+ export type FormRowProps = {
5
5
  oneItemOnly?: boolean;
6
6
  gap?: React.CSSProperties["gap"];
7
7
  children?: React.ReactNode;
@@ -1,7 +1,7 @@
1
1
  import { AnyOtherString, OmitProps } from "../types/app";
2
2
  import { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from "../types/components";
3
3
  import { IconName } from "../types/icon";
4
- type IconProps = {
4
+ export type IconProps = {
5
5
  name: IconName | AnyOtherString;
6
6
  /** @default 16 */
7
7
  size?: number;
@@ -1,7 +1,7 @@
1
1
  import { AnyOtherString, OmitProps } from "../types/app";
2
2
  import { ComponentHoverStyle, ComponentPropWithRef, ComponentStyle } from "../types/components";
3
3
  import { AssetName } from "../types/asset";
4
- type ImageProps = {
4
+ export type ImageProps = {
5
5
  name?: AssetName | AnyOtherString;
6
6
  } & OmitProps<React.ComponentProps<"img">, "style"> & ComponentStyle & ComponentHoverStyle;
7
7
  type ImageComponent = {
@@ -78,7 +78,7 @@ const InputElement = styled_components_1.default.input.withConfig({
78
78
  }
79
79
  `;
80
80
  const TextareaElement = styled_components_1.default.textarea.withConfig({
81
- shouldForwardProp: (prop) => !["normalStyle", "hoverStyle"].includes(prop),
81
+ shouldForwardProp: (prop) => !["theme", "withLeftIcon", "withRightIcon", "normalStyle", "hoverStyle"].includes(prop),
82
82
  }) `
83
83
  width: 100%;
84
84
  min-height: 3lh;
@@ -92,6 +92,8 @@ const TextareaElement = styled_components_1.default.textarea.withConfig({
92
92
  border-radius: ${(props) => props.theme.styles.borderRadius}px;
93
93
  outline: none;
94
94
  padding: ${(props) => `${(props.theme.styles.gap + props.theme.styles.space) / 2}px ${props.theme.styles.space + props.theme.styles.gap}px`};
95
+ padding-left: ${(props) => props.withLeftIcon ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px` : undefined};
96
+ padding-right: ${(props) => props.withRightIcon ? `${props.theme.styles.space + 16 + props.theme.styles.space - 1}px` : undefined};
95
97
  resize: vertical;
96
98
  transition: border-color ${(props) => props.theme.styles.transition};
97
99
 
@@ -133,9 +135,9 @@ const InputFieldComponent = (0, react_1.forwardRef)(function InputField({ label,
133
135
  return;
134
136
  onChangeValue?.(debouncedValue);
135
137
  }, [withDebounce, onChangeValue, debouncedValue]);
136
- return ((0, jsx_runtime_1.jsxs)(Div_1.default.column, { width: "100%", gap: theme.styles.gap / 2, ...styledComponentStylesWithExcluded, children: [label && (0, jsx_runtime_1.jsx)(Label_1.default, { text: label, required: required, isError: !!errorText }), (0, jsx_runtime_1.jsxs)(Div_1.default, { position: "relative", width: "100%", children: [leftIcon && ((0, jsx_runtime_1.jsx)(Icon_1.default, { name: leftIcon, position: "absolute", top: 46 / 2, left: theme.styles.space + 1, transform: "translateY(-50%)", pointerEvents: "none", zIndex: 1002 })), (0, jsx_runtime_1.jsx)(InputElement, { theme: theme, withLeftIcon: leftIcon !== undefined, withRightIcon: rightIcon !== undefined, required: required, placeholder: placeholder ?? label, onChange: onChangeElement, ...styledComponentStylesWithoutExcluded, ...dataProps, ...ariaProps, ...restProps, ref: ref }), rightIcon ? (onClickRightIcon ? ((0, jsx_runtime_1.jsx)(Button_1.default.icon, { icon: rightIcon, position: "absolute", top: 46 / 2, right: theme.styles.space + 1 - theme.styles.space / 2, transform: "translateY(-50%)", onClick: onClickRightIcon })) : ((0, jsx_runtime_1.jsx)(Icon_1.default, { name: rightIcon, position: "absolute", top: 46 / 2, right: theme.styles.space + 1, transform: "translateY(-50%)", pointerEvents: "none" }))) : undefined, insideInputFieldComponent] }), (errorText || infoText) && ((0, jsx_runtime_1.jsx)(Text_1.default, { as: "span", display: "block", fontSize: 14, color: errorText ? theme.colors.error : theme.colors.textSecondary, children: errorText || infoText }))] }));
138
+ return ((0, jsx_runtime_1.jsxs)(Div_1.default.column, { width: "100%", gap: theme.styles.gap / 2, ...styledComponentStylesWithExcluded, children: [label && (0, jsx_runtime_1.jsx)(Label_1.default, { text: label, required: required, isError: !!errorText }), (0, jsx_runtime_1.jsxs)(Div_1.default, { position: "relative", width: "100%", children: [leftIcon && ((0, jsx_runtime_1.jsx)(Icon_1.default, { name: leftIcon, position: "absolute", top: 46 / 2, left: theme.styles.space + 1, transform: "translateY(-50%)", pointerEvents: "none", zIndex: props.className?.includes("react-better-html-dropdown-open-late") ? 1002 : 1 })), (0, jsx_runtime_1.jsx)(InputElement, { theme: theme, withLeftIcon: leftIcon !== undefined, withRightIcon: rightIcon !== undefined, required: required, placeholder: placeholder ?? label, onChange: onChangeElement, ...styledComponentStylesWithoutExcluded, ...dataProps, ...ariaProps, ...restProps, ref: ref }), rightIcon ? (onClickRightIcon ? ((0, jsx_runtime_1.jsx)(Button_1.default.icon, { icon: rightIcon, position: "absolute", top: 46 / 2, right: theme.styles.space + 1 - theme.styles.space / 2, transform: "translateY(-50%)", onClick: onClickRightIcon })) : ((0, jsx_runtime_1.jsx)(Icon_1.default, { name: rightIcon, position: "absolute", top: 46 / 2, right: theme.styles.space + 1, transform: "translateY(-50%)", pointerEvents: "none" }))) : undefined, insideInputFieldComponent] }), (errorText || infoText) && ((0, jsx_runtime_1.jsx)(Text_1.default, { as: "span", display: "block", fontSize: 14, color: errorText ? theme.colors.error : theme.colors.textSecondary, children: errorText || infoText }))] }));
137
139
  });
138
- InputFieldComponent.multiline = (0, react_1.forwardRef)(function Multiline({ label, placeholder, errorText, infoText, onChange, onChangeValue, required, ...props }, ref) {
140
+ InputFieldComponent.multiline = (0, react_1.forwardRef)(function Multiline({ label, placeholder, errorText, infoText, leftIcon, rightIcon, onChange, onChangeValue, onClickRightIcon, required, ...props }, ref) {
139
141
  const theme = (0, BetterHtmlProvider_1.useTheme)();
140
142
  const styledComponentStyles = (0, hooks_1.useStyledComponentStyles)(props, theme);
141
143
  const dataProps = (0, hooks_1.useComponentPropsWithPrefix)(props, "data");
@@ -145,7 +147,7 @@ InputFieldComponent.multiline = (0, react_1.forwardRef)(function Multiline({ lab
145
147
  onChange?.(event);
146
148
  onChangeValue?.(event.target.value);
147
149
  }, [onChange, onChangeValue]);
148
- return ((0, jsx_runtime_1.jsxs)(Div_1.default.column, { gap: theme.styles.gap / 2, children: [label && (0, jsx_runtime_1.jsx)(Label_1.default, { text: label, required: required, isError: !!errorText }), (0, jsx_runtime_1.jsx)(TextareaElement, { theme: theme, required: required, placeholder: placeholder ?? label, onChange: onChangeElement, ...styledComponentStyles, ...dataProps, ...ariaProps, ...restProps, ref: ref }), (errorText || infoText) && ((0, jsx_runtime_1.jsx)(Text_1.default, { as: "span", display: "block", marginTop: theme.styles.gap / 2, color: errorText ? theme.colors.error : theme.colors.textSecondary, fontSize: 14, children: errorText || infoText }))] }));
150
+ return ((0, jsx_runtime_1.jsxs)(Div_1.default.column, { gap: theme.styles.gap / 2, children: [label && (0, jsx_runtime_1.jsx)(Label_1.default, { text: label, required: required, isError: !!errorText }), (0, jsx_runtime_1.jsxs)(Div_1.default, { position: "relative", width: "100%", children: [leftIcon && ((0, jsx_runtime_1.jsx)(Icon_1.default, { name: leftIcon, position: "absolute", top: 46 / 2, left: theme.styles.space + 1, transform: "translateY(-50%)", pointerEvents: "none" })), (0, jsx_runtime_1.jsx)(TextareaElement, { theme: theme, withLeftIcon: leftIcon !== undefined, withRightIcon: rightIcon !== undefined, required: required, placeholder: placeholder ?? label, onChange: onChangeElement, ...styledComponentStyles, ...dataProps, ...ariaProps, ...restProps, ref: ref }), rightIcon ? (onClickRightIcon ? ((0, jsx_runtime_1.jsx)(Button_1.default.icon, { icon: rightIcon, position: "absolute", top: 46 / 2, right: theme.styles.space + 1 - theme.styles.space / 2, transform: "translateY(-50%)", onClick: onClickRightIcon })) : ((0, jsx_runtime_1.jsx)(Icon_1.default, { name: rightIcon, position: "absolute", top: 46 / 2, right: theme.styles.space + 1, transform: "translateY(-50%)", pointerEvents: "none" }))) : undefined] }), (errorText || infoText) && ((0, jsx_runtime_1.jsx)(Text_1.default, { as: "span", display: "block", marginTop: theme.styles.gap / 2, color: errorText ? theme.colors.error : theme.colors.textSecondary, fontSize: 14, children: errorText || infoText }))] }));
149
151
  });
150
152
  InputFieldComponent.email = (0, react_1.forwardRef)(function Email({ ...props }, ref) {
151
153
  return ((0, jsx_runtime_1.jsx)(InputFieldComponent, { type: "email", placeholder: "your@email.here", autoComplete: "email", autoCorrect: "off", autoCapitalize: "off", ref: ref, ...props }));
@@ -1,4 +1,4 @@
1
- type LabelProps = {
1
+ export type LabelProps = {
2
2
  text?: string;
3
3
  required?: boolean;
4
4
  isError?: boolean;
@@ -1,7 +1,7 @@
1
1
  import { Color } from "../types/theme";
2
2
  import { OmitProps } from "../types/app";
3
3
  import { DivProps } from "./Div";
4
- type LoaderProps = {
4
+ export type LoaderProps = {
5
5
  /** @default textPrimary */
6
6
  color?: Color;
7
7
  /** @default 16 */
@@ -1,7 +1,7 @@
1
1
  import { ComponentPropWithRef } from "../types/components";
2
2
  import { AnyOtherString, OmitProps } from "../types/app";
3
3
  import { LoaderName } from "../types/loader";
4
- type ModalProps = {
4
+ export type ModalProps = {
5
5
  /**
6
6
  * If you want to have a small modal, you can use 660px as it looks good on most screens.
7
7
  *
@@ -29,7 +29,7 @@ const DialogStylesElement = styled_components_1.default.dialog.withConfig({
29
29
  transition: ${(props) => props.theme.styles.transition};
30
30
 
31
31
  &::backdrop {
32
- background-color: ${(props) => (props.colorTheme === "light" ? "#000000a0" : "#000000e0")};
32
+ background-color: ${(props) => (props.colorTheme === "light" ? "#000000a0" : "#222222e0")};
33
33
  opacity: ${(props) => props.opacity};
34
34
  transition: ${(props) => props.theme.styles.transition};
35
35
  }
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { ComponentMarginProps } from "../types/components";
3
3
  import { TextAs } from "./Text";
4
- type PageHeaderProps = {
4
+ export type PageHeaderProps = {
5
5
  imageUrl?: string;
6
6
  imageSize?: number;
7
7
  title?: string;
@@ -1,4 +1,4 @@
1
- type PageHolderProps = {
1
+ export type PageHolderProps = {
2
2
  /** @default false */
3
3
  noMaxContentWidth?: boolean;
4
4
  children?: React.ReactNode;
package/dist/index.d.ts CHANGED
@@ -1,21 +1,21 @@
1
- import Div from "./components/Div";
2
- import Text from "./components/Text";
3
- import Loader from "./components/Loader";
4
- import Icon from "./components/Icon";
5
- import Image from "./components/Image";
6
- import Button from "./components/Button";
7
- import Divider from "./components/Divider";
8
- import Modal, { type ModalRef } from "./components/Modal";
9
- import PageHolder from "./components/PageHolder";
10
- import PageHeader from "./components/PageHeader";
11
- import Chip from "./components/Chip";
12
- import InputField from "./components/InputField";
13
- import Dropdown, { type DropdownOption } from "./components/Dropdown";
14
- import ToggleInput from "./components/ToggleInput";
15
- import Form from "./components/Form";
16
- import Label from "./components/Label";
17
- import FormRow from "./components/FormRow";
18
- import ColorThemeSwitch from "./components/ColorThemeSwitch";
1
+ import Div, { type DivProps } from "./components/Div";
2
+ import Text, { type TextProps, type TextAs } from "./components/Text";
3
+ import Loader, { type LoaderProps } from "./components/Loader";
4
+ import Icon, { type IconProps } from "./components/Icon";
5
+ import Image, { type ImageProps } from "./components/Image";
6
+ import Button, { type ButtonProps } from "./components/Button";
7
+ import Divider, { type HorizontalDividerProps, type VerticalDividerProps } from "./components/Divider";
8
+ import Modal, { type ModalRef, type ModalProps } from "./components/Modal";
9
+ import PageHolder, { type PageHolderProps } from "./components/PageHolder";
10
+ import PageHeader, { type PageHeaderProps } from "./components/PageHeader";
11
+ import Chip, { type ChipProps } from "./components/Chip";
12
+ import InputField, { type InputFieldProps, type TextareaFieldProps } from "./components/InputField";
13
+ import Dropdown, { type DropdownOption, type DropdownProps } from "./components/Dropdown";
14
+ import ToggleInput, { type ToggleInputRef, type ToggleInputProps } from "./components/ToggleInput";
15
+ import Form, { type FormProps } from "./components/Form";
16
+ import Label, { type LabelProps } from "./components/Label";
17
+ import FormRow, { type FormRowProps } from "./components/FormRow";
18
+ import ColorThemeSwitch, { type ColorThemeSwitchProps } from "./components/ColorThemeSwitch";
19
19
  import BetterHtmlProvider, { useBetterHtmlContext, useTheme, useLoader, useLoaderControls, type BetterHtmlProviderValue } from "./components/BetterHtmlProvider";
20
20
  import { usePageResize, usePageScroll, useMediaQuery, useBooleanState, useDebounceState, useForm, useUrlQuery } from "./utils/hooks";
21
21
  import { generateRandomString, getBrowser, formatPhoneNumber, getFormErrorObject } from "./utils/functions";
@@ -29,4 +29,4 @@ import { type Color, type ColorName, type ColorTheme, type Colors, type Styles,
29
29
  import { type BrowserName } from "./types/other";
30
30
  import { isMobileDevice } from "./constants";
31
31
  export * from "./plugins";
32
- export { BetterHtmlProvider, BetterHtmlProviderValue, Div, Text, Loader, Icon, Image, Button, Divider, Modal, ModalRef, PageHolder, PageHeader, Chip, InputField, Dropdown, DropdownOption, ToggleInput, Form, Label, FormRow, ColorThemeSwitch, useBetterHtmlContext, useTheme, useLoader, useLoaderControls, usePageResize, usePageScroll, useMediaQuery, useBooleanState, useDebounceState, useForm, useUrlQuery, generateRandomString, getBrowser, formatPhoneNumber, getFormErrorObject, OmitProps, ExcludeOptions, PickValue, PartialRecord, DeepPartialRecord, PickAllRequired, AppConfig, BetterHtmlConfig, AssetName, AssetsConfig, IconName, IconsConfig, LoaderName, PluginName, BetterHtmlPlugin, LoaderConfig, Color, ColorName, ColorTheme, Colors, Styles, Theme, ThemeConfig, BrowserName, isMobileDevice, };
32
+ export { BetterHtmlProvider, BetterHtmlProviderValue, Div, DivProps, Text, TextProps, TextAs, Loader, LoaderProps, Icon, IconProps, Image, ImageProps, Button, ButtonProps, Divider, HorizontalDividerProps, VerticalDividerProps, Modal, ModalProps, ModalRef, PageHolder, PageHolderProps, PageHeader, PageHeaderProps, Chip, ChipProps, InputField, InputFieldProps, TextareaFieldProps, Dropdown, DropdownOption, DropdownProps, ToggleInput, ToggleInputRef, ToggleInputProps, Form, FormProps, Label, LabelProps, FormRow, FormRowProps, ColorThemeSwitch, ColorThemeSwitchProps, useBetterHtmlContext, useTheme, useLoader, useLoaderControls, usePageResize, usePageScroll, useMediaQuery, useBooleanState, useDebounceState, useForm, useUrlQuery, generateRandomString, getBrowser, formatPhoneNumber, getFormErrorObject, OmitProps, ExcludeOptions, PickValue, PartialRecord, DeepPartialRecord, PickAllRequired, AppConfig, BetterHtmlConfig, AssetName, AssetsConfig, IconName, IconsConfig, LoaderName, PluginName, BetterHtmlPlugin, LoaderConfig, Color, ColorName, ColorTheme, Colors, Styles, Theme, ThemeConfig, BrowserName, isMobileDevice, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-better-html",
3
- "version": "1.1.49",
3
+ "version": "1.1.51",
4
4
  "description": "A component library for react that is as close to plane html as possible",
5
5
  "main": "dist/index.js",
6
6
  "files": [