@bouko/react 2.4.7 → 2.4.9
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.
- package/dist/assets/icons/check copy.svg +6 -0
- package/dist/assets/icons/check-circle copy.svg +6 -0
- package/dist/assets/icons/chevron copy.svg +6 -0
- package/dist/assets/icons/paperclip copy.svg +6 -0
- package/dist/assets/icons/spinner copy.svg +6 -0
- package/dist/assets/icons/x-circle copy.svg +6 -0
- package/dist/components/animate/configs.d.ts +136 -136
- package/dist/components/animate/configs.js +62 -62
- package/dist/components/animate/index.d.ts +54 -54
- package/dist/components/animate/index.js +33 -33
- package/dist/components/attachment.d.ts +2 -2
- package/dist/components/attachment.js +18 -18
- package/dist/components/badge.d.ts +5 -0
- package/dist/components/badge.js +4 -0
- package/dist/components/button/ghost.d.ts +7 -7
- package/dist/components/button/ghost.js +8 -8
- package/dist/components/button/load.d.ts +10 -11
- package/dist/components/button/load.js +35 -35
- package/dist/components/button/normal.d.ts +11 -11
- package/dist/components/button/normal.js +37 -23
- package/dist/components/button.d.ts +10 -10
- package/dist/components/button.js +22 -22
- package/dist/components/carousel/index.d.ts +11 -11
- package/dist/components/carousel/index.js +19 -19
- package/dist/components/checkbox.d.ts +8 -8
- package/dist/components/checkbox.js +13 -13
- package/dist/components/dropdown/normal.d.ts +10 -10
- package/dist/components/dropdown/normal.js +19 -19
- package/dist/components/fade-carousel.d.ts +4 -4
- package/dist/components/fade-carousel.js +14 -14
- package/dist/components/field.d.ts +10 -10
- package/dist/components/field.js +10 -10
- package/dist/components/flex.d.ts +16 -0
- package/dist/components/flex.js +8 -0
- package/dist/components/form/fields.d.ts +16 -0
- package/dist/components/form/fields.js +21 -0
- package/dist/components/form/footer.js +2 -2
- package/dist/components/form/functions.d.ts +1 -1
- package/dist/components/form/functions.js +28 -28
- package/dist/components/form/loaders.d.ts +3 -0
- package/dist/components/form/loaders.js +11 -0
- package/dist/components/form/test-next.d.ts +1 -0
- package/dist/components/form/test-next.js +6 -0
- package/dist/components/form/types.d.ts +38 -38
- package/dist/components/form/types.js +1 -1
- package/dist/components/heading/normal.d.ts +29 -29
- package/dist/components/heading/normal.js +22 -22
- package/dist/components/heading/page.d.ts +25 -25
- package/dist/components/heading/page.js +23 -23
- package/dist/components/index.d.ts +12 -14
- package/dist/components/index.js +12 -14
- package/dist/components/input.d.ts +11 -11
- package/dist/components/input.js +6 -6
- package/dist/components/layout/fade.d.ts +6 -6
- package/dist/components/layout/fade.js +14 -14
- package/dist/components/layout/flex.d.ts +16 -16
- package/dist/components/layout/flex.js +42 -42
- package/dist/components/layout/heading.d.ts +3 -1
- package/dist/components/layout/heading.js +2 -2
- package/dist/components/layout/separator.d.ts +3 -3
- package/dist/components/layout/separator.js +5 -5
- package/dist/components/list/index.d.ts +2 -2
- package/dist/components/list/index.js +2 -2
- package/dist/components/list/item.d.ts +9 -9
- package/dist/components/list/item.js +7 -7
- package/dist/components/list/variants/bullet.d.ts +9 -9
- package/dist/components/list/variants/bullet.js +16 -16
- package/dist/components/list/variants/number.d.ts +10 -10
- package/dist/components/list/variants/number.js +18 -18
- package/dist/components/multiple-choice.d.ts +2 -2
- package/dist/components/multiple-choice.js +12 -12
- package/dist/components/search/index.d.ts +6 -0
- package/dist/components/search/index.js +12 -0
- package/dist/components/search-bar.d.ts +12 -12
- package/dist/components/search-bar.js +14 -14
- package/dist/components/select.d.ts +6 -6
- package/dist/components/select.js +24 -24
- package/dist/components/text/badge.d.ts +16 -16
- package/dist/components/text/badge.js +28 -28
- package/dist/components/textarea.d.ts +7 -7
- package/dist/components/textarea.js +11 -11
- package/dist/components/upload/file.d.ts +8 -8
- package/dist/components/upload/file.js +15 -15
- package/dist/components/waveform/index.d.ts +8 -0
- package/dist/components/waveform/index.js +11 -0
- package/dist/components/waveform/patterns.d.ts +1 -0
- package/dist/components/waveform/patterns.js +27 -0
- package/dist/core/format.d.ts +3 -3
- package/dist/core/format.js +34 -34
- package/dist/core/functions.d.ts +13 -13
- package/dist/core/functions.js +79 -79
- package/dist/core/types.d.ts +15 -15
- package/dist/core/types.js +2 -2
- package/dist/hooks/audio/sound.d.ts +1 -1
- package/dist/hooks/audio/sound.js +6 -6
- package/dist/hooks/clock/interval.d.ts +8 -8
- package/dist/hooks/clock/interval.js +25 -25
- package/dist/hooks/color.d.ts +7 -0
- package/dist/hooks/color.js +8 -0
- package/dist/hooks/element/container.d.ts +4 -5
- package/dist/hooks/element/container.js +7 -7
- package/dist/hooks/element/resize.d.ts +1 -1
- package/dist/hooks/element/resize.js +12 -12
- package/dist/hooks/index.d.ts +4 -4
- package/dist/hooks/index.js +4 -4
- package/dist/index.d.ts +14 -14
- package/dist/index.js +14 -14
- package/package.json +36 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Field, Option } from "./types";
|
|
2
|
+
export type FormBuilderField<T = unknown> = (Omit<Field<T>, "value" | "update"> & {
|
|
3
|
+
id: string;
|
|
4
|
+
element: string;
|
|
5
|
+
rows?: number;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
options?: Option[];
|
|
8
|
+
})[][];
|
|
9
|
+
type Props<T> = {
|
|
10
|
+
id?: string;
|
|
11
|
+
fields: FormBuilderField<T>;
|
|
12
|
+
data: T;
|
|
13
|
+
setField: (x: string, y: unknown) => void;
|
|
14
|
+
};
|
|
15
|
+
export default function Fields<T>({ fields, data, setField }: Props<T>): Promise<import("react/jsx-runtime").JSX.Element[]>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { RowBox } from "../layout/flex";
|
|
3
|
+
import Input from "../input";
|
|
4
|
+
import Select from "../select";
|
|
5
|
+
import TextArea from "../textarea";
|
|
6
|
+
import MultipleChoice from "../multiple-choice";
|
|
7
|
+
import Attachment from "../attachment";
|
|
8
|
+
export default async function Fields({ fields, data, setField }) {
|
|
9
|
+
return fields.map((row, i) => (_jsx(RowBox, { style: "w-full gap-5 overflow-hidden", children: row.map(({ element, id, rows, label, placeholder, disabled, options, required, note }) => {
|
|
10
|
+
if (element === "input")
|
|
11
|
+
return (_jsx(Input, { id: id, styles: { container: "flex-1" }, label: label, placeholder: placeholder, value: data[id], update: x => setField(id, x), disabled: disabled, note: note, required: required }, id));
|
|
12
|
+
else if (element === "select")
|
|
13
|
+
return (_jsx(Select, { id: id, label: label, placeholder: placeholder, options: options || [], value: data[id], update: x => setField(id, x), note: note, required: required }, id));
|
|
14
|
+
else if (element === "textarea")
|
|
15
|
+
return (_jsx(TextArea, { id: id, label: label, placeholder: placeholder, rows: rows, value: data[id], update: x => setField(id, x), note: note, required: required }, id));
|
|
16
|
+
else if (element === "multiple-choice")
|
|
17
|
+
return (_jsx(MultipleChoice, { id: id, label: label, options: options || [], value: data[id], update: x => setField(id, x), note: note, required: required }, id));
|
|
18
|
+
else if (element === "attachment")
|
|
19
|
+
return (_jsx(Attachment, { id: id, label: label, value: data[id], update: x => setField(id, x), note: note, required: required }, id));
|
|
20
|
+
}) }, i)));
|
|
21
|
+
}
|
|
@@ -3,8 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { Button } from "../button";
|
|
5
5
|
import { RowBox } from "../layout/flex";
|
|
6
|
-
import CheckCircle from "
|
|
7
|
-
import Spinner from "
|
|
6
|
+
import CheckCircle from "../../assets/icons/check-circle.svg";
|
|
7
|
+
import Spinner from "../../assets/icons/spinner.svg";
|
|
8
8
|
export default function FormFooter({ data, validator, submit, clear }) {
|
|
9
9
|
const isValid = validator.safeParse(data).success;
|
|
10
10
|
const [isLoading, setLoading] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const parseData: <T extends Record<string, unknown>>(data: T) => T;
|
|
1
|
+
export declare const parseData: <T extends Record<string, unknown>>(data: T) => T;
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
export const parseData = (data) => {
|
|
2
|
-
const copy = JSON.parse(JSON.stringify(data));
|
|
3
|
-
for (const [key, value] of Object.entries(data)) {
|
|
4
|
-
if (key === "created_at")
|
|
5
|
-
copy[key] = new Date(value);
|
|
6
|
-
else if (key === "timestamp")
|
|
7
|
-
copy[key] = new Date(value.replaceAll("'", ""));
|
|
8
|
-
else if (parseAllowedDate(value))
|
|
9
|
-
copy[key] = new Date(value);
|
|
10
|
-
}
|
|
11
|
-
return copy;
|
|
12
|
-
};
|
|
13
|
-
function parseAllowedDate(input) {
|
|
14
|
-
// ISO 8601 strict (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss+hh:mm)
|
|
15
|
-
const isoStrictRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2}))?$/;
|
|
16
|
-
// MySQL/Postgres style with space + offset without colon (YYYY-MM-DD HH:mm:ss+hhmm)
|
|
17
|
-
const spaceOffsetRegex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}[+-]\d{4}$/;
|
|
18
|
-
let normalized = input;
|
|
19
|
-
if (spaceOffsetRegex.test(input)) {
|
|
20
|
-
// Convert to ISO by replacing space with T and adding colon in offset
|
|
21
|
-
normalized = input.replace(" ", "T").replace(/([+-]\d{2})(\d{2})$/, "$1:$2");
|
|
22
|
-
}
|
|
23
|
-
else if (!isoStrictRegex.test(input)) {
|
|
24
|
-
return null; // Not allowed format
|
|
25
|
-
}
|
|
26
|
-
const date = new Date(normalized);
|
|
27
|
-
return !isNaN(date.getTime()) ? date : null;
|
|
28
|
-
}
|
|
1
|
+
export const parseData = (data) => {
|
|
2
|
+
const copy = JSON.parse(JSON.stringify(data));
|
|
3
|
+
for (const [key, value] of Object.entries(data)) {
|
|
4
|
+
if (key === "created_at")
|
|
5
|
+
copy[key] = new Date(value);
|
|
6
|
+
else if (key === "timestamp")
|
|
7
|
+
copy[key] = new Date(value.replaceAll("'", ""));
|
|
8
|
+
else if (parseAllowedDate(value))
|
|
9
|
+
copy[key] = new Date(value);
|
|
10
|
+
}
|
|
11
|
+
return copy;
|
|
12
|
+
};
|
|
13
|
+
function parseAllowedDate(input) {
|
|
14
|
+
// ISO 8601 strict (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss+hh:mm)
|
|
15
|
+
const isoStrictRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2}))?$/;
|
|
16
|
+
// MySQL/Postgres style with space + offset without colon (YYYY-MM-DD HH:mm:ss+hhmm)
|
|
17
|
+
const spaceOffsetRegex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}[+-]\d{4}$/;
|
|
18
|
+
let normalized = input;
|
|
19
|
+
if (spaceOffsetRegex.test(input)) {
|
|
20
|
+
// Convert to ISO by replacing space with T and adding colon in offset
|
|
21
|
+
normalized = input.replace(" ", "T").replace(/([+-]\d{2})(\d{2})$/, "$1:$2");
|
|
22
|
+
}
|
|
23
|
+
else if (!isoStrictRegex.test(input)) {
|
|
24
|
+
return null; // Not allowed format
|
|
25
|
+
}
|
|
26
|
+
const date = new Date(normalized);
|
|
27
|
+
return !isNaN(date.getTime()) ? date : null;
|
|
28
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
export async function loadJson(name) {
|
|
4
|
+
const file = await fs.readFile(process.cwd() + "/assets/" + name + ".json", "utf-8");
|
|
5
|
+
return JSON.parse(file);
|
|
6
|
+
}
|
|
7
|
+
export async function loadForm(name) {
|
|
8
|
+
if (!name)
|
|
9
|
+
throw new Error("Form not found");
|
|
10
|
+
return loadJson(`forms/${name}`);
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loadJson<T>(name: string): Promise<T>;
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import type { ReactNode, Dispatch, SetStateAction } from "react";
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
data: T;
|
|
5
|
-
update: SetState<T>;
|
|
6
|
-
setField: (x: string, value: unknown) => void;
|
|
7
|
-
clear: () => void;
|
|
8
|
-
};
|
|
9
|
-
export
|
|
10
|
-
id: string;
|
|
11
|
-
element: string;
|
|
12
|
-
rows?: number;
|
|
13
|
-
placeholder?: string;
|
|
14
|
-
options?: Option[];
|
|
15
|
-
})[][];
|
|
16
|
-
export
|
|
17
|
-
id?: string;
|
|
18
|
-
label?: string;
|
|
19
|
-
style?: string;
|
|
20
|
-
value?: K;
|
|
21
|
-
update: SetState<T>;
|
|
22
|
-
required?: boolean;
|
|
23
|
-
disabled?: boolean;
|
|
24
|
-
note?: ReactNode;
|
|
25
|
-
};
|
|
26
|
-
export
|
|
27
|
-
id: string;
|
|
28
|
-
label?: string;
|
|
29
|
-
active?: boolean;
|
|
30
|
-
select?: () => void;
|
|
31
|
-
};
|
|
32
|
-
export
|
|
33
|
-
options: Option[];
|
|
34
|
-
};
|
|
35
|
-
export
|
|
36
|
-
data: T;
|
|
37
|
-
};
|
|
38
|
-
export
|
|
1
|
+
import type { ReactNode, Dispatch, SetStateAction } from "react";
|
|
2
|
+
export type SetState<T> = Dispatch<SetStateAction<T>>;
|
|
3
|
+
export type FormSection<T> = {
|
|
4
|
+
data: T;
|
|
5
|
+
update: SetState<T>;
|
|
6
|
+
setField: (x: string, value: unknown) => void;
|
|
7
|
+
clear: () => void;
|
|
8
|
+
};
|
|
9
|
+
export type FormBuilderField<T = unknown> = (Omit<Field<T>, "value" | "update"> & {
|
|
10
|
+
id: string;
|
|
11
|
+
element: string;
|
|
12
|
+
rows?: number;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
options?: Option[];
|
|
15
|
+
})[][];
|
|
16
|
+
export type Field<T, K = string> = {
|
|
17
|
+
id?: string;
|
|
18
|
+
label?: string;
|
|
19
|
+
style?: string;
|
|
20
|
+
value?: K;
|
|
21
|
+
update: SetState<T>;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
note?: ReactNode;
|
|
25
|
+
};
|
|
26
|
+
export type Option = {
|
|
27
|
+
id: string;
|
|
28
|
+
label?: string;
|
|
29
|
+
active?: boolean;
|
|
30
|
+
select?: () => void;
|
|
31
|
+
};
|
|
32
|
+
export type OptionField<T> = Field<T> & {
|
|
33
|
+
options: Option[];
|
|
34
|
+
};
|
|
35
|
+
export type Form<T> = {
|
|
36
|
+
data: T;
|
|
37
|
+
};
|
|
38
|
+
export type FormSubmit<T> = (data: T, clear?: () => void) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
badge?: string;
|
|
4
|
-
title: ReactNode;
|
|
5
|
-
subtitle?: ReactNode;
|
|
6
|
-
style?: Styles;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
container?: string;
|
|
10
|
-
badge?: string;
|
|
11
|
-
title?: string;
|
|
12
|
-
subtitle?: string;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Text heading with badge, title, subtitle.
|
|
16
|
-
*
|
|
17
|
-
* @param {string} badge - Little note above the title (optional).
|
|
18
|
-
* @param {ReactNode} title - Main title content.
|
|
19
|
-
* @param {ReactNode} subtitle - Subtitle content (optional).
|
|
20
|
-
* @param {Styles} style - Additional styles (optional).
|
|
21
|
-
**/
|
|
22
|
-
export default function Heading({ badge, title, subtitle, style }: Props): import("react/jsx-runtime").JSX.Element;
|
|
23
|
-
export {};
|
|
24
|
-
/**
|
|
25
|
-
* Problems
|
|
26
|
-
*
|
|
27
|
-
* - Perfect `Badge`
|
|
28
|
-
* - Long `subtitle` style
|
|
29
|
-
**/
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
type Props = {
|
|
3
|
+
badge?: string;
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
subtitle?: ReactNode;
|
|
6
|
+
style?: Styles;
|
|
7
|
+
};
|
|
8
|
+
type Styles = {
|
|
9
|
+
container?: string;
|
|
10
|
+
badge?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Text heading with badge, title, subtitle.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} badge - Little note above the title (optional).
|
|
18
|
+
* @param {ReactNode} title - Main title content.
|
|
19
|
+
* @param {ReactNode} subtitle - Subtitle content (optional).
|
|
20
|
+
* @param {Styles} style - Additional styles (optional).
|
|
21
|
+
**/
|
|
22
|
+
export default function Heading({ badge, title, subtitle, style }: Props): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
/**
|
|
25
|
+
* Problems
|
|
26
|
+
*
|
|
27
|
+
* - Perfect `Badge`
|
|
28
|
+
* - Long `subtitle` style
|
|
29
|
+
**/
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { mergeStyles } from "@bouko/style";
|
|
3
|
-
import { RowBox, ColumnBox } from "../layout/flex";
|
|
4
|
-
import { Badge } from "../text/badge";
|
|
5
|
-
/**
|
|
6
|
-
* Text heading with badge, title, subtitle.
|
|
7
|
-
*
|
|
8
|
-
* @param {string} badge - Little note above the title (optional).
|
|
9
|
-
* @param {ReactNode} title - Main title content.
|
|
10
|
-
* @param {ReactNode} subtitle - Subtitle content (optional).
|
|
11
|
-
* @param {Styles} style - Additional styles (optional).
|
|
12
|
-
**/
|
|
13
|
-
export default function Heading({ badge, title, subtitle, style = {} }) {
|
|
14
|
-
const styles = mergeStyles(base, style);
|
|
15
|
-
return (_jsxs(ColumnBox, { style: styles.container, children: [_jsx(Badge, { style: styles.badge, children: badge }
|
|
16
|
-
}
|
|
17
|
-
const base = {
|
|
18
|
-
container: "items-center",
|
|
19
|
-
badge: "mb-2",
|
|
20
|
-
title: "items-center gap-2 text-xl sm:text-2xl 2xl:text-3xl font-bold text-primary",
|
|
21
|
-
subtitle: "items-center gap-2 max-sm:text-sm 2xl:text-lg text-center text-primary-light dark:text-primary-dark"
|
|
22
|
-
};
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { mergeStyles } from "@bouko/style";
|
|
3
|
+
import { RowBox, ColumnBox } from "../layout/flex";
|
|
4
|
+
import { Badge } from "../text/badge";
|
|
5
|
+
/**
|
|
6
|
+
* Text heading with badge, title, subtitle.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} badge - Little note above the title (optional).
|
|
9
|
+
* @param {ReactNode} title - Main title content.
|
|
10
|
+
* @param {ReactNode} subtitle - Subtitle content (optional).
|
|
11
|
+
* @param {Styles} style - Additional styles (optional).
|
|
12
|
+
**/
|
|
13
|
+
export default function Heading({ badge, title, subtitle, style = {} }) {
|
|
14
|
+
const styles = mergeStyles(base, style);
|
|
15
|
+
return (_jsxs(ColumnBox, { style: styles.container, children: [_jsx(Badge, { style: styles.badge, children: badge }), _jsx(RowBox, { style: styles.title, children: title }), _jsx(RowBox, { style: styles.subtitle, children: subtitle })] }));
|
|
16
|
+
}
|
|
17
|
+
const base = {
|
|
18
|
+
container: "items-center",
|
|
19
|
+
badge: "mb-2",
|
|
20
|
+
title: "items-center gap-2 text-xl sm:text-2xl 2xl:text-3xl font-bold text-primary",
|
|
21
|
+
subtitle: "items-center gap-2 max-sm:text-sm 2xl:text-lg text-center text-primary-light dark:text-primary-dark"
|
|
22
|
+
};
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
style?: Styles;
|
|
4
|
-
badge?: string;
|
|
5
|
-
icon?: ReactNode;
|
|
6
|
-
title: string;
|
|
7
|
-
subtitle?: string;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
container?: string;
|
|
11
|
-
badge?: string;
|
|
12
|
-
title?: string;
|
|
13
|
-
subtitle?: string;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Text heading with badge, title, subtitle.
|
|
17
|
-
*
|
|
18
|
-
* @param {Styles} style - Additional styles. (optional)
|
|
19
|
-
* @param {string} badge - Little note above the title. (optional)
|
|
20
|
-
* @param {ReactNode} icon - Component displayed left of title. (optional)
|
|
21
|
-
* @param {string} title - Main title content.
|
|
22
|
-
* @param {string} subtitle - Subtitle content. (optional)
|
|
23
|
-
**/
|
|
24
|
-
export default function PageHeading({ style, badge, icon, title, subtitle }: Props): import("react/jsx-runtime").JSX.Element;
|
|
25
|
-
export {};
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
type Props = {
|
|
3
|
+
style?: Styles;
|
|
4
|
+
badge?: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
title: string;
|
|
7
|
+
subtitle?: string;
|
|
8
|
+
};
|
|
9
|
+
type Styles = {
|
|
10
|
+
container?: string;
|
|
11
|
+
badge?: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
subtitle?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Text heading with badge, title, subtitle.
|
|
17
|
+
*
|
|
18
|
+
* @param {Styles} style - Additional styles. (optional)
|
|
19
|
+
* @param {string} badge - Little note above the title. (optional)
|
|
20
|
+
* @param {ReactNode} icon - Component displayed left of title. (optional)
|
|
21
|
+
* @param {string} title - Main title content.
|
|
22
|
+
* @param {string} subtitle - Subtitle content. (optional)
|
|
23
|
+
**/
|
|
24
|
+
export default function PageHeading({ style, badge, icon, title, subtitle }: Props): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export {};
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { mergeStyles } from "@bouko/style";
|
|
3
|
-
import { RowBox, ColumnBox } from "../layout/flex";
|
|
4
|
-
import { Badge } from "../text/badge";
|
|
5
|
-
/**
|
|
6
|
-
* Text heading with badge, title, subtitle.
|
|
7
|
-
*
|
|
8
|
-
* @param {Styles} style - Additional styles. (optional)
|
|
9
|
-
* @param {string} badge - Little note above the title. (optional)
|
|
10
|
-
* @param {ReactNode} icon - Component displayed left of title. (optional)
|
|
11
|
-
* @param {string} title - Main title content.
|
|
12
|
-
* @param {string} subtitle - Subtitle content. (optional)
|
|
13
|
-
**/
|
|
14
|
-
export default function PageHeading({ style = {}, badge, icon, title, subtitle }) {
|
|
15
|
-
const styles = mergeStyles(base, style);
|
|
16
|
-
return (_jsxs(ColumnBox, { style: styles.container, children: [_jsx(Badge, { style: styles.badge, children: badge }
|
|
17
|
-
}
|
|
18
|
-
const base = {
|
|
19
|
-
container: "w-full items-center font-mono",
|
|
20
|
-
badge: "mb-2",
|
|
21
|
-
title: "items-center gap-2 mb-3 text-4xl sm:text-5xl 2xl:text-6xl text-center font-bold text-primary",
|
|
22
|
-
subtitle: "items-center gap-2 text-sm sm:text-base 2xl:text-lg text-center text-primary-light dark:text-primary-dark"
|
|
23
|
-
};
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { mergeStyles } from "@bouko/style";
|
|
3
|
+
import { RowBox, ColumnBox } from "../layout/flex";
|
|
4
|
+
import { Badge } from "../text/badge";
|
|
5
|
+
/**
|
|
6
|
+
* Text heading with badge, title, subtitle.
|
|
7
|
+
*
|
|
8
|
+
* @param {Styles} style - Additional styles. (optional)
|
|
9
|
+
* @param {string} badge - Little note above the title. (optional)
|
|
10
|
+
* @param {ReactNode} icon - Component displayed left of title. (optional)
|
|
11
|
+
* @param {string} title - Main title content.
|
|
12
|
+
* @param {string} subtitle - Subtitle content. (optional)
|
|
13
|
+
**/
|
|
14
|
+
export default function PageHeading({ style = {}, badge, icon, title, subtitle }) {
|
|
15
|
+
const styles = mergeStyles(base, style);
|
|
16
|
+
return (_jsxs(ColumnBox, { style: styles.container, children: [_jsx(Badge, { style: styles.badge, children: badge }), _jsxs(RowBox, { style: styles.title, children: [icon, title] }), _jsx(RowBox, { style: styles.subtitle, children: subtitle })] }));
|
|
17
|
+
}
|
|
18
|
+
const base = {
|
|
19
|
+
container: "w-full items-center font-mono",
|
|
20
|
+
badge: "mb-2",
|
|
21
|
+
title: "items-center gap-2 mb-3 text-4xl sm:text-5xl 2xl:text-6xl text-center font-bold text-primary",
|
|
22
|
+
subtitle: "items-center gap-2 text-sm sm:text-base 2xl:text-lg text-center text-primary-light dark:text-primary-dark"
|
|
23
|
+
};
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
export { default as Separator } from "./layout/separator";
|
|
2
|
-
export { default as FadeBox } from "./layout/fade";
|
|
3
|
-
export { default as Heading } from "./heading/normal";
|
|
4
|
-
export { default as PageHeading } from "./heading/page";
|
|
5
|
-
export * from "./layout/flex";
|
|
6
|
-
export { default as Button } from "./button/normal";
|
|
7
|
-
export { default as
|
|
8
|
-
export { default as
|
|
9
|
-
export { default as
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export * from "./
|
|
13
|
-
export * from "./list";
|
|
14
|
-
export * from "./carousel";
|
|
1
|
+
export { default as Separator } from "./layout/separator";
|
|
2
|
+
export { default as FadeBox } from "./layout/fade";
|
|
3
|
+
export { default as Heading } from "./heading/normal";
|
|
4
|
+
export { default as PageHeading } from "./heading/page";
|
|
5
|
+
export * from "./layout/flex";
|
|
6
|
+
export { default as Button } from "./button/normal";
|
|
7
|
+
export { default as Badge } from "./text/badge";
|
|
8
|
+
export { default as Dropdown } from "./dropdown/normal";
|
|
9
|
+
export { default as FileUploader } from "./upload/file";
|
|
10
|
+
export * from "./animate";
|
|
11
|
+
export * from "./list";
|
|
12
|
+
export * from "./carousel";
|
package/dist/components/index.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
export { default as Separator } from "./layout/separator";
|
|
2
|
-
export { default as FadeBox } from "./layout/fade";
|
|
3
|
-
export { default as Heading } from "./heading/normal";
|
|
4
|
-
export { default as PageHeading } from "./heading/page";
|
|
5
|
-
export * from "./layout/flex";
|
|
6
|
-
export { default as Button } from "./button/normal";
|
|
7
|
-
export { default as
|
|
8
|
-
export { default as
|
|
9
|
-
export { default as
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export * from "./
|
|
13
|
-
export * from "./list";
|
|
14
|
-
export * from "./carousel";
|
|
1
|
+
export { default as Separator } from "./layout/separator";
|
|
2
|
+
export { default as FadeBox } from "./layout/fade";
|
|
3
|
+
export { default as Heading } from "./heading/normal";
|
|
4
|
+
export { default as PageHeading } from "./heading/page";
|
|
5
|
+
export * from "./layout/flex";
|
|
6
|
+
export { default as Button } from "./button/normal";
|
|
7
|
+
export { default as Badge } from "./text/badge";
|
|
8
|
+
export { default as Dropdown } from "./dropdown/normal";
|
|
9
|
+
export { default as FileUploader } from "./upload/file";
|
|
10
|
+
export * from "./animate";
|
|
11
|
+
export * from "./list";
|
|
12
|
+
export * from "./carousel";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { Field as FieldProps } from "./form/types";
|
|
2
|
-
|
|
3
|
-
placeholder?: string;
|
|
4
|
-
styles?: {
|
|
5
|
-
container?: string;
|
|
6
|
-
input?: string;
|
|
7
|
-
};
|
|
8
|
-
disabled?: boolean;
|
|
9
|
-
};
|
|
10
|
-
export default function Input({ id, styles, label, required, note, style, value, update, ...props }: Props<string>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
export {};
|
|
1
|
+
import type { Field as FieldProps } from "./form/types";
|
|
2
|
+
type Props<T> = FieldProps<T> & {
|
|
3
|
+
placeholder?: string;
|
|
4
|
+
styles?: {
|
|
5
|
+
container?: string;
|
|
6
|
+
input?: string;
|
|
7
|
+
};
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export default function Input({ id, styles, label, required, note, style, value, update, ...props }: Props<string>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
package/dist/components/input.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import Field from "./field";
|
|
3
|
-
import { cn } from "@bouko/style";
|
|
4
|
-
export default function Input({ id, styles, label, required = true, note, style, value, update, ...props }) {
|
|
5
|
-
return (_jsx(Field, { style: styles?.container, label: label, required: required, note: note, children: _jsx("input", { className: cn("px-3 py-2 bg-input border border-outline duration-200 focus:border-outline-light outline-none rounded text-sm disabled:brightness-90 disabled:cursor-not-allowed", styles?.input), onChange: ({ target: { value } }) => update(value), value: value ?? "", ...props }
|
|
6
|
-
}
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import Field from "./field";
|
|
3
|
+
import { cn } from "@bouko/style";
|
|
4
|
+
export default function Input({ id, styles, label, required = true, note, style, value, update, ...props }) {
|
|
5
|
+
return (_jsx(Field, { style: styles?.container, label: label, required: required, note: note, children: _jsx("input", { className: cn("px-3 py-2 bg-input border border-outline duration-200 focus:border-outline-light outline-none rounded text-sm disabled:brightness-90 disabled:cursor-not-allowed", styles?.input), onChange: ({ target: { value } }) => update(value), value: value ?? "", ...props }) }));
|
|
6
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Component } from "../../core/types";
|
|
2
|
-
|
|
3
|
-
gradient?: string;
|
|
4
|
-
};
|
|
5
|
-
export default function FadeBox({ style, gradient, children }: Props): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
export {};
|
|
1
|
+
import { Component } from "../../core/types";
|
|
2
|
+
type Props = Component & {
|
|
3
|
+
gradient?: string;
|
|
4
|
+
};
|
|
5
|
+
export default function FadeBox({ style, gradient, children }: Props): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn, tv } from "@bouko/style";
|
|
3
|
-
export default function FadeBox({ style, gradient, children }) {
|
|
4
|
-
const direction = "left";
|
|
5
|
-
return (_jsxs("div", { className: cn("relative", style), children: [children, _jsx("div", { className: cn(styles({ direction }), gradient) }
|
|
6
|
-
}
|
|
7
|
-
const styles = tv({
|
|
8
|
-
base: "absolute from-background",
|
|
9
|
-
variants: {
|
|
10
|
-
direction: {
|
|
11
|
-
left: "top-0 right-0 w-12 h-full bg-gradient-to-l"
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
});
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn, tv } from "@bouko/style";
|
|
3
|
+
export default function FadeBox({ style, gradient, children }) {
|
|
4
|
+
const direction = "left";
|
|
5
|
+
return (_jsxs("div", { className: cn("relative", style), children: [children, _jsx("div", { className: cn(styles({ direction }), gradient) })] }));
|
|
6
|
+
}
|
|
7
|
+
const styles = tv({
|
|
8
|
+
base: "absolute from-background",
|
|
9
|
+
variants: {
|
|
10
|
+
direction: {
|
|
11
|
+
left: "top-0 right-0 w-12 h-full bg-gradient-to-l"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
});
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Component } from "../../core/types";
|
|
2
|
-
|
|
3
|
-
center?: boolean;
|
|
4
|
-
centerX?: boolean;
|
|
5
|
-
centerY?: boolean;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Flex containers with configurable alignment and styling.
|
|
9
|
-
*
|
|
10
|
-
* @param {string} style - Additional styles for container.
|
|
11
|
-
* @param {ReactNode} children - Child elements to render inside the row.
|
|
12
|
-
* @param {Props} opts - Variant options for styling.
|
|
13
|
-
**/
|
|
14
|
-
export declare const RowBox: ({ style, children, ...opts }: Props) => import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
-
export declare const ColumnBox: ({ style, children, ...opts }: Props) => import("react/jsx-runtime").JSX.Element | null;
|
|
16
|
-
export {};
|
|
1
|
+
import { Component } from "../../core/types";
|
|
2
|
+
type Props = Component & {
|
|
3
|
+
center?: boolean;
|
|
4
|
+
centerX?: boolean;
|
|
5
|
+
centerY?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Flex containers with configurable alignment and styling.
|
|
9
|
+
*
|
|
10
|
+
* @param {string} style - Additional styles for container.
|
|
11
|
+
* @param {ReactNode} children - Child elements to render inside the row.
|
|
12
|
+
* @param {Props} opts - Variant options for styling.
|
|
13
|
+
**/
|
|
14
|
+
export declare const RowBox: ({ style, children, ...opts }: Props) => import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
export declare const ColumnBox: ({ style, children, ...opts }: Props) => import("react/jsx-runtime").JSX.Element | null;
|
|
16
|
+
export {};
|