@julseb-lib/react 0.1.10 → 0.1.12

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 (117) hide show
  1. package/dist/index.css +61 -117
  2. package/dist/julseb-lib-react.cjs.js +12 -12
  3. package/dist/julseb-lib-react.es.js +1868 -1794
  4. package/dist/julseb-lib-react.umd.js +12 -12
  5. package/dist/lib/Variables.ts +20 -19
  6. package/dist/lib/components/Accordion/Accordion.tsx +1 -1
  7. package/dist/lib/components/Accordion/AccordionContent.tsx +2 -2
  8. package/dist/lib/components/Accordion/AccordionTitle.tsx +4 -3
  9. package/dist/lib/components/Alert/Alert.tsx +2 -2
  10. package/dist/lib/components/Autocomplete/Autocomplete.tsx +1 -1
  11. package/dist/lib/components/Avatar/Avatar.tsx +3 -7
  12. package/dist/lib/components/BackToTop/BackToTop.tsx +4 -3
  13. package/dist/lib/components/Badge/Badge.tsx +1 -1
  14. package/dist/lib/components/Breadcrumbs/Breadcrumbs.tsx +1 -1
  15. package/dist/lib/components/Burger/Burger.tsx +11 -4
  16. package/dist/lib/components/Button/Button.tsx +5 -4
  17. package/dist/lib/components/ButtonGroup/ButtonGroup.tsx +4 -2
  18. package/dist/lib/components/ButtonIcon/ButtonFn.tsx +3 -1
  19. package/dist/lib/components/ButtonIcon/ButtonIcon.tsx +9 -2
  20. package/dist/lib/components/CodeContainer/CodeContainer.tsx +5 -5
  21. package/dist/lib/components/Cover/Cover.tsx +1 -1
  22. package/dist/lib/components/DragList/DragList.tsx +1 -1
  23. package/dist/lib/components/DragList/DragListItem.tsx +4 -3
  24. package/dist/lib/components/Drawer/Drawer.tsx +1 -1
  25. package/dist/lib/components/Dropdown/Dropdown.tsx +1 -1
  26. package/dist/lib/components/Fade/Fade.tsx +4 -4
  27. package/dist/lib/components/Fieldset/Fieldset.tsx +2 -2
  28. package/dist/lib/components/Footer/Footer.tsx +103 -0
  29. package/dist/lib/components/Footer/index.ts +1 -0
  30. package/dist/lib/components/Footer/types.ts +54 -0
  31. package/dist/lib/components/Form/Form.tsx +1 -1
  32. package/dist/lib/components/Header/Header.tsx +15 -6
  33. package/dist/lib/components/Header/types.ts +1 -1
  34. package/dist/lib/components/Image/Image.tsx +1 -1
  35. package/dist/lib/components/Input/Input.tsx +2 -2
  36. package/dist/lib/components/Input/templates/ColorInput.tsx +4 -0
  37. package/dist/lib/components/InputCheck/InputCheck.tsx +2 -2
  38. package/dist/lib/components/InputComponents/InputButton.tsx +7 -2
  39. package/dist/lib/components/InputComponents/classes.ts +1 -1
  40. package/dist/lib/components/InputContainer/InputContainer.tsx +1 -1
  41. package/dist/lib/components/InputCounter/InputCounter.tsx +2 -2
  42. package/dist/lib/components/InputImage/InputImage.tsx +1 -1
  43. package/dist/lib/components/InputPhone/InputPhone.tsx +1 -1
  44. package/dist/lib/components/InputPin/InputPin.tsx +3 -1
  45. package/dist/lib/components/InputSlider/InputSlider.tsx +1 -1
  46. package/dist/lib/components/Key/Key.tsx +2 -2
  47. package/dist/lib/components/ListGroup/ListGroup.tsx +1 -1
  48. package/dist/lib/components/ListGroup/ListGroupItem.tsx +1 -1
  49. package/dist/lib/components/ListGroup/ListGroupTitle.tsx +1 -1
  50. package/dist/lib/components/Loader/Loader.tsx +1 -1
  51. package/dist/lib/components/Loader/templates/LoaderOne.tsx +1 -1
  52. package/dist/lib/components/Loader/templates/LoaderThree.tsx +3 -3
  53. package/dist/lib/components/Loader/templates/LoaderTwo.tsx +2 -2
  54. package/dist/lib/components/MarkdownContainer/MarkdownContainer.tsx +2 -2
  55. package/dist/lib/components/Meta/Meta.tsx +125 -0
  56. package/dist/lib/components/Meta/index.ts +1 -0
  57. package/dist/lib/components/Meta/types.ts +35 -0
  58. package/dist/lib/components/Modal/Modal.tsx +1 -1
  59. package/dist/lib/components/PageLayout/PageLayout.tsx +64 -0
  60. package/dist/lib/components/PageLayout/index.ts +1 -0
  61. package/dist/lib/components/PageLayout/types.ts +29 -0
  62. package/dist/lib/components/PageLoading/PageLoading.tsx +1 -1
  63. package/dist/lib/components/Pagination/Pagination.tsx +1 -1
  64. package/dist/lib/components/Pagination/PaginationButton.tsx +1 -1
  65. package/dist/lib/components/Paginator/Paginator.tsx +1 -1
  66. package/dist/lib/components/ProgressBar/ProgressBar.tsx +4 -7
  67. package/dist/lib/components/ProgressBar/types.ts +1 -1
  68. package/dist/lib/components/ProgressCircle/ProgressCircle.tsx +7 -3
  69. package/dist/lib/components/ProgressCircle/types.ts +1 -2
  70. package/dist/lib/components/Rating/Rating.tsx +1 -1
  71. package/dist/lib/components/Select/Select.tsx +1 -1
  72. package/dist/lib/components/Skeleton/Skeleton.tsx +5 -2
  73. package/dist/lib/components/Skeleton/SkeletonCard.tsx +4 -1
  74. package/dist/lib/components/Slideshow/Slideshow.tsx +1 -1
  75. package/dist/lib/components/Slideshow/SlideshowPagination.tsx +1 -1
  76. package/dist/lib/components/SrOnly/SrOnly.tsx +33 -0
  77. package/dist/lib/components/SrOnly/index.ts +1 -0
  78. package/dist/lib/components/SrOnly/types.ts +7 -0
  79. package/dist/lib/components/Sticky/Sticky.tsx +8 -8
  80. package/dist/lib/components/Table/Table.tsx +8 -5
  81. package/dist/lib/components/Tabs/Tabs.tsx +1 -1
  82. package/dist/lib/components/Tabs/TabsButton.tsx +4 -2
  83. package/dist/lib/components/Tabs/TabsButtonsContainer.tsx +1 -1
  84. package/dist/lib/components/Tabs/TabsContainer.tsx +1 -1
  85. package/dist/lib/components/Tabs/TabsContent.tsx +1 -1
  86. package/dist/lib/components/Tag/Tag.tsx +1 -1
  87. package/dist/lib/components/Text/templates/Blockquote.tsx +1 -1
  88. package/dist/lib/components/Text/templates/Dl.tsx +1 -1
  89. package/dist/lib/components/Text/templates/H1.tsx +2 -2
  90. package/dist/lib/components/Text/templates/H2.tsx +2 -2
  91. package/dist/lib/components/Text/templates/H3.tsx +2 -2
  92. package/dist/lib/components/Text/templates/H4.tsx +2 -2
  93. package/dist/lib/components/Text/templates/H5.tsx +2 -2
  94. package/dist/lib/components/Text/templates/H6.tsx +1 -1
  95. package/dist/lib/components/Text/templates/Ol.tsx +1 -1
  96. package/dist/lib/components/Text/templates/P.tsx +1 -1
  97. package/dist/lib/components/Text/templates/Small.tsx +1 -1
  98. package/dist/lib/components/Text/templates/Ul.tsx +1 -1
  99. package/dist/lib/components/Toast/Toast.tsx +5 -4
  100. package/dist/lib/components/Tooltip/Tooltip.tsx +29 -22
  101. package/dist/lib/components/Wrapper/Wrapper.tsx +1 -1
  102. package/dist/lib/index.css +61 -117
  103. package/dist/lib/index.ts +4 -1
  104. package/dist/lib/types/components-items-props.ts +1 -24
  105. package/dist/lib/types/components-props.ts +4 -1
  106. package/dist/lib/types/global.ts +11 -13
  107. package/dist/lib/utils/design-tokens.ts +2 -7
  108. package/dist/lib/utils/gen-gap.ts +21 -21
  109. package/dist/lib/utils/gen-ring-color.ts +21 -0
  110. package/dist/lib/utils/index.ts +1 -0
  111. package/package.json +3 -3
  112. package/dist/lib/components/IconMenu/IconMenu.module.css +0 -239
  113. package/dist/lib/components/IconMenu/IconMenu.tsx +0 -101
  114. package/dist/lib/components/IconMenu/IconMenuItem.tsx +0 -53
  115. package/dist/lib/components/IconMenu/index.ts +0 -1
  116. package/dist/lib/components/IconMenu/types.ts +0 -48
  117. package/dist/react.css +0 -1
@@ -81,24 +81,24 @@ export enum OVERLAYS {
81
81
  }
82
82
 
83
83
  export enum FONT_FAMILIES {
84
- /** Primary font family for body text */ BODY = "var(--font-family-body)",
85
- /** Font family for code and monospaced text */ CODE = "var(--font-family-code)",
84
+ /** Primary font family for body text */ SANS = "var(--font-sans)",
85
+ /** Font family for code and monospaced text */ MONO = "var(--font-mono)",
86
86
  }
87
87
 
88
88
  export enum FONT_SIZES {
89
- /** 5rem */ DISPLAY_H1 = "var(--font-size-display-h1)",
90
- /** 4rem */ DISPLAY_H2 = "var(--font-size-display-h2)",
91
- /** 3.5rem */ DISPLAY_H3 = "var(--font-size-display-h3)",
92
- /** 3rem */ DISPLAY_H4 = "var(--font-size-display-h4)",
93
- /** 2.5rem */ DISPLAY_H5 = "var(--font-size-display-h5)",
94
- /** 2.5rem */ H1 = "var(--font-size-h1)",
95
- /** 2rem */ H2 = "var(--font-size-h2)",
96
- /** 1.8rem */ H3 = "var(--font-size-h3)",
97
- /** 1.5rem */ H4 = "var(--font-size-h4)",
98
- /** 1.3rem */ H5 = "var(--font-size-h5)",
99
- /** 1.1rem */ H6 = "var(--font-size-h6)",
100
- /** 1rem */ BODY = "var(--font-size-body)",
101
- /** 0.875rem */ SMALL = "var(--font-size-small)",
89
+ /** 5rem */ DISPLAY_H1 = "var(--text-display-h1)",
90
+ /** 4rem */ DISPLAY_H2 = "var(--text-display-h2)",
91
+ /** 3.5rem */ DISPLAY_H3 = "var(--text-display-h3)",
92
+ /** 3rem */ DISPLAY_H4 = "var(--text-display-h4)",
93
+ /** 2.5rem */ DISPLAY_H5 = "var(--text-display-h5)",
94
+ /** 2.5rem */ H1 = "var(--text-h1)",
95
+ /** 2rem */ H2 = "var(--text-h2)",
96
+ /** 1.8rem */ H3 = "var(--text-h3)",
97
+ /** 1.5rem */ H4 = "var(--text-h4)",
98
+ /** 1.3rem */ H5 = "var(--text-h5)",
99
+ /** 1.1rem */ H6 = "var(--text-h6)",
100
+ /** 1rem */ BODY = "var(--text-body)",
101
+ /** 0.875rem */ SMALL = "var(--text-small)",
102
102
  }
103
103
 
104
104
  export enum FONT_WEIGHTS {
@@ -138,6 +138,7 @@ export enum SHADOWS {
138
138
  /** 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) */ LG = "var(--shadow-lg)",
139
139
  /** 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) */ XL = "var(--shadow-xl)",
140
140
  /** 0 25px 50px -12px rgba(0, 0, 0, 0.25) */ "2XL" = "var(--shadow-2xl)",
141
+ /** inset 0 2px 4px 0 rgb(0 0 0 / 0.06) */ INNER = "var(--shadow-inner)",
141
142
  /** none */ NONE = "var(--shadow-none)",
142
143
  }
143
144
 
@@ -168,7 +169,7 @@ export enum RADIUS {
168
169
  /** 1rem (16px) */ "2XL" = "var(--radius-2xl)",
169
170
  /** 1.5rem (24px) */ "3XL" = "var(--radius-3xl)",
170
171
  /** */ "4XL" = "var(--radius-4xl)",
171
- /** 9999px */ FULL = "var(--rounded-full)",
172
+ /** 9999px */ FULL = "var(--radius-full)",
172
173
  }
173
174
 
174
175
  export enum LAYOUTS {
@@ -181,9 +182,9 @@ export enum LAYOUTS {
181
182
  }
182
183
 
183
184
  export enum TRANSITIONS {
184
- /** all 150ms cubic-bezier(0.4, 0, 0.2, 1) */ DEFAULT = "var(--transition-default)",
185
- /** all 75ms cubic-bezier(0.4, 0, 1, 1) */ FAST = "var(--transition-fast)",
186
- /** all 300ms cubic-bezier(0.4, 0, 0.2, 1) */ SLOW = "var(--transition-slow)",
185
+ /** all 200ms ease */ SHORT = "var(--transition-short)",
186
+ /** all 500ms ease */ LONG = "var(--transition-long)",
187
+ /** all 500ms cubic-bezier(0.25, 0.75, 0, 0.66) */ BEZIER = "var(--transition-bezier)",
187
188
  }
188
189
 
189
190
  export enum MEDIA {
@@ -23,7 +23,7 @@ import type { ILibAccordion } from "./types"
23
23
  *
24
24
  * @prop {string} [props.className] - Additional CSS classes to apply to the accordion container.
25
25
  * @prop {React.ReactNode} [props.children] - Child AccordionItem components to render when not using items prop.
26
- * @prop {React.Ref<any>} [props.ref] - Ref to the accordion container element.
26
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the accordion container element.
27
27
  * @prop {"basic" | "rounded"} [props.variant="basic"] - Visual style variant of the accordion.
28
28
  * @prop {"plus" | "chevron"} [props.icon="plus"] - Type of icon to display for expand/collapse indicators.
29
29
  * @prop {Array} [props.items] - Array of accordion items with title, content, and defaultOpen properties.
@@ -41,9 +41,9 @@ export const AccordionContent: FC<ILibAccordionContent> = ({
41
41
  ref={ref}
42
42
  className={clsx(
43
43
  "overflow-hidden transition-all duration-200 ease",
44
+ "py-0 max-h-0 opacity-0",
44
45
  variant === "rounded" && "px-2",
45
- isOpen && "open",
46
- "py-0 max-h-0 opacity-0 [&.open]:py-2 [&.open]:max-h-auto",
46
+ isOpen && "open py-2 max-h-auto opacity-100",
47
47
  "accordion-content",
48
48
  className,
49
49
  )}
@@ -1,6 +1,6 @@
1
1
  import { type FC } from "react"
2
2
  import { BiPlus, BiChevronDown } from "react-icons/bi"
3
- import { clsx, genTextColorHover } from "../../utils"
3
+ import { clsx, genRingColor, genTextColorHover } from "../../utils"
4
4
  import type { ILibAccordionTitle } from "./subtypes"
5
5
 
6
6
  /**
@@ -43,10 +43,11 @@ export const AccordionTitle: FC<ILibAccordionTitle> = ({
43
43
  <button
44
44
  ref={ref}
45
45
  className={clsx(
46
- "flex justify-between items-center border-b w-full",
46
+ "flex justify-between items-center border-b outline-none w-full",
47
47
  variant === "rounded"
48
48
  ? "bg-primary-500 text-white py-1 px-2 border-b-white"
49
- : [genTextColorHover["primary"], "border-b-gray-200"],
49
+ : [genTextColorHover["primary"], "border-b-gray-200 "],
50
+ genRingColor["primary"],
50
51
  "accordion-title",
51
52
  className,
52
53
  )}
@@ -21,7 +21,7 @@ import type { ILibAlert } from "./types"
21
21
  *
22
22
  * @prop {string} [props.className] - Additional CSS classes to apply to the alert container.
23
23
  * @prop {React.ElementType} [props.element=typeof children === "string" ? Text : "div"] - HTML element type to render as the container.
24
- * @prop {React.Ref<any>} [props.ref] - Ref to the alert element.
24
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the alert element.
25
25
  * @prop {React.ReactNode} [props.children] - Content to display inside the alert.
26
26
  * @prop {LibAllColors} [props.color="primary"] - Color theme for the alert background and border.
27
27
  *
@@ -43,7 +43,7 @@ export const Alert: FC<ILibAlert> = ({
43
43
  <Element
44
44
  ref={ref}
45
45
  className={clsx(
46
- "flex flex-col gap-2 px-4 py-2 border rounded-lg w-full max-w-[400px]",
46
+ "flex flex-col gap-2 px-4 py-2 border rounded-md w-full max-w-[400px]",
47
47
  genBgColor50[color],
48
48
  genBorderColorShort[color],
49
49
  "alert",
@@ -39,7 +39,7 @@ import type { ILibAutocomplete } from "./types"
39
39
  * @extends HTMLInputElement
40
40
  *
41
41
  * @prop {string} [props.className] - Additional CSS classes to apply to the autocomplete container.
42
- * @prop {React.Ref<any>} [props.ref] - Ref to the input element.
42
+ * @prop {React.Ref<HTMLInputElement>} [props.ref] - Ref to the input element.
43
43
  * @prop {string} [props.label] - Label text to display above the autocomplete.
44
44
  * @prop {string} [props.labelComment] - Additional comment text next to the label.
45
45
  * @prop {string} [props.helper] - Helper text to display below the label.
@@ -16,7 +16,7 @@ import type { ILibAvatar } from "./types"
16
16
  *
17
17
  * @prop {string} [props.className] - Additional CSS classes to apply to the avatar.
18
18
  * @prop {keyof JSX.IntrinsicElements} [props.element="span"] - The HTML element to render as the avatar.
19
- * @prop {React.Ref<any>} [props.ref] - Ref to the avatar element.
19
+ * @prop {React.Ref<HTMLSpanElement>} [props.ref] - Ref to the avatar element.
20
20
  * @prop {React.ReactNode} [props.children] - Content to display inside the avatar (image, initials, or icon).
21
21
  * @prop {string | { content?: React.ReactNode; backgroundColor?: string; contentColor?: string; className?: string }} [props.badge] - Badge to display on the avatar, can be a string or an object with content and colors.
22
22
  * @prop {React.CSSProperties} [props.containerStyle] - Inline styles for the avatar container.
@@ -72,13 +72,9 @@ export const Avatar: FC<ILibAvatar> = ({
72
72
  contentColor={
73
73
  typeof badge === "object" ? badge.contentColor : "white"
74
74
  }
75
- color={
76
- typeof badge === "object"
77
- ? badge.color
78
- : "primary"
79
- }
75
+ color={typeof badge === "object" ? badge.color : "primary"}
80
76
  className={clsx(
81
- "top-0 right-0 absolute -translate-y-(--spacer-xs) translate-x-(--spacer-xs)",
77
+ "top-0 right-0 absolute -translate-y-2 translate-x-2",
82
78
  typeof badge === "object"
83
79
  ? badge.className
84
80
  : (undefined as any),
@@ -2,7 +2,7 @@ import { useEffect, useState, type FC } from "react"
2
2
  import { BiUpArrowAlt } from "react-icons/bi"
3
3
  import { scrollToTop } from "@julseb-lib/utils"
4
4
  import { ButtonIcon } from "../ButtonIcon"
5
- import { clsx } from "../../utils"
5
+ import { clsx, genRingColor } from "../../utils"
6
6
  import type { ILibBackToTop } from "./types"
7
7
 
8
8
  /**
@@ -71,7 +71,8 @@ export const BackToTop: FC<ILibBackToTop> = ({
71
71
  <ButtonIcon
72
72
  ref={ref}
73
73
  className={clsx(
74
- isVisible ? "opacity-100 visible" : "opacity-0 invisible",
74
+ isVisible ? "opacity-100 visible " : "opacity-0 invisible",
75
+ genRingColor[color],
75
76
  "back-to-top",
76
77
  className,
77
78
  )}
@@ -82,7 +83,7 @@ export const BackToTop: FC<ILibBackToTop> = ({
82
83
  showTooltip && {
83
84
  position: "left",
84
85
  className: [
85
- "fixed bottom-(--spacer-lg) right-(--spacer-lg) [&_.tooltip]:translate-y-[10px] [&_.tooltip]:translate-x-[-50%] transition-all duration-200 ease-in-out",
86
+ "fixed bottom-5 right-5 [&_.tooltip]:translate-y-[10px] [&_.tooltip]:translate-x-[-50%] transition-all duration-200 ease-in-out",
86
87
  isVisible ? "opacity-100" : "opacity-0",
87
88
  ],
88
89
  ...(showTooltip as any),
@@ -19,7 +19,7 @@ import type { ILibBadge } from "./types"
19
19
  *
20
20
  * @prop {string} [props.className] - Additional CSS classes to apply to the badge.
21
21
  * @prop {keyof JSX.IntrinsicElements} [props.element="span"] - The HTML element to render as the badge.
22
- * @prop {React.Ref<any>} [props.ref] - Ref to the badge element.
22
+ * @prop {React.Ref<HTMLSpanElement>} [props.ref] - Ref to the badge element.
23
23
  * @prop {React.ReactNode} [props.children] - Content to display inside the badge.
24
24
  * @prop {LibAllColors} [props.color="primary"] - Background color of the badge.
25
25
  * @prop {LibAllColors} [props.contentColor="white"] - Text color of the badge.
@@ -20,7 +20,7 @@ import type { ILibBreadcrumbs } from "./types"
20
20
  *
21
21
  * @prop {string} [props.className] - Additional CSS classes to apply to the breadcrumbs container.
22
22
  * @prop {React.ElementType} [props.element="div"] - HTML element type to render as the container.
23
- * @prop {React.Ref<any>} [props.ref] - Ref to the breadcrumbs container element.
23
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the breadcrumbs container element.
24
24
  * @prop {React.ReactNode} [props.children] - Navigation items to display in the breadcrumb trail.
25
25
  * @prop {string | React.ReactNode} [props.separator="/"] - Separator to display between breadcrumb items.
26
26
  * @prop {any} [props.rest] - Additional props spread to the container element.
@@ -1,5 +1,5 @@
1
1
  import { type FC } from "react"
2
- import { clsx, genBgAllColors } from "../../utils"
2
+ import { clsx, genBgAllColors, genRingColor } from "../../utils"
3
3
  import type { ILibBurger } from "./types"
4
4
  import type { LibColorsHover } from "../../types"
5
5
 
@@ -12,17 +12,23 @@ const SPAN_COMMON =
12
12
  * @component
13
13
  *
14
14
  * @example
15
- * <Burger isOpen={true} color="primary" />
15
+ * <Burger
16
+ * isOpen={isMenuOpen}
17
+ * color="primary"
18
+ * onClick={toggleMenu}
19
+ * />
16
20
  *
17
21
  * @extends HTMLButtonElement
18
22
  *
19
23
  * @prop {string} [props.className] - Additional CSS classes to apply to the burger.
20
24
  * @prop {keyof JSX.IntrinsicElements} [props.element="button"] - The HTML element to render as the burger.
21
- * @prop {React.Ref<any>} [props.ref] - Ref to the burger element.
25
+ * @prop {React.Ref<HTMLButtonElement>} [props.ref] - Ref to the burger element.
22
26
  * @prop {string} [props.role="button"] - ARIA role for accessibility.
23
27
  * @prop {string} [props.aria-label="Burger"] - ARIA label for accessibility.
24
28
  * @prop {boolean} [props.isOpen] - Whether the burger menu is open or closed.
25
- * @prop {"primary" | "secondary" | "success" | "danger" | "warning" | "white"} [props.color="primary"] - Color of the burger lines.
29
+ * @prop {"primary" | "secondary" | "success" | "danger" | "warning" | "gray" | "white"} [props.color="primary"] - Color of the burger lines.
30
+ * @prop {string} [props.type="button"] - Button type attribute.
31
+ * @prop {boolean} [props.noHover] - Whether to disable hover effects.
26
32
  * @prop {any} [props.rest] - Additional props spread to the burger element.
27
33
  *
28
34
  * @returns {JSX.Element} The rendered Burger component.
@@ -49,6 +55,7 @@ export const Burger: FC<ILibBurger> = ({
49
55
  className={clsx(
50
56
  "relative w-8 h-6",
51
57
  !noHover && genHover[color],
58
+ !noHover && genRingColor[color],
52
59
  "burger",
53
60
  className,
54
61
  )}
@@ -8,6 +8,7 @@ import {
8
8
  genBgColorGhostHover,
9
9
  genBorderRadius,
10
10
  genButtonDisabled,
11
+ genRingColor,
11
12
  } from "../../utils"
12
13
  import { Loader } from "../Loader"
13
14
  import type { ILibButton } from "./types"
@@ -24,7 +25,7 @@ import type { ILibButton } from "./types"
24
25
  *
25
26
  * @prop {string} [props.className] - Additional CSS classes to apply to the button.
26
27
  * @prop {keyof JSX.IntrinsicElements} [props.element="button"] - The HTML element to render as the button.
27
- * @prop {React.Ref<any>} [props.ref] - Ref to the button element.
28
+ * @prop {React.Ref<HTMLButtonElement>} [props.ref] - Ref to the button element.
28
29
  * @prop {React.ReactNode} [props.children] - Content to display inside the button.
29
30
  * @prop {"plain" | "ghost" | "outline" | "transparent"} [props.variant="plain"] - Button variant style.
30
31
  * @prop {"primary" | "secondary" | "success" | "danger" | "warning" | "gray" | "white"} [props.color="primary"] - Button color theme.
@@ -59,7 +60,7 @@ export const Button: FC<ILibButton> = ({
59
60
  <Element
60
61
  ref={ref}
61
62
  className={clsx(
62
- "inline-flex items-center self-start gap-2 px-4 py-2 font-bold text-base",
63
+ "inline-flex items-center self-start gap-2 px-4 py-2 outline-none font-bold text-base",
63
64
  genBorderRadius[borderRadius],
64
65
  variant === "plain" && [
65
66
  genBgColorHover[color],
@@ -78,6 +79,7 @@ export const Button: FC<ILibButton> = ({
78
79
  ],
79
80
  variant === "transparent" && [genTextColorHover[color]],
80
81
  size === "small" && "text-sm px-2 py-1",
82
+ genRingColor[color],
81
83
  genButtonDisabled[variant],
82
84
  "button",
83
85
  className,
@@ -97,8 +99,7 @@ export const Button: FC<ILibButton> = ({
97
99
  ? "border-3 size-4"
98
100
  : loaderVariant === 2
99
101
  ? "size-4 [&_span]:border-3"
100
- : loaderVariant === 3 &&
101
- "[&_span]:size-2 translate-y-[5px]",
102
+ : loaderVariant === 3 && "[&_span]:size-2",
102
103
  "button-loader",
103
104
  )}
104
105
  />
@@ -10,6 +10,7 @@ import {
10
10
  genButtonDisabled,
11
11
  genTextColorShort,
12
12
  genTextColorHover,
13
+ genRingColor,
13
14
  } from "../../utils"
14
15
  import type { ILibButtonGroup } from "./types"
15
16
 
@@ -32,7 +33,7 @@ import type { ILibButtonGroup } from "./types"
32
33
  *
33
34
  * @prop {string} [props.className] - Additional CSS classes to apply to the button group.
34
35
  * @prop {React.ComponentType} [props.element=Flexbox] - The component to render as the container element.
35
- * @prop {React.Ref<any>} [props.ref] - Ref to the button group element.
36
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the button group element.
36
37
  * @prop {React.ReactNode} [props.children] - Content to display inside the button group when not using buttons prop.
37
38
  * @prop {"primary" | "secondary" | "success" | "danger" | "warning" | "gray" | "white"} [props.color="primary"] - Color theme for the button group.
38
39
  * @prop {"plain" | "ghost" | "outline" | "transparent"} [props.variant="plain"] - Visual variant style of the button group.
@@ -81,9 +82,10 @@ export const ButtonGroup: FC<ILibButtonGroup> = ({
81
82
  <Fragment key={button.id}>
82
83
  <button
83
84
  className={clsx(
84
- "px-2 py-1 h-full",
85
+ "px-2 py-1 outline-none h-full",
85
86
  size === "small" && "text-sm px-2 py-1",
86
87
  genButtonDisabled[variant],
88
+ genRingColor[color],
87
89
  variant === "plain" && [
88
90
  color === "white"
89
91
  ? "text-primary-500"
@@ -7,6 +7,7 @@ import {
7
7
  genTextAllColor,
8
8
  genTextColorHover,
9
9
  genButtonDisabled,
10
+ genRingColor,
10
11
  } from "../../utils"
11
12
  import type { ILibButtonIcon } from "./types"
12
13
  import { Loader } from "../Loader"
@@ -36,8 +37,9 @@ export const ButtonIconFn: FC<
36
37
  <Element
37
38
  ref={ref}
38
39
  className={clsx(
39
- "inline-flex justify-center items-center size-12",
40
+ "inline-flex justify-center items-center outline-none size-12",
40
41
  genButtonDisabled[variant],
42
+ genRingColor[color],
41
43
  variant === "plain" && [
42
44
  genBgColorHover[color],
43
45
  "text-white",
@@ -10,13 +10,19 @@ import type { ILibButtonIcon } from "./types"
10
10
  * @component
11
11
  *
12
12
  * @example
13
- * <ButtonIcon icon={<BiUser />} color="primary" variant="plain" tooltip="User profile" showTooltip />
13
+ * <ButtonIcon
14
+ * icon={<BiUser />}
15
+ * color="primary"
16
+ * variant="plain"
17
+ * tooltip="User profile"
18
+ * showTooltip
19
+ * />
14
20
  *
15
21
  * @extends HTMLButtonElement
16
22
  *
17
23
  * @prop {string} [props.className] - Additional CSS classes to apply to the button.
18
24
  * @prop {keyof JSX.IntrinsicElements} [props.element="button"] - The HTML element to render as the button.
19
- * @prop {React.Ref<any>} [props.ref] - Ref to the button element.
25
+ * @prop {React.Ref<HTMLButtonElement>} [props.ref] - Ref to the button element.
20
26
  * @prop {React.ReactNode} [props.icon] - Icon element to display inside the button.
21
27
  * @prop {"primary" | "secondary" | "success" | "danger" | "warning" | "gray" | "white"} [props.color="primary"] - Button color theme.
22
28
  * @prop {string} [props.borderRadius="full"] - Border radius of the button.
@@ -29,6 +35,7 @@ import type { ILibButtonIcon } from "./types"
29
35
  * @prop {React.CSSProperties} [props.containerStyle] - Inline styles for the container.
30
36
  * @prop {string} [props.containerClasses] - Additional CSS classes for the container.
31
37
  * @prop {string} [props.aria-label] - ARIA label for accessibility, defaults to tooltip value.
38
+ * @prop {string} [props.type="button"] - Button type attribute.
32
39
  * @prop {any} [props.rest] - Additional props spread to the button element.
33
40
  *
34
41
  * @returns {JSX.Element} The rendered ButtonIcon component.
@@ -2,9 +2,8 @@ import { useState, type FC } from "react"
2
2
  import SyntaxHighlighter from "react-syntax-highlighter"
3
3
  import { atomOneDark } from "react-syntax-highlighter/dist/esm/styles/hljs"
4
4
  import { BiCheck, BiClipboard } from "react-icons/bi"
5
- import {} from "@julseb-lib/utils"
6
5
  import { ButtonIcon } from "../ButtonIcon"
7
- import { clsx, genTextAllColor } from "../../utils"
6
+ import { clsx, genRingColor, genTextAllColor } from "../../utils"
8
7
  import type { ILibCodeContainer } from "./types"
9
8
 
10
9
  /**
@@ -18,11 +17,11 @@ import type { ILibCodeContainer } from "./types"
18
17
  * console.log(hello);
19
18
  * </CodeContainer>
20
19
  *
21
- * @extends ILibCodeContainer
20
+ * @extends HTMLDivElement
22
21
  *
23
22
  * @prop {string} [props.className] - Additional CSS classes to apply to the code container.
24
23
  * @prop {React.ElementType} [props.element] - HTML element type to render as the container.
25
- * @prop {React.Ref<any>} [props.ref] - Ref to the code container element.
24
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the code container element.
26
25
  * @prop {React.ReactNode} [props.children] - Code content to display and highlight.
27
26
  * @prop {object} [props.highlighterProps] - Additional props to pass to the syntax highlighter.
28
27
  * @prop {LibAllColors} [props.textColor] - Text color for the code content.
@@ -73,10 +72,11 @@ export const CodeContainer: FC<ILibCodeContainer> = ({
73
72
  <Element
74
73
  ref={ref}
75
74
  className={clsx(
76
- "relative",
75
+ "relative outline-none",
77
76
  "code-container-wrapper",
78
77
  "[&>pre]:bg-gray-800! [&>pre]:p-4!",
79
78
  textColor && genTextAllColor[textColor],
79
+ genRingColor["primary"],
80
80
  className,
81
81
  )}
82
82
  {...rest}
@@ -26,7 +26,7 @@ import type { ILibCover } from "./types"
26
26
  *
27
27
  * @prop {string} [props.className] - Additional CSS classes to apply to the cover container.
28
28
  * @prop {React.ElementType} [props.element=Flexbox] - HTML element type to render as the container.
29
- * @prop {React.Ref<any>} [props.ref] - Ref to the cover element.
29
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the cover element.
30
30
  * @prop {string} [props.img] - URL of the background image to display.
31
31
  * @prop {string} [props.alt] - Alt text for the background image.
32
32
  * @prop {LibBgOverlay} [props.overlay] - Overlay variant to apply over the background image.
@@ -21,7 +21,7 @@ import type { ILibDragList } from "./types"
21
21
  *
22
22
  * @prop {string} [props.className] - Additional CSS classes to apply to the drag list container.
23
23
  * @prop {React.ElementType} [props.element="div"] - HTML element type to render as the container.
24
- * @prop {React.Ref<any>} [props.ref] - Ref to the drag list element.
24
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the drag list element.
25
25
  * @prop {React.ReactNode} [props.children] - Child components to render when not using items prop.
26
26
  * @prop {React.ReactNode} [props.iconDrag] - Icon to display as the drag handle for each item.
27
27
  * @prop {"xs" | "sm" | "md" | "lg" | "xl" | "full"} [props.borderRadius] - Border radius size for the drag list container.
@@ -1,7 +1,7 @@
1
1
  import { type FC, type DragEvent } from "react"
2
2
  import { BiDotsVerticalRounded } from "react-icons/bi"
3
3
  import { Text } from "../Text"
4
- import { clsx } from "../../utils"
4
+ import { clsx, genRingColor } from "../../utils"
5
5
  import type { ILibDragListItem } from "./types"
6
6
 
7
7
  /**
@@ -22,7 +22,7 @@ import type { ILibDragListItem } from "./types"
22
22
  *
23
23
  * @prop {string} [props.className] - Additional CSS classes to apply to the drag list item.
24
24
  * @prop {React.ElementType} [props.element="div"] - HTML element type to render as the container.
25
- * @prop {React.Ref<any>} [props.ref] - Ref to the drag list item element.
25
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the drag list item element.
26
26
  * @prop {React.ReactNode} [props.children] - Child components to render when not using item prop.
27
27
  * @prop {number} [props.index] - Index position of the item in the drag list.
28
28
  * @prop {React.ReactNode} [props.iconDrag=<BiDotsVerticalRounded size={24} />] - Icon to display as the drag handle.
@@ -72,8 +72,9 @@ export const DragListItem: FC<ILibDragListItem> = ({
72
72
  role="button"
73
73
  aria-label={iconLabel}
74
74
  className={clsx(
75
- "cursor-grab! active:cursor-grabbing",
75
+ "outline-none cursor-grab! active:cursor-grabbing",
76
76
  "drag-list-item-button",
77
+ genRingColor["gray"],
77
78
  )}
78
79
  >
79
80
  {iconDrag}
@@ -35,7 +35,7 @@ import type { ILibDrawer } from "./types"
35
35
  *
36
36
  * @prop {string} [props.className] - Additional CSS classes to apply to the drawer container.
37
37
  * @prop {React.ElementType} [props.element="div"] - HTML element type to render as the container.
38
- * @prop {React.Ref<any>} [props.ref] - Ref to the drawer element.
38
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the drawer element.
39
39
  * @prop {React.ReactNode} [props.children] - Content to display inside the drawer.
40
40
  * @prop {boolean} [props.isOpen] - Whether the drawer is currently open.
41
41
  * @prop {function} [props.setIsOpen] - Function to control the drawer's open/closed state.
@@ -23,7 +23,7 @@ import type { ILibDropdown } from "./types"
23
23
  * ]}
24
24
  * />
25
25
  *
26
- * @extends ILibDropdown
26
+ * @extends HTMLDivElement
27
27
  *
28
28
  * @prop {string} [props.className] - Additional CSS classes to apply to the dropdown container.
29
29
  * @prop {React.ElementType} [props.element="div"] - HTML element type to render as the container.
@@ -12,14 +12,14 @@ import type { ILibFade } from "./types"
12
12
  * <Fade>
13
13
  * <h1>This content will fade in when visible</h1>
14
14
  * </Fade>
15
- *
16
- * @extends ILibFade
15
+ *
16
+ * @extends HTMLDivElement
17
17
  *
18
18
  * @prop {string} [props.className] - Additional CSS classes to apply to the fade container.
19
19
  * @prop {React.ElementType} [props.element="div"] - HTML element type to render as the container.
20
- * @prop {React.Ref<any>} [props.ref] - Ref to the fade element.
20
+ * @prop {React.Ref<HTMLDivElement>} [props.ref] - Ref to the fade element.
21
21
  * @prop {React.ReactNode} [props.children] - Content to animate with fade effect.
22
- *
22
+ *
23
23
  * @returns {JSX.Element} The rendered Fade component.
24
24
  *
25
25
  * @see https://doc-julseb-lib-react.vercel.app/components/fade
@@ -22,7 +22,7 @@ import type { ILibFieldset } from "./types"
22
22
  * @extends HTMLFieldSetElement
23
23
  *
24
24
  * @prop {string} [props.className] - Additional CSS classes to apply to the fieldset container.
25
- * @prop {React.Ref<any>} [props.ref] - Ref to the fieldset element.
25
+ * @prop {React.Ref<HTMLFieldSetElement>} [props.ref] - Ref to the fieldset element.
26
26
  * @prop {React.ReactNode} [props.children] - Form controls and content to display inside the fieldset.
27
27
  * @prop {string} [props.label] - Label text to display above the fieldset.
28
28
  * @prop {string} [props.labelComment] - Additional comment text next to the label.
@@ -74,7 +74,7 @@ export const Fieldset: FC<ILibFieldset> = ({
74
74
  )}
75
75
  {...rest}
76
76
  >
77
- <legend className="px-3 font-black fieldset-legend">
77
+ <legend className="px-3 font-bold fieldset-legend">
78
78
  {legend}
79
79
  </legend>
80
80
 
@@ -0,0 +1,103 @@
1
+ import { Children, Fragment, type FC } from "react"
2
+ import { uuid } from "@julseb-lib/utils"
3
+ import { clsx, genTextAllColor } from "../../utils"
4
+ import type { ILibFooter } from "./types"
5
+
6
+ /**
7
+ * Footer component for displaying a page footer with logo, links, and customizable layout options.
8
+ *
9
+ * @component
10
+ *
11
+ * @example
12
+ * <Footer
13
+ * logo={<img src="/logo.png" alt="Logo" />}
14
+ * direction="horizontal"
15
+ * linksSeparator="dot"
16
+ * items={[
17
+ * <a href="/privacy">Privacy</a>,
18
+ * <a href="/terms">Terms</a>,
19
+ * <a href="/contact">Contact</a>
20
+ * ]}
21
+ * />
22
+ *
23
+ * @extends ILibFooter
24
+ *
25
+ * @prop {string} [props.className] - Additional CSS classes to apply to the footer container.
26
+ * @prop {React.ElementType} [props.element="footer"] - HTML element type to render as the container.
27
+ * @prop {React.Ref<any>} [props.ref] - Ref to the footer element.
28
+ * @prop {React.ReactNode} [props.children] - Child elements to display in the footer links section.
29
+ * @prop {boolean} [props.hideSeparator] - Whether to hide the top border separator line.
30
+ * @prop {boolean} [props.hideLinksSeparator] - Whether to hide separators between footer links.
31
+ * @prop {"dot" | "dash"} [props.linksSeparator="dot"] - Type of separator to display between links.
32
+ * @prop {Array<React.ReactNode>} [props.items] - Array of footer link items to display.
33
+ * @prop {React.ReactNode} [props.logo] - Logo element to display in the footer.
34
+ * @prop {"horizontal" | "vertical"} [props.direction="horizontal"] - Layout direction for footer content.
35
+ * @prop {LibAllColors} [props.linksSeparatorColor="gray-500"] - Color for the separator between links.
36
+ *
37
+ * @returns {JSX.Element} The rendered Footer component.
38
+ *
39
+ * @see https://doc-julseb-lib-react.vercel.app/components/footer
40
+ */
41
+ export const Footer: FC<ILibFooter> = ({
42
+ className,
43
+ element = "footer",
44
+ ref,
45
+ children,
46
+ hideSeparator,
47
+ hideLinksSeparator,
48
+ linksSeparator = "dot",
49
+ items,
50
+ logo,
51
+ direction = "horizontal",
52
+ linksSeparatorColor = "gray-500",
53
+ ...rest
54
+ }) => {
55
+ const Element = element
56
+ const childrenArray = Children.toArray(children)
57
+
58
+ return (
59
+ <Element
60
+ ref={ref}
61
+ className={clsx(
62
+ "relative flex px-[5%] pb-4",
63
+ direction === "horizontal"
64
+ ? "flex-row justify-between"
65
+ : "flex-col items-center gap-2",
66
+ !hideSeparator &&
67
+ "before:w-[90%] before:h-[1px] before:absolute before:top-0 before:left-[5%] before:bg-gray-200 pt-4",
68
+ "footer",
69
+ className,
70
+ )}
71
+ {...rest}
72
+ >
73
+ {logo}
74
+
75
+ <div className="flex items-container gap-2">
76
+ {items?.map((item, i) => (
77
+ <Fragment key={uuid()}>
78
+ {item}
79
+
80
+ {i !== items.length - 1 && !hideLinksSeparator && (
81
+ <span
82
+ className={clsx(
83
+ genTextAllColor[linksSeparatorColor],
84
+ )}
85
+ >
86
+ {linksSeparator === "dot" ? "•" : "-"}
87
+ </span>
88
+ )}
89
+ </Fragment>
90
+ )) ??
91
+ childrenArray.map((child, i) => (
92
+ <Fragment key={uuid()}>
93
+ {child}
94
+
95
+ {i !== childrenArray.length - 1 &&
96
+ !hideLinksSeparator &&
97
+ (linksSeparator === "dot" ? "•" : "-")}
98
+ </Fragment>
99
+ ))}
100
+ </div>
101
+ </Element>
102
+ )
103
+ }
@@ -0,0 +1 @@
1
+ export * from "./Footer"