@eloisallena/web_components 1.0.4 → 1.0.6

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 (91) hide show
  1. package/dist/component/breadcrumbs/Breadcrumbs.d.ts +9 -0
  2. package/dist/component/breadcrumbs/Breadcrumbs.js +7 -0
  3. package/dist/component/breadcrumbs/index.d.ts +1 -0
  4. package/dist/component/breadcrumbs/index.js +1 -0
  5. package/dist/component/button/Button.d.ts +8 -0
  6. package/dist/component/button/Button.js +15 -0
  7. package/dist/component/button/index.d.ts +1 -0
  8. package/dist/component/button/index.js +2 -0
  9. package/dist/component/card/Card.d.ts +6 -0
  10. package/dist/component/card/Card.js +4 -0
  11. package/dist/component/card/CardContent.d.ts +6 -0
  12. package/dist/component/card/CardContent.js +4 -0
  13. package/dist/component/card/CardFooter.d.ts +5 -0
  14. package/dist/component/card/CardFooter.js +4 -0
  15. package/dist/component/card/CardImage.d.ts +7 -0
  16. package/dist/component/card/CardImage.js +4 -0
  17. package/dist/component/card/index.d.ts +4 -0
  18. package/dist/component/card/index.js +4 -0
  19. package/dist/component/footer/Cfooter.d.ts +6 -0
  20. package/dist/component/footer/Cfooter.js +4 -0
  21. package/dist/component/footer/FooterBottom.d.ts +5 -0
  22. package/dist/component/footer/FooterBottom.js +4 -0
  23. package/dist/component/footer/FooterContact.d.ts +11 -0
  24. package/dist/component/footer/FooterContact.js +4 -0
  25. package/dist/component/footer/FooterIcon.d.ts +7 -0
  26. package/dist/component/footer/FooterIcon.js +4 -0
  27. package/dist/component/footer/QuickLink.d.ts +11 -0
  28. package/dist/component/footer/QuickLink.js +4 -0
  29. package/dist/component/footer/index.d.ts +5 -0
  30. package/dist/component/footer/index.js +5 -0
  31. package/dist/component/form/Cform.d.ts +6 -0
  32. package/dist/component/form/Cform.js +4 -0
  33. package/dist/component/form/index.d.ts +1 -0
  34. package/dist/component/form/index.js +1 -0
  35. package/dist/component/header/Cheader.d.ts +7 -0
  36. package/dist/component/header/Cheader.js +4 -0
  37. package/dist/component/header/Drawer.d.ts +12 -0
  38. package/dist/component/header/Drawer.js +22 -0
  39. package/dist/component/header/Icon.d.ts +9 -0
  40. package/dist/component/header/Icon.js +11 -0
  41. package/dist/component/header/NavBar.d.ts +12 -0
  42. package/dist/component/header/NavBar.js +14 -0
  43. package/dist/component/header/SearchBar.d.ts +8 -0
  44. package/dist/component/header/SearchBar.js +7 -0
  45. package/dist/component/header/index.d.ts +5 -0
  46. package/dist/component/header/index.js +5 -0
  47. package/dist/component/input/CheckBox.d.ts +12 -0
  48. package/dist/component/input/CheckBox.js +18 -0
  49. package/dist/component/input/Select.d.ts +17 -0
  50. package/dist/component/input/Select.js +12 -0
  51. package/dist/component/input/TextField.d.ts +11 -0
  52. package/dist/component/input/TextField.js +7 -0
  53. package/dist/component/input/index.d.ts +3 -0
  54. package/dist/component/input/index.js +3 -0
  55. package/dist/component/modal/Modal.d.ts +8 -0
  56. package/dist/component/modal/Modal.js +6 -0
  57. package/dist/component/modal/index.d.ts +1 -0
  58. package/dist/component/modal/index.js +1 -0
  59. package/dist/component/section/Section.d.ts +9 -0
  60. package/dist/component/section/Section.js +14 -0
  61. package/dist/component/section/index.d.ts +1 -0
  62. package/dist/component/section/index.js +1 -0
  63. package/dist/component/spinner/Loader.d.ts +1 -0
  64. package/dist/component/spinner/Loader.js +4 -0
  65. package/dist/component/spinner/index.d.ts +1 -0
  66. package/dist/component/spinner/index.js +1 -0
  67. package/dist/component/stories/LandingLayout.d.ts +6 -0
  68. package/dist/component/stories/LandingLayout.js +33 -0
  69. package/dist/component/stories/index.d.ts +1 -0
  70. package/dist/component/stories/index.js +1 -0
  71. package/dist/component/table/Ctable.d.ts +8 -0
  72. package/dist/component/table/Ctable.js +13 -0
  73. package/dist/component/table/TableBody.d.ts +7 -0
  74. package/dist/component/table/TableBody.js +4 -0
  75. package/dist/component/table/TableCell.d.ts +8 -0
  76. package/dist/component/table/TableCell.js +12 -0
  77. package/dist/component/table/TableHead.d.ts +7 -0
  78. package/dist/component/table/TableHead.js +16 -0
  79. package/dist/component/table/TableRow.d.ts +8 -0
  80. package/dist/component/table/TableRow.js +27 -0
  81. package/dist/component/table/alignment.d.ts +5 -0
  82. package/dist/component/table/alignment.js +5 -0
  83. package/dist/component/table/index.d.ts +5 -0
  84. package/dist/component/table/index.js +5 -0
  85. package/dist/component/table/types.d.ts +13 -0
  86. package/dist/component/table/types.js +1 -0
  87. package/dist/index.d.ts +26 -2
  88. package/dist/index.js +26 -0
  89. package/dist/themes/tailwind.css +47 -0
  90. package/package.json +11 -8
  91. package/dist/web-components.cjs.js +0 -292
@@ -0,0 +1,9 @@
1
+ interface BreadcrumbsProps {
2
+ items: {
3
+ id: number;
4
+ label: string;
5
+ href: string;
6
+ }[];
7
+ }
8
+ export declare const Breadcrumbs: React.FC<BreadcrumbsProps>;
9
+ export {};
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const Breadcrumbs = ({ items, }) => {
3
+ return (_jsx("nav", { "aria-label": "Breadcrumb", children: _jsx("ol", { className: "\r\n flex\r\n flex-wrap\r\n items-center\r\n gap-2\r\n text-sm\r\n ", children: items.map((item, index) => {
4
+ const isLast = index === items.length - 1;
5
+ return (_jsxs("li", { className: "\r\n flex\r\n items-center\r\n gap-2\r\n ", children: [isLast ? (_jsx("span", { className: "\r\n font-semibold\r\n text-gray-900\r\n ", children: item.label })) : (_jsx("a", { href: item.href, className: "\r\n text-gray-600\r\n transition-colors\r\n hover:text-blue-600\r\n hover:underline\r\n ", children: item.label })), !isLast && (_jsx("span", { className: "text-gray-400", children: ">" }))] }, item.id));
6
+ }) }) }));
7
+ };
@@ -0,0 +1 @@
1
+ export { Breadcrumbs } from './Breadcrumbs';
@@ -0,0 +1 @@
1
+ export { Breadcrumbs } from './Breadcrumbs';
@@ -0,0 +1,8 @@
1
+ export interface ButtonProps {
2
+ variant?: "primary" | "secondary" | "restore" | "delete" | "disabled";
3
+ label?: string;
4
+ isLoading?: boolean;
5
+ disabled?: boolean;
6
+ onClick?: () => void;
7
+ }
8
+ export declare const Button: React.FC<ButtonProps>;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Loader } from "../spinner/Loader";
3
+ export const Button = ({ variant = "primary", label, isLoading = false, disabled = false, onClick, }) => {
4
+ const colors = {
5
+ primary: "bg-primary-button text-primary",
6
+ secondary: "bg-secondary-button text-primary",
7
+ restore: "bg-restore-button text-primary",
8
+ delete: "bg-delete-button text-primary",
9
+ disabled: "bg-disabled-button text-primary",
10
+ };
11
+ const loader = isLoading ? _jsx(Loader, {}) : null;
12
+ const isDisabled = disabled || isLoading;
13
+ return (_jsx("div", { children: _jsxs("button", { className: `${colors[variant]} flex items-center gap-3 px-4 py-2 rounded-2xl text-sm font-medium w-full justify-center md:w-70 lg:w-25
14
+ ${isDisabled ? "cursor-not-allowed opacity-50" : "hover:cursor-pointer"}`, disabled: isDisabled, onClick: onClick, children: [loader, label] }) }));
15
+ };
@@ -0,0 +1 @@
1
+ export { Button } from './Button';
@@ -0,0 +1,2 @@
1
+ //point of entry
2
+ export { Button } from './Button';
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ interface CardProps {
3
+ children?: React.ReactNode;
4
+ }
5
+ export declare const Card: React.FC<CardProps>;
6
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Card = ({ children }) => {
3
+ return (_jsx("div", { className: "bg-primary w-full max-w-sm rounded-lg shadow-md overflow-hidden", children: children }));
4
+ };
@@ -0,0 +1,6 @@
1
+ interface CardContentProps {
2
+ title: string;
3
+ description: string;
4
+ }
5
+ export declare const CardContent: React.FC<CardContentProps>;
6
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const CardContent = ({ title, description, }) => {
3
+ return (_jsxs("div", { className: "p-10", children: [_jsx("h2", { className: "text-lg font-bold mb-2 text-black", children: title }), _jsx("p", { className: "text-gray text-sm font-normal", children: description })] }));
4
+ };
@@ -0,0 +1,5 @@
1
+ interface CardFooterProps {
2
+ children?: React.ReactNode;
3
+ }
4
+ export declare const CardFooter: React.FC<CardFooterProps>;
5
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const CardFooter = ({ children }) => {
3
+ return _jsx("div", { className: "flex justify-end gap-4 w-full p-4", children: children });
4
+ };
@@ -0,0 +1,7 @@
1
+ interface CardImageProps {
2
+ alt: string;
3
+ image: string;
4
+ children?: React.ReactNode;
5
+ }
6
+ export declare const CardImage: React.FC<CardImageProps>;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const CardImage = ({ alt, image, children, }) => {
3
+ return (_jsxs("div", { className: "relative w-full h-48", children: [_jsx("img", { src: image, alt: alt, className: "w-full h-auto object-cover" }), children] }));
4
+ };
@@ -0,0 +1,4 @@
1
+ export { Card } from "./Card";
2
+ export { CardContent } from "./CardContent";
3
+ export { CardImage } from "./CardImage";
4
+ export { CardFooter } from "./CardFooter";
@@ -0,0 +1,4 @@
1
+ export { Card } from "./Card";
2
+ export { CardContent } from "./CardContent";
3
+ export { CardImage } from "./CardImage";
4
+ export { CardFooter } from "./CardFooter";
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ interface CfooterProps {
3
+ children?: ReactNode;
4
+ }
5
+ export declare const Cfooter: ({ children }: CfooterProps) => import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Cfooter = ({ children }) => {
3
+ return (_jsx("footer", { className: "\r\n w-full\r\n bg-gray\r\n text-white\r\n ", children: _jsx("div", { className: "\r\n mx-auto\r\n max-w-7xl\r\n grid\r\n grid-cols-1\r\n gap-8\r\n px-6\r\n py-10\r\n md:grid-cols-3\r\n ", children: children }) }));
4
+ };
@@ -0,0 +1,5 @@
1
+ interface FooterBottomProps {
2
+ copyright: string;
3
+ }
4
+ export declare const FooterBottom: React.FC<FooterBottomProps>;
5
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const FooterBottom = ({ copyright, }) => {
3
+ return (_jsx("div", { className: "\r\n bg-gray\r\n text-light-gray\r\n\r\n border-t\r\n border-gray\r\n\r\n py-4\r\n\r\n text-center\r\n text-sm\r\n ", children: copyright }));
4
+ };
@@ -0,0 +1,11 @@
1
+ interface FooterContactProps {
2
+ email: string;
3
+ phone: string;
4
+ socials: {
5
+ id: number;
6
+ label: string;
7
+ href: string;
8
+ }[];
9
+ }
10
+ export declare const FooterContact: ({ email, phone, socials, }: FooterContactProps) => import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const FooterContact = ({ email, phone, socials, }) => {
3
+ return (_jsxs("div", { className: "text-white", children: [_jsx("h3", { className: "\r\n mb-3\r\n text-lg\r\n font-semibold\r\n ", children: "Contact" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("p", { children: email }), _jsx("p", { children: phone })] }), _jsx("h4", { className: "\r\n mt-5\r\n mb-2\r\n font-medium\r\n ", children: "Follow Us" }), _jsx("div", { className: "flex flex-wrap gap-3", children: socials.map((social) => (_jsx("a", { href: social.href, className: "hover:underline", children: social.label }, social.id))) })] }));
4
+ };
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ interface FooterIconProps {
3
+ children?: ReactNode;
4
+ description: string;
5
+ }
6
+ export declare const FooterIcon: ({ children, description, }: FooterIconProps) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const FooterIcon = ({ children, description, }) => {
3
+ return (_jsxs("div", { className: "flex flex-col gap-4", children: [children, _jsx("p", { className: "\r\n max-w-sm\r\n text-sm\r\n text-white\r\n ", children: description })] }));
4
+ };
@@ -0,0 +1,11 @@
1
+ interface QuickLinkProps {
2
+ title: string;
3
+ links: {
4
+ id: number;
5
+ label: string;
6
+ href: string;
7
+ }[];
8
+ onItemClick?: (label: string) => void;
9
+ }
10
+ export declare const QuickLink: ({ title, links, onItemClick, }: QuickLinkProps) => import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const QuickLink = ({ title, links, onItemClick, }) => {
3
+ return (_jsxs("div", { className: "text-white", children: [_jsx("h3", { className: "\r\n mb-3\r\n text-lg\r\n font-semibold\r\n ", children: title }), _jsx("div", { className: "flex flex-col gap-2", children: links.map((link) => (_jsx("a", { href: link.href, onClick: () => onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(link.label), className: "hover:underline", children: link.label }, link.id))) })] }));
4
+ };
@@ -0,0 +1,5 @@
1
+ export { Cfooter } from './Cfooter';
2
+ export { FooterIcon } from './FooterIcon';
3
+ export { FooterBottom } from './FooterBottom';
4
+ export { FooterContact } from './FooterContact';
5
+ export { QuickLink } from './QuickLink';
@@ -0,0 +1,5 @@
1
+ export { Cfooter } from './Cfooter';
2
+ export { FooterIcon } from './FooterIcon';
3
+ export { FooterBottom } from './FooterBottom';
4
+ export { FooterContact } from './FooterContact';
5
+ export { QuickLink } from './QuickLink';
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ interface CformProps {
3
+ children?: React.ReactNode;
4
+ }
5
+ export declare const Cform: React.FC<CformProps>;
6
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Cform = ({ children }) => {
3
+ return (_jsx("form", { className: "w-full max-w-sm", children: _jsx("div", { className: "flex flex-col gap-1 ", children: children }) }));
4
+ };
@@ -0,0 +1 @@
1
+ export { Cform } from "./Cform";
@@ -0,0 +1 @@
1
+ export { Cform } from "./Cform";
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface CheaderProps {
3
+ children?: React.ReactNode;
4
+ style?: string;
5
+ }
6
+ export declare const Cheader: React.FC<CheaderProps>;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Cheader = ({ children, style }) => {
3
+ return (_jsx("header", { className: `w-full bg-white border-b border-light-gray shadow-sm ${style}`, children: _jsx("div", { className: "flex items-center justify-between px-6 py-4", children: children }) }));
4
+ };
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ interface DrawerProps {
3
+ navDrawer: {
4
+ id: number;
5
+ href: string;
6
+ label: string;
7
+ }[];
8
+ style?: string;
9
+ onItemClick?: (label: string) => void;
10
+ }
11
+ export declare const Drawer: React.FC<DrawerProps>;
12
+ export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ export const Drawer = ({ navDrawer = [], style, onItemClick }) => {
4
+ const [openDrawer, setOpenDrawer] = useState(false);
5
+ return (_jsxs(_Fragment, { children: [_jsx("button", { onClick: () => setOpenDrawer(true), className: " flex md:hidden items-center justify-center h-10 w-10 rounded-md hover:bg-gray-100", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", className: "\r\n h-6\r\n w-6\r\n text-gray-700\r\n ", children: _jsx("path", { fillRule: "evenodd", d: "M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z", clipRule: "evenodd" }) }) }), openDrawer && (_jsx("div", { onClick: () => setOpenDrawer(false), className: "fixed inset-0 z-40 bg-black/40 md:hidden" })), _jsxs("aside", { className: `
6
+ fixed top-0
7
+ left-0 z-50
8
+ h-screen w-65
9
+ bg-white
10
+ shadow-lg
11
+ transition-transform duration-300
12
+
13
+ ${openDrawer ? "translate-x-0" : "-translate-x-full"}
14
+
15
+ md:hidden
16
+
17
+ ${style || ""}
18
+ `, children: [_jsxs("div", { className: "\r\n flex\r\n items-center\r\n justify-between\r\n\r\n border-b\r\n border-light-gray\r\n\r\n px-5\r\n py-4\r\n ", children: [_jsx("h2", { className: "text-lg font-semibold", children: "Menu" }), _jsx("button", { onClick: () => setOpenDrawer(false), className: "\r\n flex\r\n items-center\r\n justify-center\r\n\r\n h-10\r\n w-10\r\n\r\n rounded-md\r\n\r\n hover:bg-gray-100\r\n ", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", className: "\r\n h-6\r\n w-6\r\n\r\n text-gray-700\r\n ", children: _jsx("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 01-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06Z", clipRule: "evenodd" }) }) })] }), _jsx("div", { className: "flex flex-col p-4", children: navDrawer.map((item) => (_jsx("a", { href: item.href || "#", onClick: () => {
19
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item.label);
20
+ setOpenDrawer(false);
21
+ }, className: "\r\n rounded-md\r\n px-4\r\n py-3\r\n hover:bg-gray-100\r\n ", children: item.label }, item.id))) })] })] }));
22
+ };
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface IconProps {
3
+ logo?: string;
4
+ title?: string;
5
+ style?: string;
6
+ alt?: string;
7
+ }
8
+ export declare const Icon: React.FC<IconProps>;
9
+ export {};
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const Icon = ({ logo = "/logo.svg", title = "my Company", style, alt = "", }) => {
3
+ return (_jsxs("div", { className: `
4
+ flex
5
+ items-center
6
+ gap-2
7
+ sm:gap-3
8
+ shrink-0
9
+ ${style || ""}
10
+ `, children: [_jsx("img", { src: logo, alt: alt, className: "\r\n h-8\r\n w-8\r\n sm:h-10\r\n sm:w-10\r\n object-contain\r\n " }), _jsx("h1", { className: "\r\n text-sm\r\n sm:text-lg\r\n font-bold\r\n text-blue\r\n ", children: title })] }));
11
+ };
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ interface NavBarProps {
3
+ navBar: {
4
+ id: number;
5
+ href: string;
6
+ label: string;
7
+ }[];
8
+ style?: string;
9
+ onItemClick?: (label: string) => void;
10
+ }
11
+ export declare const NavBar: React.FC<NavBarProps>;
12
+ export {};
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const NavBar = ({ navBar = [], style, onItemClick, }) => {
3
+ return (_jsx("nav", { className: `
4
+ hidden
5
+ md:flex
6
+ gap-12
7
+ justify-center
8
+ items-center
9
+ absolute
10
+ left-1/2
11
+ -translate-x-1/2
12
+ ${style || ""}
13
+ `, children: navBar.map((item) => (_jsx("a", { href: item.href || "#", onClick: () => onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item.label), className: "\r\n text-lg\r\n font-bold\r\n text-black\r\n hover:text-green\r\n cursor-pointer\r\n ", children: item.label }, item.id))) }));
14
+ };
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ interface SearchBarProps {
3
+ placeholder?: string;
4
+ style?: string;
5
+ children?: React.ReactNode;
6
+ }
7
+ export declare const SearchBar: React.FC<SearchBarProps>;
8
+ export {};
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Modal } from "../modal/Modal";
4
+ export const SearchBar = ({ placeholder = "Search...", style, children, }) => {
5
+ const [openSearch, setOpenSearch] = useState(false);
6
+ return (_jsxs("div", { className: `relative ${style || ""}`, children: [_jsxs("div", { className: "hidden md:block relative", children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, className: "\r\n absolute\r\n left-3\r\n top-1/2\r\n h-4\r\n w-4\r\n -translate-y-1/2\r\n text-gray-400\r\n ", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-4.35-4.35m1.85-5.15a7 7 0 11-14 0 7 7 0 0114 0z" }) }), _jsx("input", { type: "text", placeholder: placeholder, className: "\r\n w-27.5\r\n sm:w-40\r\n md:w-50\r\n lg:w-60\r\n rounded-md\r\n border\r\n border-light-gray\r\n bg-white\r\n px-3\r\n py-2\r\n pl-9\r\n text-xs\r\n sm:text-sm\r\n focus:outline-none\r\n focus:ring-2\r\n focus:ring-blue\r\n " })] }), _jsx("button", { onClick: () => setOpenSearch(true), className: "\r\n flex\r\n md:hidden\r\n items-center\r\n justify-center\r\n h-10\r\n w-10\r\n rounded-md\r\n hover:bg-gray-100\r\n ", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, className: "\r\n h-6\r\n w-6\r\n text-gray-700\r\n ", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-4.35-4.35m1.85-5.15a7 7 0 11-14 0 7 7 0 0114 0z" }) }) }), _jsx(Modal, { isOpen: openSearch, title: "Search", onClose: () => setOpenSearch(false), children: children ? (children) : (_jsxs("div", { className: "relative", children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, className: "\r\n absolute\r\n left-3\r\n top-1/2\r\n h-4\r\n w-4\r\n -translate-y-1/2\r\n text-gray-400\r\n ", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-4.35-4.35m1.85-5.15a7 7 0 11-14 0 7 7 0 0114 0z" }) }), _jsx("input", { autoFocus: true, type: "text", placeholder: placeholder, className: "\r\n w-full\r\n rounded-md\r\n border\r\n border-light-gray\r\n bg-white\r\n px-3\r\n py-2\r\n pl-9\r\n text-sm\r\n focus:outline-none\r\n focus:ring-2\r\n focus:ring-blue\r\n " })] })) })] }));
7
+ };
@@ -0,0 +1,5 @@
1
+ export { Cheader } from './Cheader';
2
+ export { Icon } from './Icon';
3
+ export { Drawer } from './Drawer';
4
+ export { SearchBar } from './SearchBar';
5
+ export { NavBar } from './NavBar';
@@ -0,0 +1,5 @@
1
+ export { Cheader } from './Cheader';
2
+ export { Icon } from './Icon';
3
+ export { Drawer } from './Drawer';
4
+ export { SearchBar } from './SearchBar';
5
+ export { NavBar } from './NavBar';
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ interface CheckBoxProps {
3
+ id: string;
4
+ label: string;
5
+ required?: boolean;
6
+ disabled?: boolean;
7
+ defaultChecked?: boolean;
8
+ error?: boolean;
9
+ helperText?: string;
10
+ }
11
+ export declare const CheckBox: React.FC<CheckBoxProps>;
12
+ export {};
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ export const CheckBox = ({ id, label, required, disabled, defaultChecked, error, helperText, }) => {
4
+ const [isChecked, setIsChecked] = useState(defaultChecked || false);
5
+ const handleChange = (e) => {
6
+ const checked = e.target.checked;
7
+ setIsChecked(checked);
8
+ };
9
+ return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { id: id, type: "checkbox", checked: isChecked, onChange: handleChange, disabled: disabled, className: `
10
+ w-4 h-4 border rounded-xs
11
+ bg-neutral-secondary-medium
12
+ focus:ring-2 focus:ring-brand-soft
13
+ ${disabled ? "border-light cursor-not-allowed" : "border-default-medium hover:cursor-pointer"}
14
+ ` }), _jsxs("label", { htmlFor: id, className: `
15
+ select-none ms-2 text-sm font-medium
16
+ ${disabled ? "text-fg-disabled text-light-gray" : "text-heading"}
17
+ `, children: [label, " ", required && _jsx("span", { className: "text-red", children: "*" })] })] }), _jsx("div", { className: error ? "text-red text-sm font-medium" : "text-gray text-sm font-medium", children: helperText })] }));
18
+ };
@@ -0,0 +1,17 @@
1
+ interface SelectProps {
2
+ label: string;
3
+ options: {
4
+ key: number;
5
+ name: string;
6
+ value: string;
7
+ image?: string;
8
+ }[];
9
+ required?: boolean;
10
+ disabled?: boolean;
11
+ helperText?: string;
12
+ error?: boolean;
13
+ value?: string;
14
+ onChange?: (value: string) => void;
15
+ }
16
+ export declare const Select: React.FC<SelectProps>;
17
+ export {};
@@ -0,0 +1,12 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ export const Select = ({ label, options, required, disabled, helperText, error, value, onChange, }) => {
3
+ const handleChange = (event) => {
4
+ if (onChange) {
5
+ onChange(event.target.value);
6
+ }
7
+ };
8
+ return (_jsxs("div", { className: "w-full flex flex-col gap-1", children: [_jsxs("label", { className: "text-sm font-medium text-gray", children: [label, " ", required && "*"] }), _jsx("select", { className: `h-10 border-r-8 border-transparent px-4 outline outline-neutral-700 block w-full p-2 bg-neutral-secondary-medium
9
+ border border-default-medium text-heading text-sm font-normal rounded-base focus:ring-brand focus:border-brand shadow-xs
10
+ placeholder:text-body
11
+ ${disabled ? "cursor-not-allowed" : "hover:cursor-pointer"}`, disabled: disabled, onChange: handleChange, value: value, children: options.map((option) => (_jsx("option", { value: option.name, children: option.value }, option.key))) }), helperText && error && (_jsx("div", { className: "text-red text-sm font-normal", children: helperText }))] }));
12
+ };
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ interface TextFieldProps {
3
+ id: string;
4
+ labelText: string;
5
+ placeholder: string;
6
+ error?: boolean;
7
+ helperText?: string;
8
+ type: "text" | "email" | "password" | "number";
9
+ }
10
+ export declare const TextField: React.FC<TextFieldProps>;
11
+ export {};
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const errorColor = "border-red";
3
+ const errorTextColor = "text-red";
4
+ const defaultColor = "border-gray";
5
+ export const TextField = ({ id, labelText, placeholder, type, error, helperText, }) => {
6
+ return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("label", { htmlFor: id, className: "text-sm font-medium text-gray", children: labelText }), _jsx("input", { id: id, placeholder: placeholder, type: type, className: `block w-full px-3 py-2.5 bg-neutral-secondary-medium border ${error ? errorColor : defaultColor} text-heading text-sm rounded-base shadow-xs placeholder:text-body focus:ring-brand focus:border-brand` }), helperText && (_jsx("p", { className: `${error ? errorTextColor : "text-light-gray"} text-xs`, children: helperText }))] }));
7
+ };
@@ -0,0 +1,3 @@
1
+ export { TextField } from "./TextField";
2
+ export { CheckBox } from "./CheckBox";
3
+ export { Select } from "./Select";
@@ -0,0 +1,3 @@
1
+ export { TextField } from "./TextField";
2
+ export { CheckBox } from "./CheckBox";
3
+ export { Select } from "./Select";
@@ -0,0 +1,8 @@
1
+ interface ModalProps {
2
+ isOpen: boolean;
3
+ onClose: () => void;
4
+ title: string;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare const Modal: React.FC<ModalProps>;
8
+ export {};
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ export const Modal = ({ isOpen, onClose, title, children }) => {
3
+ if (!isOpen)
4
+ return null;
5
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40 bg-black/40", onClick: onClose }), _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", children: _jsxs("div", { className: "w-full max-w-md bg-white shadow-lg", role: "dialog", "aria-modal": "true", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-gray-200 px-5 py-4", children: [_jsx("h2", { className: "text-lg font-semibold", children: title }), _jsx("button", { onClick: onClose, className: "flex h-10 w-10 items-center justify-center hover:bg-gray-100 rounded-md", "aria-label": "Close modal", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", className: "h-5 w-5", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsx("div", { className: "p-5", children: children })] }) })] }));
6
+ };
@@ -0,0 +1 @@
1
+ export { Modal } from './Modal';
@@ -0,0 +1 @@
1
+ export { Modal } from './Modal';
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface SectionProps {
3
+ id?: string;
4
+ title?: string;
5
+ children?: React.ReactNode;
6
+ style?: string;
7
+ }
8
+ export declare const Section: React.FC<SectionProps>;
9
+ export {};
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const Section = ({ id, title, children, style, }) => {
3
+ return (_jsx("section", { id: id, className: `
4
+ min-h-screen
5
+ w-full
6
+ px-6
7
+ py-6
8
+ scroll-mt-32
9
+ md:px-10
10
+ lg:px-16
11
+
12
+ ${style || ""}
13
+ `, children: _jsxs("div", { className: "mx-auto flex w-full max-w-7xl flex-col gap-10", children: [title && (_jsx("h2", { className: "\r\n text-3xl\r\n font-bold\r\n md:text-4xl\r\n ", children: title })), children] }) }));
14
+ };
@@ -0,0 +1 @@
1
+ export { Section } from './Section';
@@ -0,0 +1 @@
1
+ export { Section } from './Section';
@@ -0,0 +1 @@
1
+ export declare const Loader: React.FC;
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Loader = () => {
3
+ return (_jsx("span", { className: "animate-spin rounded-full h-4 w-4 border-b-2 border-white" }));
4
+ };
@@ -0,0 +1 @@
1
+ export { Loader } from './Loader';
@@ -0,0 +1 @@
1
+ export { Loader } from './Loader';
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ interface LayoutProps {
3
+ children: React.ReactNode;
4
+ }
5
+ export declare const LandingLayout: React.FC<LayoutProps>;
6
+ export {};
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Cheader } from "../header/Cheader";
4
+ import { NavBar } from "../header/NavBar";
5
+ import { Drawer } from "../header/Drawer";
6
+ import { Icon } from "../header/Icon";
7
+ import { Breadcrumbs } from "../breadcrumbs/Breadcrumbs";
8
+ import { SearchBar } from "../header/SearchBar";
9
+ import { Cfooter } from "../footer/Cfooter";
10
+ import { FooterIcon } from "../footer/FooterIcon";
11
+ import { QuickLink } from "../footer/QuickLink";
12
+ import { FooterContact } from "../footer/FooterContact";
13
+ import { FooterBottom } from "../footer/FooterBottom";
14
+ export const LandingLayout = ({ children, }) => {
15
+ const [currentPage, setCurrentPage] = React.useState("Home");
16
+ const navItems = [
17
+ { id: 1, href: "#home", label: "Home" },
18
+ { id: 2, href: "#about", label: "About" },
19
+ { id: 3, href: "#services", label: "Services" },
20
+ { id: 4, href: "#contact", label: "Contact" },
21
+ ];
22
+ return (_jsxs("div", { className: "w-full scroll-smooth", children: [_jsx("div", { className: "sticky top-0 z-50 bg-white", children: _jsxs(Cheader, { children: [_jsxs("div", { className: "flex items-center gap-4 lg:gap-10", children: [_jsx(Icon, { logo: "/icon.svg", title: "QTEK" }), _jsx(NavBar, { navBar: navItems, onItemClick: setCurrentPage })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2 sm:gap-3", children: [_jsx(SearchBar, {}), _jsx(Drawer, { navDrawer: navItems, onItemClick: setCurrentPage })] })] }) }), _jsx("div", { className: " \r\n mx-auto\r\n max-w-full\r\n px-6\r\n py-4\r\n sticky\r\n z-40\r\n top-16\r\n bg-light-gray", children: _jsx(Breadcrumbs, { items: [
23
+ {
24
+ id: 1,
25
+ label: currentPage,
26
+ href: "#",
27
+ },
28
+ ] }) }), children, _jsxs(Cfooter, { children: [_jsx(FooterIcon, { description: "Building modern and scalable digital solutions.", children: _jsx("div", { className: "scale-150 origin-left", children: _jsx(Icon, { logo: "/icon.svg", title: "QTEK" }) }) }), _jsx(QuickLink, { title: "Quick Links", links: navItems, onItemClick: setCurrentPage }), _jsx(FooterContact, { email: "hello@qtek.com", phone: "+63 900 000 0000", socials: [
29
+ { id: 1, label: "Facebook", href: "#" },
30
+ { id: 2, label: "LinkedIn", href: "#" },
31
+ { id: 3, label: "GitHub", href: "#" },
32
+ ] }), _jsx(FooterBottom, { copyright: "\u00A9 2026 QTEK. All rights reserved." })] })] }));
33
+ };