From cd465aff5056700f6ee5ac44a6ea0f21e095c77b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 4 Nov 2026 07:42:50 +0000 Subject: [PATCH 1/3] LIVE-2055: New World gets its own section blocks, and every kit Home uses them Twenty New World sections drawn from the design system's site kit (hero with the doors-open card and neighbourhood strip, numbers, story, groups, live calendar, first visit, live reviews, team, ways in, plans, live openings, gallery, notes, how a first time goes, where, ask, newsletter, live questions, tools, closer), with their own scoped sheet. The owner accent now drives the flare ramps, type defaults to sentence case with Caps as the opt-in, and the frame matches the design's 1320 content width plus gutter. The seven kit Homes compose the new blocks in the design's order; the other kit pages move in LIVE-2056. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012BMmZWMC1cBFx5qBRseTKj --- components/page-editor/blocks/new-world.tsx | 1390 +++++++++++++++++ components/sites/new-world-blocks-css.ts | 2 + components/sites/new-world-css.ts | 10 +- components/sites/new-world-forms.tsx | 81 + components/sites/new-world-sections-css.ts | 350 +++++ docs/ledger/rows/LIVE-2055.json | 33 +- lib/page-editor/config.tsx | 7 + lib/page-editor/palette-scope.ts | 3 +- lib/sites/editor/block-meta.ts | 4 +- lib/sites/kits/new-world-variants.test.ts | 18 +- lib/sites/kits/new-world-variants.ts | 187 ++- lib/theme/new-world.ts | 1 + .../render/new-world-site-pages.render.tsx | 64 + 13 files changed, 2090 insertions(+), 60 deletions(-) create mode 100644 components/page-editor/blocks/new-world.tsx create mode 100644 components/sites/new-world-forms.tsx create mode 100644 components/sites/new-world-sections-css.ts create mode 100644 scripts/render/new-world-site-pages.render.tsx diff --git a/components/page-editor/blocks/new-world.tsx b/components/page-editor/blocks/new-world.tsx new file mode 100644 index 0000000000..bcbe42c1d1 --- /dev/null +++ b/components/page-editor/blocks/new-world.tsx @@ -0,0 +1,1390 @@ +import type { ReactNode } from "react"; +import { + ArrowRight, + Award, + Calendar, + Check, + Clock, + Eye, + Heart, + Mail, + MapPin, + MessageSquare, + Phone, + Sparkles, + Star, + Tag, + Users, + type LucideIcon, +} from "lucide-react"; +import { InlineText } from "@/components/sites/inline-text"; +import { + NewWorldContactForm, + NewWorldLetterForm, +} from "@/components/sites/new-world-forms"; +import type { ComponentConfig } from "@/lib/page-editor/types"; +import type { SiteLinkMap } from "@/lib/sites/house-theme"; +import { storedWallClock } from "@/lib/sites/site-events"; +import { + LINK_HINT, + VOICE_HINT, + area, + arr, + block, + cls, + hrefOf, + image, + img, + rel, + str, + text, + type Common, + type Props, +} from "./midnight"; +import { + DAYS, + MONTHS, + clock, + eventHref, + spaceOf, + upcoming, +} from "./network-kit"; + +// ── The New World block family (LIVE-2055) ────────────────────────────────────────────────── +// New World's own sections, drawn from its design system (docs/design-systems/new-world; the reference is the zip's Web Theme.html, +// ui_kits/site/Sections.jsx and Blocks.jsx): the split hero with the "doors open this week" card and the neighbourhood strip, the +// numbers band, the story with its outlined numbers, the groups as a times list beside a feature card, the calendar with its week +// strip and date rows, the first-visit stepper, the regulars' words, the hosts, the ways in, the plans, the open spots, the gallery, +// the posts, how a first time goes, where to find us, the contact and letter forms, the questions, the tools and the closer. +// +// Server Components. Every look is the New World sheet's (components/sites/new-world-sections-css.ts), tokens only, scoped to +// [data-house-theme="new-world"], so these only ever dress the stand-alone site render (theme fence, ADR-1906). The kit's mixed +// registers come from the design's REG map: a block's Register is "auto" by default, which keeps the site's register except where the +// design turns a section to Commons (the regulars' words, the questions) or Stage (the closer); the owner can pin either. +// +// Live where the Space has the data: the hero card, the calendar and the open spots read the Space's upcoming events, the regulars' +// words read its reviews and the questions read its own answers; with none, each shows the rows the owner wrote. A list with no rows +// says so in its own words and never draws an empty box. + +const ICONS: Record = { + users: Users, + calendar: Calendar, + check: Check, + award: Award, + tag: Tag, + heart: Heart, + phone: Phone, + mail: Mail, + clock: Clock, + pin: MapPin, + message: MessageSquare, + star: Star, + sparkle: Sparkles, + eye: Eye, +}; +const ICON_NAMES = Object.keys(ICONS); + +function Icon({ name, tile = false, size = 16 }: { name: string; tile?: boolean; size?: number }) { + const Glyph = ICONS[name] ?? Sparkles; + const glyph =