Initial export from WebStudio.is
4
.dockerignore
Normal file
@@ -0,0 +1,4 @@
|
||||
.react-router
|
||||
build
|
||||
node_modules
|
||||
README.md
|
||||
3
.webstudio/config.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"projectId": "cd046e79-00be-4be9-bd00-4da4d3620900"
|
||||
}
|
||||
67286
.webstudio/data.json
Normal file
19
Dockerfile
Normal 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"]
|
||||
8
app/__generated__/$resources.sitemap.xml.ts
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
export const sitemap = [
|
||||
{
|
||||
"path": "/",
|
||||
"lastModified": "2025-10-08"
|
||||
}
|
||||
];
|
||||
|
||||
82
app/__generated__/[about]._index.server.tsx
generated
Normal 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
@@ -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 }
|
||||
|
||||
82
app/__generated__/[contact]._index.server.tsx
generated
Normal 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
@@ -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 }
|
||||
|
||||
83
app/__generated__/[directory]._index.server.tsx
generated
Normal 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
@@ -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 }
|
||||
|
||||
78
app/__generated__/[events]._index.server.tsx
generated
Normal 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
@@ -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&color=%23ff5500&auto_play=true&hide_related=true&show_comments=false&show_user=false&show_reposts=false&show_teaser=false&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&ctz=America%2FNew_York&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 }
|
||||
|
||||
45
app/__generated__/[membership]._index.server.tsx
generated
Normal 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";
|
||||
|
||||
37
app/__generated__/[membership]._index.tsx
generated
Normal 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 }
|
||||
|
||||
64
app/__generated__/[posts].$slug._index.server.tsx
generated
Normal 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
@@ -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 }
|
||||
|
||||
60
app/__generated__/[posts]._index.server.tsx
generated
Normal 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
@@ -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 }
|
||||
|
||||
45
app/__generated__/[style-guide]._index.server.tsx
generated
Normal 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
45
app/__generated__/_index.server.tsx
generated
Normal 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
@@ -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
35
app/constants.mjs
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
};
|
||||
295
app/routes/[about]._index.tsx
Normal 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;
|
||||
295
app/routes/[contact]._index.tsx
Normal 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;
|
||||
295
app/routes/[directory]._index.tsx
Normal 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;
|
||||
295
app/routes/[events]._index.tsx
Normal 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;
|
||||
295
app/routes/[membership]._index.tsx
Normal 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;
|
||||
295
app/routes/[posts].$slug._index.tsx
Normal 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;
|
||||
295
app/routes/[posts]._index.tsx
Normal 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;
|
||||
24
app/routes/[robots.txt].tsx
Normal 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,
|
||||
}
|
||||
);
|
||||
};
|
||||
34
app/routes/[sitemap.xml]._index.tsx
Normal 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,
|
||||
}
|
||||
);
|
||||
};
|
||||
295
app/routes/[style-guide]._index.tsx
Normal 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
@@ -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
39
package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
BIN
public/assets/jaba_5QOC3c3LtpsinL7LWKF1X.png
Normal file
|
After Width: | Height: | Size: 765 KiB |
BIN
public/assets/jamaican-court-beach_vVvcsQR2wd8YHayhZ0lRu.jpg
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
public/assets/logo-jaba_74dpMeOTCcZXTWM74JQHk.png
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
public/assets/president-tamar-hamilton_6j-PzG6d8gG1E2XF6SChc.jpg
Normal file
|
After Width: | Height: | Size: 325 KiB |
|
After Width: | Height: | Size: 346 KiB |
BIN
public/assets/treasurer-don-james_teZRz9aaAJTv0EgJVhDWu.jpg
Normal file
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 664 KiB |
BIN
public/assets/vp-walwin-lee-taylor_JyRxH7SOn1IvPPtjp-3og.jpg
Normal file
|
After Width: | Height: | Size: 174 KiB |
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
29
tsconfig.json
Normal 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
@@ -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"],
|
||||
},
|
||||
},
|
||||
});
|
||||