@eloisallena/web_components 1.0.3 → 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.
- package/dist/component/breadcrumbs/Breadcrumbs.d.ts +9 -0
- package/dist/component/breadcrumbs/Breadcrumbs.js +7 -0
- package/dist/component/breadcrumbs/index.d.ts +1 -0
- package/dist/component/breadcrumbs/index.js +1 -0
- package/dist/component/button/Button.d.ts +8 -0
- package/dist/component/button/Button.js +15 -0
- package/dist/component/button/index.d.ts +1 -0
- package/dist/component/button/index.js +2 -0
- package/dist/component/card/Card.d.ts +6 -0
- package/dist/component/card/Card.js +4 -0
- package/dist/component/card/CardContent.d.ts +6 -0
- package/dist/component/card/CardContent.js +4 -0
- package/dist/component/card/CardFooter.d.ts +5 -0
- package/dist/component/card/CardFooter.js +4 -0
- package/dist/component/card/CardImage.d.ts +7 -0
- package/dist/component/card/CardImage.js +4 -0
- package/dist/component/card/index.d.ts +4 -0
- package/dist/component/card/index.js +4 -0
- package/dist/component/footer/Cfooter.d.ts +6 -0
- package/dist/component/footer/Cfooter.js +4 -0
- package/dist/component/footer/FooterBottom.d.ts +5 -0
- package/dist/component/footer/FooterBottom.js +4 -0
- package/dist/component/footer/FooterContact.d.ts +11 -0
- package/dist/component/footer/FooterContact.js +4 -0
- package/dist/component/footer/FooterIcon.d.ts +7 -0
- package/dist/component/footer/FooterIcon.js +4 -0
- package/dist/component/footer/QuickLink.d.ts +11 -0
- package/dist/component/footer/QuickLink.js +4 -0
- package/dist/component/footer/index.d.ts +5 -0
- package/dist/component/footer/index.js +5 -0
- package/dist/component/form/Cform.d.ts +6 -0
- package/dist/component/form/Cform.js +4 -0
- package/dist/component/form/index.d.ts +1 -0
- package/dist/component/form/index.js +1 -0
- package/dist/component/header/Cheader.d.ts +7 -0
- package/dist/component/header/Cheader.js +4 -0
- package/dist/component/header/Drawer.d.ts +12 -0
- package/dist/component/header/Drawer.js +22 -0
- package/dist/component/header/Icon.d.ts +9 -0
- package/dist/component/header/Icon.js +11 -0
- package/dist/component/header/NavBar.d.ts +12 -0
- package/dist/component/header/NavBar.js +14 -0
- package/dist/component/header/SearchBar.d.ts +8 -0
- package/dist/component/header/SearchBar.js +7 -0
- package/dist/component/header/index.d.ts +5 -0
- package/dist/component/header/index.js +5 -0
- package/dist/component/input/CheckBox.d.ts +12 -0
- package/dist/component/input/CheckBox.js +18 -0
- package/dist/component/input/Select.d.ts +17 -0
- package/dist/component/input/Select.js +12 -0
- package/dist/component/input/TextField.d.ts +11 -0
- package/dist/component/input/TextField.js +7 -0
- package/dist/component/input/index.d.ts +3 -0
- package/dist/component/input/index.js +3 -0
- package/dist/component/modal/Modal.d.ts +8 -0
- package/dist/component/modal/Modal.js +6 -0
- package/dist/component/modal/index.d.ts +1 -0
- package/dist/component/modal/index.js +1 -0
- package/dist/component/section/Section.d.ts +9 -0
- package/dist/component/section/Section.js +14 -0
- package/dist/component/section/index.d.ts +1 -0
- package/dist/component/section/index.js +1 -0
- package/dist/component/spinner/Loader.d.ts +1 -0
- package/dist/component/spinner/Loader.js +4 -0
- package/dist/component/spinner/index.d.ts +1 -0
- package/dist/component/spinner/index.js +1 -0
- package/dist/component/stories/LandingLayout.d.ts +6 -0
- package/dist/component/stories/LandingLayout.js +33 -0
- package/dist/component/stories/index.d.ts +1 -0
- package/dist/component/stories/index.js +1 -0
- package/dist/component/table/Ctable.d.ts +8 -0
- package/dist/component/table/Ctable.js +13 -0
- package/dist/component/table/TableBody.d.ts +7 -0
- package/dist/component/table/TableBody.js +4 -0
- package/dist/component/table/TableCell.d.ts +8 -0
- package/dist/component/table/TableCell.js +12 -0
- package/dist/component/table/TableHead.d.ts +7 -0
- package/dist/component/table/TableHead.js +16 -0
- package/dist/component/table/TableRow.d.ts +8 -0
- package/dist/component/table/TableRow.js +27 -0
- package/dist/component/table/alignment.d.ts +5 -0
- package/dist/component/table/alignment.js +5 -0
- package/dist/component/table/index.d.ts +5 -0
- package/dist/component/table/index.js +5 -0
- package/dist/component/table/types.d.ts +13 -0
- package/dist/component/table/types.js +1 -0
- package/dist/index.d.ts +26 -2
- package/dist/index.js +26 -0
- package/dist/themes/tailwind.css +47 -0
- package/dist/web-components.es.js +160 -2131
- package/package.json +11 -8
- package/dist/web-components.cjs.js +0 -304
|
@@ -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,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,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,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
|
+
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,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,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 @@
|
|
|
1
|
+
export { Cform } from "./Cform";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Cform } from "./Cform";
|
|
@@ -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,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,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,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,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,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,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,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 @@
|
|
|
1
|
+
export { Loader } from './Loader';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Loader } from './Loader';
|
|
@@ -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
|
+
};
|