Initial export from WebStudio.is

This commit is contained in:
deterge
2025-10-08 18:18:41 -04:00
parent bb56cf1878
commit 903e016eec
54 changed files with 90905 additions and 0 deletions

4
.dockerignore Normal file
View File

@@ -0,0 +1,4 @@
.react-router
build
node_modules
README.md

4
.npmrc Normal file
View File

@@ -0,0 +1,4 @@
force=true
loglevel=error
audit=false
fund=false

3
.webstudio/config.json Normal file
View File

@@ -0,0 +1,3 @@
{
"projectId": "cd046e79-00be-4be9-bd00-4da4d3620900"
}

67286
.webstudio/data.json Normal file

File diff suppressed because it is too large Load Diff

19
Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
FROM node:22-alpine AS dependencies-env
COPY .npmrc package.json /app/
WORKDIR /app
RUN npm install --omit=dev
FROM dependencies-env AS build-env
COPY . /app/
WORKDIR /app
RUN npm install
RUN npm run build
FROM node:22-alpine
COPY .npmrc package.json /app/
COPY --from=dependencies-env /app/node_modules /app/node_modules
COPY --from=build-env /app/build /app/build
COPY --from=build-env /app/public /app/public
WORKDIR /app
# there is a DOMAINS env with comma separated allowed domains for image processing
CMD ["npm", "run", "start"]

View File

@@ -0,0 +1,8 @@
export const sitemap = [
{
"path": "/",
"lastModified": "2025-10-08"
}
];

View File

@@ -0,0 +1,82 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
let nocodbUrl = "https://db.jamericanbar.com"
let nocodbPeopleTableId = "mn7h3guzxy96uar"
const system = _props.system
let itemsPerPage = 1000
let nocodbOfficerViewId = "vwfczgm0fa5lnkhn"
let nocodbToken = "w12xFAvVnpckAU0KTJWaGV3oN1KS96tINZlzI26I"
let nocodbPracticeTableId = "mguumu4w1pvajkj"
let nocodbPracticeViewId = "vwpa6c74wqj2n97h"
const nocodbOfficerData_1: ResourceRequest = {
name: "nocodbOfficerData",
url: `${nocodbUrl}/api/v2/tables/${nocodbPeopleTableId}/records?offset=${((+system?.search?.page || 1) - 1) * itemsPerPage}&limit=${itemsPerPage}`,
searchParams: [
{ name: "offset", value: "0" },
{ name: "viewId", value: nocodbOfficerViewId },
],
method: "get",
headers: [
{ name: "Cache-Control", value: "max-age=3600" },
{ name: "xc-token", value: nocodbToken },
],
}
const nocodbPracticeData: ResourceRequest = {
name: "nocodbPracticeData",
url: `https://nocodb.jaba.sheckeem.com/api/v2/tables/${nocodbPracticeTableId}/records`,
searchParams: [
{ name: "limit", value: "1000" },
{ name: "viewId", value: nocodbPracticeViewId },
{ name: "sort", value: "Practice" },
],
method: "get",
headers: [
{ name: "Cache-Control", value: "max-age=3600" },
{ name: "xc-token", value: nocodbToken },
],
}
const _data = new Map<string, ResourceRequest>([
["nocodbOfficerData_1", nocodbOfficerData_1],
["nocodbPracticeData", nocodbPracticeData],
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Untitled",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: undefined,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

702
app/__generated__/[about]._index.tsx generated Normal file
View File

@@ -0,0 +1,702 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem } from "@webstudio-is/sdk-components-react";
import { Link as Link, RemixForm as RemixForm, Body as Body, Link as Link_1 } from "@webstudio-is/sdk-components-react-router";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose, DialogTitle as DialogTitle } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
["uriel-soberanes-MxVkWPiJALs-unsplash_RiFZssg0smbNpyTEDVasp.jpg"]
const Page = (_props: { system: any; }) => {
let [nocodbUrl, set$nocodbUrl] = useVariableState<any>("https://db.jamericanbar.com")
let nocodbOfficerData = useResource("nocodbOfficerData_1")
return <Body
className={`w-element c1ubzs3e cp94bc7 c11qwvck c1h1ripk`}>
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<Box
className={`w-box`}>
<section
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cest8h4 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<h2
className={`w-element c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
<span
className={`w-element`}>
{"Get to know "}
</span>
<span
className={`w-element co5mmtv`}>
{"JABA"}
</span>
</h2>
<p
className={`w-element`}>
{"We've been around since 2007 and we're here to stay. As a voluntary bar association of The Florida Bar, JABA was founded to help those in the community develop professionally. We host fundraisers and galas, award scholarships, and provide exposure, in support of those among us who aspire for more in the Jamaican-American community."}
</p>
</div>
</section>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 cest8h4 c1pz3ug ckrfty5 c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c1ffen0s c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16ia0hd c1qp6ibo c1e1ow0q c1cg37y`}>
<div
className={`w-element c11qwvck c16owjvy c1yac48r c63pj4z co6l97s cb1yxpz c3s07sa cp94bc7 ckrfty5 c1pz3ug cctlk77 caat7iu c9ort0q c1xgc15y c1eyvkpq c12k3n51 c1meo862 c19qqyx4 c1p5x6fa clfrlpt cpy412x c1d5eypz c1rsoidt c87bndm chm2qi0 c15azqme c1ea6o8f`}>
<h3
className={`w-element c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
{"Our Mission"}
</h3>
<p
className={`w-element`}>
{"The purpose of JABA is to advance the professional interests of Jamaican-American attorneys. Our mission is to coordinate the development of educational, mentoring, and career opportunities for our members, nobly serve the Jamaican community and assist, however we can, our beloved homeland, Jamaica."}
</p>
</div>
<div
className={`w-element c11qwvck c16owjvy c1yac48r c63pj4z co6l97s cb1yxpz c3s07sa cp94bc7 ckrfty5 c1pz3ug cctlk77 caat7iu c9ort0q c1xgc15y c1eyvkpq c1meo862 c12k3n51 c19qqyx4 c1p5x6fa clfrlpt cpy412x c1d5eypz c1rsoidt c87bndm chm2qi0 c15azqme c1ea6o8f`}>
<h3
className={`w-element c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
{"Our Vision"}
</h3>
<p
className={`w-element`}>
{"We want to see our brothers and sisters achieving their potentials. To do so, we make efforts to bring attention to the problems facing our community, present opportunities for education and mentoring, and assist our members in their career path."}
</p>
</div>
</div>
</section>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 cest8h4 c1pz3ug ckrfty5 cx70a1 c1hghsug c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cest8h4 c1ffen0s c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8`}>
<h3
id={"officers"}
className={`w-element c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
{"Our Officers"}
</h3>
<p
className={`w-element`}>
{"The officers of the Jamaican-American Bar Association are elected each year at our General Body Election."}
</p>
<p
className={`w-element`}>
{"JABA members are encouraged to put forward nominations, run for office positions, and vote for officers of their choice that will lead JABA into greater endeavors."}
</p>
<p
className={`w-element c4at5v3`}>
{"Get to know our current officers!"}
</p>
<Box
className={`w-box c1ubzs3e`}>
<Box
className={`w-box ch2v0n6 cie66yg c86u3j3 cp94bc7 chhkvxo c1ubzs3e cwkmla3 cnznce3`}>
<button
type={"button"}
id={"swiper-button-prev"}
data-direction={"left"}
className={`w-element cp94bc7 c1hf55zn c1lbiv9k cvgya3i czc1xxn c1km1r19 c14nvc9f c5y8ol8 cqjhixt crrgtf2 cakkg7b cvdqajt c9z2iq9 c1h9vaz9 c131xast c1rgqj4g c4jumok ct6ibss cd27rhw c17aqieu cimhatq c1rzo0me c1cstkm ${"swiper-button"}`}>
{"<"}
</button>
<Box
data-slides-per-view={"2"}
data-infinite-loop={"true"}
data-autoplay={"true"}
data-nav={"true"}
data-nav-next-el={".swiper-button-next"}
data-nav-prev-el={".swiper-button-prev"}
data-swiper={"true"}
data-slider-speed={"400"}
data-autoplay-delay={""}
className={`w-box c185odjx ccrv7pp cie66yg c86u3j3 cxu5qug c1hxak5c cr2i47u c1vjuu35 c1ubzs3e c11qwvck c1n66h91 c14nvc9f c19qg08r cbi2tca c4cvase ce2l3ae cj4bx45 c37cdc8 ${"swiper swiper-c-auto"}`}>
<Box
id={"cardSlider"}
className={`w-box c1ubzs3e chhkvxo cxu5qug c19qg08r cp94bc7 c1y82gwc cj1ha9m c6235aq c718dnq c1lujo1e cx70a1 c1hghsug c1ffen0s c16owjvy ckrfty5 c1pz3ug ${"swiper-wrapper"}`}>
{nocodbOfficerData?.data?.list?.map?.((collectionItem_3: any, index_4: number) =>
<Fragment key={index_4}>
<Box
className={`w-box c17ciogo chhkvxo c1skyri1 cxxbc6w cj1ha9m c6235aq c718dnq c1lujo1e c1bo5jx8 c1sjz265 c1nb8id2 ${"swiper-slide"}`}>
<Box
className={`w-box c1h9vaz9 c131xast c1rgqj4g c4jumok c6ikqhw ceudx2k c1onyc1w c1d7isgk cj1ha9m c6235aq c718dnq c1lujo1e c11qwvck c16izmog cp94bc7 c18p3b6w c1c64w4e cafla6p c18s7o7b c1xbbjnc ctg9mo0 cu5ulod c1ehe8py c15ngyq1 cm7y8pg c1x7uv41 c14nvc9f c5y8ol8 citca8x c1anfr66 c1pzwf0x cxqhugd c1mwwcn0 c7w2qiz`}>
<Image
src={`${nocodbUrl}/${collectionItem_3?.Photo?.[0]?.path}`}
loading={"lazy"}
alt={`Image of ${collectionItem_3?.["Full Name"]}`}
className={`w-image ckc80yf cvdqajt c1c64w4e cafla6p c18s7o7b cj1ha9m c6235aq c718dnq c1lujo1e`} />
<Box
className={`w-box cp94bc7 c11qwvck cgjf13b c1ubzs3e cvdqajt cxu5qug cnd6asl cj1ha9m c6235aq c718dnq c1lujo1e c1ve93vn cdl0evl c1dgxli2 c1em5py7 c1rbk22j c1dfhduu cpi20r9 c1d33cxe`}>
<Heading
tag={"h4"}
className={`w-heading ct40akc c4at5v3 cyc50uv cumbk92 cv5fj2x c1ac7cl9 c4a2ypq c19rp5pq ctubw7p c1120caw cczq14u`}>
{collectionItem_3?.["Full Name"]}
</Heading>
{collectionItem_3?.["Membership Role"]?.map?.((collectionItem_4: any, index_2: number) =>
<Fragment key={index_2}>
<span
className={`w-element cv5fj2x cr6nhi c1522xph covmt41 c1h1ripk c1ffen0s c4at5v3`}>
{collectionItem_4}
</span>
</Fragment>
)}
<Dialog>
<DialogTrigger>
<Button
type={"button"}
className={`w-button crrgtf2 c14u70xt cr6nhi cax8fx cfmoqc6 c2ra2p0 c2ntruq c6tbig0 ct6ibss cd27rhw c17aqieu cimhatq c1kam8hn c1fn6urr c1k8mdcx c2vxqag`}>
{"Biography"}
</Button>
</DialogTrigger>
<DialogOverlay
className={`w-dialog-overlay c1tx9axw c1ous50h c8y1wzu cnd6asl c1k3ohfh ce0omps c1m0x7s5 c1ofsncy cp94bc7 cx70a1 c1hghsug`}>
<DialogContent
className={`w-dialog-content c1ubzs3e ce0omps cp94bc7 c11qwvck ck30raf cic9tor c15m97ve c18p3b6w cp7mst2 chhkvxo cwcwoan cxqnrff cpi20r9`}>
<Box
className={`w-box cp94bc7 c11qwvck c1yzyjk8 cwmg4c3`}>
<DialogTitle
className={`w-dialog-title c117qpaj ct40akc c10s1uyq c1ac9o39`}>
{collectionItem_3?.["Full Name"]}
</DialogTitle>
<div
className={`w-element c64xuwr c1icskyl`}>
{collectionItem_3?.["Membership Role"]?.map?.((collectionItem_5: any, index_3: number) =>
<Fragment key={index_3}>
<span
className={`w-element c1l8ry80 c1hfmmxj`}>
{collectionItem_5}
</span>
</Fragment>
)}
</div>
</Box>
<Text
className={`w-text`}>
{collectionItem_3?.Biography}
</Text>
<DialogClose
className={`w-close-button cvdqajt clofhkt c146cn12 c165ktzb c1rzzbtz c76x5wd cvrfs8q c1r57s1o cp94bc7 c14nvc9f c5y8ol8 c1h04jdi c1afxoij cu2b2wk cl7q148 cnwqdju cng60o0 c5p04gk`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.5 3 3 12.5M3 3l9.5 9.5\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Box>
</Fragment>
)}
</Box>
</Box>
<button
type={"button"}
id={"swiper-button-next"}
data-direction={"right"}
className={`w-element cp94bc7 c1hf55zn c1lbiv9k cvgya3i czc1xxn c1km1r19 c14nvc9f c5y8ol8 cqjhixt crrgtf2 cakkg7b cvdqajt c9z2iq9 c1h9vaz9 c131xast c1rgqj4g c4jumok ct6ibss cd27rhw c17aqieu cimhatq czk9ny0 c1cstkm ${"swiper-button"}`}>
{">"}
</button>
</Box>
<HtmlEmbed
code={"<script>\n function scrollSlider(direction) {\n const slider = document.getElementById(\"cardSlider\");\n const cards = slider.querySelectorAll(\".swiper-slide\");\n const cardCount = cards.length;\n \n if (cardCount === 0) return;\n \n const scrollAmount = slider.scrollWidth / cardCount;\n \n slider.scrollBy({ left: direction * scrollAmount, behavior: 'smooth' });\n }\n\n document.addEventListener(\"DOMContentLoaded\", function () {\n const buttons = document.getElementsByClassName(\"swiper-button\");\n Array.from(buttons).forEach(function (b) {\n b.addEventListener(\"click\", function () {\n const direction = b.dataset.direction === \"left\" ? -1 : 1;\n scrollSlider(direction);\n });\n });\n });\n</script>"}
clientOnly={true}
executeScriptOnCanvas={false}
className={`w-html-embed`} />
</Box>
</div>
</section>
</section>
</Box>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
</Body>
}
export { Page }

View File

@@ -0,0 +1,82 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
let nocodbUrl = "https://db.jamericanbar.com"
let nocodbPeopleTableId = "mn7h3guzxy96uar"
const system = _props.system
let itemsPerPage = 1000
let nocodbOfficerViewId = "vwfczgm0fa5lnkhn"
let nocodbToken = "w12xFAvVnpckAU0KTJWaGV3oN1KS96tINZlzI26I"
let nocodbPracticeTableId = "mguumu4w1pvajkj"
let nocodbPracticeViewId = "vwpa6c74wqj2n97h"
const nocodbOfficerData: ResourceRequest = {
name: "nocodbOfficerData",
url: `${nocodbUrl}/api/v2/tables/${nocodbPeopleTableId}/records?offset=${((+system?.search?.page || 1) - 1) * itemsPerPage}&limit=${itemsPerPage}`,
searchParams: [
{ name: "offset", value: "0" },
{ name: "viewId", value: nocodbOfficerViewId },
],
method: "get",
headers: [
{ name: "Cache-Control", value: "max-age=3600" },
{ name: "xc-token", value: nocodbToken },
],
}
const nocodbPracticeData: ResourceRequest = {
name: "nocodbPracticeData",
url: `https://nocodb.jaba.sheckeem.com/api/v2/tables/${nocodbPracticeTableId}/records`,
searchParams: [
{ name: "limit", value: "1000" },
{ name: "viewId", value: nocodbPracticeViewId },
{ name: "sort", value: "Practice" },
],
method: "get",
headers: [
{ name: "Cache-Control", value: "max-age=3600" },
{ name: "xc-token", value: nocodbToken },
],
}
const _data = new Map<string, ResourceRequest>([
["nocodbOfficerData", nocodbOfficerData],
["nocodbPracticeData", nocodbPracticeData],
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Untitled",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: undefined,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

570
app/__generated__/[contact]._index.tsx generated Normal file
View File

@@ -0,0 +1,570 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem } from "@webstudio-is/sdk-components-react";
import { Link as Link, RemixForm as RemixForm, Link as Link_1, Body as Body } from "@webstudio-is/sdk-components-react-router";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
[]
const Page = (_props: { system: any; }) => {
return <Body
className={`w-element c1ubzs3e cp94bc7 c11qwvck c1h1ripk`}>
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<Box
className={`w-box`}>
<section
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cest8h4 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</div>
</section>
</section>
</Box>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
</Body>
}
export { Page }

View File

@@ -0,0 +1,83 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
let nocodbUrl = "https://db.jamericanbar.com"
let nocodbPeopleTableId = "mn7h3guzxy96uar"
const system = _props.system
let itemsPerPage = 1000
let orderBy = "Full Name"
let nocodbAttorneyViewId = "vwffbhuhrx45fjmd"
let nocodbToken = "w12xFAvVnpckAU0KTJWaGV3oN1KS96tINZlzI26I"
let nocodbPracticeTableId = "mguumu4w1pvajkj"
let nocodbPracticeViewId = "vwpa6c74wqj2n97h"
const nocodbAttorneyData_1: ResourceRequest = {
name: "nocodbAttorneyData",
url: `${nocodbUrl}/api/v2/tables/${nocodbPeopleTableId}/records?offset=${((+system?.search?.page || 1) - 1) * itemsPerPage}&limit=${itemsPerPage}&sort=${orderBy}${system?.search?.platform ? `&where=(Platform,anyof,${system?.search?.platform})` : ''}`,
searchParams: [
{ name: "offset", value: "0" },
{ name: "viewId", value: nocodbAttorneyViewId },
],
method: "get",
headers: [
{ name: "Cache-Control", value: "max-age=3600" },
{ name: "xc-token", value: nocodbToken },
],
}
const nocodbPracticeData_1: ResourceRequest = {
name: "nocodbPracticeData",
url: `https://nocodb.jaba.sheckeem.com/api/v2/tables/${nocodbPracticeTableId}/records`,
searchParams: [
{ name: "limit", value: "1000" },
{ name: "viewId", value: nocodbPracticeViewId },
{ name: "sort", value: "Practice" },
],
method: "get",
headers: [
{ name: "Cache-Control", value: "max-age=3600" },
{ name: "xc-token", value: nocodbToken },
],
}
const _data = new Map<string, ResourceRequest>([
["nocodbAttorneyData_1", nocodbAttorneyData_1],
["nocodbPracticeData_1", nocodbPracticeData_1],
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Untitled",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: 200,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

718
app/__generated__/[directory]._index.tsx generated Normal file
View File

@@ -0,0 +1,718 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem, Select as Select, Option as Option } from "@webstudio-is/sdk-components-react";
import { Link as Link, RemixForm as RemixForm, Link as Link_1, Body as Body, RemixForm as RemixForm_1 } from "@webstudio-is/sdk-components-react-router";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose, DialogTitle as DialogTitle, DialogDescription as DialogDescription } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
[]
const Page = (_props: { system: any; }) => {
const system = _props.system;
let [filterField, set$filterField] = useVariableState<any>("Practice Areas")
let nocodbPracticeData = useResource("nocodbPracticeData_1")
let nocodbAttorneyData = useResource("nocodbAttorneyData_1")
let [nocodbUrl, set$nocodbUrl] = useVariableState<any>("https://db.jamericanbar.com")
return <Body
className={`w-body c1ubzs3e cp94bc7 c11qwvck c1h1ripk`}>
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<Box
className={`w-box c1ubzs3e c15fbiww c18onnut cie66yg c86u3j3 cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c5y8ol8 c19x3xi6 cuhtd2h`}>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cest8h4 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<h2
className={`w-element c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
<span
className={`w-element co5mmtv`}>
{"JABA "}
</span>
<span
className={`w-element`}>
{"Attorney Directory"}
</span>
</h2>
<Paragraph
className={`w-paragraph`}>
{"Find an attorney for your case, amongst our members."}
</Paragraph>
</div>
</section>
<div
className={`w-element c18739ly c1eu2t45 cx70a1 c1hghsug`}>
<div
className={`w-element cx70a1 c1hghsug c185odjx c18739ly cp94bc7 c11qwvck c14nvc9f c5y8ol8`}>
<search
className={`w-element c18739ly`}>
<div
className={`w-element cp94bc7 c11qwvck c1020k27 c1mj5urp chrscrk c1icv2b1 c18739ly c14nvc9f c5y8ol8 ckrfty5 c1pz3ug`}>
<Input
placeholder={"Search by any value..."}
type={"search"}
autoFocus={true}
id={"searchInput"}
className={`w-element cest8h4 c1m8y193 c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1lrhtf5 c872tqn cvx31ra c153i2mu clrd04b c4v8089`} />
<HtmlEmbed
code={"<script>\ndocument.getElementById(\"searchInput\").addEventListener(\"keyup\", function() {\n var filter = this.value.toLowerCase();\n var rows = document.querySelectorAll(\"#directoryTable .directoryTableRow\");\n\n rows.forEach(function(row) {\n var text = row.textContent.toLowerCase();\n row.style.display = text.includes(filter) ? \"\" : \"none\";\n });\n});\n</script>\n"}
clientOnly={true}
className={`w-html-embed`} />
<div
id={"directoryTable"}
className={`w-element c8cmig5 cx70a1 c1hghsug c1m2i68w`}>
<div
className={`w-element c23idjz c4at5v3 c1ubzs3e ckn8x54 c1m2i68w`}>
<div
className={`w-element c9i00db cuvaji7 cje4x0y`}>
{"Bar #"}
</div>
<div
className={`w-element c9i00db cuvaji7 cje4x0y`}>
{"Name"}
</div>
<div
className={`w-element c9i00db cuvaji7 cje4x0y`}>
{"Company"}
</div>
<div
className={`w-element c9i00db cuvaji7 cje4x0y`}>
{"Areas of Practice"}
</div>
</div>
<div
className={`w-element cevnsaw c1ubzs3e`}>
{nocodbAttorneyData?.data?.list?.map?.((collectionItem_5: any, index_7: number) =>
<Fragment key={index_7}>
<Dialog
open={false}>
<DialogTrigger>
<div
className={`w-element ckrfty5 c1pz3ug c1ffen0s c870v3h cl3mm8 caj4qav clksp0c czgw6q9 c18739ly c1t05sra ${"directoryTableRow"}`}>
<span
className={`w-element c9i00db cux6fi cje4x0y cu2htt`}>
{collectionItem_5?.["Florida Bar Number"]}
</span>
<span
className={`w-element c9i00db cux6fi cje4x0y`}>
{collectionItem_5?.["Full Name"]}
</span>
<span
className={`w-element c9i00db cux6fi cje4x0y`}>
{collectionItem_5?.["Law Firm"]}
</span>
<span
className={`w-element c9i00db cux6fi cje4x0y`}>
{`${collectionItem_5?.["Practice Areas"] != "[]" ? collectionItem_5?.["Practice Areas"] : ""}`}
</span>
</div>
</DialogTrigger>
<DialogOverlay
className={`w-dialog-overlay c1tx9axw c1ous50h c8y1wzu cnd6asl c1k3ohfh ce0omps c1m0x7s5 c1ofsncy cp94bc7 cx70a1 c1hghsug`}>
<DialogContent
className={`w-dialog-content ce0omps cp94bc7 c11qwvck ck30raf cic9tor c1148j64 c1h9vaz9 c131xast c4jumok c1rgqj4g cp7mst2 chhkvxo c14nvc9f c5y8ol8 cbi2tca c4cvase ce2l3ae cj4bx45 c1azrkpb cfv5xbg cxqnrff cpi20r9`}>
<Box
className={`w-box cp94bc7 c11qwvck c1yzyjk8 cwmg4c3`}>
<DialogTitle
className={`w-dialog-title ct40akc c10s1uyq cuvaji7 c18zze6k c1ac9o39`}>
{collectionItem_5?.["Full Name"]}
</DialogTitle>
<DialogDescription
className={`w-dialog-description cheret8 cekzfed c1a51b3l cuvaji7 c1ac9o39`}>
{`#${collectionItem_5?.["Florida Bar Number"]}`}
</DialogDescription>
</Box>
<div
className={`w-element cp94bc7 cuee1l7 cjyih89 c1ffen0s c14nvc9f c1w1qug2 ccvkxs1 c1osswck c1anfr66 c1cw3c2u`}>
{(!!collectionItem_5?.Photo?.[0]?.path) &&
<Image
loading={"lazy"}
src={`${nocodbUrl}/${collectionItem_5?.Photo?.[0]?.path}`}
width={250}
className={`w-image caat7iu cbi2tca c4cvase ce2l3ae cj4bx45`} />
}
<div
className={`w-element cp94bc7 c11qwvck c5y8ol8 cuee1l7 cjyih89 c179voey c17ciogo cshrha5 c63nb5x c1rowsjp c170zl34`}>
{(!!collectionItem_5?.["Law Firm"]) &&
<DialogTitle
className={`w-dialog-title c16ua4pw ct40akc c10s1uyq c1ac9o39`}>
{collectionItem_5?.["Law Firm"] ?? ""}
</DialogTitle>
}
{(collectionItem_5?.["Practice Areas"] != "[]") &&
<div
className={`w-element cp94bc7 c11qwvck`}>
<DialogTitle
className={`w-dialog-title c16ua4pw ct40akc c10s1uyq c1ac9o39`}>
{"Areas of Practice"}
</DialogTitle>
{collectionItem_5?.["Practice Areas"] ? collectionItem_5?.["Practice Areas"] : []?.map?.((collectionItem_6: any, index_6: number) =>
<Fragment key={index_6}>
<div
className={`w-element`}>
<div
className={`w-element c9iq2ya c7whuai`}>
{collectionItem_6}
</div>
</div>
</Fragment>
)}
</div>
}
<div
className={`w-element c11qwvck ckrfty5 c1pz3ug`}>
<DialogTitle
className={`w-dialog-title c16ua4pw ct40akc c10s1uyq c1ac9o39`}>
{"Contact"}
</DialogTitle>
{(!!collectionItem_5?.["Work Phone Number"]) &&
<div
className={`w-element c16owjvy c1ffen0s ckrfty5 c1pz3ug cp94bc7 c9iq2ya c7whuai cak8cqz c1ctgd3q`}>
<div
className={`w-element c1e2v4we`}>
{"Phone"}
</div>
<HtmlEmbed
code={collectionItem_5?.["Work Phone Number"] ? `<a href=\"tel:+1${collectionItem_5?.["Work Phone Number"]}\"> ${collectionItem_5?.["Work Phone Number"]} </a>` : "<span></span>"}
className={`w-html-embed`} />
</div>
}
{(!!collectionItem_5?.["Work Email"]) &&
<div
className={`w-element cp94bc7 c16owjvy c1ffen0s ckrfty5 c1pz3ug c9iq2ya c7whuai cak8cqz c1ctgd3q`}>
<div
className={`w-element c1e2v4we`}>
{"Email"}
</div>
<HtmlEmbed
code={collectionItem_5?.["Work Email"] ? `<a href=\"mailto: ${collectionItem_5?.["Work Email"]}\"> ${collectionItem_5?.["Work Email"]} </a>` : "<span></span>"}
className={`w-html-embed`} />
</div>
}
{(!!collectionItem_5?.Website) &&
<div
className={`w-element cp94bc7 c16owjvy c1ffen0s ckrfty5 c1pz3ug c9iq2ya c7whuai cak8cqz c1ctgd3q`}>
<div
className={`w-element c1e2v4we`}>
{"Website"}
</div>
<HtmlEmbed
code={collectionItem_5?.Website ? collectionItem_5?.Website : "<span></span>"}
className={`w-html-embed`} />
</div>
}
</div>
</div>
</div>
<DialogClose
type={"button"}
className={`w-close-button cvdqajt clofhkt c146cn12 c165ktzb c1rzzbtz c76x5wd cvrfs8q c1r57s1o cp94bc7 c14nvc9f c5y8ol8 c1h04jdi c1afxoij cu2b2wk cl7q148 cnwqdju cng60o0 c5p04gk`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"25%\" d=\"M12.5 3 3 12.5M3 3l9.5 9.5\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</DialogContent>
</DialogOverlay>
</Dialog>
</Fragment>
)}
</div>
</div>
</div>
</search>
</div>
</div>
</Box>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
</Body>
}
export { Page }

View File

@@ -0,0 +1,78 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
let nocodbUrl = "https://db.jamericanbar.com"
let nocodbEventsId = "m9sedens109pyru"
let nocodbEventsPastViewId = "vwzf6qcozmu9fpwq"
let nocodbToken = "w12xFAvVnpckAU0KTJWaGV3oN1KS96tINZlzI26I"
let nocodbEventsUpcomingViewId = "vw15o7vweo38aknc"
const nodobPastEventsData_1: ResourceRequest = {
name: "nodobPastEventsData",
url: `${nocodbUrl}/api/v2/tables/${nocodbEventsId}/records`,
searchParams: [
{ name: "viewId", value: nocodbEventsPastViewId },
{ name: "offset", value: "0" },
{ name: "limit", value: "3" },
],
method: "get",
headers: [
{ name: "xc-token", value: nocodbToken },
],
}
const nocodbUpcomingEventsData_1: ResourceRequest = {
name: "nocodbUpcomingEventsData",
url: `${nocodbUrl}/api/v2/tables/${nocodbEventsId}/records`,
searchParams: [
{ name: "viewId", value: nocodbEventsUpcomingViewId },
{ name: "offset", value: "0" },
{ name: "limit", value: "3" },
],
method: "get",
headers: [
{ name: "xc-token", value: nocodbToken },
],
}
const _data = new Map<string, ResourceRequest>([
["nodobPastEventsData_1", nodobPastEventsData_1],
["nocodbUpcomingEventsData_1", nocodbUpcomingEventsData_1],
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Untitled",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: undefined,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

600
app/__generated__/[events]._index.tsx generated Normal file
View File

@@ -0,0 +1,600 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem } from "@webstudio-is/sdk-components-react";
import { Link as Link, RemixForm as RemixForm, Link as Link_1, Body as Body } from "@webstudio-is/sdk-components-react-router";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
[]
const Page = (_props: { system: any; }) => {
let [nocodbUrl, set$nocodbUrl] = useVariableState<any>("https://db.jamericanbar.com")
let nocodbUpcomingEventsData = useResource("nocodbUpcomingEventsData_1")
let nodobPastEventsData = useResource("nodobPastEventsData_1")
return <Body
className={`w-element c1ubzs3e cp94bc7 c11qwvck c1h1ripk ccvkxs1 c1osswck`}>
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<section
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8 c1p0qmmc c1o9shyq`}>
<aside
className={`w-element c1tx9axw cmcqh3e c1u9ne5p cbi2tca cabe1ql c185odjx cr2i47u c1vjuu35 cje4x0y c1bo5jx8 cxdq3ig cn8yiau c16mh63m`}>
<HtmlEmbed
code={"<iframe width=\"100%\" height=\"20\" scrolling=\"no\" frameborder=\"no\" allow=\"autoplay\" src=\"https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/soundcloud%253Atracks%253A51110912&amp;color=%23ff5500&amp;auto_play=true&amp;hide_related=true&amp;show_comments=false&amp;show_user=false&amp;show_reposts=false&amp;show_teaser=false&amp;visual=false\"></iframe><div style=\"font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;\"><a href=\"https://soundcloud.com/houseofreggae-1/tarrus-riley-shes-royal\" title=\"Tarrus Riley - She's Royal\" target=\"_blank\" style=\"color: #cccccc; text-decoration: none;\">Tarrus Riley - She's Royal</a></div>"}
className={`w-html-embed`} />
</aside>
<h2
className={`w-element c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
<span
className={`w-element co5mmtv`}>
{"JABA "}
</span>
<span
className={`w-element`}>
{"Events and Calendar"}
</span>
</h2>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c14nvc9f c5y8ol8 cuee1l7 cjyih89 c19y7ngt cfyo9g8`}>
<section
className={`w-element`}>
<h3
className={`w-element c16ua4pw c4at5v3 c1xwz85y c1azrkpb c121v773 cuvaji7 c1kgtzp2 cnaga8u`}>
{"Upcoming Events"}
</h3>
<section
className={`w-element cp94bc7 c14nvc9f c5y8ol8 c1ffen0s ckrfty5 c1pz3ug c1dnhfbf`}>
{nocodbUpcomingEventsData?.data?.list?.map?.((collectionItem: any, index: number) =>
<Fragment key={index}>
<Link_1
href={collectionItem?.URL}
target={"_blank"}
className={`w-element c1q3s83n cylme36 c1e6kzco czar1ge c12vpwre cl47yew coi8s2o c3ljc8o`}>
<article
className={`w-element cp94bc7 c11qwvck`}>
<Image
src={`${nocodbUrl}/${collectionItem?.Flyer?.[0]?.path}`}
loading={"eager"}
alt={collectionItem?.Title}
className={`w-image`} />
</article>
</Link_1>
</Fragment>
)}
</section>
</section>
<section
className={`w-element c1h1ripk`}>
<h3
className={`w-element c16ua4pw c4at5v3 c1xwz85y c1azrkpb c121v773 cuvaji7 c1kgtzp2 cnaga8u`}>
{"Past Events"}
</h3>
<section
className={`w-element cp94bc7 c1ffen0s c14nvc9f c5y8ol8 ckrfty5 c1pz3ug c4faval cmty87o`}>
{nodobPastEventsData?.data?.list?.map?.((collectionItem_1: any, index_1: number) =>
<Fragment key={index_1}>
<article
className={`w-element cp94bc7 c11qwvck c128r10o cz5lx9j c5y8ol8 c14nvc9f ckrfty5 c1pz3ug cylme36 c1mymzj4`}>
<Image
src={`${nocodbUrl}/${collectionItem_1?.Flyer?.[0]?.path}`}
loading={"lazy"}
alt={collectionItem_1?.Title}
className={`w-image c1h1ripk cr2i47u c1vjuu35 c128r10o c1mymzj4 c1blhk6q`} />
</article>
</Fragment>
)}
</section>
</section>
</div>
</section>
<section
className={`w-element cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 cp94bc7 c1pz3ug ckrfty5 c1d33cxe`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c14nvc9f c5y8ol8 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<h3
className={`w-element c16ua4pw c4at5v3 c1xwz85y c1azrkpb c121v773`}>
{"Calendar"}
</h3>
<HtmlEmbed
executeScriptOnCanvas={false}
code={"<iframe src=\"https://calendar.google.com/calendar/embed?src=d5152b027685a8432cc0700d5fdd8e6c07ca3a5fbcd29f325cc10e63602c0975%40group.calendar.google.com&amp;ctz=America%2FNew_York&amp;mode=Agenda\" style=\"border: 0\" width=\"100%\" height=\"300\" frameborder=\"0\" scrolling=\"no\"></iframe>"}
clientOnly={false}
className={`w-html-embed cylme36 cbi2tca c4cvase ce2l3ae cj4bx45`} />
</div>
</section>
</section>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
</Body>
}
export { Page }

View File

@@ -0,0 +1,45 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
const _data = new Map<string, ResourceRequest>([
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Untitled",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: undefined,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

View File

@@ -0,0 +1,37 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Body as Body } from "@webstudio-is/sdk-components-react-router";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
[]
const Page = (_props: { system: any; }) => {
return <Body
className={`w-element c1ubzs3e cp94bc7 c11qwvck c1h1ripk`} />
}
export { Page }

View File

@@ -0,0 +1,64 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
let ghostUrl = "https://blog.jamericanbar.com"
const system = _props.system
let ghostContentApiKey = "c9014d5d9ceabb1dd08f0ec0a3"
const ghostPost_1: ResourceRequest = {
name: "ghostPost",
url: `${ghostUrl}/ghost/api/content/posts/slug/${system?.params?.slug}?key=${ghostContentApiKey}&include=authors,tags&filter=visibility:public`,
searchParams: [
],
method: "get",
headers: [
{ name: "Accept-Version", value: "v5.0" },
],
}
const _data = new Map<string, ResourceRequest>([
["ghostPost_1", ghostPost_1],
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
let ghostPost = resources.ghostPost_1
return {
title: ghostPost?.data?.posts?.[0]?.["meta_title"] || ghostPost?.data?.posts?.[0]?.title,
description: ghostPost?.data?.posts?.[0]?.["meta_description"] || ghostPost?.data?.posts?.[0]?.["custom_excerpt"] || ghostPost?.data?.posts?.[0]?.excerpt,
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: ghostPost?.data?.posts?.[0]?.["og_image"] || ghostPost?.data?.posts?.[0]?.["feature_image"] || "",
status: ghostPost?.data?.posts?.[0]?.id ? 200 : 404,
redirect: "",
custom: [
{
property: "twitter:card",
content: ghostPost?.data?.posts?.[0]?.["twitter_image"] || "",
},
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

697
app/__generated__/[posts].$slug._index.tsx generated Normal file
View File

@@ -0,0 +1,697 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem, Time as Time } from "@webstudio-is/sdk-components-react";
import { Link as Link, RemixForm as RemixForm, Link as Link_1, Body as Body } from "@webstudio-is/sdk-components-react-router";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
[]
const Page = (_props: { system: any; }) => {
const system = _props.system;
let ghostPost = useResource("ghostPost_1")
return <Body
className={`w-body c1ubzs3e cp94bc7 c11qwvck c1h1ripk`}>
{(ghostPost?.data?.posts?.[0]?.["codeinjection_head"] ? true : false) &&
<HtmlEmbed
code={ghostPost?.data?.posts?.[0]?.["codeinjection_head"]}
className={`w-html-embed`} />
}
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8`}>
<Box
tag={"article"}
className={`w-box`}>
<Box
tag={"header"}
className={`w-box cp94bc7 c11qwvck cic9tor ck30raf`}>
<Heading
data-ws-tag="h2"
className={`w-heading c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
{ghostPost?.data?.posts?.[0]?.title}
</Heading>
<Paragraph
className={`w-paragraph`}>
{ghostPost?.data?.posts?.[0]?.["custom_excerpt"] || ghostPost?.data?.posts?.[0]?.excerpt}
</Paragraph>
<Image
src={ghostPost?.data?.posts?.[0]?.["feature_image"]}
alt={ghostPost?.data?.posts?.[0]?.["feature_image_alt"] ||ghostPost?.data?.posts?.[0]?.["feature_image_caption"] || ""}
loading={"eager"}
className={`w-image`} />
{(ghostPost?.data?.posts?.[0]?.["reading_time"] === 0 ? false : true) &&
<Text
className={`w-text`}>
{`${ghostPost?.data?.posts?.[0]?.["reading_time"]} minutes`}
</Text>
}
<Text
className={`w-text`}>
<Text
tag={"span"}
className={`w-text`}>
{"Published on "}
</Text>
<Time
dateTime={ghostPost?.data?.posts?.[0]?.["published_at"]}
country={"US"}
className={`w-time`} />
</Text>
<Text
className={`w-text`}>
<Text
tag={"span"}
className={`w-text`}>
{"Updated on "}
</Text>
<Time
dateTime={ghostPost?.data?.posts?.[0]?.["updated_at"]}
country={"US"}
className={`w-time`} />
</Text>
</Box>
<HtmlEmbed
code={ghostPost?.data?.posts?.[0]?.html}
className={`w-html-embed c1rvs9wc c1odlskv`}>
</HtmlEmbed>
<Box
tag={"footer"}
className={`w-box`}>
<Box
className={`w-box cp94bc7 cic9tor ck30raf c11qwvck`}>
{(ghostPost?.data?.posts?.[0]?.authors ? true : false) &&
<>
{ghostPost?.data?.posts?.[0]?.authors?.map?.((AuthorItem: any, index: number) =>
<Fragment key={index}>
<Box
className={`w-box cp94bc7 c11qwvck cic9tor ck30raf`}>
{(AuthorItem?.["cover_image"] ? true : false) &&
<Image
src={AuthorItem?.["cover_image"]}
alt={"\"\""}
width={1028}
height={283}
className={`w-image c1nm6kr9 cxxnwk0 cr2i47u c1vjuu35`} />
}
{(AuthorItem?.["profile_image"] ? true : false) &&
<Image
src={AuthorItem?.["profile_image"]}
alt={"Picture of " + AuthorItem?.name}
width={100}
height={100}
className={`w-image`} />
}
<Link
href={`/author/${AuthorItem?.slug}`}
rel={"author"}
className={`w-link`}>
{AuthorItem?.name}
</Link>
{(AuthorItem?.location ? true : false) &&
<Text
className={`w-text`}>
{AuthorItem?.location}
</Text>
}
<Paragraph
className={`w-paragraph c1tmr06v cu32avb`}>
{AuthorItem?.bio}
</Paragraph>
<Box
className={`w-box cp94bc7 c11feuvd c1w7hibd`}>
{(AuthorItem?.website ? true : false) &&
<Link
href={AuthorItem?.website}
target={"_blank"}
className={`w-link c1045rkc`}>
<Slot>
<Fragment_1>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-globe\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"></path><path d=\"M2 12h20\"></path></svg>"}
className={`w-html-embed`} />
</Fragment_1>
</Slot>
</Link>
}
{(AuthorItem?.facebook ? true : false) &&
<Link
href={AuthorItem?.facebook}
target={"_blank"}
className={`w-link c1045rkc`}>
<Slot>
<Fragment_1>
<HtmlEmbed
code={"<svg viewBox=\"200 200 1000 1000\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1200 700c0-276.1-223.9-500-500-500S200 423.9 200 700c0 234.5 161.4 431.2 379.2 485.3V852.8H476.1V700h103.1v-65.8c0-170.2 77-249.1 244.1-249.1 31.7 0 86.3 6.2 108.7 12.4V536c-11.8-1.2-32.3-1.8-57.8-1.8-81.9 0-113.6 31-113.6 111.8v54h163.3l-28.1 152.8H760.6v343.5C1008.1 1166.4 1200 955.6 1200 700z\" style=\"fill:#0866ff\"></path><path d=\"M895.8 852.8 923.9 700H760.6v-54c0-80.8 31.7-111.8 113.6-111.8 25.5 0 46 .6 57.8 1.8V397.5c-22.4-6.2-77-12.4-108.7-12.4-167.1 0-244.1 78.9-244.1 249.1V700H476.1v152.8h103.1v332.5c38.7 9.6 79.1 14.7 120.8 14.7 20.5 0 40.7-1.3 60.6-3.7V852.8z\" style=\"fill:#fff\"></path></svg>"}
className={`w-html-embed`} />
</Fragment_1>
</Slot>
</Link>
}
{(AuthorItem?.twitter ? true : false) &&
<Link
href={"https://x.com/" + AuthorItem?.twitter}
target={"_blank"}
className={`w-link c1045rkc`}>
<Slot>
<Fragment_1>
<HtmlEmbed
code={"<svg viewBox=\"0 0 1200 1227\" width=\"100%\" height=\"100%\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"#000\" d=\"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z\"></path></svg>"}
className={`w-html-embed`} />
</Fragment_1>
</Slot>
</Link>
}
</Box>
</Box>
</Fragment>
)}
</>
}
</Box>
</Box>
<HtmlEmbed
code={`<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "${ghostPost?.data?.posts?.[0]?.title}",
"image": [
"${ghostPost?.data?.posts?.[0]?.["feature_image"]}"
],
"datePublished": "${ghostPost?.data?.posts?.[0]?.["published_at"]}",
"dateModified": "${ghostPost?.data?.posts?.[0]?.["updated_at"]}",
"author": [
{
"@type": "Person",
"name": "${ghostPost?.data?.posts?.[0]?.authors?.[0]?.name}",
"url": "${system?.origin}/author/${ghostPost?.data?.posts?.[0]?.authors?.[0]?.slug}"
}
]
}
</script>`}
className={`w-html-embed`} />
</Box>
</div>
</div>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
{(ghostPost?.data?.posts?.[0]?.["codeinjection_foot"] ? true : false) &&
<HtmlEmbed
code={ghostPost?.data?.posts?.[0]?.["codeinjection_foot"]}
className={`w-html-embed`} />
}
</Body>
}
export { Page }

View File

@@ -0,0 +1,60 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
let ghostUrl = "https://blog.jamericanbar.com"
let ghostContentApiKey = "c9014d5d9ceabb1dd08f0ec0a3"
let postsPerPage = 50
const system = _props.system
const ghostPosts_1: ResourceRequest = {
name: "ghostPosts",
url: `${ghostUrl}/ghost/api/content/posts/?key=${ghostContentApiKey}&include=authors,tags&limit=${postsPerPage}&filter=visibility:public${system?.search?.search ? `%2Btitle:~'${system?.search?.search}'` : ''}${system?.search?.page ? `&page=${system?.search?.page}` : ''}`,
searchParams: [
],
method: "get",
headers: [
{ name: "Accept-Version", value: "v5.0" },
],
}
const _data = new Map<string, ResourceRequest>([
["ghostPosts_1", ghostPosts_1],
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Posts",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: 200,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

666
app/__generated__/[posts]._index.tsx generated Normal file
View File

@@ -0,0 +1,666 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem, Input as Input_1, Time as Time } from "@webstudio-is/sdk-components-react";
import { Link as Link, RemixForm as RemixForm, Link as Link_1, Body as Body, RemixForm as RemixForm_1 } from "@webstudio-is/sdk-components-react-router";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
[]
const Page = (_props: { system: any; }) => {
const system = _props.system;
let ghostPosts = useResource("ghostPosts_1")
return <Body
className={`w-body c1ubzs3e cp94bc7 c11qwvck c1h1ripk`}>
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element`}>
<div
className={`w-element c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c14nvc9f c5y8ol8 ckrfty5 c1pz3ug c19y7ngt cfyo9g8 c1m2i68w c1g8zqet`}>
<Heading
data-ws-tag="h2"
className={`w-heading c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773`}>
{"Blog Posts"}
</Heading>
<RemixForm_1
className={`w-form cr6nhi ckrfty5 c1pz3ug cmkq789 cnkpv2e c1bo5jx8 c1g8zqet`}>
<Input_1
placeholder={"Search..."}
name={"search"}
aria-label={"search blog"}
className={`w-text-input`} />
<Button
type={"submit"}
className={`w-button`}>
{"Search"}
</Button>
</RemixForm_1>
{(// Hide pagination if there is neither a next or previous page.
(ghostPosts?.data?.meta?.pagination?.prev && true || false) || (ghostPosts?.data?.meta?.pagination?.next && true || false)) &&
<Box
tag={"nav"}
aria-label={"pagination navigation"}
className={`w-box`}>
<List
className={`w-list c9e8yd3 c1bu0a5n cp94bc7 cic9tor ck30raf`}>
{(ghostPosts?.data?.meta?.pagination?.prev && true || false) &&
<ListItem
className={`w-list-item`}>
<Link
href={""}
aria-label={"Go to first page"}
aria-current={"false"}
className={`w-link`}>
{"First"}
</Link>
</ListItem>
}
{(ghostPosts?.data?.meta?.pagination?.prev && true || false) &&
<ListItem
className={`w-list-item`}>
<Link
href={// Don't show ?page=1. Using empty string defaults to current path.
+system?.search?.page - 1 == 1 ? '' : `?page=${+system?.search?.page - 1}`
}
aria-label={`Go to previous page, page ${+system?.search?.page - 1}`}
aria-current={"false"}
className={`w-link`}>
{"Previous"}
</Link>
</ListItem>
}
{(ghostPosts?.data?.meta?.pagination?.next && true || false) &&
<ListItem
className={`w-list-item`}>
<Link
href={`?page=${ +(system?.search?.page || 1) + 1 }`
}
aria-label={`Go to next page, page ${+system?.search?.page + 1 || 2}`}
aria-current={"false"}
className={`w-link`}>
{"Next"}
</Link>
</ListItem>
}
</List>
</Box>
}
<div
className={`w-element csigh51 ceqrjzt ckrfty5 c1p0qmmc c1o9shyq c1h79tlz c1g8zqet`}>
{ghostPosts?.data?.posts?.map?.((PostItem: any, index: number) =>
<Fragment key={index}>
<Box
tag={"article"}
className={`w-box c1g8zqet cux6fi`}>
<Link
href={"/posts/" + PostItem?.slug}
className={`w-link c1kam8hn c1azrkpb cxpru24 c1wua3z2 cpe76ne cf1ldxz cgzc9qc cp94bc7 c11qwvck ckrfty5 c1pz3ug cs8alyj c1m586b5 cmhsgph c1pwmwca`}>
<Heading
data-ws-tag="h3"
className={`w-heading c16ua4pw c4at5v3 c1xwz85y c1azrkpb c121v773`}>
{PostItem?.title}
</Heading>
<Time
country={"US"}
timeStyle={"short"}
dateTime={PostItem?.["updated_at"]}
className={`w-time cest8h4`} />
<Image
src={PostItem?.["feature_image"]}
alt={PostItem?.["feature_image_alt"] || PostItem?.["feature_image_caption"] || ""}
className={`w-image`} />
<p
className={`w-element`}>
{PostItem?.excerpt}
</p>
</Link>
</Box>
</Fragment>
)}
</div>
{(// Hide pagination if there is neither a next or previous page.
(ghostPosts?.data?.meta?.pagination?.prev && true || false) || (ghostPosts?.data?.meta?.pagination?.next && true || false)) &&
<Box
tag={"nav"}
aria-label={"pagination navigation"}
className={`w-box`}>
<List
className={`w-list c9e8yd3 c1bu0a5n cp94bc7 cic9tor ck30raf`}>
{(ghostPosts?.data?.meta?.pagination?.prev && true || false) &&
<ListItem
className={`w-list-item`}>
<Link
href={""}
aria-label={"Go to first page"}
aria-current={"false"}
className={`w-link`}>
{"First"}
</Link>
</ListItem>
}
{(ghostPosts?.data?.meta?.pagination?.prev && true || false) &&
<ListItem
className={`w-list-item`}>
<Link
href={// Don't show ?page=1. Using empty string defaults to current path.
+system?.search?.page - 1 == 1 ? '' : `?page=${+system?.search?.page - 1}`
}
aria-label={`Go to previous page, page ${+system?.search?.page - 1}`}
aria-current={"false"}
className={`w-link`}>
{"Previous"}
</Link>
</ListItem>
}
{(ghostPosts?.data?.meta?.pagination?.next && true || false) &&
<ListItem
className={`w-list-item`}>
<Link
href={`?page=${ +(system?.search?.page || 1) + 1 }`
}
aria-label={`Go to next page, page ${+system?.search?.page + 1 || 2}`}
aria-current={"false"}
className={`w-link`}>
{"Next"}
</Link>
</ListItem>
}
</List>
</Box>
}
</div>
</div>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
</Body>
}
export { Page }

View File

@@ -0,0 +1,45 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
const _data = new Map<string, ResourceRequest>([
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Untitled",
description: "",
excludePageFromSearch: true,
language: "",
socialImageAssetName: undefined,
socialImageUrl: "",
status: 200,
redirect: "",
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

1320
app/__generated__/[style-guide]._index.tsx generated Normal file

File diff suppressed because it is too large Load Diff

45
app/__generated__/_index.server.tsx generated Normal file
View File

@@ -0,0 +1,45 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import type { PageMeta } from "@webstudio-is/sdk";
import type { System, ResourceRequest } from "@webstudio-is/sdk";
export const getResources = (_props: { system: System }) => {
const _data = new Map<string, ResourceRequest>([
])
const _action = new Map<string, ResourceRequest>([
])
return { data: _data, action: _action }
}
export const getPageMeta = ({
system,
resources,
}: {
system: System;
resources: Record<string, any>;
}): PageMeta => {
return {
title: "Home",
description: undefined,
excludePageFromSearch: undefined,
language: undefined,
socialImageAssetName: undefined,
socialImageUrl: undefined,
status: undefined,
redirect: undefined,
custom: [
],
};
};
type Params = Record<string, string | undefined>;
export const getRemixParams = ({ ...params }: Params): Params => {
return params
}
export const contactEmail = "sheckeem@gmail.com";

674
app/__generated__/_index.tsx generated Normal file
View File

@@ -0,0 +1,674 @@
/* eslint-disable */
/* This is a auto generated file for building the project */
import { Fragment, useState } from "react";
import { useResource, useVariableState } from "@webstudio-is/react-sdk/runtime";
import { Body as Body, Link as Link, RemixForm as RemixForm, Link as Link_1 } from "@webstudio-is/sdk-components-react-router";
import { Fragment as Fragment_1, Image as Image, Box as Box, HtmlEmbed as HtmlEmbed, Input as Input, Textarea as Textarea, Heading as Heading, Paragraph as Paragraph, Slot as Slot, Text as Text, Button as Button, List as List, ListItem as ListItem } from "@webstudio-is/sdk-components-react";
import { NavigationMenu as NavigationMenu, NavigationMenuList as NavigationMenuList, NavigationMenuItem as NavigationMenuItem, NavigationMenuTrigger as NavigationMenuTrigger, NavigationMenuContent as NavigationMenuContent, NavigationMenuViewport as NavigationMenuViewport, Dialog as Dialog, DialogTrigger as DialogTrigger, DialogOverlay as DialogOverlay, DialogContent as DialogContent, DialogClose as DialogClose } from "@webstudio-is/sdk-components-react-radix";
export const projectId = "cd046e79-00be-4be9-bd00-4da4d3620900";
export const lastPublished = "2025-10-08T21:20:14.959Z";
export const siteName = "JABA";
export const breakpoints = [{"id":"swo9hJQ2rH783rfZM7iyg"},{"id":"XLq5KcfN9lH3mbT3NuZOG","maxWidth":991},{"id":"s3VhMEwH5kv5Khp4zSeb3","maxWidth":767},{"id":"wplJ3Xqu0KIot5PbJTH-E","maxWidth":479}];
export const favIconAsset: string | undefined =
"jaba_5QOC3c3LtpsinL7LWKF1X.png";
// Font assets on current page (can be preloaded)
export const pageFontAssets: string[] =
[]
export const pageBackgroundImageAssets: string[] =
["jamaican-court-beach_vVvcsQR2wd8YHayhZ0lRu.jpg"]
export const CustomCode = () => {
return (<></>);
}
const Page = (_props: { system: any; }) => {
return <Body
className={`w-body c1ubzs3e cp94bc7 c11qwvck c1h1ripk`}>
<Slot>
<Fragment_1>
<Box
tag={"header"}
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a csigh51 c11qwvck c14nvc9f c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c17f47ak c1j44swm c1m10k9x ccf9zl4 chhkvxo c1azrkpb c16ia0hd c1ll5duv c1i1lfp9 cdk5g5w c195yron ccvkxs1 c1osswck c1anfr66 cqb29gh c16gl1yk c1bo5jx8`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<Box
tag={"nav"}
aria-label={"main"}
className={`w-box cp94bc7 c14nvc9f c5y8ol8 c179voey c17ciogo c1e2v4we`}>
<NavigationMenu
className={`w-navigation-menu c1ubzs3e`}>
<NavigationMenuList
className={`w-menu-list cp94bc7 c179voey c4vpzrb c6zah2w c9e8yd3 c14nvc9f c1n66h91 cuee1l7 cjyih89 cuvaji7 c1evld32 cbr2lzh c1j6vjaw c3cufv3`}>
<NavigationMenuItem
data-ws-index="0"
className={`w-menu-item`}>
<Link
href={"/"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckrfty5 c1pz3ug c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Home"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="1"
className={`w-menu-item`}>
<NavigationMenuTrigger>
<Button
type={"button"}
className={`w-button c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
<Text
className={`w-text`}>
{"About"}
</Text>
<Box
className={`w-box cbcsznr c1fvnzwb c17ciogo c10jsqm6 ch651t9 cnh9zwl cdeqnqk c1o2idp6 cl47yew coi8s2o`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M4.04 6.284a.65.65 0 0 1 .92.001L8 9.335l3.04-3.05a.65.65 0 1 1 .921.918l-3.5 3.512a.65.65 0 0 1-.921 0L4.039 7.203a.65.65 0 0 1 .001-.92Z\"></path></svg>"}
className={`w-html-embed`} />
</Box>
</Button>
</NavigationMenuTrigger>
<NavigationMenuContent
className={`w-menu-content c1suz4cl c1rn8w0x c1yrt8e6 cp94bc7 ckrfty5 c1pz3ug cvdqajt c1i6zfw6`}>
<Box
className={`w-box cp94bc7 c11qwvck c5y8ol8`}>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"About Us"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Learn more about JABA"}
</Text>
</Box>
</Link>
<Link
href={"/about"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Our Officers"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"The faces behind JABA"}
</Text>
</Box>
</Link>
<Link
href={"/membership"}
className={`w-link c1azrkpb cr6nhi cpm0cw4 c14gwly4 cep9jsb ca407w7 c1hi01pd c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug cbi2tca c4cvase ce2l3ae cj4bx45 c1g4qy8c c1ugw873 c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n c1auokji cmhsgph c1pwmwca`}>
<Box
className={`w-box cmz4wiy c5l8r0o cudt6g5 cta1o7q c1g7jxqz c14ib7ie cl47yew coi8s2o c1x53puq`}>
<HtmlEmbed
code={"<svg data-slot=\"icon\" width=\"100%\" height=\"100%\" fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path clip-rule=\"evenodd\" fill-rule=\"evenodd\" d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"></path>\n</svg>"}
className={`w-html-embed cudt6g5`} />
</Box>
<Box
className={`w-box cp94bc7 c11qwvck c16x1j9j c10y43wr cshrha5`}>
<Text
tag={"span"}
className={`w-text cop5kpr`}>
{"Membership"}
</Text>
<Text
tag={"span"}
className={`w-text cyf38ds`}>
{"Become a part of JABA"}
</Text>
</Box>
</Link>
</Box>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="2"
className={`w-menu-item`}>
<Link
href={"/directory"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Directory"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="3"
className={`w-menu-item`}>
<Link
href={"/events"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Events"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="4"
className={`w-menu-item`}>
<Link
href={"/posts"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Blog"}
</Link>
</NavigationMenuItem>
<NavigationMenuItem
data-ws-index="5"
className={`w-menu-item`}>
<Link
href={"/contact"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Contact"}
</Link>
</NavigationMenuItem>
</NavigationMenuList>
<Box
className={`w-box cvdqajt c1suz4cl c1482koa cp94bc7 c5y8ol8 cr2i47u c1vjuu35 c1es0oo c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<NavigationMenuViewport
data-ani={"zoom"}
className={`w-menu-viewport chhkvxo cv70um3 c1krdi0x cw2tl0j cjsgen cz8502n cc8vilp c1is9q5b c1a3m1cq c19nzjc2 c8wi3wz c1gr84d3 c1u2qfgv cf1ldxz cgzc9qc c9744wg`} />
</Box>
</NavigationMenu>
</Box>
<Box
className={`w-box cu2htt c1e2v4we c11hgkbs`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box c11p0ra5 c11ggplq`}>
<Dialog>
<DialogTrigger>
<Button
aria-label={"Open mobile menu"}
type={"button"}
className={`w-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" d=\"M2 5.998a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Zm0 5.5a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed c3515xc`} />
</Button>
</DialogTrigger>
<DialogOverlay
data-ani={"fade"}
className={`w-dialog-overlay c11qwvck casxu0o c1egiu5b cxxgnwv c1o9z5do cu9kinz cwv41j1 chaa35t c1lxxf4w c16ia0hd c1qp6ibo ctppodp`}>
<DialogContent
className={`w-dialog-content c179voey c16ia0hd cmf00e9 c1mvheoa c1qp6ibo c11nhyme ctm20vw cu19b52 cniki9z c1ulghb5 c1cx47mp`}>
<Box
className={`w-box c16ia0hd cdk5g5w c1i1lfp9`}>
<Slot>
<Fragment_1>
<Link
aria-label={"Home"}
href={"/"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f cp1b2ho c1kam8hn c14u70xt c4at5v3 c15k4kgt c152vem5 cp195w1 cb7fen3 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c16nfxdh c1icskyl cak8cqz c15l0co c1bo5jx8 c3515xc`}>
<Image
loading={"eager"}
alt={"Jamaican-American Bar Association logo"}
src={"/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png"}
width={1847}
height={804}
className={`w-image cpi4eeb car8ccq cii82tr c1nax5i6 c1020k27 c1mj5urp chrscrk c1icv2b1 c1ybndks c1q3s83n cxxnwk0 c4at5v3 ctwp5pr c3515xc c16gl1yk c1sj139o`} />
<h1
className={`w-element c1q3s83n c12idy5m c1jiwk9l c10s2wjq csokkn5 ctw8w6h cxat32q c1mb86gx cf1ldxz cgzc9qc cwjf9lc c1wv9bnt czj84j4 c9ho4ea cvdqajt ca3rfpn co5mmtv c3ypv9r coccgs1 c3515xc c1e50ecq ce68ypr cs1bb47 cl8u0cp c1k6o9m5 c1kzhat4 cu7uckz`}>
{"Jamaican-American"}
{""}
<br />
{""}
{"Bar Association"}
</h1>
</Link>
</Fragment_1>
</Slot>
<DialogClose
aria-label={"Close mobile menu"}
className={`w-close-button c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca c18wv9od c3d1pk2 c1vkziqd c15azqme c19qqyx4 c1p5x6fa clfrlpt cpy412x c1m9aaeh cmmpmn5 c1ea6o8f`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"currentColor\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"M13.566 2.434a.8.8 0 0 1 0 1.132L9.13 8l4.435 4.434a.8.8 0 0 1-1.132 1.132L8 9.13l-4.434 4.435a.8.8 0 0 1-1.132-1.132L6.87 8 2.434 3.566a.8.8 0 0 1 1.132-1.132L8 6.87l4.434-4.435a.8.8 0 0 1 1.132 0Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed`} />
</DialogClose>
</Box>
<Box
tag={"nav"}
aria-label={"Main mobile"}
className={`w-box c16ia0hd c1i1lfp9 cfb1oin c1cazll0 c1qp6ibo`}>
<List
className={`w-list c16ia0hd c1qp6ibo c9ptsut c1t25riy czwwn63 c19wou1l clg0fmv`}>
<ListItem
className={`w-list-item`}>
<Link
href={"/about"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"About"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/directory"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Directory"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/events"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Events"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/posts"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Blog"}
</Link>
</ListItem>
<ListItem
className={`w-list-item`}>
<Link
href={"/contact"}
className={`w-link co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"Contact"}
</Link>
</ListItem>
</List>
</Box>
<Box
className={`w-box c1594yno`}>
<Slot>
<Fragment_1>
<Box
className={`w-box c3515xc`}>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join"}
</Link>
</Box>
</Fragment_1>
</Slot>
</Box>
</DialogContent>
</DialogOverlay>
</Dialog>
</Box>
</Box>
</Fragment_1>
</Slot>
<Box
tag={"section"}
className={`w-box cev7kqs cmixsed ciq35c8 c1refzia c1em5py7 c1dgxli2 c2w1he5`}>
<Box
tag={"section"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 ce3yfwr c1ip2wof`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 ckrfty5 c1pz3ug c19y7ngt cfyo9g8 c16gl1yk`}>
<Box
className={`w-box cp94bc7 c11qwvck c1pz3ug ckrfty5 c16x1j9j c1w1qug2 cuvaji7 c1g0t9t c1i1lfp9 cfb1oin`}>
<Heading
data-ws-tag="h2"
className={`w-heading c10008kv c4at5v3 c121v773 c1xwz85y c1rz0k38 c12tmtvk c1sv0lht c1u50ns2 c16gl1yk cqu8ld0`}>
{"Empowering "}
{""}
<br />
{""}
{"Jamaican-American"}
{""}
<br />
{""}
{"Attorneys"}
</Heading>
<Paragraph
className={`w-paragraph cqljrm0 c1v201fq c1g0t9t c4at5v3 c1sv0lht c1u50ns2 c16gl1yk`}>
{"Advancing professional interests of aspiring lawyers since 2007 in Miami, Florida."}
</Paragraph>
<Link
className={`w-link c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Join JABA"}
</Link>
</Box>
</Box>
</Box>
</Box>
<Box
tag={"section"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c14nvc9f c5y8ol8 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box cp94bc7 c11qwvck cjyih89 cuee1l7 c14nvc9f c1w1qug2 cuvaji7`}>
<Heading
tag={"h2"}
className={`w-heading c18zze6k c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1rz0k38 c1u50ns2 c16gl1yk`}>
{"Empowering Attorneys"}
</Heading>
<Paragraph
className={`w-paragraph cqljrm0 c1v201fq cyf38ds c1u50ns2 c16gl1yk`}>
{"Supporting Jamaican-Americans in their legal careers and professional growth within the legal community."}
</Paragraph>
</Box>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 cxwl284 c1j44swm c13hs91d c16ia0hd c1qp6ibo c1q0mvgc c1vttvxe`}>
<Box
className={`w-box c11qwvck c16owjvy c1yac48r c63pj4z co6l97s cb1yxpz c3s07sa cp94bc7 ckrfty5 c1pz3ug cctlk77 c9ort0q c1xgc15y c1eyvkpq`}>
<Box
className={`w-box c14nvc9f c1w1qug2 c1ffen0s cp94bc7 ckrfty5 c1pz3ug`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M320 64C355.3 64 384 92.7 384 128C384 163.3 355.3 192 320 192C284.7 192 256 163.3 256 128C256 92.7 284.7 64 320 64zM416 376C416 401 403.3 423 384 435.9L384 528C384 554.5 362.5 576 336 576L304 576C277.5 576 256 554.5 256 528L256 435.9C236.7 423 224 401 224 376L224 336C224 283 267 240 320 240C373 240 416 283 416 336L416 376zM160 96C190.9 96 216 121.1 216 152C216 182.9 190.9 208 160 208C129.1 208 104 182.9 104 152C104 121.1 129.1 96 160 96zM176 336L176 368C176 400.5 188.1 430.1 208 452.7L208 528C208 529.2 208 530.5 208.1 531.7C199.6 539.3 188.4 544 176 544L144 544C117.5 544 96 522.5 96 496L96 439.4C76.9 428.4 64 407.7 64 384L64 352C64 299 107 256 160 256C172.7 256 184.8 258.5 195.9 262.9C183.3 284.3 176 309.3 176 336zM432 528L432 452.7C451.9 430.2 464 400.5 464 368L464 336C464 309.3 456.7 284.4 444.1 262.9C455.2 258.4 467.3 256 480 256C533 256 576 299 576 352L576 384C576 407.7 563.1 428.4 544 439.4L544 496C544 522.5 522.5 544 496 544L464 544C451.7 544 440.4 539.4 431.9 531.7C431.9 530.5 432 529.2 432 528zM480 96C510.9 96 536 121.1 536 152C536 182.9 510.9 208 480 208C449.1 208 424 182.9 424 152C424 121.1 449.1 96 480 96z\"/></svg>"}
className={`w-html-embed cc3pgtt c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
<Heading
tag={"h3"}
className={`w-heading`}>
{"Networking"}
</Heading>
</Box>
<Box
className={`w-box c1pz3ug ckrfty5`}>
<Paragraph
className={`w-paragraph`}>
{"Fostering community among Jamaican-American legal professionals and students."}
</Paragraph>
</Box>
<div
className={`w-element`} />
</Box>
<Box
className={`w-box c11qwvck c16owjvy c1yac48r c63pj4z co6l97s cb1yxpz c3s07sa cp94bc7 ckrfty5 c1pz3ug cp3dv0p cs7jf99 cf62oqr c9ort0q c1xgc15y c1eyvkpq`}>
<Box
className={`w-box c14nvc9f c1w1qug2 c1ffen0s cp94bc7 ckrfty5 c1pz3ug`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M201.6 217.4L182.9 198.7C170.4 186.2 170.4 165.9 182.9 153.4L297.6 38.6C310.1 26.1 330.4 26.1 342.9 38.6L361.6 57.4C374.1 69.9 374.1 90.2 361.6 102.7L246.9 217.4C234.4 229.9 214.1 229.9 201.6 217.4zM308 275.7L276.6 244.3L388.6 132.3L508 251.7L396 363.7L364.6 332.3L132.6 564.3C117 579.9 91.7 579.9 76 564.3C60.3 548.7 60.4 523.4 76 507.7L308 275.7zM422.9 438.6C410.4 426.1 410.4 405.8 422.9 393.3L537.6 278.6C550.1 266.1 570.4 266.1 582.9 278.6L601.6 297.3C614.1 309.8 614.1 330.1 601.6 342.6L486.9 457.4C474.4 469.9 454.1 469.9 441.6 457.4L422.9 438.7z\"/></svg>"}
className={`w-html-embed cc3pgtt c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
<Heading
tag={"h3"}
className={`w-heading`}>
{"Career Development"}
</Heading>
</Box>
<Box
className={`w-box c1pz3ug ckrfty5`}>
<Paragraph
className={`w-paragraph`}>
{"Access resources, mentorship, and guidance to enhance your legal skills and advance your career prospects."}
</Paragraph>
</Box>
<div
className={`w-element`} />
</Box>
<Box
className={`w-box c11qwvck c16owjvy c1yac48r c63pj4z co6l97s cb1yxpz c3s07sa cp94bc7 ckrfty5 c1pz3ug cp3dv0p cs7jf99 cf62oqr c9ort0q c1xgc15y c1eyvkpq`}>
<Box
className={`w-box c14nvc9f c1w1qug2 c1ffen0s cp94bc7 ckrfty5 c1pz3ug`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M80 259.8L289.2 345.9C299 349.9 309.4 352 320 352C330.6 352 341 349.9 350.8 345.9L593.2 246.1C602.2 242.4 608 233.7 608 224C608 214.3 602.2 205.6 593.2 201.9L350.8 102.1C341 98.1 330.6 96 320 96C309.4 96 299 98.1 289.2 102.1L46.8 201.9C37.8 205.6 32 214.3 32 224L32 520C32 533.3 42.7 544 56 544C69.3 544 80 533.3 80 520L80 259.8zM128 331.5L128 448C128 501 214 544 320 544C426 544 512 501 512 448L512 331.4L369.1 390.3C353.5 396.7 336.9 400 320 400C303.1 400 286.5 396.7 270.9 390.3L128 331.4z\"/></svg>"}
className={`w-html-embed cc3pgtt c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
<Heading
tag={"h3"}
className={`w-heading`}>
{"Scholarship"}
</Heading>
</Box>
<Box
className={`w-box c1pz3ug ckrfty5`}>
<Paragraph
className={`w-paragraph`}>
{"Providing financial support for Jamaican-American law students,."}
</Paragraph>
</Box>
<div
className={`w-element`} />
</Box>
<Box
className={`w-box c11qwvck c16owjvy c1yac48r c63pj4z co6l97s cb1yxpz c3s07sa cp94bc7 ckrfty5 c1pz3ug cctlk77 c9ort0q c1xgc15y c1eyvkpq`}>
<Box
className={`w-box c14nvc9f c1w1qug2 c1ffen0s cp94bc7 ckrfty5 c1pz3ug`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M300.9 117.2L184.3 246.8C179.7 251.9 179.9 259.8 184.8 264.7C215.3 295.2 264.8 295.2 295.3 264.7L327.1 232.9C331.3 228.7 336.6 226.4 342 226C348.8 225.4 355.8 227.7 361 232.9L537.6 408L608 352L608 64L496 128L472.2 112.1C456.4 101.6 437.9 96 418.9 96L348.5 96C347.4 96 346.2 96 345.1 96.1C328.2 97 312.3 104.6 300.9 117.2zM148.6 214.7L255.4 96L215.8 96C190.3 96 165.9 106.1 147.9 124.1L32 256L32 608L176 472L188.4 482.3C211.4 501.5 240.4 512 270.3 512L286 512L279 505C269.6 495.6 269.6 480.4 279 471.1C288.4 461.8 303.6 461.7 312.9 471.1L353.9 512.1L362.9 512.1C382 512.1 400.7 507.8 417.7 499.8L391 473C381.6 463.6 381.6 448.4 391 439.1C400.4 429.8 415.6 429.7 424.9 439.1L456.9 471.1L474.4 453.6C483.3 444.7 485.9 431.8 482 420.5L344.1 283.7L329.2 298.6C279.9 347.9 200.1 347.9 150.8 298.6C127.8 275.6 126.9 238.7 148.6 214.6z\"/></svg>"}
className={`w-html-embed cc3pgtt c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
<Heading
tag={"h3"}
className={`w-heading`}>
{"Mentorship"}
</Heading>
</Box>
<Box
className={`w-box c1pz3ug ckrfty5`}>
<Paragraph
className={`w-paragraph`}>
{"Connecting aspiring Jamaican-American attorneys with experienced mentors."}
</Paragraph>
</Box>
<div
className={`w-element`} />
</Box>
</Box>
</Box>
</Box>
<Slot>
<Fragment_1>
<Box
tag={"footer"}
id={"contact"}
className={`w-box cnfbw7d c5023p7 c1ehe8py c1dfhduu c1rbk22j cdl0evl c1em5py7 c1dgxli2 clrd04b c1d33cxe`}>
<Box
className={`w-box c86u3j3 cie66yg c1ubzs3e c1a9y6a cp94bc7 c11qwvck c1lau6ea c1w1qug2 cuee1l7 cjyih89 c19y7ngt cfyo9g8 c16gl1yk c1xw2mm5`}>
<Box
className={`w-box csigh51 cuee1l7 cjyih89 c6ljgs8 c1j44swm c13hs91d c16ia0hd c1qp6ibo`}>
<Box
className={`w-box cp94bc7 c11qwvck ckrfty5 c1pz3ug c14nvc9f c1w1qug2 cuvaji7 c2i79xg c1nfm8zr c3515xc c5x78qw`}>
<Heading
tag={"h2"}
className={`w-heading c16ua4pw c4at5v3 c1azrkpb cuvaji7 c1xwz85y c121v773 c1nfm8zr cu7uckz c3515xc`}>
{"Jamaican-American Bar Association"}
</Heading>
<Paragraph
className={`w-paragraph cxcuod c1nfm8zr c16gl1yk`}>
{"Supporting Jamaican-Americans in legal professions since 2007."}
</Paragraph>
<Slot>
<Fragment_1>
<Box
className={`w-box cp94bc7 ckvl9b1 ctehfbz c1ffen0s c4a2ypq c1kj1yqu c9dprmj c316wu1`}>
<Link
aria-label={"LinkedIn"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cjnp1za c9ksldr`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M24 12.0726C24 5.44354 18.629 0.0725708 12 0.0725708C5.37097 0.0725708 0 5.44354 0 12.0726C0 18.0619 4.38823 23.0264 10.125 23.9274V15.5414H7.07661V12.0726H10.125V9.4287C10.125 6.42144 11.9153 4.76031 14.6574 4.76031C15.9706 4.76031 17.3439 4.99451 17.3439 4.99451V7.94612H15.8303C14.34 7.94612 13.875 8.87128 13.875 9.82015V12.0726H17.2031L16.6708 15.5414H13.875V23.9274C19.6118 23.0264 24 18.0619 24 12.0726Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
<Link
aria-label={"Facebook"}
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c14nvc9f c1w1qug2 ckrfty5 c1pz3ug co0vavx c1h0lsys c11vf0gh c1ohvnd6 c1g4qy8c c15mzzjw c1x53puq c18butzo c2cqiaz cjm7u3n cnahfn caar9ib ckcfqgd c1u1lvxa cyyrqss c1d7162n cmhsgph c1pwmwca cnznce3 cwkmla3`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n<path fill=\"currentColor\" d=\"M12.0027 5.84808C8.59743 5.84808 5.85075 8.59477 5.85075 12C5.85075 15.4053 8.59743 18.1519 12.0027 18.1519C15.4079 18.1519 18.1546 15.4053 18.1546 12C18.1546 8.59477 15.4079 5.84808 12.0027 5.84808ZM12.0027 15.9996C9.80212 15.9996 8.00312 14.2059 8.00312 12C8.00312 9.7941 9.79677 8.00046 12.0027 8.00046C14.2086 8.00046 16.0022 9.7941 16.0022 12C16.0022 14.2059 14.2032 15.9996 12.0027 15.9996ZM19.8412 5.59644C19.8412 6.39421 19.1987 7.03135 18.4062 7.03135C17.6085 7.03135 16.9713 6.38885 16.9713 5.59644C16.9713 4.80402 17.6138 4.16153 18.4062 4.16153C19.1987 4.16153 19.8412 4.80402 19.8412 5.59644ZM23.9157 7.05277C23.8247 5.13063 23.3856 3.42801 21.9775 2.02522C20.5747 0.622429 18.8721 0.183388 16.9499 0.0870135C14.9689 -0.0254238 9.03112 -0.0254238 7.05008 0.0870135C5.1333 0.178034 3.43068 0.617075 2.02253 2.01986C0.614389 3.42265 0.180703 5.12527 0.0843279 7.04742C-0.0281093 9.02845 -0.0281093 14.9662 0.0843279 16.9472C0.175349 18.8694 0.614389 20.572 2.02253 21.9748C3.43068 23.3776 5.12794 23.8166 7.05008 23.913C9.03112 24.0254 14.9689 24.0254 16.9499 23.913C18.8721 23.822 20.5747 23.3829 21.9775 21.9748C23.3803 20.572 23.8193 18.8694 23.9157 16.9472C24.0281 14.9662 24.0281 9.03381 23.9157 7.05277ZM21.3564 19.0728C20.9388 20.1223 20.1303 20.9307 19.0755 21.3537C17.496 21.9802 13.7481 21.8356 12.0027 21.8356C10.2572 21.8356 6.50396 21.9748 4.92984 21.3537C3.88042 20.9361 3.07195 20.1276 2.64897 19.0728C2.02253 17.4934 2.16709 13.7455 2.16709 12C2.16709 10.2546 2.02789 6.50129 2.64897 4.92717C3.06659 3.87776 3.87507 3.06928 4.92984 2.6463C6.50931 2.01986 10.2572 2.16443 12.0027 2.16443C13.7481 2.16443 17.5014 2.02522 19.0755 2.6463C20.1249 3.06392 20.9334 3.8724 21.3564 4.92717C21.9828 6.50665 21.8383 10.2546 21.8383 12C21.8383 13.7455 21.9828 17.4987 21.3564 19.0728Z\"></path>\n</svg>"}
className={`w-html-embed ce6o41f c174r48x c16x1j9j c1w1qug2 c1ffen0s c1q3s83n c1g8gtf5 c1lqkjye`} />
</Link>
</Box>
</Fragment_1>
</Slot>
<div
className={`w-element cest8h4`}>
<p
className={`w-element`}>
<Link_1
href={"tel:+13055103870"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"(305) 510-3870"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"mailto:jabaflorida@gmail.com"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"jabaflorida@gmail.com"}
</Link_1>
</p>
<p
className={`w-element`}>
<Link_1
href={"https://www.google.com/maps/search/?api=1&query=2655+S+Le+Jeune+Rd+%23516,+Coral+Gables,+FL+33134"}
target={"_blank"}
className={`w-element co5mmtv crlmx1q cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1nle8ys cl03jb4 cllrotz c1vd3gd4 c1020k27 c1mj5urp chrscrk camxvmn c18butzo c2cqiaz cjm7u3n c9usqtl cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca`}>
{"2655 Le Jeune Road,"}
{""}
<br />
{""}
{"Suite 516"}
{""}
<br />
{""}
{"Coral Gables, FL 33134"}
</Link_1>
</p>
</div>
</Box>
<Slot>
<Fragment_1>
<RemixForm
method={"post"}
action={"/join-jaba"}
encType={"application/x-www-form-urlencoded"}
className={`w-element cp94bc7 c11qwvck c1pz3ug ckrfty5 cbi2tca c4cvase ce2l3ae cj4bx45 cu2b2wk c7osw9i c2i79xg c3515xc cktg0ak`}>
<h2
className={`w-element cuvaji7 ct40akc co5mmtv c1tmr06v cu32avb cr0mszb`}>
<span
className={`w-element`}>
{"Contact"}
</span>
{" JABA"}
</h2>
<span
className={`w-element c11p0ra5 co5mmtv cuvaji7`}>
{"Thank you for contacting us!"}
</span>
<label
className={`w-element cest8h4`}>
{"Enter your name"}
</label>
<Input
required={true}
placeholder={"John Doe"}
type={"text"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your email"}
</label>
<Input
required={true}
placeholder={"john.doe@example.com"}
type={"email"}
className={`w-element cest8h4 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 cu2b2wk`} />
<label
className={`w-element cest8h4`}>
{"Enter your message"}
</label>
<Textarea
className={`w-element cest8h4 c2gdc4n c9723rb cifeda6 c1q2ynfb c5zts82 c1hw7bli c1qviook c1ooayp8 ct6ibss cd27rhw c17aqieu cimhatq c96mnhx c1fb4zt8 c170w0b1 cgqhfkb c4yjwh8 cu2b2wk`} />
<button
type={"submit"}
className={`w-element c1azrkpb c1m5vcub chn26u6 c1xkkycc c168jv9l c1kam8hn cr6nhi c14nvc9f c5y8ol8 ckvl9b1 ctehfbz cuvaji7 cop5kpr c1kt266e c1n8hmay cvj9ekv c17l1n4d c1avwdii cnllhbg c805ixc clnm6x2 c1q7h7e0 c1h9vaz9 c131xast c1rgqj4g c4jumok c12n63oh ct6ibss cd27rhw c17aqieu cimhatq c18butzo c2cqiaz cmhsgph c1pwmwca`}>
{"Submit"}
</button>
</RemixForm>
</Fragment_1>
</Slot>
</Box>
<Box
className={`w-box cp94bc7 cuee1l7 cjyih89 caj1yiw c3515xc`}>
<Text
className={`w-text c18pznga`}>
{"© 2025 Jamaican-American Bar Association"}
</Text>
<Link
className={`w-link c1azrkpb cr6nhi cj8v905 c1g95t2r ct2xj8x c1bx7adm cza4z8f c128m70s c1kam8hn c1h9vaz9 c131xast c1rgqj4g c4jumok c1020k27 c1mj5urp chrscrk camxvmn cjuaq4b ckvl9b1 ctehfbz c14nvc9f c5y8ol8 cu2b2wk c1wafv83 c18butzo c2cqiaz cjm7u3n cnahfn cuhbpbf c1h828ji c13kitve c1042bxp cmhsgph c1pwmwca c191wtp7`}>
{"Privacy"}
</Link>
</Box>
</Box>
</Box>
</Fragment_1>
</Slot>
<Link_1
href={"https://webstudio.is/?via=badge"}
target={"_blank"}
className={`w-element cr6nhi ct7f5o c7iqi8w c14nvc9f c5y8ol8 c1tx9axw c1c8pz3i ca2loeg c1jiwk9l cjao1l3 c12idy5m co9567w c18cal3a clgyxp2 c1n1m1gm c14u70xt c1fn6urr ct40akc cis096y c2kkhue c1aagc4j ce7t8zb c1kam8hn c1m9543f c419pqj c11t9ipy c11r2nlc c109cg6k`}>
<HtmlEmbed
code={"<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 16 16\" width=\"100%\" height=\"100%\" style=\"display: block;\"><path fill-rule=\"evenodd\" d=\"m12.32 12.416 2.62-8.085a1.205 1.205 0 1 0-2.292-.746l-2.62 8.084a1.205 1.205 0 1 0 2.292.747Z\" clip-rule=\"evenodd\"/><path fill-rule=\"evenodd\" d=\"M8 7.624c.297 0 .517.175.704.394.207.243.373.545.514.866.634 1.44.753 3.241.753 3.241a1.206 1.206 0 0 0 1.285 1.122 1.207 1.207 0 0 0 1.12-1.287s-.16-2.25-.952-4.05C10.744 6.364 9.594 5.208 8 5.208c-1.594 0-2.744 1.156-3.424 2.7-.792 1.8-.951 4.05-.951 4.05a1.207 1.207 0 0 0 1.12 1.288 1.206 1.206 0 0 0 1.284-1.122s.119-1.8.753-3.24a3.52 3.52 0 0 1 .514-.867c.187-.22.406-.394.704-.394Z\" clip-rule=\"evenodd\"/><path fill-rule=\"evenodd\" d=\"M5.973 11.669 3.352 3.585a1.205 1.205 0 1 0-2.293.746l2.622 8.084a1.205 1.205 0 1 0 2.292-.746Z\" clip-rule=\"evenodd\"/></svg>"}
className={`w-html-embed cest8h4 ciabfpg c1y8qwr1 c17ciogo`} />
<div
className={`w-element`}>
{"Built with Webstudio"}
</div>
</Link_1>
</Body>
}
export { Page }

3072
app/__generated__/index.css generated Normal file

File diff suppressed because it is too large Load Diff

35
app/constants.mjs Normal file
View File

@@ -0,0 +1,35 @@
/**
* We use mjs extension as constants in this file is shared with the build script
* and we use `node --eval` to extract the constants.
*/
export const assetBaseUrl = "/assets/";
/**
* URL.canParse(props.src)
* @type {(url: string) => boolean}
*/
const UrlCanParse = (url) => {
try {
new URL(url);
return true;
} catch {
return false;
}
};
/**
* @type {import("@webstudio-is/image").ImageLoader}
*/
export const imageLoader = (props) => {
if (props.format === "raw") {
return props.src;
}
// IPX (sharp) does not support ico
if (props.src.endsWith('.ico')) {
return props.src;
}
// handle absolute urls
const path = UrlCanParse(props.src) ? `/${props.src}` : props.src;
// https://github.com/unjs/ipx?tab=readme-ov-file#modifiers
return `/_image/w_${props.width},q_${props.quality}${path}`;
};

13
app/extension.ts Normal file
View File

@@ -0,0 +1,13 @@
import { ResourceRequest } from "@webstudio-is/sdk";
declare module "react-router" {
interface AppLoadContext {
EXCLUDE_FROM_SEARCH: boolean;
getDefaultActionResource?: (options: {
url: URL;
projectId: string;
contactEmail: string;
formData: FormData;
}) => ResourceRequest;
}
}

39
app/root.tsx Normal file
View File

@@ -0,0 +1,39 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
import { Links, Meta, Outlet, useMatches } from "react-router";
// @todo think about how to make __generated__ typeable
// @ts-ignore
import { CustomCode, projectId, lastPublished } from "./__generated__/_index";
const Root = () => {
// Get language from matches
const matches = useMatches();
const lastMatchWithLanguage = matches.findLast((match) => {
// @ts-ignore
const language = match?.data?.pageMeta?.language;
return language != null;
});
// @ts-ignore
const lang = lastMatchWithLanguage?.data?.pageMeta?.language ?? "en";
return (
<html
lang={lang}
data-ws-project={projectId}
data-ws-last-published={lastPublished}
>
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<Meta />
<Links />
<CustomCode />
</head>
<Outlet />
</html>
);
};
export default Root;

4
app/routes.ts Normal file
View File

@@ -0,0 +1,4 @@
import { type RouteConfig } from "@react-router/dev/routes";
import { flatRoutes } from "@react-router/fs-routes";
export default flatRoutes() satisfies RouteConfig;

24
app/routes/[_image].$.ts Normal file
View File

@@ -0,0 +1,24 @@
import { env } from "node:process";
import type { LoaderFunctionArgs } from "react-router";
import {
createIPX,
createIPXH3Handler,
ipxFSStorage,
ipxHttpStorage,
} from "ipx";
import { createApp, toWebHandler } from "h3";
const domains = env.DOMAINS?.split(/\s*,\s*/) ?? [];
const ipx = createIPX({
storage: ipxFSStorage({ dir: "./public" }),
httpStorage: ipxHttpStorage({ domains }),
});
const handleRequest = toWebHandler(
createApp().use("/_image", createIPXH3Handler(ipx))
);
export const loader = async (args: LoaderFunctionArgs) => {
return handleRequest(args.request);
};

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[about]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[about]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[contact]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[contact]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[directory]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[directory]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[events]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[events]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[membership]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[membership]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[posts].$slug._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[posts].$slug._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[posts]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[posts]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

View File

@@ -0,0 +1,24 @@
import type { LoaderFunctionArgs } from "react-router";
export const loader = (arg: LoaderFunctionArgs) => {
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
return new Response(
`
User-agent: *
Disallow: /api/
Sitemap: https://${host}/sitemap.xml
`,
{
headers: {
"Content-Type": "text/plain",
},
status: 200,
}
);
};

View File

@@ -0,0 +1,34 @@
import type { LoaderFunctionArgs } from "react-router";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
export const loader = (arg: LoaderFunctionArgs) => {
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
const urls = sitemap.map((page) => {
const url = new URL(`https://${host}${page.path}`);
return `
<url>
<loc>${url.href}</loc>
<lastmod>${page.lastModified.split("T")[0]}</lastmod>
</url>
`;
});
return new Response(
`<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urls.join("")}
</urlset>
`,
{
headers: {
"Content-Type": "application/xml",
},
status: 200,
}
);
};

View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/[style-guide]._index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/[style-guide]._index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

295
app/routes/_index.tsx Normal file
View File

@@ -0,0 +1,295 @@
import {
type MetaFunction,
type LinksFunction,
type LinkDescriptor,
type ActionFunctionArgs,
type LoaderFunctionArgs,
type HeadersFunction,
data,
redirect,
useLoaderData,
} from "react-router";
import {
isLocalResource,
loadResource,
loadResources,
formIdFieldName,
formBotFieldName,
cachedFetch,
} from "@webstudio-is/sdk/runtime";
import {
ReactSdkContext,
PageSettingsMeta,
PageSettingsTitle,
} from "@webstudio-is/react-sdk/runtime";
import {
projectId,
Page,
siteName,
favIconAsset,
pageFontAssets,
pageBackgroundImageAssets,
breakpoints,
} from "../__generated__/_index";
import {
getResources,
getPageMeta,
getRemixParams,
contactEmail,
} from "../__generated__/_index.server";
import * as constants from "../constants.mjs";
import css from "../__generated__/index.css?url";
import { sitemap } from "../__generated__/$resources.sitemap.xml";
const customFetch: typeof fetch = (input, init) => {
if (typeof input !== "string") {
return cachedFetch(projectId, input, init);
}
if (isLocalResource(input, "sitemap.xml")) {
// @todo: dynamic import sitemap ???
const response = new Response(JSON.stringify(sitemap));
response.headers.set("content-type", "application/json; charset=utf-8");
return Promise.resolve(response);
}
return cachedFetch(projectId, input, init);
};
export const loader = async (arg: LoaderFunctionArgs) => {
const url = new URL(arg.request.url);
const host =
arg.request.headers.get("x-forwarded-host") ||
arg.request.headers.get("host") ||
"";
url.host = host;
url.protocol = "https";
const params = getRemixParams(arg.params);
const system = {
params,
search: Object.fromEntries(url.searchParams),
origin: url.origin,
};
const resources = await loadResources(
customFetch,
getResources({ system }).data
);
const pageMeta = getPageMeta({ system, resources });
if (pageMeta.redirect) {
const status =
pageMeta.status === 301 || pageMeta.status === 302
? pageMeta.status
: 302;
throw redirect(pageMeta.redirect, status);
}
// typecheck
arg.context.EXCLUDE_FROM_SEARCH satisfies boolean;
if (arg.context.EXCLUDE_FROM_SEARCH) {
pageMeta.excludePageFromSearch = arg.context.EXCLUDE_FROM_SEARCH;
}
return data(
{
host,
url: url.href,
system,
resources,
pageMeta,
},
// No way for current information to change, so add cache for 10 minutes
// In case of CRM Data, this should be set to 0
{
status: pageMeta.status,
headers: {
"Cache-Control": "public, max-age=600",
},
}
);
};
export const headers: HeadersFunction = () => {
return {
"Cache-Control": "public, max-age=0, must-revalidate",
};
};
export const meta: MetaFunction<typeof loader> = ({ data }) => {
const metas: ReturnType<MetaFunction> = [];
if (data === undefined) {
return metas;
}
const origin = `https://${data.host}`;
if (siteName) {
metas.push({
"script:ld+json": {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
url: origin,
},
});
}
return metas;
};
export const links: LinksFunction = () => {
const result: LinkDescriptor[] = [];
result.push({
rel: "stylesheet",
href: css,
});
if (favIconAsset) {
result.push({
rel: "icon",
href: constants.imageLoader({
src: `${constants.assetBaseUrl}${favIconAsset}`,
// width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
width: 144,
height: 144,
fit: "pad",
quality: 100,
format: "auto",
}),
type: undefined,
});
}
for (const asset of pageFontAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${asset}`,
as: "font",
crossOrigin: "anonymous",
});
}
for (const backgroundImageAsset of pageBackgroundImageAssets) {
result.push({
rel: "preload",
href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
as: "image",
});
}
return result;
};
const getRequestHost = (request: Request): string =>
request.headers.get("x-forwarded-host") || request.headers.get("host") || "";
export const action = async ({
request,
context,
}: ActionFunctionArgs): Promise<
{ success: true } | { success: false; errors: string[] }
> => {
try {
const url = new URL(request.url);
url.host = getRequestHost(request);
const formData = await request.formData();
const system = {
params: {},
search: {},
origin: url.origin,
};
const resourceName = formData.get(formIdFieldName);
let resource =
typeof resourceName === "string"
? getResources({ system }).action.get(resourceName)
: undefined;
const formBotValue = formData.get(formBotFieldName);
if (formBotValue == null || typeof formBotValue !== "string") {
throw new Error("Form bot field not found");
}
const submitTime = parseInt(formBotValue, 16);
// Assumes that the difference between the server time and the form submission time,
// including any client-server time drift, is within a 5-minute range.
// Note: submitTime might be NaN because formBotValue can be any string used for logging purposes.
// Example: `formBotValue: jsdom`, or `formBotValue: headless-env`
if (
Number.isNaN(submitTime) ||
Math.abs(Date.now() - submitTime) > 1000 * 60 * 5
) {
throw new Error(`Form bot value invalid ${formBotValue}`);
}
formData.delete(formIdFieldName);
formData.delete(formBotFieldName);
if (resource) {
resource.body = Object.fromEntries(formData);
} else {
if (contactEmail === undefined) {
throw new Error("Contact email not found");
}
resource = context.getDefaultActionResource?.({
url,
projectId,
contactEmail,
formData,
});
}
if (resource === undefined) {
throw Error("Resource not found");
}
const { ok, statusText } = await loadResource(fetch, resource);
if (ok) {
return { success: true };
}
return { success: false, errors: [statusText] };
} catch (error) {
console.error(error);
return {
success: false,
errors: [error instanceof Error ? error.message : "Unknown error"],
};
}
};
const Outlet = () => {
const { system, resources, url, pageMeta, host } =
useLoaderData<typeof loader>();
return (
<ReactSdkContext.Provider
value={{
...constants,
resources,
breakpoints,
onError: console.error,
}}
>
{/* Use the URL as the key to force scripts in HTML Embed to reload on dynamic pages */}
<Page key={url} system={system} />
<PageSettingsMeta
url={url}
pageMeta={pageMeta}
host={host}
siteName={siteName}
imageLoader={constants.imageLoader}
assetBaseUrl={constants.assetBaseUrl}
/>
<PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
</ReactSdkContext.Provider>
);
};
export default Outlet;

11031
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

39
package.json Normal file
View File

@@ -0,0 +1,39 @@
{
"type": "module",
"private": true,
"sideEffects": false,
"scripts": {
"build": "react-router build",
"dev": "react-router dev",
"typecheck": "tsc",
"start": "react-router-serve ./build/server/index.js"
},
"dependencies": {
"@react-router/dev": "^7.5.3",
"@react-router/fs-routes": "^7.5.3",
"@webstudio-is/image": "0.230.0",
"@webstudio-is/react-sdk": "0.230.0",
"@webstudio-is/sdk": "0.230.0",
"@webstudio-is/sdk-components-animation": "0.230.0",
"@webstudio-is/sdk-components-react-radix": "0.230.0",
"@webstudio-is/sdk-components-react-router": "0.230.0",
"@webstudio-is/sdk-components-react": "0.230.0",
"isbot": "^5.1.25",
"react": "18.3.0-canary-14898b6a9-20240318",
"react-dom": "18.3.0-canary-14898b6a9-20240318",
"react-router": "^7.5.3",
"vite": "^6.3.4",
"@react-router/node": "^7.5.3",
"@react-router/serve": "^7.5.3",
"h3": "^1.15.1",
"ipx": "^3.0.3"
},
"devDependencies": {
"@types/react": "^18.2.70",
"@types/react-dom": "^18.2.25",
"typescript": "5.8.2"
},
"engines": {
"node": ">=20.0.0"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

29
tsconfig.json Normal file
View File

@@ -0,0 +1,29 @@
{
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.mjs"
],
"compilerOptions": {
"lib": [
"DOM",
"DOM.Iterable",
"ESNext"
],
"types": [
"vite/client",
"@webstudio-is/react-sdk/placeholder"
],
"isolatedModules": true,
"esModuleInterop": true,
"jsx": "react-jsx",
"module": "ESNext",
"moduleResolution": "bundler",
"target": "ES2022",
"strict": true,
"allowJs": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"skipLibCheck": true
}
}

14
vite.config.ts Normal file
View File

@@ -0,0 +1,14 @@
import { defineConfig } from "vite";
import { reactRouter } from "@react-router/dev/vite";
export default defineConfig({
plugins: [reactRouter()],
resolve: {
conditions: ["browser", "development|production"],
},
ssr: {
resolve: {
conditions: ["node", "development|production"],
},
},
});