= {};
-
- tabList.forEach((element) =>
- {
- const tabId = element.props.id;
- tabs[tabId] = element;
- });
-
- return tabs;
- }, [tabList]);
-
- const updateSelected = useEffectEvent((selectedId?: string) =>
- {
- const firstTabId = tabList[0]?.props.id;
-
- setSelected(selectedId ?? firstTabId);
- });
-
- useEffect(() =>
- {
- updateSelected(selectedId);
- }, [selectedId, tabList]);
-
- const handleChange = (tabId: string) =>
- {
- if (onChange !== undefined)
- {
- onChange(tabId, selected);
- }
-
- setSelected(tabId);
- };
-
- return
-
- {
- tabList.map(element =>
- {
- const tabId = element.props.id;
- const key = `tab-${tabId}`;
- const style = tabId === selected ? 'active' : 'inactive';
- const handleClick = () => handleChange(element.props.id);
-
- return (
-
- {element.props.title}
-
- );
- })
- }
-
- {
- separator !== undefined
- ?
{separator}
- : null
- }
-
{tabMap[selected]}
-
;
+ return
+
+ {children}
+
+
+ ;
}
Tabs.Tab = Tab;
diff --git a/src/elements/clickarea/ClickArea.css b/src/elements/clickarea/ClickArea.css
index ba4830e..5e5cc95 100644
--- a/src/elements/clickarea/ClickArea.css
+++ b/src/elements/clickarea/ClickArea.css
@@ -2,16 +2,39 @@
{
.clickarea
{
+ --background-hover-color: var(--input-background-hover-color);
+
--margin: 0;
- --padding-small: var(--container-padding-small);
- --padding-medium: var(--container-padding-medium);
- --padding-large: var(--container-padding-large);
+ --padding-small: var(--input-padding-small);
+ --padding-medium: var(--input-padding-medium);
+ --padding-large: var(--input-padding-large);
cursor: pointer;
- display: inline-block;
+ display: flex;
+ flex-direction: column;
margin: var(--margin);
+ &.align-x-left
+ {
+ align-items: flex-start;
+ }
+
+ &.align-x-center
+ {
+ align-items: center;
+ }
+
+ &.align-x-right
+ {
+ align-items: flex-end;
+ }
+
+ &.effect-hover:hover
+ {
+ background-color: var(--background-hover-color);
+ }
+
&.padding-none
{
padding: 0;
diff --git a/src/elements/clickarea/ClickArea.tsx b/src/elements/clickarea/ClickArea.tsx
index d4a0b2c..28d1daf 100644
--- a/src/elements/clickarea/ClickArea.tsx
+++ b/src/elements/clickarea/ClickArea.tsx
@@ -4,15 +4,19 @@ import type { ReactNode } from 'react';
import './ClickArea.css';
type Props = {
+ readonly alignX?: 'left' | 'center' | 'right';
+ readonly effect?: 'none' | 'hover';
readonly padding?: 'none' | 'small' | 'medium' | 'large';
readonly onClick?: () => void;
readonly children?: ReactNode;
};
-export function ClickArea({ padding = 'none', onClick, children }: Props)
+export function ClickArea({ alignX = 'left', effect = 'none', padding = 'none', onClick, children }: Props)
{
const className = 'clickarea'
- + ' padding-' + padding;
+ + ' padding-' + padding
+ + ' align-x-' + alignX
+ + ' effect-' + effect;
return
{children}
diff --git a/src/elements/textarea/TextArea.tsx b/src/elements/textarea/TextArea.tsx
index 0db2ea7..0f4ba7b 100644
--- a/src/elements/textarea/TextArea.tsx
+++ b/src/elements/textarea/TextArea.tsx
@@ -11,6 +11,7 @@ export type Props = {
readonly value?: string;
readonly border?: 'none' | 'small' | 'medium' | 'large';
readonly size?: 'small' | 'medium' | 'large';
+ readonly cols?: number;
readonly rows?: number;
readonly limit?: number;
readonly onChange?: ChangeEventHandler;
@@ -18,7 +19,7 @@ export type Props = {
type Ref = HTMLTextAreaElement;
-export const TextArea = forwardRef[(function Element({ name, placeholder, defaultValue, value, border ='small', size = 'medium', rows, limit, onChange }, ref)
+export const TextArea = forwardRef][(function Element({ name, placeholder, defaultValue, value, border ='small', size = 'medium', cols, rows, limit, onChange }, ref)
{
const className = 'textarea'
+ ' border-' + border
@@ -30,6 +31,7 @@ export const TextArea = forwardRef][(function Element({ name, placehol
placeholder={placeholder}
defaultValue={defaultValue}
value={value}
+ cols={cols}
rows={rows}
ref={ref}
maxLength={limit}
]