business-obligations-ui 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +19 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -51,9 +51,10 @@ var en = {
|
|
|
51
51
|
toDo: (n) => `${n} to do`,
|
|
52
52
|
onward: "onward",
|
|
53
53
|
after: "After:",
|
|
54
|
-
dueOn: (date, relative) => `
|
|
55
|
-
by: (date) => `
|
|
56
|
-
|
|
54
|
+
dueOn: (date, relative) => `Statutory deadline: ${date} \xB7 ${relative}`,
|
|
55
|
+
by: (date) => `Suggested planning date: ${date}`,
|
|
56
|
+
triggeredBy: (reason, schedule) => `Applies because: ${reason}.${schedule ? ` Schedule: ${schedule}.` : ""}`,
|
|
57
|
+
planNote: "Suggested planning dates are allowances, not agency processing times. Statutory deadlines come from the rules and are labeled as such.",
|
|
57
58
|
fee: (amount) => `fee ${amount}`,
|
|
58
59
|
checked: (date) => `checked${date ? ` ${date}` : ""}`,
|
|
59
60
|
partlyUnconfirmed: "partly unconfirmed",
|
|
@@ -142,9 +143,10 @@ var es = {
|
|
|
142
143
|
toDo: (n) => `${n} por hacer`,
|
|
143
144
|
onward: "en adelante",
|
|
144
145
|
after: "Despu\xE9s de:",
|
|
145
|
-
dueOn: (date, relative) => `
|
|
146
|
-
by: (date) => `
|
|
147
|
-
|
|
146
|
+
dueOn: (date, relative) => `Plazo legal: ${date} \xB7 ${relative}`,
|
|
147
|
+
by: (date) => `Fecha de planificaci\xF3n sugerida: ${date}`,
|
|
148
|
+
triggeredBy: (reason, schedule) => `Se aplica porque: ${reason}.${schedule ? ` Calendario: ${schedule}.` : ""}`,
|
|
149
|
+
planNote: "Las fechas de planificaci\xF3n sugeridas son m\xE1rgenes, no plazos de tr\xE1mite de las agencias. Los plazos legales provienen de las reglas y se indican como tales.",
|
|
148
150
|
fee: (amount) => `tarifa ${amount}`,
|
|
149
151
|
checked: (date) => `verificado${date ? ` ${date}` : ""}`,
|
|
150
152
|
partlyUnconfirmed: "parcialmente sin confirmar",
|
|
@@ -397,7 +399,8 @@ function Disclosure({
|
|
|
397
399
|
summary,
|
|
398
400
|
children,
|
|
399
401
|
open = false,
|
|
400
|
-
card = false
|
|
402
|
+
card = false,
|
|
403
|
+
level
|
|
401
404
|
}) {
|
|
402
405
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
403
406
|
import_tamagui.Accordion,
|
|
@@ -406,7 +409,7 @@ function Disclosure({
|
|
|
406
409
|
defaultValue: open ? ["item"] : [],
|
|
407
410
|
...card ? { borderWidth: 1, borderColor: "border-color", borderRadius: "lg", overflow: "hidden" } : { borderTopWidth: 1, borderColor: "border-color" },
|
|
408
411
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.Accordion.Item, { value: "item", children: [
|
|
409
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Accordion.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
412
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Accordion.Header, { render: `h${level}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
410
413
|
import_tamagui.Accordion.Trigger,
|
|
411
414
|
{
|
|
412
415
|
flexDirection: "row",
|
|
@@ -548,6 +551,7 @@ function LaunchListBody({ plan, costs, done = /* @__PURE__ */ new Set(), onToggl
|
|
|
548
551
|
Disclosure,
|
|
549
552
|
{
|
|
550
553
|
card: true,
|
|
554
|
+
level: 2,
|
|
551
555
|
open: remaining > 0 || phase.id === "operate",
|
|
552
556
|
summary: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.YStack, { gap: "1", children: [
|
|
553
557
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.XStack, { gap: "2", alignItems: "center", flexWrap: "wrap", children: [
|
|
@@ -564,6 +568,7 @@ function LaunchListBody({ plan, costs, done = /* @__PURE__ */ new Set(), onToggl
|
|
|
564
568
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Paragraph, { fontSize: "sm", color: "placeholder-color", children: phase.description }),
|
|
565
569
|
phase.steps.map((step) => {
|
|
566
570
|
const needs = step.dependsOn.map((id) => byId.get(id)).filter((item) => Boolean(item)).slice(0, 2).map((item) => item.title);
|
|
571
|
+
const statutory = Boolean(step.legalDeadline || step.target && step.item.deadline);
|
|
567
572
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.YStack, { gap: "1", children: [
|
|
568
573
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
569
574
|
CheckStep,
|
|
@@ -575,14 +580,15 @@ function LaunchListBody({ plan, costs, done = /* @__PURE__ */ new Set(), onToggl
|
|
|
575
580
|
}
|
|
576
581
|
),
|
|
577
582
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.XStack, { flexWrap: "wrap", gap: "1.5", paddingLeft: "8", children: [
|
|
578
|
-
|
|
579
|
-
date(step.legalDeadline),
|
|
580
|
-
relativeDays(step.legalDeadline, plan.startDate)
|
|
583
|
+
statutory ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Chip, { outline: true, tone: "bad", children: m.dueOn(
|
|
584
|
+
date(step.legalDeadline ?? step.target),
|
|
585
|
+
relativeDays(step.legalDeadline ?? step.target, plan.startDate)
|
|
581
586
|
) }) : step.target ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Chip, { children: m.by(date(step.target)) }) : null,
|
|
582
587
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Fee, { item: step.item }),
|
|
583
588
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Chip, { children: m.frequencies[step.item.frequency] ?? step.item.frequency }),
|
|
584
589
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Confidence, { item: step.item })
|
|
585
590
|
] }),
|
|
591
|
+
statutory && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Text, { fontSize: "sm", color: "placeholder-color", paddingLeft: "8", children: m.triggeredBy(step.item.reason, step.item.deadline) }),
|
|
586
592
|
needs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.Text, { fontSize: "sm", color: "placeholder-color", paddingLeft: "8", children: [
|
|
587
593
|
m.after,
|
|
588
594
|
" ",
|
|
@@ -763,13 +769,14 @@ function ObligationsListBody({ items, asOf, filters, onFilters }) {
|
|
|
763
769
|
if (!group.length) return null;
|
|
764
770
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.YStack, { children: [
|
|
765
771
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.XStack, { gap: "2", alignItems: "center", paddingTop: "3", paddingBottom: "1", children: [
|
|
766
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Text, { fontSize: "lg", fontWeight: "600", children: m.jurisdictions[jurisdiction] }),
|
|
772
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Text, { render: "h2", fontSize: "lg", fontWeight: "600", margin: 0, children: m.jurisdictions[jurisdiction] }),
|
|
767
773
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Chip, { tone: "info", children: group.length })
|
|
768
774
|
] }),
|
|
769
775
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.YStack, { gap: "3", children: group.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
770
776
|
Disclosure,
|
|
771
777
|
{
|
|
772
778
|
card: true,
|
|
779
|
+
level: 3,
|
|
773
780
|
summary: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.YStack, { gap: "1.5", alignItems: "flex-start", width: "100%", children: [
|
|
774
781
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Text, { fontWeight: "600", textAlign: "left", alignSelf: "stretch", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExternalLink, { url: item.url, children: item.title }) }),
|
|
775
782
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Text, { fontSize: "sm", color: "placeholder-color", children: item.authority }),
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/messages.ts"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { ComplianceItem, LaunchPlan } from \"business-obligations\";\nimport { Accordion, Anchor, Button, Checkbox, Input, Label, Paragraph, Text, XStack, YStack } from \"tamagui\";\nimport { getMessages, type Messages } from \"./messages\";\n\nexport interface LaunchListProps {\n plan: LaunchPlan;\n costs?: { oneTime: number; annual: number };\n done?: ReadonlySet<string>;\n onToggle?: (id: string, checked: boolean) => void;\n /**\n * Language of the interface text and of dates, numbers and relative times: \"en\" (default) or \"es\", or any other\n * locale tag together with `messages`. Text from the data is translated separately, with `localizePlan`.\n */\n locale?: string;\n /** Interface text for a language the package does not bundle. */\n messages?: Messages;\n}\n\nexport interface ObligationFilters {\n jurisdiction: string;\n category: string;\n query: string;\n trust: \"all\" | \"verified\" | \"unverified\";\n}\n\nexport const NO_OBLIGATION_FILTERS: ObligationFilters = {\n jurisdiction: \"all\",\n category: \"all\",\n query: \"\",\n trust: \"all\",\n};\n\nexport interface ObligationsListProps {\n items: ComplianceItem[];\n asOf: string;\n filters: ObligationFilters;\n onFilters: (filters: ObligationFilters) => void;\n /** See `LaunchListProps.locale`. */\n locale?: string;\n /** See `LaunchListProps.messages`. */\n messages?: Messages;\n}\n\nconst JURISDICTIONS = [\"federal\", \"state\", \"county\", \"city\"] as const;\n\n/** The interface text and the formatters for one locale. */\ninterface I18n {\n /** BCP 47 tag handed to `Intl`. */\n tag: string;\n m: Messages;\n money: (amount: number) => string;\n date: (value?: string) => string;\n relativeDays: (value: string | undefined, from: string) => string;\n}\n\nfunction createI18n(locale = \"en\", custom?: Messages): I18n {\n // The data is about US businesses, so a bare language code formats numbers and dates the US way (\"$1,250.00\").\n const tag = locale === \"en\" ? \"en-US\" : locale === \"es\" ? \"es-US\" : locale;\n const money = new Intl.NumberFormat(tag, { style: \"currency\", currency: \"USD\", maximumFractionDigits: 2 });\n const day = new Intl.DateTimeFormat(tag, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n const relative = new Intl.RelativeTimeFormat(tag, { numeric: \"auto\" });\n return {\n tag,\n m: custom ?? getMessages(locale),\n money: (amount) => money.format(amount),\n date: (value) => (value ? day.format(new Date(`${value}T00:00:00Z`)) : \"\"),\n relativeDays: (value, from) => {\n if (!value) return \"\";\n const days = Math.round(\n (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${from}T00:00:00Z`)) / 86_400_000,\n );\n return relative.format(days, \"day\");\n },\n };\n}\n\nconst I18nContext = createContext<I18n>(createI18n());\nconst useI18n = () => useContext(I18nContext);\n\nfunction WithLocale({\n locale,\n messages,\n children,\n}: {\n locale?: string;\n messages?: Messages;\n children: ReactNode;\n}) {\n const i18n = useMemo(() => createI18n(locale, messages), [locale, messages]);\n return <I18nContext.Provider value={i18n}>{children}</I18nContext.Provider>;\n}\n\n/** Lower case without accents, so that \"licencia\" finds \"Licencia\" and \"licéncia\". */\nconst fold = (value: string) => value.normalize(\"NFD\").replace(/\\p{M}/gu, \"\").toLowerCase();\n\nconst isVerified = (item: Pick<ComplianceItem, \"provenance\">) =>\n item.provenance?.confidence === \"checked\" && !item.provenance.stale;\n\nconst isSoon = (value: string, asOf: string) => {\n const days = (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${asOf}T00:00:00Z`)) / 86_400_000;\n return days >= 0 && days <= 30;\n};\n\nconst nativeControl = {\n width: \"100%\",\n minHeight: 44,\n padding: \"8px 10px\",\n borderRadius: 8,\n border: \"1px solid var(--border-color)\",\n background: \"var(--background)\",\n color: \"var(--color)\",\n font: \"inherit\",\n fontSize: 16,\n};\n\nconst safeUrl = (value?: string) => {\n if (!value) return undefined;\n try {\n const url = new URL(value);\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.href : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst host = (value: string) => {\n try {\n return new URL(value).hostname.replace(/^www\\./, \"\");\n } catch {\n return value;\n }\n};\n\nfunction ExternalLink({ url, children }: { url?: string; children: ReactNode }) {\n const href = safeUrl(url);\n return href ? (\n <Anchor\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"accent-background\"\n textDecorationLine=\"underline\"\n textAlign=\"left\"\n >\n {children}\n </Anchor>\n ) : (\n <Text>{children}</Text>\n );\n}\n\nfunction Stat({ label, value, note }: { label: string; value: ReactNode; note?: ReactNode }) {\n return (\n <YStack flexBasis={150} flexGrow={1} backgroundColor=\"color-2\" borderRadius=\"md\" padding=\"3\" gap=\"0.5\">\n <Text fontSize=\"xs\" color=\"placeholder-color\">\n {label}\n </Text>\n <Text fontSize=\"xl\" fontWeight=\"600\">\n {value}\n </Text>\n {note && (\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {note}\n </Text>\n )}\n </YStack>\n );\n}\n\nfunction Chip({\n children,\n tone = \"neutral\",\n outline = false,\n title,\n}: {\n children: ReactNode;\n tone?: \"neutral\" | \"good\" | \"warn\" | \"bad\" | \"info\";\n outline?: boolean;\n title?: string;\n}) {\n const color = {\n neutral: \"color\",\n good: \"green-600\",\n warn: \"amber-600\",\n bad: \"red-600\",\n info: \"accent-background\",\n }[tone];\n return (\n <XStack\n borderWidth={1}\n borderColor={outline ? color : \"transparent\"}\n backgroundColor={outline ? \"transparent\" : \"color-2\"}\n borderRadius=\"md\"\n paddingHorizontal=\"2\"\n paddingVertical=\"0.5\"\n {...(title ? { \"aria-label\": title } : {})}\n >\n <Text fontSize=\"xs\" color={outline ? color : \"color\"}>\n {children}\n </Text>\n </XStack>\n );\n}\n\nfunction Disclosure({\n summary,\n children,\n open = false,\n card = false,\n}: {\n summary: ReactNode;\n children: ReactNode;\n open?: boolean;\n card?: boolean;\n}) {\n return (\n <Accordion\n type=\"multiple\"\n defaultValue={open ? [\"item\"] : []}\n {...(card\n ? { borderWidth: 1, borderColor: \"border-color\", borderRadius: \"lg\", overflow: \"hidden\" }\n : { borderTopWidth: 1, borderColor: \"border-color\" })}\n >\n <Accordion.Item value=\"item\">\n <Accordion.Header>\n <Accordion.Trigger\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n gap=\"2.5\"\n paddingVertical=\"3\"\n paddingHorizontal={card ? \"3\" : \"0\"}\n width=\"100%\"\n alignSelf=\"stretch\"\n justifyContent=\"flex-start\"\n textAlign=\"left\"\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor=\"pointer\"\n >\n {({ open: isOpen }: { open: boolean }) => (\n <>\n <Text\n color=\"placeholder-color\"\n width={14}\n marginTop={2}\n rotate={isOpen ? \"90deg\" : \"0deg\"}\n transition=\"transform 180ms ease-out\"\n >\n ▸\n </Text>\n <YStack flex={1} minWidth={0} alignItems=\"flex-start\" alignSelf=\"stretch\" textAlign=\"left\">\n {summary}\n </YStack>\n </>\n )}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.HeightAnimator\n transition={{ duration: 220, easing: \"ease-out\", properties: \"min-height\" }}\n >\n <Accordion.Content paddingBottom=\"3\" paddingHorizontal={card ? \"3\" : \"0\"}>\n <YStack paddingLeft=\"6\">{children}</YStack>\n </Accordion.Content>\n </Accordion.HeightAnimator>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nfunction Confidence({ item }: { item: ComplianceItem }) {\n const { m, date } = useI18n();\n const provenance = item.provenance;\n if (!provenance) return null;\n const label =\n provenance.confidence === \"checked\"\n ? m.checked(provenance.checkedOn ? date(provenance.checkedOn) : undefined)\n : provenance.confidence === \"unconfirmed\"\n ? m.partlyUnconfirmed\n : m.notIndividuallyChecked;\n const tone =\n provenance.confidence === \"checked\"\n ? \"good\"\n : provenance.confidence === \"unconfirmed\"\n ? \"warn\"\n : \"neutral\";\n return (\n <>\n <Chip outline tone={tone}>\n {label}\n </Chip>\n {provenance.stale && (\n <Chip outline tone=\"warn\">\n {m.reviewOverdue}\n </Chip>\n )}\n </>\n );\n}\n\nfunction Fee({ item }: { item: ComplianceItem }) {\n const { m, money } = useI18n();\n return item.cost?.amount !== undefined ? <Chip>{m.fee(money(item.cost.amount))}</Chip> : null;\n}\n\nfunction CheckStep({\n id,\n item,\n checked,\n onChange,\n}: {\n id: string;\n item: ComplianceItem;\n checked: boolean;\n onChange?: (checked: boolean) => void;\n}) {\n return (\n <XStack gap=\"3\" alignItems=\"flex-start\" paddingVertical=\"1\" opacity={checked ? 0.6 : 1}>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(value) => onChange?.(value === true)}\n size=\"md\"\n marginTop=\"0.5\"\n >\n <Checkbox.Indicator>\n <Text fontSize=\"xs\">✓</Text>\n </Checkbox.Indicator>\n </Checkbox>\n <Label htmlFor={id} flex={1} minWidth={0} cursor=\"pointer\">\n <YStack gap=\"1\">\n <Text fontWeight=\"600\" textDecorationLine={checked ? \"line-through\" : \"none\"}>\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n </YStack>\n </Label>\n </XStack>\n );\n}\n\nexport function LaunchList(props: LaunchListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <LaunchListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction LaunchListBody({ plan, costs, done = new Set(), onToggle }: LaunchListProps) {\n const { m, money, date, relativeDays } = useI18n();\n const completed = plan.steps.filter((step) => done.has(step.item.id)).length;\n const byId = new Map(plan.steps.map((step) => [step.item.id, step.item]));\n return (\n <YStack gap=\"4\">\n <XStack flexWrap=\"wrap\" gap=\"3\">\n <Stat\n label={m.fileFormation}\n value={date(plan.formationDate)}\n note={relativeDays(plan.formationDate, plan.startDate)}\n />\n <Stat\n label={m.readyToOperate}\n value={date(plan.readyDate)}\n note={relativeDays(plan.readyDate, plan.startDate)}\n />\n {plan.onTrack === undefined ? (\n <Stat label={m.openingDate} value={m.notSet} note={m.addOpeningDate} />\n ) : (\n <Stat\n label={m.opening}\n value={date(plan.openingDate)}\n note={\n plan.onTrack ? (\n <Text color=\"green-600\">{m.onTrack(plan.slackDays ?? 0)}</Text>\n ) : (\n <Text color=\"red-600\">{m.tooSoon(-(plan.slackDays ?? 0))}</Text>\n )\n }\n />\n )}\n <Stat label={m.progress} value={`${completed} / ${plan.steps.length}`} note={m.savedInBrowser} />\n {costs && (\n <Stat\n label={m.knownFees}\n value={\n <>\n {money(costs.oneTime)} <Text fontSize=\"sm\">{m.oneTime}</Text>\n </>\n }\n note={m.perYear(money(costs.annual))}\n />\n )}\n </XStack>\n <YStack height={6} backgroundColor=\"color-3\" borderRadius=\"full\" overflow=\"hidden\">\n <XStack\n height=\"100%\"\n width={`${plan.steps.length ? (completed / plan.steps.length) * 100 : 0}%`}\n backgroundColor=\"accent-background\"\n />\n </YStack>\n {plan.phases.map((phase, index) => {\n const remaining = phase.steps.filter((step) => !done.has(step.item.id)).length;\n return (\n <Disclosure\n key={phase.id}\n card\n open={remaining > 0 || phase.id === \"operate\"}\n summary={\n <YStack gap=\"1\">\n <XStack gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Chip tone=\"info\" outline>\n {index + 1}\n </Chip>\n <Text fontWeight=\"600\">{phase.title}</Text>\n <Chip tone={remaining === 0 ? \"good\" : \"neutral\"} outline={remaining === 0}>\n {remaining === 0 ? m.done : m.toDo(remaining)}\n </Chip>\n </XStack>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {date(phase.start)}\n {phase.end ? ` → ${date(phase.end)}` : ` ${m.onward}`}\n </Text>\n </YStack>\n }\n >\n <YStack gap=\"2\">\n <Paragraph fontSize=\"sm\" color=\"placeholder-color\">\n {phase.description}\n </Paragraph>\n {phase.steps.map((step) => {\n const needs = step.dependsOn\n .map((id) => byId.get(id))\n .filter((item): item is ComplianceItem => Boolean(item))\n .slice(0, 2)\n .map((item) => item.title);\n return (\n <YStack key={step.item.id} gap=\"1\">\n <CheckStep\n id={`step-${step.item.id}`}\n item={step.item}\n checked={done.has(step.item.id)}\n onChange={onToggle ? (checked) => onToggle(step.item.id, checked) : undefined}\n />\n <XStack flexWrap=\"wrap\" gap=\"1.5\" paddingLeft=\"8\">\n {step.legalDeadline ? (\n <Chip outline tone=\"bad\">\n {m.dueOn(\n date(step.legalDeadline),\n relativeDays(step.legalDeadline, plan.startDate),\n )}\n </Chip>\n ) : step.target ? (\n <Chip>{m.by(date(step.target))}</Chip>\n ) : null}\n <Fee item={step.item} />\n <Chip>{m.frequencies[step.item.frequency] ?? step.item.frequency}</Chip>\n <Confidence item={step.item} />\n </XStack>\n {needs.length > 0 && (\n <Text fontSize=\"sm\" color=\"placeholder-color\" paddingLeft=\"8\">\n {m.after} {needs.join(\"; \")}\n </Text>\n )}\n </YStack>\n );\n })}\n </YStack>\n </Disclosure>\n );\n })}\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.planNote}\n </Text>\n </YStack>\n );\n}\n\nfunction itemMatches(item: ComplianceItem, filters: ObligationFilters) {\n const query = fold(filters.query.trim());\n return (\n (filters.jurisdiction === \"all\" || item.jurisdiction === filters.jurisdiction) &&\n (filters.category === \"all\" || item.category === filters.category) &&\n (filters.trust === \"all\" || (filters.trust === \"verified\") === isVerified(item)) &&\n (!query || fold(`${item.title} ${item.authority} ${item.description} ${item.reason}`).includes(query))\n );\n}\n\nexport function filterObligations(items: ComplianceItem[], filters: ObligationFilters): ComplianceItem[] {\n return items.filter((item) => itemMatches(item, filters));\n}\n\nfunction ObligationDetails({\n item,\n titleOf,\n}: {\n item: ComplianceItem;\n titleOf: (id: string) => string | undefined;\n}) {\n const { m, money, date } = useI18n();\n const rows: Array<[string, ReactNode]> = [[m.whyItApplies, item.reason]];\n if (item.preemptedBy) rows.push([m.replacedBy, titleOf(item.preemptedBy) ?? item.preemptedBy]);\n if (item.appliesWhen?.length)\n rows.push([\n m.appliesWhen,\n item.appliesWhen\n .map(\n (when) =>\n when.description ??\n `${m.fields[when.field] ?? when.field} ${m.operators[when.op] ?? when.op} ${Array.isArray(when.value) ? when.value.join(\", \") : String(when.value)}`,\n )\n .join(\"; \"),\n ]);\n if (item.exemptions?.length) rows.push([m.exceptions, item.exemptions.join(\"; \")]);\n rows.push([m.authority, <ExternalLink url={item.url}>{item.authority}</ExternalLink>]);\n const how = [\n item.formId ? m.form(item.formId) : undefined,\n item.filingMethod?.length\n ? item.filingMethod.map((method) => m.filingMethods[method] ?? method).join(\", \")\n : undefined,\n item.processingTime,\n ].filter(Boolean);\n if (how.length) rows.push([m.howToFile, how.join(\" · \")]);\n if (item.renewal) rows.push([m.renewal, item.renewal]);\n if (item.penalty)\n rows.push([\n m.ifLate,\n `${money(item.penalty.amount)}${item.penalty.percentPerMonth ? m.plusPerMonth(item.penalty.percentPerMonth) : \"\"}${item.penalty.note ? `. ${item.penalty.note}` : \"\"}`,\n ]);\n const provenance = item.provenance;\n if (provenance?.sources.length) {\n const sources =\n provenance.sourceDetails ??\n provenance.sources.map((url) => ({ url, kind: \"agency_page\" as const, archiveUrl: \"\" }));\n rows.push([\n m.sources,\n <>\n {sources.slice(0, 3).map((source, index) => (\n <span key={source.url}>\n {index > 0 && \"; \"}\n <ExternalLink url={source.url}>{host(source.url)}</ExternalLink>\n {source.kind === \"pdf\" ? m.pdf : \"\"}\n {source.archiveUrl ? (\n <>\n {\" \"}\n (<ExternalLink url={source.archiveUrl}>{m.archivedCopy}</ExternalLink>)\n </>\n ) : null}\n </span>\n ))}\n </>,\n ]);\n }\n if (provenance)\n rows.push([\n m.data,\n `${provenance.confidence === \"checked\" && provenance.checkedOn ? m.checkedAgainst(date(provenance.checkedOn)) : m.compiledFrom(provenance.compiledOn ? date(provenance.compiledOn) : undefined)}${provenance.reviewBy ? `. ${provenance.stale ? m.reviewOverdueSince(date(provenance.reviewBy)) : m.reviewDueBy(date(provenance.reviewBy))}.` : \"\"}`,\n ]);\n if (item.feedbackUrl)\n rows.push([m.seeAnError, <ExternalLink url={item.feedbackUrl}>{m.reportIt}</ExternalLink>]);\n return (\n <YStack gap=\"2\" paddingBottom=\"2\">\n <Paragraph>{item.description}</Paragraph>\n {rows.map(([label, value]) => (\n <XStack key={label} gap=\"1\" columnGap=\"4\" flexWrap=\"wrap\">\n <Text fontSize=\"sm\" fontWeight=\"600\" width={130}>\n {label}\n </Text>\n <Text fontSize=\"sm\" flex={1} flexBasis={200} minWidth={0}>\n {value}\n </Text>\n </XStack>\n ))}\n </YStack>\n );\n}\n\nexport function ObligationsList(props: ObligationsListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <ObligationsListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction ObligationsListBody({ items, asOf, filters, onFilters }: ObligationsListProps) {\n const { m, tag, date, relativeDays } = useI18n();\n const categoryLabel = (category: ComplianceItem[\"category\"]) => m.categories[category] ?? category;\n const categories = [...new Set(items.map((item) => item.category))].sort((a, b) =>\n categoryLabel(a).localeCompare(categoryLabel(b), tag),\n );\n const filtered = filterObligations(items, filters);\n const titleById = new Map(items.map((item) => [item.id, item.title]));\n const count = (jurisdiction: string) =>\n items.filter((item) => itemMatches(item, { ...filters, jurisdiction })).length;\n const categoryCount = (category: string) =>\n items.filter((item) => itemMatches(item, { ...filters, category })).length;\n const hasFilters =\n filters.jurisdiction !== \"all\" ||\n filters.category !== \"all\" ||\n filters.query !== \"\" ||\n filters.trust !== \"all\";\n const clearFilters = () => onFilters({ ...NO_OBLIGATION_FILTERS });\n return (\n <YStack gap=\"3\">\n <XStack justifyContent=\"space-between\" gap=\"3\" flexWrap=\"wrap\" alignItems=\"baseline\">\n <YStack gap=\"0.5\">\n <Text fontWeight=\"700\">{m.findObligation}</Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.showing(filtered.length, items.length)}\n </Text>\n </YStack>\n {hasFilters && (\n <Button size=\"sm\" onPress={clearFilters}>\n {m.clearFilters}\n </Button>\n )}\n </XStack>\n <XStack gap=\"3\" flexWrap=\"wrap\" alignItems={\"flex-end\"}>\n <Input\n flex={1}\n flexBasis={220}\n placeholder={m.searchObligations}\n aria-label={m.searchObligations}\n value={filters.query}\n onChangeText={(query) => onFilters({ ...filters, query })}\n />\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-category\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.category}\n </Label>\n <select\n id=\"obligation-category\"\n aria-label={m.category}\n style={nativeControl}\n value={filters.category}\n onChange={(event) => onFilters({ ...filters, category: event.target.value })}\n >\n <option value=\"all\">{m.allCategories}</option>\n {categories.map((category) => (\n <option key={category} value={category}>\n {categoryLabel(category)} ({categoryCount(category)})\n </option>\n ))}\n </select>\n </YStack>\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-trust\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.dataConfidence}\n </Label>\n <select\n id=\"obligation-trust\"\n aria-label={m.dataConfidence}\n style={nativeControl}\n value={filters.trust}\n onChange={(event) =>\n onFilters({ ...filters, trust: event.target.value as ObligationFilters[\"trust\"] })\n }\n >\n <option value=\"all\">{m.allConfidenceLevels}</option>\n <option value=\"verified\">{m.checkedAgainstOfficial}</option>\n <option value=\"unverified\">{m.needsVerification}</option>\n </select>\n </YStack>\n </XStack>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {([\"all\", ...JURISDICTIONS] as const).map((key) => (\n <Button\n key={key}\n size=\"sm\"\n theme={filters.jurisdiction === key ? \"accent\" : undefined}\n disabled={count(key) === 0 && key !== \"all\"}\n onPress={() => onFilters({ ...filters, jurisdiction: key })}\n aria-pressed={filters.jurisdiction === key}\n >\n {key === \"all\" ? m.all : m.jurisdictions[key]} {key === \"all\" ? filtered.length : count(key)}\n </Button>\n ))}\n </XStack>\n {filtered.length === 0 ? (\n <Text color=\"placeholder-color\">{m.noMatch}</Text>\n ) : (\n JURISDICTIONS.map((jurisdiction) => {\n const group = filtered\n .filter((item) => item.jurisdiction === jurisdiction)\n .sort((a, b) => (a.nextDue ?? \"9999-12-31\").localeCompare(b.nextDue ?? \"9999-12-31\"));\n if (!group.length) return null;\n return (\n <YStack key={jurisdiction}>\n <XStack gap=\"2\" alignItems=\"center\" paddingTop=\"3\" paddingBottom=\"1\">\n <Text fontSize=\"lg\" fontWeight=\"600\">\n {m.jurisdictions[jurisdiction]}\n </Text>\n <Chip tone=\"info\">{group.length}</Chip>\n </XStack>\n <YStack gap=\"3\">\n {group.map((item) => (\n <Disclosure\n key={item.id}\n card\n summary={\n <YStack gap=\"1.5\" alignItems=\"flex-start\" width=\"100%\">\n <Text fontWeight=\"600\" textAlign=\"left\" alignSelf=\"stretch\">\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {item.nextDue ? (\n <Chip tone={isSoon(item.nextDue, asOf) ? \"warn\" : \"info\"} outline>\n {m.dueOn(date(item.nextDue), relativeDays(item.nextDue, asOf))}\n </Chip>\n ) : item.deadline ? (\n <Chip>{item.deadline}</Chip>\n ) : null}\n <Chip>{m.frequencies[item.frequency] ?? item.frequency}</Chip>\n <Chip>{categoryLabel(item.category)}</Chip>\n <Fee item={item} />\n <Confidence item={item} />\n </XStack>\n </YStack>\n }\n >\n <ObligationDetails item={item} titleOf={(id) => titleById.get(id)} />\n </Disclosure>\n ))}\n </YStack>\n </YStack>\n );\n })\n )}\n </YStack>\n );\n}\n\nexport { messages, getMessages } from \"./messages\";\nexport type { Locale, Messages } from \"./messages\";\nexport type { ComplianceItem, LaunchPlan };\n","import type { ComplianceItem } from \"business-obligations\";\n\nexport type Locale = \"en\" | \"es\";\n\ntype Category = ComplianceItem[\"category\"];\ntype Frequency = ComplianceItem[\"frequency\"];\ntype Jurisdiction = ComplianceItem[\"jurisdiction\"];\ntype FilingMethod = NonNullable<ComplianceItem[\"filingMethod\"]>[number];\ntype Operator = \">=\" | \">\" | \"<=\" | \"<\" | \"==\" | \"!=\" | \"in\";\ntype Confidence = NonNullable<ComplianceItem[\"provenance\"]>[\"confidence\"];\n\n/**\n * Every piece of interface text the components show. Text that comes from the data (titles, descriptions, reasons,\n * deadlines) is not here: translate it with `localizePlan` / `localize` from `business-obligations` first.\n */\nexport interface Messages {\n // Launch plan\n fileFormation: string;\n readyToOperate: string;\n openingDate: string;\n notSet: string;\n addOpeningDate: string;\n opening: string;\n onTrack: (slackDays: number) => string;\n tooSoon: (days: number) => string;\n progress: string;\n savedInBrowser: string;\n knownFees: string;\n oneTime: string;\n perYear: (amount: string) => string;\n done: string;\n toDo: (count: number) => string;\n onward: string;\n after: string;\n dueOn: (date: string, relative: string) => string;\n by: (date: string) => string;\n planNote: string;\n // Chips\n fee: (amount: string) => string;\n checked: (date?: string) => string;\n partlyUnconfirmed: string;\n notIndividuallyChecked: string;\n reviewOverdue: string;\n // Filters and list\n findObligation: string;\n showing: (shown: number, total: number) => string;\n clearFilters: string;\n searchObligations: string;\n category: string;\n allCategories: string;\n dataConfidence: string;\n allConfidenceLevels: string;\n checkedAgainstOfficial: string;\n needsVerification: string;\n all: string;\n noMatch: string;\n // Details\n whyItApplies: string;\n replacedBy: string;\n appliesWhen: string;\n exceptions: string;\n authority: string;\n howToFile: string;\n form: (id: string) => string;\n renewal: string;\n ifLate: string;\n plusPerMonth: (percent: number) => string;\n sources: string;\n pdf: string;\n archivedCopy: string;\n data: string;\n checkedAgainst: (date: string) => string;\n compiledFrom: (date?: string) => string;\n reviewOverdueSince: (date: string) => string;\n reviewDueBy: (date: string) => string;\n seeAnError: string;\n reportIt: string;\n // Words for enum values\n jurisdictions: Record<Jurisdiction, string>;\n frequencies: Record<Frequency, string>;\n categories: Record<Category, string>;\n filingMethods: Record<FilingMethod, string>;\n operators: Record<Operator, string>;\n /** Names of the profile fields that an \"applies when\" condition can read; unknown fields are shown as they are. */\n fields: Record<string, string>;\n confidence: Record<Confidence, string>;\n}\n\nconst plural = (locale: string, n: number, one: string, other: string) =>\n new Intl.PluralRules(locale).select(n) === \"one\" ? one : other;\n\nconst en: Messages = {\n fileFormation: \"File formation\",\n readyToOperate: \"Ready to operate\",\n openingDate: \"Opening date\",\n notSet: \"Not set\",\n addOpeningDate: \"Add a target opening date to check the plan fits\",\n opening: \"Opening\",\n onTrack: (n) => `On track, ${n} ${plural(\"en\", n, \"day\", \"days\")} of slack`,\n tooSoon: (n) => `${n} ${plural(\"en\", n, \"day\", \"days\")} too soon`,\n progress: \"Progress\",\n savedInBrowser: \"Saved in this browser\",\n knownFees: \"Known fees\",\n oneTime: \"one-time\",\n perYear: (amount) => `${amount} per year`,\n done: \"done\",\n toDo: (n) => `${n} to do`,\n onward: \"onward\",\n after: \"After:\",\n dueOn: (date, relative) => `due ${date} · ${relative}`,\n by: (date) => `by ${date}`,\n planNote:\n \"Dates are planning allowances, not agency processing times. Legal due dates are shown where the rules give one.\",\n fee: (amount) => `fee ${amount}`,\n checked: (date) => `checked${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"partly unconfirmed\",\n notIndividuallyChecked: \"not individually checked\",\n reviewOverdue: \"review overdue\",\n findObligation: \"Find an obligation\",\n showing: (shown, total) => `Showing ${shown} of ${total} obligations`,\n clearFilters: \"Clear filters\",\n searchObligations: \"Search obligations\",\n category: \"Category\",\n allCategories: \"All categories\",\n dataConfidence: \"Data confidence\",\n allConfidenceLevels: \"All confidence levels\",\n checkedAgainstOfficial: \"Checked against official pages\",\n needsVerification: \"Needs verification\",\n all: \"All\",\n noMatch: \"No obligations match these filters.\",\n whyItApplies: \"Why it applies\",\n replacedBy: \"Replaced by\",\n appliesWhen: \"Applies when\",\n exceptions: \"Exceptions\",\n authority: \"Authority\",\n howToFile: \"How to file\",\n form: (id) => `Form ${id}`,\n renewal: \"Renewal\",\n ifLate: \"If late\",\n plusPerMonth: (percent) => ` plus ${percent}% per month`,\n sources: \"Sources\",\n pdf: \" (PDF)\",\n archivedCopy: \"archived copy\",\n data: \"Data\",\n checkedAgainst: (date) => `Checked against official pages on ${date}`,\n compiledFrom: (date) =>\n `Compiled from public sources${date ? ` on ${date}` : \"\"}; not individually checked`,\n reviewOverdueSince: (date) => `Review overdue since ${date}`,\n reviewDueBy: (date) => `Review due by ${date}`,\n seeAnError: \"See an error?\",\n reportIt: \"Report it or suggest a correction\",\n jurisdictions: { federal: \"Federal\", state: \"State\", county: \"County\", city: \"City\" },\n frequencies: {\n once: \"One-time\",\n annual: \"Annual\",\n biennial: \"Every 2 years\",\n every_five_years: \"Every 5 years\",\n quarterly: \"Quarterly\",\n monthly: \"Monthly\",\n per_event: \"Per event\",\n ongoing: \"Ongoing\",\n },\n categories: {\n license: \"license\",\n permit: \"permit\",\n registration: \"registration\",\n filing: \"filing\",\n payment: \"payment\",\n insurance: \"insurance\",\n recordkeeping: \"recordkeeping\",\n },\n filingMethods: { online: \"online\", mail: \"by mail\", in_person: \"in person\", fax: \"by fax\" },\n operators: {\n \">=\": \"at least\",\n \">\": \"more than\",\n \"<=\": \"at most\",\n \"<\": \"less than\",\n \"==\": \"is\",\n \"!=\": \"is not\",\n in: \"is one of\",\n },\n fields: {},\n confidence: { checked: \"checked\", compiled: \"not individually checked\", unconfirmed: \"partly unconfirmed\" },\n};\n\nconst es: Messages = {\n fileFormation: \"Presentar la constitución\",\n readyToOperate: \"Listo para operar\",\n openingDate: \"Fecha de apertura\",\n notSet: \"Sin definir\",\n addOpeningDate: \"Agregue una fecha de apertura prevista para comprobar que el plan alcanza\",\n opening: \"Apertura\",\n onTrack: (n) => `En plazo, ${n} ${plural(\"es\", n, \"día\", \"días\")} de margen`,\n tooSoon: (n) => `${n} ${plural(\"es\", n, \"día\", \"días\")} antes de estar listo`,\n progress: \"Avance\",\n savedInBrowser: \"Guardado en este navegador\",\n knownFees: \"Tarifas conocidas\",\n oneTime: \"únicas\",\n perYear: (amount) => `${amount} por año`,\n done: \"listo\",\n toDo: (n) => `${n} por hacer`,\n onward: \"en adelante\",\n after: \"Después de:\",\n dueOn: (date, relative) => `vence el ${date} · ${relative}`,\n by: (date) => `antes del ${date}`,\n planNote:\n \"Las fechas son márgenes de planificación, no plazos de trámite de las agencias. Los plazos legales se muestran cuando las reglas los establecen.\",\n fee: (amount) => `tarifa ${amount}`,\n checked: (date) => `verificado${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"parcialmente sin confirmar\",\n notIndividuallyChecked: \"no verificado individualmente\",\n reviewOverdue: \"revisión vencida\",\n findObligation: \"Buscar una obligación\",\n showing: (shown, total) => `Mostrando ${shown} de ${total} obligaciones`,\n clearFilters: \"Borrar filtros\",\n searchObligations: \"Buscar obligaciones\",\n category: \"Categoría\",\n allCategories: \"Todas las categorías\",\n dataConfidence: \"Confiabilidad de los datos\",\n allConfidenceLevels: \"Todos los niveles de confianza\",\n checkedAgainstOfficial: \"Verificado con las páginas oficiales\",\n needsVerification: \"Requiere verificación\",\n all: \"Todas\",\n noMatch: \"Ninguna obligación coincide con estos filtros.\",\n whyItApplies: \"Por qué aplica\",\n replacedBy: \"Reemplazada por\",\n appliesWhen: \"Aplica cuando\",\n exceptions: \"Excepciones\",\n authority: \"Autoridad\",\n howToFile: \"Cómo presentarla\",\n form: (id) => `Formulario ${id}`,\n renewal: \"Renovación\",\n ifLate: \"Si se atrasa\",\n plusPerMonth: (percent) => ` más ${percent}% por mes`,\n sources: \"Fuentes\",\n pdf: \" (PDF)\",\n archivedCopy: \"copia archivada\",\n data: \"Datos\",\n checkedAgainst: (date) => `Verificado con las páginas oficiales el ${date}`,\n compiledFrom: (date) =>\n `Compilado de fuentes públicas${date ? ` el ${date}` : \"\"}; no verificado individualmente`,\n reviewOverdueSince: (date) => `Revisión vencida desde el ${date}`,\n reviewDueBy: (date) => `Revisión prevista antes del ${date}`,\n seeAnError: \"¿Ve un error?\",\n reportIt: \"Infórmelo o sugiera una corrección\",\n jurisdictions: { federal: \"Federal\", state: \"Estatal\", county: \"Condado\", city: \"Ciudad\" },\n frequencies: {\n once: \"Una sola vez\",\n annual: \"Anual\",\n biennial: \"Cada 2 años\",\n every_five_years: \"Cada 5 años\",\n quarterly: \"Trimestral\",\n monthly: \"Mensual\",\n per_event: \"Por evento\",\n ongoing: \"Continuo\",\n },\n categories: {\n license: \"licencia\",\n permit: \"permiso\",\n registration: \"registro\",\n filing: \"presentación\",\n payment: \"pago\",\n insurance: \"seguro\",\n recordkeeping: \"conservación de registros\",\n },\n filingMethods: { online: \"en línea\", mail: \"por correo\", in_person: \"en persona\", fax: \"por fax\" },\n operators: {\n \">=\": \"al menos\",\n \">\": \"más de\",\n \"<=\": \"como máximo\",\n \"<\": \"menos de\",\n \"==\": \"es\",\n \"!=\": \"no es\",\n in: \"es uno de\",\n },\n fields: {\n employeeCount: \"número de empleados\",\n fullTimeEmployeeCount: \"número de empleados a tiempo completo\",\n annualPayroll: \"nómina anual\",\n annualRevenue: \"ingresos anuales\",\n annualNetIncome: \"ingresos netos anuales\",\n largestContractorPaymentUsd: \"mayor pago a un contratista\",\n activities: \"actividades\",\n county: \"condado\",\n city: \"ciudad\",\n state: \"estado\",\n entityType: \"tipo de entidad\",\n industry: \"sector\",\n naics: \"código NAICS\",\n homeBased: \"negocio desde el hogar\",\n hasSignage: \"rótulos exteriores\",\n sellsTaxableGoods: \"vende bienes gravables\",\n usesTradeName: \"usa un nombre comercial\",\n projectValueUsd: \"valor del proyecto\",\n disturbedAcres: \"acres removidos\",\n floorAreaSqFt: \"superficie en pies cuadrados\",\n },\n confidence: {\n checked: \"verificado\",\n compiled: \"no verificado individualmente\",\n unconfirmed: \"parcialmente sin confirmar\",\n },\n};\n\nen.fields = {\n employeeCount: \"number of employees\",\n fullTimeEmployeeCount: \"number of full-time employees\",\n annualPayroll: \"annual payroll\",\n annualRevenue: \"annual revenue\",\n annualNetIncome: \"annual net income\",\n largestContractorPaymentUsd: \"largest contractor payment\",\n activities: \"activities\",\n county: \"county\",\n city: \"city\",\n state: \"state\",\n entityType: \"entity type\",\n industry: \"industry\",\n naics: \"NAICS code\",\n homeBased: \"home-based business\",\n hasSignage: \"exterior signage\",\n sellsTaxableGoods: \"sells taxable goods\",\n usesTradeName: \"uses a trade name\",\n projectValueUsd: \"project value\",\n disturbedAcres: \"acres disturbed\",\n floorAreaSqFt: \"floor area in square feet\",\n};\n\n/** The bundled message tables. */\nexport const messages: Record<Locale, Messages> = { en, es };\n\n/** The messages for a locale code such as \"es\" or \"es-MX\"; English when the language has no table. */\nexport function getMessages(locale?: string): Messages {\n const language = locale?.toLowerCase().split(\"-\")[0];\n return language === \"es\" ? es : en;\n}\n"],"mappings":"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","names":["messages"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/messages.ts"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { ComplianceItem, LaunchPlan } from \"business-obligations\";\nimport { Accordion, Anchor, Button, Checkbox, Input, Label, Paragraph, Text, XStack, YStack } from \"tamagui\";\nimport { getMessages, type Messages } from \"./messages\";\n\nexport interface LaunchListProps {\n plan: LaunchPlan;\n costs?: { oneTime: number; annual: number };\n done?: ReadonlySet<string>;\n onToggle?: (id: string, checked: boolean) => void;\n /**\n * Language of the interface text and of dates, numbers and relative times: \"en\" (default) or \"es\", or any other\n * locale tag together with `messages`. Text from the data is translated separately, with `localizePlan`.\n */\n locale?: string;\n /** Interface text for a language the package does not bundle. */\n messages?: Messages;\n}\n\nexport interface ObligationFilters {\n jurisdiction: string;\n category: string;\n query: string;\n trust: \"all\" | \"verified\" | \"unverified\";\n}\n\nexport const NO_OBLIGATION_FILTERS: ObligationFilters = {\n jurisdiction: \"all\",\n category: \"all\",\n query: \"\",\n trust: \"all\",\n};\n\nexport interface ObligationsListProps {\n items: ComplianceItem[];\n asOf: string;\n filters: ObligationFilters;\n onFilters: (filters: ObligationFilters) => void;\n /** See `LaunchListProps.locale`. */\n locale?: string;\n /** See `LaunchListProps.messages`. */\n messages?: Messages;\n}\n\nconst JURISDICTIONS = [\"federal\", \"state\", \"county\", \"city\"] as const;\n\n/** The interface text and the formatters for one locale. */\ninterface I18n {\n /** BCP 47 tag handed to `Intl`. */\n tag: string;\n m: Messages;\n money: (amount: number) => string;\n date: (value?: string) => string;\n relativeDays: (value: string | undefined, from: string) => string;\n}\n\nfunction createI18n(locale = \"en\", custom?: Messages): I18n {\n // The data is about US businesses, so a bare language code formats numbers and dates the US way (\"$1,250.00\").\n const tag = locale === \"en\" ? \"en-US\" : locale === \"es\" ? \"es-US\" : locale;\n const money = new Intl.NumberFormat(tag, { style: \"currency\", currency: \"USD\", maximumFractionDigits: 2 });\n const day = new Intl.DateTimeFormat(tag, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n const relative = new Intl.RelativeTimeFormat(tag, { numeric: \"auto\" });\n return {\n tag,\n m: custom ?? getMessages(locale),\n money: (amount) => money.format(amount),\n date: (value) => (value ? day.format(new Date(`${value}T00:00:00Z`)) : \"\"),\n relativeDays: (value, from) => {\n if (!value) return \"\";\n const days = Math.round(\n (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${from}T00:00:00Z`)) / 86_400_000,\n );\n return relative.format(days, \"day\");\n },\n };\n}\n\nconst I18nContext = createContext<I18n>(createI18n());\nconst useI18n = () => useContext(I18nContext);\n\nfunction WithLocale({\n locale,\n messages,\n children,\n}: {\n locale?: string;\n messages?: Messages;\n children: ReactNode;\n}) {\n const i18n = useMemo(() => createI18n(locale, messages), [locale, messages]);\n return <I18nContext.Provider value={i18n}>{children}</I18nContext.Provider>;\n}\n\n/** Lower case without accents, so that \"licencia\" finds \"Licencia\" and \"licéncia\". */\nconst fold = (value: string) => value.normalize(\"NFD\").replace(/\\p{M}/gu, \"\").toLowerCase();\n\nconst isVerified = (item: Pick<ComplianceItem, \"provenance\">) =>\n item.provenance?.confidence === \"checked\" && !item.provenance.stale;\n\nconst isSoon = (value: string, asOf: string) => {\n const days = (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${asOf}T00:00:00Z`)) / 86_400_000;\n return days >= 0 && days <= 30;\n};\n\nconst nativeControl = {\n width: \"100%\",\n minHeight: 44,\n padding: \"8px 10px\",\n borderRadius: 8,\n border: \"1px solid var(--border-color)\",\n background: \"var(--background)\",\n color: \"var(--color)\",\n font: \"inherit\",\n fontSize: 16,\n};\n\nconst safeUrl = (value?: string) => {\n if (!value) return undefined;\n try {\n const url = new URL(value);\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.href : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst host = (value: string) => {\n try {\n return new URL(value).hostname.replace(/^www\\./, \"\");\n } catch {\n return value;\n }\n};\n\nfunction ExternalLink({ url, children }: { url?: string; children: ReactNode }) {\n const href = safeUrl(url);\n return href ? (\n <Anchor\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"accent-background\"\n textDecorationLine=\"underline\"\n textAlign=\"left\"\n >\n {children}\n </Anchor>\n ) : (\n <Text>{children}</Text>\n );\n}\n\nfunction Stat({ label, value, note }: { label: string; value: ReactNode; note?: ReactNode }) {\n return (\n <YStack flexBasis={150} flexGrow={1} backgroundColor=\"color-2\" borderRadius=\"md\" padding=\"3\" gap=\"0.5\">\n <Text fontSize=\"xs\" color=\"placeholder-color\">\n {label}\n </Text>\n <Text fontSize=\"xl\" fontWeight=\"600\">\n {value}\n </Text>\n {note && (\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {note}\n </Text>\n )}\n </YStack>\n );\n}\n\nfunction Chip({\n children,\n tone = \"neutral\",\n outline = false,\n title,\n}: {\n children: ReactNode;\n tone?: \"neutral\" | \"good\" | \"warn\" | \"bad\" | \"info\";\n outline?: boolean;\n title?: string;\n}) {\n const color = {\n neutral: \"color\",\n good: \"green-600\",\n warn: \"amber-600\",\n bad: \"red-600\",\n info: \"accent-background\",\n }[tone];\n return (\n <XStack\n borderWidth={1}\n borderColor={outline ? color : \"transparent\"}\n backgroundColor={outline ? \"transparent\" : \"color-2\"}\n borderRadius=\"md\"\n paddingHorizontal=\"2\"\n paddingVertical=\"0.5\"\n {...(title ? { \"aria-label\": title } : {})}\n >\n <Text fontSize=\"xs\" color={outline ? color : \"color\"}>\n {children}\n </Text>\n </XStack>\n );\n}\n\nfunction Disclosure({\n summary,\n children,\n open = false,\n card = false,\n level,\n}: {\n summary: ReactNode;\n children: ReactNode;\n open?: boolean;\n card?: boolean;\n /** Heading level of the trigger's wrapper, so the page keeps a single h1. */\n level: 2 | 3;\n}) {\n return (\n <Accordion\n type=\"multiple\"\n defaultValue={open ? [\"item\"] : []}\n {...(card\n ? { borderWidth: 1, borderColor: \"border-color\", borderRadius: \"lg\", overflow: \"hidden\" }\n : { borderTopWidth: 1, borderColor: \"border-color\" })}\n >\n <Accordion.Item value=\"item\">\n <Accordion.Header render={`h${level}`}>\n <Accordion.Trigger\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n gap=\"2.5\"\n paddingVertical=\"3\"\n paddingHorizontal={card ? \"3\" : \"0\"}\n width=\"100%\"\n alignSelf=\"stretch\"\n justifyContent=\"flex-start\"\n textAlign=\"left\"\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor=\"pointer\"\n >\n {({ open: isOpen }: { open: boolean }) => (\n <>\n <Text\n color=\"placeholder-color\"\n width={14}\n marginTop={2}\n rotate={isOpen ? \"90deg\" : \"0deg\"}\n transition=\"transform 180ms ease-out\"\n >\n ▸\n </Text>\n <YStack flex={1} minWidth={0} alignItems=\"flex-start\" alignSelf=\"stretch\" textAlign=\"left\">\n {summary}\n </YStack>\n </>\n )}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.HeightAnimator\n transition={{ duration: 220, easing: \"ease-out\", properties: \"min-height\" }}\n >\n <Accordion.Content paddingBottom=\"3\" paddingHorizontal={card ? \"3\" : \"0\"}>\n <YStack paddingLeft=\"6\">{children}</YStack>\n </Accordion.Content>\n </Accordion.HeightAnimator>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nfunction Confidence({ item }: { item: ComplianceItem }) {\n const { m, date } = useI18n();\n const provenance = item.provenance;\n if (!provenance) return null;\n const label =\n provenance.confidence === \"checked\"\n ? m.checked(provenance.checkedOn ? date(provenance.checkedOn) : undefined)\n : provenance.confidence === \"unconfirmed\"\n ? m.partlyUnconfirmed\n : m.notIndividuallyChecked;\n const tone =\n provenance.confidence === \"checked\"\n ? \"good\"\n : provenance.confidence === \"unconfirmed\"\n ? \"warn\"\n : \"neutral\";\n return (\n <>\n <Chip outline tone={tone}>\n {label}\n </Chip>\n {provenance.stale && (\n <Chip outline tone=\"warn\">\n {m.reviewOverdue}\n </Chip>\n )}\n </>\n );\n}\n\nfunction Fee({ item }: { item: ComplianceItem }) {\n const { m, money } = useI18n();\n return item.cost?.amount !== undefined ? <Chip>{m.fee(money(item.cost.amount))}</Chip> : null;\n}\n\nfunction CheckStep({\n id,\n item,\n checked,\n onChange,\n}: {\n id: string;\n item: ComplianceItem;\n checked: boolean;\n onChange?: (checked: boolean) => void;\n}) {\n return (\n <XStack gap=\"3\" alignItems=\"flex-start\" paddingVertical=\"1\" opacity={checked ? 0.6 : 1}>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(value) => onChange?.(value === true)}\n size=\"md\"\n marginTop=\"0.5\"\n >\n <Checkbox.Indicator>\n <Text fontSize=\"xs\">✓</Text>\n </Checkbox.Indicator>\n </Checkbox>\n <Label htmlFor={id} flex={1} minWidth={0} cursor=\"pointer\">\n <YStack gap=\"1\">\n <Text fontWeight=\"600\" textDecorationLine={checked ? \"line-through\" : \"none\"}>\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n </YStack>\n </Label>\n </XStack>\n );\n}\n\nexport function LaunchList(props: LaunchListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <LaunchListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction LaunchListBody({ plan, costs, done = new Set(), onToggle }: LaunchListProps) {\n const { m, money, date, relativeDays } = useI18n();\n const completed = plan.steps.filter((step) => done.has(step.item.id)).length;\n const byId = new Map(plan.steps.map((step) => [step.item.id, step.item]));\n return (\n <YStack gap=\"4\">\n <XStack flexWrap=\"wrap\" gap=\"3\">\n <Stat\n label={m.fileFormation}\n value={date(plan.formationDate)}\n note={relativeDays(plan.formationDate, plan.startDate)}\n />\n <Stat\n label={m.readyToOperate}\n value={date(plan.readyDate)}\n note={relativeDays(plan.readyDate, plan.startDate)}\n />\n {plan.onTrack === undefined ? (\n <Stat label={m.openingDate} value={m.notSet} note={m.addOpeningDate} />\n ) : (\n <Stat\n label={m.opening}\n value={date(plan.openingDate)}\n note={\n plan.onTrack ? (\n <Text color=\"green-600\">{m.onTrack(plan.slackDays ?? 0)}</Text>\n ) : (\n <Text color=\"red-600\">{m.tooSoon(-(plan.slackDays ?? 0))}</Text>\n )\n }\n />\n )}\n <Stat label={m.progress} value={`${completed} / ${plan.steps.length}`} note={m.savedInBrowser} />\n {costs && (\n <Stat\n label={m.knownFees}\n value={\n <>\n {money(costs.oneTime)} <Text fontSize=\"sm\">{m.oneTime}</Text>\n </>\n }\n note={m.perYear(money(costs.annual))}\n />\n )}\n </XStack>\n <YStack height={6} backgroundColor=\"color-3\" borderRadius=\"full\" overflow=\"hidden\">\n <XStack\n height=\"100%\"\n width={`${plan.steps.length ? (completed / plan.steps.length) * 100 : 0}%`}\n backgroundColor=\"accent-background\"\n />\n </YStack>\n {plan.phases.map((phase, index) => {\n const remaining = phase.steps.filter((step) => !done.has(step.item.id)).length;\n return (\n <Disclosure\n key={phase.id}\n card\n level={2}\n open={remaining > 0 || phase.id === \"operate\"}\n summary={\n <YStack gap=\"1\">\n <XStack gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Chip tone=\"info\" outline>\n {index + 1}\n </Chip>\n <Text fontWeight=\"600\">{phase.title}</Text>\n <Chip tone={remaining === 0 ? \"good\" : \"neutral\"} outline={remaining === 0}>\n {remaining === 0 ? m.done : m.toDo(remaining)}\n </Chip>\n </XStack>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {date(phase.start)}\n {phase.end ? ` → ${date(phase.end)}` : ` ${m.onward}`}\n </Text>\n </YStack>\n }\n >\n <YStack gap=\"2\">\n <Paragraph fontSize=\"sm\" color=\"placeholder-color\">\n {phase.description}\n </Paragraph>\n {phase.steps.map((step) => {\n const needs = step.dependsOn\n .map((id) => byId.get(id))\n .filter((item): item is ComplianceItem => Boolean(item))\n .slice(0, 2)\n .map((item) => item.title);\n // A date from the rules (a legal deadline or a filing schedule) is statutory; any other date is a planning allowance.\n const statutory = Boolean(step.legalDeadline || (step.target && step.item.deadline));\n return (\n <YStack key={step.item.id} gap=\"1\">\n <CheckStep\n id={`step-${step.item.id}`}\n item={step.item}\n checked={done.has(step.item.id)}\n onChange={onToggle ? (checked) => onToggle(step.item.id, checked) : undefined}\n />\n <XStack flexWrap=\"wrap\" gap=\"1.5\" paddingLeft=\"8\">\n {statutory ? (\n <Chip outline tone=\"bad\">\n {m.dueOn(\n date(step.legalDeadline ?? step.target),\n relativeDays(step.legalDeadline ?? step.target, plan.startDate),\n )}\n </Chip>\n ) : step.target ? (\n <Chip>{m.by(date(step.target))}</Chip>\n ) : null}\n <Fee item={step.item} />\n <Chip>{m.frequencies[step.item.frequency] ?? step.item.frequency}</Chip>\n <Confidence item={step.item} />\n </XStack>\n {statutory && (\n <Text fontSize=\"sm\" color=\"placeholder-color\" paddingLeft=\"8\">\n {m.triggeredBy(step.item.reason, step.item.deadline)}\n </Text>\n )}\n {needs.length > 0 && (\n <Text fontSize=\"sm\" color=\"placeholder-color\" paddingLeft=\"8\">\n {m.after} {needs.join(\"; \")}\n </Text>\n )}\n </YStack>\n );\n })}\n </YStack>\n </Disclosure>\n );\n })}\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.planNote}\n </Text>\n </YStack>\n );\n}\n\nfunction itemMatches(item: ComplianceItem, filters: ObligationFilters) {\n const query = fold(filters.query.trim());\n return (\n (filters.jurisdiction === \"all\" || item.jurisdiction === filters.jurisdiction) &&\n (filters.category === \"all\" || item.category === filters.category) &&\n (filters.trust === \"all\" || (filters.trust === \"verified\") === isVerified(item)) &&\n (!query || fold(`${item.title} ${item.authority} ${item.description} ${item.reason}`).includes(query))\n );\n}\n\nexport function filterObligations(items: ComplianceItem[], filters: ObligationFilters): ComplianceItem[] {\n return items.filter((item) => itemMatches(item, filters));\n}\n\nfunction ObligationDetails({\n item,\n titleOf,\n}: {\n item: ComplianceItem;\n titleOf: (id: string) => string | undefined;\n}) {\n const { m, money, date } = useI18n();\n const rows: Array<[string, ReactNode]> = [[m.whyItApplies, item.reason]];\n if (item.preemptedBy) rows.push([m.replacedBy, titleOf(item.preemptedBy) ?? item.preemptedBy]);\n if (item.appliesWhen?.length)\n rows.push([\n m.appliesWhen,\n item.appliesWhen\n .map(\n (when) =>\n when.description ??\n `${m.fields[when.field] ?? when.field} ${m.operators[when.op] ?? when.op} ${Array.isArray(when.value) ? when.value.join(\", \") : String(when.value)}`,\n )\n .join(\"; \"),\n ]);\n if (item.exemptions?.length) rows.push([m.exceptions, item.exemptions.join(\"; \")]);\n rows.push([m.authority, <ExternalLink url={item.url}>{item.authority}</ExternalLink>]);\n const how = [\n item.formId ? m.form(item.formId) : undefined,\n item.filingMethod?.length\n ? item.filingMethod.map((method) => m.filingMethods[method] ?? method).join(\", \")\n : undefined,\n item.processingTime,\n ].filter(Boolean);\n if (how.length) rows.push([m.howToFile, how.join(\" · \")]);\n if (item.renewal) rows.push([m.renewal, item.renewal]);\n if (item.penalty)\n rows.push([\n m.ifLate,\n `${money(item.penalty.amount)}${item.penalty.percentPerMonth ? m.plusPerMonth(item.penalty.percentPerMonth) : \"\"}${item.penalty.note ? `. ${item.penalty.note}` : \"\"}`,\n ]);\n const provenance = item.provenance;\n if (provenance?.sources.length) {\n const sources =\n provenance.sourceDetails ??\n provenance.sources.map((url) => ({ url, kind: \"agency_page\" as const, archiveUrl: \"\" }));\n rows.push([\n m.sources,\n <>\n {sources.slice(0, 3).map((source, index) => (\n <span key={source.url}>\n {index > 0 && \"; \"}\n <ExternalLink url={source.url}>{host(source.url)}</ExternalLink>\n {source.kind === \"pdf\" ? m.pdf : \"\"}\n {source.archiveUrl ? (\n <>\n {\" \"}\n (<ExternalLink url={source.archiveUrl}>{m.archivedCopy}</ExternalLink>)\n </>\n ) : null}\n </span>\n ))}\n </>,\n ]);\n }\n if (provenance)\n rows.push([\n m.data,\n `${provenance.confidence === \"checked\" && provenance.checkedOn ? m.checkedAgainst(date(provenance.checkedOn)) : m.compiledFrom(provenance.compiledOn ? date(provenance.compiledOn) : undefined)}${provenance.reviewBy ? `. ${provenance.stale ? m.reviewOverdueSince(date(provenance.reviewBy)) : m.reviewDueBy(date(provenance.reviewBy))}.` : \"\"}`,\n ]);\n if (item.feedbackUrl)\n rows.push([m.seeAnError, <ExternalLink url={item.feedbackUrl}>{m.reportIt}</ExternalLink>]);\n return (\n <YStack gap=\"2\" paddingBottom=\"2\">\n <Paragraph>{item.description}</Paragraph>\n {rows.map(([label, value]) => (\n <XStack key={label} gap=\"1\" columnGap=\"4\" flexWrap=\"wrap\">\n <Text fontSize=\"sm\" fontWeight=\"600\" width={130}>\n {label}\n </Text>\n <Text fontSize=\"sm\" flex={1} flexBasis={200} minWidth={0}>\n {value}\n </Text>\n </XStack>\n ))}\n </YStack>\n );\n}\n\nexport function ObligationsList(props: ObligationsListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <ObligationsListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction ObligationsListBody({ items, asOf, filters, onFilters }: ObligationsListProps) {\n const { m, tag, date, relativeDays } = useI18n();\n const categoryLabel = (category: ComplianceItem[\"category\"]) => m.categories[category] ?? category;\n const categories = [...new Set(items.map((item) => item.category))].sort((a, b) =>\n categoryLabel(a).localeCompare(categoryLabel(b), tag),\n );\n const filtered = filterObligations(items, filters);\n const titleById = new Map(items.map((item) => [item.id, item.title]));\n const count = (jurisdiction: string) =>\n items.filter((item) => itemMatches(item, { ...filters, jurisdiction })).length;\n const categoryCount = (category: string) =>\n items.filter((item) => itemMatches(item, { ...filters, category })).length;\n const hasFilters =\n filters.jurisdiction !== \"all\" ||\n filters.category !== \"all\" ||\n filters.query !== \"\" ||\n filters.trust !== \"all\";\n const clearFilters = () => onFilters({ ...NO_OBLIGATION_FILTERS });\n return (\n <YStack gap=\"3\">\n <XStack justifyContent=\"space-between\" gap=\"3\" flexWrap=\"wrap\" alignItems=\"baseline\">\n <YStack gap=\"0.5\">\n <Text fontWeight=\"700\">{m.findObligation}</Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.showing(filtered.length, items.length)}\n </Text>\n </YStack>\n {hasFilters && (\n <Button size=\"sm\" onPress={clearFilters}>\n {m.clearFilters}\n </Button>\n )}\n </XStack>\n <XStack gap=\"3\" flexWrap=\"wrap\" alignItems={\"flex-end\"}>\n <Input\n flex={1}\n flexBasis={220}\n placeholder={m.searchObligations}\n aria-label={m.searchObligations}\n value={filters.query}\n onChangeText={(query) => onFilters({ ...filters, query })}\n />\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-category\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.category}\n </Label>\n <select\n id=\"obligation-category\"\n aria-label={m.category}\n style={nativeControl}\n value={filters.category}\n onChange={(event) => onFilters({ ...filters, category: event.target.value })}\n >\n <option value=\"all\">{m.allCategories}</option>\n {categories.map((category) => (\n <option key={category} value={category}>\n {categoryLabel(category)} ({categoryCount(category)})\n </option>\n ))}\n </select>\n </YStack>\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-trust\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.dataConfidence}\n </Label>\n <select\n id=\"obligation-trust\"\n aria-label={m.dataConfidence}\n style={nativeControl}\n value={filters.trust}\n onChange={(event) =>\n onFilters({ ...filters, trust: event.target.value as ObligationFilters[\"trust\"] })\n }\n >\n <option value=\"all\">{m.allConfidenceLevels}</option>\n <option value=\"verified\">{m.checkedAgainstOfficial}</option>\n <option value=\"unverified\">{m.needsVerification}</option>\n </select>\n </YStack>\n </XStack>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {([\"all\", ...JURISDICTIONS] as const).map((key) => (\n <Button\n key={key}\n size=\"sm\"\n theme={filters.jurisdiction === key ? \"accent\" : undefined}\n disabled={count(key) === 0 && key !== \"all\"}\n onPress={() => onFilters({ ...filters, jurisdiction: key })}\n aria-pressed={filters.jurisdiction === key}\n >\n {key === \"all\" ? m.all : m.jurisdictions[key]} {key === \"all\" ? filtered.length : count(key)}\n </Button>\n ))}\n </XStack>\n {filtered.length === 0 ? (\n <Text color=\"placeholder-color\">{m.noMatch}</Text>\n ) : (\n JURISDICTIONS.map((jurisdiction) => {\n const group = filtered\n .filter((item) => item.jurisdiction === jurisdiction)\n .sort((a, b) => (a.nextDue ?? \"9999-12-31\").localeCompare(b.nextDue ?? \"9999-12-31\"));\n if (!group.length) return null;\n return (\n <YStack key={jurisdiction}>\n <XStack gap=\"2\" alignItems=\"center\" paddingTop=\"3\" paddingBottom=\"1\">\n <Text render=\"h2\" fontSize=\"lg\" fontWeight=\"600\" margin={0}>\n {m.jurisdictions[jurisdiction]}\n </Text>\n <Chip tone=\"info\">{group.length}</Chip>\n </XStack>\n <YStack gap=\"3\">\n {group.map((item) => (\n <Disclosure\n key={item.id}\n card\n level={3}\n summary={\n <YStack gap=\"1.5\" alignItems=\"flex-start\" width=\"100%\">\n <Text fontWeight=\"600\" textAlign=\"left\" alignSelf=\"stretch\">\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {item.nextDue ? (\n <Chip tone={isSoon(item.nextDue, asOf) ? \"warn\" : \"info\"} outline>\n {m.dueOn(date(item.nextDue), relativeDays(item.nextDue, asOf))}\n </Chip>\n ) : item.deadline ? (\n <Chip>{item.deadline}</Chip>\n ) : null}\n <Chip>{m.frequencies[item.frequency] ?? item.frequency}</Chip>\n <Chip>{categoryLabel(item.category)}</Chip>\n <Fee item={item} />\n <Confidence item={item} />\n </XStack>\n </YStack>\n }\n >\n <ObligationDetails item={item} titleOf={(id) => titleById.get(id)} />\n </Disclosure>\n ))}\n </YStack>\n </YStack>\n );\n })\n )}\n </YStack>\n );\n}\n\nexport { messages, getMessages } from \"./messages\";\nexport type { Locale, Messages } from \"./messages\";\nexport type { ComplianceItem, LaunchPlan };\n","import type { ComplianceItem } from \"business-obligations\";\n\nexport type Locale = \"en\" | \"es\";\n\ntype Category = ComplianceItem[\"category\"];\ntype Frequency = ComplianceItem[\"frequency\"];\ntype Jurisdiction = ComplianceItem[\"jurisdiction\"];\ntype FilingMethod = NonNullable<ComplianceItem[\"filingMethod\"]>[number];\ntype Operator = \">=\" | \">\" | \"<=\" | \"<\" | \"==\" | \"!=\" | \"in\";\ntype Confidence = NonNullable<ComplianceItem[\"provenance\"]>[\"confidence\"];\n\n/**\n * Every piece of interface text the components show. Text that comes from the data (titles, descriptions, reasons,\n * deadlines) is not here: translate it with `localizePlan` / `localize` from `business-obligations` first.\n */\nexport interface Messages {\n // Launch plan\n fileFormation: string;\n readyToOperate: string;\n openingDate: string;\n notSet: string;\n addOpeningDate: string;\n opening: string;\n onTrack: (slackDays: number) => string;\n tooSoon: (days: number) => string;\n progress: string;\n savedInBrowser: string;\n knownFees: string;\n oneTime: string;\n perYear: (amount: string) => string;\n done: string;\n toDo: (count: number) => string;\n onward: string;\n after: string;\n dueOn: (date: string, relative: string) => string;\n by: (date: string) => string;\n /** What makes a legal deadline apply: the reason it applies and, when the rule has one, its schedule. */\n triggeredBy: (reason: string, schedule?: string) => string;\n planNote: string;\n // Chips\n fee: (amount: string) => string;\n checked: (date?: string) => string;\n partlyUnconfirmed: string;\n notIndividuallyChecked: string;\n reviewOverdue: string;\n // Filters and list\n findObligation: string;\n showing: (shown: number, total: number) => string;\n clearFilters: string;\n searchObligations: string;\n category: string;\n allCategories: string;\n dataConfidence: string;\n allConfidenceLevels: string;\n checkedAgainstOfficial: string;\n needsVerification: string;\n all: string;\n noMatch: string;\n // Details\n whyItApplies: string;\n replacedBy: string;\n appliesWhen: string;\n exceptions: string;\n authority: string;\n howToFile: string;\n form: (id: string) => string;\n renewal: string;\n ifLate: string;\n plusPerMonth: (percent: number) => string;\n sources: string;\n pdf: string;\n archivedCopy: string;\n data: string;\n checkedAgainst: (date: string) => string;\n compiledFrom: (date?: string) => string;\n reviewOverdueSince: (date: string) => string;\n reviewDueBy: (date: string) => string;\n seeAnError: string;\n reportIt: string;\n // Words for enum values\n jurisdictions: Record<Jurisdiction, string>;\n frequencies: Record<Frequency, string>;\n categories: Record<Category, string>;\n filingMethods: Record<FilingMethod, string>;\n operators: Record<Operator, string>;\n /** Names of the profile fields that an \"applies when\" condition can read; unknown fields are shown as they are. */\n fields: Record<string, string>;\n confidence: Record<Confidence, string>;\n}\n\nconst plural = (locale: string, n: number, one: string, other: string) =>\n new Intl.PluralRules(locale).select(n) === \"one\" ? one : other;\n\nconst en: Messages = {\n fileFormation: \"File formation\",\n readyToOperate: \"Ready to operate\",\n openingDate: \"Opening date\",\n notSet: \"Not set\",\n addOpeningDate: \"Add a target opening date to check the plan fits\",\n opening: \"Opening\",\n onTrack: (n) => `On track, ${n} ${plural(\"en\", n, \"day\", \"days\")} of slack`,\n tooSoon: (n) => `${n} ${plural(\"en\", n, \"day\", \"days\")} too soon`,\n progress: \"Progress\",\n savedInBrowser: \"Saved in this browser\",\n knownFees: \"Known fees\",\n oneTime: \"one-time\",\n perYear: (amount) => `${amount} per year`,\n done: \"done\",\n toDo: (n) => `${n} to do`,\n onward: \"onward\",\n after: \"After:\",\n dueOn: (date, relative) => `Statutory deadline: ${date} · ${relative}`,\n by: (date) => `Suggested planning date: ${date}`,\n triggeredBy: (reason, schedule) =>\n `Applies because: ${reason}.${schedule ? ` Schedule: ${schedule}.` : \"\"}`,\n planNote:\n \"Suggested planning dates are allowances, not agency processing times. Statutory deadlines come from the rules and are labeled as such.\",\n fee: (amount) => `fee ${amount}`,\n checked: (date) => `checked${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"partly unconfirmed\",\n notIndividuallyChecked: \"not individually checked\",\n reviewOverdue: \"review overdue\",\n findObligation: \"Find an obligation\",\n showing: (shown, total) => `Showing ${shown} of ${total} obligations`,\n clearFilters: \"Clear filters\",\n searchObligations: \"Search obligations\",\n category: \"Category\",\n allCategories: \"All categories\",\n dataConfidence: \"Data confidence\",\n allConfidenceLevels: \"All confidence levels\",\n checkedAgainstOfficial: \"Checked against official pages\",\n needsVerification: \"Needs verification\",\n all: \"All\",\n noMatch: \"No obligations match these filters.\",\n whyItApplies: \"Why it applies\",\n replacedBy: \"Replaced by\",\n appliesWhen: \"Applies when\",\n exceptions: \"Exceptions\",\n authority: \"Authority\",\n howToFile: \"How to file\",\n form: (id) => `Form ${id}`,\n renewal: \"Renewal\",\n ifLate: \"If late\",\n plusPerMonth: (percent) => ` plus ${percent}% per month`,\n sources: \"Sources\",\n pdf: \" (PDF)\",\n archivedCopy: \"archived copy\",\n data: \"Data\",\n checkedAgainst: (date) => `Checked against official pages on ${date}`,\n compiledFrom: (date) =>\n `Compiled from public sources${date ? ` on ${date}` : \"\"}; not individually checked`,\n reviewOverdueSince: (date) => `Review overdue since ${date}`,\n reviewDueBy: (date) => `Review due by ${date}`,\n seeAnError: \"See an error?\",\n reportIt: \"Report it or suggest a correction\",\n jurisdictions: { federal: \"Federal\", state: \"State\", county: \"County\", city: \"City\" },\n frequencies: {\n once: \"One-time\",\n annual: \"Annual\",\n biennial: \"Every 2 years\",\n every_five_years: \"Every 5 years\",\n quarterly: \"Quarterly\",\n monthly: \"Monthly\",\n per_event: \"Per event\",\n ongoing: \"Ongoing\",\n },\n categories: {\n license: \"license\",\n permit: \"permit\",\n registration: \"registration\",\n filing: \"filing\",\n payment: \"payment\",\n insurance: \"insurance\",\n recordkeeping: \"recordkeeping\",\n },\n filingMethods: { online: \"online\", mail: \"by mail\", in_person: \"in person\", fax: \"by fax\" },\n operators: {\n \">=\": \"at least\",\n \">\": \"more than\",\n \"<=\": \"at most\",\n \"<\": \"less than\",\n \"==\": \"is\",\n \"!=\": \"is not\",\n in: \"is one of\",\n },\n fields: {},\n confidence: { checked: \"checked\", compiled: \"not individually checked\", unconfirmed: \"partly unconfirmed\" },\n};\n\nconst es: Messages = {\n fileFormation: \"Presentar la constitución\",\n readyToOperate: \"Listo para operar\",\n openingDate: \"Fecha de apertura\",\n notSet: \"Sin definir\",\n addOpeningDate: \"Agregue una fecha de apertura prevista para comprobar que el plan alcanza\",\n opening: \"Apertura\",\n onTrack: (n) => `En plazo, ${n} ${plural(\"es\", n, \"día\", \"días\")} de margen`,\n tooSoon: (n) => `${n} ${plural(\"es\", n, \"día\", \"días\")} antes de estar listo`,\n progress: \"Avance\",\n savedInBrowser: \"Guardado en este navegador\",\n knownFees: \"Tarifas conocidas\",\n oneTime: \"únicas\",\n perYear: (amount) => `${amount} por año`,\n done: \"listo\",\n toDo: (n) => `${n} por hacer`,\n onward: \"en adelante\",\n after: \"Después de:\",\n dueOn: (date, relative) => `Plazo legal: ${date} · ${relative}`,\n by: (date) => `Fecha de planificación sugerida: ${date}`,\n triggeredBy: (reason, schedule) =>\n `Se aplica porque: ${reason}.${schedule ? ` Calendario: ${schedule}.` : \"\"}`,\n planNote:\n \"Las fechas de planificación sugeridas son márgenes, no plazos de trámite de las agencias. Los plazos legales provienen de las reglas y se indican como tales.\",\n fee: (amount) => `tarifa ${amount}`,\n checked: (date) => `verificado${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"parcialmente sin confirmar\",\n notIndividuallyChecked: \"no verificado individualmente\",\n reviewOverdue: \"revisión vencida\",\n findObligation: \"Buscar una obligación\",\n showing: (shown, total) => `Mostrando ${shown} de ${total} obligaciones`,\n clearFilters: \"Borrar filtros\",\n searchObligations: \"Buscar obligaciones\",\n category: \"Categoría\",\n allCategories: \"Todas las categorías\",\n dataConfidence: \"Confiabilidad de los datos\",\n allConfidenceLevels: \"Todos los niveles de confianza\",\n checkedAgainstOfficial: \"Verificado con las páginas oficiales\",\n needsVerification: \"Requiere verificación\",\n all: \"Todas\",\n noMatch: \"Ninguna obligación coincide con estos filtros.\",\n whyItApplies: \"Por qué aplica\",\n replacedBy: \"Reemplazada por\",\n appliesWhen: \"Aplica cuando\",\n exceptions: \"Excepciones\",\n authority: \"Autoridad\",\n howToFile: \"Cómo presentarla\",\n form: (id) => `Formulario ${id}`,\n renewal: \"Renovación\",\n ifLate: \"Si se atrasa\",\n plusPerMonth: (percent) => ` más ${percent}% por mes`,\n sources: \"Fuentes\",\n pdf: \" (PDF)\",\n archivedCopy: \"copia archivada\",\n data: \"Datos\",\n checkedAgainst: (date) => `Verificado con las páginas oficiales el ${date}`,\n compiledFrom: (date) =>\n `Compilado de fuentes públicas${date ? ` el ${date}` : \"\"}; no verificado individualmente`,\n reviewOverdueSince: (date) => `Revisión vencida desde el ${date}`,\n reviewDueBy: (date) => `Revisión prevista antes del ${date}`,\n seeAnError: \"¿Ve un error?\",\n reportIt: \"Infórmelo o sugiera una corrección\",\n jurisdictions: { federal: \"Federal\", state: \"Estatal\", county: \"Condado\", city: \"Ciudad\" },\n frequencies: {\n once: \"Una sola vez\",\n annual: \"Anual\",\n biennial: \"Cada 2 años\",\n every_five_years: \"Cada 5 años\",\n quarterly: \"Trimestral\",\n monthly: \"Mensual\",\n per_event: \"Por evento\",\n ongoing: \"Continuo\",\n },\n categories: {\n license: \"licencia\",\n permit: \"permiso\",\n registration: \"registro\",\n filing: \"presentación\",\n payment: \"pago\",\n insurance: \"seguro\",\n recordkeeping: \"conservación de registros\",\n },\n filingMethods: { online: \"en línea\", mail: \"por correo\", in_person: \"en persona\", fax: \"por fax\" },\n operators: {\n \">=\": \"al menos\",\n \">\": \"más de\",\n \"<=\": \"como máximo\",\n \"<\": \"menos de\",\n \"==\": \"es\",\n \"!=\": \"no es\",\n in: \"es uno de\",\n },\n fields: {\n employeeCount: \"número de empleados\",\n fullTimeEmployeeCount: \"número de empleados a tiempo completo\",\n annualPayroll: \"nómina anual\",\n annualRevenue: \"ingresos anuales\",\n annualNetIncome: \"ingresos netos anuales\",\n largestContractorPaymentUsd: \"mayor pago a un contratista\",\n activities: \"actividades\",\n county: \"condado\",\n city: \"ciudad\",\n state: \"estado\",\n entityType: \"tipo de entidad\",\n industry: \"sector\",\n naics: \"código NAICS\",\n homeBased: \"negocio desde el hogar\",\n hasSignage: \"rótulos exteriores\",\n sellsTaxableGoods: \"vende bienes gravables\",\n usesTradeName: \"usa un nombre comercial\",\n projectValueUsd: \"valor del proyecto\",\n disturbedAcres: \"acres removidos\",\n floorAreaSqFt: \"superficie en pies cuadrados\",\n },\n confidence: {\n checked: \"verificado\",\n compiled: \"no verificado individualmente\",\n unconfirmed: \"parcialmente sin confirmar\",\n },\n};\n\nen.fields = {\n employeeCount: \"number of employees\",\n fullTimeEmployeeCount: \"number of full-time employees\",\n annualPayroll: \"annual payroll\",\n annualRevenue: \"annual revenue\",\n annualNetIncome: \"annual net income\",\n largestContractorPaymentUsd: \"largest contractor payment\",\n activities: \"activities\",\n county: \"county\",\n city: \"city\",\n state: \"state\",\n entityType: \"entity type\",\n industry: \"industry\",\n naics: \"NAICS code\",\n homeBased: \"home-based business\",\n hasSignage: \"exterior signage\",\n sellsTaxableGoods: \"sells taxable goods\",\n usesTradeName: \"uses a trade name\",\n projectValueUsd: \"project value\",\n disturbedAcres: \"acres disturbed\",\n floorAreaSqFt: \"floor area in square feet\",\n};\n\n/** The bundled message tables. */\nexport const messages: Record<Locale, Messages> = { en, es };\n\n/** The messages for a locale code such as \"es\" or \"es-MX\"; English when the language has no table. */\nexport function getMessages(locale?: string): Messages {\n const language = locale?.toLowerCase().split(\"-\")[0];\n return language === \"es\" ? es : en;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmE;AAEnE,qBAAmG;;;ACwFnG,IAAM,SAAS,CAAC,QAAgB,GAAW,KAAa,UACtD,IAAI,KAAK,YAAY,MAAM,EAAE,OAAO,CAAC,MAAM,QAAQ,MAAM;AAE3D,IAAM,KAAe;AAAA,EACnB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,SAAS,CAAC,MAAM,aAAa,CAAC,IAAI,OAAO,MAAM,GAAG,OAAO,MAAM,CAAC;AAAA,EAChE,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,MAAM,GAAG,OAAO,MAAM,CAAC;AAAA,EACtD,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS,CAAC,WAAW,GAAG,MAAM;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,CAAC,MAAM,GAAG,CAAC;AAAA,EACjB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO,CAAC,MAAM,aAAa,uBAAuB,IAAI,SAAM,QAAQ;AAAA,EACpE,IAAI,CAAC,SAAS,4BAA4B,IAAI;AAAA,EAC9C,aAAa,CAAC,QAAQ,aACpB,oBAAoB,MAAM,IAAI,WAAW,cAAc,QAAQ,MAAM,EAAE;AAAA,EACzE,UACE;AAAA,EACF,KAAK,CAAC,WAAW,OAAO,MAAM;AAAA,EAC9B,SAAS,CAAC,SAAS,UAAU,OAAO,IAAI,IAAI,KAAK,EAAE;AAAA,EACnD,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,SAAS,CAAC,OAAO,UAAU,WAAW,KAAK,OAAO,KAAK;AAAA,EACvD,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,KAAK;AAAA,EACL,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM,CAAC,OAAO,QAAQ,EAAE;AAAA,EACxB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc,CAAC,YAAY,SAAS,OAAO;AAAA,EAC3C,SAAS;AAAA,EACT,KAAK;AAAA,EACL,cAAc;AAAA,EACd,MAAM;AAAA,EACN,gBAAgB,CAAC,SAAS,qCAAqC,IAAI;AAAA,EACnE,cAAc,CAAC,SACb,+BAA+B,OAAO,OAAO,IAAI,KAAK,EAAE;AAAA,EAC1D,oBAAoB,CAAC,SAAS,wBAAwB,IAAI;AAAA,EAC1D,aAAa,CAAC,SAAS,iBAAiB,IAAI;AAAA,EAC5C,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,eAAe,EAAE,SAAS,WAAW,OAAO,SAAS,QAAQ,UAAU,MAAM,OAAO;AAAA,EACpF,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AAAA,EACA,eAAe,EAAE,QAAQ,UAAU,MAAM,WAAW,WAAW,aAAa,KAAK,SAAS;AAAA,EAC1F,WAAW;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,QAAQ,CAAC;AAAA,EACT,YAAY,EAAE,SAAS,WAAW,UAAU,4BAA4B,aAAa,qBAAqB;AAC5G;AAEA,IAAM,KAAe;AAAA,EACnB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,SAAS,CAAC,MAAM,aAAa,CAAC,IAAI,OAAO,MAAM,GAAG,UAAO,SAAM,CAAC;AAAA,EAChE,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,MAAM,GAAG,UAAO,SAAM,CAAC;AAAA,EACtD,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS,CAAC,WAAW,GAAG,MAAM;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,CAAC,MAAM,GAAG,CAAC;AAAA,EACjB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO,CAAC,MAAM,aAAa,gBAAgB,IAAI,SAAM,QAAQ;AAAA,EAC7D,IAAI,CAAC,SAAS,uCAAoC,IAAI;AAAA,EACtD,aAAa,CAAC,QAAQ,aACpB,qBAAqB,MAAM,IAAI,WAAW,gBAAgB,QAAQ,MAAM,EAAE;AAAA,EAC5E,UACE;AAAA,EACF,KAAK,CAAC,WAAW,UAAU,MAAM;AAAA,EACjC,SAAS,CAAC,SAAS,aAAa,OAAO,IAAI,IAAI,KAAK,EAAE;AAAA,EACtD,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,SAAS,CAAC,OAAO,UAAU,aAAa,KAAK,OAAO,KAAK;AAAA,EACzD,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,mBAAmB;AAAA,EACnB,KAAK;AAAA,EACL,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM,CAAC,OAAO,cAAc,EAAE;AAAA,EAC9B,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc,CAAC,YAAY,WAAQ,OAAO;AAAA,EAC1C,SAAS;AAAA,EACT,KAAK;AAAA,EACL,cAAc;AAAA,EACd,MAAM;AAAA,EACN,gBAAgB,CAAC,SAAS,8CAA2C,IAAI;AAAA,EACzE,cAAc,CAAC,SACb,mCAAgC,OAAO,OAAO,IAAI,KAAK,EAAE;AAAA,EAC3D,oBAAoB,CAAC,SAAS,gCAA6B,IAAI;AAAA,EAC/D,aAAa,CAAC,SAAS,kCAA+B,IAAI;AAAA,EAC1D,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,eAAe,EAAE,SAAS,WAAW,OAAO,WAAW,QAAQ,WAAW,MAAM,SAAS;AAAA,EACzF,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AAAA,EACA,eAAe,EAAE,QAAQ,eAAY,MAAM,cAAc,WAAW,cAAc,KAAK,UAAU;AAAA,EACjG,WAAW;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,6BAA6B;AAAA,IAC7B,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AACF;AAEA,GAAG,SAAS;AAAA,EACV,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,6BAA6B;AAAA,EAC7B,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAGO,IAAM,WAAqC,EAAE,IAAI,GAAG;AAGpD,SAAS,YAAY,QAA2B;AACrD,QAAM,WAAW,QAAQ,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACnD,SAAO,aAAa,OAAO,KAAK;AAClC;;;ADrPS;AArEF,IAAM,wBAA2C;AAAA,EACtD,cAAc;AAAA,EACd,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AACT;AAaA,IAAM,gBAAgB,CAAC,WAAW,SAAS,UAAU,MAAM;AAY3D,SAAS,WAAW,SAAS,MAAM,QAAyB;AAE1D,QAAM,MAAM,WAAW,OAAO,UAAU,WAAW,OAAO,UAAU;AACpE,QAAM,QAAQ,IAAI,KAAK,aAAa,KAAK,EAAE,OAAO,YAAY,UAAU,OAAO,uBAAuB,EAAE,CAAC;AACzG,QAAM,MAAM,IAAI,KAAK,eAAe,KAAK;AAAA,IACvC,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,WAAW,IAAI,KAAK,mBAAmB,KAAK,EAAE,SAAS,OAAO,CAAC;AACrE,SAAO;AAAA,IACL;AAAA,IACA,GAAG,UAAU,YAAY,MAAM;AAAA,IAC/B,OAAO,CAAC,WAAW,MAAM,OAAO,MAAM;AAAA,IACtC,MAAM,CAAC,UAAW,QAAQ,IAAI,OAAO,oBAAI,KAAK,GAAG,KAAK,YAAY,CAAC,IAAI;AAAA,IACvE,cAAc,CAAC,OAAO,SAAS;AAC7B,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,OAAO,KAAK;AAAA,SACf,KAAK,MAAM,GAAG,KAAK,YAAY,IAAI,KAAK,MAAM,GAAG,IAAI,YAAY,KAAK;AAAA,MACzE;AACA,aAAO,SAAS,OAAO,MAAM,KAAK;AAAA,IACpC;AAAA,EACF;AACF;AAEA,IAAM,kBAAc,4BAAoB,WAAW,CAAC;AACpD,IAAM,UAAU,UAAM,yBAAW,WAAW;AAE5C,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,UAAAA;AAAA,EACA;AACF,GAIG;AACD,QAAM,WAAO,sBAAQ,MAAM,WAAW,QAAQA,SAAQ,GAAG,CAAC,QAAQA,SAAQ,CAAC;AAC3E,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAO,MAAO,UAAS;AACtD;AAGA,IAAM,OAAO,CAAC,UAAkB,MAAM,UAAU,KAAK,EAAE,QAAQ,WAAW,EAAE,EAAE,YAAY;AAE1F,IAAM,aAAa,CAAC,SAClB,KAAK,YAAY,eAAe,aAAa,CAAC,KAAK,WAAW;AAEhE,IAAM,SAAS,CAAC,OAAe,SAAiB;AAC9C,QAAM,QAAQ,KAAK,MAAM,GAAG,KAAK,YAAY,IAAI,KAAK,MAAM,GAAG,IAAI,YAAY,KAAK;AACpF,SAAO,QAAQ,KAAK,QAAQ;AAC9B;AAEA,IAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,IAAM,UAAU,CAAC,UAAmB;AAClC,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,KAAK;AACzB,WAAO,IAAI,aAAa,WAAW,IAAI,aAAa,WAAW,IAAI,OAAO;AAAA,EAC5E,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,OAAO,CAAC,UAAkB;AAC9B,MAAI;AACF,WAAO,IAAI,IAAI,KAAK,EAAE,SAAS,QAAQ,UAAU,EAAE;AAAA,EACrD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,EAAE,KAAK,SAAS,GAA0C;AAC9E,QAAM,OAAO,QAAQ,GAAG;AACxB,SAAO,OACL;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,QAAO;AAAA,MACP,KAAI;AAAA,MACJ,OAAM;AAAA,MACN,oBAAmB;AAAA,MACnB,WAAU;AAAA,MAET;AAAA;AAAA,EACH,IAEA,4CAAC,uBAAM,UAAS;AAEpB;AAEA,SAAS,KAAK,EAAE,OAAO,OAAO,KAAK,GAA0D;AAC3F,SACE,6CAAC,yBAAO,WAAW,KAAK,UAAU,GAAG,iBAAgB,WAAU,cAAa,MAAK,SAAQ,KAAI,KAAI,OAC/F;AAAA,gDAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB,iBACH;AAAA,IACA,4CAAC,uBAAK,UAAS,MAAK,YAAW,OAC5B,iBACH;AAAA,IACC,QACC,4CAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB,gBACH;AAAA,KAEJ;AAEJ;AAEA,SAAS,KAAK;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AACF,GAKG;AACD,QAAM,QAAQ;AAAA,IACZ,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,EACR,EAAE,IAAI;AACN,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAa;AAAA,MACb,aAAa,UAAU,QAAQ;AAAA,MAC/B,iBAAiB,UAAU,gBAAgB;AAAA,MAC3C,cAAa;AAAA,MACb,mBAAkB;AAAA,MAClB,iBAAgB;AAAA,MACf,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,MAExC,sDAAC,uBAAK,UAAS,MAAK,OAAO,UAAU,QAAQ,SAC1C,UACH;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AACF,GAOG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAc,OAAO,CAAC,MAAM,IAAI,CAAC;AAAA,MAChC,GAAI,OACD,EAAE,aAAa,GAAG,aAAa,gBAAgB,cAAc,MAAM,UAAU,SAAS,IACtF,EAAE,gBAAgB,GAAG,aAAa,eAAe;AAAA,MAErD,uDAAC,yBAAU,MAAV,EAAe,OAAM,QACpB;AAAA,oDAAC,yBAAU,QAAV,EAAiB,QAAQ,IAAI,KAAK,IACjC;AAAA,UAAC,yBAAU;AAAA,UAAV;AAAA,YACC,eAAc;AAAA,YACd,YAAW;AAAA,YACX,KAAI;AAAA,YACJ,iBAAgB;AAAA,YAChB,mBAAmB,OAAO,MAAM;AAAA,YAChC,OAAM;AAAA,YACN,WAAU;AAAA,YACV,gBAAe;AAAA,YACf,WAAU;AAAA,YACV,iBAAgB;AAAA,YAChB,aAAa;AAAA,YACb,QAAO;AAAA,YAEN,WAAC,EAAE,MAAM,OAAO,MACf,4EACE;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,OAAO;AAAA,kBACP,WAAW;AAAA,kBACX,QAAQ,SAAS,UAAU;AAAA,kBAC3B,YAAW;AAAA,kBACZ;AAAA;AAAA,cAED;AAAA,cACA,4CAAC,yBAAO,MAAM,GAAG,UAAU,GAAG,YAAW,cAAa,WAAU,WAAU,WAAU,QACjF,mBACH;AAAA,eACF;AAAA;AAAA,QAEJ,GACF;AAAA,QACA;AAAA,UAAC,yBAAU;AAAA,UAAV;AAAA,YACC,YAAY,EAAE,UAAU,KAAK,QAAQ,YAAY,YAAY,aAAa;AAAA,YAE1E,sDAAC,yBAAU,SAAV,EAAkB,eAAc,KAAI,mBAAmB,OAAO,MAAM,KACnE,sDAAC,yBAAO,aAAY,KAAK,UAAS,GACpC;AAAA;AAAA,QACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,WAAW,EAAE,KAAK,GAA6B;AACtD,QAAM,EAAE,GAAG,KAAK,IAAI,QAAQ;AAC5B,QAAM,aAAa,KAAK;AACxB,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,QACJ,WAAW,eAAe,YACtB,EAAE,QAAQ,WAAW,YAAY,KAAK,WAAW,SAAS,IAAI,MAAS,IACvE,WAAW,eAAe,gBACxB,EAAE,oBACF,EAAE;AACV,QAAM,OACJ,WAAW,eAAe,YACtB,SACA,WAAW,eAAe,gBACxB,SACA;AACR,SACE,4EACE;AAAA,gDAAC,QAAK,SAAO,MAAC,MACX,iBACH;AAAA,IACC,WAAW,SACV,4CAAC,QAAK,SAAO,MAAC,MAAK,QAChB,YAAE,eACL;AAAA,KAEJ;AAEJ;AAEA,SAAS,IAAI,EAAE,KAAK,GAA6B;AAC/C,QAAM,EAAE,GAAG,MAAM,IAAI,QAAQ;AAC7B,SAAO,KAAK,MAAM,WAAW,SAAY,4CAAC,QAAM,YAAE,IAAI,MAAM,KAAK,KAAK,MAAM,CAAC,GAAE,IAAU;AAC3F;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,SACE,6CAAC,yBAAO,KAAI,KAAI,YAAW,cAAa,iBAAgB,KAAI,SAAS,UAAU,MAAM,GACnF;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,iBAAiB,CAAC,UAAU,WAAW,UAAU,IAAI;AAAA,QACrD,MAAK;AAAA,QACL,WAAU;AAAA,QAEV,sDAAC,wBAAS,WAAT,EACC,sDAAC,uBAAK,UAAS,MAAK,oBAAC,GACvB;AAAA;AAAA,IACF;AAAA,IACA,4CAAC,wBAAM,SAAS,IAAI,MAAM,GAAG,UAAU,GAAG,QAAO,WAC/C,uDAAC,yBAAO,KAAI,KACV;AAAA,kDAAC,uBAAK,YAAW,OAAM,oBAAoB,UAAU,iBAAiB,QACpE,sDAAC,gBAAa,KAAK,KAAK,KAAM,eAAK,OAAM,GAC3C;AAAA,MACA,4CAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB,eAAK,WACR;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEO,SAAS,WAAW,OAAwB;AACjD,SACE,4CAAC,cAAW,QAAQ,MAAM,QAAQ,UAAU,MAAM,UAChD,sDAAC,kBAAgB,GAAG,OAAO,GAC7B;AAEJ;AAEA,SAAS,eAAe,EAAE,MAAM,OAAO,OAAO,oBAAI,IAAI,GAAG,SAAS,GAAoB;AACpF,QAAM,EAAE,GAAG,OAAO,MAAM,aAAa,IAAI,QAAQ;AACjD,QAAM,YAAY,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE;AACtE,QAAM,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AACxE,SACE,6CAAC,yBAAO,KAAI,KACV;AAAA,iDAAC,yBAAO,UAAS,QAAO,KAAI,KAC1B;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE;AAAA,UACT,OAAO,KAAK,KAAK,aAAa;AAAA,UAC9B,MAAM,aAAa,KAAK,eAAe,KAAK,SAAS;AAAA;AAAA,MACvD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE;AAAA,UACT,OAAO,KAAK,KAAK,SAAS;AAAA,UAC1B,MAAM,aAAa,KAAK,WAAW,KAAK,SAAS;AAAA;AAAA,MACnD;AAAA,MACC,KAAK,YAAY,SAChB,4CAAC,QAAK,OAAO,EAAE,aAAa,OAAO,EAAE,QAAQ,MAAM,EAAE,gBAAgB,IAErE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE;AAAA,UACT,OAAO,KAAK,KAAK,WAAW;AAAA,UAC5B,MACE,KAAK,UACH,4CAAC,uBAAK,OAAM,aAAa,YAAE,QAAQ,KAAK,aAAa,CAAC,GAAE,IAExD,4CAAC,uBAAK,OAAM,WAAW,YAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,GAAE;AAAA;AAAA,MAG/D;AAAA,MAEF,4CAAC,QAAK,OAAO,EAAE,UAAU,OAAO,GAAG,SAAS,MAAM,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,gBAAgB;AAAA,MAC9F,SACC;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE;AAAA,UACT,OACE,4EACG;AAAA,kBAAM,MAAM,OAAO;AAAA,YAAE;AAAA,YAAC,4CAAC,uBAAK,UAAS,MAAM,YAAE,SAAQ;AAAA,aACxD;AAAA,UAEF,MAAM,EAAE,QAAQ,MAAM,MAAM,MAAM,CAAC;AAAA;AAAA,MACrC;AAAA,OAEJ;AAAA,IACA,4CAAC,yBAAO,QAAQ,GAAG,iBAAgB,WAAU,cAAa,QAAO,UAAS,UACxE;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAO,GAAG,KAAK,MAAM,SAAU,YAAY,KAAK,MAAM,SAAU,MAAM,CAAC;AAAA,QACvE,iBAAgB;AAAA;AAAA,IAClB,GACF;AAAA,IACC,KAAK,OAAO,IAAI,CAAC,OAAO,UAAU;AACjC,YAAM,YAAY,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE;AACxE,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM,YAAY,KAAK,MAAM,OAAO;AAAA,UACpC,SACE,6CAAC,yBAAO,KAAI,KACV;AAAA,yDAAC,yBAAO,KAAI,KAAI,YAAW,UAAS,UAAS,QAC3C;AAAA,0DAAC,QAAK,MAAK,QAAO,SAAO,MACtB,kBAAQ,GACX;AAAA,cACA,4CAAC,uBAAK,YAAW,OAAO,gBAAM,OAAM;AAAA,cACpC,4CAAC,QAAK,MAAM,cAAc,IAAI,SAAS,WAAW,SAAS,cAAc,GACtE,wBAAc,IAAI,EAAE,OAAO,EAAE,KAAK,SAAS,GAC9C;AAAA,eACF;AAAA,YACA,6CAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB;AAAA,mBAAK,MAAM,KAAK;AAAA,cAChB,MAAM,MAAM,WAAM,KAAK,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,MAAM;AAAA,eACrD;AAAA,aACF;AAAA,UAGF,uDAAC,yBAAO,KAAI,KACV;AAAA,wDAAC,4BAAU,UAAS,MAAK,OAAM,qBAC5B,gBAAM,aACT;AAAA,YACC,MAAM,MAAM,IAAI,CAAC,SAAS;AACzB,oBAAM,QAAQ,KAAK,UAChB,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC,EACxB,OAAO,CAAC,SAAiC,QAAQ,IAAI,CAAC,EACtD,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,SAAS,KAAK,KAAK;AAE3B,oBAAM,YAAY,QAAQ,KAAK,iBAAkB,KAAK,UAAU,KAAK,KAAK,QAAS;AACnF,qBACE,6CAAC,yBAA0B,KAAI,KAC7B;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,IAAI,QAAQ,KAAK,KAAK,EAAE;AAAA,oBACxB,MAAM,KAAK;AAAA,oBACX,SAAS,KAAK,IAAI,KAAK,KAAK,EAAE;AAAA,oBAC9B,UAAU,WAAW,CAAC,YAAY,SAAS,KAAK,KAAK,IAAI,OAAO,IAAI;AAAA;AAAA,gBACtE;AAAA,gBACA,6CAAC,yBAAO,UAAS,QAAO,KAAI,OAAM,aAAY,KAC3C;AAAA,8BACC,4CAAC,QAAK,SAAO,MAAC,MAAK,OAChB,YAAE;AAAA,oBACD,KAAK,KAAK,iBAAiB,KAAK,MAAM;AAAA,oBACtC,aAAa,KAAK,iBAAiB,KAAK,QAAQ,KAAK,SAAS;AAAA,kBAChE,GACF,IACE,KAAK,SACP,4CAAC,QAAM,YAAE,GAAG,KAAK,KAAK,MAAM,CAAC,GAAE,IAC7B;AAAA,kBACJ,4CAAC,OAAI,MAAM,KAAK,MAAM;AAAA,kBACtB,4CAAC,QAAM,YAAE,YAAY,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,WAAU;AAAA,kBACjE,4CAAC,cAAW,MAAM,KAAK,MAAM;AAAA,mBAC/B;AAAA,gBACC,aACC,4CAAC,uBAAK,UAAS,MAAK,OAAM,qBAAoB,aAAY,KACvD,YAAE,YAAY,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,GACrD;AAAA,gBAED,MAAM,SAAS,KACd,6CAAC,uBAAK,UAAS,MAAK,OAAM,qBAAoB,aAAY,KACvD;AAAA,oBAAE;AAAA,kBAAM;AAAA,kBAAE,MAAM,KAAK,IAAI;AAAA,mBAC5B;AAAA,mBA9BS,KAAK,KAAK,EAgCvB;AAAA,YAEJ,CAAC;AAAA,aACH;AAAA;AAAA,QAtEK,MAAM;AAAA,MAuEb;AAAA,IAEJ,CAAC;AAAA,IACD,4CAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB,YAAE,UACL;AAAA,KACF;AAEJ;AAEA,SAAS,YAAY,MAAsB,SAA4B;AACrE,QAAM,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC;AACvC,UACG,QAAQ,iBAAiB,SAAS,KAAK,iBAAiB,QAAQ,kBAChE,QAAQ,aAAa,SAAS,KAAK,aAAa,QAAQ,cACxD,QAAQ,UAAU,SAAU,QAAQ,UAAU,eAAgB,WAAW,IAAI,OAC7E,CAAC,SAAS,KAAK,GAAG,KAAK,KAAK,IAAI,KAAK,SAAS,IAAI,KAAK,WAAW,IAAI,KAAK,MAAM,EAAE,EAAE,SAAS,KAAK;AAExG;AAEO,SAAS,kBAAkB,OAAyB,SAA8C;AACvG,SAAO,MAAM,OAAO,CAAC,SAAS,YAAY,MAAM,OAAO,CAAC;AAC1D;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AACF,GAGG;AACD,QAAM,EAAE,GAAG,OAAO,KAAK,IAAI,QAAQ;AACnC,QAAM,OAAmC,CAAC,CAAC,EAAE,cAAc,KAAK,MAAM,CAAC;AACvE,MAAI,KAAK,YAAa,MAAK,KAAK,CAAC,EAAE,YAAY,QAAQ,KAAK,WAAW,KAAK,KAAK,WAAW,CAAC;AAC7F,MAAI,KAAK,aAAa;AACpB,SAAK,KAAK;AAAA,MACR,EAAE;AAAA,MACF,KAAK,YACF;AAAA,QACC,CAAC,SACC,KAAK,eACL,GAAG,EAAE,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,UAAU,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA,MACtJ,EACC,KAAK,IAAI;AAAA,IACd,CAAC;AACH,MAAI,KAAK,YAAY,OAAQ,MAAK,KAAK,CAAC,EAAE,YAAY,KAAK,WAAW,KAAK,IAAI,CAAC,CAAC;AACjF,OAAK,KAAK,CAAC,EAAE,WAAW,4CAAC,gBAAa,KAAK,KAAK,KAAM,eAAK,WAAU,CAAe,CAAC;AACrF,QAAM,MAAM;AAAA,IACV,KAAK,SAAS,EAAE,KAAK,KAAK,MAAM,IAAI;AAAA,IACpC,KAAK,cAAc,SACf,KAAK,aAAa,IAAI,CAAC,WAAW,EAAE,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK,IAAI,IAC9E;AAAA,IACJ,KAAK;AAAA,EACP,EAAE,OAAO,OAAO;AAChB,MAAI,IAAI,OAAQ,MAAK,KAAK,CAAC,EAAE,WAAW,IAAI,KAAK,QAAK,CAAC,CAAC;AACxD,MAAI,KAAK,QAAS,MAAK,KAAK,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC;AACrD,MAAI,KAAK;AACP,SAAK,KAAK;AAAA,MACR,EAAE;AAAA,MACF,GAAG,MAAM,KAAK,QAAQ,MAAM,CAAC,GAAG,KAAK,QAAQ,kBAAkB,EAAE,aAAa,KAAK,QAAQ,eAAe,IAAI,EAAE,GAAG,KAAK,QAAQ,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,EAAE;AAAA,IACtK,CAAC;AACH,QAAM,aAAa,KAAK;AACxB,MAAI,YAAY,QAAQ,QAAQ;AAC9B,UAAM,UACJ,WAAW,iBACX,WAAW,QAAQ,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,eAAwB,YAAY,GAAG,EAAE;AACzF,SAAK,KAAK;AAAA,MACR,EAAE;AAAA,MACF,2EACG,kBAAQ,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,UAChC,6CAAC,UACE;AAAA,gBAAQ,KAAK;AAAA,QACd,4CAAC,gBAAa,KAAK,OAAO,KAAM,eAAK,OAAO,GAAG,GAAE;AAAA,QAChD,OAAO,SAAS,QAAQ,EAAE,MAAM;AAAA,QAChC,OAAO,aACN,4EACG;AAAA;AAAA,UAAI;AAAA,UACJ,4CAAC,gBAAa,KAAK,OAAO,YAAa,YAAE,cAAa;AAAA,UAAe;AAAA,WACxE,IACE;AAAA,WATK,OAAO,GAUlB,CACD,GACH;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI;AACF,SAAK,KAAK;AAAA,MACR,EAAE;AAAA,MACF,GAAG,WAAW,eAAe,aAAa,WAAW,YAAY,EAAE,eAAe,KAAK,WAAW,SAAS,CAAC,IAAI,EAAE,aAAa,WAAW,aAAa,KAAK,WAAW,UAAU,IAAI,MAAS,CAAC,GAAG,WAAW,WAAW,KAAK,WAAW,QAAQ,EAAE,mBAAmB,KAAK,WAAW,QAAQ,CAAC,IAAI,EAAE,YAAY,KAAK,WAAW,QAAQ,CAAC,CAAC,MAAM,EAAE;AAAA,IACpV,CAAC;AACH,MAAI,KAAK;AACP,SAAK,KAAK,CAAC,EAAE,YAAY,4CAAC,gBAAa,KAAK,KAAK,aAAc,YAAE,UAAS,CAAe,CAAC;AAC5F,SACE,6CAAC,yBAAO,KAAI,KAAI,eAAc,KAC5B;AAAA,gDAAC,4BAAW,eAAK,aAAY;AAAA,IAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,MACtB,6CAAC,yBAAmB,KAAI,KAAI,WAAU,KAAI,UAAS,QACjD;AAAA,kDAAC,uBAAK,UAAS,MAAK,YAAW,OAAM,OAAO,KACzC,iBACH;AAAA,MACA,4CAAC,uBAAK,UAAS,MAAK,MAAM,GAAG,WAAW,KAAK,UAAU,GACpD,iBACH;AAAA,SANW,KAOb,CACD;AAAA,KACH;AAEJ;AAEO,SAAS,gBAAgB,OAA6B;AAC3D,SACE,4CAAC,cAAW,QAAQ,MAAM,QAAQ,UAAU,MAAM,UAChD,sDAAC,uBAAqB,GAAG,OAAO,GAClC;AAEJ;AAEA,SAAS,oBAAoB,EAAE,OAAO,MAAM,SAAS,UAAU,GAAyB;AACtF,QAAM,EAAE,GAAG,KAAK,MAAM,aAAa,IAAI,QAAQ;AAC/C,QAAM,gBAAgB,CAAC,aAAyC,EAAE,WAAW,QAAQ,KAAK;AAC1F,QAAM,aAAa,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,EAAE;AAAA,IAAK,CAAC,GAAG,MAC3E,cAAc,CAAC,EAAE,cAAc,cAAc,CAAC,GAAG,GAAG;AAAA,EACtD;AACA,QAAM,WAAW,kBAAkB,OAAO,OAAO;AACjD,QAAM,YAAY,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC;AACpE,QAAM,QAAQ,CAAC,iBACb,MAAM,OAAO,CAAC,SAAS,YAAY,MAAM,EAAE,GAAG,SAAS,aAAa,CAAC,CAAC,EAAE;AAC1E,QAAM,gBAAgB,CAAC,aACrB,MAAM,OAAO,CAAC,SAAS,YAAY,MAAM,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC,EAAE;AACtE,QAAM,aACJ,QAAQ,iBAAiB,SACzB,QAAQ,aAAa,SACrB,QAAQ,UAAU,MAClB,QAAQ,UAAU;AACpB,QAAM,eAAe,MAAM,UAAU,EAAE,GAAG,sBAAsB,CAAC;AACjE,SACE,6CAAC,yBAAO,KAAI,KACV;AAAA,iDAAC,yBAAO,gBAAe,iBAAgB,KAAI,KAAI,UAAS,QAAO,YAAW,YACxE;AAAA,mDAAC,yBAAO,KAAI,OACV;AAAA,oDAAC,uBAAK,YAAW,OAAO,YAAE,gBAAe;AAAA,QACzC,4CAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB,YAAE,QAAQ,SAAS,QAAQ,MAAM,MAAM,GAC1C;AAAA,SACF;AAAA,MACC,cACC,4CAAC,yBAAO,MAAK,MAAK,SAAS,cACxB,YAAE,cACL;AAAA,OAEJ;AAAA,IACA,6CAAC,yBAAO,KAAI,KAAI,UAAS,QAAO,YAAY,YAC1C;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa,EAAE;AAAA,UACf,cAAY,EAAE;AAAA,UACd,OAAO,QAAQ;AAAA,UACf,cAAc,CAAC,UAAU,UAAU,EAAE,GAAG,SAAS,MAAM,CAAC;AAAA;AAAA,MAC1D;AAAA,MACA,6CAAC,yBAAO,WAAW,KAAK,UAAU,GAAG,KAAI,OACvC;AAAA,oDAAC,wBAAM,SAAQ,uBAAsB,UAAS,MAAK,OAAM,qBACtD,YAAE,UACL;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,cAAY,EAAE;AAAA,YACd,OAAO;AAAA,YACP,OAAO,QAAQ;AAAA,YACf,UAAU,CAAC,UAAU,UAAU,EAAE,GAAG,SAAS,UAAU,MAAM,OAAO,MAAM,CAAC;AAAA,YAE3E;AAAA,0DAAC,YAAO,OAAM,OAAO,YAAE,eAAc;AAAA,cACpC,WAAW,IAAI,CAAC,aACf,6CAAC,YAAsB,OAAO,UAC3B;AAAA,8BAAc,QAAQ;AAAA,gBAAE;AAAA,gBAAG,cAAc,QAAQ;AAAA,gBAAE;AAAA,mBADzC,QAEb,CACD;AAAA;AAAA;AAAA,QACH;AAAA,SACF;AAAA,MACA,6CAAC,yBAAO,WAAW,KAAK,UAAU,GAAG,KAAI,OACvC;AAAA,oDAAC,wBAAM,SAAQ,oBAAmB,UAAS,MAAK,OAAM,qBACnD,YAAE,gBACL;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,cAAY,EAAE;AAAA,YACd,OAAO;AAAA,YACP,OAAO,QAAQ;AAAA,YACf,UAAU,CAAC,UACT,UAAU,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,MAAoC,CAAC;AAAA,YAGnF;AAAA,0DAAC,YAAO,OAAM,OAAO,YAAE,qBAAoB;AAAA,cAC3C,4CAAC,YAAO,OAAM,YAAY,YAAE,wBAAuB;AAAA,cACnD,4CAAC,YAAO,OAAM,cAAc,YAAE,mBAAkB;AAAA;AAAA;AAAA,QAClD;AAAA,SACF;AAAA,OACF;AAAA,IACA,4CAAC,yBAAO,KAAI,OAAM,UAAS,QACvB,WAAC,OAAO,GAAG,aAAa,EAAY,IAAI,CAAC,QACzC;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,QAAQ,iBAAiB,MAAM,WAAW;AAAA,QACjD,UAAU,MAAM,GAAG,MAAM,KAAK,QAAQ;AAAA,QACtC,SAAS,MAAM,UAAU,EAAE,GAAG,SAAS,cAAc,IAAI,CAAC;AAAA,QAC1D,gBAAc,QAAQ,iBAAiB;AAAA,QAEtC;AAAA,kBAAQ,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG;AAAA,UAAE;AAAA,UAAE,QAAQ,QAAQ,SAAS,SAAS,MAAM,GAAG;AAAA;AAAA;AAAA,MAPtF;AAAA,IAQP,CACD,GACH;AAAA,IACC,SAAS,WAAW,IACnB,4CAAC,uBAAK,OAAM,qBAAqB,YAAE,SAAQ,IAE3C,cAAc,IAAI,CAAC,iBAAiB;AAClC,YAAM,QAAQ,SACX,OAAO,CAAC,SAAS,KAAK,iBAAiB,YAAY,EACnD,KAAK,CAAC,GAAG,OAAO,EAAE,WAAW,cAAc,cAAc,EAAE,WAAW,YAAY,CAAC;AACtF,UAAI,CAAC,MAAM,OAAQ,QAAO;AAC1B,aACE,6CAAC,yBACC;AAAA,qDAAC,yBAAO,KAAI,KAAI,YAAW,UAAS,YAAW,KAAI,eAAc,KAC/D;AAAA,sDAAC,uBAAK,QAAO,MAAK,UAAS,MAAK,YAAW,OAAM,QAAQ,GACtD,YAAE,cAAc,YAAY,GAC/B;AAAA,UACA,4CAAC,QAAK,MAAK,QAAQ,gBAAM,QAAO;AAAA,WAClC;AAAA,QACA,4CAAC,yBAAO,KAAI,KACT,gBAAM,IAAI,CAAC,SACV;AAAA,UAAC;AAAA;AAAA,YAEC,MAAI;AAAA,YACJ,OAAO;AAAA,YACP,SACE,6CAAC,yBAAO,KAAI,OAAM,YAAW,cAAa,OAAM,QAC9C;AAAA,0DAAC,uBAAK,YAAW,OAAM,WAAU,QAAO,WAAU,WAChD,sDAAC,gBAAa,KAAK,KAAK,KAAM,eAAK,OAAM,GAC3C;AAAA,cACA,4CAAC,uBAAK,UAAS,MAAK,OAAM,qBACvB,eAAK,WACR;AAAA,cACA,6CAAC,yBAAO,KAAI,OAAM,UAAS,QACxB;AAAA,qBAAK,UACJ,4CAAC,QAAK,MAAM,OAAO,KAAK,SAAS,IAAI,IAAI,SAAS,QAAQ,SAAO,MAC9D,YAAE,MAAM,KAAK,KAAK,OAAO,GAAG,aAAa,KAAK,SAAS,IAAI,CAAC,GAC/D,IACE,KAAK,WACP,4CAAC,QAAM,eAAK,UAAS,IACnB;AAAA,gBACJ,4CAAC,QAAM,YAAE,YAAY,KAAK,SAAS,KAAK,KAAK,WAAU;AAAA,gBACvD,4CAAC,QAAM,wBAAc,KAAK,QAAQ,GAAE;AAAA,gBACpC,4CAAC,OAAI,MAAY;AAAA,gBACjB,4CAAC,cAAW,MAAY;AAAA,iBAC1B;AAAA,eACF;AAAA,YAGF,sDAAC,qBAAkB,MAAY,SAAS,CAAC,OAAO,UAAU,IAAI,EAAE,GAAG;AAAA;AAAA,UA3B9D,KAAK;AAAA,QA4BZ,CACD,GACH;AAAA,WAxCW,YAyCb;AAAA,IAEJ,CAAC;AAAA,KAEL;AAEJ;","names":["messages"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -33,6 +33,8 @@ interface Messages {
|
|
|
33
33
|
after: string;
|
|
34
34
|
dueOn: (date: string, relative: string) => string;
|
|
35
35
|
by: (date: string) => string;
|
|
36
|
+
/** What makes a legal deadline apply: the reason it applies and, when the rule has one, its schedule. */
|
|
37
|
+
triggeredBy: (reason: string, schedule?: string) => string;
|
|
36
38
|
planNote: string;
|
|
37
39
|
fee: (amount: string) => string;
|
|
38
40
|
checked: (date?: string) => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ interface Messages {
|
|
|
33
33
|
after: string;
|
|
34
34
|
dueOn: (date: string, relative: string) => string;
|
|
35
35
|
by: (date: string) => string;
|
|
36
|
+
/** What makes a legal deadline apply: the reason it applies and, when the rule has one, its schedule. */
|
|
37
|
+
triggeredBy: (reason: string, schedule?: string) => string;
|
|
36
38
|
planNote: string;
|
|
37
39
|
fee: (amount: string) => string;
|
|
38
40
|
checked: (date?: string) => string;
|
package/dist/index.js
CHANGED
|
@@ -22,9 +22,10 @@ var en = {
|
|
|
22
22
|
toDo: (n) => `${n} to do`,
|
|
23
23
|
onward: "onward",
|
|
24
24
|
after: "After:",
|
|
25
|
-
dueOn: (date, relative) => `
|
|
26
|
-
by: (date) => `
|
|
27
|
-
|
|
25
|
+
dueOn: (date, relative) => `Statutory deadline: ${date} \xB7 ${relative}`,
|
|
26
|
+
by: (date) => `Suggested planning date: ${date}`,
|
|
27
|
+
triggeredBy: (reason, schedule) => `Applies because: ${reason}.${schedule ? ` Schedule: ${schedule}.` : ""}`,
|
|
28
|
+
planNote: "Suggested planning dates are allowances, not agency processing times. Statutory deadlines come from the rules and are labeled as such.",
|
|
28
29
|
fee: (amount) => `fee ${amount}`,
|
|
29
30
|
checked: (date) => `checked${date ? ` ${date}` : ""}`,
|
|
30
31
|
partlyUnconfirmed: "partly unconfirmed",
|
|
@@ -113,9 +114,10 @@ var es = {
|
|
|
113
114
|
toDo: (n) => `${n} por hacer`,
|
|
114
115
|
onward: "en adelante",
|
|
115
116
|
after: "Despu\xE9s de:",
|
|
116
|
-
dueOn: (date, relative) => `
|
|
117
|
-
by: (date) => `
|
|
118
|
-
|
|
117
|
+
dueOn: (date, relative) => `Plazo legal: ${date} \xB7 ${relative}`,
|
|
118
|
+
by: (date) => `Fecha de planificaci\xF3n sugerida: ${date}`,
|
|
119
|
+
triggeredBy: (reason, schedule) => `Se aplica porque: ${reason}.${schedule ? ` Calendario: ${schedule}.` : ""}`,
|
|
120
|
+
planNote: "Las fechas de planificaci\xF3n sugeridas son m\xE1rgenes, no plazos de tr\xE1mite de las agencias. Los plazos legales provienen de las reglas y se indican como tales.",
|
|
119
121
|
fee: (amount) => `tarifa ${amount}`,
|
|
120
122
|
checked: (date) => `verificado${date ? ` ${date}` : ""}`,
|
|
121
123
|
partlyUnconfirmed: "parcialmente sin confirmar",
|
|
@@ -368,7 +370,8 @@ function Disclosure({
|
|
|
368
370
|
summary,
|
|
369
371
|
children,
|
|
370
372
|
open = false,
|
|
371
|
-
card = false
|
|
373
|
+
card = false,
|
|
374
|
+
level
|
|
372
375
|
}) {
|
|
373
376
|
return /* @__PURE__ */ jsx(
|
|
374
377
|
Accordion,
|
|
@@ -377,7 +380,7 @@ function Disclosure({
|
|
|
377
380
|
defaultValue: open ? ["item"] : [],
|
|
378
381
|
...card ? { borderWidth: 1, borderColor: "border-color", borderRadius: "lg", overflow: "hidden" } : { borderTopWidth: 1, borderColor: "border-color" },
|
|
379
382
|
children: /* @__PURE__ */ jsxs(Accordion.Item, { value: "item", children: [
|
|
380
|
-
/* @__PURE__ */ jsx(Accordion.Header, { children: /* @__PURE__ */ jsx(
|
|
383
|
+
/* @__PURE__ */ jsx(Accordion.Header, { render: `h${level}`, children: /* @__PURE__ */ jsx(
|
|
381
384
|
Accordion.Trigger,
|
|
382
385
|
{
|
|
383
386
|
flexDirection: "row",
|
|
@@ -519,6 +522,7 @@ function LaunchListBody({ plan, costs, done = /* @__PURE__ */ new Set(), onToggl
|
|
|
519
522
|
Disclosure,
|
|
520
523
|
{
|
|
521
524
|
card: true,
|
|
525
|
+
level: 2,
|
|
522
526
|
open: remaining > 0 || phase.id === "operate",
|
|
523
527
|
summary: /* @__PURE__ */ jsxs(YStack, { gap: "1", children: [
|
|
524
528
|
/* @__PURE__ */ jsxs(XStack, { gap: "2", alignItems: "center", flexWrap: "wrap", children: [
|
|
@@ -535,6 +539,7 @@ function LaunchListBody({ plan, costs, done = /* @__PURE__ */ new Set(), onToggl
|
|
|
535
539
|
/* @__PURE__ */ jsx(Paragraph, { fontSize: "sm", color: "placeholder-color", children: phase.description }),
|
|
536
540
|
phase.steps.map((step) => {
|
|
537
541
|
const needs = step.dependsOn.map((id) => byId.get(id)).filter((item) => Boolean(item)).slice(0, 2).map((item) => item.title);
|
|
542
|
+
const statutory = Boolean(step.legalDeadline || step.target && step.item.deadline);
|
|
538
543
|
return /* @__PURE__ */ jsxs(YStack, { gap: "1", children: [
|
|
539
544
|
/* @__PURE__ */ jsx(
|
|
540
545
|
CheckStep,
|
|
@@ -546,14 +551,15 @@ function LaunchListBody({ plan, costs, done = /* @__PURE__ */ new Set(), onToggl
|
|
|
546
551
|
}
|
|
547
552
|
),
|
|
548
553
|
/* @__PURE__ */ jsxs(XStack, { flexWrap: "wrap", gap: "1.5", paddingLeft: "8", children: [
|
|
549
|
-
|
|
550
|
-
date(step.legalDeadline),
|
|
551
|
-
relativeDays(step.legalDeadline, plan.startDate)
|
|
554
|
+
statutory ? /* @__PURE__ */ jsx(Chip, { outline: true, tone: "bad", children: m.dueOn(
|
|
555
|
+
date(step.legalDeadline ?? step.target),
|
|
556
|
+
relativeDays(step.legalDeadline ?? step.target, plan.startDate)
|
|
552
557
|
) }) : step.target ? /* @__PURE__ */ jsx(Chip, { children: m.by(date(step.target)) }) : null,
|
|
553
558
|
/* @__PURE__ */ jsx(Fee, { item: step.item }),
|
|
554
559
|
/* @__PURE__ */ jsx(Chip, { children: m.frequencies[step.item.frequency] ?? step.item.frequency }),
|
|
555
560
|
/* @__PURE__ */ jsx(Confidence, { item: step.item })
|
|
556
561
|
] }),
|
|
562
|
+
statutory && /* @__PURE__ */ jsx(Text, { fontSize: "sm", color: "placeholder-color", paddingLeft: "8", children: m.triggeredBy(step.item.reason, step.item.deadline) }),
|
|
557
563
|
needs.length > 0 && /* @__PURE__ */ jsxs(Text, { fontSize: "sm", color: "placeholder-color", paddingLeft: "8", children: [
|
|
558
564
|
m.after,
|
|
559
565
|
" ",
|
|
@@ -734,13 +740,14 @@ function ObligationsListBody({ items, asOf, filters, onFilters }) {
|
|
|
734
740
|
if (!group.length) return null;
|
|
735
741
|
return /* @__PURE__ */ jsxs(YStack, { children: [
|
|
736
742
|
/* @__PURE__ */ jsxs(XStack, { gap: "2", alignItems: "center", paddingTop: "3", paddingBottom: "1", children: [
|
|
737
|
-
/* @__PURE__ */ jsx(Text, { fontSize: "lg", fontWeight: "600", children: m.jurisdictions[jurisdiction] }),
|
|
743
|
+
/* @__PURE__ */ jsx(Text, { render: "h2", fontSize: "lg", fontWeight: "600", margin: 0, children: m.jurisdictions[jurisdiction] }),
|
|
738
744
|
/* @__PURE__ */ jsx(Chip, { tone: "info", children: group.length })
|
|
739
745
|
] }),
|
|
740
746
|
/* @__PURE__ */ jsx(YStack, { gap: "3", children: group.map((item) => /* @__PURE__ */ jsx(
|
|
741
747
|
Disclosure,
|
|
742
748
|
{
|
|
743
749
|
card: true,
|
|
750
|
+
level: 3,
|
|
744
751
|
summary: /* @__PURE__ */ jsxs(YStack, { gap: "1.5", alignItems: "flex-start", width: "100%", children: [
|
|
745
752
|
/* @__PURE__ */ jsx(Text, { fontWeight: "600", textAlign: "left", alignSelf: "stretch", children: /* @__PURE__ */ jsx(ExternalLink, { url: item.url, children: item.title }) }),
|
|
746
753
|
/* @__PURE__ */ jsx(Text, { fontSize: "sm", color: "placeholder-color", children: item.authority }),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/messages.ts"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { ComplianceItem, LaunchPlan } from \"business-obligations\";\nimport { Accordion, Anchor, Button, Checkbox, Input, Label, Paragraph, Text, XStack, YStack } from \"tamagui\";\nimport { getMessages, type Messages } from \"./messages\";\n\nexport interface LaunchListProps {\n plan: LaunchPlan;\n costs?: { oneTime: number; annual: number };\n done?: ReadonlySet<string>;\n onToggle?: (id: string, checked: boolean) => void;\n /**\n * Language of the interface text and of dates, numbers and relative times: \"en\" (default) or \"es\", or any other\n * locale tag together with `messages`. Text from the data is translated separately, with `localizePlan`.\n */\n locale?: string;\n /** Interface text for a language the package does not bundle. */\n messages?: Messages;\n}\n\nexport interface ObligationFilters {\n jurisdiction: string;\n category: string;\n query: string;\n trust: \"all\" | \"verified\" | \"unverified\";\n}\n\nexport const NO_OBLIGATION_FILTERS: ObligationFilters = {\n jurisdiction: \"all\",\n category: \"all\",\n query: \"\",\n trust: \"all\",\n};\n\nexport interface ObligationsListProps {\n items: ComplianceItem[];\n asOf: string;\n filters: ObligationFilters;\n onFilters: (filters: ObligationFilters) => void;\n /** See `LaunchListProps.locale`. */\n locale?: string;\n /** See `LaunchListProps.messages`. */\n messages?: Messages;\n}\n\nconst JURISDICTIONS = [\"federal\", \"state\", \"county\", \"city\"] as const;\n\n/** The interface text and the formatters for one locale. */\ninterface I18n {\n /** BCP 47 tag handed to `Intl`. */\n tag: string;\n m: Messages;\n money: (amount: number) => string;\n date: (value?: string) => string;\n relativeDays: (value: string | undefined, from: string) => string;\n}\n\nfunction createI18n(locale = \"en\", custom?: Messages): I18n {\n // The data is about US businesses, so a bare language code formats numbers and dates the US way (\"$1,250.00\").\n const tag = locale === \"en\" ? \"en-US\" : locale === \"es\" ? \"es-US\" : locale;\n const money = new Intl.NumberFormat(tag, { style: \"currency\", currency: \"USD\", maximumFractionDigits: 2 });\n const day = new Intl.DateTimeFormat(tag, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n const relative = new Intl.RelativeTimeFormat(tag, { numeric: \"auto\" });\n return {\n tag,\n m: custom ?? getMessages(locale),\n money: (amount) => money.format(amount),\n date: (value) => (value ? day.format(new Date(`${value}T00:00:00Z`)) : \"\"),\n relativeDays: (value, from) => {\n if (!value) return \"\";\n const days = Math.round(\n (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${from}T00:00:00Z`)) / 86_400_000,\n );\n return relative.format(days, \"day\");\n },\n };\n}\n\nconst I18nContext = createContext<I18n>(createI18n());\nconst useI18n = () => useContext(I18nContext);\n\nfunction WithLocale({\n locale,\n messages,\n children,\n}: {\n locale?: string;\n messages?: Messages;\n children: ReactNode;\n}) {\n const i18n = useMemo(() => createI18n(locale, messages), [locale, messages]);\n return <I18nContext.Provider value={i18n}>{children}</I18nContext.Provider>;\n}\n\n/** Lower case without accents, so that \"licencia\" finds \"Licencia\" and \"licéncia\". */\nconst fold = (value: string) => value.normalize(\"NFD\").replace(/\\p{M}/gu, \"\").toLowerCase();\n\nconst isVerified = (item: Pick<ComplianceItem, \"provenance\">) =>\n item.provenance?.confidence === \"checked\" && !item.provenance.stale;\n\nconst isSoon = (value: string, asOf: string) => {\n const days = (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${asOf}T00:00:00Z`)) / 86_400_000;\n return days >= 0 && days <= 30;\n};\n\nconst nativeControl = {\n width: \"100%\",\n minHeight: 44,\n padding: \"8px 10px\",\n borderRadius: 8,\n border: \"1px solid var(--border-color)\",\n background: \"var(--background)\",\n color: \"var(--color)\",\n font: \"inherit\",\n fontSize: 16,\n};\n\nconst safeUrl = (value?: string) => {\n if (!value) return undefined;\n try {\n const url = new URL(value);\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.href : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst host = (value: string) => {\n try {\n return new URL(value).hostname.replace(/^www\\./, \"\");\n } catch {\n return value;\n }\n};\n\nfunction ExternalLink({ url, children }: { url?: string; children: ReactNode }) {\n const href = safeUrl(url);\n return href ? (\n <Anchor\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"accent-background\"\n textDecorationLine=\"underline\"\n textAlign=\"left\"\n >\n {children}\n </Anchor>\n ) : (\n <Text>{children}</Text>\n );\n}\n\nfunction Stat({ label, value, note }: { label: string; value: ReactNode; note?: ReactNode }) {\n return (\n <YStack flexBasis={150} flexGrow={1} backgroundColor=\"color-2\" borderRadius=\"md\" padding=\"3\" gap=\"0.5\">\n <Text fontSize=\"xs\" color=\"placeholder-color\">\n {label}\n </Text>\n <Text fontSize=\"xl\" fontWeight=\"600\">\n {value}\n </Text>\n {note && (\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {note}\n </Text>\n )}\n </YStack>\n );\n}\n\nfunction Chip({\n children,\n tone = \"neutral\",\n outline = false,\n title,\n}: {\n children: ReactNode;\n tone?: \"neutral\" | \"good\" | \"warn\" | \"bad\" | \"info\";\n outline?: boolean;\n title?: string;\n}) {\n const color = {\n neutral: \"color\",\n good: \"green-600\",\n warn: \"amber-600\",\n bad: \"red-600\",\n info: \"accent-background\",\n }[tone];\n return (\n <XStack\n borderWidth={1}\n borderColor={outline ? color : \"transparent\"}\n backgroundColor={outline ? \"transparent\" : \"color-2\"}\n borderRadius=\"md\"\n paddingHorizontal=\"2\"\n paddingVertical=\"0.5\"\n {...(title ? { \"aria-label\": title } : {})}\n >\n <Text fontSize=\"xs\" color={outline ? color : \"color\"}>\n {children}\n </Text>\n </XStack>\n );\n}\n\nfunction Disclosure({\n summary,\n children,\n open = false,\n card = false,\n}: {\n summary: ReactNode;\n children: ReactNode;\n open?: boolean;\n card?: boolean;\n}) {\n return (\n <Accordion\n type=\"multiple\"\n defaultValue={open ? [\"item\"] : []}\n {...(card\n ? { borderWidth: 1, borderColor: \"border-color\", borderRadius: \"lg\", overflow: \"hidden\" }\n : { borderTopWidth: 1, borderColor: \"border-color\" })}\n >\n <Accordion.Item value=\"item\">\n <Accordion.Header>\n <Accordion.Trigger\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n gap=\"2.5\"\n paddingVertical=\"3\"\n paddingHorizontal={card ? \"3\" : \"0\"}\n width=\"100%\"\n alignSelf=\"stretch\"\n justifyContent=\"flex-start\"\n textAlign=\"left\"\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor=\"pointer\"\n >\n {({ open: isOpen }: { open: boolean }) => (\n <>\n <Text\n color=\"placeholder-color\"\n width={14}\n marginTop={2}\n rotate={isOpen ? \"90deg\" : \"0deg\"}\n transition=\"transform 180ms ease-out\"\n >\n ▸\n </Text>\n <YStack flex={1} minWidth={0} alignItems=\"flex-start\" alignSelf=\"stretch\" textAlign=\"left\">\n {summary}\n </YStack>\n </>\n )}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.HeightAnimator\n transition={{ duration: 220, easing: \"ease-out\", properties: \"min-height\" }}\n >\n <Accordion.Content paddingBottom=\"3\" paddingHorizontal={card ? \"3\" : \"0\"}>\n <YStack paddingLeft=\"6\">{children}</YStack>\n </Accordion.Content>\n </Accordion.HeightAnimator>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nfunction Confidence({ item }: { item: ComplianceItem }) {\n const { m, date } = useI18n();\n const provenance = item.provenance;\n if (!provenance) return null;\n const label =\n provenance.confidence === \"checked\"\n ? m.checked(provenance.checkedOn ? date(provenance.checkedOn) : undefined)\n : provenance.confidence === \"unconfirmed\"\n ? m.partlyUnconfirmed\n : m.notIndividuallyChecked;\n const tone =\n provenance.confidence === \"checked\"\n ? \"good\"\n : provenance.confidence === \"unconfirmed\"\n ? \"warn\"\n : \"neutral\";\n return (\n <>\n <Chip outline tone={tone}>\n {label}\n </Chip>\n {provenance.stale && (\n <Chip outline tone=\"warn\">\n {m.reviewOverdue}\n </Chip>\n )}\n </>\n );\n}\n\nfunction Fee({ item }: { item: ComplianceItem }) {\n const { m, money } = useI18n();\n return item.cost?.amount !== undefined ? <Chip>{m.fee(money(item.cost.amount))}</Chip> : null;\n}\n\nfunction CheckStep({\n id,\n item,\n checked,\n onChange,\n}: {\n id: string;\n item: ComplianceItem;\n checked: boolean;\n onChange?: (checked: boolean) => void;\n}) {\n return (\n <XStack gap=\"3\" alignItems=\"flex-start\" paddingVertical=\"1\" opacity={checked ? 0.6 : 1}>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(value) => onChange?.(value === true)}\n size=\"md\"\n marginTop=\"0.5\"\n >\n <Checkbox.Indicator>\n <Text fontSize=\"xs\">✓</Text>\n </Checkbox.Indicator>\n </Checkbox>\n <Label htmlFor={id} flex={1} minWidth={0} cursor=\"pointer\">\n <YStack gap=\"1\">\n <Text fontWeight=\"600\" textDecorationLine={checked ? \"line-through\" : \"none\"}>\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n </YStack>\n </Label>\n </XStack>\n );\n}\n\nexport function LaunchList(props: LaunchListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <LaunchListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction LaunchListBody({ plan, costs, done = new Set(), onToggle }: LaunchListProps) {\n const { m, money, date, relativeDays } = useI18n();\n const completed = plan.steps.filter((step) => done.has(step.item.id)).length;\n const byId = new Map(plan.steps.map((step) => [step.item.id, step.item]));\n return (\n <YStack gap=\"4\">\n <XStack flexWrap=\"wrap\" gap=\"3\">\n <Stat\n label={m.fileFormation}\n value={date(plan.formationDate)}\n note={relativeDays(plan.formationDate, plan.startDate)}\n />\n <Stat\n label={m.readyToOperate}\n value={date(plan.readyDate)}\n note={relativeDays(plan.readyDate, plan.startDate)}\n />\n {plan.onTrack === undefined ? (\n <Stat label={m.openingDate} value={m.notSet} note={m.addOpeningDate} />\n ) : (\n <Stat\n label={m.opening}\n value={date(plan.openingDate)}\n note={\n plan.onTrack ? (\n <Text color=\"green-600\">{m.onTrack(plan.slackDays ?? 0)}</Text>\n ) : (\n <Text color=\"red-600\">{m.tooSoon(-(plan.slackDays ?? 0))}</Text>\n )\n }\n />\n )}\n <Stat label={m.progress} value={`${completed} / ${plan.steps.length}`} note={m.savedInBrowser} />\n {costs && (\n <Stat\n label={m.knownFees}\n value={\n <>\n {money(costs.oneTime)} <Text fontSize=\"sm\">{m.oneTime}</Text>\n </>\n }\n note={m.perYear(money(costs.annual))}\n />\n )}\n </XStack>\n <YStack height={6} backgroundColor=\"color-3\" borderRadius=\"full\" overflow=\"hidden\">\n <XStack\n height=\"100%\"\n width={`${plan.steps.length ? (completed / plan.steps.length) * 100 : 0}%`}\n backgroundColor=\"accent-background\"\n />\n </YStack>\n {plan.phases.map((phase, index) => {\n const remaining = phase.steps.filter((step) => !done.has(step.item.id)).length;\n return (\n <Disclosure\n key={phase.id}\n card\n open={remaining > 0 || phase.id === \"operate\"}\n summary={\n <YStack gap=\"1\">\n <XStack gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Chip tone=\"info\" outline>\n {index + 1}\n </Chip>\n <Text fontWeight=\"600\">{phase.title}</Text>\n <Chip tone={remaining === 0 ? \"good\" : \"neutral\"} outline={remaining === 0}>\n {remaining === 0 ? m.done : m.toDo(remaining)}\n </Chip>\n </XStack>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {date(phase.start)}\n {phase.end ? ` → ${date(phase.end)}` : ` ${m.onward}`}\n </Text>\n </YStack>\n }\n >\n <YStack gap=\"2\">\n <Paragraph fontSize=\"sm\" color=\"placeholder-color\">\n {phase.description}\n </Paragraph>\n {phase.steps.map((step) => {\n const needs = step.dependsOn\n .map((id) => byId.get(id))\n .filter((item): item is ComplianceItem => Boolean(item))\n .slice(0, 2)\n .map((item) => item.title);\n return (\n <YStack key={step.item.id} gap=\"1\">\n <CheckStep\n id={`step-${step.item.id}`}\n item={step.item}\n checked={done.has(step.item.id)}\n onChange={onToggle ? (checked) => onToggle(step.item.id, checked) : undefined}\n />\n <XStack flexWrap=\"wrap\" gap=\"1.5\" paddingLeft=\"8\">\n {step.legalDeadline ? (\n <Chip outline tone=\"bad\">\n {m.dueOn(\n date(step.legalDeadline),\n relativeDays(step.legalDeadline, plan.startDate),\n )}\n </Chip>\n ) : step.target ? (\n <Chip>{m.by(date(step.target))}</Chip>\n ) : null}\n <Fee item={step.item} />\n <Chip>{m.frequencies[step.item.frequency] ?? step.item.frequency}</Chip>\n <Confidence item={step.item} />\n </XStack>\n {needs.length > 0 && (\n <Text fontSize=\"sm\" color=\"placeholder-color\" paddingLeft=\"8\">\n {m.after} {needs.join(\"; \")}\n </Text>\n )}\n </YStack>\n );\n })}\n </YStack>\n </Disclosure>\n );\n })}\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.planNote}\n </Text>\n </YStack>\n );\n}\n\nfunction itemMatches(item: ComplianceItem, filters: ObligationFilters) {\n const query = fold(filters.query.trim());\n return (\n (filters.jurisdiction === \"all\" || item.jurisdiction === filters.jurisdiction) &&\n (filters.category === \"all\" || item.category === filters.category) &&\n (filters.trust === \"all\" || (filters.trust === \"verified\") === isVerified(item)) &&\n (!query || fold(`${item.title} ${item.authority} ${item.description} ${item.reason}`).includes(query))\n );\n}\n\nexport function filterObligations(items: ComplianceItem[], filters: ObligationFilters): ComplianceItem[] {\n return items.filter((item) => itemMatches(item, filters));\n}\n\nfunction ObligationDetails({\n item,\n titleOf,\n}: {\n item: ComplianceItem;\n titleOf: (id: string) => string | undefined;\n}) {\n const { m, money, date } = useI18n();\n const rows: Array<[string, ReactNode]> = [[m.whyItApplies, item.reason]];\n if (item.preemptedBy) rows.push([m.replacedBy, titleOf(item.preemptedBy) ?? item.preemptedBy]);\n if (item.appliesWhen?.length)\n rows.push([\n m.appliesWhen,\n item.appliesWhen\n .map(\n (when) =>\n when.description ??\n `${m.fields[when.field] ?? when.field} ${m.operators[when.op] ?? when.op} ${Array.isArray(when.value) ? when.value.join(\", \") : String(when.value)}`,\n )\n .join(\"; \"),\n ]);\n if (item.exemptions?.length) rows.push([m.exceptions, item.exemptions.join(\"; \")]);\n rows.push([m.authority, <ExternalLink url={item.url}>{item.authority}</ExternalLink>]);\n const how = [\n item.formId ? m.form(item.formId) : undefined,\n item.filingMethod?.length\n ? item.filingMethod.map((method) => m.filingMethods[method] ?? method).join(\", \")\n : undefined,\n item.processingTime,\n ].filter(Boolean);\n if (how.length) rows.push([m.howToFile, how.join(\" · \")]);\n if (item.renewal) rows.push([m.renewal, item.renewal]);\n if (item.penalty)\n rows.push([\n m.ifLate,\n `${money(item.penalty.amount)}${item.penalty.percentPerMonth ? m.plusPerMonth(item.penalty.percentPerMonth) : \"\"}${item.penalty.note ? `. ${item.penalty.note}` : \"\"}`,\n ]);\n const provenance = item.provenance;\n if (provenance?.sources.length) {\n const sources =\n provenance.sourceDetails ??\n provenance.sources.map((url) => ({ url, kind: \"agency_page\" as const, archiveUrl: \"\" }));\n rows.push([\n m.sources,\n <>\n {sources.slice(0, 3).map((source, index) => (\n <span key={source.url}>\n {index > 0 && \"; \"}\n <ExternalLink url={source.url}>{host(source.url)}</ExternalLink>\n {source.kind === \"pdf\" ? m.pdf : \"\"}\n {source.archiveUrl ? (\n <>\n {\" \"}\n (<ExternalLink url={source.archiveUrl}>{m.archivedCopy}</ExternalLink>)\n </>\n ) : null}\n </span>\n ))}\n </>,\n ]);\n }\n if (provenance)\n rows.push([\n m.data,\n `${provenance.confidence === \"checked\" && provenance.checkedOn ? m.checkedAgainst(date(provenance.checkedOn)) : m.compiledFrom(provenance.compiledOn ? date(provenance.compiledOn) : undefined)}${provenance.reviewBy ? `. ${provenance.stale ? m.reviewOverdueSince(date(provenance.reviewBy)) : m.reviewDueBy(date(provenance.reviewBy))}.` : \"\"}`,\n ]);\n if (item.feedbackUrl)\n rows.push([m.seeAnError, <ExternalLink url={item.feedbackUrl}>{m.reportIt}</ExternalLink>]);\n return (\n <YStack gap=\"2\" paddingBottom=\"2\">\n <Paragraph>{item.description}</Paragraph>\n {rows.map(([label, value]) => (\n <XStack key={label} gap=\"1\" columnGap=\"4\" flexWrap=\"wrap\">\n <Text fontSize=\"sm\" fontWeight=\"600\" width={130}>\n {label}\n </Text>\n <Text fontSize=\"sm\" flex={1} flexBasis={200} minWidth={0}>\n {value}\n </Text>\n </XStack>\n ))}\n </YStack>\n );\n}\n\nexport function ObligationsList(props: ObligationsListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <ObligationsListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction ObligationsListBody({ items, asOf, filters, onFilters }: ObligationsListProps) {\n const { m, tag, date, relativeDays } = useI18n();\n const categoryLabel = (category: ComplianceItem[\"category\"]) => m.categories[category] ?? category;\n const categories = [...new Set(items.map((item) => item.category))].sort((a, b) =>\n categoryLabel(a).localeCompare(categoryLabel(b), tag),\n );\n const filtered = filterObligations(items, filters);\n const titleById = new Map(items.map((item) => [item.id, item.title]));\n const count = (jurisdiction: string) =>\n items.filter((item) => itemMatches(item, { ...filters, jurisdiction })).length;\n const categoryCount = (category: string) =>\n items.filter((item) => itemMatches(item, { ...filters, category })).length;\n const hasFilters =\n filters.jurisdiction !== \"all\" ||\n filters.category !== \"all\" ||\n filters.query !== \"\" ||\n filters.trust !== \"all\";\n const clearFilters = () => onFilters({ ...NO_OBLIGATION_FILTERS });\n return (\n <YStack gap=\"3\">\n <XStack justifyContent=\"space-between\" gap=\"3\" flexWrap=\"wrap\" alignItems=\"baseline\">\n <YStack gap=\"0.5\">\n <Text fontWeight=\"700\">{m.findObligation}</Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.showing(filtered.length, items.length)}\n </Text>\n </YStack>\n {hasFilters && (\n <Button size=\"sm\" onPress={clearFilters}>\n {m.clearFilters}\n </Button>\n )}\n </XStack>\n <XStack gap=\"3\" flexWrap=\"wrap\" alignItems={\"flex-end\"}>\n <Input\n flex={1}\n flexBasis={220}\n placeholder={m.searchObligations}\n aria-label={m.searchObligations}\n value={filters.query}\n onChangeText={(query) => onFilters({ ...filters, query })}\n />\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-category\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.category}\n </Label>\n <select\n id=\"obligation-category\"\n aria-label={m.category}\n style={nativeControl}\n value={filters.category}\n onChange={(event) => onFilters({ ...filters, category: event.target.value })}\n >\n <option value=\"all\">{m.allCategories}</option>\n {categories.map((category) => (\n <option key={category} value={category}>\n {categoryLabel(category)} ({categoryCount(category)})\n </option>\n ))}\n </select>\n </YStack>\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-trust\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.dataConfidence}\n </Label>\n <select\n id=\"obligation-trust\"\n aria-label={m.dataConfidence}\n style={nativeControl}\n value={filters.trust}\n onChange={(event) =>\n onFilters({ ...filters, trust: event.target.value as ObligationFilters[\"trust\"] })\n }\n >\n <option value=\"all\">{m.allConfidenceLevels}</option>\n <option value=\"verified\">{m.checkedAgainstOfficial}</option>\n <option value=\"unverified\">{m.needsVerification}</option>\n </select>\n </YStack>\n </XStack>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {([\"all\", ...JURISDICTIONS] as const).map((key) => (\n <Button\n key={key}\n size=\"sm\"\n theme={filters.jurisdiction === key ? \"accent\" : undefined}\n disabled={count(key) === 0 && key !== \"all\"}\n onPress={() => onFilters({ ...filters, jurisdiction: key })}\n aria-pressed={filters.jurisdiction === key}\n >\n {key === \"all\" ? m.all : m.jurisdictions[key]} {key === \"all\" ? filtered.length : count(key)}\n </Button>\n ))}\n </XStack>\n {filtered.length === 0 ? (\n <Text color=\"placeholder-color\">{m.noMatch}</Text>\n ) : (\n JURISDICTIONS.map((jurisdiction) => {\n const group = filtered\n .filter((item) => item.jurisdiction === jurisdiction)\n .sort((a, b) => (a.nextDue ?? \"9999-12-31\").localeCompare(b.nextDue ?? \"9999-12-31\"));\n if (!group.length) return null;\n return (\n <YStack key={jurisdiction}>\n <XStack gap=\"2\" alignItems=\"center\" paddingTop=\"3\" paddingBottom=\"1\">\n <Text fontSize=\"lg\" fontWeight=\"600\">\n {m.jurisdictions[jurisdiction]}\n </Text>\n <Chip tone=\"info\">{group.length}</Chip>\n </XStack>\n <YStack gap=\"3\">\n {group.map((item) => (\n <Disclosure\n key={item.id}\n card\n summary={\n <YStack gap=\"1.5\" alignItems=\"flex-start\" width=\"100%\">\n <Text fontWeight=\"600\" textAlign=\"left\" alignSelf=\"stretch\">\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {item.nextDue ? (\n <Chip tone={isSoon(item.nextDue, asOf) ? \"warn\" : \"info\"} outline>\n {m.dueOn(date(item.nextDue), relativeDays(item.nextDue, asOf))}\n </Chip>\n ) : item.deadline ? (\n <Chip>{item.deadline}</Chip>\n ) : null}\n <Chip>{m.frequencies[item.frequency] ?? item.frequency}</Chip>\n <Chip>{categoryLabel(item.category)}</Chip>\n <Fee item={item} />\n <Confidence item={item} />\n </XStack>\n </YStack>\n }\n >\n <ObligationDetails item={item} titleOf={(id) => titleById.get(id)} />\n </Disclosure>\n ))}\n </YStack>\n </YStack>\n );\n })\n )}\n </YStack>\n );\n}\n\nexport { messages, getMessages } from \"./messages\";\nexport type { Locale, Messages } from \"./messages\";\nexport type { ComplianceItem, LaunchPlan };\n","import type { ComplianceItem } from \"business-obligations\";\n\nexport type Locale = \"en\" | \"es\";\n\ntype Category = ComplianceItem[\"category\"];\ntype Frequency = ComplianceItem[\"frequency\"];\ntype Jurisdiction = ComplianceItem[\"jurisdiction\"];\ntype FilingMethod = NonNullable<ComplianceItem[\"filingMethod\"]>[number];\ntype Operator = \">=\" | \">\" | \"<=\" | \"<\" | \"==\" | \"!=\" | \"in\";\ntype Confidence = NonNullable<ComplianceItem[\"provenance\"]>[\"confidence\"];\n\n/**\n * Every piece of interface text the components show. Text that comes from the data (titles, descriptions, reasons,\n * deadlines) is not here: translate it with `localizePlan` / `localize` from `business-obligations` first.\n */\nexport interface Messages {\n // Launch plan\n fileFormation: string;\n readyToOperate: string;\n openingDate: string;\n notSet: string;\n addOpeningDate: string;\n opening: string;\n onTrack: (slackDays: number) => string;\n tooSoon: (days: number) => string;\n progress: string;\n savedInBrowser: string;\n knownFees: string;\n oneTime: string;\n perYear: (amount: string) => string;\n done: string;\n toDo: (count: number) => string;\n onward: string;\n after: string;\n dueOn: (date: string, relative: string) => string;\n by: (date: string) => string;\n planNote: string;\n // Chips\n fee: (amount: string) => string;\n checked: (date?: string) => string;\n partlyUnconfirmed: string;\n notIndividuallyChecked: string;\n reviewOverdue: string;\n // Filters and list\n findObligation: string;\n showing: (shown: number, total: number) => string;\n clearFilters: string;\n searchObligations: string;\n category: string;\n allCategories: string;\n dataConfidence: string;\n allConfidenceLevels: string;\n checkedAgainstOfficial: string;\n needsVerification: string;\n all: string;\n noMatch: string;\n // Details\n whyItApplies: string;\n replacedBy: string;\n appliesWhen: string;\n exceptions: string;\n authority: string;\n howToFile: string;\n form: (id: string) => string;\n renewal: string;\n ifLate: string;\n plusPerMonth: (percent: number) => string;\n sources: string;\n pdf: string;\n archivedCopy: string;\n data: string;\n checkedAgainst: (date: string) => string;\n compiledFrom: (date?: string) => string;\n reviewOverdueSince: (date: string) => string;\n reviewDueBy: (date: string) => string;\n seeAnError: string;\n reportIt: string;\n // Words for enum values\n jurisdictions: Record<Jurisdiction, string>;\n frequencies: Record<Frequency, string>;\n categories: Record<Category, string>;\n filingMethods: Record<FilingMethod, string>;\n operators: Record<Operator, string>;\n /** Names of the profile fields that an \"applies when\" condition can read; unknown fields are shown as they are. */\n fields: Record<string, string>;\n confidence: Record<Confidence, string>;\n}\n\nconst plural = (locale: string, n: number, one: string, other: string) =>\n new Intl.PluralRules(locale).select(n) === \"one\" ? one : other;\n\nconst en: Messages = {\n fileFormation: \"File formation\",\n readyToOperate: \"Ready to operate\",\n openingDate: \"Opening date\",\n notSet: \"Not set\",\n addOpeningDate: \"Add a target opening date to check the plan fits\",\n opening: \"Opening\",\n onTrack: (n) => `On track, ${n} ${plural(\"en\", n, \"day\", \"days\")} of slack`,\n tooSoon: (n) => `${n} ${plural(\"en\", n, \"day\", \"days\")} too soon`,\n progress: \"Progress\",\n savedInBrowser: \"Saved in this browser\",\n knownFees: \"Known fees\",\n oneTime: \"one-time\",\n perYear: (amount) => `${amount} per year`,\n done: \"done\",\n toDo: (n) => `${n} to do`,\n onward: \"onward\",\n after: \"After:\",\n dueOn: (date, relative) => `due ${date} · ${relative}`,\n by: (date) => `by ${date}`,\n planNote:\n \"Dates are planning allowances, not agency processing times. Legal due dates are shown where the rules give one.\",\n fee: (amount) => `fee ${amount}`,\n checked: (date) => `checked${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"partly unconfirmed\",\n notIndividuallyChecked: \"not individually checked\",\n reviewOverdue: \"review overdue\",\n findObligation: \"Find an obligation\",\n showing: (shown, total) => `Showing ${shown} of ${total} obligations`,\n clearFilters: \"Clear filters\",\n searchObligations: \"Search obligations\",\n category: \"Category\",\n allCategories: \"All categories\",\n dataConfidence: \"Data confidence\",\n allConfidenceLevels: \"All confidence levels\",\n checkedAgainstOfficial: \"Checked against official pages\",\n needsVerification: \"Needs verification\",\n all: \"All\",\n noMatch: \"No obligations match these filters.\",\n whyItApplies: \"Why it applies\",\n replacedBy: \"Replaced by\",\n appliesWhen: \"Applies when\",\n exceptions: \"Exceptions\",\n authority: \"Authority\",\n howToFile: \"How to file\",\n form: (id) => `Form ${id}`,\n renewal: \"Renewal\",\n ifLate: \"If late\",\n plusPerMonth: (percent) => ` plus ${percent}% per month`,\n sources: \"Sources\",\n pdf: \" (PDF)\",\n archivedCopy: \"archived copy\",\n data: \"Data\",\n checkedAgainst: (date) => `Checked against official pages on ${date}`,\n compiledFrom: (date) =>\n `Compiled from public sources${date ? ` on ${date}` : \"\"}; not individually checked`,\n reviewOverdueSince: (date) => `Review overdue since ${date}`,\n reviewDueBy: (date) => `Review due by ${date}`,\n seeAnError: \"See an error?\",\n reportIt: \"Report it or suggest a correction\",\n jurisdictions: { federal: \"Federal\", state: \"State\", county: \"County\", city: \"City\" },\n frequencies: {\n once: \"One-time\",\n annual: \"Annual\",\n biennial: \"Every 2 years\",\n every_five_years: \"Every 5 years\",\n quarterly: \"Quarterly\",\n monthly: \"Monthly\",\n per_event: \"Per event\",\n ongoing: \"Ongoing\",\n },\n categories: {\n license: \"license\",\n permit: \"permit\",\n registration: \"registration\",\n filing: \"filing\",\n payment: \"payment\",\n insurance: \"insurance\",\n recordkeeping: \"recordkeeping\",\n },\n filingMethods: { online: \"online\", mail: \"by mail\", in_person: \"in person\", fax: \"by fax\" },\n operators: {\n \">=\": \"at least\",\n \">\": \"more than\",\n \"<=\": \"at most\",\n \"<\": \"less than\",\n \"==\": \"is\",\n \"!=\": \"is not\",\n in: \"is one of\",\n },\n fields: {},\n confidence: { checked: \"checked\", compiled: \"not individually checked\", unconfirmed: \"partly unconfirmed\" },\n};\n\nconst es: Messages = {\n fileFormation: \"Presentar la constitución\",\n readyToOperate: \"Listo para operar\",\n openingDate: \"Fecha de apertura\",\n notSet: \"Sin definir\",\n addOpeningDate: \"Agregue una fecha de apertura prevista para comprobar que el plan alcanza\",\n opening: \"Apertura\",\n onTrack: (n) => `En plazo, ${n} ${plural(\"es\", n, \"día\", \"días\")} de margen`,\n tooSoon: (n) => `${n} ${plural(\"es\", n, \"día\", \"días\")} antes de estar listo`,\n progress: \"Avance\",\n savedInBrowser: \"Guardado en este navegador\",\n knownFees: \"Tarifas conocidas\",\n oneTime: \"únicas\",\n perYear: (amount) => `${amount} por año`,\n done: \"listo\",\n toDo: (n) => `${n} por hacer`,\n onward: \"en adelante\",\n after: \"Después de:\",\n dueOn: (date, relative) => `vence el ${date} · ${relative}`,\n by: (date) => `antes del ${date}`,\n planNote:\n \"Las fechas son márgenes de planificación, no plazos de trámite de las agencias. Los plazos legales se muestran cuando las reglas los establecen.\",\n fee: (amount) => `tarifa ${amount}`,\n checked: (date) => `verificado${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"parcialmente sin confirmar\",\n notIndividuallyChecked: \"no verificado individualmente\",\n reviewOverdue: \"revisión vencida\",\n findObligation: \"Buscar una obligación\",\n showing: (shown, total) => `Mostrando ${shown} de ${total} obligaciones`,\n clearFilters: \"Borrar filtros\",\n searchObligations: \"Buscar obligaciones\",\n category: \"Categoría\",\n allCategories: \"Todas las categorías\",\n dataConfidence: \"Confiabilidad de los datos\",\n allConfidenceLevels: \"Todos los niveles de confianza\",\n checkedAgainstOfficial: \"Verificado con las páginas oficiales\",\n needsVerification: \"Requiere verificación\",\n all: \"Todas\",\n noMatch: \"Ninguna obligación coincide con estos filtros.\",\n whyItApplies: \"Por qué aplica\",\n replacedBy: \"Reemplazada por\",\n appliesWhen: \"Aplica cuando\",\n exceptions: \"Excepciones\",\n authority: \"Autoridad\",\n howToFile: \"Cómo presentarla\",\n form: (id) => `Formulario ${id}`,\n renewal: \"Renovación\",\n ifLate: \"Si se atrasa\",\n plusPerMonth: (percent) => ` más ${percent}% por mes`,\n sources: \"Fuentes\",\n pdf: \" (PDF)\",\n archivedCopy: \"copia archivada\",\n data: \"Datos\",\n checkedAgainst: (date) => `Verificado con las páginas oficiales el ${date}`,\n compiledFrom: (date) =>\n `Compilado de fuentes públicas${date ? ` el ${date}` : \"\"}; no verificado individualmente`,\n reviewOverdueSince: (date) => `Revisión vencida desde el ${date}`,\n reviewDueBy: (date) => `Revisión prevista antes del ${date}`,\n seeAnError: \"¿Ve un error?\",\n reportIt: \"Infórmelo o sugiera una corrección\",\n jurisdictions: { federal: \"Federal\", state: \"Estatal\", county: \"Condado\", city: \"Ciudad\" },\n frequencies: {\n once: \"Una sola vez\",\n annual: \"Anual\",\n biennial: \"Cada 2 años\",\n every_five_years: \"Cada 5 años\",\n quarterly: \"Trimestral\",\n monthly: \"Mensual\",\n per_event: \"Por evento\",\n ongoing: \"Continuo\",\n },\n categories: {\n license: \"licencia\",\n permit: \"permiso\",\n registration: \"registro\",\n filing: \"presentación\",\n payment: \"pago\",\n insurance: \"seguro\",\n recordkeeping: \"conservación de registros\",\n },\n filingMethods: { online: \"en línea\", mail: \"por correo\", in_person: \"en persona\", fax: \"por fax\" },\n operators: {\n \">=\": \"al menos\",\n \">\": \"más de\",\n \"<=\": \"como máximo\",\n \"<\": \"menos de\",\n \"==\": \"es\",\n \"!=\": \"no es\",\n in: \"es uno de\",\n },\n fields: {\n employeeCount: \"número de empleados\",\n fullTimeEmployeeCount: \"número de empleados a tiempo completo\",\n annualPayroll: \"nómina anual\",\n annualRevenue: \"ingresos anuales\",\n annualNetIncome: \"ingresos netos anuales\",\n largestContractorPaymentUsd: \"mayor pago a un contratista\",\n activities: \"actividades\",\n county: \"condado\",\n city: \"ciudad\",\n state: \"estado\",\n entityType: \"tipo de entidad\",\n industry: \"sector\",\n naics: \"código NAICS\",\n homeBased: \"negocio desde el hogar\",\n hasSignage: \"rótulos exteriores\",\n sellsTaxableGoods: \"vende bienes gravables\",\n usesTradeName: \"usa un nombre comercial\",\n projectValueUsd: \"valor del proyecto\",\n disturbedAcres: \"acres removidos\",\n floorAreaSqFt: \"superficie en pies cuadrados\",\n },\n confidence: {\n checked: \"verificado\",\n compiled: \"no verificado individualmente\",\n unconfirmed: \"parcialmente sin confirmar\",\n },\n};\n\nen.fields = {\n employeeCount: \"number of employees\",\n fullTimeEmployeeCount: \"number of full-time employees\",\n annualPayroll: \"annual payroll\",\n annualRevenue: \"annual revenue\",\n annualNetIncome: \"annual net income\",\n largestContractorPaymentUsd: \"largest contractor payment\",\n activities: \"activities\",\n county: \"county\",\n city: \"city\",\n state: \"state\",\n entityType: \"entity type\",\n industry: \"industry\",\n naics: \"NAICS code\",\n homeBased: \"home-based business\",\n hasSignage: \"exterior signage\",\n sellsTaxableGoods: \"sells taxable goods\",\n usesTradeName: \"uses a trade name\",\n projectValueUsd: \"project value\",\n disturbedAcres: \"acres disturbed\",\n floorAreaSqFt: \"floor area in square feet\",\n};\n\n/** The bundled message tables. */\nexport const messages: Record<Locale, Messages> = { en, es };\n\n/** The messages for a locale code such as \"es\" or \"es-MX\"; English when the language has no table. */\nexport function getMessages(locale?: string): Messages {\n const language = locale?.toLowerCase().split(\"-\")[0];\n return language === \"es\" ? es : en;\n}\n"],"mappings":"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","names":["messages"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/messages.ts"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { ComplianceItem, LaunchPlan } from \"business-obligations\";\nimport { Accordion, Anchor, Button, Checkbox, Input, Label, Paragraph, Text, XStack, YStack } from \"tamagui\";\nimport { getMessages, type Messages } from \"./messages\";\n\nexport interface LaunchListProps {\n plan: LaunchPlan;\n costs?: { oneTime: number; annual: number };\n done?: ReadonlySet<string>;\n onToggle?: (id: string, checked: boolean) => void;\n /**\n * Language of the interface text and of dates, numbers and relative times: \"en\" (default) or \"es\", or any other\n * locale tag together with `messages`. Text from the data is translated separately, with `localizePlan`.\n */\n locale?: string;\n /** Interface text for a language the package does not bundle. */\n messages?: Messages;\n}\n\nexport interface ObligationFilters {\n jurisdiction: string;\n category: string;\n query: string;\n trust: \"all\" | \"verified\" | \"unverified\";\n}\n\nexport const NO_OBLIGATION_FILTERS: ObligationFilters = {\n jurisdiction: \"all\",\n category: \"all\",\n query: \"\",\n trust: \"all\",\n};\n\nexport interface ObligationsListProps {\n items: ComplianceItem[];\n asOf: string;\n filters: ObligationFilters;\n onFilters: (filters: ObligationFilters) => void;\n /** See `LaunchListProps.locale`. */\n locale?: string;\n /** See `LaunchListProps.messages`. */\n messages?: Messages;\n}\n\nconst JURISDICTIONS = [\"federal\", \"state\", \"county\", \"city\"] as const;\n\n/** The interface text and the formatters for one locale. */\ninterface I18n {\n /** BCP 47 tag handed to `Intl`. */\n tag: string;\n m: Messages;\n money: (amount: number) => string;\n date: (value?: string) => string;\n relativeDays: (value: string | undefined, from: string) => string;\n}\n\nfunction createI18n(locale = \"en\", custom?: Messages): I18n {\n // The data is about US businesses, so a bare language code formats numbers and dates the US way (\"$1,250.00\").\n const tag = locale === \"en\" ? \"en-US\" : locale === \"es\" ? \"es-US\" : locale;\n const money = new Intl.NumberFormat(tag, { style: \"currency\", currency: \"USD\", maximumFractionDigits: 2 });\n const day = new Intl.DateTimeFormat(tag, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n const relative = new Intl.RelativeTimeFormat(tag, { numeric: \"auto\" });\n return {\n tag,\n m: custom ?? getMessages(locale),\n money: (amount) => money.format(amount),\n date: (value) => (value ? day.format(new Date(`${value}T00:00:00Z`)) : \"\"),\n relativeDays: (value, from) => {\n if (!value) return \"\";\n const days = Math.round(\n (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${from}T00:00:00Z`)) / 86_400_000,\n );\n return relative.format(days, \"day\");\n },\n };\n}\n\nconst I18nContext = createContext<I18n>(createI18n());\nconst useI18n = () => useContext(I18nContext);\n\nfunction WithLocale({\n locale,\n messages,\n children,\n}: {\n locale?: string;\n messages?: Messages;\n children: ReactNode;\n}) {\n const i18n = useMemo(() => createI18n(locale, messages), [locale, messages]);\n return <I18nContext.Provider value={i18n}>{children}</I18nContext.Provider>;\n}\n\n/** Lower case without accents, so that \"licencia\" finds \"Licencia\" and \"licéncia\". */\nconst fold = (value: string) => value.normalize(\"NFD\").replace(/\\p{M}/gu, \"\").toLowerCase();\n\nconst isVerified = (item: Pick<ComplianceItem, \"provenance\">) =>\n item.provenance?.confidence === \"checked\" && !item.provenance.stale;\n\nconst isSoon = (value: string, asOf: string) => {\n const days = (Date.parse(`${value}T00:00:00Z`) - Date.parse(`${asOf}T00:00:00Z`)) / 86_400_000;\n return days >= 0 && days <= 30;\n};\n\nconst nativeControl = {\n width: \"100%\",\n minHeight: 44,\n padding: \"8px 10px\",\n borderRadius: 8,\n border: \"1px solid var(--border-color)\",\n background: \"var(--background)\",\n color: \"var(--color)\",\n font: \"inherit\",\n fontSize: 16,\n};\n\nconst safeUrl = (value?: string) => {\n if (!value) return undefined;\n try {\n const url = new URL(value);\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.href : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst host = (value: string) => {\n try {\n return new URL(value).hostname.replace(/^www\\./, \"\");\n } catch {\n return value;\n }\n};\n\nfunction ExternalLink({ url, children }: { url?: string; children: ReactNode }) {\n const href = safeUrl(url);\n return href ? (\n <Anchor\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"accent-background\"\n textDecorationLine=\"underline\"\n textAlign=\"left\"\n >\n {children}\n </Anchor>\n ) : (\n <Text>{children}</Text>\n );\n}\n\nfunction Stat({ label, value, note }: { label: string; value: ReactNode; note?: ReactNode }) {\n return (\n <YStack flexBasis={150} flexGrow={1} backgroundColor=\"color-2\" borderRadius=\"md\" padding=\"3\" gap=\"0.5\">\n <Text fontSize=\"xs\" color=\"placeholder-color\">\n {label}\n </Text>\n <Text fontSize=\"xl\" fontWeight=\"600\">\n {value}\n </Text>\n {note && (\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {note}\n </Text>\n )}\n </YStack>\n );\n}\n\nfunction Chip({\n children,\n tone = \"neutral\",\n outline = false,\n title,\n}: {\n children: ReactNode;\n tone?: \"neutral\" | \"good\" | \"warn\" | \"bad\" | \"info\";\n outline?: boolean;\n title?: string;\n}) {\n const color = {\n neutral: \"color\",\n good: \"green-600\",\n warn: \"amber-600\",\n bad: \"red-600\",\n info: \"accent-background\",\n }[tone];\n return (\n <XStack\n borderWidth={1}\n borderColor={outline ? color : \"transparent\"}\n backgroundColor={outline ? \"transparent\" : \"color-2\"}\n borderRadius=\"md\"\n paddingHorizontal=\"2\"\n paddingVertical=\"0.5\"\n {...(title ? { \"aria-label\": title } : {})}\n >\n <Text fontSize=\"xs\" color={outline ? color : \"color\"}>\n {children}\n </Text>\n </XStack>\n );\n}\n\nfunction Disclosure({\n summary,\n children,\n open = false,\n card = false,\n level,\n}: {\n summary: ReactNode;\n children: ReactNode;\n open?: boolean;\n card?: boolean;\n /** Heading level of the trigger's wrapper, so the page keeps a single h1. */\n level: 2 | 3;\n}) {\n return (\n <Accordion\n type=\"multiple\"\n defaultValue={open ? [\"item\"] : []}\n {...(card\n ? { borderWidth: 1, borderColor: \"border-color\", borderRadius: \"lg\", overflow: \"hidden\" }\n : { borderTopWidth: 1, borderColor: \"border-color\" })}\n >\n <Accordion.Item value=\"item\">\n <Accordion.Header render={`h${level}`}>\n <Accordion.Trigger\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n gap=\"2.5\"\n paddingVertical=\"3\"\n paddingHorizontal={card ? \"3\" : \"0\"}\n width=\"100%\"\n alignSelf=\"stretch\"\n justifyContent=\"flex-start\"\n textAlign=\"left\"\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor=\"pointer\"\n >\n {({ open: isOpen }: { open: boolean }) => (\n <>\n <Text\n color=\"placeholder-color\"\n width={14}\n marginTop={2}\n rotate={isOpen ? \"90deg\" : \"0deg\"}\n transition=\"transform 180ms ease-out\"\n >\n ▸\n </Text>\n <YStack flex={1} minWidth={0} alignItems=\"flex-start\" alignSelf=\"stretch\" textAlign=\"left\">\n {summary}\n </YStack>\n </>\n )}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.HeightAnimator\n transition={{ duration: 220, easing: \"ease-out\", properties: \"min-height\" }}\n >\n <Accordion.Content paddingBottom=\"3\" paddingHorizontal={card ? \"3\" : \"0\"}>\n <YStack paddingLeft=\"6\">{children}</YStack>\n </Accordion.Content>\n </Accordion.HeightAnimator>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nfunction Confidence({ item }: { item: ComplianceItem }) {\n const { m, date } = useI18n();\n const provenance = item.provenance;\n if (!provenance) return null;\n const label =\n provenance.confidence === \"checked\"\n ? m.checked(provenance.checkedOn ? date(provenance.checkedOn) : undefined)\n : provenance.confidence === \"unconfirmed\"\n ? m.partlyUnconfirmed\n : m.notIndividuallyChecked;\n const tone =\n provenance.confidence === \"checked\"\n ? \"good\"\n : provenance.confidence === \"unconfirmed\"\n ? \"warn\"\n : \"neutral\";\n return (\n <>\n <Chip outline tone={tone}>\n {label}\n </Chip>\n {provenance.stale && (\n <Chip outline tone=\"warn\">\n {m.reviewOverdue}\n </Chip>\n )}\n </>\n );\n}\n\nfunction Fee({ item }: { item: ComplianceItem }) {\n const { m, money } = useI18n();\n return item.cost?.amount !== undefined ? <Chip>{m.fee(money(item.cost.amount))}</Chip> : null;\n}\n\nfunction CheckStep({\n id,\n item,\n checked,\n onChange,\n}: {\n id: string;\n item: ComplianceItem;\n checked: boolean;\n onChange?: (checked: boolean) => void;\n}) {\n return (\n <XStack gap=\"3\" alignItems=\"flex-start\" paddingVertical=\"1\" opacity={checked ? 0.6 : 1}>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(value) => onChange?.(value === true)}\n size=\"md\"\n marginTop=\"0.5\"\n >\n <Checkbox.Indicator>\n <Text fontSize=\"xs\">✓</Text>\n </Checkbox.Indicator>\n </Checkbox>\n <Label htmlFor={id} flex={1} minWidth={0} cursor=\"pointer\">\n <YStack gap=\"1\">\n <Text fontWeight=\"600\" textDecorationLine={checked ? \"line-through\" : \"none\"}>\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n </YStack>\n </Label>\n </XStack>\n );\n}\n\nexport function LaunchList(props: LaunchListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <LaunchListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction LaunchListBody({ plan, costs, done = new Set(), onToggle }: LaunchListProps) {\n const { m, money, date, relativeDays } = useI18n();\n const completed = plan.steps.filter((step) => done.has(step.item.id)).length;\n const byId = new Map(plan.steps.map((step) => [step.item.id, step.item]));\n return (\n <YStack gap=\"4\">\n <XStack flexWrap=\"wrap\" gap=\"3\">\n <Stat\n label={m.fileFormation}\n value={date(plan.formationDate)}\n note={relativeDays(plan.formationDate, plan.startDate)}\n />\n <Stat\n label={m.readyToOperate}\n value={date(plan.readyDate)}\n note={relativeDays(plan.readyDate, plan.startDate)}\n />\n {plan.onTrack === undefined ? (\n <Stat label={m.openingDate} value={m.notSet} note={m.addOpeningDate} />\n ) : (\n <Stat\n label={m.opening}\n value={date(plan.openingDate)}\n note={\n plan.onTrack ? (\n <Text color=\"green-600\">{m.onTrack(plan.slackDays ?? 0)}</Text>\n ) : (\n <Text color=\"red-600\">{m.tooSoon(-(plan.slackDays ?? 0))}</Text>\n )\n }\n />\n )}\n <Stat label={m.progress} value={`${completed} / ${plan.steps.length}`} note={m.savedInBrowser} />\n {costs && (\n <Stat\n label={m.knownFees}\n value={\n <>\n {money(costs.oneTime)} <Text fontSize=\"sm\">{m.oneTime}</Text>\n </>\n }\n note={m.perYear(money(costs.annual))}\n />\n )}\n </XStack>\n <YStack height={6} backgroundColor=\"color-3\" borderRadius=\"full\" overflow=\"hidden\">\n <XStack\n height=\"100%\"\n width={`${plan.steps.length ? (completed / plan.steps.length) * 100 : 0}%`}\n backgroundColor=\"accent-background\"\n />\n </YStack>\n {plan.phases.map((phase, index) => {\n const remaining = phase.steps.filter((step) => !done.has(step.item.id)).length;\n return (\n <Disclosure\n key={phase.id}\n card\n level={2}\n open={remaining > 0 || phase.id === \"operate\"}\n summary={\n <YStack gap=\"1\">\n <XStack gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Chip tone=\"info\" outline>\n {index + 1}\n </Chip>\n <Text fontWeight=\"600\">{phase.title}</Text>\n <Chip tone={remaining === 0 ? \"good\" : \"neutral\"} outline={remaining === 0}>\n {remaining === 0 ? m.done : m.toDo(remaining)}\n </Chip>\n </XStack>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {date(phase.start)}\n {phase.end ? ` → ${date(phase.end)}` : ` ${m.onward}`}\n </Text>\n </YStack>\n }\n >\n <YStack gap=\"2\">\n <Paragraph fontSize=\"sm\" color=\"placeholder-color\">\n {phase.description}\n </Paragraph>\n {phase.steps.map((step) => {\n const needs = step.dependsOn\n .map((id) => byId.get(id))\n .filter((item): item is ComplianceItem => Boolean(item))\n .slice(0, 2)\n .map((item) => item.title);\n // A date from the rules (a legal deadline or a filing schedule) is statutory; any other date is a planning allowance.\n const statutory = Boolean(step.legalDeadline || (step.target && step.item.deadline));\n return (\n <YStack key={step.item.id} gap=\"1\">\n <CheckStep\n id={`step-${step.item.id}`}\n item={step.item}\n checked={done.has(step.item.id)}\n onChange={onToggle ? (checked) => onToggle(step.item.id, checked) : undefined}\n />\n <XStack flexWrap=\"wrap\" gap=\"1.5\" paddingLeft=\"8\">\n {statutory ? (\n <Chip outline tone=\"bad\">\n {m.dueOn(\n date(step.legalDeadline ?? step.target),\n relativeDays(step.legalDeadline ?? step.target, plan.startDate),\n )}\n </Chip>\n ) : step.target ? (\n <Chip>{m.by(date(step.target))}</Chip>\n ) : null}\n <Fee item={step.item} />\n <Chip>{m.frequencies[step.item.frequency] ?? step.item.frequency}</Chip>\n <Confidence item={step.item} />\n </XStack>\n {statutory && (\n <Text fontSize=\"sm\" color=\"placeholder-color\" paddingLeft=\"8\">\n {m.triggeredBy(step.item.reason, step.item.deadline)}\n </Text>\n )}\n {needs.length > 0 && (\n <Text fontSize=\"sm\" color=\"placeholder-color\" paddingLeft=\"8\">\n {m.after} {needs.join(\"; \")}\n </Text>\n )}\n </YStack>\n );\n })}\n </YStack>\n </Disclosure>\n );\n })}\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.planNote}\n </Text>\n </YStack>\n );\n}\n\nfunction itemMatches(item: ComplianceItem, filters: ObligationFilters) {\n const query = fold(filters.query.trim());\n return (\n (filters.jurisdiction === \"all\" || item.jurisdiction === filters.jurisdiction) &&\n (filters.category === \"all\" || item.category === filters.category) &&\n (filters.trust === \"all\" || (filters.trust === \"verified\") === isVerified(item)) &&\n (!query || fold(`${item.title} ${item.authority} ${item.description} ${item.reason}`).includes(query))\n );\n}\n\nexport function filterObligations(items: ComplianceItem[], filters: ObligationFilters): ComplianceItem[] {\n return items.filter((item) => itemMatches(item, filters));\n}\n\nfunction ObligationDetails({\n item,\n titleOf,\n}: {\n item: ComplianceItem;\n titleOf: (id: string) => string | undefined;\n}) {\n const { m, money, date } = useI18n();\n const rows: Array<[string, ReactNode]> = [[m.whyItApplies, item.reason]];\n if (item.preemptedBy) rows.push([m.replacedBy, titleOf(item.preemptedBy) ?? item.preemptedBy]);\n if (item.appliesWhen?.length)\n rows.push([\n m.appliesWhen,\n item.appliesWhen\n .map(\n (when) =>\n when.description ??\n `${m.fields[when.field] ?? when.field} ${m.operators[when.op] ?? when.op} ${Array.isArray(when.value) ? when.value.join(\", \") : String(when.value)}`,\n )\n .join(\"; \"),\n ]);\n if (item.exemptions?.length) rows.push([m.exceptions, item.exemptions.join(\"; \")]);\n rows.push([m.authority, <ExternalLink url={item.url}>{item.authority}</ExternalLink>]);\n const how = [\n item.formId ? m.form(item.formId) : undefined,\n item.filingMethod?.length\n ? item.filingMethod.map((method) => m.filingMethods[method] ?? method).join(\", \")\n : undefined,\n item.processingTime,\n ].filter(Boolean);\n if (how.length) rows.push([m.howToFile, how.join(\" · \")]);\n if (item.renewal) rows.push([m.renewal, item.renewal]);\n if (item.penalty)\n rows.push([\n m.ifLate,\n `${money(item.penalty.amount)}${item.penalty.percentPerMonth ? m.plusPerMonth(item.penalty.percentPerMonth) : \"\"}${item.penalty.note ? `. ${item.penalty.note}` : \"\"}`,\n ]);\n const provenance = item.provenance;\n if (provenance?.sources.length) {\n const sources =\n provenance.sourceDetails ??\n provenance.sources.map((url) => ({ url, kind: \"agency_page\" as const, archiveUrl: \"\" }));\n rows.push([\n m.sources,\n <>\n {sources.slice(0, 3).map((source, index) => (\n <span key={source.url}>\n {index > 0 && \"; \"}\n <ExternalLink url={source.url}>{host(source.url)}</ExternalLink>\n {source.kind === \"pdf\" ? m.pdf : \"\"}\n {source.archiveUrl ? (\n <>\n {\" \"}\n (<ExternalLink url={source.archiveUrl}>{m.archivedCopy}</ExternalLink>)\n </>\n ) : null}\n </span>\n ))}\n </>,\n ]);\n }\n if (provenance)\n rows.push([\n m.data,\n `${provenance.confidence === \"checked\" && provenance.checkedOn ? m.checkedAgainst(date(provenance.checkedOn)) : m.compiledFrom(provenance.compiledOn ? date(provenance.compiledOn) : undefined)}${provenance.reviewBy ? `. ${provenance.stale ? m.reviewOverdueSince(date(provenance.reviewBy)) : m.reviewDueBy(date(provenance.reviewBy))}.` : \"\"}`,\n ]);\n if (item.feedbackUrl)\n rows.push([m.seeAnError, <ExternalLink url={item.feedbackUrl}>{m.reportIt}</ExternalLink>]);\n return (\n <YStack gap=\"2\" paddingBottom=\"2\">\n <Paragraph>{item.description}</Paragraph>\n {rows.map(([label, value]) => (\n <XStack key={label} gap=\"1\" columnGap=\"4\" flexWrap=\"wrap\">\n <Text fontSize=\"sm\" fontWeight=\"600\" width={130}>\n {label}\n </Text>\n <Text fontSize=\"sm\" flex={1} flexBasis={200} minWidth={0}>\n {value}\n </Text>\n </XStack>\n ))}\n </YStack>\n );\n}\n\nexport function ObligationsList(props: ObligationsListProps) {\n return (\n <WithLocale locale={props.locale} messages={props.messages}>\n <ObligationsListBody {...props} />\n </WithLocale>\n );\n}\n\nfunction ObligationsListBody({ items, asOf, filters, onFilters }: ObligationsListProps) {\n const { m, tag, date, relativeDays } = useI18n();\n const categoryLabel = (category: ComplianceItem[\"category\"]) => m.categories[category] ?? category;\n const categories = [...new Set(items.map((item) => item.category))].sort((a, b) =>\n categoryLabel(a).localeCompare(categoryLabel(b), tag),\n );\n const filtered = filterObligations(items, filters);\n const titleById = new Map(items.map((item) => [item.id, item.title]));\n const count = (jurisdiction: string) =>\n items.filter((item) => itemMatches(item, { ...filters, jurisdiction })).length;\n const categoryCount = (category: string) =>\n items.filter((item) => itemMatches(item, { ...filters, category })).length;\n const hasFilters =\n filters.jurisdiction !== \"all\" ||\n filters.category !== \"all\" ||\n filters.query !== \"\" ||\n filters.trust !== \"all\";\n const clearFilters = () => onFilters({ ...NO_OBLIGATION_FILTERS });\n return (\n <YStack gap=\"3\">\n <XStack justifyContent=\"space-between\" gap=\"3\" flexWrap=\"wrap\" alignItems=\"baseline\">\n <YStack gap=\"0.5\">\n <Text fontWeight=\"700\">{m.findObligation}</Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {m.showing(filtered.length, items.length)}\n </Text>\n </YStack>\n {hasFilters && (\n <Button size=\"sm\" onPress={clearFilters}>\n {m.clearFilters}\n </Button>\n )}\n </XStack>\n <XStack gap=\"3\" flexWrap=\"wrap\" alignItems={\"flex-end\"}>\n <Input\n flex={1}\n flexBasis={220}\n placeholder={m.searchObligations}\n aria-label={m.searchObligations}\n value={filters.query}\n onChangeText={(query) => onFilters({ ...filters, query })}\n />\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-category\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.category}\n </Label>\n <select\n id=\"obligation-category\"\n aria-label={m.category}\n style={nativeControl}\n value={filters.category}\n onChange={(event) => onFilters({ ...filters, category: event.target.value })}\n >\n <option value=\"all\">{m.allCategories}</option>\n {categories.map((category) => (\n <option key={category} value={category}>\n {categoryLabel(category)} ({categoryCount(category)})\n </option>\n ))}\n </select>\n </YStack>\n <YStack flexBasis={220} flexGrow={1} gap=\"0.5\">\n <Label htmlFor=\"obligation-trust\" fontSize=\"sm\" color=\"placeholder-color\">\n {m.dataConfidence}\n </Label>\n <select\n id=\"obligation-trust\"\n aria-label={m.dataConfidence}\n style={nativeControl}\n value={filters.trust}\n onChange={(event) =>\n onFilters({ ...filters, trust: event.target.value as ObligationFilters[\"trust\"] })\n }\n >\n <option value=\"all\">{m.allConfidenceLevels}</option>\n <option value=\"verified\">{m.checkedAgainstOfficial}</option>\n <option value=\"unverified\">{m.needsVerification}</option>\n </select>\n </YStack>\n </XStack>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {([\"all\", ...JURISDICTIONS] as const).map((key) => (\n <Button\n key={key}\n size=\"sm\"\n theme={filters.jurisdiction === key ? \"accent\" : undefined}\n disabled={count(key) === 0 && key !== \"all\"}\n onPress={() => onFilters({ ...filters, jurisdiction: key })}\n aria-pressed={filters.jurisdiction === key}\n >\n {key === \"all\" ? m.all : m.jurisdictions[key]} {key === \"all\" ? filtered.length : count(key)}\n </Button>\n ))}\n </XStack>\n {filtered.length === 0 ? (\n <Text color=\"placeholder-color\">{m.noMatch}</Text>\n ) : (\n JURISDICTIONS.map((jurisdiction) => {\n const group = filtered\n .filter((item) => item.jurisdiction === jurisdiction)\n .sort((a, b) => (a.nextDue ?? \"9999-12-31\").localeCompare(b.nextDue ?? \"9999-12-31\"));\n if (!group.length) return null;\n return (\n <YStack key={jurisdiction}>\n <XStack gap=\"2\" alignItems=\"center\" paddingTop=\"3\" paddingBottom=\"1\">\n <Text render=\"h2\" fontSize=\"lg\" fontWeight=\"600\" margin={0}>\n {m.jurisdictions[jurisdiction]}\n </Text>\n <Chip tone=\"info\">{group.length}</Chip>\n </XStack>\n <YStack gap=\"3\">\n {group.map((item) => (\n <Disclosure\n key={item.id}\n card\n level={3}\n summary={\n <YStack gap=\"1.5\" alignItems=\"flex-start\" width=\"100%\">\n <Text fontWeight=\"600\" textAlign=\"left\" alignSelf=\"stretch\">\n <ExternalLink url={item.url}>{item.title}</ExternalLink>\n </Text>\n <Text fontSize=\"sm\" color=\"placeholder-color\">\n {item.authority}\n </Text>\n <XStack gap=\"1.5\" flexWrap=\"wrap\">\n {item.nextDue ? (\n <Chip tone={isSoon(item.nextDue, asOf) ? \"warn\" : \"info\"} outline>\n {m.dueOn(date(item.nextDue), relativeDays(item.nextDue, asOf))}\n </Chip>\n ) : item.deadline ? (\n <Chip>{item.deadline}</Chip>\n ) : null}\n <Chip>{m.frequencies[item.frequency] ?? item.frequency}</Chip>\n <Chip>{categoryLabel(item.category)}</Chip>\n <Fee item={item} />\n <Confidence item={item} />\n </XStack>\n </YStack>\n }\n >\n <ObligationDetails item={item} titleOf={(id) => titleById.get(id)} />\n </Disclosure>\n ))}\n </YStack>\n </YStack>\n );\n })\n )}\n </YStack>\n );\n}\n\nexport { messages, getMessages } from \"./messages\";\nexport type { Locale, Messages } from \"./messages\";\nexport type { ComplianceItem, LaunchPlan };\n","import type { ComplianceItem } from \"business-obligations\";\n\nexport type Locale = \"en\" | \"es\";\n\ntype Category = ComplianceItem[\"category\"];\ntype Frequency = ComplianceItem[\"frequency\"];\ntype Jurisdiction = ComplianceItem[\"jurisdiction\"];\ntype FilingMethod = NonNullable<ComplianceItem[\"filingMethod\"]>[number];\ntype Operator = \">=\" | \">\" | \"<=\" | \"<\" | \"==\" | \"!=\" | \"in\";\ntype Confidence = NonNullable<ComplianceItem[\"provenance\"]>[\"confidence\"];\n\n/**\n * Every piece of interface text the components show. Text that comes from the data (titles, descriptions, reasons,\n * deadlines) is not here: translate it with `localizePlan` / `localize` from `business-obligations` first.\n */\nexport interface Messages {\n // Launch plan\n fileFormation: string;\n readyToOperate: string;\n openingDate: string;\n notSet: string;\n addOpeningDate: string;\n opening: string;\n onTrack: (slackDays: number) => string;\n tooSoon: (days: number) => string;\n progress: string;\n savedInBrowser: string;\n knownFees: string;\n oneTime: string;\n perYear: (amount: string) => string;\n done: string;\n toDo: (count: number) => string;\n onward: string;\n after: string;\n dueOn: (date: string, relative: string) => string;\n by: (date: string) => string;\n /** What makes a legal deadline apply: the reason it applies and, when the rule has one, its schedule. */\n triggeredBy: (reason: string, schedule?: string) => string;\n planNote: string;\n // Chips\n fee: (amount: string) => string;\n checked: (date?: string) => string;\n partlyUnconfirmed: string;\n notIndividuallyChecked: string;\n reviewOverdue: string;\n // Filters and list\n findObligation: string;\n showing: (shown: number, total: number) => string;\n clearFilters: string;\n searchObligations: string;\n category: string;\n allCategories: string;\n dataConfidence: string;\n allConfidenceLevels: string;\n checkedAgainstOfficial: string;\n needsVerification: string;\n all: string;\n noMatch: string;\n // Details\n whyItApplies: string;\n replacedBy: string;\n appliesWhen: string;\n exceptions: string;\n authority: string;\n howToFile: string;\n form: (id: string) => string;\n renewal: string;\n ifLate: string;\n plusPerMonth: (percent: number) => string;\n sources: string;\n pdf: string;\n archivedCopy: string;\n data: string;\n checkedAgainst: (date: string) => string;\n compiledFrom: (date?: string) => string;\n reviewOverdueSince: (date: string) => string;\n reviewDueBy: (date: string) => string;\n seeAnError: string;\n reportIt: string;\n // Words for enum values\n jurisdictions: Record<Jurisdiction, string>;\n frequencies: Record<Frequency, string>;\n categories: Record<Category, string>;\n filingMethods: Record<FilingMethod, string>;\n operators: Record<Operator, string>;\n /** Names of the profile fields that an \"applies when\" condition can read; unknown fields are shown as they are. */\n fields: Record<string, string>;\n confidence: Record<Confidence, string>;\n}\n\nconst plural = (locale: string, n: number, one: string, other: string) =>\n new Intl.PluralRules(locale).select(n) === \"one\" ? one : other;\n\nconst en: Messages = {\n fileFormation: \"File formation\",\n readyToOperate: \"Ready to operate\",\n openingDate: \"Opening date\",\n notSet: \"Not set\",\n addOpeningDate: \"Add a target opening date to check the plan fits\",\n opening: \"Opening\",\n onTrack: (n) => `On track, ${n} ${plural(\"en\", n, \"day\", \"days\")} of slack`,\n tooSoon: (n) => `${n} ${plural(\"en\", n, \"day\", \"days\")} too soon`,\n progress: \"Progress\",\n savedInBrowser: \"Saved in this browser\",\n knownFees: \"Known fees\",\n oneTime: \"one-time\",\n perYear: (amount) => `${amount} per year`,\n done: \"done\",\n toDo: (n) => `${n} to do`,\n onward: \"onward\",\n after: \"After:\",\n dueOn: (date, relative) => `Statutory deadline: ${date} · ${relative}`,\n by: (date) => `Suggested planning date: ${date}`,\n triggeredBy: (reason, schedule) =>\n `Applies because: ${reason}.${schedule ? ` Schedule: ${schedule}.` : \"\"}`,\n planNote:\n \"Suggested planning dates are allowances, not agency processing times. Statutory deadlines come from the rules and are labeled as such.\",\n fee: (amount) => `fee ${amount}`,\n checked: (date) => `checked${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"partly unconfirmed\",\n notIndividuallyChecked: \"not individually checked\",\n reviewOverdue: \"review overdue\",\n findObligation: \"Find an obligation\",\n showing: (shown, total) => `Showing ${shown} of ${total} obligations`,\n clearFilters: \"Clear filters\",\n searchObligations: \"Search obligations\",\n category: \"Category\",\n allCategories: \"All categories\",\n dataConfidence: \"Data confidence\",\n allConfidenceLevels: \"All confidence levels\",\n checkedAgainstOfficial: \"Checked against official pages\",\n needsVerification: \"Needs verification\",\n all: \"All\",\n noMatch: \"No obligations match these filters.\",\n whyItApplies: \"Why it applies\",\n replacedBy: \"Replaced by\",\n appliesWhen: \"Applies when\",\n exceptions: \"Exceptions\",\n authority: \"Authority\",\n howToFile: \"How to file\",\n form: (id) => `Form ${id}`,\n renewal: \"Renewal\",\n ifLate: \"If late\",\n plusPerMonth: (percent) => ` plus ${percent}% per month`,\n sources: \"Sources\",\n pdf: \" (PDF)\",\n archivedCopy: \"archived copy\",\n data: \"Data\",\n checkedAgainst: (date) => `Checked against official pages on ${date}`,\n compiledFrom: (date) =>\n `Compiled from public sources${date ? ` on ${date}` : \"\"}; not individually checked`,\n reviewOverdueSince: (date) => `Review overdue since ${date}`,\n reviewDueBy: (date) => `Review due by ${date}`,\n seeAnError: \"See an error?\",\n reportIt: \"Report it or suggest a correction\",\n jurisdictions: { federal: \"Federal\", state: \"State\", county: \"County\", city: \"City\" },\n frequencies: {\n once: \"One-time\",\n annual: \"Annual\",\n biennial: \"Every 2 years\",\n every_five_years: \"Every 5 years\",\n quarterly: \"Quarterly\",\n monthly: \"Monthly\",\n per_event: \"Per event\",\n ongoing: \"Ongoing\",\n },\n categories: {\n license: \"license\",\n permit: \"permit\",\n registration: \"registration\",\n filing: \"filing\",\n payment: \"payment\",\n insurance: \"insurance\",\n recordkeeping: \"recordkeeping\",\n },\n filingMethods: { online: \"online\", mail: \"by mail\", in_person: \"in person\", fax: \"by fax\" },\n operators: {\n \">=\": \"at least\",\n \">\": \"more than\",\n \"<=\": \"at most\",\n \"<\": \"less than\",\n \"==\": \"is\",\n \"!=\": \"is not\",\n in: \"is one of\",\n },\n fields: {},\n confidence: { checked: \"checked\", compiled: \"not individually checked\", unconfirmed: \"partly unconfirmed\" },\n};\n\nconst es: Messages = {\n fileFormation: \"Presentar la constitución\",\n readyToOperate: \"Listo para operar\",\n openingDate: \"Fecha de apertura\",\n notSet: \"Sin definir\",\n addOpeningDate: \"Agregue una fecha de apertura prevista para comprobar que el plan alcanza\",\n opening: \"Apertura\",\n onTrack: (n) => `En plazo, ${n} ${plural(\"es\", n, \"día\", \"días\")} de margen`,\n tooSoon: (n) => `${n} ${plural(\"es\", n, \"día\", \"días\")} antes de estar listo`,\n progress: \"Avance\",\n savedInBrowser: \"Guardado en este navegador\",\n knownFees: \"Tarifas conocidas\",\n oneTime: \"únicas\",\n perYear: (amount) => `${amount} por año`,\n done: \"listo\",\n toDo: (n) => `${n} por hacer`,\n onward: \"en adelante\",\n after: \"Después de:\",\n dueOn: (date, relative) => `Plazo legal: ${date} · ${relative}`,\n by: (date) => `Fecha de planificación sugerida: ${date}`,\n triggeredBy: (reason, schedule) =>\n `Se aplica porque: ${reason}.${schedule ? ` Calendario: ${schedule}.` : \"\"}`,\n planNote:\n \"Las fechas de planificación sugeridas son márgenes, no plazos de trámite de las agencias. Los plazos legales provienen de las reglas y se indican como tales.\",\n fee: (amount) => `tarifa ${amount}`,\n checked: (date) => `verificado${date ? ` ${date}` : \"\"}`,\n partlyUnconfirmed: \"parcialmente sin confirmar\",\n notIndividuallyChecked: \"no verificado individualmente\",\n reviewOverdue: \"revisión vencida\",\n findObligation: \"Buscar una obligación\",\n showing: (shown, total) => `Mostrando ${shown} de ${total} obligaciones`,\n clearFilters: \"Borrar filtros\",\n searchObligations: \"Buscar obligaciones\",\n category: \"Categoría\",\n allCategories: \"Todas las categorías\",\n dataConfidence: \"Confiabilidad de los datos\",\n allConfidenceLevels: \"Todos los niveles de confianza\",\n checkedAgainstOfficial: \"Verificado con las páginas oficiales\",\n needsVerification: \"Requiere verificación\",\n all: \"Todas\",\n noMatch: \"Ninguna obligación coincide con estos filtros.\",\n whyItApplies: \"Por qué aplica\",\n replacedBy: \"Reemplazada por\",\n appliesWhen: \"Aplica cuando\",\n exceptions: \"Excepciones\",\n authority: \"Autoridad\",\n howToFile: \"Cómo presentarla\",\n form: (id) => `Formulario ${id}`,\n renewal: \"Renovación\",\n ifLate: \"Si se atrasa\",\n plusPerMonth: (percent) => ` más ${percent}% por mes`,\n sources: \"Fuentes\",\n pdf: \" (PDF)\",\n archivedCopy: \"copia archivada\",\n data: \"Datos\",\n checkedAgainst: (date) => `Verificado con las páginas oficiales el ${date}`,\n compiledFrom: (date) =>\n `Compilado de fuentes públicas${date ? ` el ${date}` : \"\"}; no verificado individualmente`,\n reviewOverdueSince: (date) => `Revisión vencida desde el ${date}`,\n reviewDueBy: (date) => `Revisión prevista antes del ${date}`,\n seeAnError: \"¿Ve un error?\",\n reportIt: \"Infórmelo o sugiera una corrección\",\n jurisdictions: { federal: \"Federal\", state: \"Estatal\", county: \"Condado\", city: \"Ciudad\" },\n frequencies: {\n once: \"Una sola vez\",\n annual: \"Anual\",\n biennial: \"Cada 2 años\",\n every_five_years: \"Cada 5 años\",\n quarterly: \"Trimestral\",\n monthly: \"Mensual\",\n per_event: \"Por evento\",\n ongoing: \"Continuo\",\n },\n categories: {\n license: \"licencia\",\n permit: \"permiso\",\n registration: \"registro\",\n filing: \"presentación\",\n payment: \"pago\",\n insurance: \"seguro\",\n recordkeeping: \"conservación de registros\",\n },\n filingMethods: { online: \"en línea\", mail: \"por correo\", in_person: \"en persona\", fax: \"por fax\" },\n operators: {\n \">=\": \"al menos\",\n \">\": \"más de\",\n \"<=\": \"como máximo\",\n \"<\": \"menos de\",\n \"==\": \"es\",\n \"!=\": \"no es\",\n in: \"es uno de\",\n },\n fields: {\n employeeCount: \"número de empleados\",\n fullTimeEmployeeCount: \"número de empleados a tiempo completo\",\n annualPayroll: \"nómina anual\",\n annualRevenue: \"ingresos anuales\",\n annualNetIncome: \"ingresos netos anuales\",\n largestContractorPaymentUsd: \"mayor pago a un contratista\",\n activities: \"actividades\",\n county: \"condado\",\n city: \"ciudad\",\n state: \"estado\",\n entityType: \"tipo de entidad\",\n industry: \"sector\",\n naics: \"código NAICS\",\n homeBased: \"negocio desde el hogar\",\n hasSignage: \"rótulos exteriores\",\n sellsTaxableGoods: \"vende bienes gravables\",\n usesTradeName: \"usa un nombre comercial\",\n projectValueUsd: \"valor del proyecto\",\n disturbedAcres: \"acres removidos\",\n floorAreaSqFt: \"superficie en pies cuadrados\",\n },\n confidence: {\n checked: \"verificado\",\n compiled: \"no verificado individualmente\",\n unconfirmed: \"parcialmente sin confirmar\",\n },\n};\n\nen.fields = {\n employeeCount: \"number of employees\",\n fullTimeEmployeeCount: \"number of full-time employees\",\n annualPayroll: \"annual payroll\",\n annualRevenue: \"annual revenue\",\n annualNetIncome: \"annual net income\",\n largestContractorPaymentUsd: \"largest contractor payment\",\n activities: \"activities\",\n county: \"county\",\n city: \"city\",\n state: \"state\",\n entityType: \"entity type\",\n industry: \"industry\",\n naics: \"NAICS code\",\n homeBased: \"home-based business\",\n hasSignage: \"exterior signage\",\n sellsTaxableGoods: \"sells taxable goods\",\n usesTradeName: \"uses a trade name\",\n projectValueUsd: \"project value\",\n disturbedAcres: \"acres disturbed\",\n floorAreaSqFt: \"floor area in square feet\",\n};\n\n/** The bundled message tables. */\nexport const messages: Record<Locale, Messages> = { en, es };\n\n/** The messages for a locale code such as \"es\" or \"es-MX\"; English when the language has no table. */\nexport function getMessages(locale?: string): Messages {\n const language = locale?.toLowerCase().split(\"-\")[0];\n return language === \"es\" ? es : en;\n}\n"],"mappings":"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","names":["messages"]}
|