@bouko/react 2.4.3 → 2.4.5

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.
Files changed (104) hide show
  1. package/dist/assets/icons/check copy.svg +6 -0
  2. package/dist/assets/icons/check-circle copy.svg +6 -0
  3. package/dist/assets/icons/chevron copy.svg +6 -0
  4. package/dist/assets/icons/paperclip copy.svg +6 -0
  5. package/dist/assets/icons/spinner copy.svg +6 -0
  6. package/dist/assets/icons/x-circle copy.svg +6 -0
  7. package/dist/components/animate/configs.d.ts +136 -136
  8. package/dist/components/animate/configs.js +62 -62
  9. package/dist/components/animate/index.d.ts +12 -12
  10. package/dist/components/animate/index.js +7 -7
  11. package/dist/components/attachment.d.ts +2 -2
  12. package/dist/components/attachment.js +18 -18
  13. package/dist/components/badge.d.ts +5 -0
  14. package/dist/components/badge.js +4 -0
  15. package/dist/components/button/ghost.d.ts +7 -0
  16. package/dist/components/button/ghost.js +8 -0
  17. package/dist/components/button/load.d.ts +10 -10
  18. package/dist/components/button/load.js +35 -35
  19. package/dist/components/button/normal.d.ts +11 -0
  20. package/dist/components/button/normal.js +23 -0
  21. package/dist/components/button.d.ts +10 -10
  22. package/dist/components/button.js +22 -22
  23. package/dist/components/carousel/index.d.ts +7 -7
  24. package/dist/components/carousel/index.js +15 -15
  25. package/dist/components/checkbox.d.ts +8 -8
  26. package/dist/components/checkbox.js +13 -13
  27. package/dist/components/dropdown/normal.d.ts +10 -10
  28. package/dist/components/dropdown/normal.js +19 -19
  29. package/dist/components/fade-carousel.d.ts +4 -4
  30. package/dist/components/fade-carousel.js +14 -14
  31. package/dist/components/field.d.ts +10 -10
  32. package/dist/components/field.js +10 -10
  33. package/dist/components/flex.d.ts +16 -0
  34. package/dist/components/flex.js +8 -0
  35. package/dist/components/form/fields.d.ts +16 -0
  36. package/dist/components/form/fields.js +21 -0
  37. package/dist/components/form/footer.js +2 -2
  38. package/dist/components/form/functions.d.ts +1 -1
  39. package/dist/components/form/functions.js +28 -28
  40. package/dist/components/form/loaders.d.ts +3 -0
  41. package/dist/components/form/loaders.js +11 -0
  42. package/dist/components/form/test-next.d.ts +1 -0
  43. package/dist/components/form/test-next.js +6 -0
  44. package/dist/components/form/types.d.ts +38 -38
  45. package/dist/components/form/types.js +1 -1
  46. package/dist/components/heading/normal.d.ts +29 -29
  47. package/dist/components/heading/normal.js +22 -22
  48. package/dist/components/heading/page.d.ts +25 -25
  49. package/dist/components/heading/page.js +23 -23
  50. package/dist/components/index.d.ts +13 -11
  51. package/dist/components/index.js +13 -11
  52. package/dist/components/input.d.ts +11 -11
  53. package/dist/components/input.js +6 -6
  54. package/dist/components/layout/fade.d.ts +6 -6
  55. package/dist/components/layout/fade.js +14 -14
  56. package/dist/components/layout/flex.d.ts +16 -16
  57. package/dist/components/layout/flex.js +42 -42
  58. package/dist/components/layout/heading.d.ts +3 -1
  59. package/dist/components/layout/heading.js +2 -2
  60. package/dist/components/layout/separator.d.ts +3 -3
  61. package/dist/components/layout/separator.js +5 -5
  62. package/dist/components/list/index.d.ts +2 -2
  63. package/dist/components/list/index.js +2 -2
  64. package/dist/components/list/item.d.ts +9 -9
  65. package/dist/components/list/item.js +7 -7
  66. package/dist/components/list/variants/bullet.d.ts +9 -9
  67. package/dist/components/list/variants/bullet.js +16 -16
  68. package/dist/components/list/variants/number.d.ts +10 -10
  69. package/dist/components/list/variants/number.js +18 -18
  70. package/dist/components/multiple-choice.d.ts +2 -2
  71. package/dist/components/multiple-choice.js +12 -12
  72. package/dist/components/search/index.d.ts +6 -0
  73. package/dist/components/search/index.js +12 -0
  74. package/dist/components/search-bar.d.ts +12 -12
  75. package/dist/components/search-bar.js +14 -14
  76. package/dist/components/select.d.ts +6 -6
  77. package/dist/components/select.js +24 -24
  78. package/dist/components/text/badge.d.ts +16 -16
  79. package/dist/components/text/badge.js +28 -28
  80. package/dist/components/textarea.d.ts +7 -7
  81. package/dist/components/textarea.js +11 -11
  82. package/dist/components/upload/file.d.ts +8 -8
  83. package/dist/components/upload/file.js +15 -15
  84. package/dist/core/format.d.ts +3 -3
  85. package/dist/core/format.js +34 -34
  86. package/dist/core/functions.d.ts +13 -13
  87. package/dist/core/functions.js +79 -79
  88. package/dist/core/types.d.ts +15 -11
  89. package/dist/core/types.js +2 -2
  90. package/dist/hooks/audio/sound.d.ts +1 -1
  91. package/dist/hooks/audio/sound.js +6 -6
  92. package/dist/hooks/clock/interval.d.ts +8 -8
  93. package/dist/hooks/clock/interval.js +25 -25
  94. package/dist/hooks/color.d.ts +7 -0
  95. package/dist/hooks/color.js +8 -0
  96. package/dist/hooks/element/container.d.ts +4 -5
  97. package/dist/hooks/element/container.js +7 -7
  98. package/dist/hooks/element/resize.d.ts +1 -1
  99. package/dist/hooks/element/resize.js +12 -12
  100. package/dist/hooks/index.d.ts +4 -4
  101. package/dist/hooks/index.js +4 -4
  102. package/dist/index.d.ts +14 -15
  103. package/dist/index.js +14 -15
  104. package/package.json +1 -1
@@ -1,79 +1,79 @@
1
- import { fileTypeFromBuffer } from "file-type";
2
- export const getFilesData = (files) => Promise.all(files.map((file) => {
3
- return new Promise((resolve, reject) => {
4
- const reader = new FileReader();
5
- reader.onload = () => {
6
- const base64 = reader.result?.toString().split(",")[1]; // Remove data prefix
7
- return resolve({
8
- filename: file.name,
9
- mimetype: file.type,
10
- data: base64,
11
- });
12
- };
13
- reader.onerror = reject;
14
- reader.readAsDataURL(file);
15
- });
16
- }));
17
- export const getFileData = (file) => new Promise((resolve, reject) => {
18
- const reader = new FileReader();
19
- reader.onload = () => {
20
- const base64 = reader.result?.toString().split(",")[1]; // Remove data prefix
21
- return resolve({
22
- filename: file.name,
23
- mimetype: file.type,
24
- data: base64,
25
- });
26
- };
27
- reader.onerror = reject;
28
- reader.readAsDataURL(file);
29
- });
30
- async function detectFileExtension(buffer) {
31
- const type = await fileTypeFromBuffer(buffer);
32
- if (!type)
33
- return null;
34
- return type;
35
- }
36
- export const bufferToFile = async (buffer, name) => {
37
- const type = await detectFileExtension(buffer);
38
- if (!type)
39
- throw new Error("Couldn't get type from buffer");
40
- return new File([buffer], `${name ?? "file"}.${type.ext}`, {
41
- type: type.mime,
42
- lastModified: Date.now()
43
- });
44
- };
45
- export const getAudioDuration = (file) => {
46
- return new Promise((resolve, reject) => {
47
- const url = URL.createObjectURL(file);
48
- const audio = new Audio(url);
49
- audio.addEventListener("loadedmetadata", () => {
50
- const durationMs = audio.duration * 1000;
51
- URL.revokeObjectURL(url);
52
- resolve(durationMs);
53
- });
54
- audio.addEventListener("error", (e) => {
55
- URL.revokeObjectURL(url);
56
- reject(new Error("Failed to load audio metadata"));
57
- });
58
- });
59
- };
60
- export async function getBase64(image) {
61
- if (image.startsWith("data:")) {
62
- return image; // already a base64 data URL
63
- }
64
- const res = await fetch(image);
65
- const blob = await res.blob();
66
- return new Promise((resolve, reject) => {
67
- const reader = new FileReader();
68
- reader.onloadend = () => {
69
- if (typeof reader.result === "string") {
70
- resolve(reader.result);
71
- }
72
- else {
73
- reject(new Error("Failed to read image as base64"));
74
- }
75
- };
76
- reader.onerror = reject;
77
- reader.readAsDataURL(blob);
78
- });
79
- }
1
+ import { fileTypeFromBuffer } from "file-type";
2
+ export const getFilesData = (files) => Promise.all(files.map((file) => {
3
+ return new Promise((resolve, reject) => {
4
+ const reader = new FileReader();
5
+ reader.onload = () => {
6
+ const base64 = reader.result?.toString().split(",")[1]; // Remove data prefix
7
+ return resolve({
8
+ filename: file.name,
9
+ mimetype: file.type,
10
+ data: base64,
11
+ });
12
+ };
13
+ reader.onerror = reject;
14
+ reader.readAsDataURL(file);
15
+ });
16
+ }));
17
+ export const getFileData = (file) => new Promise((resolve, reject) => {
18
+ const reader = new FileReader();
19
+ reader.onload = () => {
20
+ const base64 = reader.result?.toString().split(",")[1]; // Remove data prefix
21
+ return resolve({
22
+ filename: file.name,
23
+ mimetype: file.type,
24
+ data: base64,
25
+ });
26
+ };
27
+ reader.onerror = reject;
28
+ reader.readAsDataURL(file);
29
+ });
30
+ async function detectFileExtension(buffer) {
31
+ const type = await fileTypeFromBuffer(buffer);
32
+ if (!type)
33
+ return null;
34
+ return type;
35
+ }
36
+ export const bufferToFile = async (buffer, name) => {
37
+ const type = await detectFileExtension(buffer);
38
+ if (!type)
39
+ throw new Error("Couldn't get type from buffer");
40
+ return new File([buffer], `${name ?? "file"}.${type.ext}`, {
41
+ type: type.mime,
42
+ lastModified: Date.now()
43
+ });
44
+ };
45
+ export const getAudioDuration = (file) => {
46
+ return new Promise((resolve, reject) => {
47
+ const url = URL.createObjectURL(file);
48
+ const audio = new Audio(url);
49
+ audio.addEventListener("loadedmetadata", () => {
50
+ const durationMs = audio.duration * 1000;
51
+ URL.revokeObjectURL(url);
52
+ resolve(durationMs);
53
+ });
54
+ audio.addEventListener("error", (e) => {
55
+ URL.revokeObjectURL(url);
56
+ reject(new Error("Failed to load audio metadata"));
57
+ });
58
+ });
59
+ };
60
+ export async function getBase64(image) {
61
+ if (image.startsWith("data:")) {
62
+ return image; // already a base64 data URL
63
+ }
64
+ const res = await fetch(image);
65
+ const blob = await res.blob();
66
+ return new Promise((resolve, reject) => {
67
+ const reader = new FileReader();
68
+ reader.onloadend = () => {
69
+ if (typeof reader.result === "string") {
70
+ resolve(reader.result);
71
+ }
72
+ else {
73
+ reject(new Error("Failed to read image as base64"));
74
+ }
75
+ };
76
+ reader.onerror = reject;
77
+ reader.readAsDataURL(blob);
78
+ });
79
+ }
@@ -1,11 +1,15 @@
1
- import { ReactNode } from "react";
2
- /**
3
- * Common props for React components.
4
- *
5
- * @property style - Tailwind class name(s) (optional)
6
- * @property children - React children nodes (optional)
7
- **/
8
- export declare type Component = {
9
- style?: string;
10
- children?: ReactNode;
11
- };
1
+ import { ReactNode } from "react";
2
+ /**
3
+ * Common props for React components.
4
+ *
5
+ * @property style - Tailwind class name(s)
6
+ * @property children - React children nodes
7
+ * @property action - Executes on click
8
+ **/
9
+ export type Component = {
10
+ style?: string;
11
+ children?: ReactNode;
12
+ };
13
+ export type Clickable = {
14
+ action: () => void;
15
+ };
@@ -1,2 +1,2 @@
1
- export {};
2
- // clean
1
+ export {};
2
+ // clean
@@ -1 +1 @@
1
- export default function useSound(filename?: string): import("use-sound/dist/types").PlayFunction | undefined;
1
+ export default function useSound(filename?: string): import("use-sound/dist/types").PlayFunction | undefined;
@@ -1,6 +1,6 @@
1
- import { default as base } from "use-sound";
2
- export default function useSound(filename) {
3
- if (!filename)
4
- return;
5
- return base(filename)[0];
6
- }
1
+ import { default as base } from "use-sound";
2
+ export default function useSound(filename) {
3
+ if (!filename)
4
+ return;
5
+ return base(filename)[0];
6
+ }
@@ -1,8 +1,8 @@
1
- declare type Props = {
2
- action: () => Promise<boolean | void>;
3
- duration: number;
4
- deps: unknown[];
5
- oops?: (x: string) => void;
6
- };
7
- export default function useInterval({ action, duration, deps, oops }: Props): void;
8
- export {};
1
+ type Props = {
2
+ action: () => Promise<boolean | void>;
3
+ duration: number;
4
+ deps: unknown[];
5
+ oops?: (x: string) => void;
6
+ };
7
+ export default function useInterval({ action, duration, deps, oops }: Props): void;
8
+ export {};
@@ -1,25 +1,25 @@
1
- "use client";
2
- import { useEffect, useRef } from "react";
3
- export default function useInterval({ action, duration, deps = [], oops }) {
4
- const ref = useRef(async () => false);
5
- useEffect(() => {
6
- ref.current = action;
7
- }, [action]);
8
- useEffect(() => {
9
- if (deps.some(v => v === undefined || v === null))
10
- return;
11
- const tick = async () => {
12
- try {
13
- const stop = await ref.current();
14
- if (stop && id)
15
- clearInterval(id);
16
- }
17
- catch (err) {
18
- oops?.(err.message);
19
- }
20
- };
21
- const id = setInterval(tick, duration);
22
- tick();
23
- return () => clearInterval(id);
24
- }, [duration, ...deps]);
25
- }
1
+ "use client";
2
+ import { useEffect, useRef } from "react";
3
+ export default function useInterval({ action, duration, deps = [], oops }) {
4
+ const ref = useRef(async () => false);
5
+ useEffect(() => {
6
+ ref.current = action;
7
+ }, [action]);
8
+ useEffect(() => {
9
+ if (deps.some(v => v === undefined || v === null))
10
+ return;
11
+ const tick = async () => {
12
+ try {
13
+ const stop = await ref.current();
14
+ if (stop && id)
15
+ clearInterval(id);
16
+ }
17
+ catch (err) {
18
+ oops?.(err.message);
19
+ }
20
+ };
21
+ const id = setInterval(tick, duration);
22
+ tick();
23
+ return () => clearInterval(id);
24
+ }, [duration, ...deps]);
25
+ }
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ variable: string;
3
+ color: string;
4
+ original: string;
5
+ };
6
+ export default function useColor({ variable, color, original }: Props): void;
7
+ export {};
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ export default function useColor({ variable, color, original }) {
4
+ useEffect(() => {
5
+ document.documentElement.style.setProperty(`--${variable}`, color);
6
+ return () => document.documentElement.style.setProperty(`--${variable}`, original);
7
+ }, []);
8
+ }
@@ -1,5 +1,4 @@
1
- /// <reference types="react" />
2
- export default function useContainer(): {
3
- ref: import("react").RefObject<HTMLDivElement | null>;
4
- container: HTMLElement | null | undefined;
5
- };
1
+ export default function useContainer(): {
2
+ ref: import("react").RefObject<HTMLDivElement | null>;
3
+ container: HTMLElement | null | undefined;
4
+ };
@@ -1,7 +1,7 @@
1
- "use client";
2
- import { useRef } from "react";
3
- export default function useContainer() {
4
- const ref = useRef(null);
5
- const container = ref.current?.parentElement;
6
- return { ref, container };
7
- }
1
+ "use client";
2
+ import { useRef } from "react";
3
+ export default function useContainer() {
4
+ const ref = useRef(null);
5
+ const container = ref.current?.parentElement;
6
+ return { ref, container };
7
+ }
@@ -1 +1 @@
1
- export default function useResizeObserver(element: HTMLElement | null | undefined, action: () => void): void;
1
+ export default function useResizeObserver(element: HTMLElement | null | undefined, action: () => void): void;
@@ -1,12 +1,12 @@
1
- "use client";
2
- import { useEffect } from "react";
3
- export default function useResizeObserver(element, action) {
4
- useEffect(() => {
5
- if (!element)
6
- return;
7
- const observer = new ResizeObserver(action);
8
- observer.observe(element);
9
- action();
10
- return () => observer.disconnect();
11
- }, [element, action]);
12
- }
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ export default function useResizeObserver(element, action) {
4
+ useEffect(() => {
5
+ if (!element)
6
+ return;
7
+ const observer = new ResizeObserver(action);
8
+ observer.observe(element);
9
+ action();
10
+ return () => observer.disconnect();
11
+ }, [element, action]);
12
+ }
@@ -1,4 +1,4 @@
1
- export { default as useContainer } from "./element/container";
2
- export { default as useResize } from "./element/resize";
3
- export { default as useInterval } from "./clock/interval";
4
- export { default as useSound } from "./audio/sound";
1
+ export { default as useContainer } from "./element/container";
2
+ export { default as useResize } from "./element/resize";
3
+ export { default as useInterval } from "./clock/interval";
4
+ export { default as useSound } from "./audio/sound";
@@ -1,4 +1,4 @@
1
- export { default as useContainer } from "./element/container";
2
- export { default as useResize } from "./element/resize";
3
- export { default as useInterval } from "./clock/interval";
4
- export { default as useSound } from "./audio/sound";
1
+ export { default as useContainer } from "./element/container";
2
+ export { default as useResize } from "./element/resize";
3
+ export { default as useInterval } from "./clock/interval";
4
+ export { default as useSound } from "./audio/sound";
package/dist/index.d.ts CHANGED
@@ -1,15 +1,14 @@
1
- export { default as Input } from "./components/input";
2
- export { default as TextArea } from "./components/textarea";
3
- export { default as Select } from "./components/select";
4
- export { default as MultipleChoice } from "./components/multiple-choice";
5
- export { default as Attachment } from "./components/attachment";
6
- export { default as CheckBox } from "./components/checkbox";
7
- export { default as FadeCarousel } from "./components/fade-carousel";
8
- export * from "./components";
9
- export * from "./components/button";
10
- export * from "./components/search-bar";
11
- export * from "./core/types";
12
- export * from "./core/functions";
13
- export * from "./core/format";
14
- export * from "./components/form/functions";
15
- export * from "./hooks";
1
+ export { default as Input } from "./components/input";
2
+ export { default as TextArea } from "./components/textarea";
3
+ export { default as Select } from "./components/select";
4
+ export { default as MultipleChoice } from "./components/multiple-choice";
5
+ export { default as Attachment } from "./components/attachment";
6
+ export { default as CheckBox } from "./components/checkbox";
7
+ export { default as FadeCarousel } from "./components/fade-carousel";
8
+ export * from "./components";
9
+ export * from "./components/search-bar";
10
+ export * from "./core/types";
11
+ export * from "./core/functions";
12
+ export * from "./core/format";
13
+ export * from "./components/form/functions";
14
+ export * from "./hooks";
package/dist/index.js CHANGED
@@ -1,15 +1,14 @@
1
- export { default as Input } from "./components/input";
2
- export { default as TextArea } from "./components/textarea";
3
- export { default as Select } from "./components/select";
4
- export { default as MultipleChoice } from "./components/multiple-choice";
5
- export { default as Attachment } from "./components/attachment";
6
- export { default as CheckBox } from "./components/checkbox";
7
- export { default as FadeCarousel } from "./components/fade-carousel";
8
- export * from "./components";
9
- export * from "./components/button";
10
- export * from "./components/search-bar";
11
- export * from "./core/types";
12
- export * from "./core/functions";
13
- export * from "./core/format";
14
- export * from "./components/form/functions";
15
- export * from "./hooks";
1
+ export { default as Input } from "./components/input";
2
+ export { default as TextArea } from "./components/textarea";
3
+ export { default as Select } from "./components/select";
4
+ export { default as MultipleChoice } from "./components/multiple-choice";
5
+ export { default as Attachment } from "./components/attachment";
6
+ export { default as CheckBox } from "./components/checkbox";
7
+ export { default as FadeCarousel } from "./components/fade-carousel";
8
+ export * from "./components";
9
+ export * from "./components/search-bar";
10
+ export * from "./core/types";
11
+ export * from "./core/functions";
12
+ export * from "./core/format";
13
+ export * from "./components/form/functions";
14
+ export * from "./hooks";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
 
3
3
  "name": "@bouko/react",
4
- "version": "2.4.3",
4
+ "version": "2.4.5",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "license": "MIT",