@bouko/react 0.3.1 → 0.3.3

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.
@@ -4,7 +4,7 @@ export default function Field({ style, label, required = true, note, children })
4
4
  return (_jsxs("div", { className: cn(styles.container, style), children: [label && _jsxs("span", { className: styles.label, children: [label, " ", !required ? _jsx("span", { className: "italic text-slate-400", children: "(optional)" }) : ""] }), children, note && _jsx("span", { className: styles.note, children: note })] }));
5
5
  }
6
6
  const styles = {
7
- container: "flex flex-col gap-1 overflow-hidden",
7
+ container: "flex flex-col shrink-0 gap-1 w-full overflow-hidden",
8
8
  label: "text-xs text-slate-600",
9
9
  input: "px-3 py-2 bg-slate-200/50 border border-slate-300 outline-blue-500 rounded text-sm",
10
10
  note: "mt-1 text-xs text-slate-500"
@@ -1,9 +1,10 @@
1
1
  import type { ReactNode } from "react";
2
2
  type Props = {
3
3
  container?: string;
4
+ icon?: ReactNode;
4
5
  title: ReactNode;
5
6
  subtitle: ReactNode;
6
7
  reverse?: boolean;
7
8
  };
8
- export default function Heading({ container, title, subtitle, reverse }: Props): import("react/jsx-runtime").JSX.Element;
9
+ export default function Heading({ container, icon, title, subtitle, reverse }: Props): import("react/jsx-runtime").JSX.Element;
9
10
  export {};
@@ -1,10 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ColumnBox } from "./flex";
2
+ import { RowBox, ColumnBox } from "./flex";
3
3
  import { cn } from "@bouko/style";
4
- export default function Heading({ container, title, subtitle, reverse }) {
5
- return (_jsxs(ColumnBox, { style: cn(container, reverse && "flex-col-reverse"), children: [_jsx("span", { className: styles.title, children: title }), _jsx("span", { className: styles.subtitle, children: subtitle })] }));
4
+ export default function Heading({ container, icon, title, subtitle, reverse }) {
5
+ return (_jsxs(RowBox, { style: cn(container, styles.container), children: [icon, _jsxs(ColumnBox, { style: cn(styles.subcontainer, reverse && "flex-col-reverse"), children: [_jsx("span", { className: styles.title, children: title }), _jsx("span", { className: styles.subtitle, children: subtitle })] })] }));
6
6
  }
7
7
  const styles = {
8
+ container: "gap-2 items-center",
9
+ subcontainer: "grow",
8
10
  title: "flex items-center gap-2 font-bold",
9
11
  subtitle: "text-sm font-semibold text-primary-lighter"
10
12
  };
@@ -1,2 +1,6 @@
1
- import type { OptionField } from "../core/types";
2
- export default function Select({ style, label, required, value, options, update, note }: OptionField): import("react/jsx-runtime").JSX.Element;
1
+ import { type OptionField } from "@bouko/form";
2
+ type Props<T> = OptionField<T> & {
3
+ placeholder?: string;
4
+ };
5
+ export default function Select<T>({ id, style, label, required, value, options, update, note }: Props<T>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -3,12 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState } from "react";
4
4
  import { AnimatePresence, motion } from "framer-motion";
5
5
  import Chevron from "../assets/icons/chevron.svg";
6
+ import { setField } from "@bouko/form";
6
7
  import { cn } from "@bouko/style";
7
- export default function Select({ style, label, required = true, value, options, update, note }) {
8
+ export default function Select({ id, style, label, required = true, value, options, update, note }) {
8
9
  const [isOpen, setOpen] = useState(false);
9
10
  const active = options.find(x => x.id === value);
10
11
  const select = (x) => {
11
- update(x);
12
+ setField(update, id, x);
12
13
  setOpen(false);
13
14
  };
14
15
  return (_jsxs("div", { className: cn(styles.container, style), children: [_jsxs("div", { className: styles.subcontainer, children: [label && _jsxs("span", { className: styles.label, children: [label, " ", !required ? _jsx("span", { className: "italic text-slate-400", children: "(optional)" }) : ""] }), _jsxs("div", { className: cn(styles.trigger, !active?.label && "capitalize"), onClick: () => setOpen(x => !x), children: [active ? active.label ?? active.id : "None", _jsx(Chevron, { className: cn("text-xs text-slate-400 duration-200", isOpen && "rotate-180") })] }), note && !isOpen && _jsx("span", { className: styles.note, children: note })] }), _jsx(AnimatePresence, { children: isOpen && (_jsx(motion.div, { className: styles.dropdown, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, children: options.map(({ id, label }) => (_jsx("span", { className: cn("w-full p-2 border-l-3 border-transparent hover:text-blue-600 duration-200 cursor-pointer", active?.id === id && "border-blue-600 bg-blue-500/10", !label && "capitalize"), onClick: () => select(id), children: label ?? id }, id))) }, "dropdown")) })] }));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
 
3
3
  "name": "@bouko/react",
4
- "version": "0.3.1",
4
+ "version": "0.3.3",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "license": "MIT",