@krizaka/ui 3.41.1 → 3.43.0
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/RotatingWord-D9s7FXFD.d.ts +46 -0
- package/dist/app-shell.d.ts +9 -3
- package/dist/app-shell.js +6 -4
- package/dist/app-shell.js.map +1 -1
- package/dist/bird-plate.js +1 -1
- package/dist/{chunk-M4DBVG43.js → chunk-MHUUNC5W.js} +4 -3
- package/dist/chunk-MHUUNC5W.js.map +1 -0
- package/dist/{chunk-EZC54B5C.js → chunk-MIMOTE4W.js} +3 -3
- package/dist/{chunk-EZC54B5C.js.map → chunk-MIMOTE4W.js.map} +1 -1
- package/dist/{chunk-CC2FBLLR.js → chunk-P4TTKYC4.js} +2 -2
- package/dist/chunk-P4TTKYC4.js.map +1 -0
- package/dist/code-block.js +1 -1
- package/dist/code-block.js.map +1 -1
- package/dist/date-picker.js +1 -1
- package/dist/date-picker.js.map +1 -1
- package/dist/elephant.d.ts +57 -0
- package/dist/elephant.js +61 -0
- package/dist/elephant.js.map +1 -0
- package/dist/flock.d.ts +7 -1
- package/dist/flock.js +386 -50
- package/dist/flock.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/map.js.map +1 -1
- package/dist/mascot-quote.js +1 -1
- package/dist/mascot-state.js +1 -1
- package/dist/mascots.d.ts +3 -1
- package/dist/mascots.js +1 -1
- package/dist/motion.css +44 -0
- package/dist/motion.d.ts +46 -39
- package/dist/motion.js +42 -1
- package/dist/motion.js.map +1 -1
- package/dist/native/map.js.map +1 -1
- package/dist/native.js.map +1 -1
- package/dist/nav-bar.d.ts +2 -0
- package/dist/nav-bar.js +1 -1
- package/dist/nav-bar.js.map +1 -1
- package/dist/popover.js +1 -1
- package/dist/popover.js.map +1 -1
- package/dist/rail-nav.js +2 -2
- package/dist/rail-nav.js.map +1 -1
- package/dist/site-footer.d.ts +15 -8
- package/dist/site-footer.js +34 -9
- package/dist/site-footer.js.map +1 -1
- package/dist/sites.js +1 -1
- package/dist/sites.js.map +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tabs.js.map +1 -1
- package/package.json +21 -7
- package/registry/account-menu.json +1 -1
- package/registry/achievement.json +1 -1
- package/registry/action-bar.json +1 -1
- package/registry/activity-feed.json +1 -1
- package/registry/alert.json +1 -1
- package/registry/anatomy-plate.json +1 -1
- package/registry/app-header.json +1 -1
- package/registry/app-shell.json +11 -3
- package/registry/argument-card.json +1 -1
- package/registry/audio-player.json +1 -1
- package/registry/auth-layout.json +1 -1
- package/registry/avatar.json +1 -1
- package/registry/badge.json +1 -1
- package/registry/bird-plate.json +1 -1
- package/registry/button.json +1 -1
- package/registry/captcha.json +1 -1
- package/registry/card-grid.json +1 -1
- package/registry/card.json +1 -1
- package/registry/catalogue-page.json +1 -1
- package/registry/changelog-page.json +1 -1
- package/registry/chat.json +1 -1
- package/registry/checkbox.json +1 -1
- package/registry/chip-link.json +1 -1
- package/registry/chip-row.json +1 -1
- package/registry/chip.json +1 -1
- package/registry/choice-grid.json +1 -1
- package/registry/code-block.json +1 -1
- package/registry/combobox.json +1 -1
- package/registry/command.json +1 -1
- package/registry/comparison-table.json +1 -1
- package/registry/component-page.json +1 -1
- package/registry/confirm-button.json +1 -1
- package/registry/contact-page.json +1 -1
- package/registry/continue-prompt.json +1 -1
- package/registry/countdown.json +1 -1
- package/registry/cover-hero.json +1 -1
- package/registry/cta-panel.json +1 -1
- package/registry/dashboard-layout.json +1 -1
- package/registry/data-table.json +1 -1
- package/registry/date-picker.json +1 -1
- package/registry/decision-list.json +1 -1
- package/registry/description-list.json +1 -1
- package/registry/detail-layout.json +1 -1
- package/registry/dialog.json +1 -1
- package/registry/docs-article-page.json +1 -1
- package/registry/docs-hub-page.json +1 -1
- package/registry/docs-layout.json +1 -1
- package/registry/docs-nav.json +1 -1
- package/registry/document-viewer.json +1 -1
- package/registry/dropdown-menu.json +1 -1
- package/registry/elephant.json +192 -0
- package/registry/empty-state.json +1 -1
- package/registry/engine-flow.json +1 -1
- package/registry/error-page.json +1 -1
- package/registry/examples/app-shell/collapse-overflow.d.ts +4 -0
- package/registry/examples/app-shell/collapse-overflow.js +35 -0
- package/registry/examples/app-shell/collapse-overflow.tsx +28 -0
- package/registry/examples/elephant/closing.d.ts +4 -0
- package/registry/examples/elephant/closing.js +14 -0
- package/registry/examples/elephant/closing.tsx +11 -0
- package/registry/examples/elephant/poses.d.ts +4 -0
- package/registry/examples/elephant/poses.js +14 -0
- package/registry/examples/elephant/poses.tsx +11 -0
- package/registry/examples/flock/scenes.d.ts +4 -0
- package/registry/examples/flock/scenes.js +28 -0
- package/registry/examples/flock/scenes.tsx +24 -0
- package/registry/field.json +1 -1
- package/registry/file-upload.json +1 -1
- package/registry/filter-bar.json +1 -1
- package/registry/flock.json +34 -6
- package/registry/footnote.json +1 -1
- package/registry/force-update-screen.json +1 -1
- package/registry/form.json +1 -1
- package/registry/gallery-page.json +1 -1
- package/registry/genui.json +1 -1
- package/registry/glow-card.json +1 -1
- package/registry/goal-gauge.json +1 -1
- package/registry/how-it-works-page.json +1 -1
- package/registry/image-cropper.json +1 -1
- package/registry/index.json +40 -9
- package/registry/iso.json +1 -1
- package/registry/kanban.json +1 -1
- package/registry/kbd.json +1 -1
- package/registry/landing-page.json +1 -1
- package/registry/landscape.json +1 -1
- package/registry/language-switch.json +1 -1
- package/registry/legal-page.json +1 -1
- package/registry/link-card.json +1 -1
- package/registry/list.json +1 -1
- package/registry/loader.json +1 -1
- package/registry/longform-page.json +1 -1
- package/registry/maintenance-screen.json +1 -1
- package/registry/map.json +2 -2
- package/registry/markdown.json +1 -1
- package/registry/marketing-layout.json +1 -1
- package/registry/marquee.json +1 -1
- package/registry/mascot-quote.json +1 -1
- package/registry/mascot-state.json +1 -1
- package/registry/mascots.json +16 -2
- package/registry/match-dialog.json +1 -1
- package/registry/media-capture.json +1 -1
- package/registry/media-gallery.json +1 -1
- package/registry/media-grid.json +1 -1
- package/registry/meta-row.json +1 -1
- package/registry/meter.json +1 -1
- package/registry/nav-bar.json +5 -5
- package/registry/number-ticker.json +1 -1
- package/registry/opening-hours.json +1 -1
- package/registry/page-header.json +1 -1
- package/registry/page-hero.json +1 -1
- package/registry/page-index.json +1 -1
- package/registry/page.json +1 -1
- package/registry/pagination.json +1 -1
- package/registry/photo-grid.json +1 -1
- package/registry/pointer-light.json +1 -1
- package/registry/popover.json +2 -2
- package/registry/pricing-page.json +1 -1
- package/registry/product-page.json +1 -1
- package/registry/profile-card.json +1 -1
- package/registry/progress.json +1 -1
- package/registry/promise-card.json +1 -1
- package/registry/radio-group.json +1 -1
- package/registry/rail-nav.json +3 -3
- package/registry/recipes.json +1 -1
- package/registry/scroll-stage.json +1 -1
- package/registry/search-field.json +1 -1
- package/registry/section-backdrop.json +1 -1
- package/registry/separator.json +1 -1
- package/registry/service-card.json +1 -1
- package/registry/settings-layout.json +1 -1
- package/registry/showcase.json +1 -1
- package/registry/site-footer.json +35 -7
- package/registry/sites.json +2 -2
- package/registry/skeleton.json +1 -1
- package/registry/skip-link.json +1 -1
- package/registry/slider.json +1 -1
- package/registry/slot-picker.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/specimen-tag.json +1 -1
- package/registry/spinner.json +1 -1
- package/registry/split-view.json +1 -1
- package/registry/stage-banner.json +1 -1
- package/registry/stat.json +1 -1
- package/registry/status-page.json +1 -1
- package/registry/step-progress.json +1 -1
- package/registry/step-showcase.json +1 -1
- package/registry/stepper.json +1 -1
- package/registry/sticky-action.json +1 -1
- package/registry/swipe-deck.json +1 -1
- package/registry/switch.json +1 -1
- package/registry/tabs.json +2 -2
- package/registry/tag-input.json +1 -1
- package/registry/tag-selector.json +1 -1
- package/registry/terminal-replay.json +1 -1
- package/registry/theme.json +1 -1
- package/registry/toast.json +1 -1
- package/registry/toc.json +1 -1
- package/registry/tooltip.json +1 -1
- package/registry/tree-view.json +1 -1
- package/registry/update-prompt.json +1 -1
- package/registry/verified-badge.json +1 -1
- package/registry/vertical-video.json +1 -1
- package/registry/video-player.json +1 -1
- package/registry/video-trimmer.json +1 -1
- package/registry/virtual.json +1 -1
- package/registry/waveform.json +1 -1
- package/dist/chunk-CC2FBLLR.js.map +0 -1
- package/dist/chunk-M4DBVG43.js.map +0 -1
package/dist/flock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/flock/flock.tsx"],"sourcesContent":["\"use client\";\n\n// The flock, alive: birds standing on a stage, each at ease in character (Mascot `life`), and the moments between\n// them — two birds glance at each other, the pigeon carries its parcel across, a bird looks up when you come near or tap\n// it. Transform and opacity only: CSS for each bird's own life, a timer for the moments (no frame loop), and nothing at\n// all when the flock is off screen, the tab is hidden or the person asked for less motion.\nimport * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport type { MascotBird, MascotLook } from \"../mascots\";\nimport { Mascot } from \"../mascots\";\n\nexport interface FlockBird {\n /** Which bird. */\n bird: MascotBird;\n /** Where its feet are, across the stage: 0 to 100 (% of the stage's width). */\n x: number;\n /** Where its feet are, down the stage: 0 to 100 (% of the stage's height). */\n y: number;\n /** How wide it is: % of the stage's width. */\n size: number;\n}\n\nexport interface FlockMoments {\n /** Two neighbours look at each other now and then. Default `true`. */\n glance?: boolean;\n /** The pigeon, when the flock has one, carries its parcel across to another bird and comes back. Default `true`. */\n courier?: boolean;\n /** A bird looks up when the pointer comes near, and jumps a little when tapped. Default `true`. */\n react?: boolean;\n}\n\nexport type FlockProps = Omit<React.ComponentProps<\"div\">, \"children\"> &\n FlockMoments & {\n /** The birds on the stage. */\n birds: readonly FlockBird[];\n /** The stage's shape, width over height (default 16 / 9). It keeps its ratio at any width, so the birds keep their places. */\n ratio?: number;\n /** The birds' colours: the host's accent (`brand`, default) or the Krizaka story's (`own`). */\n tone?: \"brand\" | \"own\";\n /** The source of chance (default `Math.random`): give it a fixed one in a test. */\n random?: () => number;\n /** How lively the moments are: 1 is calm (default), 2 doubles how often neighbours glance and the pigeon delivers. */\n tempo?: number;\n /** A bird the page points at (a product the reader is on): it looks up and jumps once each time it changes. */\n active?: MascotBird | null;\n /** The birds greet the reader once as the flock first comes into view: each jumps in turn, left to right. */\n greet?: boolean;\n };\n\n// @fixed: the rhythm of the moments — how long a glance lasts, how often one happens, how long a delivery takes. A\n// choreography's pace, not a business parameter.\nconst GLANCE_HOLD_MS = [1500, 2400] as const;\nconst GLANCE_EVERY_MS = [4200, 9000] as const;\nconst COURIER_FIRST_MS = 9000;\nconst COURIER_EVERY_MS = [26000, 38000] as const;\nconst FLIGHT_MS = 2600;\nconst HAND_OVER_MS = 1300;\nconst LOOK_BACK_MS = 1600;\n\nconst between = (random: () => number, [lo, hi]: readonly [number, number], tempo = 1) => (lo + random() * (hi - lo)) / tempo;\nconst GREET_STEP_MS = 110;\nconst POKE_MS = 700;\n\n/** `true` while the page may move: no reduced-motion request, the tab visible. */\nfunction useMayMove(): boolean {\n const [may, setMay] = React.useState(false);\n React.useEffect(() => {\n const query = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const update = () => setMay(!query.matches && document.visibilityState !== \"hidden\");\n update();\n query.addEventListener(\"change\", update);\n document.addEventListener(\"visibilitychange\", update);\n return () => {\n query.removeEventListener(\"change\", update);\n document.removeEventListener(\"visibilitychange\", update);\n };\n }, []);\n return may;\n}\n\n/** `true` while the element is on screen. */\nfunction useOnScreen(ref: React.RefObject<Element | null>): boolean {\n const [on, setOn] = React.useState(false);\n React.useEffect(() => {\n const el = ref.current;\n if (!el || typeof IntersectionObserver === \"undefined\") return;\n const observer = new IntersectionObserver(([entry]) => setOn(Boolean(entry?.isIntersecting)), { threshold: 0.1 });\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n return on;\n}\n\n/**\n * The flock on its stage, alive. Decorative (`aria-hidden`): put the words beside it. Each bird idles in character; every\n * few seconds two neighbours glance at each other; every half minute the pigeon carries its parcel to another bird and\n * returns; a bird looks up when you come near. All of it pauses off screen and in a hidden tab, and the flock is still\n * under `prefers-reduced-motion`.\n */\nexport function Flock({ birds, ratio = 16 / 9, tone = \"brand\", glance = true, courier = true, react = true, random = Math.random, tempo = 1, active = null, greet = false, className, style, ...props }: FlockProps) {\n const stage = React.useRef<HTMLDivElement>(null);\n const bodies = React.useRef<(HTMLDivElement | null)[]>([]);\n const may = useMayMove();\n const onScreen = useOnScreen(stage);\n const running = may && onScreen;\n const [looks, setLooks] = React.useState<Record<number, MascotLook>>({});\n const [flying, setFlying] = React.useState<{ index: number; bank: number } | null>(null);\n const [poked, setPoked] = React.useState<Record<number, boolean>>({});\n\n // Left to right: a bird's neighbours are the birds beside it on the stage.\n const order = React.useMemo(() => birds.map((_, i) => i).sort((a, b) => birds[a]!.x - birds[b]!.x), [birds]);\n const look = (index: number, to: MascotLook) => setLooks((l) => (l[index] === to ? l : { ...l, [index]: to }));\n const rest = (...indexes: number[]) => setLooks((l) => Object.fromEntries(Object.entries(l).filter(([k]) => !indexes.includes(Number(k)))));\n\n // Glances: two neighbours turn towards each other, hold, and look away.\n React.useEffect(() => {\n if (!running || !glance || order.length < 2) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let back: ReturnType<typeof setTimeout> | undefined;\n const next = () => {\n timer = setTimeout(() => {\n const at = Math.floor(random() * (order.length - 1));\n const [a, b] = [order[at]!, order[at + 1]!];\n look(a, \"right\");\n look(b, \"left\");\n back = setTimeout(() => {\n rest(a, b);\n next();\n }, between(random, GLANCE_HOLD_MS));\n }, between(random, GLANCE_EVERY_MS, tempo));\n };\n next();\n return () => {\n clearTimeout(timer);\n clearTimeout(back);\n };\n }, [running, glance, order, random, tempo]);\n\n // The delivery: the pigeon takes its parcel across to the farthest bird, hands it over, and flies back.\n React.useEffect(() => {\n const pigeon = birds.findIndex((b) => b.bird === \"pigeon\");\n if (!running || !courier || pigeon < 0 || birds.length < 2) return;\n let alive = true;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let animation: Animation | undefined;\n const wait = (ms: number) => new Promise<void>((resolve) => (timer = setTimeout(resolve, ms)));\n const trip = async () => {\n const el = bodies.current[pigeon];\n const box = stage.current?.getBoundingClientRect();\n if (!el || !box || typeof el.animate !== \"function\") return;\n // The farthest bird from the pigeon, so the parcel crosses the whole stage.\n const from = birds[pigeon]!;\n const target = birds.reduce((far, b, i) => (i !== pigeon && Math.abs(b.x - from.x) > Math.abs(birds[far]!.x - from.x) ? i : far), pigeon === 0 ? 1 : 0);\n const to = birds[target]!;\n const side = to.x > from.x ? 1 : -1;\n // It lands beside the receiver, not on it.\n const dx = ((to.x - from.x) / 100) * box.width - side * (to.size / 100) * box.width * 0.55;\n const lift = (from.size / 100) * box.width * 0.35;\n const fly = async (fromX: number, toX: number) => {\n setFlying({ index: pigeon, bank: Math.sign(toX - fromX) });\n animation = el.animate(\n [\n { transform: `translate(${fromX}px, 0)`, easing: \"ease-out\" },\n { transform: `translate(${(fromX + toX) / 2}px, ${-lift}px)`, easing: \"ease-in\", offset: 0.5 },\n { transform: `translate(${toX}px, 0)` },\n ],\n { duration: FLIGHT_MS, fill: \"forwards\" },\n );\n await animation.finished.catch(() => undefined);\n setFlying(null);\n };\n look(target, side > 0 ? \"left\" : \"right\");\n await fly(0, dx);\n if (!alive) return;\n // The hand-over: the receiver looks at the pigeon, the pigeon hops on the doorstep.\n setPoked((p) => ({ ...p, [pigeon]: true }));\n await wait(HAND_OVER_MS);\n if (!alive) return;\n setPoked((p) => ({ ...p, [pigeon]: false }));\n look(target, \"up\");\n await fly(dx, 0);\n animation?.cancel();\n rest(target);\n };\n const schedule = (ms: number) => {\n timer = setTimeout(async () => {\n await trip();\n if (alive) schedule(between(random, COURIER_EVERY_MS, tempo));\n }, ms);\n };\n schedule(COURIER_FIRST_MS / tempo);\n return () => {\n alive = false;\n clearTimeout(timer);\n animation?.cancel();\n setFlying(null);\n };\n }, [running, courier, birds, random, tempo]);\n\n // The greeting: the first time the flock is on screen, each bird jumps in turn.\n const greeted = React.useRef(false);\n React.useEffect(() => {\n if (!running || !greet || greeted.current) return;\n greeted.current = true;\n const timers: ReturnType<typeof setTimeout>[] = [];\n order.forEach((index, n) => {\n timers.push(setTimeout(() => setPoked((p) => ({ ...p, [index]: true })), n * GREET_STEP_MS));\n timers.push(setTimeout(() => setPoked((p) => ({ ...p, [index]: false })), n * GREET_STEP_MS + POKE_MS));\n });\n return () => timers.forEach(clearTimeout);\n }, [running, greet, order]);\n\n // The bird the page points at looks up and jumps.\n React.useEffect(() => {\n const index = active ? birds.findIndex((b) => b.bird === active) : -1;\n if (!running || index < 0) return;\n const start = setTimeout(() => {\n look(index, \"up\");\n setPoked((p) => ({ ...p, [index]: true }));\n }, 0);\n const t = setTimeout(() => setPoked((p) => ({ ...p, [index]: false })), POKE_MS);\n return () => {\n clearTimeout(start);\n clearTimeout(t);\n setPoked((p) => ({ ...p, [index]: false }));\n rest(index);\n };\n }, [active, running, birds]);\n\n // A bird looks up when you come near, and jumps when you tap it.\n const hover = (index: number, event: React.PointerEvent) => {\n if (!running || !react || event.pointerType !== \"mouse\") return;\n look(index, \"up\");\n };\n const leave = (index: number) => {\n if (!react) return;\n rest(index);\n };\n const tap = (index: number) => {\n if (!running || !react) return;\n look(index, \"up\");\n setPoked((p) => ({ ...p, [index]: true }));\n setTimeout(() => {\n setPoked((p) => ({ ...p, [index]: false }));\n rest(index);\n }, LOOK_BACK_MS);\n };\n\n return (\n <div\n ref={stage}\n aria-hidden\n data-flock=\"\"\n data-running={running ? \"\" : undefined}\n className={cn(\"relative w-full\", className)}\n style={{ aspectRatio: String(ratio), containerType: \"inline-size\", ...style }}\n {...props}\n >\n {birds.map((b, i) => (\n <div\n key={`${b.bird}-${i}`}\n ref={(el) => {\n bodies.current[i] = el;\n }}\n data-flock-bird={b.bird}\n className=\"absolute touch-manipulation\"\n style={{ left: `${b.x - b.size / 2}%`, width: `${b.size}%`, top: `calc(${b.y}% - ${b.size * 0.9}cqw)`, aspectRatio: \"1\", pointerEvents: react ? \"auto\" : \"none\" }}\n onPointerEnter={(event) => hover(i, event)}\n onPointerLeave={() => leave(i)}\n onPointerDown={() => tap(i)}\n >\n <Mascot\n bird={b.bird}\n tone={tone}\n life\n look={looks[i]}\n flying={flying?.index === i}\n bank={flying?.index === i ? flying.bank : 0}\n poked={poked[i]}\n size={120}\n style={{ width: \"100%\", height: \"100%\", display: \"block\", overflow: \"visible\" }}\n />\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/flock/flock.tsx","../src/flock/scenes.tsx"],"sourcesContent":["\"use client\";\n\n// The flock, alive: birds standing on a stage, each at ease in character (Mascot `life`), and the moments between\n// them — two birds glance at each other, the pigeon carries its parcel across, a bird looks up when you come near or tap\n// it. Transform and opacity only: CSS for each bird's own life, a timer for the moments (no frame loop), and nothing at\n// all when the flock is off screen, the tab is hidden or the person asked for less motion.\nimport * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport type { MascotBird, MascotLook } from \"../mascots\";\nimport { Mascot } from \"../mascots\";\nimport { BEATS, neighbourOf, Prop, receive, type Shown, type Stage } from \"./scenes\";\n\nexport interface FlockBird {\n /** Which bird. */\n bird: MascotBird;\n /** Where its feet are, across the stage: 0 to 100 (% of the stage's width). */\n x: number;\n /** Where its feet are, down the stage: 0 to 100 (% of the stage's height). */\n y: number;\n /** How wide it is: % of the stage's width. */\n size: number;\n}\n\nexport interface FlockMoments {\n /** Two neighbours look at each other now and then. Default `true`. */\n glance?: boolean;\n /** The pigeon, when the flock has one, carries its parcel across to another bird and comes back. Default `true`. */\n courier?: boolean;\n /** A bird looks up when the pointer comes near, and jumps a little when tapped. Default `true`. */\n react?: boolean;\n /**\n * Scenes, true to each bird's promise: the owl reads a book, the flamingo and the lovebird talk with a speech mark, the\n * crane steps and bows, the beaver taps a log, the magpie takes a shiny point, the duck builds, the falcon scans — and the\n * pigeon hands its parcel over, which the receiver opens in its own way. One at a time, at random. Default `false`.\n */\n scenes?: boolean;\n}\n\nexport type FlockProps = Omit<React.ComponentProps<\"div\">, \"children\"> &\n FlockMoments & {\n /** The birds on the stage. */\n birds: readonly FlockBird[];\n /** The stage's shape, width over height (default 16 / 9). It keeps its ratio at any width, so the birds keep their places. */\n ratio?: number;\n /** The birds' colours: the host's accent (`brand`, default) or the Krizaka story's (`own`). */\n tone?: \"brand\" | \"own\";\n /** The source of chance (default `Math.random`): give it a fixed one in a test. */\n random?: () => number;\n /** How lively the moments are: 1 is calm (default), 2 doubles how often neighbours glance and the pigeon delivers. */\n tempo?: number;\n /** A bird the page points at (a product the reader is on): it looks up and jumps once each time it changes. */\n active?: MascotBird | null;\n /** The birds greet the reader once as the flock first comes into view: each jumps in turn, left to right. */\n greet?: boolean;\n };\n\n// @fixed: the rhythm of the moments — how long a glance lasts, how often one happens, how long a delivery takes. A\n// choreography's pace, not a business parameter.\nconst GLANCE_HOLD_MS = [1500, 2400] as const;\nconst GLANCE_EVERY_MS = [4200, 9000] as const;\nconst COURIER_FIRST_MS = 9000;\nconst COURIER_EVERY_MS = [26000, 38000] as const;\nconst FLIGHT_MS = 2600;\nconst HAND_OVER_MS = 1300;\nconst LOOK_BACK_MS = 1600;\n\nconst between = (random: () => number, [lo, hi]: readonly [number, number], tempo = 1) => (lo + random() * (hi - lo)) / tempo;\n// @fixed: the scenes' pace — the wait between two beats, and the rarer long pause.\nconst SCENE_EVERY_MS = [2600, 5200] as const;\nconst SCENE_PAUSE_MS = [8000, 12000] as const;\nconst GREET_STEP_MS = 110;\nconst POKE_MS = 700;\n\n/** `true` while the page may move: no reduced-motion request, the tab visible. */\nfunction useMayMove(): boolean {\n const [may, setMay] = React.useState(false);\n React.useEffect(() => {\n const query = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n // The page settles first: `html[data-motion=\"settling\"]` (MotionObserver) holds every loop until it is `ready`.\n const settled = () => document.documentElement.getAttribute(\"data-motion\") !== \"settling\";\n const update = () => setMay(!query.matches && document.visibilityState !== \"hidden\" && settled());\n update();\n query.addEventListener(\"change\", update);\n document.addEventListener(\"visibilitychange\", update);\n const watch = typeof MutationObserver === \"undefined\" ? null : new MutationObserver(update);\n watch?.observe(document.documentElement, { attributes: true, attributeFilter: [\"data-motion\"] });\n return () => {\n query.removeEventListener(\"change\", update);\n document.removeEventListener(\"visibilitychange\", update);\n watch?.disconnect();\n };\n }, []);\n return may;\n}\n\n/** `true` while the element is on screen. */\nfunction useOnScreen(ref: React.RefObject<Element | null>): boolean {\n const [on, setOn] = React.useState(false);\n React.useEffect(() => {\n const el = ref.current;\n if (!el || typeof IntersectionObserver === \"undefined\") return;\n const observer = new IntersectionObserver(([entry]) => setOn(Boolean(entry?.isIntersecting)), { threshold: 0.1 });\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n return on;\n}\n\n/**\n * The flock on its stage, alive. Decorative (`aria-hidden`): put the words beside it. Each bird idles in character; every\n * few seconds two neighbours glance at each other; every half minute the pigeon carries its parcel to another bird and\n * returns; a bird looks up when you come near. All of it pauses off screen and in a hidden tab, and the flock is still\n * under `prefers-reduced-motion`.\n */\nexport function Flock({ birds, ratio = 16 / 9, tone = \"brand\", glance = true, courier = true, react = true, scenes = false, random = Math.random, tempo = 1, active = null, greet = false, className, style, ...props }: FlockProps) {\n const stage = React.useRef<HTMLDivElement>(null);\n const bodies = React.useRef<(HTMLDivElement | null)[]>([]);\n const may = useMayMove();\n const onScreen = useOnScreen(stage);\n const running = may && onScreen;\n const [looks, setLooks] = React.useState<Record<number, MascotLook>>({});\n const [flying, setFlying] = React.useState<{ index: number; bank: number } | null>(null);\n const [poked, setPoked] = React.useState<Record<number, boolean>>({});\n const [shown, setShown] = React.useState<Shown[]>([]);\n const [empty, setEmpty] = React.useState<Record<number, boolean>>({});\n // Birds a scene holds (a glance or a trip leaves them alone), and the scene or the trip in progress.\n const held = React.useRef(new Set<number>());\n const busy = React.useRef<\"scene\" | \"trip\" | null>(null);\n const ids = React.useRef(0);\n\n // Left to right: a bird's neighbours are the birds beside it on the stage.\n const order = React.useMemo(() => birds.map((_, i) => i).sort((a, b) => birds[a]!.x - birds[b]!.x), [birds]);\n const look = React.useCallback((index: number, to: MascotLook) => setLooks((l) => (l[index] === to ? l : { ...l, [index]: to })), []);\n const rest = React.useCallback((...indexes: number[]) => setLooks((l) => Object.fromEntries(Object.entries(l).filter(([k]) => !indexes.includes(Number(k))))), []);\n\n // What a scene can do, bound to one run of an effect: every timer and animation it starts ends with the run.\n const stageFor = React.useCallback((run: { timers: Set<ReturnType<typeof setTimeout>>; anims: Set<Animation> }): Stage => {\n const later = (fn: () => void, ms: number) => {\n const t = setTimeout(() => {\n run.timers.delete(t);\n fn();\n }, ms);\n run.timers.add(t);\n };\n const poke = (index: number, ms = POKE_MS) => {\n setPoked((p) => ({ ...p, [index]: true }));\n later(() => setPoked((p) => ({ ...p, [index]: false })), ms);\n };\n const show = (index: number, kind: Shown[\"kind\"], ms: number, side?: 1 | -1, mark?: string) => {\n const item: Shown = { id: ++ids.current, at: index, kind, ms, side, mark };\n setShown((all) => [...all, item]);\n later(() => setShown((all) => all.filter((x) => x.id !== item.id)), ms);\n };\n return {\n birds,\n order,\n random,\n look,\n rest,\n poke,\n show,\n say: (index, mark, ms) => show(index, \"say\", ms, undefined, mark),\n wait: (ms) => new Promise<void>((resolve) => later(resolve, ms)),\n move: async (index, keyframes, ms) => {\n const el = bodies.current[index];\n if (!el || typeof el.animate !== \"function\") return;\n const animation = el.animate(keyframes, { duration: ms });\n run.anims.add(animation);\n await animation.finished.catch(() => undefined);\n run.anims.delete(animation);\n },\n };\n }, [birds, order, random, look, rest]);\n\n // Glances: two neighbours turn towards each other, hold, and look away.\n React.useEffect(() => {\n if (!running || !glance || order.length < 2) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let back: ReturnType<typeof setTimeout> | undefined;\n const next = () => {\n timer = setTimeout(() => {\n const at = Math.floor(random() * (order.length - 1));\n const [a, b] = [order[at]!, order[at + 1]!];\n if (held.current.has(a) || held.current.has(b)) return next();\n look(a, \"right\");\n look(b, \"left\");\n back = setTimeout(() => {\n rest(a, b);\n next();\n }, between(random, GLANCE_HOLD_MS));\n }, between(random, GLANCE_EVERY_MS, tempo));\n };\n next();\n return () => {\n clearTimeout(timer);\n clearTimeout(back);\n };\n }, [running, glance, order, random, tempo, look, rest]);\n\n // The delivery: the pigeon takes its parcel across to the farthest bird, hands it over, and flies back.\n React.useEffect(() => {\n const pigeon = birds.findIndex((b) => b.bird === \"pigeon\");\n if (!running || !courier || pigeon < 0 || birds.length < 2) return;\n let alive = true;\n const heldNow = held.current;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let animation: Animation | undefined;\n const run = { timers: new Set<ReturnType<typeof setTimeout>>(), anims: new Set<Animation>() };\n // The farthest bird from the pigeon, so the parcel crosses the whole stage.\n const from = birds[pigeon]!;\n const target = birds.reduce((far, b, i) => (i !== pigeon && Math.abs(b.x - from.x) > Math.abs(birds[far]!.x - from.x) ? i : far), pigeon === 0 ? 1 : 0);\n const wait = (ms: number) => new Promise<void>((resolve) => (timer = setTimeout(resolve, ms)));\n const trip = async () => {\n // With scenes, the trip waits for the beat in progress and holds the stage while it lasts.\n while (alive && scenes && busy.current === \"scene\") await wait(400);\n if (!alive) return;\n busy.current = \"trip\";\n const el = bodies.current[pigeon];\n const box = stage.current?.getBoundingClientRect();\n if (!el || !box || typeof el.animate !== \"function\") return;\n const to = birds[target]!;\n const side = to.x > from.x ? 1 : -1;\n // It lands beside the receiver, not on it.\n const dx = ((to.x - from.x) / 100) * box.width - side * (to.size / 100) * box.width * 0.55;\n const lift = (from.size / 100) * box.width * 0.35;\n const fly = async (fromX: number, toX: number) => {\n setFlying({ index: pigeon, bank: Math.sign(toX - fromX) });\n animation = el.animate(\n [\n { transform: `translate(${fromX}px, 0)`, easing: \"ease-out\" },\n { transform: `translate(${(fromX + toX) / 2}px, ${-lift}px)`, easing: \"ease-in\", offset: 0.5 },\n { transform: `translate(${toX}px, 0)` },\n ],\n { duration: FLIGHT_MS, fill: \"forwards\" },\n );\n await animation.finished.catch(() => undefined);\n setFlying(null);\n };\n look(target, side > 0 ? \"left\" : \"right\");\n held.current.add(target);\n await fly(0, dx);\n if (!alive) return;\n // The hand-over: the receiver looks at the pigeon, the pigeon hops on the doorstep.\n setPoked((p) => ({ ...p, [pigeon]: true }));\n if (scenes) {\n // …and the parcel changes hands: the receiver takes it and reacts in character, the pigeon flies back light.\n setEmpty((e) => ({ ...e, [pigeon]: true }));\n const reaction = receive(stageFor(run), target, pigeon);\n await wait(HAND_OVER_MS);\n if (!alive) return;\n setPoked((p) => ({ ...p, [pigeon]: false }));\n await reaction;\n } else {\n await wait(HAND_OVER_MS);\n if (!alive) return;\n setPoked((p) => ({ ...p, [pigeon]: false }));\n }\n if (!alive) return;\n look(target, \"up\");\n await fly(dx, 0);\n animation?.cancel();\n setEmpty((e) => ({ ...e, [pigeon]: false }));\n rest(target);\n };\n const schedule = (ms: number) => {\n timer = setTimeout(async () => {\n await trip();\n busy.current = null;\n held.current.delete(target);\n if (alive) schedule(between(random, COURIER_EVERY_MS, tempo));\n }, ms);\n };\n schedule(COURIER_FIRST_MS / tempo);\n return () => {\n alive = false;\n clearTimeout(timer);\n animation?.cancel();\n run.timers.forEach(clearTimeout);\n run.anims.forEach((a) => a.cancel());\n if (scenes) {\n setShown([]);\n setEmpty({});\n heldNow.clear();\n busy.current = null;\n }\n setFlying(null);\n };\n }, [running, courier, birds, random, tempo, scenes, stageFor, look, rest]);\n\n // The scenes: one beat at a time, picked at random from what the flock holds — never the same bird twice in a row, never\n // at a regular beat (short waits, now and then a long pause) — so the minute is never the same twice.\n React.useEffect(() => {\n if (!running || !scenes || birds.length < 1) return;\n let alive = true;\n const heldNow = held.current;\n const run = { timers: new Set<ReturnType<typeof setTimeout>>(), anims: new Set<Animation>() };\n const st = stageFor(run);\n const beats = BEATS.flatMap((beat) => birds.flatMap((b, i) => (b.bird === beat.bird ? [{ beat, index: i }] : [])));\n if (!beats.length) return;\n let last = -1;\n const next = async () => {\n const long = random() < 0.2;\n await st.wait(between(random, long ? SCENE_PAUSE_MS : SCENE_EVERY_MS, tempo));\n while (alive && busy.current === \"trip\") await st.wait(600);\n if (!alive) return;\n const pool = beats.filter((x) => x.index !== last);\n const pick = (pool.length ? pool : beats)[Math.floor(random() * (pool.length ? pool.length : beats.length))]!;\n last = pick.index;\n busy.current = \"scene\";\n // The scene's birds are held, so no glance cuts across it.\n const near = neighbourOf(st, pick.index);\n held.current.add(pick.index);\n if (near !== null) held.current.add(near);\n await pick.beat.run(st, pick.index);\n held.current.delete(pick.index);\n if (near !== null) held.current.delete(near);\n if (busy.current === \"scene\") busy.current = null;\n if (alive) void next();\n };\n void next();\n return () => {\n alive = false;\n run.timers.forEach(clearTimeout);\n run.anims.forEach((a) => a.cancel());\n setShown([]);\n heldNow.clear();\n busy.current = null;\n };\n }, [running, scenes, birds, random, tempo, stageFor]);\n\n // The greeting: the first time the flock is on screen, each bird jumps in turn.\n const greeted = React.useRef(false);\n React.useEffect(() => {\n if (!running || !greet || greeted.current) return;\n greeted.current = true;\n const timers: ReturnType<typeof setTimeout>[] = [];\n order.forEach((index, n) => {\n timers.push(setTimeout(() => setPoked((p) => ({ ...p, [index]: true })), n * GREET_STEP_MS));\n timers.push(setTimeout(() => setPoked((p) => ({ ...p, [index]: false })), n * GREET_STEP_MS + POKE_MS));\n });\n return () => timers.forEach(clearTimeout);\n }, [running, greet, order]);\n\n // The bird the page points at looks up and jumps.\n React.useEffect(() => {\n const index = active ? birds.findIndex((b) => b.bird === active) : -1;\n if (!running || index < 0) return;\n const start = setTimeout(() => {\n look(index, \"up\");\n setPoked((p) => ({ ...p, [index]: true }));\n }, 0);\n const t = setTimeout(() => setPoked((p) => ({ ...p, [index]: false })), POKE_MS);\n return () => {\n clearTimeout(start);\n clearTimeout(t);\n setPoked((p) => ({ ...p, [index]: false }));\n rest(index);\n };\n }, [active, running, birds, look, rest]);\n\n // A bird looks up when you come near, and jumps when you tap it.\n const hover = (index: number, event: React.PointerEvent) => {\n if (!running || !react || event.pointerType !== \"mouse\") return;\n look(index, \"up\");\n };\n const leave = (index: number) => {\n if (!react) return;\n rest(index);\n };\n const tap = (index: number) => {\n if (!running || !react) return;\n look(index, \"up\");\n setPoked((p) => ({ ...p, [index]: true }));\n setTimeout(() => {\n setPoked((p) => ({ ...p, [index]: false }));\n rest(index);\n }, LOOK_BACK_MS);\n };\n\n return (\n <div\n ref={stage}\n aria-hidden\n data-flock=\"\"\n data-running={running ? \"\" : undefined}\n data-motion-scope=\"\"\n className={cn(\"relative w-full\", className)}\n style={{ aspectRatio: String(ratio), containerType: \"inline-size\", ...style }}\n {...props}\n >\n {birds.map((b, i) => (\n <div\n key={`${b.bird}-${i}`}\n ref={(el) => {\n bodies.current[i] = el;\n }}\n data-flock-bird={b.bird}\n className=\"absolute touch-manipulation\"\n style={{ left: `${b.x - b.size / 2}%`, width: `${b.size}%`, top: `calc(${b.y}% - ${b.size * 0.9}cqw)`, aspectRatio: \"1\", pointerEvents: react ? \"auto\" : \"none\" }}\n onPointerEnter={(event) => hover(i, event)}\n onPointerLeave={() => leave(i)}\n onPointerDown={() => tap(i)}\n >\n <Mascot\n bird={b.bird}\n tone={tone}\n life\n look={looks[i]}\n flying={flying?.index === i}\n bank={flying?.index === i ? flying.bank : 0}\n poked={poked[i]}\n carrying={!empty[i]}\n size={120}\n style={{ width: \"100%\", height: \"100%\", display: \"block\", overflow: \"visible\" }}\n />\n {shown\n .filter((x) => x.at === i)\n .map((x) => (\n <Prop key={x.id} shown={x} size={b.size} />\n ))}\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\n// The flock's scenes: what a bird does between the idle motions, each one true to the promise it carries — the owl reads\n// (a book, a leaf turned), the flamingo and the lovebird answer (a speech mark, a reply), the crane steps and bows, the\n// beaver carries a log and taps it, the magpie spots a shiny point and takes it, the duck builds, the falcon scans — and the\n// pigeon's parcel changes hands: the receiver reacts in its own way. A director picks one beat at a time from what the\n// flock holds, with chance in the waits and in the choice, so it never loops the same minute twice. Transform and opacity\n// only (Web Animations on a few small elements, timers between beats); nothing runs off screen or under reduced motion.\nimport * as React from \"react\";\n\nimport type { MascotBird, MascotLook } from \"../mascots\";\nimport { PARCEL } from \"../mascots/geometry\";\n\nexport type PropKind = \"say\" | \"book\" | \"log\" | \"glint\" | \"gift\";\n\n/** A small thing a bird shows for a while: a speech mark, a book, a log, a shiny point, a parcel. */\nexport interface Shown {\n id: number;\n /** Index of the bird it belongs to. */\n at: number;\n kind: PropKind;\n /** How long it stays (ms). */\n ms: number;\n /** The mark of a speech bubble. */\n mark?: string;\n /** Which side it comes from (1: right, -1: left). */\n side?: 1 | -1;\n}\n\n/** What a beat can do on the stage (built by `Flock`; every wait ends when the flock stops). */\nexport interface Stage {\n birds: readonly { bird: MascotBird; x: number; y: number; size: number }[];\n /** Indexes left to right. */\n order: readonly number[];\n random: () => number;\n look: (index: number, to: MascotLook) => void;\n rest: (...indexes: number[]) => void;\n poke: (index: number, ms?: number) => void;\n say: (index: number, mark: string, ms: number) => void;\n show: (index: number, kind: PropKind, ms: number, side?: 1 | -1) => void;\n /** Move a bird's body for a while (transform only). */\n move: (index: number, keyframes: Keyframe[], ms: number) => Promise<void>;\n wait: (ms: number) => Promise<void>;\n}\n\nconst side = (s: Stage, i: number, j: number): 1 | -1 => (s.birds[j]!.x >= s.birds[i]!.x ? 1 : -1);\nconst towards = (s: Stage, i: number, j: number): MascotLook => (side(s, i, j) > 0 ? \"right\" : \"left\");\n/** Where a bird is among its neighbours, left to right: the one beside it (the nearer one when there are two). */\nexport function neighbourOf(s: Stage, i: number): number | null {\n const at = s.order.indexOf(i);\n const near = [s.order[at - 1], s.order[at + 1]].filter((n): n is number => n !== undefined);\n if (!near.length) return null;\n return near.reduce((a, b) => (Math.abs(s.birds[a]!.x - s.birds[i]!.x) <= Math.abs(s.birds[b]!.x - s.birds[i]!.x) ? a : b));\n}\n\n// @fixed: the choreography's pace — how long each beat lasts. A rhythm to the eye, not a business parameter.\nconst BOOK_MS = 4800;\nconst LOG_MS = 3800;\nconst GLINT_MS = 3400;\nconst SAY_MS = 1500;\n\n/** The owl reads: it looks down at its book, a leaf turns, and it turns another. A neighbour glances over. */\nasync function read(s: Stage, i: number) {\n const j = neighbourOf(s, i);\n s.look(i, \"left\");\n s.show(i, \"book\", BOOK_MS);\n await s.wait(BOOK_MS * 0.45);\n if (j !== null && s.random() < 0.5) {\n s.look(j, towards(s, j, i));\n await s.wait(1100);\n s.rest(j);\n }\n await s.wait(BOOK_MS * 0.5);\n s.rest(i);\n}\n\n/** The flamingo or the lovebird speaks; its neighbour listens, then answers, and they both light up. */\nasync function chat(s: Stage, i: number) {\n const j = neighbourOf(s, i);\n s.look(i, j === null ? \"up\" : towards(s, i, j));\n s.say(i, \"…\", SAY_MS);\n await s.wait(SAY_MS * 0.6);\n if (j === null) {\n await s.wait(SAY_MS * 0.6);\n s.rest(i);\n return;\n }\n s.look(j, towards(s, j, i));\n await s.wait(SAY_MS * 0.7);\n s.say(j, s.random() < 0.5 ? \"!\" : \"?\", SAY_MS);\n s.poke(j);\n await s.wait(SAY_MS * 0.5);\n s.poke(i);\n await s.wait(SAY_MS * 0.7);\n s.rest(i, j);\n}\n\n/** The crane steps out of the line, bows to its neighbour, and steps back. */\nasync function bow(s: Stage, i: number) {\n const j = neighbourOf(s, i);\n const dir = j === null ? 1 : side(s, i, j);\n const step = `${(s.birds[i]!.size * 0.14 * dir).toFixed(2)}cqw`;\n const lean = `rotate(${dir * 11}deg)`;\n const at = (x: string, r: string) => `translateX(${x}) ${r}`;\n const run = s.move(\n i,\n [\n { transform: at(\"0cqw\", \"rotate(0deg)\"), easing: \"ease-in-out\" },\n { transform: at(step, \"rotate(0deg)\"), offset: 0.22, easing: \"ease-in-out\" },\n { transform: at(step, lean), offset: 0.42, easing: \"ease-in-out\" },\n { transform: at(step, lean), offset: 0.6, easing: \"ease-in-out\" },\n { transform: at(step, \"rotate(0deg)\"), offset: 0.74, easing: \"ease-in-out\" },\n { transform: at(\"0cqw\", \"rotate(0deg)\") },\n ],\n 3800,\n );\n if (j !== null) {\n await s.wait(1700);\n s.look(j, towards(s, j, i));\n await s.wait(1200);\n s.poke(j);\n await s.wait(500);\n s.rest(j);\n }\n await run;\n}\n\n/** The beaver brings a log, taps it into place three times, and takes it away. */\nasync function tap(s: Stage, i: number) {\n s.show(i, \"log\", LOG_MS, s.birds[i]!.x > 50 ? 1 : -1);\n await s.wait(LOG_MS * 0.3);\n for (let n = 0; n < 3; n++) {\n s.poke(i, 420);\n await s.wait(520);\n }\n await s.wait(LOG_MS * 0.3);\n}\n\n/** The magpie sees something shiny on the ground, looks, hops, and takes it. */\nasync function shine(s: Stage, i: number) {\n const dir: 1 | -1 = s.birds[i]!.x > 50 ? -1 : 1;\n const to: MascotLook = dir > 0 ? \"right\" : \"left\";\n s.show(i, \"glint\", GLINT_MS, dir);\n await s.wait(GLINT_MS * 0.28);\n s.look(i, to);\n await s.wait(GLINT_MS * 0.3);\n s.poke(i);\n await s.wait(GLINT_MS * 0.25);\n s.look(i, \"up\");\n await s.wait(GLINT_MS * 0.2);\n s.rest(i);\n}\n\n/** The duck builds: quick nods in a burst, like typing a block into place. */\nasync function build(s: Stage, i: number) {\n for (let n = 0; n < 4; n++) {\n s.poke(i, 300);\n await s.wait(380);\n }\n}\n\n/** The falcon watches: a slow scan, left then right, and a look up. */\nasync function scan(s: Stage, i: number) {\n for (const to of [\"left\", \"up\", \"right\"] as const) {\n s.look(i, to);\n await s.wait(1100);\n }\n s.rest(i);\n}\n\n/** The pigeon's parcel has just been handed over: the receiver reacts in its own way (about 2 s). */\nexport async function receive(s: Stage, i: number, from: number) {\n const bird = s.birds[i]!.bird;\n s.look(i, towards(s, i, from));\n s.show(i, \"gift\", 2400);\n await s.wait(350);\n if (bird === \"crane\") await bow(s, i);\n else if (bird === \"magpie\") {\n s.poke(i);\n await s.wait(700);\n s.show(i, \"glint\", GLINT_MS * 0.6, side(s, i, from));\n await s.wait(1200);\n } else if (bird === \"beaver\" || bird === \"duck\") {\n s.poke(i, 420);\n await s.wait(520);\n s.poke(i, 420);\n await s.wait(900);\n } else if (bird === \"owl\") {\n s.say(i, \"?\", SAY_MS);\n await s.wait(900);\n s.poke(i);\n await s.wait(700);\n } else {\n s.say(i, \"!\", SAY_MS);\n s.poke(i);\n await s.wait(1500);\n }\n}\n\nexport interface Beat {\n id: string;\n bird: MascotBird;\n run: (s: Stage, index: number) => Promise<void>;\n}\n\n/** What each bird of the flock can do on its own (the pigeon's trip is the flock's courier). */\nexport const BEATS: readonly Beat[] = [\n { id: \"read\", bird: \"owl\", run: read },\n { id: \"chat\", bird: \"flamingo\", run: chat },\n { id: \"chat\", bird: \"lovebird\", run: chat },\n { id: \"bow\", bird: \"crane\", run: bow },\n { id: \"tap\", bird: \"beaver\", run: tap },\n { id: \"shine\", bird: \"magpie\", run: shine },\n { id: \"build\", bird: \"duck\", run: build },\n { id: \"scan\", bird: \"falcon\", run: scan },\n];\n\n// ─── The small things a bird shows ───────────────────────────────────────────────────────────────\n\nconst PAPER = \"var(--kz-surface-1)\";\nconst INK = \"var(--kz-text-primary)\";\nconst LINE = \"var(--kz-border-strong, currentColor)\";\n\n/** One thing, in its own frame: it comes in, stays for `ms`, and goes (opacity and transform only). */\nfunction lifeFrames(from: string, to: string): Keyframe[] {\n return [\n { opacity: 0, transform: from, offset: 0 },\n { opacity: 1, transform: \"none\", offset: 0.14 },\n { opacity: 1, transform: \"none\", offset: 0.84 },\n { opacity: 0, transform: to, offset: 1 },\n ];\n}\n\nconst LEAF: Keyframe[] = [\n { transform: \"scaleX(1)\", offset: 0 },\n { transform: \"scaleX(1)\", offset: 0.25 },\n { transform: \"scaleX(-1)\", offset: 0.38 },\n { transform: \"scaleX(1)\", offset: 0.39 },\n { transform: \"scaleX(1)\", offset: 0.62 },\n { transform: \"scaleX(-1)\", offset: 0.75 },\n { transform: \"scaleX(-1)\", offset: 1 },\n];\n\nexport function Prop({ shown, size }: { shown: Shown; size: number }) {\n const ref = React.useRef<HTMLDivElement>(null);\n const leaf = React.useRef<HTMLDivElement>(null);\n const dir = shown.side ?? 1;\n React.useEffect(() => {\n const el = ref.current;\n if (!el || typeof el.animate !== \"function\") return;\n const from: Record<PropKind, [string, string]> = {\n say: [\"translateY(30%) scale(.5)\", \"translateY(-12%) scale(.9)\"],\n book: [\"translateY(40%) scale(.8)\", \"translateY(20%) scale(.9)\"],\n log: [`translateX(${190 * dir}%)`, `translateX(${190 * dir}%)`],\n glint: [\"scale(.2) rotate(-60deg)\", `translate(${-90 * dir}%, -170%) scale(.2) rotate(60deg)`],\n gift: [\"translateY(40%) scale(.3)\", \"translateY(-30%) scale(1.4)\"],\n };\n const [a, b] = from[shown.kind];\n const animations = [el.animate(lifeFrames(a, b), { duration: shown.ms, fill: \"both\", easing: \"ease-out\" })];\n if (shown.kind === \"book\" && leaf.current) animations.push(leaf.current.animate(LEAF, { duration: shown.ms, fill: \"both\", easing: \"ease-in-out\" }));\n if (shown.kind === \"glint\") animations.push(el.firstElementChild!.animate([{ transform: \"scale(1)\" }, { transform: \"scale(1.35)\" }, { transform: \"scale(1)\" }], { duration: 700, iterations: Math.ceil(shown.ms / 700), easing: \"ease-in-out\" }));\n return () => animations.forEach((x) => x.cancel());\n }, [shown, dir]);\n\n const unit = (n: number) => `calc(${size}cqw * ${n})`;\n const base: React.CSSProperties = { position: \"absolute\", pointerEvents: \"none\", opacity: 0 };\n\n if (shown.kind === \"say\")\n return (\n <div ref={ref} data-flock-prop=\"say\" style={{ ...base, left: \"58%\", top: \"-6%\", width: unit(0.34), height: unit(0.24), transformOrigin: \"20% 100%\" }}>\n <span\n style={{ position: \"absolute\", inset: 0, display: \"grid\", placeItems: \"center\", background: PAPER, border: `1.5px solid ${LINE}`, borderRadius: \"999px\", color: INK, font: `600 ${unit(0.17)}/1 var(--font-mono, ui-monospace, monospace)` }}\n >\n {shown.mark ?? \"…\"}\n </span>\n <span style={{ position: \"absolute\", left: \"14%\", bottom: \"-12%\", width: unit(0.07), height: unit(0.07), background: PAPER, borderRight: `1.5px solid ${LINE}`, borderBottom: `1.5px solid ${LINE}`, transform: \"rotate(45deg)\" }} />\n </div>\n );\n\n if (shown.kind === \"book\")\n return (\n <div ref={ref} data-flock-prop=\"book\" style={{ ...base, left: \"17%\", bottom: \"-2%\", width: \"66%\", height: unit(0.2), transformOrigin: \"50% 100%\" }}>\n {[0, 1].map((n) => (\n <span key={n} style={{ position: \"absolute\", top: 0, bottom: 0, [n ? \"right\" : \"left\"]: 0, width: \"50%\", background: `repeating-linear-gradient(${PAPER} 0 18%, ${LINE} 18% 24%)`, border: `1.5px solid ${LINE}`, borderRadius: n ? \"0 3px 3px 0\" : \"3px 0 0 3px\" }} />\n ))}\n <div ref={leaf} style={{ position: \"absolute\", top: 0, bottom: 0, left: \"50%\", width: \"50%\", transformOrigin: \"0 50%\", background: PAPER, border: `1.5px solid ${LINE}`, borderRadius: \"0 3px 3px 0\" }} />\n </div>\n );\n\n if (shown.kind === \"log\")\n return (\n <div ref={ref} data-flock-prop=\"log\" style={{ ...base, left: \"22%\", bottom: \"-3%\", width: \"56%\", height: unit(0.17), background: PARCEL[2], borderRadius: \"999px\", boxShadow: `inset -${unit(0.04)} 0 0 ${PARCEL[1]}` }}>\n <span style={{ position: \"absolute\", left: 0, top: 0, bottom: 0, aspectRatio: \"1\", borderRadius: \"50%\", background: `radial-gradient(${PARCEL[0]} 0 25%, ${PARCEL[1]} 26% 55%, ${PARCEL[2]} 56%)`, border: `1px solid ${PARCEL[2]}` }} />\n </div>\n );\n\n if (shown.kind === \"glint\")\n return (\n <div ref={ref} data-flock-prop=\"glint\" style={{ ...base, [dir > 0 ? \"left\" : \"right\"]: \"94%\", bottom: \"2%\", width: unit(0.2), height: unit(0.2) }}>\n <span style={{ position: \"absolute\", inset: 0, background: PARCEL[0], clipPath: \"polygon(50% 0, 62% 38%, 100% 50%, 62% 62%, 50% 100%, 38% 62%, 0 50%, 38% 38%)\" }} />\n </div>\n );\n\n return (\n <div ref={ref} data-flock-prop=\"gift\" style={{ ...base, left: \"58%\", top: \"2%\", width: unit(0.26), height: unit(0.22), background: PARCEL[0], border: `1.5px solid ${PARCEL[2]}`, borderRadius: 2 }}>\n <span style={{ position: \"absolute\", left: \"44%\", top: 0, bottom: 0, width: \"12%\", background: PARCEL[2] }} />\n <span style={{ position: \"absolute\", top: \"42%\", left: 0, right: 0, height: \"16%\", background: PARCEL[2] }} />\n </div>\n );\n}\n"],"mappings":"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","names":["React","jsx","jsxs","side","tap"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export { MotionObserver, RotatingWord } from './
|
|
2
|
+
export { M as MotionObserver, R as RotatingWord } from './RotatingWord-D9s7FXFD.js';
|
|
3
3
|
|
|
4
4
|
/** Joins class names, skipping the falsy ones. */
|
|
5
5
|
declare function cx(...parts: Array<string | false | null | undefined>): string;
|